1/******/ (function() { // webpackBootstrap 2/******/ "use strict"; 3/******/ var __webpack_modules__ = ({ 4
5/***/ "./cartridges/app_purina/cartridge/client/default/js/search/search.js": 6/*!****************************************************************************!*\ 7 !*** ./cartridges/app_purina/cartridge/client/default/js/search/search.js ***! 8 \****************************************************************************/ 9/***/ (function(module, __unused_webpack_exports, __webpack_require__) { 10 11 12 13var productTile = __webpack_require__(/*! purina_core/productList/productTile */ "./cartridges/app_purina_core/cartridge/client/default/js/productList/productTile.js"); 14 15// Store teaser HTML for restoration when navigating back to page 1 16var teaserStore = {}; 17 18/** 19 * Update DOM elements with Ajax results 20 * 21 * @param {Object} $results - jQuery DOM element 22 * @param {string} selector - DOM element to look up in the $results 23 * @return {undefined} 24 */ 25function updateDom($results, selector) { 26 var $updates = $results.find(selector); 27 $(selector).empty().html($updates.html()); 28} 29 30/** 31 * Keep refinement panes expanded/collapsed after Ajax refresh 32 * 33 * @param {Object} $results - jQuery DOM element 34 * @return {undefined} 35 */ 36function handleRefinements($results) { 37 $(".refinement.active").each(function () { 38 $(this).removeClass("active"); 39 var activeDiv = $results.find("." + $(this)[0].className.replace(/ /g, ".")); 40 activeDiv.addClass("active"); 41 activeDiv.find("button.title").attr("aria-expanded", "true"); 42 }); 43 44 updateDom($results, ".refinements"); 45 46 $("div.refinements li").each(function() { 47 if ($(this).find("button i").hasClass("fa-check-square")) { 48 var refinementDiv = $(this).closest("div.refinement"); 49 refinementDiv.addClass("active"); 50 refinementDiv.find("button.title").attr("aria-expanded", "true"); 51 } 52 }); 53} 54 55/** 56 * Parse Ajax results and updated select DOM elements 57 * 58 * @param {string} response - Ajax response HTML code 59 * @return {undefined} 60 */ 61function parseResults(response) { 62 var $results = $(response); 63 var specialHandlers = { 64 ".refinements": handleRefinements 65 }; 66 67 // Update DOM elements that do not require special handling 68 [ 69 ".grid-header", 70 ".header-bar", 71 ".header.page-title", 72 ".product-grid", 73 ".show-more", 74 ".filter-bar", 75 ".results-count" 76 ].forEach(function (selector) { 77 updateDom($results, selector); 78 }); 79 80 Object.keys(specialHandlers).forEach(function (selector) { 81 specialHandlers[selector]($results); 82 }); 83} 84 85/** 86 * This function retrieves another page of content to display in the content search grid 87 * @param {JQuery} $element - the jquery element that has the click event attached 88 * @param {JQuery} $target - the jquery element that will receive the response 89 * @return {undefined} 90 */ 91function getContent($element, $target) { 92 var showMoreUrl = $element.data("url"); 93 $.ajax({ 94 url: showMoreUrl, 95 method: "GET", 96 success: function (response) { 97 $target.append(response); 98 // initialize product tile custom js functionality 99 productTile.init(); 100 }, 101 error: function () { 102 } 103 }); 104} 105 106/** 107 * Update sort option URLs from Ajax response 108 * 109 * @param {string} response - Ajax response HTML code 110 * @return {undefined} 111 */ 112function updateSortOptions(response) { 113 var $tempDom = $("<div>").append($(response)); 114 var sortOptions = $tempDom.find(".grid-footer").data("sort-options").options; 115 sortOptions.forEach(function (option) { 116 $("option." + option.id).val(option.url); 117 }); 118} 119 120/** 121 * Capture teaser tile HTML on initial page load 122 * Stores each teaser by its position for later restoration 123 * 124 * @return {undefined} 125 */ 126function captureTeasers() { 127 $('.teaser-tile').each(function() { 128 var $teaser = $(this); 129 var position = $teaser.data('teaser-position'); 130 131 if (position) { 132 // Store the entire outer HTML of the teaser region 133 teaserStore[position] = { 134 html: $teaser[0].outerHTML 135 }; 136 } 137 }); 138} 139 140/** 141 * Restore teaser tiles from stored HTML 142 * Called when navigating back to page 1 via AJAX 143 * 144 * @return {undefined} 145 */ 146function restoreTeasers() { 147 $('.teaser-placeholder').each(function() { 148 var $placeholder = $(this); 149 var position = $placeholder.data('teaser-position'); 150 151 if (teaserStore[position]) { 152 // Replace placeholder with the stored teaser HTML 153 $placeholder.replaceWith(teaserStore[position].html); 154 } 155 }); 156} 157 158/** 159 * Check if teasers should be shown based on URL parameters 160 * Teasers only show on first page with no sorting or refinements 161 * 162 * @param {string} url - The URL to check 163 * @return {boolean} - True if teasers should be shown 164 */ 165function isFirstPage(url) { 166 if (!url) return false;
167 168 var urlParams = new URLSearchParams(url.split('?')[1] || ''); 169 170 // Check if it's the first page 171 var startParam = urlParams.get('start'); 172 var isFirst = !startParam || startParam === '0' || startParam === 0; 173 174 if (!isFirst) return false; 175 176 // Check for custom sorting (srule parameter present means sorting is applied) 177 var hasCustomSorting = urlParams.has('srule'); 178 179 // Check for refinements 180 var hasRefinements = urlParams.has('pmin') || 181 urlParams.has('pmax') || 182 urlParams.has('prefn1') || 183 urlParams.has('preferences'); 184 185 // Teasers should only show on first page with no sorting or refinements 186 return isFirst && !hasCustomSorting && !hasRefinements; 187} 188 189/** 190* Sets a session cookie with a specified name, value, and expiration time. 191* 192* @param {string} name - The name of the cookie. 193* @param {string} value - The value to be stored in the cookie. 194* @param {number} hours - The number of hours until the cookie expires. 195*/ 196function setRefinementSessionCookie(name, value, hours) { 197 const date = new Date(); 198 date.setTime(date.getTime() + (hours * 60 * 60 * 1000)); 199 const expires = "expires=" + date.toUTCString(); 200 document.cookie = name + "=" + value + ";" + expires + ";path=/"; 201} 202 203/** 204* Retrieves the value of a specified cookie from the document's cookies. 205* 206* @param {string} name - The name of the cookie to retrieve. 207* @returns {string|null} The value of the cookie if found, otherwise null. 208*/ 209function getRefinementSessionCookie(name) { 210 const nameEQ = name + "="; 211 const ca = document.cookie.split(";"); 212 for (let i = 0; i < ca.length; i++) { 213 let c = ca[i]; 214 while (c.charAt(0) == ' ') c = c.substring(1, c.length); 215 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); 216 } 217 return null; 218} 219 220/** 221* Applies search filters based on a cookie value and updates the search results via an AJAX request. 222* 223* @param {Object} context - The context in which the filter is applied, typically a DOM element. 224* @param {string} filterCookieValue - The value of the filter to be applied, retrieved from a cookie. 225*/ 226function applyFiltersBasedOnCookie(context, filterCookieValue) { 227 $.spinner().start(); 228 $(context).trigger("search:filter"); 229 setRefinementSessionCookie("filterCookie", filterCookieValue, 2); 230 231 var sampleUrl = $(".refinement").find(".card-body").find("button").attr("data-href"); 232 if (sampleUrl) { 233 var preUrlPart = sampleUrl.split("Search-ShowAjax?")[0]; 234 } 235 var dataUrl = preUrlPart + "Search-ShowAjax?" + filterCookieValue; 236 $.ajax({ 237 url: dataUrl, 238 data: { 239 page: $(".grid-footer").data("page-number"), 240 selectedUrl: dataUrl 241 }, 242 method: "GET", 243 success: function (response) { 244 parseResults(response); 245 // initialize product tile custom js functionality 246 productTile.init(); 247 $.spinner().stop(); 248 $('.search-results-container').css('visibility', 'visible'); 249 }, 250 error: function () { 251 $.spinner().stop(); 252 $('.search-results-container').css('visibility', 'visible'); 253 } 254 }); 255} 256 257/** 258* Applies selection based on the value of an article tab cookie and a page query value. 259* If the query value from the cookie matches the page query value, it will show or hide 260* the search results container based on the cookie's "value" parameter. 261* 262* @param {string} articleTabCookieValue - The value of the article tab cookie, expected to be a query string. 263* @param {string} pageQueryValue - The current page's query value to compare against the cookie's query value. 264*/ 265function applySelectionBasedOnArticleCookie(articleTabCookieValue, pageQueryValue) { 266 const paramsArticleTabCookie = new URLSearchParams(articleTabCookieValue); 267 const articleCookieQueryValue = paramsArticleTabCookie.get("q"); 268 269 if (pageQueryValue == articleCookieQueryValue) { 270 const articleCookieShow = paramsArticleTabCookie.get("value"); 271 if (articleCookieShow == "show") { 272 $(".content-search").click(); 273 $('.search-results-container').css('visibility', 'visible'); 274 } else { 275 $('.search-results-container').css('visibility', 'visible'); 276 } 277 } else { 278 $('.search-results-container').css('visibility', 'visible'); 279 } 280 281} 282 283module.exports = { 284 filter: function () { 285 // Display refinements bar when Menu icon clicked 286 $(".search-results-container").on("click", "button.filter-results", function () { 287 $(".refinement-bar, .modal-background").show(); 288 $(".refinement-bar").siblings().attr("aria-hidden", true); 289 $(".refinement-bar").closest(".row").siblings().attr("aria-hidden", true); 290 $(".refinement-bar").closest(".tab-pane.active").siblings().attr("aria-hidden", true); 291 $(".refinement-bar").closest(".search-results-container.search-results").siblings().attr("aria-hidden", true); 292 $(".refinement-bar .close").focus(); 293 }); 294 }, 295 296 closeRefinements: function () { 297 // Refinements close button 298 $(".search-results-container").on("click", ".refinement-bar button.close, .modal-background", function () { 299 $(".refinement-bar, .modal-background").hide(); 300 $(".refinement-bar").siblings().attr("aria-hidden", false); 301 $(".refinement-bar").closest(".row").siblings().attr("aria-hidden", false); 302 $(".refinement-bar").closest(".tab-pane.active").siblings().attr("aria-hidden", false); 303 $(".refinement-bar").closest(".search-results-container.search-results").siblings().attr("aria-hidden", false); 304 $(".btn.filter-results").focus(); 305 }); 306 }, 307 308 resize: function () { 309 // Close refinement bar and hide modal background if user resizes browser 310 $(window).resize(function () { 311 $(".refinement-bar, .modal-background").hide(); 312 $(".refinement-bar").siblings().attr("aria-hidden", false); 313 $(".refinement-bar").closest(".row").siblings().attr("aria-hidden", false); 314 $(".refinement-bar").closest(".tab-pane.active").siblings().attr("aria-hidden", false); 315 $(".refinement-bar").closest(".search-results-container.search-results").siblings().attr("aria-hidden", false); 316 }); 317 }, 318 319 sort: function () { 320 // Handle sort order menu selection 321 $(".search-results-container").on("change", "[name=sort-order]", function (e) { 322 e.preventDefault(); 323 324 $.spinner().start(); 325 $(this).trigger("search:sort", this.value); 326 $.ajax({ 327 url: this.value, 328 data: { selectedUrl: this.value }, 329 method: "GET", 330 success: function (response) { 331 $(".product-grid").empty().html(response); 332 // initialize product tile custom js functionality 333 productTile.init(); 334 $.spinner().stop(); 335 }, 336 error: function () { 337 $.spinner().stop(); 338 } 339 }); 340 }); 341 }, 342 343 showMore: function () { 344 // Show more products 345 $(".search-results-container").on("click", ".show-more button", function (e) { 346 e.stopPropagation(); 347 var showMoreUrl = $(this).data("url"); 348 e.preventDefault(); 349 350 $.spinner().start(); 351 $(this).trigger("search:showMore", e); 352 $.ajax({ 353 url: showMoreUrl, 354 data: { selectedUrl: showMoreUrl }, 355 method: "GET", 356 success: function (response) { 357 $(".grid-footer").replaceWith(response); 358 updateSortOptions(response); 359 // initialize product tile custom js functionality 360 productTile.init(); 361 $.spinner().stop(); 362 }, 363 error: function () { 364 $.spinner().stop(); 365 } 366 }); 367 }); 368 }, 369 370 applyFilter: function () { 371 // Handle refinement value selection and reset click 372 $(".search-results-container").on( 373 "click", 374 ".refinements li button, .refinement-bar button.reset, .filter-value button, .swatch-filter button", 375 function (e) { 376 e.preventDefault(); 377 e.stopPropagation(); 378 379 $.spinner().start(); 380 $(this).trigger("search:filter", e); 381 var attributeId = "#" + $(this).find("span").last().attr("id"); 382 if ($(this).data("href")) { 383 var filterData = $(this).data("href").split("Search-ShowAjax?")[1]; 384 setRefinementSessionCookie("filterCookie", filterData, 2); 385 } 386 $.ajax({ 387 url: $(this).data("href"), 388 data: { 389 page: $(".grid-footer").data("page-number"), 390 selectedUrl: $(this).data("href") 391 }, 392 method: "GET", 393 success: function (response) { 394 parseResults(response); 395 // initialize product tile custom js functionality 396 productTile.init(); 397 $.spinner().stop(); 398 $(attributeId).parent("button").focus(); 399 }, 400 error: function () { 401 $.spinner().stop(); 402 $(attributeId).parent("button").focus(); 403 } 404 }); 405 }); 406 }, 407 408 showContentTab: function () { 409 // Display content results from the search 410 $(".search-results-container").on("click", ".content-search", function () { 411 if ($("#content-search-results").html() === "") { 412 getContent($(this), $("#content-search-results")); 413 } 414 415 const element = document.querySelector(".page"); 416 const queryString = element.getAttribute("data-querystring"); 417 const paramsQueryString = new URLSearchParams(queryString); 418 const pageQuery = paramsQueryString.get("q"); 419 420 setRefinementSessionCookie("articleTab", "q=" + pageQuery +"&value=show", 2); 421 }); 422 423 // Display the next page of content results from the search 424 $(".search-results-container").on("click", ".show-more-content button", function () { 425 getContent($(this), $("#content-search-results")); 426 $(".show-more-content").remove(); 427 }); 428 }, 429 430 showProductPagination: function () { 431 $(document).on("click", ".js-pagination-button", function (e) { 432 e.preventDefault(); 433 var $target = $(e.currentTarget); 434 var url = $target.data("url"); 435 436 // do nothing if the url is not found 437 if (!url) { 438 return; 439 } 440 441 $.spinner().start(); 442 $(this).trigger("search:showMore", e); 443 $.ajax({ 444 url: url, 445 method: "GET", 446 success: function (response) { 447 $(".product-grid").empty().html(response); 448 updateSortOptions(response); 449 450 // Restore teasers if navigating back to page 1 451 if (isFirstPage(url)) { 452 setTimeout(function() { 453 restoreTeasers(); 454 }, 50); 455 } 456 457 // initialize product tile custom js functionality 458 //productTile.init(); 459 $.spinner().stop(); 460 }, 461 error: function () { 462 $.spinner().stop(); 463 } 464 }); 465 }); 466 }, 467 468 /** 469 * Applies filter settings from the session cookie to the current search results page. 470 * If the filter settings in the session cookie match the current page's category ID (cgid),
471 * it triggers a search filter event, updates the session cookie, and makes an AJAX request 472 * to fetch and display the filtered search results. 473 * 474 * @function 475 * @returns {void} 476 */ 477 applyFilterFromSession: function () { 478 const element = document.querySelector(".page"); 479 const queryString = element.getAttribute("data-querystring"); 480 const paramsQueryString = new URLSearchParams(queryString); 481 const pageCgid = paramsQueryString.get("cgid"); 482 const pageQueryValue = paramsQueryString.get("q"); 483 var filterCookieValue = getRefinementSessionCookie("filterCookie"); 484 var articleTabCookieValue = getRefinementSessionCookie("articleTab"); 485 486 if (pageCgid != null) { 487 // category page 488 if (filterCookieValue != null) { 489 const paramsFilterCookie = new URLSearchParams(filterCookieValue); 490 const filterCookieCgid = paramsFilterCookie.get("cgid"); 491 492 if (pageCgid == filterCookieCgid) { 493 applyFiltersBasedOnCookie(this, filterCookieValue); 494 } else { 495 $('.search-results-container').css('visibility', 'visible'); 496 } 497 } else { 498 $('.search-results-container').css('visibility', 'visible'); 499 } 500 501 } else if (pageQueryValue != null) { 502 // query page 503 504 var productSearchElement = document.querySelector(".product-search"); 505 var isActive = productSearchElement && productSearchElement.classList.contains("active"); 506 507 // Check if there is no element with the class 'refinement-bar' 508 var refinementBarElement = document.querySelector(".refinement-bar"); 509 var isRefinementBarAbsent = !refinementBarElement; 510 511 // If both conditions are met - products not present, switch to article tab 512 if (isActive && isRefinementBarAbsent) { 513 $(".content-search").click(); 514 $('.search-results-container').css('visibility', 'visible'); 515 } else { 516 // products present on query page 517 518 if (articleTabCookieValue == null && filterCookieValue == null) { 519 520 $('.search-results-container').css('visibility', 'visible'); 521 522 } else if (articleTabCookieValue != null && filterCookieValue == null) { 523 524 applySelectionBasedOnArticleCookie(articleTabCookieValue, pageQueryValue); 525 526 } else if (filterCookieValue != null && articleTabCookieValue == null) { 527 528 const paramsFilterCookie = new URLSearchParams(filterCookieValue); 529 const filterCookieQueryValue = paramsFilterCookie.get("q"); 530 if (pageQueryValue == filterCookieQueryValue) { 531 applyFiltersBasedOnCookie(this, filterCookieValue); 532 } else { 533 $('.search-results-container').css('visibility', 'visible'); 534 } 535 536 } else { 537 // both cookie values are present 538 const paramsArticleTabCookie = new URLSearchParams(articleTabCookieValue); 539 const articleCookieQueryValue = paramsArticleTabCookie.get("q"); 540 541 if (pageQueryValue == articleCookieQueryValue) { 542 const articleCookieShow = paramsArticleTabCookie.get("value"); 543 if (articleCookieShow == "show") { 544 $(".content-search").click(); 545 $('.search-results-container').css('visibility', 'visible'); 546 } else { 547 // filter query logic 548 const paramsFilterCookie = new URLSearchParams(filterCookieValue); 549 const filterCookieQueryValue = paramsFilterCookie.get("q"); 550 if (pageQueryValue == filterCookieQueryValue) { 551 applyFiltersBasedOnCookie(this, filterCookieValue); 552 } else { 553 $('.search-results-container').css('visibility', 'visible'); 554 } 555 } 556 } else { 557 // filter query logic 558 const paramsFilterCookie = new URLSearchParams(filterCookieValue); 559 const filterCookieQueryValue = paramsFilterCookie.get("q"); 560 if (pageQueryValue == filterCookieQueryValue) { 561 applyFiltersBasedOnCookie(this, filterCookieValue); 562 } else { 563 $('.search-results-container').css('visibility', 'visible'); 564 } 565 } 566 567 } 568 } 569 } else { 570 $('.search-results-container').css('visibility', 'visible'); 571 } 572 }, 573 574 showProductTab: function () { 575 $(".search-results-container").on("click", ".product-search", function () { 576 const element = document.querySelector(".page"); 577 const queryString = element.getAttribute("data-querystring"); 578 const paramsQueryString = new URLSearchParams(queryString); 579 const pageQuery = paramsQueryString.get("q"); 580 var filterCookieValue = getRefinementSessionCookie("filterCookie"); 581 setRefinementSessionCookie("articleTab", "q=" + pageQuery +"&value=hide", 2); 582 583 const paramsFilterCookie = new URLSearchParams(filterCookieValue); 584 const filterCookieQueryValue = paramsFilterCookie.get("q"); 585 586 if (pageQuery == filterCookieQueryValue) { 587 applyFiltersBasedOnCookie(this, filterCookieValue); 588 } else { 589 $('.search-results-container').css('visibility', 'visible'); 590 } 591 592 593 }); 594 }, 595 596 captureTeasers: captureTeasers 597}; 598 599 600/***/ }), 601
602/***/ "./cartridges/app_purina_core/cartridge/client/default/js/components/focus.js": 603/*!************************************************************************************!*\ 604 !*** ./cartridges/app_purina_core/cartridge/client/default/js/components/focus.js ***! 605 \************************************************************************************/ 606/***/ (function(module) { 607 608 609 610module.exports = { 611 setTabNextFocus: function (focusParams) { 612 var KEYCODE_TAB = 9; 613 var isTabPressed = (focusParams.event.key === "Tab" || focusParams.event.keyCode === KEYCODE_TAB); 614 615 if (!isTabPressed) { 616 return; 617 } 618 619 var firstFocusableEl = $(focusParams.containerSelector + " " + focusParams.firstElementSelector); 620 var lastFocusableEl = $(focusParams.containerSelector + " " + focusParams.lastElementSelector); 621 622 if ($(focusParams.containerSelector + " " + focusParams.lastElementSelector).is(":disabled")) { 623 lastFocusableEl = $(focusParams.containerSelector + " " + focusParams.nextToLastElementSelector); 624 if ($(".product-quickview.product-set").length > 0) { 625 var linkElements = $(focusParams.containerSelector + " a#fa-link.share-icons"); 626 lastFocusableEl = linkElements[linkElements.length - 1]; 627 } 628 } 629 630 if (focusParams.event.shiftKey) /* shift + tab */ { 631 if ($(":focus").is(firstFocusableEl)) {
632 lastFocusableEl.focus(); 633 focusParams.event.preventDefault(); 634 } 635 } else /* tab */ { 636 if ($(":focus").is(lastFocusableEl)) { 637 firstFocusableEl.focus(); 638 focusParams.event.preventDefault(); 639 } 640 } 641 } 642}; 643 644 645/***/ }), 646
647/***/ "./cartridges/app_purina_core/cartridge/client/default/js/product/base.js": 648/*!********************************************************************************!*\ 649 !*** ./cartridges/app_purina_core/cartridge/client/default/js/product/base.js ***! 650 \********************************************************************************/ 651/***/ (function(module, __unused_webpack_exports, __webpack_require__) { 652 653 654var focusHelper = __webpack_require__(/*! ../components/focus */ "./cartridges/app_purina_core/cartridge/client/default/js/components/focus.js"); 655const Swiper = (__webpack_require__(/*! swiper */ "./node_modules/swiper/swiper.esm.js")["default"]); 656 657/** 658 * Retrieves the relevant pid value 659 * @param {jquery} $el - DOM container for a given add to cart button 660 * @return {string} - value to be used when adding product to cart 661 */ 662function getPidValue($el) { 663 var pid; 664 665 if ($("#quickViewModal").hasClass("show") && !$(".product-set").length) { 666 pid = $($el).closest(".modal-content").find(".product-quickview").data("pid"); 667 } else if ($(".product-set-detail").length || $(".product-set").length) { 668 pid = $($el).closest(".product-detail").find(".product-id").text(); 669 } else { 670 pid = $(".product-detail:not(\".bundle-item\")").data("pid"); 671 } 672 673 return pid; 674} 675 676/** 677 * Retrieve contextual quantity selector 678 * @param {jquery} $el - DOM container for the relevant quantity 679 * @return {jquery} - quantity selector DOM container 680 */ 681function getQuantitySelector($el) { 682 var quantitySelected; 683 if ($el && $(".set-items").length) { 684 quantitySelected = $($el).closest(".product-detail").find(".quantity-select"); 685 } else if ($el && $(".product-bundle").length) { 686 var quantitySelectedModal = $($el).closest(".modal-footer").find(".quantity-select"); 687 var quantitySelectedPDP = $($el).closest(".bundle-footer").find(".quantity-select"); 688 if (quantitySelectedModal.val() === undefined) { 689 quantitySelected = quantitySelectedPDP; 690 } else { 691 quantitySelected = quantitySelectedModal; 692 } 693 } else { 694 quantitySelected = $(".quantity-select"); 695 } 696 return quantitySelected; 697} 698 699/** 700 * Retrieves the value associated with the Quantity pull-down menu 701 * @param {jquery} $el - DOM container for the relevant quantity 702 * @return {string} - value found in the quantity input 703 */ 704function getQuantitySelected($el) { 705 return getQuantitySelector($el).val(); 706} 707 708/** 709 * Process the attribute values for an attribute that has image swatches 710 * 711 * @param {Object} attr - Attribute 712 * @param {string} attr.id - Attribute ID 713 * @param {Object[]} attr.values - Array of attribute value objects 714 * @param {string} attr.values.value - Attribute coded value 715 * @param {string} attr.values.url - URL to de/select an attribute value of the product 716 * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be 717 * selected. If there is no variant that corresponds to a specific combination of attribute 718 * values, an attribute may be disabled in the Product Detail Page 719 * @param {jQuery} $productContainer - DOM container for a given product 720 * @param {Object} msgs - object containing resource messages 721 */ 722function processSwatchValues(attr, $productContainer, msgs) { 723 attr.values.forEach(function (attrValue) { 724 var $attrValue = $productContainer.find("[data-attr=\"" + attr.id + "\"] [data-attr-value=\"" + 725 attrValue.value + "\"]"); 726 var $swatchButton = $attrValue.parent(); 727 728 if (attrValue.selected) { 729 $attrValue.addClass("selected"); 730 $attrValue.siblings(".selected-assistive-text").text(msgs.assistiveSelectedText); 731 } else { 732 $attrValue.removeClass("selected"); 733 $attrValue.siblings(".selected-assistive-text").empty(); 734 } 735 736 if (attrValue.url) { 737 $swatchButton.attr("data-url", attrValue.url); 738 } else { 739 $swatchButton.removeAttr("data-url"); 740 } 741 742 // Disable if not selectable 743 $attrValue.removeClass("selectable unselectable"); 744 745 $attrValue.addClass(attrValue.selectable ? "selectable" : "unselectable"); 746 }); 747} 748 749/** 750 * Process attribute values associated with an attribute that does not have image swatches 751 * 752 * @param {Object} attr - Attribute 753 * @param {string} attr.id - Attribute ID 754 * @param {Object[]} attr.values - Array of attribute value objects 755 * @param {string} attr.values.value - Attribute coded value 756 * @param {string}
756 attr.values.url - URL to de/select an attribute value of the product 757 * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be 758 * selected. If there is no variant that corresponds to a specific combination of attribute 759 * values, an attribute may be disabled in the Product Detail Page 760 * @param {jQuery} $productContainer - DOM container for a given product 761 */ 762function processNonSwatchValues(attr, $productContainer) { 763 var $attr = "[data-attr=\"" + attr.id + "\"]"; 764 var $defaultOption = $productContainer.find($attr + " .select-" + attr.id + " option:first"); 765 $defaultOption.attr("value", attr.resetUrl); 766 767 attr.values.forEach(function (attrValue) { 768 var $attrValue = $productContainer 769 .find($attr + " [data-attr-value=\"" + attrValue.value + "\"]"); 770 $attrValue.attr("value", attrValue.url) 771 .removeAttr("disabled"); 772 773 if (!attrValue.selectable) { 774 $attrValue.attr("disabled", true); 775 } 776 }); 777} 778 779/** 780 * Routes the handling of attribute processing depending on whether the attribute has image 781 * swatches or not 782 * 783 * @param {Object} attrs - Attribute 784 * @param {string} attr.id - Attribute ID 785 * @param {jQuery} $productContainer - DOM element for a given product 786 * @param {Object} msgs - object containing resource messages 787 */ 788function updateAttrs(attrs, $productContainer, msgs) { 789 // Currently, the only attribute type that has image swatches is Color. 790 // add "size" attribute as well, as it is rendered as buttons in the PDP 791 // TODO: make this configurable in the Business Manager ? 792 var attrsWithSwatches = ["color", "size"]; 793 794 attrs.forEach(function (attr) { 795 if (attrsWithSwatches.indexOf(attr.id) > -1) { 796 processSwatchValues(attr, $productContainer, msgs); 797 } else { 798 processNonSwatchValues(attr, $productContainer); 799 } 800 }); 801} 802 803/** 804 * Updates the availability status in the Product Detail Page 805 * 806 * @param {Object} response - Ajax response object after an 807 * attribute value has been [de]selected 808 * @param {jQuery} $productContainer - DOM element for a given product 809 */ 810function updateAvailability(response, $productContainer) { 811 var availabilityValue = ""; 812 var availabilityMessages = response.product.availability.messages; 813 if (!response.product.readyToOrder) { 814 availabilityValue = "<li><div>" + response.resources.info_selectforstock + "</div></li>"; 815 } else { 816 availabilityMessages.forEach(function (message) { 817 availabilityValue += "<li><div>" + message + "</div></li>"; 818 }); 819 } 820 821 $($productContainer).trigger("product:updateAvailability", { 822 product: response.product, 823 $productContainer: $productContainer, 824 message: availabilityValue, 825 resources: response.resources 826 }); 827} 828 829/** 830 * Generates html for product attributes section 831 * 832 * @param {array} attributes - list of attributes 833 * @return {string} - Compiled HTML 834 */ 835function getAttributesHtml(attributes) { 836 if (!attributes) { 837 return ""; 838 } 839 840 var html = ""; 841 842 attributes.forEach(function (attributeGroup) { 843 if (attributeGroup.ID === "mainAttributes") { 844 attributeGroup.attributes.forEach(function (attribute) { 845 html += "<div class=\"attribute-values\">" + attribute.label + ": " 846 + attribute.value + "</div>"; 847 }); 848 } 849 }); 850 851 return html; 852} 853 854/** 855 * @typedef UpdatedOptionValue 856 * @type Object 857 * @property {string} id - Option value ID for look up 858 * @property {string} url - Updated option value selection URL 859 */ 860 861/** 862 * @typedef OptionSelectionResponse 863 * @type Object 864 * @property {string} priceHtml - Updated price HTML code 865 * @property {Object} options - Updated Options 866 * @property {string} options.id - Option ID 867 * @property {UpdatedOptionValue[]} options.values - Option values 868 */ 869 870/** 871 * Updates DOM using post-option selection Ajax response 872 * 873 * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option 874 * @param {jQuery}
874 $productContainer - DOM element for current product 875 */ 876function updateOptions(optionsHtml, $productContainer) { 877 // Update options 878 $productContainer.find(".product-options").empty().html(optionsHtml); 879} 880 881/** 882 * Dynamically creates Bootstrap carousel from response containing images 883 * @param {Object} product - Product object 884 * @param {jQuery} $productContainer - DOM element for a given product 885 */ 886function createCustomCarousel(product, $productContainer) { 887 var isProductOrderable = product.orderable; 888 var imgs = product.images.large; 889 var carousel = $productContainer.find(".product-details-slider"); 890 var swiperCarousel = $productContainer.find(".swiper-container"); 891 $(carousel).carousel("dispose"); 892 // destroy swiper thumbnails 893 $(swiperCarousel).get(0).swiper.destroy(); 894 895 var carouselId = $(carousel).attr("id"); 896 $(carousel).empty().append("<div class='carousel-inner'></div>"); 897 $(swiperCarousel).empty().append("<div class='swiper-wrapper'></div>"); 898 for (var i = 0; i < imgs.length; i++) { 899 // set images for main carousel 900 const carouselItem = ` 901 <div class="carousel-item ${isProductOrderable ? "" : "out-of-stock"}"> 902 <img src="${imgs[i].url}" 903 class="d-block img-fluid" 904 alt="${imgs[i].alt} image number ${parseInt(imgs[i].index, 10)}" 905 title="${imgs[i].title}" 906 itemprop="image" 907 /> 908 <div class="overlay out-of-stock"> 909 <span class="out-of-stock-label">Out of stock</span> 910 </div> 911 </div> 912 `; 913 $(carouselItem).appendTo($(carousel).find(".carousel-inner")); 914 915 // set images for swiper carousel ( thumbnails ) 916 const swiperSlide = ` 917 <div class="swiper-slide thumb-items" data-target="#${carouselId}
917" data-slide-to="${i}"> 918 <img src="${imgs[i].url}" 919 class="img-fluid thumb-items-img" 920 alt="${imgs[i].alt} image number ${parseInt(imgs[i].index, 10)}" 921 title="${imgs[i].title}" 922 itemprop="image" 923 /> 924 </div> 925 `; 926 $(swiperSlide).appendTo($(swiperCarousel).find(".swiper-wrapper")); 927 } 928 $($(carousel).find(".carousel-item")).first().addClass("active"); 929 $($(swiperCarousel).find(".swiper-slide")).first().addClass("active"); 930 931 // initialize main carousel 932 $(carousel).carousel({ 933 interval: false 934 }); 935 936 // initialize swiper carousel 937 new Swiper(swiperCarousel.get(0), { 938 direction: "horizontal", 939 slidesPerView: 5, 940 freeMode: true, 941 loop: false 942 }); 943} 944 945/** 946 * Parses JSON from Ajax call made whenever an attribute value is [de]selected 947 * @param {Object} response - response from Ajax call 948 * @param {Object} response.product - Product object 949 * @param {string} response.product.id - Product ID 950 * @param {Object[]} response.product.variationAttributes - Product attributes 951 * @param {Object[]} response.product.images - Product images 952 * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required 953 * attributes have been selected. Used partially to 954 * determine whether the Add to Cart button can be enabled 955 * @param {jQuery} $productContainer - DOM element for a given product. 956 */ 957function handleVariantResponse(response, $productContainer) { 958 var isChoiceOfBonusProducts = 959 $productContainer.parents(".choose-bonus-product-dialog").length > 0; 960 var isVaraint; 961 if (response.product.variationAttributes) { 962 updateAttrs(response.product.variationAttributes, $productContainer, response.resources); 963 isVaraint = response.product.productType === "variant"; 964 if (isChoiceOfBonusProducts && isVaraint) { 965 $productContainer.parent(".bonus-product-item") 966 .data("pid", response.product.id); 967 968 $productContainer.parent(".bonus-product-item") 969 .data("ready-to-order", response.product.readyToOrder); 970 } 971 } 972 973 // Update primary images 974 createCustomCarousel(response.product, $productContainer); 975 976 // Update pricing 977 if (!isChoiceOfBonusProducts) { 978 var $priceSelector = $(".prices .price", $productContainer).length 979 ? $(".prices .price", $productContainer) 980 : $(".prices .price"); 981 $priceSelector.replaceWith(response.product.price.html); 982 } 983 984 // Update promotions 985 $productContainer.find(".promotions").empty().html(response.product.promotionsHtml); 986 987 updateAvailability(response, $productContainer); 988 989 if (isChoiceOfBonusProducts) { 990 var $selectButton = $productContainer.find(".select-bonus-product"); 991 $selectButton.trigger("bonusproduct:updateSelectButton", { 992 product: response.product, $productContainer: $productContainer 993 }); 994 } else { 995 // Enable "Add to Cart" button if all required attributes have been selected 996 $("button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global").trigger("product:updateAddToCart", { 997 product: response.product, $productContainer: $productContainer 998 }).trigger("product:statusUpdate", response.product); 999 } 1000 1001 // Update attributes 1002 $productContainer.find(".main-attributes").empty() 1003 .html(getAttributesHtml(response.product.attributes)); 1004} 1005 1006/** 1007 * @typespec UpdatedQuantity 1008 * @type Object 1009 * @property {boolean} selected - Whether the quantity has been selected 1010 * @property {string} value - The number of products to purchase 1011 * @property {string} url - Compiled URL that specifies variation attributes, product ID, options, 1012 * etc. 1013 */ 1014 1015/** 1016 * Updates the quantity DOM elements post Ajax call 1017 * @param {object} product - Product object containing quantity information 1018 * @param {jQuery} $productContainer - DOM container for a given product 1019 */
1020function updateQuantities(product, $productContainer) { 1021 if ($productContainer.parent(".bonus-product-item").length <= 0) { 1022 var optionsHtml = product.quantities.map(function (quantity) { 1023 var selected = quantity.selected ? " selected " : ""; 1024 return "<option value=\"" + quantity.value + "\" data-url=\"" + quantity.url + "\"" + 1025 selected + ">" + quantity.value + "</option>"; 1026 }).join(""); 1027 1028 getQuantitySelector($productContainer) 1029 .empty() 1030 .html(optionsHtml) 1031 .attr("disabled", (!product.available || !product.readyToOrder)) 1032 ; 1033 } 1034} 1035 1036function updateProductData(product, $productContainer) { 1037 var $productName = $productContainer.find(".product-name"); 1038 $productName.text(product.productName); 1039} 1040 1041/** 1042 * updates the product view when a product attribute is selected or deselected or when 1043 * changing quantity 1044 * @param {string} selectedValueUrl - the Url for the selected variation value 1045 * @param {jQuery} $productContainer - DOM element for current product 1046 */ 1047function attributeSelect(selectedValueUrl, $productContainer) { 1048 if (selectedValueUrl) { 1049 $("body").trigger("product:beforeAttributeSelect", 1050 { url: selectedValueUrl, container: $productContainer }); 1051 1052 $.ajax({ 1053 url: selectedValueUrl, 1054 method: "GET", 1055 success: function (data) { 1056 handleVariantResponse(data, $productContainer); 1057 updateOptions(data.product.optionsHtml, $productContainer); 1058 updateQuantities(data.product, $productContainer); 1059 updateProductData(data.product, $productContainer); 1060 $("body").trigger("product:afterAttributeSelect", 1061 { data: data, container: $productContainer }); 1062 $.spinner().stop(); 1063 }, 1064 error: function () { 1065 $.spinner().stop(); 1066 } 1067 }); 1068 } 1069} 1070 1071/** 1072 * Retrieves url to use when adding a product to the cart 1073 * 1074 * @return {string} - The provided URL to use when adding a product to the cart 1075 */ 1076function getAddToCartUrl() { 1077 return $(".add-to-cart-url").val(); 1078} 1079 1080/** 1081 * Parses the html for a modal window 1082 * @param {string} html - representing the body and footer of the modal window 1083 * 1084 * @return {Object} - Object with properties body and footer. 1085 */ 1086function parseHtml(html) { 1087 var $html = $("<div>").append($.parseHTML(html)); 1088 1089 var body = $html.find(".choice-of-bonus-product"); 1090 var footer = $html.find(".modal-footer").children(); 1091 1092 return { body: body, footer: footer }; 1093} 1094 1095/** 1096 * Retrieves url to use when adding a product to the cart 1097 * 1098 * @param {Object} data - data object used to fill in dynamic portions of the html 1099 */ 1100function chooseBonusProducts(data) { 1101 $(".modal-body").spinner().start(); 1102 1103 if ($("#chooseBonusProductModal").length !== 0) { 1104 $("#chooseBonusProductModal").remove(); 1105 } 1106 var bonusUrl; 1107 if (data.bonusChoiceRuleBased) { 1108 bonusUrl = data.showProductsUrlRuleBased; 1109 } else { 1110 bonusUrl = data.showProductsUrlListBased; 1111 } 1112 1113 var htmlString = "<!-- Modal -->" 1114 + "<div class=\"modal fade\" id=\"chooseBonusProductModal\" tabindex=\"-1\" role=\"dialog\">" 1115 + "<span class=\"enter-message sr-only\" ></span>" 1116 + "<div class=\"modal-dialog choose-bonus-product-dialog\" " 1117 + "data-total-qty=\"" + data.maxBonusItems + "\"" 1118 + "data-UUID=\"" + data.uuid + "\"" 1119 + "data-pliUUID=\"" + data.pliUUID + "\"" 1120 + "data-addToCartUrl=\"" + data.addToCartUrl + "\"" 1121 + "data-pageStart=\"0\"" 1122 + "data-pageSize=\"" + data.pageSize + "\"" 1123 + "data-moreURL=\"" + data.showProductsUrlRuleBased + "\"" 1124 + "data-bonusChoiceRuleBased=\"" + data.bonusChoiceRuleBased + "\">" 1125 + "<!-- Modal content-->" 1126 + "<div class=\"modal-content\">" 1127 + "<div class=\"modal-header\">" 1128 + " <span class=\"\">" + data.labels.selectprods + "</span>" 1129 + " <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">"
1130 + " <span aria-hidden=\"true\">×</span>" 1131 + " <span class=\"sr-only\"> </span>" 1132 + " </button>" 1133 + "</div>" 1134 + "<div class=\"modal-body\"></div>" 1135 + "<div class=\"modal-footer\"></div>" 1136 + "</div>" 1137 + "</div>" 1138 + "</div>"; 1139 $("body").append(htmlString); 1140 $(".modal-body").spinner().start(); 1141 1142 $.ajax({ 1143 url: bonusUrl, 1144 method: "GET", 1145 dataType: "json", 1146 success: function (response) { 1147 var parsedHtml = parseHtml(response.renderedTemplate); 1148 $("#chooseBonusProductModal .modal-body").empty(); 1149 $("#chooseBonusProductModal .enter-message").text(response.enterDialogMessage); 1150 $("#chooseBonusProductModal .modal-header .close .sr-only").text(response.closeButtonText); 1151 $("#chooseBonusProductModal .modal-body").html(parsedHtml.body); 1152 $("#chooseBonusProductModal .modal-footer").html(parsedHtml.footer); 1153 $("#chooseBonusProductModal").modal("show"); 1154 $.spinner().stop(); 1155 }, 1156 error: function () { 1157 $.spinner().stop(); 1158 } 1159 }); 1160} 1161 1162/** 1163 * Updates the Mini-Cart quantity value after the customer has pressed the "Add to Cart" button 1164 * @param {string} response - ajax response from clicking the add to cart button 1165 */ 1166function handlePostCartAdd(response) { 1167 $(".minicart").trigger("count:update", response); 1168 var messageType = response.error ? "alert-danger" : "alert-success"; 1169 // show add to cart toast 1170 if (response.newBonusDiscountLineItem 1171 && Object.keys(response.newBonusDiscountLineItem).length !== 0) { 1172 chooseBonusProducts(response.newBonusDiscountLineItem); 1173 } else { 1174 if ($(".add-to-cart-messages").length === 0) { 1175 $("body").append( 1176 "<div class=\"add-to-cart-messages\"></div>" 1177 ); 1178 } 1179 1180 $(".add-to-cart-messages").append( 1181 "<div class=\"alert " + messageType + " add-to-basket-alert text-center\" role=\"alert\">" 1182 + response.message 1183 + "</div>" 1184 ); 1185 1186 setTimeout(function () { 1187 $(".add-to-basket-alert").remove(); 1188 }, 5000); 1189 } 1190} 1191 1192/** 1193 * Retrieves the bundle product item ID's for the Controller to replace bundle master product 1194 * items with their selected variants 1195 * 1196 * @return {string[]} - List of selected bundle product item ID's 1197 */ 1198function getChildProducts() { 1199 var childProducts = []; 1200 $(".bundle-item").each(function () { 1201 childProducts.push({ 1202 pid: $(this).find(".product-id").text(), 1203 quantity: parseInt($(this).find("label.quantity").data("quantity"), 10) 1204 }); 1205 }); 1206 1207 return childProducts.length ? JSON.stringify(childProducts) : []; 1208} 1209 1210/** 1211 * Retrieve product options 1212 * 1213 * @param {jQuery} $productContainer - DOM element for current product 1214 * @return {string} - Product options and their selected values 1215 */ 1216function getOptions($productContainer) { 1217 var options = $productContainer 1218 .find(".product-option") 1219 .map(function () { 1220 var $elOption = $(this).find(".options-select"); 1221 var urlValue = $elOption.val(); 1222 var selectedValueId = $elOption.find("option[value=\"" + urlValue + "\"]") 1223 .data("value-id"); 1224 return { 1225 optionId: $(this).data("option-id"), 1226 selectedValueId: selectedValueId 1227 }; 1228 }).toArray(); 1229 1230 return JSON.stringify(options); 1231} 1232 1233/** 1234 * Makes a call to the server to report the event of adding an item to the cart 1235 * 1236 * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false 1237 */ 1238function miniCartReportingUrl(url) { 1239 if (url) { 1240 $.ajax({ 1241 url: url, 1242 method: "GET", 1243 success: function () { 1244 // reporting urls hit on the server 1245 }, 1246 error: function () { 1247 // no reporting urls hit on the server 1248 } 1249 }); 1250 } 1251} 1252 1253module.exports = { 1254 attributeSelect: attributeSelect, 1255 methods: { 1256 editBonusProducts: function (data) { 1257 chooseBonusProducts(data); 1258 } 1259 }, 1260 1261 focusChooseBonusProductModal: function () { 1262 $("body").on("shown.bs.modal", "#chooseBonusProductModal", function () { 1263 $("#chooseBonusProductModal").siblings().attr("aria-hidden", "true"); 1264 $("#chooseBonusProductModal .close").focus(); 1265 }); 1266 }, 1267 1268 onClosingChooseBonusProductModal: function () { 1269 $("body").on("hidden.bs.modal", "#chooseBonusProductModal", function () { 1270 $("#chooseBonusProductModal").siblings().attr("aria-hidden", "false"); 1271 }); 1272 }, 1273 1274 trapChooseBonusProductModalFocus: function () { 1275 $("body").on("keydown", "#chooseBonusProductModal", function (e) { 1276 var focusParams = { 1277 event: e, 1278 containerSelector: "#chooseBonusProductModal", 1279 firstElementSelector: ".close", 1280 lastElementSelector: ".add-bonus-products" 1281 }; 1282 focusHelper.setTabNextFocus(focusParams); 1283 }); 1284 }, 1285 1286 colorAttribute: function () { 1287 $(document).on("click", "[data-attr=\"color\"] button", function (e) { 1288 e.preventDefault(); 1289 1290 if ($(this).attr("disabled")) { 1291 return; 1292 }
1293 var $productContainer = $(this).closest(".set-item"); 1294 if (!$productContainer.length) { 1295 $productContainer = $(this).closest(".product-detail"); 1296 } 1297 1298 attributeSelect($(this).attr("data-url"), $productContainer); 1299 }); 1300 }, 1301 1302 selectAttribute: function () { 1303 $(document).on("change", "select[class*=\"select-\"], .options-select", function (e) { 1304 e.preventDefault(); 1305 1306 var $productContainer = $(this).closest(".set-item"); 1307 if (!$productContainer.length) { 1308 $productContainer = $(this).closest(".product-detail"); 1309 } 1310 attributeSelect(e.currentTarget.value, $productContainer); 1311 }); 1312 }, 1313 1314 availability: function () { 1315 $(document).on("change", ".quantity-select", function (e) { 1316 e.preventDefault(); 1317 1318 var $productContainer = $(this).closest(".product-detail"); 1319 if (!$productContainer.length) { 1320 $productContainer = $(this).closest(".modal-content").find(".product-quickview"); 1321 } 1322 1323 if ($(".bundle-items", $productContainer).length === 0) { 1324 attributeSelect($(e.currentTarget).find("option:selected").data("url"), 1325 $productContainer); 1326 } 1327 }); 1328 }, 1329 1330 addToCart: function () { 1331 $(document).on("click", "button.add-to-cart, button.add-to-cart-global", function () { 1332 var addToCartUrl; 1333 var pid; 1334 var pidsObj; 1335 var setPids; 1336 1337 $("body").trigger("product:beforeAddToCart", this); 1338 1339 if ($(".set-items").length && $(this).hasClass("add-to-cart-global")) { 1340 setPids = []; 1341 1342 $(".product-detail").each(function () { 1343 if (!$(this).hasClass("product-set-detail")) { 1344 setPids.push({ 1345 pid: $(this).find(".product-id").text(), 1346 qty: $(this).find(".quantity-select").val(), 1347 options: getOptions($(this)) 1348 }); 1349 } 1350 }); 1351 pidsObj = JSON.stringify(setPids); 1352 } 1353 1354 pid = getPidValue($(this)); 1355 1356 var $productContainer = $(this).closest(".product-detail");
1357 if (!$productContainer.length) { 1358 $productContainer = $(this).closest(".quick-view-dialog").find(".product-detail"); 1359 } 1360 1361 addToCartUrl = getAddToCartUrl(); 1362 1363 var form = { 1364 pid: pid, 1365 pidsObj: pidsObj, 1366 childProducts: getChildProducts(), 1367 quantity: getQuantitySelected($(this)) 1368 }; 1369 1370 if (!$(".bundle-item").length) { 1371 form.options = getOptions($productContainer); 1372 } 1373 1374 $(this).trigger("updateAddToCartFormData", form); 1375 if (addToCartUrl) { 1376 $.ajax({ 1377 url: addToCartUrl, 1378 method: "POST", 1379 data: form, 1380 success: function (data) { 1381 handlePostCartAdd(data); 1382 $("body").trigger("product:afterAddToCart", data); 1383 $.spinner().stop(); 1384 miniCartReportingUrl(data.reportingURL); 1385 }, 1386 error: function () { 1387 $.spinner().stop(); 1388 } 1389 }); 1390 } 1391 }); 1392 }, 1393 selectBonusProduct: function () { 1394 $(document).on("click", ".select-bonus-product", function () { 1395 var $choiceOfBonusProduct = $(this).parents(".choice-of-bonus-product"); 1396 var pid = $(this).data("pid"); 1397 var maxPids = $(".choose-bonus-product-dialog").data("total-qty"); 1398 var submittedQty = parseInt($choiceOfBonusProduct.find(".bonus-quantity-select").val(), 10); 1399 var totalQty = 0; 1400 $.each($("#chooseBonusProductModal .selected-bonus-products .selected-pid"), function () { 1401 totalQty += $(this).data("qty"); 1402 }); 1403 totalQty += submittedQty; 1404 var optionID = $choiceOfBonusProduct.find(".product-option").data("option-id"); 1405 var valueId = $choiceOfBonusProduct.find(".options-select option:selected").data("valueId"); 1406 if (totalQty <= maxPids) { 1407 var selectedBonusProductHtml = "" 1408 + "<div class=\"selected-pid row\" " 1409 + "data-pid=\"" + pid + "\"" 1410 + "data-qty=\"" + submittedQty + "\"" 1411 + "data-optionID=\"" + (optionID || "") + "\"" 1412 + "data-option-selected-value=\"" + (valueId || "") + "\"" 1413 + ">" 1414 + "<div class=\"col-sm-11 col-9 bonus-product-name\" >" 1415 + $choiceOfBonusProduct.find(".product-name").html() 1416 + "</div>" 1417 + "<div class=\"col-1\"><i class=\"fa fa-times\" aria-hidden=\"true\"></i></div>" 1418 + "</div>" 1419 ; 1420 $("#chooseBonusProductModal .selected-bonus-products").append(selectedBonusProductHtml); 1421 $(".pre-cart-products").html(totalQty); 1422 $(".selected-bonus-products .bonus-summary").removeClass("alert-danger"); 1423 } else { 1424 $(".selected-bonus-products .bonus-summary").addClass("alert-danger"); 1425 } 1426 }); 1427 }, 1428 removeBonusProduct: function () { 1429 $(document).on("click", ".selected-pid", function () { 1430 $(this).remove(); 1431 var $selected = $("#chooseBonusProductModal .selected-bonus-products .selected-pid"); 1432 var count = 0; 1433 if ($selected.length) { 1434 $selected.each(function () { 1435 count += parseInt($(this).data("qty"), 10); 1436 }); 1437 } 1438 1439 $(".pre-cart-products").html(count); 1440 $(".selected-bonus-products .bonus-summary").removeClass("alert-danger"); 1441 }); 1442 }, 1443 enableBonusProductSelection: function () { 1444 $("body").on("bonusproduct:updateSelectButton", function (e, response) { 1445 $("button.select-bonus-product", response.$productContainer).attr("disabled", 1446 (!response.product.readyToOrder || !response.product.available)); 1447 var pid = response.product.id;
1448 $("button.select-bonus-product", response.$productContainer).data("pid", pid); 1449 }); 1450 }, 1451 showMoreBonusProducts: function () { 1452 $(document).on("click", ".show-more-bonus-products", function () { 1453 var url = $(this).data("url"); 1454 $(".modal-content").spinner().start(); 1455 $.ajax({ 1456 url: url, 1457 method: "GET", 1458 success: function (html) { 1459 var parsedHtml = parseHtml(html); 1460 $(".modal-body").append(parsedHtml.body); 1461 $(".show-more-bonus-products:first").remove(); 1462 $(".modal-content").spinner().stop(); 1463 }, 1464 error: function () { 1465 $(".modal-content").spinner().stop(); 1466 } 1467 }); 1468 }); 1469 }, 1470 addBonusProductsToCart: function () { 1471 $(document).on("click", ".add-bonus-products", function () { 1472 var $readyToOrderBonusProducts = $(".choose-bonus-product-dialog .selected-pid"); 1473 var queryString = "?pids="; 1474 var url = $(".choose-bonus-product-dialog").data("addtocarturl"); 1475 var pidsObject = { 1476 bonusProducts: [] 1477 }; 1478 1479 $.each($readyToOrderBonusProducts, function () { 1480 var qtyOption = 1481 parseInt($(this) 1482 .data("qty"), 10); 1483 1484 var option = null; 1485 if (qtyOption > 0) { 1486 if ($(this).data("optionid") && $(this).data("option-selected-value")) { 1487 option = {}; 1488 option.optionId = $(this).data("optionid"); 1489 option.productId = $(this).data("pid"); 1490 option.selectedValueId = $(this).data("option-selected-value"); 1491 } 1492 pidsObject.bonusProducts.push({ 1493 pid: $(this).data("pid"), 1494 qty: qtyOption, 1495 options: [option] 1496 }); 1497 pidsObject.totalQty = parseInt($(".pre-cart-products").html(), 10); 1498 } 1499 }); 1500 queryString += JSON.stringify(pidsObject); 1501 queryString = queryString + "&uuid=" + $(".choose-bonus-product-dialog").data("uuid"); 1502 queryString = queryString + "&pliuuid=" + $(".choose-bonus-product-dialog").data("pliuuid"); 1503 $.spinner().start(); 1504 $.ajax({ 1505 url: url + queryString, 1506 method: "POST", 1507 success: function (data) { 1508 $.spinner().stop(); 1509 if (data.error) { 1510 $("#chooseBonusProductModal").modal("hide"); 1511 if ($(".add-to-cart-messages").length === 0) { 1512 $("body").append("<div class=\"add-to-cart-messages\"></div>"); 1513 } 1514 $(".add-to-cart-messages").append( 1515 "<div class=\"alert alert-danger add-to-basket-alert text-center\"" 1516 + " role=\"alert\">" 1517 + data.errorMessage + "</div>" 1518 ); 1519 setTimeout(function () { 1520 $(".add-to-basket-alert").remove(); 1521 }, 3000); 1522 } else { 1523 $(".configure-bonus-product-attributes").html(data); 1524 $(".bonus-products-step2").removeClass("hidden-xl-down"); 1525 $("#chooseBonusProductModal").modal("hide"); 1526 1527 if ($(".add-to-cart-messages").length === 0) { 1528 $("body").append("<div class=\"add-to-cart-messages\"></div>"); 1529 } 1530 $(".minicart-quantity").html(data.totalQty); 1531 $(".add-to-cart-messages").append( 1532 "<div class=\"alert alert-success add-to-basket-alert text-center\"" 1533 + " role=\"alert\">" 1534 + data.msgSuccess + "</div>" 1535 ); 1536 setTimeout(function () { 1537 $(".add-to-basket-alert").remove(); 1538 if ($(".cart-page").length) { 1539 location.reload(); 1540 } 1541 }, 1500); 1542 } 1543 }, 1544 error: function () { 1545 $.spinner().stop(); 1546 } 1547 }); 1548 }); 1549 }, 1550 1551 getPidValue: getPidValue, 1552 getQuantitySelected: getQuantitySelected, 1553 miniCartReportingUrl: miniCartReportingUrl 1554}; 1555 1556 1557/***/ }), 1558
1559/***/ "./cartridges/app_purina_core/cartridge/client/default/js/product/quickView.js": 1560/*!*************************************************************************************!*\ 1561 !*** ./cartridges/app_purina_core/cartridge/client/default/js/product/quickView.js ***! 1562 \*************************************************************************************/ 1563/***/ (function(module, __unused_webpack_exports, __webpack_require__) { 1564 1565 1566 1567var base = __webpack_require__(/*! ./base */ "./cartridges/app_purina_core/cartridge/client/default/js/product/base.js"); 1568var focusHelper = __webpack_require__(/*! ../components/focus */ "./cartridges/app_purina_core/cartridge/client/default/js/components/focus.js"); 1569 1570/** 1571 * Generates the modal window on the first call. 1572 * 1573 */ 1574function getModalHtmlElement() { 1575 if ($("#quickViewModal").length !== 0) { 1576 $("#quickViewModal").remove(); 1577 } 1578 var htmlString = "<!-- Modal -->" 1579 + "<div class=\"modal fade\" id=\"quickViewModal\" role=\"dialog\">" 1580 + "<span class=\"enter-message sr-only\" ></span>" 1581 + "<div class=\"modal-dialog quick-view-dialog\">" 1582 + "<!-- Modal content-->" 1583 + "<div class=\"modal-content\">" 1584 + "<div class=\"modal-header\">" 1585 + " <a class=\"full-pdp-link\" href=\"\"></a>" 1586 + " <button type=\"button\" class=\"close pull-right\" data-dismiss=\"modal\">" 1587 + " <span aria-hidden=\"true\">×</span>" 1588 + " <span class=\"sr-only\"> </span>" 1589 + " </button>" 1590 + "</div>" 1591 + "<div class=\"modal-body\"></div>" 1592 + "<div class=\"modal-footer\"></div>" 1593 + "</div>" 1594 + "</div>" 1595 + "</div>"; 1596 $("body").append(htmlString); 1597} 1598 1599/** 1600 * @typedef {Object} QuickViewHtml 1601 * @property {string} body - Main Quick View body 1602 * @property {string} footer - Quick View footer content 1603 */ 1604 1605/** 1606 * Parse HTML code in Ajax response 1607 * 1608 * @param {string} html - Rendered HTML from quickview template 1609 * @return {QuickViewHtml} - QuickView content components 1610 */ 1611function parseHtml(html) { 1612 var $html = $("<div>").append($.parseHTML(html)); 1613 1614 var body = $html.find(".product-quickview"); 1615 var footer = $html.find(".modal-footer").children(); 1616 1617 return { body: body, footer: footer }; 1618} 1619 1620/** 1621 * replaces the content in the modal window on for the selected product variation. 1622 * @param {string} selectedValueUrl - url to be used to retrieve a new product model 1623 */ 1624function fillModalElement(selectedValueUrl) { 1625 // SMART ORDER REFILL - FIX BASE BUG - BEGIN 1626 var modalBody = $("#quickViewModal").find(".modal-body"); 1627 var modalFooter = $("#quickViewModal").find(".modal-footer"); 1628 modalBody.spinner().start(); 1629 $.ajax({ 1630 url: selectedValueUrl, 1631 method: "GET", 1632 dataType: "json", 1633 success: function (data) { 1634 var parsedHtml = parseHtml(data.renderedTemplate); 1635 1636 modalBody.empty(); 1637 modalBody.html(parsedHtml.body); 1638 modalFooter.html(parsedHtml.footer); 1639 // SMART ORDER REFILL - FIX BASE BUG - END 1640 $(".full-pdp-link").text(data.quickViewFullDetailMsg); 1641 $("#quickViewModal .full-pdp-link").attr("href", data.productUrl); 1642 $("#quickViewModal .size-chart").attr("href", data.productUrl); 1643 $("#quickViewModal .modal-header .close .sr-only").text(data.closeButtonText); 1644 $("#quickViewModal .enter-message").text(data.enterDialogMessage); 1645 $("#quickViewModal").modal("show"); 1646 $("body").trigger("quickview:ready"); 1647 1648 $.spinner().stop(); 1649 }, 1650 error: function () { 1651 $.spinner().stop(); 1652 } 1653 }); 1654} 1655 1656module.exports = { 1657 showQuickview: function () { 1658 $("body").on("click", ".quickview", function (e) { 1659 e.preventDefault(); 1660 var selectedValueUrl = $(this).closest("a.quickview").attr("href"); 1661 $(e.target).trigger("quickview:show"); 1662 getModalHtmlElement(); 1663 fillModalElement(selectedValueUrl); 1664 }); 1665 }, 1666 focusQuickview: function () { 1667 $("body").on("shown.bs.modal", "#quickViewModal", function () { 1668 $("#quickViewModal .close").focus(); 1669 }); 1670 }, 1671 trapQuickviewFocus: function () { 1672 $("body").on("keydown", "#quickViewModal", function (e) { 1673 var focusParams = { 1674 event: e, 1675 containerSelector: "#quickViewModal", 1676 firstElementSelector: ".full-pdp-link", 1677 lastElementSelector: ".add-to-cart-global", 1678 nextToLastElementSelector: ".modal-footer .quantity-select" 1679 }; 1680 focusHelper.setTabNextFocus(focusParams); 1681 }); 1682 }, 1683 availability: base.availability, 1684 addToCart: base.addToCart, 1685 showSpinner: function () { 1686 $("body").on("product:beforeAddToCart", function (e, data) { 1687 $(data).closest(".modal-content").spinner().start(); 1688 }); 1689 }, 1690 hideDialog: function () { 1691 $("body").on("product:afterAddToCart", function () { 1692 $("#quickViewModal").modal("hide"); 1693 }); 1694 }, 1695 beforeUpdateAttribute: function () { 1696 $("body").on("product:beforeAttributeSelect", function () { 1697 $(".modal.show .modal-content").spinner().start(); 1698 }); 1699 }, 1700 updateAttribute: function () { 1701 $("body").on("product:afterAttributeSelect", function (e, response) { 1702 if ($(".modal.show .product-quickview>.bundle-items").length) { 1703 $(".modal.show").find(response.container).data("pid", response.data.product.id); 1704 $(".modal.show").find(response.container) 1705 .find(".product-id").text(response.data.product.id); 1706 } else if ($(".set-items").length) { 1707 response.container.find(".product-id").text(response.data.product.id); 1708 } else { 1709 $(".modal.show .product-quickview").data("pid", response.data.product.id); 1710 $(".modal.show .full-pdp-link") 1711 .attr("href", response.data.product.selectedProductUrl); 1712 } 1713 }); 1714 }, 1715 updateAddToCart: function () { 1716 $("body").on("product:updateAddToCart", function (e, response) { 1717 // update local add to cart (for sets)
1718 $("button.add-to-cart", response.$productContainer).attr( 1719 "disabled", 1720 (!response.product.readyToOrder || !response.product.available) 1721 ); 1722 1723 // update global add to cart (single products, bundles) 1724 var dialog = $(response.$productContainer) 1725 .closest(".quick-view-dialog"); 1726 1727 $(".add-to-cart-global", dialog).attr( 1728 "disabled", 1729 !$(".global-availability", dialog).data("ready-to-order") 1730 || !$(".global-availability", dialog).data("available") 1731 ); 1732 }); 1733 }, 1734 updateAvailability: function () { 1735 $("body").on("product:updateAvailability", function (e, response) { 1736 // bundle individual products 1737 $(".product-availability", response.$productContainer) 1738 .data("ready-to-order", response.product.readyToOrder) 1739 .data("available", response.product.available) 1740 .find(".availability-msg") 1741 .empty() 1742 .html(response.message); 1743 1744 var dialog = $(response.$productContainer) 1745 .closest(".quick-view-dialog"); 1746 1747 if ($(".product-availability", dialog).length) { 1748 // bundle all products 1749 var allAvailable = $(".product-availability", dialog).toArray() 1750 .every(function (item) { return $(item).data("available"); }); 1751 1752 var allReady = $(".product-availability", dialog).toArray() 1753 .every(function (item) { return $(item).data("ready-to-order"); }); 1754 1755 $(".global-availability", dialog) 1756 .data("ready-to-order", allReady) 1757 .data("available", allAvailable); 1758 1759 $(".global-availability .availability-msg", dialog).empty() 1760 .html(allReady ? response.message : response.resources.info_selectforstock); 1761 } else { 1762 // single product 1763 $(".global-availability", dialog) 1764 .data("ready-to-order", response.product.readyToOrder) 1765 .data("available", response.product.available) 1766 .find(".availability-msg") 1767 .empty() 1768 .html(response.message); 1769 } 1770 }); 1771 } 1772}; 1773 1774 1775/***/ }), 1776
1777/***/ "./cartridges/app_purina_core/cartridge/client/default/js/productList/ProductTileClass.js": 1778/*!************************************************************************************************!*\ 1779 !*** ./cartridges/app_purina_core/cartridge/client/default/js/productList/ProductTileClass.js ***! 1780 \************************************************************************************************/ 1781/***/ (function(module) { 1782 1783 1784 1785/* globals $ */ 1786 1787function ProductTileClass(element) { 1788 // prepare dom 1789 this.element = element; 1790 // add initialized class for passed element 1791 this.element.classList.add("product-tile-initialized"); 1792 1793 this.sizeButtons = this.element.querySelectorAll(".select-size") || []; 1794 this.productImage = this.element.querySelector(".image-container"); 1795 this.productTitle = this.element.querySelector(".pdp-link a.link"); 1796 this.productPrice = this.element.querySelector(".price"); 1797 1798 // prepare events 1799 /** 1800 * Gets the selected size from the product variation attributes 1801 * @param {Object} data - product data 1802 * @returns {Object} - the selected size object 1803 */ 1804 this.getSelectedSize = function (data) { 1805 return (data?.product?.variationAttributes || []) 1806 .find(attribute => attribute.attributeId === "size") 1807 ?.values.find(value => value.selected) || {}; 1808 }; 1809 /** 1810 * Updates the product image with the selected size and url 1811 * @param {Object} selectedSize - the selected size object 1812 * @param {string} url - the url to the product page 1813 */ 1814 this.updateProductImage = function (selectedSize, url, data) { 1815 let linkElement = this.productImage?.querySelector("a"); 1816 let imageElement = linkElement?.querySelector("img"); 1817 let imageData = selectedSize?.images?.medium?.[0] || null; 1818 1819 if (imageElement && imageData) { 1820 imageElement.title = imageData.title || imageElement.title || ""; 1821 imageElement.src = imageData.url || imageElement.src || ""; 1822 imageElement.alt = imageData.alt || imageElement.alt || ""; 1823 } 1824 1825 if (linkElement) { 1826 linkElement.href = url || linkElement.href || ""; 1827 } 1828 1829 // Checks if any of the values in the variationAttributes array are selectable 1830 function isEmpty(value) { 1831 return value === null || value === undefined || value === "" || (Array.isArray(value) && value.length === 0) || (typeof value === "object" && Object.keys(value).length === 0); 1832 } 1833 var productData = !isEmpty(data) && "product" in data && !isEmpty(data.product) ? data.product : null; 1834 var variationAttribute = !isEmpty(productData) && "variationAttributes" in productData && !isEmpty(productData.variationAttributes[0]) ? productData.variationAttributes[0] : null; 1835 var variationAttributeValues = !isEmpty(variationAttribute) && "values" in variationAttribute && !isEmpty(variationAttribute.values) ? variationAttribute.values : null; 1836 var isProductInStock = productData && variationAttribute && variationAttributeValues && variationAttributeValues.some(variant => variant && variant.selectable); 1837 1838 // update the image container class 1839 if (!isProductInStock) { 1840 this.productImage.classList.toggle("out-of-stock", !selectedSize.selectable); 1841 } 1842 }; 1843 /** 1844 * Updates the product title with the given data 1845 * @param {Object} data - the data object containing the product name 1846 * @param {string} url - the url of the product page 1847 */ 1848 this.updateProductTitle = function (data, url) { 1849 if (this.productTitle) { 1850 this.productTitle.href = url || this.productTitle.href; 1851 this.productTitle.textContent = data?.product?.productName || this.productTitle.textContent; 1852 } 1853 }; 1854 /** 1855 * Updates the product price on the page 1856 * @param {Object} data - the data object containing the product price info 1857 */ 1858 this.updateProductPrice = function (data) { 1859 let updatePriceHtml = data?.product?.price?.html; 1860 if (updatePriceHtml) { 1861 let updatedPriceElement = document.createElement("div"); 1862 updatedPriceElement.innerHTML = updatePriceHtml; 1863 let priceElement = updatedPriceElement.querySelector(".price"); 1864 1865 this.productPrice.innerHTML = priceElement.innerHTML; 1866 } 1867 }; 1868 /** 1869 * Adds a class to the size buttons based on the selected size 1870 * @param {Object} selectedSize - the selected size 1871 */ 1872 this.addSelectedClass = function (selectedSize) { 1873 this.sizeButtons.forEach(sizeButton => { 1874 const isSelected = selectedSize && selectedSize.value === sizeButton.dataset.attrValue; 1875 sizeButton.classList.toggle("selected", isSelected); 1876 }); 1877 }; 1878 /** 1879 * Handles the successful response from the getVariation request 1880 * @param {Object} data - the response data from the getVariation request 1881 */ 1882 this.onGetVariationSuccess = function (url, data) {
1883 let selectedSize = this.getSelectedSize(data); 1884 this.updateProductImage(selectedSize, url, data); 1885 this.updateProductTitle(data, url); 1886 this.updateProductPrice(data); 1887 this.addSelectedClass(selectedSize); 1888 }; 1889 /** 1890 * Retrieves the variation data from the given URL 1891 * @param {string} url - The URL to retrieve the variation data from 1892 * @param {string} pdpUrl - The URL to the product page 1893 */ 1894 this.getVariationData = function (url, pdpUrl) { 1895 if (url) { 1896 $.ajax({ 1897 url: url, 1898 method: "GET", 1899 success: this.onGetVariationSuccess.bind(this, pdpUrl) 1900 }); 1901 } 1902 }; 1903 1904 // bind events to each size button 1905 this.sizeButtons.forEach(function (sizebutton) { 1906 let that = this; 1907 sizebutton.addEventListener("click", function (e) { 1908 e.preventDefault(); 1909 1910 // do not deselect the selected size 1911 if (sizebutton.classList.contains("selected")) { 1912 return; 1913 } 1914 1915 // get the variation data 1916 // and update the product image, title and price 1917 // and add the "selected" class to the selected size button 1918 that.getVariationData(sizebutton.getAttribute("value"), sizebutton.dataset.pdpUrl); 1919 }); 1920 }, this); 1921} 1922 1923module.exports = ProductTileClass
vendor: 24 bytes, lines 1923-1928
1923; 1924 1925 1926/***/ }), 1927 1928/***/ "./
1928cartridges/app_purina_core/cartridge/client/default/js/productList/productTile.js": 1929/*!*******************************************************************************************!*\ 1930 !*** ./cartridges/app_purina_core/cartridge/client/default/js/productList/productTile.js ***! 1931 \*******************************************************************************************/ 1932/***/ (function(module, __unused_webpack_exports, __webpack_require__) { 1933 1934 1935 1936/* globals $ */ 1937var ProductTileClass = __webpack_require__(/*! ./ProductTileClass */ "./cartridges/app_purina_core/cartridge/client/default/js/productList/ProductTileClass.js"); 1938var cache = {}; 1939 1940/** 1941* Initializes the DOM elements 1942*/ 1943function initializeDom() { 1944 cache.$document = $(document); 1945 cache.$productTiles = cache.$document.find(".product-tile, .product-tile-pd"); 1946} 1947 1948/** 1949* Initializes the events for the product tiles 1950*/ 1951function initializeEvents() { 1952 cache.$productTiles 1953 .not(".product-tile-initialized") 1954 .toArray() 1955 .forEach(function (productTile) { 1956 new ProductTileClass(productTile); 1957 }); 1958} 1959 1960module.exports = { 1961 init: function () { 1962 setTimeout(function () { 1963 initializeDom(); 1964 initializeEvents(); 1965 }, 1000); 1966 1967 } 1968}; 1969 1970 1971/***/ }), 1972
1973/***/ "./cartridges/app_purina_core/cartridge/client/default/js/util.js": 1974/*!************************************************************************!*\ 1975 !*** ./cartridges/app_purina_core/cartridge/client/default/js/util.js ***! 1976 \************************************************************************/ 1977/***/ (function(module) { 1978 1979 1980 1981module.exports = function (include) { 1982 if (typeof include === "function") { 1983 include(); 1984 } else if (typeof include === "object") { 1985 Object.keys(include).forEach(function (key) { 1986 if (typeof include[key] === "function") { 1987 include[key](); 1988 } 1989 }); 1990 } 1991}; 1992 1993 1994/***/ }), 1995
vendor: 4,009 bytes, lines 1996-2161
1996/***/ "./node_modules/ssr-window/ssr-window.esm.js": 1997/*!***************************************************!*\ 1998 !*** ./node_modules/ssr-window/ssr-window.esm.js ***! 1999 \***************************************************/ 2000/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 2001 2002__webpack_require__.r(__webpack_exports__); 2003/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2004/* harmony export */ "extend": function() { return /* binding */ extend; }, 2005/* harmony export */ "getDocument": function() { return /* binding */ getDocument; }, 2006/* harmony export */ "getWindow": function() { return /* binding */ getWindow; }, 2007/* harmony export */ "ssrDocument": function() { return /* binding */ ssrDocument; }, 2008/* harmony export */ "ssrWindow": function() { return /* binding */ ssrWindow; } 2009/* harmony export */ }); 2010/** 2011 * SSR Window 4.0.2 2012 * Better handling for window object in SSR environment 2013 * https://github.com/nolimits4web/ssr-window 2014 * 2015 * Copyright 2021, Vladimir Kharlampidi 2016 * 2017 * Licensed under MIT 2018 * 2019 * Released on: December 13, 2021 2020 */ 2021/* eslint-disable no-param-reassign */ 2022function isObject(obj) { 2023 return (obj !== null && 2024 typeof obj === 'object' && 2025 'constructor' in obj && 2026 obj.constructor === Object); 2027} 2028function extend(target = {}, src = {}) { 2029 Object.keys(src).forEach((key) => { 2030 if (typeof target[key] === 'undefined') 2031 target[key] = src[key]; 2032 else if (isObject(src[key]) && 2033 isObject(target[key]) && 2034 Object.keys(src[key]).length > 0) { 2035 extend(target[key], src[key]); 2036 } 2037 }); 2038} 2039 2040const ssrDocument = { 2041 body: {}, 2042 addEventListener() { }, 2043 removeEventListener() { }, 2044 activeElement: { 2045 blur() { }, 2046 nodeName: '', 2047 }, 2048 querySelector() { 2049 return null; 2050 }, 2051 querySelectorAll() { 2052 return []; 2053 }, 2054 getElementById() { 2055 return null; 2056 }, 2057 createEvent() { 2058 return { 2059 initEvent() { }, 2060 }; 2061 }, 2062 createElement() { 2063 return { 2064 children: [], 2065 childNodes: [], 2066 style: {}, 2067 setAttribute() { }, 2068 getElementsByTagName() { 2069 return []; 2070 }, 2071 }; 2072 }, 2073 createElementNS() { 2074 return {}; 2075 }, 2076 importNode() { 2077 return null; 2078 }, 2079 location: { 2080 hash: '', 2081 host: '', 2082 hostname: '', 2083 href: '', 2084 origin: '', 2085 pathname: '', 2086 protocol: '', 2087 search: '', 2088 }, 2089}; 2090function getDocument() { 2091 const doc = typeof document !== 'undefined' ? document : {}; 2092 extend(doc, ssrDocument); 2093 return doc; 2094} 2095 2096const ssrWindow = { 2097 document: ssrDocument, 2098 navigator: { 2099 userAgent: '', 2100 }, 2101 location: { 2102 hash: '', 2103 host: '', 2104 hostname: '', 2105 href: '', 2106 origin: '', 2107 pathname: '', 2108 protocol: '', 2109 search: '', 2110 }, 2111 history: { 2112 replaceState() { }, 2113 pushState() { }, 2114 go() { }, 2115 back() { }, 2116 }, 2117 CustomEvent: function CustomEvent() { 2118 return this; 2119 }, 2120 addEventListener() { }, 2121 removeEventListener() { }, 2122 getComputedStyle() { 2123 return { 2124 getPropertyValue() { 2125 return ''; 2126 }, 2127 }; 2128 }, 2129 Image() { }, 2130 Date() { }, 2131 screen: {}, 2132 setTimeout() { }, 2133 clearTimeout() { }, 2134 matchMedia() { 2135 return {}; 2136 }, 2137 requestAnimationFrame(callback) { 2138 if (typeof setTimeout === 'undefined') { 2139 callback(); 2140 return null; 2141 } 2142 return setTimeout(callback, 0); 2143 }, 2144 cancelAnimationFrame(id) { 2145 if (typeof setTimeout === 'undefined') { 2146 return; 2147 } 2148 clearTimeout(id); 2149 }, 2150}; 2151function getWindow() { 2152 const win = typeof window !== 'undefined' ? window : {}; 2153 extend(win, ssrWindow); 2154 return win; 2155} 2156 2157 2158 2159 2160/***/ }), 2161
vendor: 1,854 bytes, lines 2162-2211
2162/***/ "./node_modules/swiper/core/breakpoints/getBreakpoint.js": 2163/*!***************************************************************!*\ 2164 !*** ./node_modules/swiper/core/breakpoints/getBreakpoint.js ***! 2165 \***************************************************************/ 2166/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 2167 2168__webpack_require__.r(__webpack_exports__); 2169/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2170/* harmony export */ "default": function() { return /* binding */ getBreakpoint; } 2171/* harmony export */ }); 2172/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 2173 2174function getBreakpoint(breakpoints, base = 'window', containerEl) { 2175 if (!breakpoints || base === 'container' && !containerEl) return undefined; 2176 let breakpoint = false; 2177 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 2178 const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight; 2179 const points = Object.keys(breakpoints).map(point => { 2180 if (typeof point === 'string' && point.indexOf('@') === 0) { 2181 const minRatio = parseFloat(point.substr(1)); 2182 const value = currentHeight * minRatio; 2183 return { 2184 value, 2185 point 2186 }; 2187 } 2188 return { 2189 value: point, 2190 point 2191 }; 2192 }); 2193 points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10)); 2194 for (let i = 0; i < points.length; i += 1) { 2195 const { 2196 point, 2197 value 2198 } = points[i]; 2199 if (base === 'window') { 2200 if (window.matchMedia(`(min-width: ${value}px)`).matches) { 2201 breakpoint = point; 2202 } 2203 } else if (value <= containerEl.clientWidth) { 2204 breakpoint = point; 2205 } 2206 } 2207 return breakpoint || 'max'; 2208} 2209 2210/***/ }), 2211
vendor: 975 bytes, lines 2212-2229
2212/***/ "./node_modules/swiper/core/breakpoints/index.js": 2213/*!*******************************************************!*\ 2214 !*** ./node_modules/swiper/core/breakpoints/index.js ***! 2215 \*******************************************************/ 2216/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 2217 2218__webpack_require__.r(__webpack_exports__); 2219/* harmony import */ var _setBreakpoint_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setBreakpoint.js */ "./node_modules/swiper/core/breakpoints/setBreakpoint.js"); 2220/* harmony import */ var _getBreakpoint_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getBreakpoint.js */ "./node_modules/swiper/core/breakpoints/getBreakpoint.js"); 2221 2222 2223/* harmony default export */ __webpack_exports__["default"] = ({ 2224 setBreakpoint: _setBreakpoint_js__WEBPACK_IMPORTED_MODULE_0__["default"], 2225 getBreakpoint: _getBreakpoint_js__WEBPACK_IMPORTED_MODULE_1__["default"] 2226}); 2227 2228/***/ }), 2229
vendor: 3,666 bytes, lines 2230-2314
2230/***/ "./node_modules/swiper/core/breakpoints/setBreakpoint.js": 2231/*!***************************************************************!*\ 2232 !*** ./node_modules/swiper/core/breakpoints/setBreakpoint.js ***! 2233 \***************************************************************/ 2234/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 2235 2236__webpack_require__.r(__webpack_exports__); 2237/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2238/* harmony export */ "default": function() { return /* binding */ setBreakpoint; } 2239/* harmony export */ }); 2240/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 2241 2242const isGridEnabled = (swiper, params) => { 2243 return swiper.grid && params.grid && params.grid.rows > 1; 2244}; 2245function setBreakpoint() { 2246 const swiper = this; 2247 const { 2248 realIndex, 2249 initialized, 2250 params, 2251 el 2252 } = swiper; 2253 const breakpoints = params.breakpoints; 2254 if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; 2255 2256 // Get breakpoint for window width and update parameters 2257 const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el); 2258 if (!breakpoint || swiper.currentBreakpoint === breakpoint) return; 2259 const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined; 2260 const breakpointParams = breakpointOnlyParams || swiper.originalParams; 2261 const wasMultiRow = isGridEnabled(swiper, params); 2262 const isMultiRow = isGridEnabled(swiper, breakpointParams); 2263 const wasEnabled = params.enabled; 2264 if (wasMultiRow && !isMultiRow) { 2265 el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`); 2266 swiper.emitContainerClasses(); 2267 } else if (!wasMultiRow && isMultiRow) { 2268 el.classList.add(`${params.containerModifierClass}grid`); 2269 if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') { 2270 el.classList.add(`${params.containerModifierClass}grid-column`); 2271 } 2272 swiper.emitContainerClasses(); 2273 } 2274 2275 // Toggle navigation, pagination, scrollbar 2276 ['navigation', 'pagination', 'scrollbar'].forEach(prop => { 2277 const wasModuleEnabled = params[prop] && params[prop].enabled; 2278 const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled; 2279 if (wasModuleEnabled && !isModuleEnabled) { 2280 swiper[prop].disable(); 2281 } 2282 if (!wasModuleEnabled && isModuleEnabled) { 2283 swiper[prop].enable(); 2284 } 2285 }); 2286 const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction; 2287 const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged); 2288 if (directionChanged && initialized) { 2289 swiper.changeDirection(); 2290 } 2291 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(swiper.params, breakpointParams); 2292 const isEnabled = swiper.params.enabled; 2293 Object.assign(swiper, { 2294 allowTouchMove: swiper.params.allowTouchMove, 2295 allowSlideNext: swiper.params.allowSlideNext, 2296 allowSlidePrev: swiper.params.allowSlidePrev 2297 }); 2298 if (wasEnabled && !isEnabled) { 2299 swiper.disable(); 2300 } else if (!wasEnabled && isEnabled) { 2301 swiper.enable(); 2302 } 2303 swiper.currentBreakpoint = breakpoint; 2304 swiper.emit('_beforeBreakpoint', breakpointParams); 2305 if (needsReLoop && initialized) { 2306 swiper.loopDestroy(); 2307 swiper.loopCreate(realIndex); 2308 swiper.updateSlides(); 2309 } 2310 swiper.emit('breakpoint', breakpointParams); 2311} 2312 2313/***/ }), 2314
vendor: 1,344 bytes, lines 2315-2356
2315/***/ "./node_modules/swiper/core/check-overflow/index.js": 2316/*!**********************************************************!*\ 2317 !*** ./node_modules/swiper/core/check-overflow/index.js ***! 2318 \**********************************************************/ 2319/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 2320 2321__webpack_require__.r(__webpack_exports__); 2322function checkOverflow() { 2323 const swiper = this; 2324 const { 2325 isLocked: wasLocked, 2326 params 2327 } = swiper; 2328 const { 2329 slidesOffsetBefore 2330 } = params; 2331 if (slidesOffsetBefore) { 2332 const lastSlideIndex = swiper.slides.length - 1; 2333 const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2; 2334 swiper.isLocked = swiper.size > lastSlideRightEdge; 2335 } else { 2336 swiper.isLocked = swiper.snapGrid.length === 1; 2337 } 2338 if (params.allowSlideNext === true) { 2339 swiper.allowSlideNext = !swiper.isLocked; 2340 } 2341 if (params.allowSlidePrev === true) { 2342 swiper.allowSlidePrev = !swiper.isLocked; 2343 } 2344 if (wasLocked && wasLocked !== swiper.isLocked) { 2345 swiper.isEnd = false; 2346 } 2347 if (wasLocked !== swiper.isLocked) { 2348 swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); 2349 } 2350} 2351/* harmony default export */ __webpack_exports__["default"] = ({ 2352 checkOverflow 2353}); 2354 2355/***/ }), 2356
vendor: 1,841 bytes, lines 2357-2419
2357/***/ "./node_modules/swiper/core/classes/addClasses.js": 2358/*!********************************************************!*\ 2359 !*** ./node_modules/swiper/core/classes/addClasses.js ***! 2360 \********************************************************/ 2361/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 2362 2363__webpack_require__.r(__webpack_exports__); 2364/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2365/* harmony export */ "default": function() { return /* binding */ addClasses; } 2366/* harmony export */ }); 2367function prepareClasses(entries, prefix) { 2368 const resultClasses = []; 2369 entries.forEach(item => { 2370 if (typeof item === 'object') { 2371 Object.keys(item).forEach(classNames => { 2372 if (item[classNames]) { 2373 resultClasses.push(prefix + classNames); 2374 } 2375 }); 2376 } else if (typeof item === 'string') { 2377 resultClasses.push(prefix + item); 2378 } 2379 }); 2380 return resultClasses; 2381} 2382function addClasses() { 2383 const swiper = this; 2384 const { 2385 classNames, 2386 params, 2387 rtl, 2388 el, 2389 device 2390 } = swiper; 2391 // prettier-ignore 2392 const suffixes = prepareClasses(['initialized', params.direction, { 2393 'free-mode': swiper.params.freeMode && params.freeMode.enabled 2394 }, { 2395 'autoheight': params.autoHeight 2396 }, { 2397 'rtl': rtl 2398 }, { 2399 'grid': params.grid && params.grid.rows > 1 2400 }, { 2401 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column' 2402 }, { 2403 'android': device.android 2404 }, { 2405 'ios': device.ios 2406 }, { 2407 'css-mode': params.cssMode 2408 }, { 2409 'centered': params.cssMode && params.centeredSlides 2410 }, { 2411 'watch-progress': params.watchSlidesProgress 2412 }], params.containerModifierClass); 2413 classNames.push(...suffixes); 2414 el.classList.add(...classNames); 2415 swiper.emitContainerClasses(); 2416} 2417 2418/***/ }), 2419
vendor: 936 bytes, lines 2420-2437
2420/***/ "./node_modules/swiper/core/classes/index.js": 2421/*!***************************************************!*\ 2422 !*** ./node_modules/swiper/core/classes/index.js ***! 2423 \***************************************************/ 2424/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 2425 2426__webpack_require__.r(__webpack_exports__); 2427/* harmony import */ var _addClasses_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./addClasses.js */ "./node_modules/swiper/core/classes/addClasses.js"); 2428/* harmony import */ var _removeClasses_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./removeClasses.js */ "./node_modules/swiper/core/classes/removeClasses.js"); 2429 2430 2431/* harmony default export */ __webpack_exports__["default"] = ({ 2432 addClasses: _addClasses_js__WEBPACK_IMPORTED_MODULE_0__["default"], 2433 removeClasses: _removeClasses_js__WEBPACK_IMPORTED_MODULE_1__["default"] 2434}); 2435 2436/***/ }), 2437
vendor: 755 bytes, lines 2438-2459
2438/***/ "./node_modules/swiper/core/classes/removeClasses.js": 2439/*!***********************************************************!*\ 2440 !*** ./node_modules/swiper/core/classes/removeClasses.js ***! 2441 \***********************************************************/ 2442/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 2443 2444__webpack_require__.r(__webpack_exports__); 2445/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2446/* harmony export */ "default": function() { return /* binding */ removeClasses; } 2447/* harmony export */ }); 2448function removeClasses() { 2449 const swiper = this; 2450 const { 2451 el, 2452 classNames 2453 } = swiper; 2454 el.classList.remove(...classNames); 2455 swiper.emitContainerClasses(); 2456} 2457 2458/***/ }), 2459
vendor: 23,627 bytes, lines 2460-3088
2460/***/ "./node_modules/swiper/core/core.js": 2461/*!******************************************!*\ 2462 !*** ./node_modules/swiper/core/core.js ***! 2463 \******************************************/ 2464/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 2465 2466__webpack_require__.r(__webpack_exports__); 2467/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 2468/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 2469/* harmony import */ var _shared_get_support_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/get-support.js */ "./node_modules/swiper/shared/get-support.js"); 2470/* harmony import */ var _shared_get_device_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/get-device.js */ "./node_modules/swiper/shared/get-device.js"); 2471/* harmony import */ var _shared_get_browser_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../shared/get-browser.js */ "./node_modules/swiper/shared/get-browser.js"); 2472/* harmony import */ var _modules_resize_resize_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/resize/resize.js */ "./node_modules/swiper/core/modules/resize/resize.js"); 2473/* harmony import */ var _modules_observer_observer_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/observer/observer.js */ "./node_modules/swiper/core/modules/observer/observer.js"); 2474/* harmony import */ var _events_emitter_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./events-emitter.js */ "./node_modules/swiper/core/events-emitter.js"); 2475/* harmony import */ var _update_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./update/index.js */ "./node_modules/swiper/core/update/index.js"); 2476/* harmony import */ var _translate_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./translate/index.js */ "./node_modules/swiper/core/translate/index.js"); 2477/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./transition/index.js */ "./node_modules/swiper/core/transition/index.js"); 2478/* harmony import */ var _slide_index_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./slide/index.js */ "./node_modules/swiper/core/slide/index.js"); 2479/* harmony import */ var _loop_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./loop/index.js */ "./node_modules/swiper/core/loop/index.js"); 2480/* harmony import */ var _grab_cursor_index_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./grab-cursor/index.js */ "./node_modules/swiper/core/grab-cursor/index.js"); 2481/* harmony import */ var _events_index_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./events/index.js */ "./node_modules/swiper/core/events/index.js"); 2482/* harmony import */ var _breakpoints_index_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./breakpoints/index.js */ "./node_modules/swiper/core/breakpoints/index.js"); 2483/* harmony import */ var _classes_index_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./classes/index.js */ "./node_modules/swiper/core/classes/index.js"); 2484/* harmony import */ var _check_overflow_index_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./check-overflow/index.js */ "./node_modules/swiper/core/check-overflow/index.js"); 2485/* harmony import */ var _defaults_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./defaults.js */ "./node_modules/swiper/core/defaults.js"); 2486/* harmony import */ var _moduleExtendParams_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./moduleExtendParams.js */ "./node_modules/swiper/core/moduleExtendParams.js"); 2487/* harmony import */ var _shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../shared/process-lazy-preloader.js */ "./node_modules/swiper/shared/process-lazy-preloader.js"); 2488/* eslint no-param-reassign: "off" */ 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510const prototypes = { 2511 eventsEmitter: _events_emitter_js__WEBPACK_IMPORTED_MODULE_7__["default"], 2512 update: _update_index_js__WEBPACK_IMPORTED_MODULE_8__["default"], 2513 translate: _translate_index_js__WEBPACK_IMPORTED_MODULE_9__["default"], 2514 transition: _transition_index_js__WEBPACK_IMPORTED_MODULE_10__["default"], 2515 slide: _slide_index_js__WEBPACK_IMPORTED_MODULE_11__["default"], 2516 loop: _loop_index_js__WEBPACK_IMPORTED_MODULE_12__["default"], 2517 grabCursor: _grab_cursor_index_js__WEBPACK_IMPORTED_MODULE_13__["default"], 2518 events: _events_index_js__WEBPACK_IMPORTED_MODULE_14__["default"], 2519 breakpoints: _breakpoints_index_js__WEBPACK_IMPORTED_MODULE_15__["default"], 2520 checkOverflow: _check_overflow_index_js__WEBPACK_IMPORTED_MODULE_17__["default"], 2521 classes: _classes_index_js__WEBPACK_IMPORTED_MODULE_16__["default"] 2522}; 2523const extendedDefaults = {}; 2524class Swiper { 2525 constructor(...args) { 2526 let el; 2527 let params; 2528 if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') { 2529 params = args[0]; 2530 } else { 2531 [el, params] = args; 2532 } 2533 if (!params) params = {}; 2534 params = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, params); 2535 if (el && !params.el) params.el = el; 2536 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 2537 if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) { 2538 const swipers = []; 2539 document.querySelectorAll(params.el).forEach(containerEl => { 2540 const newParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, params, { 2541 el: containerEl 2542 }); 2543 swipers.push(new Swiper(newParams)); 2544 }); 2545 // eslint-disable-next-line no-constructor-return 2546 return swipers; 2547 } 2548 2549 // Swiper Instance 2550 const swiper = this; 2551 swiper.__swiper__ = true; 2552 swiper.support = (0,_shared_get_support_js__WEBPACK_IMPORTED_MODULE_2__.getSupport)(); 2553 swiper.device = (0,_shared_get_device_js__WEBPACK_IMPORTED_MODULE_3__.getDevice)({ 2554 userAgent: params.userAgent 2555 }); 2556 swiper.browser = (0,_shared_get_browser_js__WEBPACK_IMPORTED_MODULE_4__.getBrowser)(); 2557 swiper.eventsListeners = {}; 2558 swiper.eventsAnyListeners = []; 2559 swiper.modules = [...swiper.__modules__]; 2560 if (params.modules && Array.isArray(params.modules)) { 2561 swiper.modules.push(...params.modules); 2562 } 2563 const allModulesParams = {}; 2564 swiper.modules.forEach(mod => { 2565 mod({ 2566 params, 2567 swiper, 2568 extendParams: (0,_moduleExtendParams_js__WEBPACK_IMPORTED_MODULE_19__["default"])(params, allModulesParams), 2569 on: swiper.on.bind(swiper), 2570 once: swiper.once.bind(swiper), 2571 off: swiper.off.bind(swiper), 2572 emit: swiper.emit.bind(swiper) 2573 }); 2574 }); 2575 2576 // Extend defaults with modules params 2577 const swiperParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, _defaults_js__WEBPACK_IMPORTED_MODULE_18__["default"], allModulesParams); 2578 2579 // Extend defaults with passed params 2580 swiper.params = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, swiperParams, extendedDefaults, params); 2581 swiper.originalParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, swiper.params); 2582 swiper.passedParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)({}, params); 2583 2584 // add event listeners 2585 if (swiper.params && swiper.params.on) { 2586 Object.keys(swiper.params.on).forEach(eventName => { 2587 swiper.on(eventName, swiper.params.on[eventName]); 2588 }); 2589 } 2590 if (swiper.params && swiper.params.onAny) { 2591 swiper.onAny(swiper.params.onAny); 2592 } 2593 2594 // Extend Swiper 2595 Object.assign(swiper, { 2596 enabled: swiper.params.enabled, 2597 el, 2598 // Classes 2599 classNames: [], 2600 // Slides 2601 slides: [], 2602 slidesGrid: [], 2603 snapGrid: [], 2604 slidesSizesGrid: [], 2605 // isDirection 2606 isHorizontal() { 2607 return swiper.params.direction === 'horizontal'; 2608 }, 2609 isVertical() { 2610 return swiper.params.direction === 'vertical'; 2611 }, 2612 // Indexes 2613 activeIndex: 0, 2614 realIndex: 0, 2615 // 2616 isBeginning: true, 2617 isEnd: false, 2618 // Props 2619 translate: 0, 2620 previousTranslate: 0, 2621 progress: 0, 2622 velocity: 0, 2623 animating: false, 2624 cssOverflowAdjustment() { 2625 // Returns 0 unless `translate` is > 2**23 2626 // Should be subtracted from css values to prevent overflow 2627 return Math.trunc(this.translate / 2 ** 23) * 2 ** 23; 2628 }, 2629 // Locks 2630 allowSlideNext: swiper.params.allowSlideNext, 2631 allowSlidePrev: swiper.params.allowSlidePrev, 2632 // Touch Events 2633 touchEventsData: { 2634 isTouched: undefined, 2635 isMoved: undefined, 2636 allowTouchCallbacks: undefined, 2637 touchStartTime: undefined, 2638 isScrolling: undefined, 2639 currentTranslate: undefined, 2640 startTranslate: undefined, 2641 allowThresholdMove: undefined, 2642 // Form elements to match 2643 focusableElements: swiper.params.focusableElements, 2644 // Last click time 2645 lastClickTime: 0, 2646 clickTimeout: undefined, 2647 // Velocities 2648 velocities: [], 2649 allowMomentumBounce: undefined, 2650 startMoving: undefined, 2651 evCache: [] 2652 }, 2653 // Clicks 2654 allowClick: true, 2655 // Touches 2656 allowTouchMove: swiper.params.allowTouchMove, 2657 touches: { 2658 startX: 0, 2659 startY: 0, 2660 currentX: 0, 2661 currentY: 0, 2662 diff: 0 2663 }, 2664 // Images 2665 imagesToLoad: [], 2666 imagesLoaded: 0 2667 }); 2668 swiper.emit('_swiper'); 2669 2670 // Init 2671 if (swiper.params.init) { 2672 swiper.init(); 2673 } 2674 2675 // Return app instance 2676 // eslint-disable-next-line no-constructor-return 2677 return swiper; 2678 } 2679 getSlideIndex(slideEl) { 2680 const { 2681 slidesEl, 2682 params 2683 } = this; 2684 const slides = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(slidesEl, `.${params.slideClass}, swiper-slide`); 2685 const firstSlideIndex = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementIndex)(slides[0]); 2686 return (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementIndex)(slideEl) - firstSlideIndex; 2687 } 2688 getSlideIndexByData(index) { 2689 return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]); 2690 } 2691 recalcSlides() { 2692 const swiper = this; 2693 const { 2694 slidesEl, 2695 params 2696 } = swiper; 2697 swiper.slides = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(slidesEl, `.${params.slideClass}, swiper-slide`); 2698 } 2699 enable() { 2700 const swiper = this; 2701 if (swiper.enabled) return; 2702 swiper.enabled = true; 2703 if (swiper.params.grabCursor) { 2704 swiper.setGrabCursor(); 2705 } 2706 swiper.emit('enable'); 2707 } 2708 disable() { 2709 const swiper = this; 2710 if (!swiper.enabled) return; 2711 swiper.enabled = false; 2712 if (swiper.params.grabCursor) { 2713 swiper.unsetGrabCursor(); 2714 } 2715 swiper.emit('disable'); 2716 } 2717 setProgress(progress, speed) { 2718 const swiper = this; 2719 progress = Math.min(Math.max(progress, 0), 1); 2720 const min = swiper.minTranslate(); 2721 const max = swiper.maxTranslate(); 2722 const current = (max - min) * progress + min; 2723 swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed); 2724 swiper.updateActiveIndex(); 2725 swiper.updateSlidesClasses(); 2726 } 2727 emitContainerClasses() { 2728 const swiper = this; 2729 if (!swiper.params._emitClasses || !swiper.el) return; 2730 const cls = swiper.el.className.split(' ').filter(className => { 2731 return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0; 2732 }); 2733 swiper.emit('_containerClasses', cls.join(' ')); 2734 } 2735 getSlideClasses(slideEl) { 2736 const swiper = this; 2737 if (swiper.destroyed) return ''; 2738 return slideEl.className.split(' ').filter(className => { 2739 return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0; 2740 }).join(' '); 2741 } 2742 emitSlidesClasses() { 2743 const swiper = this; 2744 if (!swiper.params._emitClasses || !swiper.el) return; 2745 const updates = []; 2746 swiper.slides.forEach(slideEl => { 2747 const classNames = swiper.getSlideClasses(slideEl); 2748 updates.push({ 2749 slideEl, 2750 classNames 2751 }); 2752 swiper.emit('_slideClass', slideEl, classNames); 2753 }); 2754 swiper.emit('_slideClasses', updates); 2755 } 2756 slidesPerViewDynamic(view = 'current', exact = false) { 2757 const swiper = this; 2758 const { 2759 params, 2760 slides, 2761 slidesGrid, 2762 slidesSizesGrid, 2763 size: swiperSize, 2764 activeIndex 2765 } = swiper; 2766 let spv = 1; 2767 if (params.centeredSlides) { 2768 let slideSize = slides[activeIndex].swiperSlideSize; 2769 let breakLoop; 2770 for (let i = activeIndex + 1; i < slides.length; i += 1) { 2771 if (slides[i] && !breakLoop) { 2772 slideSize += slides[i].swiperSlideSize; 2773 spv += 1; 2774 if (slideSize > swiperSize) breakLoop = true; 2775 } 2776 } 2777 for (let i = activeIndex - 1; i >= 0; i -= 1) { 2778 if (slides[i] && !breakLoop) { 2779 slideSize += slides[i].swiperSlideSize; 2780 spv += 1; 2781 if (slideSize > swiperSize) breakLoop = true; 2782 } 2783 } 2784 } else { 2785 // eslint-disable-next-line 2786 if (view === 'current') { 2787 for (let i = activeIndex + 1; i < slides.length; i += 1) { 2788 const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize; 2789 if (slideInView) { 2790 spv += 1; 2791 } 2792 } 2793 } else { 2794 // previous 2795 for (let i = activeIndex - 1; i >= 0; i -= 1) { 2796 const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize; 2797 if (slideInView) { 2798 spv += 1; 2799 } 2800 } 2801 } 2802 } 2803 return spv; 2804 } 2805 update() { 2806 const swiper = this; 2807 if (!swiper || swiper.destroyed) return; 2808 const { 2809 snapGrid, 2810 params 2811 } = swiper; 2812 // Breakpoints 2813 if (params.breakpoints) { 2814 swiper.setBreakpoint(); 2815 } 2816 [...swiper.el.querySelectorAll('[loading="lazy"]')].forEach(imageEl => { 2817 if (imageEl.complete) { 2818 (0,_shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_20__.processLazyPreloader)(swiper, imageEl); 2819 } 2820 }); 2821 swiper.updateSize(); 2822 swiper.updateSlides(); 2823 swiper.updateProgress(); 2824 swiper.updateSlidesClasses(); 2825 function setTranslate() { 2826 const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; 2827 const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); 2828 swiper.setTranslate(newTranslate); 2829 swiper.updateActiveIndex(); 2830 swiper.updateSlidesClasses(); 2831 } 2832 let translated; 2833 if (swiper.params.freeMode && swiper.params.freeMode.enabled) { 2834 setTranslate(); 2835 if (swiper.params.autoHeight) { 2836 swiper.updateAutoHeight(); 2837 } 2838 } else { 2839 if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) { 2840 const slides = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides : swiper.slides; 2841 translated = swiper.slideTo(slides.length - 1, 0, false, true); 2842 } else { 2843 translated = swiper.slideTo(swiper.activeIndex, 0, false, true); 2844 } 2845 if (!translated) { 2846 setTranslate(); 2847 } 2848 } 2849 if (params.watchOverflow && snapGrid !== swiper.snapGrid) { 2850 swiper.checkOverflow(); 2851 } 2852 swiper.emit('update'); 2853 } 2854 changeDirection(newDirection, needUpdate = true) { 2855 const swiper = this; 2856 const currentDirection = swiper.params.direction; 2857 if (!newDirection) { 2858 // eslint-disable-next-line 2859 newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal'; 2860 } 2861 if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') { 2862 return swiper; 2863 } 2864 swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`); 2865 swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`); 2866 swiper.emitContainerClasses(); 2867 swiper.params.direction = newDirection; 2868 swiper.slides.forEach(slideEl => { 2869 if (newDirection === 'vertical') { 2870 slideEl.style.width = ''; 2871 } else { 2872 slideEl.style.height = ''; 2873 } 2874 }); 2875 swiper.emit('changeDirection'); 2876 if (needUpdate) swiper.update(); 2877 return swiper; 2878 } 2879 changeLanguageDirection(direction) { 2880 const swiper = this; 2881 if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return; 2882 swiper.rtl = direction === 'rtl'; 2883 swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl; 2884 if (swiper.rtl) { 2885 swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`); 2886 swiper.el.dir = 'rtl'; 2887 } else { 2888 swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`); 2889 swiper.el.dir = 'ltr'; 2890 } 2891 swiper.update(); 2892 } 2893 mount(element) { 2894 const swiper = this; 2895 if (swiper.mounted) return true; 2896 2897 // Find el 2898 let el = element || swiper.params.el; 2899 if (typeof el === 'string') { 2900 el = document.querySelector(el); 2901 } 2902 if (!el) { 2903 return false; 2904 } 2905 el.swiper = swiper; 2906 if (el.shadowEl) { 2907 swiper.isElement = true; 2908 } 2909 const getWrapperSelector = () => { 2910 return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`; 2911 }; 2912 const getWrapper = () => { 2913 if (el && el.shadowRoot && el.shadowRoot.querySelector) { 2914 const res = el.shadowRoot.querySelector(getWrapperSelector()); 2915 // Children needs to return slot items 2916 return res; 2917 } 2918 return (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(el, getWrapperSelector())[0]; 2919 }; 2920 // Find Wrapper 2921 let wrapperEl = getWrapper(); 2922 if (!wrapperEl && swiper.params.createElements) { 2923 wrapperEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', swiper.params.wrapperClass); 2924 el.append(wrapperEl); 2925 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(el, `.${swiper.params.slideClass}`).forEach(slideEl => { 2926 wrapperEl.append(slideEl); 2927 }); 2928 } 2929 Object.assign(swiper, { 2930 el, 2931 wrapperEl, 2932 slidesEl: swiper.isElement ? el : wrapperEl, 2933 mounted: true, 2934 // RTL 2935 rtl: el.dir.toLowerCase() === 'rtl' || (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementStyle)(el, 'direction') === 'rtl', 2936 rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementStyle)(el, 'direction') === 'rtl'), 2937 wrongRTL: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementStyle)(wrapperEl, 'display') === '-webkit-box' 2938 }); 2939 return true; 2940 } 2941 init(el) { 2942 const swiper = this; 2943 if (swiper.initialized) return swiper; 2944 const mounted = swiper.mount(el); 2945 if (mounted === false) return swiper; 2946 swiper.emit('beforeInit'); 2947 2948 // Set breakpoint 2949 if (swiper.params.breakpoints) { 2950 swiper.setBreakpoint(); 2951 } 2952 2953 // Add Classes 2954 swiper.addClasses(); 2955 2956 // Update size 2957 swiper.updateSize(); 2958 2959 // Update slides 2960 swiper.updateSlides(); 2961 if (swiper.params.watchOverflow) { 2962 swiper.checkOverflow(); 2963 } 2964 2965 // Set Grab Cursor 2966 if (swiper.params.grabCursor && swiper.enabled) { 2967 swiper.setGrabCursor(); 2968 } 2969 2970 // Slide To Initial Slide 2971 if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) { 2972 swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true); 2973 } else { 2974 swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true); 2975 } 2976 2977 // Create loop 2978 if (swiper.params.loop) { 2979 swiper.loopCreate(); 2980 } 2981 2982 // Attach events 2983 swiper.attachEvents(); 2984 [...swiper.el.querySelectorAll('[loading="lazy"]')].forEach(imageEl => { 2985 if (imageEl.complete) { 2986 (0,_shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_20__.processLazyPreloader)(swiper, imageEl); 2987 } else { 2988 imageEl.addEventListener('load', e => { 2989 (0,_shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_20__.processLazyPreloader)(swiper, e.target); 2990 }); 2991 } 2992 }); 2993 (0,_shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_20__.preload)(swiper); 2994 2995 // Init Flag 2996 swiper.initialized = true; 2997 (0,_shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_20__.preload)(swiper); 2998 2999 // Emit 3000 swiper.emit('init'); 3001 swiper.emit('afterInit'); 3002 return swiper; 3003 } 3004 destroy(deleteInstance = true, cleanStyles = true) { 3005 const swiper = this; 3006 const { 3007 params, 3008 el, 3009 wrapperEl, 3010 slides 3011 } = swiper; 3012 if (typeof swiper.params === 'undefined' || swiper.destroyed) { 3013 return null; 3014 } 3015 swiper.emit('beforeDestroy'); 3016 3017 // Init Flag 3018 swiper.initialized = false; 3019 3020 // Detach events 3021 swiper.detachEvents(); 3022 3023 // Destroy loop 3024 if (params.loop) { 3025 swiper.loopDestroy(); 3026 } 3027 3028 // Cleanup styles 3029 if (cleanStyles) { 3030 swiper.removeClasses(); 3031 el.removeAttribute('style'); 3032 wrapperEl.removeAttribute('style'); 3033 if (slides && slides.length) { 3034 slides.forEach(slideEl => { 3035 slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass); 3036 slideEl.removeAttribute('style'); 3037 slideEl.removeAttribute('data-swiper-slide-index'); 3038 }); 3039 } 3040 } 3041 swiper.emit('destroy'); 3042 3043 // Detach emitter events 3044 Object.keys(swiper.eventsListeners).forEach(eventName => { 3045 swiper.off(eventName); 3046 }); 3047 if (deleteInstance !== false) { 3048 swiper.el.swiper = null; 3049 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.deleteProps)(swiper); 3050 } 3051 swiper.destroyed = true; 3052 return null; 3053 } 3054 static extendDefaults(newDefaults) { 3055 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.extend)(extendedDefaults, newDefaults); 3056 } 3057 static get extendedDefaults() { 3058 return extendedDefaults; 3059 } 3060 static get defaults() { 3061 return _defaults_js__WEBPACK_IMPORTED_MODULE_18__["default"]; 3062 } 3063 static installModule(mod) { 3064 if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = []; 3065 const modules = Swiper.prototype.__modules__; 3066 if (typeof mod === 'function' && modules.indexOf(mod) < 0) { 3067 modules.push(mod); 3068 } 3069 } 3070 static use(module) { 3071 if (Array.isArray(module)) { 3072 module.forEach(m => Swiper.installModule(m)); 3073 return Swiper; 3074 } 3075 Swiper.installModule(module); 3076 return Swiper; 3077 } 3078} 3079Object.keys(prototypes).forEach(prototypeGroup => { 3080 Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => { 3081 Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; 3082 }); 3083}); 3084Swiper.use([_modules_resize_resize_js__WEBPACK_IMPORTED_MODULE_5__["default"], _modules_observer_observer_js__WEBPACK_IMPORTED_MODULE_6__["default"]]); 3085/* harmony default export */ __webpack_exports__["default"] = (Swiper); 3086 3087/***/ }), 3088
vendor: 3,257 bytes, lines 3089-3215
3089/***/ "./node_modules/swiper/core/defaults.js": 3090/*!**********************************************!*\ 3091 !*** ./node_modules/swiper/core/defaults.js ***! 3092 \**********************************************/ 3093/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 3094 3095__webpack_require__.r(__webpack_exports__); 3096/* harmony default export */ __webpack_exports__["default"] = ({ 3097 init: true, 3098 direction: 'horizontal', 3099 oneWayMovement: false, 3100 touchEventsTarget: 'wrapper', 3101 initialSlide: 0, 3102 speed: 300, 3103 cssMode: false, 3104 updateOnWindowResize: true, 3105 resizeObserver: true, 3106 nested: false, 3107 createElements: false, 3108 enabled: true, 3109 focusableElements: 'input, select, option, textarea, button, video, label', 3110 // Overrides 3111 width: null, 3112 height: null, 3113 // 3114 preventInteractionOnTransition: false, 3115 // ssr 3116 userAgent: null, 3117 url: null, 3118 // To support iOS's swipe-to-go-back gesture (when being used in-app). 3119 edgeSwipeDetection: false, 3120 edgeSwipeThreshold: 20, 3121 // Autoheight 3122 autoHeight: false, 3123 // Set wrapper width 3124 setWrapperSize: false, 3125 // Virtual Translate 3126 virtualTranslate: false, 3127 // Effects 3128 effect: 'slide', 3129 // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' 3130 3131 // Breakpoints 3132 breakpoints: undefined, 3133 breakpointsBase: 'window', 3134 // Slides grid 3135 spaceBetween: 0, 3136 slidesPerView: 1, 3137 slidesPerGroup: 1, 3138 slidesPerGroupSkip: 0, 3139 slidesPerGroupAuto: false, 3140 centeredSlides: false, 3141 centeredSlidesBounds: false, 3142 slidesOffsetBefore: 0, 3143 // in px 3144 slidesOffsetAfter: 0, 3145 // in px 3146 normalizeSlideIndex: true, 3147 centerInsufficientSlides: false, 3148 // Disable swiper and hide navigation when container not overflow 3149 watchOverflow: true, 3150 // Round length 3151 roundLengths: false, 3152 // Touches 3153 touchRatio: 1, 3154 touchAngle: 45, 3155 simulateTouch: true, 3156 shortSwipes: true, 3157 longSwipes: true, 3158 longSwipesRatio: 0.5, 3159 longSwipesMs: 300, 3160 followFinger: true, 3161 allowTouchMove: true, 3162 threshold: 5, 3163 touchMoveStopPropagation: false, 3164 touchStartPreventDefault: true, 3165 touchStartForcePreventDefault: false, 3166 touchReleaseOnEdges: false, 3167 // Unique Navigation Elements 3168 uniqueNavElements: true, 3169 // Resistance 3170 resistance: true, 3171 resistanceRatio: 0.85, 3172 // Progress 3173 watchSlidesProgress: false, 3174 // Cursor 3175 grabCursor: false, 3176 // Clicks 3177 preventClicks: true, 3178 preventClicksPropagation: true, 3179 slideToClickedSlide: false, 3180 // loop 3181 loop: false, 3182 loopedSlides: null, 3183 loopPreventsSliding: true, 3184 // rewind 3185 rewind: false, 3186 // Swiping/no swiping 3187 allowSlidePrev: true, 3188 allowSlideNext: true, 3189 swipeHandler: null, 3190 // '.swipe-handler', 3191 noSwiping: true, 3192 noSwipingClass: 'swiper-no-swiping', 3193 noSwipingSelector: null, 3194 // Passive Listeners 3195 passiveListeners: true, 3196 maxBackfaceHiddenSlides: 10, 3197 // NS 3198 containerModifierClass: 'swiper-', 3199 // NEW 3200 slideClass: 'swiper-slide', 3201 slideActiveClass: 'swiper-slide-active', 3202 slideVisibleClass: 'swiper-slide-visible', 3203 slideNextClass: 'swiper-slide-next', 3204 slidePrevClass: 'swiper-slide-prev', 3205 wrapperClass: 'swiper-wrapper', 3206 lazyPreloaderClass: 'swiper-lazy-preloader', 3207 lazyPreloadPrevNext: 0, 3208 // Callbacks 3209 runCallbacksOnInit: true, 3210 // Internals 3211 _emitClasses: false 3212}); 3213 3214/***/ }), 3215
vendor: 3,708 bytes, lines 3216-3323
3216/***/ "./node_modules/swiper/core/events-emitter.js": 3217/*!****************************************************!*\ 3218 !*** ./node_modules/swiper/core/events-emitter.js ***! 3219 \****************************************************/ 3220/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 3221 3222__webpack_require__.r(__webpack_exports__); 3223/* eslint-disable no-underscore-dangle */ 3224 3225/* harmony default export */ __webpack_exports__["default"] = ({ 3226 on(events, handler, priority) { 3227 const self = this; 3228 if (!self.eventsListeners || self.destroyed) return self; 3229 if (typeof handler !== 'function') return self; 3230 const method = priority ? 'unshift' : 'push'; 3231 events.split(' ').forEach(event => { 3232 if (!self.eventsListeners[event]) self.eventsListeners[event] = []; 3233 self.eventsListeners[event][method](handler); 3234 }); 3235 return self; 3236 }, 3237 once(events, handler, priority) { 3238 const self = this; 3239 if (!self.eventsListeners || self.destroyed) return self; 3240 if (typeof handler !== 'function') return self; 3241 function onceHandler(...args) { 3242 self.off(events, onceHandler); 3243 if (onceHandler.__emitterProxy) { 3244 delete onceHandler.__emitterProxy; 3245 } 3246 handler.apply(self, args); 3247 } 3248 onceHandler.__emitterProxy = handler; 3249 return self.on(events, onceHandler, priority); 3250 }, 3251 onAny(handler, priority) { 3252 const self = this; 3253 if (!self.eventsListeners || self.destroyed) return self; 3254 if (typeof handler !== 'function') return self; 3255 const method = priority ? 'unshift' : 'push'; 3256 if (self.eventsAnyListeners.indexOf(handler) < 0) { 3257 self.eventsAnyListeners[method](handler); 3258 } 3259 return self; 3260 }, 3261 offAny(handler) { 3262 const self = this; 3263 if (!self.eventsListeners || self.destroyed) return self; 3264 if (!self.eventsAnyListeners) return self; 3265 const index = self.eventsAnyListeners.indexOf(handler); 3266 if (index >= 0) { 3267 self.eventsAnyListeners.splice(index, 1); 3268 } 3269 return self; 3270 }, 3271 off(events, handler) { 3272 const self = this; 3273 if (!self.eventsListeners || self.destroyed) return self; 3274 if (!self.eventsListeners) return self; 3275 events.split(' ').forEach(event => { 3276 if (typeof handler === 'undefined') { 3277 self.eventsListeners[event] = []; 3278 } else if (self.eventsListeners[event]) { 3279 self.eventsListeners[event].forEach((eventHandler, index) => { 3280 if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) { 3281 self.eventsListeners[event].splice(index, 1); 3282 } 3283 }); 3284 } 3285 }); 3286 return self; 3287 }, 3288 emit(...args) { 3289 const self = this; 3290 if (!self.eventsListeners || self.destroyed) return self; 3291 if (!self.eventsListeners) return self; 3292 let events; 3293 let data; 3294 let context; 3295 if (typeof args[0] === 'string' || Array.isArray(args[0])) { 3296 events = args[0]; 3297 data = args.slice(1, args.length); 3298 context = self; 3299 } else { 3300 events = args[0].events; 3301 data = args[0].data; 3302 context = args[0].context || self; 3303 } 3304 data.unshift(context); 3305 const eventsArray = Array.isArray(events) ? events : events.split(' '); 3306 eventsArray.forEach(event => { 3307 if (self.eventsAnyListeners && self.eventsAnyListeners.length) { 3308 self.eventsAnyListeners.forEach(eventHandler => { 3309 eventHandler.apply(context, [event, ...data]); 3310 }); 3311 } 3312 if (self.eventsListeners && self.eventsListeners[event]) { 3313 self.eventsListeners[event].forEach(eventHandler => { 3314 eventHandler.apply(context, data); 3315 }); 3316 } 3317 }); 3318 return self; 3319 } 3320}); 3321 3322/***/ }), 3323
vendor: 4,328 bytes, lines 3324-3432
3324/***/ "./node_modules/swiper/core/events/index.js": 3325/*!**************************************************!*\ 3326 !*** ./node_modules/swiper/core/events/index.js ***! 3327 \**************************************************/ 3328/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 3329 3330__webpack_require__.r(__webpack_exports__); 3331/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 3332/* harmony import */ var _onTouchStart_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./onTouchStart.js */ "./node_modules/swiper/core/events/onTouchStart.js"); 3333/* harmony import */ var _onTouchMove_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./onTouchMove.js */ "./node_modules/swiper/core/events/onTouchMove.js"); 3334/* harmony import */ var _onTouchEnd_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./onTouchEnd.js */ "./node_modules/swiper/core/events/onTouchEnd.js"); 3335/* harmony import */ var _onResize_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./onResize.js */ "./node_modules/swiper/core/events/onResize.js"); 3336/* harmony import */ var _onClick_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./onClick.js */ "./node_modules/swiper/core/events/onClick.js"); 3337/* harmony import */ var _onScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./onScroll.js */ "./node_modules/swiper/core/events/onScroll.js"); 3338/* harmony import */ var _onLoad_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./onLoad.js */ "./node_modules/swiper/core/events/onLoad.js"); 3339 3340 3341 3342 3343 3344 3345 3346 3347let dummyEventAttached = false; 3348function dummyEventListener() {} 3349const events = (swiper, method) => { 3350 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 3351 const { 3352 params, 3353 el, 3354 wrapperEl, 3355 device 3356 } = swiper; 3357 const capture = !!params.nested; 3358 const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; 3359 const swiperMethod = method; 3360 3361 // Touch Events 3362 el[domMethod]('pointerdown', swiper.onTouchStart, { 3363 passive: false 3364 }); 3365 document[domMethod]('pointermove', swiper.onTouchMove, { 3366 passive: false, 3367 capture 3368 }); 3369 document[domMethod]('pointerup', swiper.onTouchEnd, { 3370 passive: true 3371 }); 3372 document[domMethod]('pointercancel', swiper.onTouchEnd, { 3373 passive: true 3374 }); 3375 document[domMethod]('pointerout', swiper.onTouchEnd, { 3376 passive: true 3377 }); 3378 document[domMethod]('pointerleave', swiper.onTouchEnd, { 3379 passive: true 3380 }); 3381 3382 // Prevent Links Clicks 3383 if (params.preventClicks || params.preventClicksPropagation) { 3384 el[domMethod]('click', swiper.onClick, true); 3385 } 3386 if (params.cssMode) { 3387 wrapperEl[domMethod]('scroll', swiper.onScroll); 3388 } 3389 3390 // Resize handler 3391 if (params.updateOnWindowResize) { 3392 swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', _onResize_js__WEBPACK_IMPORTED_MODULE_4__["default"], true); 3393 } else { 3394 swiper[swiperMethod]('observerUpdate', _onResize_js__WEBPACK_IMPORTED_MODULE_4__["default"], true); 3395 } 3396 3397 // Images loader 3398 el[domMethod]('load', swiper.onLoad, { 3399 capture: true 3400 }); 3401}; 3402function attachEvents() { 3403 const swiper = this; 3404 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 3405 const { 3406 params 3407 } = swiper; 3408 swiper.onTouchStart = _onTouchStart_js__WEBPACK_IMPORTED_MODULE_1__["default"].bind(swiper); 3409 swiper.onTouchMove = _onTouchMove_js__WEBPACK_IMPORTED_MODULE_2__["default"].bind(swiper); 3410 swiper.onTouchEnd = _onTouchEnd_js__WEBPACK_IMPORTED_MODULE_3__["default"].bind(swiper); 3411 if (params.cssMode) { 3412 swiper.onScroll = _onScroll_js__WEBPACK_IMPORTED_MODULE_6__["default"].bind(swiper); 3413 } 3414 swiper.onClick = _onClick_js__WEBPACK_IMPORTED_MODULE_5__["default"].bind(swiper); 3415 swiper.onLoad = _onLoad_js__WEBPACK_IMPORTED_MODULE_7__["default"].bind(swiper); 3416 if (!dummyEventAttached) { 3417 document.addEventListener('touchstart', dummyEventListener); 3418 dummyEventAttached = true; 3419 } 3420 events(swiper, 'on'); 3421} 3422function detachEvents() { 3423 const swiper = this; 3424 events(swiper, 'off'); 3425} 3426/* harmony default export */ __webpack_exports__["default"] = ({ 3427 attachEvents, 3428 detachEvents 3429}); 3430 3431/***/ }), 3432
vendor: 857 bytes, lines 3433-3456
3433/***/ "./node_modules/swiper/core/events/onClick.js": 3434/*!****************************************************!*\ 3435 !*** ./node_modules/swiper/core/events/onClick.js ***! 3436 \****************************************************/ 3437/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 3438 3439__webpack_require__.r(__webpack_exports__); 3440/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3441/* harmony export */ "default": function() { return /* binding */ onClick; } 3442/* harmony export */ }); 3443function onClick(e) { 3444 const swiper = this; 3445 if (!swiper.enabled) return; 3446 if (!swiper.allowClick) { 3447 if (swiper.params.preventClicks) e.preventDefault(); 3448 if (swiper.params.preventClicksPropagation && swiper.animating) { 3449 e.stopPropagation(); 3450 e.stopImmediatePropagation(); 3451 } 3452 } 3453} 3454 3455/***/ }), 3456
vendor: 1,054 bytes, lines 3457-3479
3457/***/ "./node_modules/swiper/core/events/onLoad.js": 3458/*!***************************************************!*\ 3459 !*** ./node_modules/swiper/core/events/onLoad.js ***! 3460 \***************************************************/ 3461/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 3462 3463__webpack_require__.r(__webpack_exports__); 3464/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3465/* harmony export */ "default": function() { return /* binding */ onLoad; } 3466/* harmony export */ }); 3467/* harmony import */ var _shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/process-lazy-preloader.js */ "./node_modules/swiper/shared/process-lazy-preloader.js"); 3468 3469function onLoad(e) { 3470 const swiper = this; 3471 (0,_shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_0__.processLazyPreloader)(swiper, e.target); 3472 if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) { 3473 return; 3474 } 3475 swiper.update(); 3476} 3477 3478/***/ }), 3479
vendor: 2,111 bytes, lines 3480-3544
3480/***/ "./node_modules/swiper/core/events/onResize.js": 3481/*!*****************************************************!*\ 3482 !*** ./node_modules/swiper/core/events/onResize.js ***! 3483 \*****************************************************/ 3484/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 3485 3486__webpack_require__.r(__webpack_exports__); 3487/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3488/* harmony export */ "default": function() { return /* binding */ onResize; } 3489/* harmony export */ }); 3490function onResize() { 3491 const swiper = this; 3492 const { 3493 params, 3494 el 3495 } = swiper; 3496 if (el && el.offsetWidth === 0) return; 3497 3498 // Breakpoints 3499 if (params.breakpoints) { 3500 swiper.setBreakpoint(); 3501 } 3502 3503 // Save locks 3504 const { 3505 allowSlideNext, 3506 allowSlidePrev, 3507 snapGrid 3508 } = swiper; 3509 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 3510 3511 // Disable locks on resize 3512 swiper.allowSlideNext = true; 3513 swiper.allowSlidePrev = true; 3514 swiper.updateSize(); 3515 swiper.updateSlides(); 3516 swiper.updateSlidesClasses(); 3517 const isVirtualLoop = isVirtual && params.loop; 3518 if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) { 3519 swiper.slideTo(swiper.slides.length - 1, 0, false, true); 3520 } else { 3521 if (swiper.params.loop && !isVirtual) { 3522 swiper.slideToLoop(swiper.realIndex, 0, false, true); 3523 } else { 3524 swiper.slideTo(swiper.activeIndex, 0, false, true); 3525 } 3526 } 3527 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 3528 clearTimeout(swiper.autoplay.resizeTimeout); 3529 swiper.autoplay.resizeTimeout = setTimeout(() => { 3530 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 3531 swiper.autoplay.resume(); 3532 } 3533 }, 500); 3534 } 3535 // Return locks after resize 3536 swiper.allowSlidePrev = allowSlidePrev; 3537 swiper.allowSlideNext = allowSlideNext; 3538 if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) { 3539 swiper.checkOverflow(); 3540 } 3541} 3542 3543/***/ }), 3544
vendor: 1,441 bytes, lines 3545-3587
3545/***/ "./node_modules/swiper/core/events/onScroll.js": 3546/*!*****************************************************!*\ 3547 !*** ./node_modules/swiper/core/events/onScroll.js ***! 3548 \*****************************************************/ 3549/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 3550 3551__webpack_require__.r(__webpack_exports__); 3552/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3553/* harmony export */ "default": function() { return /* binding */ onScroll; } 3554/* harmony export */ }); 3555function onScroll() { 3556 const swiper = this; 3557 const { 3558 wrapperEl, 3559 rtlTranslate, 3560 enabled 3561 } = swiper; 3562 if (!enabled) return; 3563 swiper.previousTranslate = swiper.translate; 3564 if (swiper.isHorizontal()) { 3565 swiper.translate = -wrapperEl.scrollLeft; 3566 } else { 3567 swiper.translate = -wrapperEl.scrollTop; 3568 } 3569 // eslint-disable-next-line 3570 if (swiper.translate === 0) swiper.translate = 0; 3571 swiper.updateActiveIndex(); 3572 swiper.updateSlidesClasses(); 3573 let newProgress; 3574 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 3575 if (translatesDiff === 0) { 3576 newProgress = 0; 3577 } else { 3578 newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff; 3579 } 3580 if (newProgress !== swiper.progress) { 3581 swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate); 3582 } 3583 swiper.emit('setTranslate', swiper.translate, false); 3584} 3585 3586/***/ }), 3587
vendor: 5,978 bytes, lines 3588-3751
3588/***/ "./node_modules/swiper/core/events/onTouchEnd.js": 3589/*!*******************************************************!*\ 3590 !*** ./node_modules/swiper/core/events/onTouchEnd.js ***! 3591 \*******************************************************/ 3592/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 3593 3594__webpack_require__.r(__webpack_exports__); 3595/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3596/* harmony export */ "default": function() { return /* binding */ onTouchEnd; } 3597/* harmony export */ }); 3598/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 3599 3600function onTouchEnd(event) { 3601 const swiper = this; 3602 const data = swiper.touchEventsData; 3603 const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === event.pointerId); 3604 if (pointerIndex >= 0) { 3605 data.evCache.splice(pointerIndex, 1); 3606 } 3607 if (['pointercancel', 'pointerout', 'pointerleave'].includes(event.type)) { 3608 const proceed = event.type === 'pointercancel' && (swiper.browser.isSafari || swiper.browser.isWebView); 3609 if (!proceed) { 3610 return; 3611 } 3612 } 3613 const { 3614 params, 3615 touches, 3616 rtlTranslate: rtl, 3617 slidesGrid, 3618 enabled 3619 } = swiper; 3620 if (!enabled) return; 3621 if (!params.simulateTouch && event.pointerType === 'mouse') return; 3622 let e = event; 3623 if (e.originalEvent) e = e.originalEvent; 3624 if (data.allowTouchCallbacks) { 3625 swiper.emit('touchEnd', e); 3626 } 3627 data.allowTouchCallbacks = false; 3628 if (!data.isTouched) { 3629 if (data.isMoved && params.grabCursor) { 3630 swiper.setGrabCursor(false); 3631 } 3632 data.isMoved = false; 3633 data.startMoving = false; 3634 return; 3635 } 3636 // Return Grab Cursor 3637 if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 3638 swiper.setGrabCursor(false); 3639 } 3640 3641 // Time diff 3642 const touchEndTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)(); 3643 const timeDiff = touchEndTime - data.touchStartTime; 3644 3645 // Tap, doubleTap, Click 3646 if (swiper.allowClick) { 3647 const pathTree = e.path || e.composedPath && e.composedPath(); 3648 swiper.updateClickedSlide(pathTree && pathTree[0] || e.target); 3649 swiper.emit('tap click', e); 3650 if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) { 3651 swiper.emit('doubleTap doubleClick', e); 3652 } 3653 } 3654 data.lastClickTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)(); 3655 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.nextTick)(() => { 3656 if (!swiper.destroyed) swiper.allowClick = true; 3657 }); 3658 if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) { 3659 data.isTouched = false; 3660 data.isMoved = false; 3661 data.startMoving = false; 3662 return; 3663 } 3664 data.isTouched = false; 3665 data.isMoved = false; 3666 data.startMoving = false; 3667 let currentPos; 3668 if (params.followFinger) { 3669 currentPos = rtl ? swiper.translate : -swiper.translate; 3670 } else { 3671 currentPos = -data.currentTranslate; 3672 } 3673 if (params.cssMode) { 3674 return; 3675 } 3676 if (swiper.params.freeMode && params.freeMode.enabled) { 3677 swiper.freeMode.onTouchEnd({ 3678 currentPos 3679 }); 3680 return; 3681 } 3682 3683 // Find current slide 3684 let stopIndex = 0; 3685 let groupSize = swiper.slidesSizesGrid[0]; 3686 for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) { 3687 const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 3688 if (typeof slidesGrid[i + increment] !== 'undefined') { 3689 if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) { 3690 stopIndex = i; 3691 groupSize = slidesGrid[i + increment] - slidesGrid[i]; 3692 } 3693 } else if (currentPos >= slidesGrid[i]) { 3694 stopIndex = i; 3695 groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; 3696 } 3697 } 3698 let rewindFirstIndex = null; 3699 let rewindLastIndex = null; 3700 if (params.rewind) { 3701 if (swiper.isBeginning) { 3702 rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; 3703 } else if (swiper.isEnd) { 3704 rewindFirstIndex = 0; 3705 } 3706 } 3707 // Find current slide size 3708 const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; 3709 const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 3710 if (timeDiff > params.longSwipesMs) { 3711 // Long touches 3712 if (!params.longSwipes) { 3713 swiper.slideTo(swiper.activeIndex); 3714 return; 3715 } 3716 if (swiper.swipeDirection === 'next') { 3717 if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex); 3718 } 3719 if (swiper.swipeDirection === 'prev') { 3720 if (ratio > 1 - params.longSwipesRatio) { 3721 swiper.slideTo(stopIndex + increment); 3722 } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) { 3723 swiper.slideTo(rewindLastIndex); 3724 } else { 3725 swiper.slideTo(stopIndex); 3726 } 3727 } 3728 } else { 3729 // Short swipes 3730 if (!params.shortSwipes) { 3731 swiper.slideTo(swiper.activeIndex); 3732 return; 3733 } 3734 const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl); 3735 if (!isNavButtonTarget) { 3736 if (swiper.swipeDirection === 'next') { 3737 swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment); 3738 } 3739 if (swiper.swipeDirection === 'prev') { 3740 swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex); 3741 } 3742 } else if (e.target === swiper.navigation.nextEl) { 3743 swiper.slideTo(stopIndex + increment); 3744 } else { 3745 swiper.slideTo(stopIndex); 3746 } 3747 } 3748} 3749 3750/***/ }), 3751
vendor: 9,334 bytes, lines 3752-4007
3752/***/ "./node_modules/swiper/core/events/onTouchMove.js": 3753/*!********************************************************!*\ 3754 !*** ./node_modules/swiper/core/events/onTouchMove.js ***! 3755 \********************************************************/ 3756/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 3757 3758__webpack_require__.r(__webpack_exports__); 3759/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3760/* harmony export */ "default": function() { return /* binding */ onTouchMove; } 3761/* harmony export */ }); 3762/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 3763/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 3764 3765 3766function onTouchMove(event) { 3767 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 3768 const swiper = this; 3769 const data = swiper.touchEventsData; 3770 const { 3771 params, 3772 touches, 3773 rtlTranslate: rtl, 3774 enabled 3775 } = swiper; 3776 if (!enabled) return; 3777 if (!params.simulateTouch && event.pointerType === 'mouse') return; 3778 let e = event; 3779 if (e.originalEvent) e = e.originalEvent; 3780 if (!data.isTouched) { 3781 if (data.startMoving && data.isScrolling) { 3782 swiper.emit('touchMoveOpposite', e); 3783 } 3784 return; 3785 } 3786 const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId); 3787 if (pointerIndex >= 0) data.evCache[pointerIndex] = e; 3788 const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e; 3789 const pageX = targetTouch.pageX; 3790 const pageY = targetTouch.pageY; 3791 if (e.preventedByNestedSwiper) { 3792 touches.startX = pageX; 3793 touches.startY = pageY; 3794 return; 3795 } 3796 if (!swiper.allowTouchMove) { 3797 if (!e.target.matches(data.focusableElements)) { 3798 swiper.allowClick = false; 3799 } 3800 if (data.isTouched) { 3801 Object.assign(touches, { 3802 startX: pageX, 3803 startY: pageY, 3804 prevX: swiper.touches.currentX, 3805 prevY: swiper.touches.currentY, 3806 currentX: pageX, 3807 currentY: pageY 3808 }); 3809 data.touchStartTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)(); 3810 } 3811 return; 3812 } 3813 if (params.touchReleaseOnEdges && !params.loop) { 3814 if (swiper.isVertical()) { 3815 // Vertical 3816 if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) { 3817 data.isTouched = false; 3818 data.isMoved = false; 3819 return; 3820 } 3821 } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) { 3822 return; 3823 } 3824 } 3825 if (document.activeElement) { 3826 if (e.target === document.activeElement && e.target.matches(data.focusableElements)) { 3827 data.isMoved = true; 3828 swiper.allowClick = false; 3829 return; 3830 } 3831 } 3832 if (data.allowTouchCallbacks) { 3833 swiper.emit('touchMove', e); 3834 } 3835 if (e.targetTouches && e.targetTouches.length > 1) return; 3836 touches.currentX = pageX; 3837 touches.currentY = pageY; 3838 const diffX = touches.currentX - touches.startX; 3839 const diffY = touches.currentY - touches.startY; 3840 if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return; 3841 if (typeof data.isScrolling === 'undefined') { 3842 let touchAngle; 3843 if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) { 3844 data.isScrolling = false; 3845 } else { 3846 // eslint-disable-next-line 3847 if (diffX * diffX + diffY * diffY >= 25) { 3848 touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI; 3849 data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle; 3850 } 3851 } 3852 } 3853 if (data.isScrolling) { 3854 swiper.emit('touchMoveOpposite', e); 3855 } 3856 if (typeof data.startMoving === 'undefined') { 3857 if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) { 3858 data.startMoving = true; 3859 } 3860 } 3861 if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) { 3862 data.isTouched = false; 3863 return; 3864 } 3865 if (!data.startMoving) { 3866 return; 3867 } 3868 swiper.allowClick = false; 3869 if (!params.cssMode && e.cancelable) { 3870 e.preventDefault(); 3871 } 3872 if (params.touchMoveStopPropagation && !params.nested) { 3873 e.stopPropagation(); 3874 } 3875 let diff = swiper.isHorizontal() ? diffX : diffY; 3876 let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY; 3877 if (params.oneWayMovement) { 3878 diff = Math.abs(diff) * (rtl ? 1 : -1); 3879 touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1); 3880 } 3881 touches.diff = diff; 3882 diff *= params.touchRatio; 3883 if (rtl) { 3884 diff = -diff; 3885 touchesDiff = -touchesDiff; 3886 } 3887 const prevTouchesDirection = swiper.touchesDirection; 3888 swiper.swipeDirection = diff > 0 ? 'prev' : 'next'; 3889 swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next'; 3890 const isLoop = swiper.params.loop && !params.cssMode; 3891 if (!data.isMoved) { 3892 if (isLoop) { 3893 swiper.loopFix({ 3894 direction: swiper.swipeDirection 3895 }); 3896 } 3897 data.startTranslate = swiper.getTranslate(); 3898 swiper.setTransition(0); 3899 if (swiper.animating) { 3900 const evt = new window.CustomEvent('transitionend', { 3901 bubbles: true, 3902 cancelable: true 3903 }); 3904 swiper.wrapperEl.dispatchEvent(evt); 3905 } 3906 data.allowMomentumBounce = false; 3907 // Grab Cursor 3908 if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 3909 swiper.setGrabCursor(true); 3910 } 3911 swiper.emit('sliderFirstMove', e); 3912 } 3913 let loopFixed; 3914 if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && Math.abs(diff) >= 1) { 3915 // need another loop fix 3916 swiper.loopFix({ 3917 direction: swiper.swipeDirection, 3918 setTranslate: true 3919 }); 3920 loopFixed = true; 3921 } 3922 swiper.emit('sliderMove', e); 3923 data.isMoved = true; 3924 data.currentTranslate = diff + data.startTranslate; 3925 let disableParentSwiper = true; 3926 let resistanceRatio = params.resistanceRatio; 3927 if (params.touchReleaseOnEdges) { 3928 resistanceRatio = 0; 3929 } 3930 if (diff > 0) { 3931 if (isLoop && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) { 3932 swiper.loopFix({ 3933 direction: 'prev', 3934 setTranslate: true, 3935 activeSlideIndex: 0 3936 }); 3937 } 3938 if (data.currentTranslate > swiper.minTranslate()) { 3939 disableParentSwiper = false; 3940 if (params.resistance) { 3941 data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio; 3942 } 3943 } 3944 } else if (diff < 0) { 3945 if (isLoop && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) { 3946 swiper.loopFix({ 3947 direction: 'next', 3948 setTranslate: true, 3949 activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10))) 3950 }); 3951 } 3952 if (data.currentTranslate < swiper.maxTranslate()) { 3953 disableParentSwiper = false; 3954 if (params.resistance) { 3955 data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio; 3956 } 3957 } 3958 } 3959 if (disableParentSwiper) { 3960 e.preventedByNestedSwiper = true; 3961 } 3962 3963 // Directions locks 3964 if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) { 3965 data.currentTranslate = data.startTranslate; 3966 } 3967 if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) { 3968 data.currentTranslate = data.startTranslate; 3969 } 3970 if (!swiper.allowSlidePrev && !swiper.allowSlideNext) { 3971 data.currentTranslate = data.startTranslate; 3972 } 3973 3974 // Threshold 3975 if (params.threshold > 0) { 3976 if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { 3977 if (!data.allowThresholdMove) { 3978 data.allowThresholdMove = true; 3979 touches.startX = touches.currentX; 3980 touches.startY = touches.currentY; 3981 data.currentTranslate = data.startTranslate; 3982 touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; 3983 return; 3984 } 3985 } else { 3986 data.currentTranslate = data.startTranslate; 3987 return; 3988 } 3989 } 3990 if (!params.followFinger || params.cssMode) return; 3991 3992 // Update active index in free mode 3993 if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) { 3994 swiper.updateActiveIndex(); 3995 swiper.updateSlidesClasses(); 3996 } 3997 if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) { 3998 swiper.freeMode.onTouchMove(); 3999 } 4000 // Update progress 4001 swiper.updateProgress(data.currentTranslate); 4002 // Update translate 4003 swiper.setTranslate(data.currentTranslate); 4004} 4005 4006/***/ }), 4007
vendor: 5,209 bytes, lines 4008-4134
4008/***/ "./node_modules/swiper/core/events/onTouchStart.js": 4009/*!*********************************************************!*\ 4010 !*** ./node_modules/swiper/core/events/onTouchStart.js ***! 4011 \*********************************************************/ 4012/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4013 4014__webpack_require__.r(__webpack_exports__); 4015/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4016/* harmony export */ "default": function() { return /* binding */ onTouchStart; } 4017/* harmony export */ }); 4018/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 4019/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 4020 4021 4022 4023// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd 4024function closestElement(selector, base = this) { 4025 function __closestFrom(el) { 4026 if (!el || el === (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)() || el === (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)()) return null; 4027 if (el.assignedSlot) el = el.assignedSlot; 4028 const found = el.closest(selector); 4029 if (!found && !el.getRootNode) { 4030 return null; 4031 } 4032 return found || __closestFrom(el.getRootNode().host); 4033 } 4034 return __closestFrom(base); 4035} 4036function onTouchStart(event) { 4037 const swiper = this; 4038 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 4039 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 4040 const data = swiper.touchEventsData; 4041 data.evCache.push(event); 4042 const { 4043 params, 4044 touches, 4045 enabled 4046 } = swiper; 4047 if (!enabled) return; 4048 if (!params.simulateTouch && event.pointerType === 'mouse') return; 4049 if (swiper.animating && params.preventInteractionOnTransition) { 4050 return; 4051 } 4052 if (!swiper.animating && params.cssMode && params.loop) { 4053 swiper.loopFix(); 4054 } 4055 let e = event; 4056 if (e.originalEvent) e = e.originalEvent; 4057 let targetEl = e.target; 4058 if (params.touchEventsTarget === 'wrapper') { 4059 if (!swiper.wrapperEl.contains(targetEl)) return; 4060 } 4061 if ('which' in e && e.which === 3) return; 4062 if ('button' in e && e.button > 0) return; 4063 if (data.isTouched && data.isMoved) return; 4064 4065 // change target el for shadow root component 4066 const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; 4067 // eslint-disable-next-line 4068 const eventPath = event.composedPath ? event.composedPath() : event.path; 4069 if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) { 4070 targetEl = eventPath[0]; 4071 } 4072 const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`; 4073 const isTargetShadow = !!(e.target && e.target.shadowRoot); 4074 4075 // use closestElement for shadow root element to get the actual closest for nested shadow root element 4076 if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) { 4077 swiper.allowClick = true; 4078 return; 4079 } 4080 if (params.swipeHandler) { 4081 if (!targetEl.closest(params.swipeHandler)) return; 4082 } 4083 touches.currentX = e.pageX; 4084 touches.currentY = e.pageY; 4085 const startX = touches.currentX; 4086 const startY = touches.currentY; 4087 4088 // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore 4089 4090 const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection; 4091 const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold; 4092 if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) { 4093 if (edgeSwipeDetection === 'prevent') { 4094 event.preventDefault(); 4095 } else { 4096 return; 4097 } 4098 } 4099 Object.assign(data, { 4100 isTouched: true, 4101 isMoved: false, 4102 allowTouchCallbacks: true, 4103 isScrolling: undefined, 4104 startMoving: undefined 4105 }); 4106 touches.startX = startX; 4107 touches.startY = startY; 4108 data.touchStartTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)(); 4109 swiper.allowClick = true; 4110 swiper.updateSize(); 4111 swiper.swipeDirection = undefined; 4112 if (params.threshold > 0) data.allowThresholdMove = false; 4113 let preventDefault = true; 4114 if (targetEl.matches(data.focusableElements)) { 4115 preventDefault = false; 4116 if (targetEl.nodeName === 'SELECT') { 4117 data.isTouched = false; 4118 } 4119 } 4120 if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) { 4121 document.activeElement.blur(); 4122 } 4123 const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault; 4124 if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) { 4125 e.preventDefault(); 4126 } 4127 if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) { 4128 swiper.freeMode.onTouchStart(); 4129 } 4130 swiper.emit('touchStart', e); 4131} 4132 4133/***/ }), 4134
vendor: 985 bytes, lines 4135-4152
4135/***/ "./node_modules/swiper/core/grab-cursor/index.js": 4136/*!*******************************************************!*\ 4137 !*** ./node_modules/swiper/core/grab-cursor/index.js ***! 4138 \*******************************************************/ 4139/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4140 4141__webpack_require__.r(__webpack_exports__); 4142/* harmony import */ var _setGrabCursor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setGrabCursor.js */ "./node_modules/swiper/core/grab-cursor/setGrabCursor.js"); 4143/* harmony import */ var _unsetGrabCursor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./unsetGrabCursor.js */ "./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js"); 4144 4145 4146/* harmony default export */ __webpack_exports__["default"] = ({ 4147 setGrabCursor: _setGrabCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"], 4148 unsetGrabCursor: _unsetGrabCursor_js__WEBPACK_IMPORTED_MODULE_1__["default"] 4149}); 4150 4151/***/ }), 4152
vendor: 1,132 bytes, lines 4153-4180
4153/***/ "./node_modules/swiper/core/grab-cursor/setGrabCursor.js": 4154/*!***************************************************************!*\ 4155 !*** ./node_modules/swiper/core/grab-cursor/setGrabCursor.js ***! 4156 \***************************************************************/ 4157/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4158 4159__webpack_require__.r(__webpack_exports__); 4160/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4161/* harmony export */ "default": function() { return /* binding */ setGrabCursor; } 4162/* harmony export */ }); 4163function setGrabCursor(moving) { 4164 const swiper = this; 4165 if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return; 4166 const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl; 4167 if (swiper.isElement) { 4168 swiper.__preventObserver__ = true; 4169 } 4170 el.style.cursor = 'move'; 4171 el.style.cursor = moving ? 'grabbing' : 'grab'; 4172 if (swiper.isElement) { 4173 requestAnimationFrame(() => { 4174 swiper.__preventObserver__ = false; 4175 }); 4176 } 4177} 4178 4179/***/ }), 4180
vendor: 1,043 bytes, lines 4181-4208
4181/***/ "./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js": 4182/*!*****************************************************************!*\ 4183 !*** ./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js ***! 4184 \*****************************************************************/ 4185/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4186 4187__webpack_require__.r(__webpack_exports__); 4188/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4189/* harmony export */ "default": function() { return /* binding */ unsetGrabCursor; } 4190/* harmony export */ }); 4191function unsetGrabCursor() { 4192 const swiper = this; 4193 if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) { 4194 return; 4195 } 4196 if (swiper.isElement) { 4197 swiper.__preventObserver__ = true; 4198 } 4199 swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = ''; 4200 if (swiper.isElement) { 4201 requestAnimationFrame(() => { 4202 swiper.__preventObserver__ = false; 4203 }); 4204 } 4205} 4206 4207/***/ }), 4208
vendor: 1,128 bytes, lines 4209-4229
4209/***/ "./node_modules/swiper/core/loop/index.js": 4210/*!************************************************!*\ 4211 !*** ./node_modules/swiper/core/loop/index.js ***! 4212 \************************************************/ 4213/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4214 4215__webpack_require__.r(__webpack_exports__); 4216/* harmony import */ var _loopCreate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./loopCreate.js */ "./node_modules/swiper/core/loop/loopCreate.js"); 4217/* harmony import */ var _loopFix_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./loopFix.js */ "./node_modules/swiper/core/loop/loopFix.js"); 4218/* harmony import */ var _loopDestroy_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./loopDestroy.js */ "./node_modules/swiper/core/loop/loopDestroy.js"); 4219 4220 4221 4222/* harmony default export */ __webpack_exports__["default"] = ({ 4223 loopCreate: _loopCreate_js__WEBPACK_IMPORTED_MODULE_0__["default"], 4224 loopFix: _loopFix_js__WEBPACK_IMPORTED_MODULE_1__["default"], 4225 loopDestroy: _loopDestroy_js__WEBPACK_IMPORTED_MODULE_2__["default"] 4226}); 4227 4228/***/ }), 4229
vendor: 1,245 bytes, lines 4230-4260
4230/***/ "./node_modules/swiper/core/loop/loopCreate.js": 4231/*!*****************************************************!*\ 4232 !*** ./node_modules/swiper/core/loop/loopCreate.js ***! 4233 \*****************************************************/ 4234/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4235 4236__webpack_require__.r(__webpack_exports__); 4237/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4238/* harmony export */ "default": function() { return /* binding */ loopCreate; } 4239/* harmony export */ }); 4240/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 4241 4242function loopCreate(slideRealIndex) { 4243 const swiper = this; 4244 const { 4245 params, 4246 slidesEl 4247 } = swiper; 4248 if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return; 4249 const slides = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(slidesEl, `.${params.slideClass}, swiper-slide`); 4250 slides.forEach((el, index) => { 4251 el.setAttribute('data-swiper-slide-index', index); 4252 }); 4253 swiper.loopFix({ 4254 slideRealIndex, 4255 direction: params.centeredSlides ? undefined : 'next' 4256 }); 4257} 4258 4259/***/ }), 4260
vendor: 1,260 bytes, lines 4261-4295
4261/***/ "./node_modules/swiper/core/loop/loopDestroy.js": 4262/*!******************************************************!*\ 4263 !*** ./node_modules/swiper/core/loop/loopDestroy.js ***! 4264 \******************************************************/ 4265/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4266 4267__webpack_require__.r(__webpack_exports__); 4268/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4269/* harmony export */ "default": function() { return /* binding */ loopDestroy; } 4270/* harmony export */ }); 4271function loopDestroy() { 4272 const swiper = this; 4273 const { 4274 params, 4275 slidesEl 4276 } = swiper; 4277 if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return; 4278 swiper.recalcSlides(); 4279 const newSlidesOrder = []; 4280 swiper.slides.forEach(slideEl => { 4281 const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex; 4282 newSlidesOrder[index] = slideEl; 4283 }); 4284 swiper.slides.forEach(slideEl => { 4285 slideEl.removeAttribute('data-swiper-slide-index'); 4286 }); 4287 newSlidesOrder.forEach(slideEl => { 4288 slidesEl.append(slideEl); 4289 }); 4290 swiper.recalcSlides(); 4291 swiper.slideTo(swiper.realIndex, 0); 4292} 4293 4294/***/ }), 4295
vendor: 6,034 bytes, lines 4296-4455
4296/***/ "./node_modules/swiper/core/loop/loopFix.js": 4297/*!**************************************************!*\ 4298 !*** ./node_modules/swiper/core/loop/loopFix.js ***! 4299 \**************************************************/ 4300/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4301 4302__webpack_require__.r(__webpack_exports__); 4303/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4304/* harmony export */ "default": function() { return /* binding */ loopFix; } 4305/* harmony export */ }); 4306function loopFix({ 4307 slideRealIndex, 4308 slideTo = true, 4309 direction, 4310 setTranslate, 4311 activeSlideIndex, 4312 byController, 4313 byMousewheel 4314} = {}) { 4315 const swiper = this; 4316 if (!swiper.params.loop) return; 4317 swiper.emit('beforeLoopFix'); 4318 const { 4319 slides, 4320 allowSlidePrev, 4321 allowSlideNext, 4322 slidesEl, 4323 params 4324 } = swiper; 4325 swiper.allowSlidePrev = true; 4326 swiper.allowSlideNext = true; 4327 if (swiper.virtual && params.virtual.enabled) { 4328 if (slideTo) { 4329 if (!params.centeredSlides && swiper.snapIndex === 0) { 4330 swiper.slideTo(swiper.virtual.slides.length, 0, false, true); 4331 } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) { 4332 swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true); 4333 } else if (swiper.snapIndex === swiper.snapGrid.length - 1) { 4334 swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true); 4335 } 4336 } 4337 swiper.allowSlidePrev = allowSlidePrev; 4338 swiper.allowSlideNext = allowSlideNext; 4339 swiper.emit('loopFix'); 4340 return; 4341 } 4342 const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)); 4343 let loopedSlides = params.loopedSlides || slidesPerView; 4344 if (loopedSlides % params.slidesPerGroup !== 0) { 4345 loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup; 4346 } 4347 swiper.loopedSlides = loopedSlides; 4348 const prependSlidesIndexes = []; 4349 const appendSlidesIndexes = []; 4350 let activeIndex = swiper.activeIndex; 4351 if (typeof activeSlideIndex === 'undefined') { 4352 activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.classList.contains(params.slideActiveClass))[0]); 4353 } else { 4354 activeIndex = activeSlideIndex; 4355 } 4356 const isNext = direction === 'next' || !direction; 4357 const isPrev = direction === 'prev' || !direction; 4358 let slidesPrepended = 0; 4359 let slidesAppended = 0; 4360 // prepend last slides before start 4361 if (activeSlideIndex < loopedSlides) { 4362 slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup); 4363 for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) { 4364 const index = i - Math.floor(i / slides.length) * slides.length; 4365 prependSlidesIndexes.push(slides.length - index - 1); 4366 } 4367 } else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) { 4368 slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup); 4369 for (let i = 0; i < slidesAppended; i += 1) { 4370 const index = i - Math.floor(i / slides.length) * slides.length; 4371 appendSlidesIndexes.push(index); 4372 } 4373 } 4374 if (isPrev) { 4375 prependSlidesIndexes.forEach(index => { 4376 swiper.slides[index].swiperLoopMoveDOM = true; 4377 slidesEl.prepend(swiper.slides[index]); 4378 swiper.slides[index].swiperLoopMoveDOM = false; 4379 }); 4380 } 4381 if (isNext) { 4382 appendSlidesIndexes.forEach(index => { 4383 swiper.slides[index].swiperLoopMoveDOM = true; 4384 slidesEl.append(swiper.slides[index]); 4385 swiper.slides[index].swiperLoopMoveDOM = false; 4386 }); 4387 } 4388 swiper.recalcSlides(); 4389 if (params.slidesPerView === 'auto') { 4390 swiper.updateSlides(); 4391 } 4392 if (params.watchSlidesProgress) { 4393 swiper.updateSlidesOffset(); 4394 } 4395 if (slideTo) { 4396 if (prependSlidesIndexes.length > 0 && isPrev) { 4397 if (typeof slideRealIndex === 'undefined') { 4398 const currentSlideTranslate = swiper.slidesGrid[activeIndex]; 4399 const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended]; 4400 const diff = newSlideTranslate - currentSlideTranslate; 4401 if (byMousewheel) { 4402 swiper.setTranslate(swiper.translate - diff); 4403 } else { 4404 swiper.slideTo(activeIndex + slidesPrepended, 0, false, true); 4405 if (setTranslate) { 4406 swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff; 4407 } 4408 } 4409 } else { 4410 if (setTranslate) { 4411 swiper.slideToLoop(slideRealIndex, 0, false, true); 4412 } 4413 } 4414 } else if (appendSlidesIndexes.length > 0 && isNext) { 4415 if (typeof slideRealIndex === 'undefined') { 4416 const currentSlideTranslate = swiper.slidesGrid[activeIndex]; 4417 const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended]; 4418 const diff = newSlideTranslate - currentSlideTranslate; 4419 if (byMousewheel) { 4420 swiper.setTranslate(swiper.translate - diff); 4421 } else { 4422 swiper.slideTo(activeIndex - slidesAppended, 0, false, true); 4423 if (setTranslate) { 4424 swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff; 4425 } 4426 } 4427 } else { 4428 swiper.slideToLoop(slideRealIndex, 0, false, true); 4429 } 4430 } 4431 } 4432 swiper.allowSlidePrev = allowSlidePrev; 4433 swiper.allowSlideNext = allowSlideNext; 4434 if (swiper.controller && swiper.controller.control && !byController) { 4435 const loopParams = { 4436 slideRealIndex, 4437 slideTo: false, 4438 direction, 4439 setTranslate, 4440 activeSlideIndex, 4441 byController: true 4442 }; 4443 if (Array.isArray(swiper.controller.control)) { 4444 swiper.controller.control.forEach(c => { 4445 if (!c.destroyed && c.params.loop) c.loopFix(loopParams); 4446 }); 4447 } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) { 4448 swiper.controller.control.loopFix(loopParams); 4449 } 4450 } 4451 swiper.emit('loopFix'); 4452} 4453 4454/***/ }), 4455
vendor: 1,921 bytes, lines 4456-4501
4456/***/ "./node_modules/swiper/core/moduleExtendParams.js": 4457/*!********************************************************!*\ 4458 !*** ./node_modules/swiper/core/moduleExtendParams.js ***! 4459 \********************************************************/ 4460/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4461 4462__webpack_require__.r(__webpack_exports__); 4463/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4464/* harmony export */ "default": function() { return /* binding */ moduleExtendParams; } 4465/* harmony export */ }); 4466/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 4467 4468function moduleExtendParams(params, allModulesParams) { 4469 return function extendParams(obj = {}) { 4470 const moduleParamName = Object.keys(obj)[0]; 4471 const moduleParams = obj[moduleParamName]; 4472 if (typeof moduleParams !== 'object' || moduleParams === null) { 4473 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(allModulesParams, obj); 4474 return; 4475 } 4476 if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) { 4477 params[moduleParamName] = { 4478 auto: true 4479 }; 4480 } 4481 if (!(moduleParamName in params && 'enabled' in moduleParams)) { 4482 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(allModulesParams, obj); 4483 return; 4484 } 4485 if (params[moduleParamName] === true) { 4486 params[moduleParamName] = { 4487 enabled: true 4488 }; 4489 } 4490 if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) { 4491 params[moduleParamName].enabled = true; 4492 } 4493 if (!params[moduleParamName]) params[moduleParamName] = { 4494 enabled: false 4495 }; 4496 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(allModulesParams, obj); 4497 }; 4498} 4499 4500/***/ }), 4501
vendor: 3,037 bytes, lines 4502-4585
4502/***/ "./node_modules/swiper/core/modules/observer/observer.js": 4503/*!***************************************************************!*\ 4504 !*** ./node_modules/swiper/core/modules/observer/observer.js ***! 4505 \***************************************************************/ 4506/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4507 4508__webpack_require__.r(__webpack_exports__); 4509/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4510/* harmony export */ "default": function() { return /* binding */ Observer; } 4511/* harmony export */ }); 4512/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 4513/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 4514 4515 4516function Observer({ 4517 swiper, 4518 extendParams, 4519 on, 4520 emit 4521}) { 4522 const observers = []; 4523 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 4524 const attach = (target, options = {}) => { 4525 const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; 4526 const observer = new ObserverFunc(mutations => { 4527 // The observerUpdate event should only be triggered 4528 // once despite the number of mutations. Additional 4529 // triggers are redundant and are very costly 4530 if (swiper.__preventObserver__) return; 4531 if (mutations.length === 1) { 4532 emit('observerUpdate', mutations[0]); 4533 return; 4534 } 4535 const observerUpdate = function observerUpdate() { 4536 emit('observerUpdate', mutations[0]); 4537 }; 4538 if (window.requestAnimationFrame) { 4539 window.requestAnimationFrame(observerUpdate); 4540 } else { 4541 window.setTimeout(observerUpdate, 0); 4542 } 4543 }); 4544 observer.observe(target, { 4545 attributes: typeof options.attributes === 'undefined' ? true : options.attributes, 4546 childList: typeof options.childList === 'undefined' ? true : options.childList, 4547 characterData: typeof options.characterData === 'undefined' ? true : options.characterData 4548 }); 4549 observers.push(observer); 4550 }; 4551 const init = () => { 4552 if (!swiper.params.observer) return; 4553 if (swiper.params.observeParents) { 4554 const containerParents = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(swiper.el); 4555 for (let i = 0; i < containerParents.length; i += 1) { 4556 attach(containerParents[i]); 4557 } 4558 } 4559 // Observe container 4560 attach(swiper.el, { 4561 childList: swiper.params.observeSlideChildren 4562 }); 4563 4564 // Observe wrapper 4565 attach(swiper.wrapperEl, { 4566 attributes: false 4567 }); 4568 }; 4569 const destroy = () => { 4570 observers.forEach(observer => { 4571 observer.disconnect(); 4572 }); 4573 observers.splice(0, observers.length); 4574 }; 4575 extendParams({ 4576 observer: false, 4577 observeParents: false, 4578 observeSlideChildren: false 4579 }); 4580 on('init', init); 4581 on('destroy', destroy); 4582} 4583 4584/***/ }), 4585
vendor: 2,800 bytes, lines 4586-4666
4586/***/ "./node_modules/swiper/core/modules/resize/resize.js": 4587/*!***********************************************************!*\ 4588 !*** ./node_modules/swiper/core/modules/resize/resize.js ***! 4589 \***********************************************************/ 4590/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4591 4592__webpack_require__.r(__webpack_exports__); 4593/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4594/* harmony export */ "default": function() { return /* binding */ Resize; } 4595/* harmony export */ }); 4596/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 4597 4598function Resize({ 4599 swiper, 4600 on, 4601 emit 4602}) { 4603 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 4604 let observer = null; 4605 let animationFrame = null; 4606 const resizeHandler = () => { 4607 if (!swiper || swiper.destroyed || !swiper.initialized) return; 4608 emit('beforeResize'); 4609 emit('resize'); 4610 }; 4611 const createObserver = () => { 4612 if (!swiper || swiper.destroyed || !swiper.initialized) return; 4613 observer = new ResizeObserver(entries => { 4614 animationFrame = window.requestAnimationFrame(() => { 4615 const { 4616 width, 4617 height 4618 } = swiper; 4619 let newWidth = width; 4620 let newHeight = height; 4621 entries.forEach(({ 4622 contentBoxSize, 4623 contentRect, 4624 target 4625 }) => { 4626 if (target && target !== swiper.el) return; 4627 newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize; 4628 newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize; 4629 }); 4630 if (newWidth !== width || newHeight !== height) { 4631 resizeHandler(); 4632 } 4633 }); 4634 }); 4635 observer.observe(swiper.el); 4636 }; 4637 const removeObserver = () => { 4638 if (animationFrame) { 4639 window.cancelAnimationFrame(animationFrame); 4640 } 4641 if (observer && observer.unobserve && swiper.el) { 4642 observer.unobserve(swiper.el); 4643 observer = null; 4644 } 4645 }; 4646 const orientationChangeHandler = () => { 4647 if (!swiper || swiper.destroyed || !swiper.initialized) return; 4648 emit('orientationchange'); 4649 }; 4650 on('init', () => { 4651 if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') { 4652 createObserver(); 4653 return; 4654 } 4655 window.addEventListener('resize', resizeHandler); 4656 window.addEventListener('orientationchange', orientationChangeHandler); 4657 }); 4658 on('destroy', () => { 4659 removeObserver(); 4660 window.removeEventListener('resize', resizeHandler); 4661 window.removeEventListener('orientationchange', orientationChangeHandler); 4662 }); 4663} 4664 4665/***/ }), 4666
vendor: 2,134 bytes, lines 4667-4699
4667/***/ "./node_modules/swiper/core/slide/index.js": 4668/*!*************************************************!*\ 4669 !*** ./node_modules/swiper/core/slide/index.js ***! 4670 \*************************************************/ 4671/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4672 4673__webpack_require__.r(__webpack_exports__); 4674/* harmony import */ var _slideTo_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./slideTo.js */ "./node_modules/swiper/core/slide/slideTo.js"); 4675/* harmony import */ var _slideToLoop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slideToLoop.js */ "./node_modules/swiper/core/slide/slideToLoop.js"); 4676/* harmony import */ var _slideNext_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./slideNext.js */ "./node_modules/swiper/core/slide/slideNext.js"); 4677/* harmony import */ var _slidePrev_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./slidePrev.js */ "./node_modules/swiper/core/slide/slidePrev.js"); 4678/* harmony import */ var _slideReset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./slideReset.js */ "./node_modules/swiper/core/slide/slideReset.js"); 4679/* harmony import */ var _slideToClosest_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./slideToClosest.js */ "./node_modules/swiper/core/slide/slideToClosest.js"); 4680/* harmony import */ var _slideToClickedSlide_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./slideToClickedSlide.js */ "./node_modules/swiper/core/slide/slideToClickedSlide.js"); 4681 4682 4683 4684 4685 4686 4687 4688/* harmony default export */ __webpack_exports__["default"] = ({ 4689 slideTo: _slideTo_js__WEBPACK_IMPORTED_MODULE_0__["default"], 4690 slideToLoop: _slideToLoop_js__WEBPACK_IMPORTED_MODULE_1__["default"], 4691 slideNext: _slideNext_js__WEBPACK_IMPORTED_MODULE_2__["default"], 4692 slidePrev: _slidePrev_js__WEBPACK_IMPORTED_MODULE_3__["default"], 4693 slideReset: _slideReset_js__WEBPACK_IMPORTED_MODULE_4__["default"], 4694 slideToClosest: _slideToClosest_js__WEBPACK_IMPORTED_MODULE_5__["default"], 4695 slideToClickedSlide: _slideToClickedSlide_js__WEBPACK_IMPORTED_MODULE_6__["default"] 4696}); 4697 4698/***/ }), 4699
vendor: 1,587 bytes, lines 4700-4740
4700/***/ "./node_modules/swiper/core/slide/slideNext.js": 4701/*!*****************************************************!*\ 4702 !*** ./node_modules/swiper/core/slide/slideNext.js ***! 4703 \*****************************************************/ 4704/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4705 4706__webpack_require__.r(__webpack_exports__); 4707/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4708/* harmony export */ "default": function() { return /* binding */ slideNext; } 4709/* harmony export */ }); 4710/* eslint no-unused-vars: "off" */ 4711function slideNext(speed = this.params.speed, runCallbacks = true, internal) { 4712 const swiper = this; 4713 const { 4714 enabled, 4715 params, 4716 animating 4717 } = swiper; 4718 if (!enabled) return swiper; 4719 let perGroup = params.slidesPerGroup; 4720 if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { 4721 perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1); 4722 } 4723 const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup; 4724 const isVirtual = swiper.virtual && params.virtual.enabled; 4725 if (params.loop) { 4726 if (animating && !isVirtual && params.loopPreventsSliding) return false; 4727 swiper.loopFix({ 4728 direction: 'next' 4729 }); 4730 // eslint-disable-next-line 4731 swiper._clientLeft = swiper.wrapperEl.clientLeft; 4732 } 4733 if (params.rewind && swiper.isEnd) { 4734 return swiper.slideTo(0, speed, runCallbacks, internal); 4735 } 4736 return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 4737} 4738 4739/***/ }), 4740
vendor: 2,656 bytes, lines 4741-4809
4741/***/ "./node_modules/swiper/core/slide/slidePrev.js": 4742/*!*****************************************************!*\ 4743 !*** ./node_modules/swiper/core/slide/slidePrev.js ***! 4744 \*****************************************************/ 4745/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4746 4747__webpack_require__.r(__webpack_exports__); 4748/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4749/* harmony export */ "default": function() { return /* binding */ slidePrev; } 4750/* harmony export */ }); 4751/* eslint no-unused-vars: "off" */ 4752function slidePrev(speed = this.params.speed, runCallbacks = true, internal) { 4753 const swiper = this; 4754 const { 4755 params, 4756 snapGrid, 4757 slidesGrid, 4758 rtlTranslate, 4759 enabled, 4760 animating 4761 } = swiper; 4762 if (!enabled) return swiper; 4763 const isVirtual = swiper.virtual && params.virtual.enabled; 4764 if (params.loop) { 4765 if (animating && !isVirtual && params.loopPreventsSliding) return false; 4766 swiper.loopFix({ 4767 direction: 'prev' 4768 }); 4769 // eslint-disable-next-line 4770 swiper._clientLeft = swiper.wrapperEl.clientLeft; 4771 } 4772 const translate = rtlTranslate ? swiper.translate : -swiper.translate; 4773 function normalize(val) { 4774 if (val < 0) return -Math.floor(Math.abs(val)); 4775 return Math.floor(val); 4776 } 4777 const normalizedTranslate = normalize(translate); 4778 const normalizedSnapGrid = snapGrid.map(val => normalize(val)); 4779 let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; 4780 if (typeof prevSnap === 'undefined' && params.cssMode) { 4781 let prevSnapIndex; 4782 snapGrid.forEach((snap, snapIndex) => { 4783 if (normalizedTranslate >= snap) { 4784 // prevSnap = snap; 4785 prevSnapIndex = snapIndex; 4786 } 4787 }); 4788 if (typeof prevSnapIndex !== 'undefined') { 4789 prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex]; 4790 } 4791 } 4792 let prevIndex = 0; 4793 if (typeof prevSnap !== 'undefined') { 4794 prevIndex = slidesGrid.indexOf(prevSnap); 4795 if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; 4796 if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { 4797 prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1; 4798 prevIndex = Math.max(prevIndex, 0); 4799 } 4800 } 4801 if (params.rewind && swiper.isBeginning) { 4802 const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; 4803 return swiper.slideTo(lastIndex, speed, runCallbacks, internal); 4804 } 4805 return swiper.slideTo(prevIndex, speed, runCallbacks, internal); 4806} 4807 4808/***/ }), 4809
vendor: 778 bytes, lines 4810-4827
4810/***/ "./node_modules/swiper/core/slide/slideReset.js": 4811/*!******************************************************!*\ 4812 !*** ./node_modules/swiper/core/slide/slideReset.js ***! 4813 \******************************************************/ 4814/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4815 4816__webpack_require__.r(__webpack_exports__); 4817/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4818/* harmony export */ "default": function() { return /* binding */ slideReset; } 4819/* harmony export */ }); 4820/* eslint no-unused-vars: "off" */ 4821function slideReset(speed = this.params.speed, runCallbacks = true, internal) { 4822 const swiper = this; 4823 return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); 4824} 4825 4826/***/ }), 4827
vendor: 5,741 bytes, lines 4828-4983
4828/***/ "./node_modules/swiper/core/slide/slideTo.js": 4829/*!***************************************************!*\ 4830 !*** ./node_modules/swiper/core/slide/slideTo.js ***! 4831 \***************************************************/ 4832/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4833 4834__webpack_require__.r(__webpack_exports__); 4835/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4836/* harmony export */ "default": function() { return /* binding */ slideTo; } 4837/* harmony export */ }); 4838/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 4839 4840function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) { 4841 if (typeof index === 'string') { 4842 index = parseInt(index, 10); 4843 } 4844 const swiper = this; 4845 let slideIndex = index; 4846 if (slideIndex < 0) slideIndex = 0; 4847 const { 4848 params, 4849 snapGrid, 4850 slidesGrid, 4851 previousIndex, 4852 activeIndex, 4853 rtlTranslate: rtl, 4854 wrapperEl, 4855 enabled 4856 } = swiper; 4857 if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) { 4858 return false; 4859 } 4860 const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); 4861 let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); 4862 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 4863 const translate = -snapGrid[snapIndex]; 4864 // Normalize slideIndex 4865 if (params.normalizeSlideIndex) { 4866 for (let i = 0; i < slidesGrid.length; i += 1) { 4867 const normalizedTranslate = -Math.floor(translate * 100); 4868 const normalizedGrid = Math.floor(slidesGrid[i] * 100); 4869 const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100); 4870 if (typeof slidesGrid[i + 1] !== 'undefined') { 4871 if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) { 4872 slideIndex = i; 4873 } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) { 4874 slideIndex = i + 1; 4875 } 4876 } else if (normalizedTranslate >= normalizedGrid) { 4877 slideIndex = i; 4878 } 4879 } 4880 } 4881 // Directions locks 4882 if (swiper.initialized && slideIndex !== activeIndex) { 4883 if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) { 4884 return false; 4885 } 4886 if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { 4887 if ((activeIndex || 0) !== slideIndex) { 4888 return false; 4889 } 4890 } 4891 } 4892 if (slideIndex !== (previousIndex || 0) && runCallbacks) { 4893 swiper.emit('beforeSlideChangeStart'); 4894 } 4895 4896 // Update progress 4897 swiper.updateProgress(translate); 4898 let direction; 4899 if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; 4900 4901 // Update Index 4902 if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) { 4903 swiper.updateActiveIndex(slideIndex); 4904 // Update Height 4905 if (params.autoHeight) { 4906 swiper.updateAutoHeight(); 4907 } 4908 swiper.updateSlidesClasses(); 4909 if (params.effect !== 'slide') { 4910 swiper.setTranslate(translate); 4911 } 4912 if (direction !== 'reset') { 4913 swiper.transitionStart(runCallbacks, direction); 4914 swiper.transitionEnd(runCallbacks, direction); 4915 } 4916 return false; 4917 } 4918 if (params.cssMode) { 4919 const isH = swiper.isHorizontal(); 4920 const t = rtl ? translate : -translate; 4921 if (speed === 0) { 4922 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 4923 if (isVirtual) { 4924 swiper.wrapperEl.style.scrollSnapType = 'none'; 4925 swiper._immediateVirtual = true; 4926 } 4927 if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) { 4928 swiper._cssModeVirtualInitialSet = true; 4929 requestAnimationFrame(() => { 4930 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 4931 }); 4932 } else { 4933 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 4934 } 4935 if (isVirtual) { 4936 requestAnimationFrame(() => { 4937 swiper.wrapperEl.style.scrollSnapType = ''; 4938 swiper._immediateVirtual = false; 4939 }); 4940 } 4941 } else { 4942 if (!swiper.support.smoothScroll) { 4943 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.animateCSSModeScroll)({ 4944 swiper, 4945 targetPosition: t, 4946 side: isH ? 'left' : 'top' 4947 }); 4948 return true; 4949 } 4950 wrapperEl.scrollTo({ 4951 [isH ? 'left' : 'top']: t, 4952 behavior: 'smooth' 4953 }); 4954 } 4955 return true; 4956 } 4957 swiper.setTransition(speed); 4958 swiper.setTranslate(translate); 4959 swiper.updateActiveIndex(slideIndex); 4960 swiper.updateSlidesClasses(); 4961 swiper.emit('beforeTransitionStart', speed, internal); 4962 swiper.transitionStart(runCallbacks, direction); 4963 if (speed === 0) { 4964 swiper.transitionEnd(runCallbacks, direction); 4965 } else if (!swiper.animating) { 4966 swiper.animating = true; 4967 if (!swiper.onSlideToWrapperTransitionEnd) { 4968 swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { 4969 if (!swiper || swiper.destroyed) return; 4970 if (e.target !== this) return; 4971 swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 4972 swiper.onSlideToWrapperTransitionEnd = null; 4973 delete swiper.onSlideToWrapperTransitionEnd; 4974 swiper.transitionEnd(runCallbacks, direction); 4975 }; 4976 } 4977 swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 4978 } 4979 return true; 4980} 4981 4982/***/ }), 4983
vendor: 2,364 bytes, lines 4984-5034
4984/***/ "./node_modules/swiper/core/slide/slideToClickedSlide.js": 4985/*!***************************************************************!*\ 4986 !*** ./node_modules/swiper/core/slide/slideToClickedSlide.js ***! 4987 \***************************************************************/ 4988/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 4989 4990__webpack_require__.r(__webpack_exports__); 4991/* harmony export */ __webpack_require__.d(__webpack_exports__, { 4992/* harmony export */ "default": function() { return /* binding */ slideToClickedSlide; } 4993/* harmony export */ }); 4994/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 4995 4996function slideToClickedSlide() { 4997 const swiper = this; 4998 const { 4999 params, 5000 slidesEl 5001 } = swiper; 5002 const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; 5003 let slideToIndex = swiper.clickedIndex; 5004 let realIndex; 5005 const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`; 5006 if (params.loop) { 5007 if (swiper.animating) return; 5008 realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10); 5009 if (params.centeredSlides) { 5010 if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) { 5011 swiper.loopFix(); 5012 slideToIndex = swiper.getSlideIndex((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]); 5013 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.nextTick)(() => { 5014 swiper.slideTo(slideToIndex); 5015 }); 5016 } else { 5017 swiper.slideTo(slideToIndex); 5018 } 5019 } else if (slideToIndex > swiper.slides.length - slidesPerView) { 5020 swiper.loopFix(); 5021 slideToIndex = swiper.getSlideIndex((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(slidesEl, `${slideSelector}[data-swiper-slide-index="${realIndex}"]`)[0]); 5022 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.nextTick)(() => { 5023 swiper.slideTo(slideToIndex); 5024 }); 5025 } else { 5026 swiper.slideTo(slideToIndex); 5027 } 5028 } else { 5029 swiper.slideTo(slideToIndex); 5030 } 5031} 5032 5033/***/ }), 5034
vendor: 1,957 bytes, lines 5035-5075
5035/***/ "./node_modules/swiper/core/slide/slideToClosest.js": 5036/*!**********************************************************!*\ 5037 !*** ./node_modules/swiper/core/slide/slideToClosest.js ***! 5038 \**********************************************************/ 5039/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5040 5041__webpack_require__.r(__webpack_exports__); 5042/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5043/* harmony export */ "default": function() { return /* binding */ slideToClosest; } 5044/* harmony export */ }); 5045/* eslint no-unused-vars: "off" */ 5046function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) { 5047 const swiper = this; 5048 let index = swiper.activeIndex; 5049 const skip = Math.min(swiper.params.slidesPerGroupSkip, index); 5050 const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); 5051 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 5052 if (translate >= swiper.snapGrid[snapIndex]) { 5053 // The current translate is on or after the current snap index, so the choice 5054 // is between the current index and the one after it. 5055 const currentSnap = swiper.snapGrid[snapIndex]; 5056 const nextSnap = swiper.snapGrid[snapIndex + 1]; 5057 if (translate - currentSnap > (nextSnap - currentSnap) * threshold) { 5058 index += swiper.params.slidesPerGroup; 5059 } 5060 } else { 5061 // The current translate is before the current snap index, so the choice 5062 // is between the current index and the one before it. 5063 const prevSnap = swiper.snapGrid[snapIndex - 1]; 5064 const currentSnap = swiper.snapGrid[snapIndex]; 5065 if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) { 5066 index -= swiper.params.slidesPerGroup; 5067 } 5068 } 5069 index = Math.max(index, 0); 5070 index = Math.min(index, swiper.slidesGrid.length - 1); 5071 return swiper.slideTo(index, speed, runCallbacks, internal); 5072} 5073 5074/***/ }), 5075
vendor: 1,143 bytes, lines 5076-5105
5076/***/ "./node_modules/swiper/core/slide/slideToLoop.js": 5077/*!*******************************************************!*\ 5078 !*** ./node_modules/swiper/core/slide/slideToLoop.js ***! 5079 \*******************************************************/ 5080/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5081 5082__webpack_require__.r(__webpack_exports__); 5083/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5084/* harmony export */ "default": function() { return /* binding */ slideToLoop; } 5085/* harmony export */ }); 5086function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) { 5087 if (typeof index === 'string') { 5088 const indexAsNumber = parseInt(index, 10); 5089 index = indexAsNumber; 5090 } 5091 const swiper = this; 5092 let newIndex = index; 5093 if (swiper.params.loop) { 5094 if (swiper.virtual && swiper.params.virtual.enabled) { 5095 // eslint-disable-next-line 5096 newIndex = newIndex + swiper.virtual.slidesBefore; 5097 } else { 5098 newIndex = swiper.getSlideIndexByData(newIndex); 5099 } 5100 } 5101 return swiper.slideTo(newIndex, speed, runCallbacks, internal); 5102} 5103 5104/***/ }), 5105
vendor: 1,235 bytes, lines 5106-5126
5106/***/ "./node_modules/swiper/core/transition/index.js": 5107/*!******************************************************!*\ 5108 !*** ./node_modules/swiper/core/transition/index.js ***! 5109 \******************************************************/ 5110/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5111 5112__webpack_require__.r(__webpack_exports__); 5113/* harmony import */ var _setTransition_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setTransition.js */ "./node_modules/swiper/core/transition/setTransition.js"); 5114/* harmony import */ var _transitionStart_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transitionStart.js */ "./node_modules/swiper/core/transition/transitionStart.js"); 5115/* harmony import */ var _transitionEnd_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transitionEnd.js */ "./node_modules/swiper/core/transition/transitionEnd.js"); 5116 5117 5118 5119/* harmony default export */ __webpack_exports__["default"] = ({ 5120 setTransition: _setTransition_js__WEBPACK_IMPORTED_MODULE_0__["default"], 5121 transitionStart: _transitionStart_js__WEBPACK_IMPORTED_MODULE_1__["default"], 5122 transitionEnd: _transitionEnd_js__WEBPACK_IMPORTED_MODULE_2__["default"] 5123}); 5124 5125/***/ }), 5126
vendor: 828 bytes, lines 5127-5146
5127/***/ "./node_modules/swiper/core/transition/setTransition.js": 5128/*!**************************************************************!*\ 5129 !*** ./node_modules/swiper/core/transition/setTransition.js ***! 5130 \**************************************************************/ 5131/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5132 5133__webpack_require__.r(__webpack_exports__); 5134/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5135/* harmony export */ "default": function() { return /* binding */ setTransition; } 5136/* harmony export */ }); 5137function setTransition(duration, byController) { 5138 const swiper = this; 5139 if (!swiper.params.cssMode) { 5140 swiper.wrapperEl.style.transitionDuration = `${duration}ms`; 5141 } 5142 swiper.emit('setTransition', duration, byController); 5143} 5144 5145/***/ }), 5146
vendor: 1,286 bytes, lines 5147-5187
5147/***/ "./node_modules/swiper/core/transition/transitionEmit.js": 5148/*!***************************************************************!*\ 5149 !*** ./node_modules/swiper/core/transition/transitionEmit.js ***! 5150 \***************************************************************/ 5151/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5152 5153__webpack_require__.r(__webpack_exports__); 5154/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5155/* harmony export */ "default": function() { return /* binding */ transitionEmit; } 5156/* harmony export */ }); 5157function transitionEmit({ 5158 swiper, 5159 runCallbacks, 5160 direction, 5161 step 5162}) { 5163 const { 5164 activeIndex, 5165 previousIndex 5166 } = swiper; 5167 let dir = direction; 5168 if (!dir) { 5169 if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; 5170 } 5171 swiper.emit(`transition${step}`); 5172 if (runCallbacks && activeIndex !== previousIndex) { 5173 if (dir === 'reset') { 5174 swiper.emit(`slideResetTransition${step}`); 5175 return; 5176 } 5177 swiper.emit(`slideChangeTransition${step}`); 5178 if (dir === 'next') { 5179 swiper.emit(`slideNextTransition${step}`); 5180 } else { 5181 swiper.emit(`slidePrevTransition${step}`); 5182 } 5183 } 5184} 5185 5186/***/ }), 5187
vendor: 1,116 bytes, lines 5188-5217
5188/***/ "./node_modules/swiper/core/transition/transitionEnd.js": 5189/*!**************************************************************!*\ 5190 !*** ./node_modules/swiper/core/transition/transitionEnd.js ***! 5191 \**************************************************************/ 5192/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5193 5194__webpack_require__.r(__webpack_exports__); 5195/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5196/* harmony export */ "default": function() { return /* binding */ transitionEnd; } 5197/* harmony export */ }); 5198/* harmony import */ var _transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transitionEmit.js */ "./node_modules/swiper/core/transition/transitionEmit.js"); 5199 5200function transitionEnd(runCallbacks = true, direction) { 5201 const swiper = this; 5202 const { 5203 params 5204 } = swiper; 5205 swiper.animating = false; 5206 if (params.cssMode) return; 5207 swiper.setTransition(0); 5208 (0,_transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ 5209 swiper, 5210 runCallbacks, 5211 direction, 5212 step: 'End' 5213 }); 5214} 5215 5216/***/ }), 5217
vendor: 1,137 bytes, lines 5218-5248
5218/***/ "./node_modules/swiper/core/transition/transitionStart.js": 5219/*!****************************************************************!*\ 5220 !*** ./node_modules/swiper/core/transition/transitionStart.js ***! 5221 \****************************************************************/ 5222/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5223 5224__webpack_require__.r(__webpack_exports__); 5225/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5226/* harmony export */ "default": function() { return /* binding */ transitionStart; } 5227/* harmony export */ }); 5228/* harmony import */ var _transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transitionEmit.js */ "./node_modules/swiper/core/transition/transitionEmit.js"); 5229 5230function transitionStart(runCallbacks = true, direction) { 5231 const swiper = this; 5232 const { 5233 params 5234 } = swiper; 5235 if (params.cssMode) return; 5236 if (params.autoHeight) { 5237 swiper.updateAutoHeight(); 5238 } 5239 (0,_transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ 5240 swiper, 5241 runCallbacks, 5242 direction, 5243 step: 'Start' 5244 }); 5245} 5246 5247/***/ }), 5248
vendor: 1,311 bytes, lines 5249-5282
5249/***/ "./node_modules/swiper/core/translate/getTranslate.js": 5250/*!************************************************************!*\ 5251 !*** ./node_modules/swiper/core/translate/getTranslate.js ***! 5252 \************************************************************/ 5253/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5254 5255__webpack_require__.r(__webpack_exports__); 5256/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5257/* harmony export */ "default": function() { return /* binding */ getSwiperTranslate; } 5258/* harmony export */ }); 5259/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 5260 5261function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') { 5262 const swiper = this; 5263 const { 5264 params, 5265 rtlTranslate: rtl, 5266 translate, 5267 wrapperEl 5268 } = swiper; 5269 if (params.virtualTranslate) { 5270 return rtl ? -translate : translate; 5271 } 5272 if (params.cssMode) { 5273 return translate; 5274 } 5275 let currentTranslate = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.getTranslate)(wrapperEl, axis); 5276 currentTranslate += swiper.cssOverflowAdjustment(); 5277 if (rtl) currentTranslate = -currentTranslate; 5278 return currentTranslate || 0; 5279} 5280 5281/***/ }), 5282
vendor: 1,698 bytes, lines 5283-5309
5283/***/ "./node_modules/swiper/core/translate/index.js": 5284/*!*****************************************************!*\ 5285 !*** ./node_modules/swiper/core/translate/index.js ***! 5286 \*****************************************************/ 5287/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5288 5289__webpack_require__.r(__webpack_exports__); 5290/* harmony import */ var _getTranslate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getTranslate.js */ "./node_modules/swiper/core/translate/getTranslate.js"); 5291/* harmony import */ var _setTranslate_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./setTranslate.js */ "./node_modules/swiper/core/translate/setTranslate.js"); 5292/* harmony import */ var _minTranslate_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./minTranslate.js */ "./node_modules/swiper/core/translate/minTranslate.js"); 5293/* harmony import */ var _maxTranslate_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./maxTranslate.js */ "./node_modules/swiper/core/translate/maxTranslate.js"); 5294/* harmony import */ var _translateTo_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./translateTo.js */ "./node_modules/swiper/core/translate/translateTo.js"); 5295 5296 5297 5298 5299 5300/* harmony default export */ __webpack_exports__["default"] = ({ 5301 getTranslate: _getTranslate_js__WEBPACK_IMPORTED_MODULE_0__["default"], 5302 setTranslate: _setTranslate_js__WEBPACK_IMPORTED_MODULE_1__["default"], 5303 minTranslate: _minTranslate_js__WEBPACK_IMPORTED_MODULE_2__["default"], 5304 maxTranslate: _maxTranslate_js__WEBPACK_IMPORTED_MODULE_3__["default"], 5305 translateTo: _translateTo_js__WEBPACK_IMPORTED_MODULE_4__["default"] 5306}); 5307 5308/***/ }), 5309
vendor: 667 bytes, lines 5310-5325
5310/***/ "./node_modules/swiper/core/translate/maxTranslate.js": 5311/*!************************************************************!*\ 5312 !*** ./node_modules/swiper/core/translate/maxTranslate.js ***! 5313 \************************************************************/ 5314/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5315 5316__webpack_require__.r(__webpack_exports__); 5317/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5318/* harmony export */ "default": function() { return /* binding */ maxTranslate; } 5319/* harmony export */ }); 5320function maxTranslate() { 5321 return -this.snapGrid[this.snapGrid.length - 1]; 5322} 5323 5324/***/ }), 5325
vendor: 644 bytes, lines 5326-5341
5326/***/ "./node_modules/swiper/core/translate/minTranslate.js": 5327/*!************************************************************!*\ 5328 !*** ./node_modules/swiper/core/translate/minTranslate.js ***! 5329 \************************************************************/ 5330/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5331 5332__webpack_require__.r(__webpack_exports__); 5333/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5334/* harmony export */ "default": function() { return /* binding */ minTranslate; } 5335/* harmony export */ }); 5336function minTranslate() { 5337 return -this.snapGrid[0]; 5338} 5339 5340/***/ }), 5341
vendor: 1,860 bytes, lines 5342-5400
5342/***/ "./node_modules/swiper/core/translate/setTranslate.js": 5343/*!************************************************************!*\ 5344 !*** ./node_modules/swiper/core/translate/setTranslate.js ***! 5345 \************************************************************/ 5346/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5347 5348__webpack_require__.r(__webpack_exports__); 5349/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5350/* harmony export */ "default": function() { return /* binding */ setTranslate; } 5351/* harmony export */ }); 5352function setTranslate(translate, byController) { 5353 const swiper = this; 5354 const { 5355 rtlTranslate: rtl, 5356 params, 5357 wrapperEl, 5358 progress 5359 } = swiper; 5360 let x = 0; 5361 let y = 0; 5362 const z = 0; 5363 if (swiper.isHorizontal()) { 5364 x = rtl ? -translate : translate; 5365 } else { 5366 y = translate; 5367 } 5368 if (params.roundLengths) { 5369 x = Math.floor(x); 5370 y = Math.floor(y); 5371 } 5372 swiper.previousTranslate = swiper.translate; 5373 swiper.translate = swiper.isHorizontal() ? x : y; 5374 if (params.cssMode) { 5375 wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y; 5376 } else if (!params.virtualTranslate) { 5377 if (swiper.isHorizontal()) { 5378 x -= swiper.cssOverflowAdjustment(); 5379 } else { 5380 y -= swiper.cssOverflowAdjustment(); 5381 } 5382 wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`; 5383 } 5384 5385 // Check if we need to update progress 5386 let newProgress; 5387 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 5388 if (translatesDiff === 0) { 5389 newProgress = 0; 5390 } else { 5391 newProgress = (translate - swiper.minTranslate()) / translatesDiff; 5392 } 5393 if (newProgress !== progress) { 5394 swiper.updateProgress(translate); 5395 } 5396 swiper.emit('setTranslate', swiper.translate, byController); 5397} 5398 5399/***/ }), 5400
vendor: 3,128 bytes, lines 5401-5484
5401/***/ "./node_modules/swiper/core/translate/translateTo.js": 5402/*!***********************************************************!*\ 5403 !*** ./node_modules/swiper/core/translate/translateTo.js ***! 5404 \***********************************************************/ 5405/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5406 5407__webpack_require__.r(__webpack_exports__); 5408/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5409/* harmony export */ "default": function() { return /* binding */ translateTo; } 5410/* harmony export */ }); 5411/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 5412 5413function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) { 5414 const swiper = this; 5415 const { 5416 params, 5417 wrapperEl 5418 } = swiper; 5419 if (swiper.animating && params.preventInteractionOnTransition) { 5420 return false; 5421 } 5422 const minTranslate = swiper.minTranslate(); 5423 const maxTranslate = swiper.maxTranslate(); 5424 let newTranslate; 5425 if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; 5426 5427 // Update progress 5428 swiper.updateProgress(newTranslate); 5429 if (params.cssMode) { 5430 const isH = swiper.isHorizontal(); 5431 if (speed === 0) { 5432 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; 5433 } else { 5434 if (!swiper.support.smoothScroll) { 5435 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.animateCSSModeScroll)({ 5436 swiper, 5437 targetPosition: -newTranslate, 5438 side: isH ? 'left' : 'top' 5439 }); 5440 return true; 5441 } 5442 wrapperEl.scrollTo({ 5443 [isH ? 'left' : 'top']: -newTranslate, 5444 behavior: 'smooth' 5445 }); 5446 } 5447 return true; 5448 } 5449 if (speed === 0) { 5450 swiper.setTransition(0); 5451 swiper.setTranslate(newTranslate); 5452 if (runCallbacks) { 5453 swiper.emit('beforeTransitionStart', speed, internal); 5454 swiper.emit('transitionEnd'); 5455 } 5456 } else { 5457 swiper.setTransition(speed); 5458 swiper.setTranslate(newTranslate); 5459 if (runCallbacks) { 5460 swiper.emit('beforeTransitionStart', speed, internal); 5461 swiper.emit('transitionStart'); 5462 } 5463 if (!swiper.animating) { 5464 swiper.animating = true; 5465 if (!swiper.onTranslateToWrapperTransitionEnd) { 5466 swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) { 5467 if (!swiper || swiper.destroyed) return; 5468 if (e.target !== this) return; 5469 swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 5470 swiper.onTranslateToWrapperTransitionEnd = null; 5471 delete swiper.onTranslateToWrapperTransitionEnd; 5472 if (runCallbacks) { 5473 swiper.emit('transitionEnd'); 5474 } 5475 }; 5476 } 5477 swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 5478 } 5479 } 5480 return true; 5481} 5482 5483/***/ }), 5484
vendor: 2,844 bytes, lines 5485-5523
5485/***/ "./node_modules/swiper/core/update/index.js": 5486/*!**************************************************!*\ 5487 !*** ./node_modules/swiper/core/update/index.js ***! 5488 \**************************************************/ 5489/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5490 5491__webpack_require__.r(__webpack_exports__); 5492/* harmony import */ var _updateSize_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./updateSize.js */ "./node_modules/swiper/core/update/updateSize.js"); 5493/* harmony import */ var _updateSlides_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./updateSlides.js */ "./node_modules/swiper/core/update/updateSlides.js"); 5494/* harmony import */ var _updateAutoHeight_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateAutoHeight.js */ "./node_modules/swiper/core/update/updateAutoHeight.js"); 5495/* harmony import */ var _updateSlidesOffset_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./updateSlidesOffset.js */ "./node_modules/swiper/core/update/updateSlidesOffset.js"); 5496/* harmony import */ var _updateSlidesProgress_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./updateSlidesProgress.js */ "./node_modules/swiper/core/update/updateSlidesProgress.js"); 5497/* harmony import */ var _updateProgress_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./updateProgress.js */ "./node_modules/swiper/core/update/updateProgress.js"); 5498/* harmony import */ var _updateSlidesClasses_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./updateSlidesClasses.js */ "./node_modules/swiper/core/update/updateSlidesClasses.js"); 5499/* harmony import */ var _updateActiveIndex_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./updateActiveIndex.js */ "./node_modules/swiper/core/update/updateActiveIndex.js"); 5500/* harmony import */ var _updateClickedSlide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./updateClickedSlide.js */ "./node_modules/swiper/core/update/updateClickedSlide.js"); 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510/* harmony default export */ __webpack_exports__["default"] = ({ 5511 updateSize: _updateSize_js__WEBPACK_IMPORTED_MODULE_0__["default"], 5512 updateSlides: _updateSlides_js__WEBPACK_IMPORTED_MODULE_1__["default"], 5513 updateAutoHeight: _updateAutoHeight_js__WEBPACK_IMPORTED_MODULE_2__["default"], 5514 updateSlidesOffset: _updateSlidesOffset_js__WEBPACK_IMPORTED_MODULE_3__["default"], 5515 updateSlidesProgress: _updateSlidesProgress_js__WEBPACK_IMPORTED_MODULE_4__["default"], 5516 updateProgress: _updateProgress_js__WEBPACK_IMPORTED_MODULE_5__["default"], 5517 updateSlidesClasses: _updateSlidesClasses_js__WEBPACK_IMPORTED_MODULE_6__["default"], 5518 updateActiveIndex: _updateActiveIndex_js__WEBPACK_IMPORTED_MODULE_7__["default"], 5519 updateClickedSlide: _updateClickedSlide_js__WEBPACK_IMPORTED_MODULE_8__["default"] 5520}); 5521 5522/***/ }), 5523
vendor: 4,024 bytes, lines 5524-5634
5524/***/ "./node_modules/swiper/core/update/updateActiveIndex.js": 5525/*!**************************************************************!*\ 5526 !*** ./node_modules/swiper/core/update/updateActiveIndex.js ***! 5527 \**************************************************************/ 5528/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5529 5530__webpack_require__.r(__webpack_exports__); 5531/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5532/* harmony export */ "default": function() { return /* binding */ updateActiveIndex; }, 5533/* harmony export */ "getActiveIndexByTranslate": function() { return /* binding */ getActiveIndexByTranslate; } 5534/* harmony export */ }); 5535/* harmony import */ var _shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/process-lazy-preloader.js */ "./node_modules/swiper/shared/process-lazy-preloader.js"); 5536 5537function getActiveIndexByTranslate(swiper) { 5538 const { 5539 slidesGrid, 5540 params 5541 } = swiper; 5542 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 5543 let activeIndex; 5544 for (let i = 0; i < slidesGrid.length; i += 1) { 5545 if (typeof slidesGrid[i + 1] !== 'undefined') { 5546 if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) { 5547 activeIndex = i; 5548 } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) { 5549 activeIndex = i + 1; 5550 } 5551 } else if (translate >= slidesGrid[i]) { 5552 activeIndex = i; 5553 } 5554 } 5555 // Normalize slideIndex 5556 if (params.normalizeSlideIndex) { 5557 if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0; 5558 } 5559 return activeIndex; 5560} 5561function updateActiveIndex(newActiveIndex) { 5562 const swiper = this; 5563 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 5564 const { 5565 snapGrid, 5566 params, 5567 activeIndex: previousIndex, 5568 realIndex: previousRealIndex, 5569 snapIndex: previousSnapIndex 5570 } = swiper; 5571 let activeIndex = newActiveIndex; 5572 let snapIndex; 5573 const getVirtualRealIndex = aIndex => { 5574 let realIndex = aIndex - swiper.virtual.slidesBefore; 5575 if (realIndex < 0) { 5576 realIndex = swiper.virtual.slides.length + realIndex; 5577 } 5578 if (realIndex >= swiper.virtual.slides.length) { 5579 realIndex -= swiper.virtual.slides.length; 5580 } 5581 return realIndex; 5582 }; 5583 if (typeof activeIndex === 'undefined') { 5584 activeIndex = getActiveIndexByTranslate(swiper); 5585 } 5586 if (snapGrid.indexOf(translate) >= 0) { 5587 snapIndex = snapGrid.indexOf(translate); 5588 } else { 5589 const skip = Math.min(params.slidesPerGroupSkip, activeIndex); 5590 snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup); 5591 } 5592 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 5593 if (activeIndex === previousIndex) { 5594 if (snapIndex !== previousSnapIndex) { 5595 swiper.snapIndex = snapIndex; 5596 swiper.emit('snapIndexChange'); 5597 } 5598 if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) { 5599 swiper.realIndex = getVirtualRealIndex(activeIndex); 5600 } 5601 return; 5602 } 5603 // Get real index 5604 let realIndex; 5605 if (swiper.virtual && params.virtual.enabled && params.loop) { 5606 realIndex = getVirtualRealIndex(activeIndex); 5607 } else if (swiper.slides[activeIndex]) { 5608 realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10); 5609 } else { 5610 realIndex = activeIndex; 5611 } 5612 Object.assign(swiper, { 5613 previousSnapIndex, 5614 snapIndex, 5615 previousRealIndex, 5616 realIndex, 5617 previousIndex, 5618 activeIndex 5619 }); 5620 if (swiper.initialized) { 5621 (0,_shared_process_lazy_preloader_js__WEBPACK_IMPORTED_MODULE_0__.preload)(swiper); 5622 } 5623 swiper.emit('activeIndexChange'); 5624 swiper.emit('snapIndexChange'); 5625 if (previousRealIndex !== realIndex) { 5626 swiper.emit('realIndexChange'); 5627 } 5628 if (swiper.initialized || swiper.params.runCallbacksOnInit) { 5629 swiper.emit('slideChange'); 5630 } 5631} 5632 5633/***/ }), 5634
vendor: 2,061 bytes, lines 5635-5692
5635/***/ "./node_modules/swiper/core/update/updateAutoHeight.js": 5636/*!*************************************************************!*\ 5637 !*** ./node_modules/swiper/core/update/updateAutoHeight.js ***! 5638 \*************************************************************/ 5639/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5640 5641__webpack_require__.r(__webpack_exports__); 5642/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5643/* harmony export */ "default": function() { return /* binding */ updateAutoHeight; } 5644/* harmony export */ }); 5645function updateAutoHeight(speed) { 5646 const swiper = this; 5647 const activeSlides = []; 5648 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 5649 let newHeight = 0; 5650 let i; 5651 if (typeof speed === 'number') { 5652 swiper.setTransition(speed); 5653 } else if (speed === true) { 5654 swiper.setTransition(swiper.params.speed); 5655 } 5656 const getSlideByIndex = index => { 5657 if (isVirtual) { 5658 return swiper.slides[swiper.getSlideIndexByData(index)]; 5659 } 5660 return swiper.slides[index]; 5661 }; 5662 // Find slides currently in view 5663 if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) { 5664 if (swiper.params.centeredSlides) { 5665 (swiper.visibleSlides || []).forEach(slide => { 5666 activeSlides.push(slide); 5667 }); 5668 } else { 5669 for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) { 5670 const index = swiper.activeIndex + i; 5671 if (index > swiper.slides.length && !isVirtual) break; 5672 activeSlides.push(getSlideByIndex(index)); 5673 } 5674 } 5675 } else { 5676 activeSlides.push(getSlideByIndex(swiper.activeIndex)); 5677 } 5678 5679 // Find new height from highest slide in view 5680 for (i = 0; i < activeSlides.length; i += 1) { 5681 if (typeof activeSlides[i] !== 'undefined') { 5682 const height = activeSlides[i].offsetHeight; 5683 newHeight = height > newHeight ? height : newHeight; 5684 } 5685 } 5686 5687 // Update Height 5688 if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`; 5689} 5690 5691/***/ }), 5692
vendor: 1,528 bytes, lines 5693-5736
5693/***/ "./node_modules/swiper/core/update/updateClickedSlide.js": 5694/*!***************************************************************!*\ 5695 !*** ./node_modules/swiper/core/update/updateClickedSlide.js ***! 5696 \***************************************************************/ 5697/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5698 5699__webpack_require__.r(__webpack_exports__); 5700/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5701/* harmony export */ "default": function() { return /* binding */ updateClickedSlide; } 5702/* harmony export */ }); 5703function updateClickedSlide(e) { 5704 const swiper = this; 5705 const params = swiper.params; 5706 const slide = e.closest(`.${params.slideClass}, swiper-slide`); 5707 let slideFound = false; 5708 let slideIndex; 5709 if (slide) { 5710 for (let i = 0; i < swiper.slides.length; i += 1) { 5711 if (swiper.slides[i] === slide) { 5712 slideFound = true; 5713 slideIndex = i; 5714 break; 5715 } 5716 } 5717 } 5718 if (slide && slideFound) { 5719 swiper.clickedSlide = slide; 5720 if (swiper.virtual && swiper.params.virtual.enabled) { 5721 swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10); 5722 } else { 5723 swiper.clickedIndex = slideIndex; 5724 } 5725 } else { 5726 swiper.clickedSlide = undefined; 5727 swiper.clickedIndex = undefined; 5728 return; 5729 } 5730 if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) { 5731 swiper.slideToClickedSlide(); 5732 } 5733} 5734 5735/***/ }), 5736
vendor: 2,791 bytes, lines 5737-5811
5737/***/ "./node_modules/swiper/core/update/updateProgress.js": 5738/*!***********************************************************!*\ 5739 !*** ./node_modules/swiper/core/update/updateProgress.js ***! 5740 \***********************************************************/ 5741/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5742 5743__webpack_require__.r(__webpack_exports__); 5744/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5745/* harmony export */ "default": function() { return /* binding */ updateProgress; } 5746/* harmony export */ }); 5747function updateProgress(translate) { 5748 const swiper = this; 5749 if (typeof translate === 'undefined') { 5750 const multiplier = swiper.rtlTranslate ? -1 : 1; 5751 // eslint-disable-next-line 5752 translate = swiper && swiper.translate && swiper.translate * multiplier || 0; 5753 } 5754 const params = swiper.params; 5755 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 5756 let { 5757 progress, 5758 isBeginning, 5759 isEnd, 5760 progressLoop 5761 } = swiper; 5762 const wasBeginning = isBeginning; 5763 const wasEnd = isEnd; 5764 if (translatesDiff === 0) { 5765 progress = 0; 5766 isBeginning = true; 5767 isEnd = true; 5768 } else { 5769 progress = (translate - swiper.minTranslate()) / translatesDiff; 5770 const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1; 5771 const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1; 5772 isBeginning = isBeginningRounded || progress <= 0; 5773 isEnd = isEndRounded || progress >= 1; 5774 if (isBeginningRounded) progress = 0; 5775 if (isEndRounded) progress = 1; 5776 } 5777 if (params.loop) { 5778 const firstSlideIndex = swiper.getSlideIndexByData(0); 5779 const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1); 5780 const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex]; 5781 const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex]; 5782 const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1]; 5783 const translateAbs = Math.abs(translate); 5784 if (translateAbs >= firstSlideTranslate) { 5785 progressLoop = (translateAbs - firstSlideTranslate) / translateMax; 5786 } else { 5787 progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax; 5788 } 5789 if (progressLoop > 1) progressLoop -= 1; 5790 } 5791 Object.assign(swiper, { 5792 progress, 5793 progressLoop, 5794 isBeginning, 5795 isEnd 5796 }); 5797 if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate); 5798 if (isBeginning && !wasBeginning) { 5799 swiper.emit('reachBeginning toEdge'); 5800 } 5801 if (isEnd && !wasEnd) { 5802 swiper.emit('reachEnd toEdge'); 5803 } 5804 if (wasBeginning && !isBeginning || wasEnd && !isEnd) { 5805 swiper.emit('fromEdge'); 5806 } 5807 swiper.emit('progress', progress); 5808} 5809 5810/***/ }), 5811
vendor: 1,918 bytes, lines 5812-5856
5812/***/ "./node_modules/swiper/core/update/updateSize.js": 5813/*!*******************************************************!*\ 5814 !*** ./node_modules/swiper/core/update/updateSize.js ***! 5815 \*******************************************************/ 5816/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5817 5818__webpack_require__.r(__webpack_exports__); 5819/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5820/* harmony export */ "default": function() { return /* binding */ updateSize; } 5821/* harmony export */ }); 5822/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 5823 5824function updateSize() { 5825 const swiper = this; 5826 let width; 5827 let height; 5828 const el = swiper.el; 5829 if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) { 5830 width = swiper.params.width; 5831 } else { 5832 width = el.clientWidth; 5833 } 5834 if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) { 5835 height = swiper.params.height; 5836 } else { 5837 height = el.clientHeight; 5838 } 5839 if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) { 5840 return; 5841 } 5842 5843 // Subtract paddings 5844 width = width - parseInt((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementStyle)(el, 'padding-left') || 0, 10) - parseInt((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementStyle)(el, 'padding-right') || 0, 10); 5845 height = height - parseInt((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementStyle)(el, 'padding-top') || 0, 10) - parseInt((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementStyle)(el, 'padding-bottom') || 0, 10); 5846 if (Number.isNaN(width)) width = 0; 5847 if (Number.isNaN(height)) height = 0; 5848 Object.assign(swiper, { 5849 width, 5850 height, 5851 size: swiper.isHorizontal() ? width : height 5852 }); 5853} 5854 5855/***/ }), 5856
vendor: 12,407 bytes, lines 5857-6157
5857/***/ "./node_modules/swiper/core/update/updateSlides.js": 5858/*!*********************************************************!*\ 5859 !*** ./node_modules/swiper/core/update/updateSlides.js ***! 5860 \*********************************************************/ 5861/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 5862 5863__webpack_require__.r(__webpack_exports__); 5864/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5865/* harmony export */ "default": function() { return /* binding */ updateSlides; } 5866/* harmony export */ }); 5867/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 5868 5869function updateSlides() { 5870 const swiper = this; 5871 function getDirectionLabel(property) { 5872 if (swiper.isHorizontal()) { 5873 return property; 5874 } 5875 // prettier-ignore 5876 return { 5877 'width': 'height', 5878 'margin-top': 'margin-left', 5879 'margin-bottom ': 'margin-right', 5880 'margin-left': 'margin-top', 5881 'margin-right': 'margin-bottom', 5882 'padding-left': 'padding-top', 5883 'padding-right': 'padding-bottom', 5884 'marginRight': 'marginBottom' 5885 }[property]; 5886 } 5887 function getDirectionPropertyValue(node, label) { 5888 return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0); 5889 } 5890 const params = swiper.params; 5891 const { 5892 wrapperEl, 5893 slidesEl, 5894 size: swiperSize, 5895 rtlTranslate: rtl, 5896 wrongRTL 5897 } = swiper; 5898 const isVirtual = swiper.virtual && params.virtual.enabled; 5899 const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; 5900 const slides = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(slidesEl, `.${swiper.params.slideClass}, swiper-slide`); 5901 const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; 5902 let snapGrid = []; 5903 const slidesGrid = []; 5904 const slidesSizesGrid = []; 5905 let offsetBefore = params.slidesOffsetBefore; 5906 if (typeof offsetBefore === 'function') { 5907 offsetBefore = params.slidesOffsetBefore.call(swiper); 5908 } 5909 let offsetAfter = params.slidesOffsetAfter; 5910 if (typeof offsetAfter === 'function') { 5911 offsetAfter = params.slidesOffsetAfter.call(swiper); 5912 } 5913 const previousSnapGridLength = swiper.snapGrid.length; 5914 const previousSlidesGridLength = swiper.slidesGrid.length; 5915 let spaceBetween = params.spaceBetween; 5916 let slidePosition = -offsetBefore; 5917 let prevSlideSize = 0; 5918 let index = 0; 5919 if (typeof swiperSize === 'undefined') { 5920 return; 5921 } 5922 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 5923 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize; 5924 } else if (typeof spaceBetween === 'string') { 5925 spaceBetween = parseFloat(spaceBetween); 5926 } 5927 swiper.virtualSize = -spaceBetween; 5928 5929 // reset margins 5930 slides.forEach(slideEl => { 5931 if (rtl) { 5932 slideEl.style.marginLeft = ''; 5933 } else { 5934 slideEl.style.marginRight = ''; 5935 } 5936 slideEl.style.marginBottom = ''; 5937 slideEl.style.marginTop = ''; 5938 }); 5939 5940 // reset cssMode offsets 5941 if (params.centeredSlides && params.cssMode) { 5942 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(wrapperEl, '--swiper-centered-offset-before', ''); 5943 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(wrapperEl, '--swiper-centered-offset-after', ''); 5944 } 5945 const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid; 5946 if (gridEnabled) { 5947 swiper.grid.initSlides(slidesLength); 5948 } 5949 5950 // Calc slides 5951 let slideSize; 5952 const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => { 5953 return typeof params.breakpoints[key].slidesPerView !== 'undefined'; 5954 }).length > 0; 5955 for (let i = 0; i < slidesLength; i += 1) { 5956 slideSize = 0; 5957 let slide; 5958 if (slides[i]) slide = slides[i]; 5959 if (gridEnabled) { 5960 swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel); 5961 } 5962 if (slides[i] && (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementStyle)(slide, 'display') === 'none') continue; // eslint-disable-line 5963 5964 if (params.slidesPerView === 'auto') { 5965 if (shouldResetSlideSize) { 5966 slides[i].style[getDirectionLabel('width')] = ``; 5967 } 5968 const slideStyles = getComputedStyle(slide); 5969 const currentTransform = slide.style.transform; 5970 const currentWebKitTransform = slide.style.webkitTransform; 5971 if (currentTransform) { 5972 slide.style.transform = 'none'; 5973 } 5974 if (currentWebKitTransform) { 5975 slide.style.webkitTransform = 'none'; 5976 } 5977 if (params.roundLengths) { 5978 slideSize = swiper.isHorizontal() ? (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementOuterSize)(slide, 'width', true) : (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementOuterSize)(slide, 'height', true); 5979 } else { 5980 // eslint-disable-next-line 5981 const width = getDirectionPropertyValue(slideStyles, 'width'); 5982 const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left'); 5983 const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right'); 5984 const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left'); 5985 const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right'); 5986 const boxSizing = slideStyles.getPropertyValue('box-sizing'); 5987 if (boxSizing && boxSizing === 'border-box') { 5988 slideSize = width + marginLeft + marginRight; 5989 } else { 5990 const { 5991 clientWidth, 5992 offsetWidth 5993 } = slide; 5994 slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth); 5995 } 5996 } 5997 if (currentTransform) { 5998 slide.style.transform = currentTransform; 5999 } 6000 if (currentWebKitTransform) { 6001 slide.style.webkitTransform = currentWebKitTransform; 6002 } 6003 if (params.roundLengths) slideSize = Math.floor(slideSize); 6004 } else { 6005 slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView; 6006 if (params.roundLengths) slideSize = Math.floor(slideSize); 6007 if (slides[i]) { 6008 slides[i].style[getDirectionLabel('width')] = `${slideSize}px`; 6009 } 6010 } 6011 if (slides[i]) { 6012 slides[i].swiperSlideSize = slideSize; 6013 } 6014 slidesSizesGrid.push(slideSize); 6015 if (params.centeredSlides) { 6016 slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; 6017 if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 6018 if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 6019 if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; 6020 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 6021 if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition); 6022 slidesGrid.push(slidePosition); 6023 } else { 6024 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 6025 if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition); 6026 slidesGrid.push(slidePosition); 6027 slidePosition = slidePosition + slideSize + spaceBetween; 6028 } 6029 swiper.virtualSize += slideSize + spaceBetween; 6030 prevSlideSize = slideSize; 6031 index += 1; 6032 } 6033 swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; 6034 if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) { 6035 wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`; 6036 } 6037 if (params.setWrapperSize) { 6038 wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`; 6039 } 6040 if (gridEnabled) { 6041 swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel); 6042 } 6043 6044 // Remove last grid elements depending on width 6045 if (!params.centeredSlides) { 6046 const newSlidesGrid = []; 6047 for (let i = 0; i < snapGrid.length; i += 1) { 6048 let slidesGridItem = snapGrid[i]; 6049 if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); 6050 if (snapGrid[i] <= swiper.virtualSize - swiperSize) { 6051 newSlidesGrid.push(slidesGridItem); 6052 } 6053 } 6054 snapGrid = newSlidesGrid; 6055 if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) { 6056 snapGrid.push(swiper.virtualSize - swiperSize); 6057 } 6058 } 6059 if (isVirtual && params.loop) { 6060 const size = slidesSizesGrid[0] + spaceBetween; 6061 if (params.slidesPerGroup > 1) { 6062 const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup); 6063 const groupSize = size * params.slidesPerGroup; 6064 for (let i = 0; i < groups; i += 1) { 6065 snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize); 6066 } 6067 } 6068 for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) { 6069 if (params.slidesPerGroup === 1) { 6070 snapGrid.push(snapGrid[snapGrid.length - 1] + size); 6071 } 6072 slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size); 6073 swiper.virtualSize += size; 6074 } 6075 } 6076 if (snapGrid.length === 0) snapGrid = [0]; 6077 if (spaceBetween !== 0) { 6078 const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight'); 6079 slides.filter((_, slideIndex) => { 6080 if (!params.cssMode || params.loop) return true; 6081 if (slideIndex === slides.length - 1) { 6082 return false; 6083 } 6084 return true; 6085 }).forEach(slideEl => { 6086 slideEl.style[key] = `${spaceBetween}px`; 6087 }); 6088 } 6089 if (params.centeredSlides && params.centeredSlidesBounds) { 6090 let allSlidesSize = 0; 6091 slidesSizesGrid.forEach(slideSizeValue => { 6092 allSlidesSize += slideSizeValue + (spaceBetween || 0); 6093 }); 6094 allSlidesSize -= spaceBetween; 6095 const maxSnap = allSlidesSize - swiperSize; 6096 snapGrid = snapGrid.map(snap => { 6097 if (snap < 0) return -offsetBefore; 6098 if (snap > maxSnap) return maxSnap + offsetAfter; 6099 return snap; 6100 }); 6101 } 6102 if (params.centerInsufficientSlides) { 6103 let allSlidesSize = 0; 6104 slidesSizesGrid.forEach(slideSizeValue => { 6105 allSlidesSize += slideSizeValue + (spaceBetween || 0); 6106 }); 6107 allSlidesSize -= spaceBetween; 6108 if (allSlidesSize < swiperSize) { 6109 const allSlidesOffset = (swiperSize - allSlidesSize) / 2; 6110 snapGrid.forEach((snap, snapIndex) => { 6111 snapGrid[snapIndex] = snap - allSlidesOffset; 6112 }); 6113 slidesGrid.forEach((snap, snapIndex) => { 6114 slidesGrid[snapIndex] = snap + allSlidesOffset; 6115 }); 6116 } 6117 } 6118 Object.assign(swiper, { 6119 slides, 6120 snapGrid, 6121 slidesGrid, 6122 slidesSizesGrid 6123 }); 6124 if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) { 6125 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`); 6126 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`); 6127 const addToSnapGrid = -swiper.snapGrid[0]; 6128 const addToSlidesGrid = -swiper.slidesGrid[0]; 6129 swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid); 6130 swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid); 6131 } 6132 if (slidesLength !== previousSlidesLength) { 6133 swiper.emit('slidesLengthChange'); 6134 } 6135 if (snapGrid.length !== previousSnapGridLength) { 6136 if (swiper.params.watchOverflow) swiper.checkOverflow(); 6137 swiper.emit('snapGridLengthChange'); 6138 } 6139 if (slidesGrid.length !== previousSlidesGridLength) { 6140 swiper.emit('slidesGridLengthChange'); 6141 } 6142 if (params.watchSlidesProgress) { 6143 swiper.updateSlidesOffset(); 6144 } 6145 if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) { 6146 const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`; 6147 const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass); 6148 if (slidesLength <= params.maxBackfaceHiddenSlides) { 6149 if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass); 6150 } else if (hasClassBackfaceClassAdded) { 6151 swiper.el.classList.remove(backFaceHiddenClass); 6152 } 6153 } 6154} 6155 6156/***/ }), 6157
vendor: 2,636 bytes, lines 6158-6223
6158/***/ "./node_modules/swiper/core/update/updateSlidesClasses.js": 6159/*!****************************************************************!*\ 6160 !*** ./node_modules/swiper/core/update/updateSlidesClasses.js ***! 6161 \****************************************************************/ 6162/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 6163 6164__webpack_require__.r(__webpack_exports__); 6165/* harmony export */ __webpack_require__.d(__webpack_exports__, { 6166/* harmony export */ "default": function() { return /* binding */ updateSlidesClasses; } 6167/* harmony export */ }); 6168/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 6169 6170function updateSlidesClasses() { 6171 const swiper = this; 6172 const { 6173 slides, 6174 params, 6175 slidesEl, 6176 activeIndex 6177 } = swiper; 6178 const isVirtual = swiper.virtual && params.virtual.enabled; 6179 const getFilteredSlide = selector => { 6180 return (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0]; 6181 }; 6182 slides.forEach(slideEl => { 6183 slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass); 6184 }); 6185 let activeSlide; 6186 if (isVirtual) { 6187 if (params.loop) { 6188 let slideIndex = activeIndex - swiper.virtual.slidesBefore; 6189 if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex; 6190 if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length; 6191 activeSlide = getFilteredSlide(`[data-swiper-slide-index="${slideIndex}"]`); 6192 } else { 6193 activeSlide = getFilteredSlide(`[data-swiper-slide-index="${activeIndex}"]`); 6194 } 6195 } else { 6196 activeSlide = slides[activeIndex]; 6197 } 6198 if (activeSlide) { 6199 // Active classes 6200 activeSlide.classList.add(params.slideActiveClass); 6201 6202 // Next Slide 6203 let nextSlide = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementNextAll)(activeSlide, `.${params.slideClass}, swiper-slide`)[0]; 6204 if (params.loop && !nextSlide) { 6205 nextSlide = slides[0]; 6206 } 6207 if (nextSlide) { 6208 nextSlide.classList.add(params.slideNextClass); 6209 } 6210 // Prev Slide 6211 let prevSlide = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementPrevAll)(activeSlide, `.${params.slideClass}, swiper-slide`)[0]; 6212 if (params.loop && !prevSlide === 0) { 6213 prevSlide = slides[slides.length - 1]; 6214 } 6215 if (prevSlide) { 6216 prevSlide.classList.add(params.slidePrevClass); 6217 } 6218 } 6219 swiper.emitSlidesClasses(); 6220} 6221 6222/***/ }), 6223
vendor: 1,054 bytes, lines 6224-6245
6224/***/ "./node_modules/swiper/core/update/updateSlidesOffset.js": 6225/*!***************************************************************!*\ 6226 !*** ./node_modules/swiper/core/update/updateSlidesOffset.js ***! 6227 \***************************************************************/ 6228/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 6229 6230__webpack_require__.r(__webpack_exports__); 6231/* harmony export */ __webpack_require__.d(__webpack_exports__, { 6232/* harmony export */ "default": function() { return /* binding */ updateSlidesOffset; } 6233/* harmony export */ }); 6234function updateSlidesOffset() { 6235 const swiper = this; 6236 const slides = swiper.slides; 6237 // eslint-disable-next-line 6238 const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0; 6239 for (let i = 0; i < slides.length; i += 1) { 6240 slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment(); 6241 } 6242} 6243 6244/***/ }), 6245
vendor: 2,641 bytes, lines 6246-6303
6246/***/ "./node_modules/swiper/core/update/updateSlidesProgress.js": 6247/*!*****************************************************************!*\ 6248 !*** ./node_modules/swiper/core/update/updateSlidesProgress.js ***! 6249 \*****************************************************************/ 6250/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 6251 6252__webpack_require__.r(__webpack_exports__); 6253/* harmony export */ __webpack_require__.d(__webpack_exports__, { 6254/* harmony export */ "default": function() { return /* binding */ updateSlidesProgress; } 6255/* harmony export */ }); 6256function updateSlidesProgress(translate = this && this.translate || 0) { 6257 const swiper = this; 6258 const params = swiper.params; 6259 const { 6260 slides, 6261 rtlTranslate: rtl, 6262 snapGrid 6263 } = swiper; 6264 if (slides.length === 0) return; 6265 if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset(); 6266 let offsetCenter = -translate; 6267 if (rtl) offsetCenter = translate; 6268 6269 // Visible Slides 6270 slides.forEach(slideEl => { 6271 slideEl.classList.remove(params.slideVisibleClass); 6272 }); 6273 swiper.visibleSlidesIndexes = []; 6274 swiper.visibleSlides = []; 6275 let spaceBetween = params.spaceBetween; 6276 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 6277 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size; 6278 } else if (typeof spaceBetween === 'string') { 6279 spaceBetween = parseFloat(spaceBetween); 6280 } 6281 for (let i = 0; i < slides.length; i += 1) { 6282 const slide = slides[i]; 6283 let slideOffset = slide.swiperSlideOffset; 6284 if (params.cssMode && params.centeredSlides) { 6285 slideOffset -= slides[0].swiperSlideOffset; 6286 } 6287 const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween); 6288 const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween); 6289 const slideBefore = -(offsetCenter - slideOffset); 6290 const slideAfter = slideBefore + swiper.slidesSizesGrid[i]; 6291 const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size; 6292 if (isVisible) { 6293 swiper.visibleSlides.push(slide); 6294 swiper.visibleSlidesIndexes.push(i); 6295 slides[i].classList.add(params.slideVisibleClass); 6296 } 6297 slide.progress = rtl ? -slideProgress : slideProgress; 6298 slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress; 6299 } 6300} 6301 6302/***/ }), 6303
vendor: 12,030 bytes, lines 6304-6661
6304/***/ "./node_modules/swiper/modules/a11y/a11y.js": 6305/*!**************************************************!*\ 6306 !*** ./node_modules/swiper/modules/a11y/a11y.js ***! 6307 \**************************************************/ 6308/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 6309 6310__webpack_require__.r(__webpack_exports__); 6311/* harmony export */ __webpack_require__.d(__webpack_exports__, { 6312/* harmony export */ "default": function() { return /* binding */ A11y; } 6313/* harmony export */ }); 6314/* harmony import */ var _shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/classes-to-selector.js */ "./node_modules/swiper/shared/classes-to-selector.js"); 6315/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 6316 6317 6318function A11y({ 6319 swiper, 6320 extendParams, 6321 on 6322}) { 6323 extendParams({ 6324 a11y: { 6325 enabled: true, 6326 notificationClass: 'swiper-notification', 6327 prevSlideMessage: 'Previous slide', 6328 nextSlideMessage: 'Next slide', 6329 firstSlideMessage: 'This is the first slide', 6330 lastSlideMessage: 'This is the last slide', 6331 paginationBulletMessage: 'Go to slide {{index}}', 6332 slideLabelMessage: '{{index}} / {{slidesLength}}', 6333 containerMessage: null, 6334 containerRoleDescriptionMessage: null, 6335 itemRoleDescriptionMessage: null, 6336 slideRole: 'group', 6337 id: null 6338 } 6339 }); 6340 swiper.a11y = { 6341 clicked: false 6342 }; 6343 let liveRegion = null; 6344 function notify(message) { 6345 const notification = liveRegion; 6346 if (notification.length === 0) return; 6347 notification.innerHTML = ''; 6348 notification.innerHTML = message; 6349 } 6350 const makeElementsArray = el => { 6351 if (!Array.isArray(el)) el = [el].filter(e => !!e); 6352 return el; 6353 }; 6354 function getRandomNumber(size = 16) { 6355 const randomChar = () => Math.round(16 * Math.random()).toString(16); 6356 return 'x'.repeat(size).replace(/x/g, randomChar); 6357 } 6358 function makeElFocusable(el) { 6359 el = makeElementsArray(el); 6360 el.forEach(subEl => { 6361 subEl.setAttribute('tabIndex', '0'); 6362 }); 6363 } 6364 function makeElNotFocusable(el) { 6365 el = makeElementsArray(el); 6366 el.forEach(subEl => { 6367 subEl.setAttribute('tabIndex', '-1'); 6368 }); 6369 } 6370 function addElRole(el, role) { 6371 el = makeElementsArray(el); 6372 el.forEach(subEl => { 6373 subEl.setAttribute('role', role); 6374 }); 6375 } 6376 function addElRoleDescription(el, description) { 6377 el = makeElementsArray(el); 6378 el.forEach(subEl => { 6379 subEl.setAttribute('aria-roledescription', description); 6380 }); 6381 } 6382 function addElControls(el, controls) { 6383 el = makeElementsArray(el); 6384 el.forEach(subEl => { 6385 subEl.setAttribute('aria-controls', controls); 6386 }); 6387 } 6388 function addElLabel(el, label) { 6389 el = makeElementsArray(el); 6390 el.forEach(subEl => { 6391 subEl.setAttribute('aria-label', label); 6392 }); 6393 } 6394 function addElId(el, id) { 6395 el = makeElementsArray(el); 6396 el.forEach(subEl => { 6397 subEl.setAttribute('id', id); 6398 }); 6399 } 6400 function addElLive(el, live) { 6401 el = makeElementsArray(el); 6402 el.forEach(subEl => { 6403 subEl.setAttribute('aria-live', live); 6404 }); 6405 } 6406 function disableEl(el) { 6407 el = makeElementsArray(el); 6408 el.forEach(subEl => { 6409 subEl.setAttribute('aria-disabled', true); 6410 }); 6411 } 6412 function enableEl(el) { 6413 el = makeElementsArray(el); 6414 el.forEach(subEl => { 6415 subEl.setAttribute('aria-disabled', false); 6416 }); 6417 } 6418 function onEnterOrSpaceKey(e) { 6419 if (e.keyCode !== 13 && e.keyCode !== 32) return; 6420 const params = swiper.params.a11y; 6421 const targetEl = e.target; 6422 if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) { 6423 if (!e.target.matches((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__["default"])(swiper.params.pagination.bulletClass))) return; 6424 } 6425 if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) { 6426 if (!(swiper.isEnd && !swiper.params.loop)) { 6427 swiper.slideNext(); 6428 } 6429 if (swiper.isEnd) { 6430 notify(params.lastSlideMessage); 6431 } else { 6432 notify(params.nextSlideMessage); 6433 } 6434 } 6435 if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) { 6436 if (!(swiper.isBeginning && !swiper.params.loop)) { 6437 swiper.slidePrev(); 6438 } 6439 if (swiper.isBeginning) { 6440 notify(params.firstSlideMessage); 6441 } else { 6442 notify(params.prevSlideMessage); 6443 } 6444 } 6445 if (swiper.pagination && targetEl.matches((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__["default"])(swiper.params.pagination.bulletClass))) { 6446 targetEl.click(); 6447 } 6448 } 6449 function updateNavigation() { 6450 if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return; 6451 const { 6452 nextEl, 6453 prevEl 6454 } = swiper.navigation; 6455 if (prevEl) { 6456 if (swiper.isBeginning) { 6457 disableEl(prevEl); 6458 makeElNotFocusable(prevEl); 6459 } else { 6460 enableEl(prevEl); 6461 makeElFocusable(prevEl); 6462 } 6463 } 6464 if (nextEl) { 6465 if (swiper.isEnd) { 6466 disableEl(nextEl); 6467 makeElNotFocusable(nextEl); 6468 } else { 6469 enableEl(nextEl); 6470 makeElFocusable(nextEl); 6471 } 6472 } 6473 } 6474 function hasPagination() { 6475 return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length; 6476 } 6477 function hasClickablePagination() { 6478 return hasPagination() && swiper.params.pagination.clickable; 6479 } 6480 function updatePagination() { 6481 const params = swiper.params.a11y; 6482 if (!hasPagination()) return; 6483 swiper.pagination.bullets.forEach(bulletEl => { 6484 if (swiper.params.pagination.clickable) { 6485 makeElFocusable(bulletEl); 6486 if (!swiper.params.pagination.renderBullet) { 6487 addElRole(bulletEl, 'button'); 6488 addElLabel(bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementIndex)(bulletEl) + 1)); 6489 } 6490 } 6491 if (bulletEl.matches((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__["default"])(swiper.params.pagination.bulletActiveClass))) { 6492 bulletEl.setAttribute('aria-current', 'true'); 6493 } else { 6494 bulletEl.removeAttribute('aria-current'); 6495 } 6496 }); 6497 } 6498 const initNavEl = (el, wrapperId, message) => { 6499 makeElFocusable(el); 6500 if (el.tagName !== 'BUTTON') { 6501 addElRole(el, 'button'); 6502 el.addEventListener('keydown', onEnterOrSpaceKey); 6503 } 6504 addElLabel(el, message); 6505 addElControls(el, wrapperId); 6506 }; 6507 const handlePointerDown = () => { 6508 swiper.a11y.clicked = true; 6509 }; 6510 const handlePointerUp = () => { 6511 requestAnimationFrame(() => { 6512 requestAnimationFrame(() => { 6513 if (!swiper.destroyed) { 6514 swiper.a11y.clicked = false; 6515 } 6516 }); 6517 }); 6518 }; 6519 const handleFocus = e => { 6520 if (swiper.a11y.clicked) return; 6521 const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`); 6522 if (!slideEl || !swiper.slides.includes(slideEl)) return; 6523 const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex; 6524 const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl); 6525 if (isActive || isVisible) return; 6526 if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return; 6527 if (swiper.isHorizontal()) { 6528 swiper.el.scrollLeft = 0; 6529 } else { 6530 swiper.el.scrollTop = 0; 6531 } 6532 swiper.slideTo(swiper.slides.indexOf(slideEl), 0); 6533 }; 6534 const initSlides = () => { 6535 const params = swiper.params.a11y; 6536 if (params.itemRoleDescriptionMessage) { 6537 addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage); 6538 } 6539 if (params.slideRole) { 6540 addElRole(swiper.slides, params.slideRole); 6541 } 6542 const slidesLength = swiper.slides.length; 6543 if (params.slideLabelMessage) { 6544 swiper.slides.forEach((slideEl, index) => { 6545 const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index; 6546 const ariaLabelMessage = params.slideLabelMessage.replace(/\{\{index\}\}/, slideIndex + 1).replace(/\{\{slidesLength\}\}/, slidesLength); 6547 addElLabel(slideEl, ariaLabelMessage); 6548 }); 6549 } 6550 }; 6551 const init = () => { 6552 const params = swiper.params.a11y; 6553 if (swiper.isElement) { 6554 swiper.el.shadowEl.append(liveRegion); 6555 } else { 6556 swiper.el.append(liveRegion); 6557 } 6558 6559 // Container 6560 const containerEl = swiper.el; 6561 if (params.containerRoleDescriptionMessage) { 6562 addElRoleDescription(containerEl, params.containerRoleDescriptionMessage); 6563 } 6564 if (params.containerMessage) { 6565 addElLabel(containerEl, params.containerMessage); 6566 } 6567 6568 // Wrapper 6569 const wrapperEl = swiper.wrapperEl; 6570 const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`; 6571 const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite'; 6572 addElId(wrapperEl, wrapperId); 6573 addElLive(wrapperEl, live); 6574 6575 // Slide 6576 initSlides(); 6577 6578 // Navigation 6579 let { 6580 nextEl, 6581 prevEl 6582 } = swiper.navigation ? swiper.navigation : {}; 6583 nextEl = makeElementsArray(nextEl); 6584 prevEl = makeElementsArray(prevEl); 6585 if (nextEl) { 6586 nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage)); 6587 } 6588 if (prevEl) { 6589 prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage)); 6590 } 6591 6592 // Pagination 6593 if (hasClickablePagination()) { 6594 const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el]; 6595 paginationEl.forEach(el => { 6596 el.addEventListener('keydown', onEnterOrSpaceKey); 6597 }); 6598 } 6599 6600 // Tab focus 6601 swiper.el.addEventListener('focus', handleFocus, true); 6602 swiper.el.addEventListener('pointerdown', handlePointerDown, true); 6603 swiper.el.addEventListener('pointerup', handlePointerUp, true); 6604 }; 6605 function destroy() { 6606 if (liveRegion) liveRegion.remove(); 6607 let { 6608 nextEl, 6609 prevEl 6610 } = swiper.navigation ? swiper.navigation : {}; 6611 nextEl = makeElementsArray(nextEl); 6612 prevEl = makeElementsArray(prevEl); 6613 if (nextEl) { 6614 nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey)); 6615 } 6616 if (prevEl) { 6617 prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey)); 6618 } 6619 6620 // Pagination 6621 if (hasClickablePagination()) { 6622 const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el]; 6623 paginationEl.forEach(el => { 6624 el.removeEventListener('keydown', onEnterOrSpaceKey); 6625 }); 6626 } 6627 6628 // Tab focus 6629 swiper.el.removeEventListener('focus', handleFocus, true); 6630 swiper.el.removeEventListener('pointerdown', handlePointerDown, true); 6631 swiper.el.removeEventListener('pointerup', handlePointerUp, true); 6632 } 6633 on('beforeInit', () => { 6634 liveRegion = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('span', swiper.params.a11y.notificationClass); 6635 liveRegion.setAttribute('aria-live', 'assertive'); 6636 liveRegion.setAttribute('aria-atomic', 'true'); 6637 }); 6638 on('afterInit', () => { 6639 if (!swiper.params.a11y.enabled) return; 6640 init(); 6641 }); 6642 on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => { 6643 if (!swiper.params.a11y.enabled) return; 6644 initSlides(); 6645 }); 6646 on('fromEdge toEdge afterInit lock unlock', () => { 6647 if (!swiper.params.a11y.enabled) return; 6648 updateNavigation(); 6649 }); 6650 on('paginationUpdate', () => { 6651 if (!swiper.params.a11y.enabled) return; 6652 updatePagination(); 6653 }); 6654 on('destroy', () => { 6655 if (!swiper.params.a11y.enabled) return; 6656 destroy(); 6657 }); 6658} 6659 6660/***/ }), 6661
vendor: 9,404 bytes, lines 6662-6954
6662/***/ "./node_modules/swiper/modules/autoplay/autoplay.js": 6663/*!**********************************************************!*\ 6664 !*** ./node_modules/swiper/modules/autoplay/autoplay.js ***! 6665 \**********************************************************/ 6666/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 6667 6668__webpack_require__.r(__webpack_exports__); 6669/* harmony export */ __webpack_require__.d(__webpack_exports__, { 6670/* harmony export */ "default": function() { return /* binding */ Autoplay; } 6671/* harmony export */ }); 6672/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 6673/* eslint no-underscore-dangle: "off" */ 6674/* eslint no-use-before-define: "off" */ 6675 6676function Autoplay({ 6677 swiper, 6678 extendParams, 6679 on, 6680 emit, 6681 params 6682}) { 6683 swiper.autoplay = { 6684 running: false, 6685 paused: false, 6686 timeLeft: 0 6687 }; 6688 extendParams({ 6689 autoplay: { 6690 enabled: false, 6691 delay: 3000, 6692 waitForTransition: true, 6693 disableOnInteraction: true, 6694 stopOnLastSlide: false, 6695 reverseDirection: false, 6696 pauseOnMouseEnter: false 6697 } 6698 }); 6699 let timeout; 6700 let raf; 6701 let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000; 6702 let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000; 6703 let autoplayTimeLeft; 6704 let autoplayStartTime = new Date().getTime; 6705 let wasPaused; 6706 let isTouched; 6707 let pausedByTouch; 6708 let touchStartTimeout; 6709 let slideChanged; 6710 let pausedByInteraction; 6711 function onTransitionEnd(e) { 6712 if (!swiper || swiper.destroyed || !swiper.wrapperEl) return; 6713 if (e.target !== swiper.wrapperEl) return; 6714 swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd); 6715 resume(); 6716 } 6717 const calcTimeLeft = () => { 6718 if (swiper.destroyed || !swiper.autoplay.running) return; 6719 if (swiper.autoplay.paused) { 6720 wasPaused = true; 6721 } else if (wasPaused) { 6722 autoplayDelayCurrent = autoplayTimeLeft; 6723 wasPaused = false; 6724 } 6725 const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime(); 6726 swiper.autoplay.timeLeft = timeLeft; 6727 emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal); 6728 raf = requestAnimationFrame(() => { 6729 calcTimeLeft(); 6730 }); 6731 }; 6732 const getSlideDelay = () => { 6733 let activeSlideEl; 6734 if (swiper.virtual && swiper.params.virtual.enabled) { 6735 activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0]; 6736 } else { 6737 activeSlideEl = swiper.slides[swiper.activeIndex]; 6738 } 6739 if (!activeSlideEl) return undefined; 6740 const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10); 6741 return currentSlideDelay; 6742 }; 6743 const run = delayForce => { 6744 if (swiper.destroyed || !swiper.autoplay.running) return; 6745 cancelAnimationFrame(raf); 6746 calcTimeLeft(); 6747 let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce; 6748 autoplayDelayTotal = swiper.params.autoplay.delay; 6749 autoplayDelayCurrent = swiper.params.autoplay.delay; 6750 const currentSlideDelay = getSlideDelay(); 6751 if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') { 6752 delay = currentSlideDelay; 6753 autoplayDelayTotal = currentSlideDelay; 6754 autoplayDelayCurrent = currentSlideDelay; 6755 } 6756 autoplayTimeLeft = delay; 6757 const speed = swiper.params.speed; 6758 const proceed = () => { 6759 if (!swiper || swiper.destroyed) return; 6760 if (swiper.params.autoplay.reverseDirection) { 6761 if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) { 6762 swiper.slidePrev(speed, true, true); 6763 emit('autoplay'); 6764 } else if (!swiper.params.autoplay.stopOnLastSlide) { 6765 swiper.slideTo(swiper.slides.length - 1, speed, true, true); 6766 emit('autoplay'); 6767 } 6768 } else { 6769 if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) { 6770 swiper.slideNext(speed, true, true); 6771 emit('autoplay'); 6772 } else if (!swiper.params.autoplay.stopOnLastSlide) { 6773 swiper.slideTo(0, speed, true, true); 6774 emit('autoplay'); 6775 } 6776 } 6777 if (swiper.params.cssMode) { 6778 autoplayStartTime = new Date().getTime(); 6779 requestAnimationFrame(() => { 6780 run(); 6781 }); 6782 } 6783 }; 6784 if (delay > 0) { 6785 clearTimeout(timeout); 6786 timeout = setTimeout(() => { 6787 proceed(); 6788 }, delay); 6789 } else { 6790 requestAnimationFrame(() => { 6791 proceed(); 6792 }); 6793 } 6794 6795 // eslint-disable-next-line 6796 return delay; 6797 }; 6798 const start = () => { 6799 swiper.autoplay.running = true; 6800 run(); 6801 emit('autoplayStart'); 6802 }; 6803 const stop = () => { 6804 swiper.autoplay.running = false; 6805 clearTimeout(timeout); 6806 cancelAnimationFrame(raf); 6807 emit('autoplayStop'); 6808 }; 6809 const pause = (internal, reset) => { 6810 if (swiper.destroyed || !swiper.autoplay.running) return; 6811 clearTimeout(timeout); 6812 if (!internal) { 6813 pausedByInteraction = true; 6814 } 6815 const proceed = () => { 6816 emit('autoplayPause'); 6817 if (swiper.params.autoplay.waitForTransition) { 6818 swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd); 6819 } else { 6820 resume(); 6821 } 6822 }; 6823 swiper.autoplay.paused = true; 6824 if (reset) { 6825 if (slideChanged) { 6826 autoplayTimeLeft = swiper.params.autoplay.delay; 6827 } 6828 slideChanged = false; 6829 proceed(); 6830 return; 6831 } 6832 const delay = autoplayTimeLeft || swiper.params.autoplay.delay; 6833 autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime); 6834 if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return; 6835 if (autoplayTimeLeft < 0) autoplayTimeLeft = 0; 6836 proceed(); 6837 }; 6838 const resume = () => { 6839 if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return; 6840 autoplayStartTime = new Date().getTime(); 6841 if (pausedByInteraction) { 6842 pausedByInteraction = false; 6843 run(autoplayTimeLeft); 6844 } else { 6845 run(); 6846 } 6847 swiper.autoplay.paused = false; 6848 emit('autoplayResume'); 6849 }; 6850 const onVisibilityChange = () => { 6851 if (swiper.destroyed || !swiper.autoplay.running) return; 6852 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 6853 if (document.visibilityState === 'hidden') { 6854 pausedByInteraction = true; 6855 pause(true); 6856 } 6857 if (document.visibilityState === 'visible') { 6858 resume(); 6859 } 6860 }; 6861 const onPointerEnter = e => { 6862 if (e.pointerType !== 'mouse') return; 6863 pausedByInteraction = true; 6864 pause(true); 6865 }; 6866 const onPointerLeave = e => { 6867 if (e.pointerType !== 'mouse') return; 6868 if (swiper.autoplay.paused) { 6869 resume(); 6870 } 6871 }; 6872 const attachMouseEvents = () => { 6873 if (swiper.params.autoplay.pauseOnMouseEnter) { 6874 swiper.el.addEventListener('pointerenter', onPointerEnter); 6875 swiper.el.addEventListener('pointerleave', onPointerLeave); 6876 } 6877 }; 6878 const detachMouseEvents = () => { 6879 swiper.el.removeEventListener('pointerenter', onPointerEnter); 6880 swiper.el.removeEventListener('pointerleave', onPointerLeave); 6881 }; 6882 const attachDocumentEvents = () => { 6883 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 6884 document.addEventListener('visibilitychange', onVisibilityChange); 6885 }; 6886 const detachDocumentEvents = () => { 6887 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 6888 document.removeEventListener('visibilitychange', onVisibilityChange); 6889 }; 6890 on('init', () => { 6891 if (swiper.params.autoplay.enabled) { 6892 attachMouseEvents(); 6893 attachDocumentEvents(); 6894 autoplayStartTime = new Date().getTime(); 6895 start(); 6896 } 6897 }); 6898 on('destroy', () => { 6899 detachMouseEvents(); 6900 detachDocumentEvents(); 6901 if (swiper.autoplay.running) { 6902 stop(); 6903 } 6904 }); 6905 on('beforeTransitionStart', (_s, speed, internal) => { 6906 if (swiper.destroyed || !swiper.autoplay.running) return; 6907 if (internal || !swiper.params.autoplay.disableOnInteraction) { 6908 pause(true, true); 6909 } else { 6910 stop(); 6911 } 6912 }); 6913 on('sliderFirstMove', () => { 6914 if (swiper.destroyed || !swiper.autoplay.running) return; 6915 if (swiper.params.autoplay.disableOnInteraction) { 6916 stop(); 6917 return; 6918 } 6919 isTouched = true; 6920 pausedByTouch = false; 6921 pausedByInteraction = false; 6922 touchStartTimeout = setTimeout(() => { 6923 pausedByInteraction = true; 6924 pausedByTouch = true; 6925 pause(true); 6926 }, 200); 6927 }); 6928 on('touchEnd', () => { 6929 if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return; 6930 clearTimeout(touchStartTimeout); 6931 clearTimeout(timeout); 6932 if (swiper.params.autoplay.disableOnInteraction) { 6933 pausedByTouch = false; 6934 isTouched = false; 6935 return; 6936 } 6937 if (pausedByTouch && swiper.params.cssMode) resume(); 6938 pausedByTouch = false; 6939 isTouched = false; 6940 }); 6941 on('slideChange', () => { 6942 if (swiper.destroyed || !swiper.autoplay.running) return; 6943 slideChanged = true; 6944 }); 6945 Object.assign(swiper.autoplay, { 6946 start, 6947 stop, 6948 pause, 6949 resume 6950 }); 6951} 6952 6953/***/ }), 6954
vendor: 7,220 bytes, lines 6955-7151
6955/***/ "./node_modules/swiper/modules/controller/controller.js": 6956/*!**************************************************************!*\ 6957 !*** ./node_modules/swiper/modules/controller/controller.js ***! 6958 \**************************************************************/ 6959/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 6960 6961__webpack_require__.r(__webpack_exports__); 6962/* harmony export */ __webpack_require__.d(__webpack_exports__, { 6963/* harmony export */ "default": function() { return /* binding */ Controller; } 6964/* harmony export */ }); 6965/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 6966/* eslint no-bitwise: ["error", { "allow": [">>"] }] */ 6967 6968function Controller({ 6969 swiper, 6970 extendParams, 6971 on 6972}) { 6973 extendParams({ 6974 controller: { 6975 control: undefined, 6976 inverse: false, 6977 by: 'slide' // or 'container' 6978 } 6979 }); 6980 6981 swiper.controller = { 6982 control: undefined 6983 }; 6984 function LinearSpline(x, y) { 6985 const binarySearch = function search() { 6986 let maxIndex; 6987 let minIndex; 6988 let guess; 6989 return (array, val) => { 6990 minIndex = -1; 6991 maxIndex = array.length; 6992 while (maxIndex - minIndex > 1) { 6993 guess = maxIndex + minIndex >> 1; 6994 if (array[guess] <= val) { 6995 minIndex = guess; 6996 } else { 6997 maxIndex = guess; 6998 } 6999 } 7000 return maxIndex; 7001 }; 7002 }(); 7003 this.x = x; 7004 this.y = y; 7005 this.lastIndex = x.length - 1; 7006 // Given an x value (x2), return the expected y2 value: 7007 // (x1,y1) is the known point before given value, 7008 // (x3,y3) is the known point after given value. 7009 let i1; 7010 let i3; 7011 this.interpolate = function interpolate(x2) { 7012 if (!x2) return 0; 7013 7014 // Get the indexes of x1 and x3 (the array indexes before and after given x2): 7015 i3 = binarySearch(this.x, x2); 7016 i1 = i3 - 1; 7017 7018 // We have our indexes i1 & i3, so we can calculate already: 7019 // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 7020 return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1]; 7021 }; 7022 return this; 7023 } 7024 function getInterpolateFunction(c) { 7025 swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid); 7026 } 7027 function setTranslate(_t, byController) { 7028 const controlled = swiper.controller.control; 7029 let multiplier; 7030 let controlledTranslate; 7031 const Swiper = swiper.constructor; 7032 function setControlledTranslate(c) { 7033 if (c.destroyed) return; 7034 7035 // this will create an Interpolate function based on the snapGrids 7036 // x is the Grid of the scrolled scroller and y will be the controlled scroller 7037 // it makes sense to create this only once and recall it for the interpolation 7038 // the function does a lot of value caching for performance 7039 const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate; 7040 if (swiper.params.controller.by === 'slide') { 7041 getInterpolateFunction(c); 7042 // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid 7043 // but it did not work out 7044 controlledTranslate = -swiper.controller.spline.interpolate(-translate); 7045 } 7046 if (!controlledTranslate || swiper.params.controller.by === 'container') { 7047 multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate()); 7048 if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) { 7049 multiplier = 1; 7050 } 7051 controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate(); 7052 } 7053 if (swiper.params.controller.inverse) { 7054 controlledTranslate = c.maxTranslate() - controlledTranslate; 7055 } 7056 c.updateProgress(controlledTranslate); 7057 c.setTranslate(controlledTranslate, swiper); 7058 c.updateActiveIndex(); 7059 c.updateSlidesClasses(); 7060 } 7061 if (Array.isArray(controlled)) { 7062 for (let i = 0; i < controlled.length; i += 1) { 7063 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 7064 setControlledTranslate(controlled[i]); 7065 } 7066 } 7067 } else if (controlled instanceof Swiper && byController !== controlled) { 7068 setControlledTranslate(controlled); 7069 } 7070 } 7071 function setTransition(duration, byController) { 7072 const Swiper = swiper.constructor; 7073 const controlled = swiper.controller.control; 7074 let i; 7075 function setControlledTransition(c) { 7076 if (c.destroyed) return; 7077 c.setTransition(duration, swiper); 7078 if (duration !== 0) { 7079 c.transitionStart(); 7080 if (c.params.autoHeight) { 7081 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.nextTick)(() => { 7082 c.updateAutoHeight(); 7083 }); 7084 } 7085 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementTransitionEnd)(c.wrapperEl, () => { 7086 if (!controlled) return; 7087 c.transitionEnd(); 7088 }); 7089 } 7090 } 7091 if (Array.isArray(controlled)) { 7092 for (i = 0; i < controlled.length; i += 1) { 7093 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 7094 setControlledTransition(controlled[i]); 7095 } 7096 } 7097 } else if (controlled instanceof Swiper && byController !== controlled) { 7098 setControlledTransition(controlled); 7099 } 7100 } 7101 function removeSpline() { 7102 if (!swiper.controller.control) return; 7103 if (swiper.controller.spline) { 7104 swiper.controller.spline = undefined; 7105 delete swiper.controller.spline; 7106 } 7107 } 7108 on('beforeInit', () => { 7109 if (typeof window !== 'undefined' && ( 7110 // eslint-disable-line 7111 typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) { 7112 const controlElement = document.querySelector(swiper.params.controller.control); 7113 if (controlElement && controlElement.swiper) { 7114 swiper.controller.control = controlElement.swiper; 7115 } else if (controlElement) { 7116 const onControllerSwiper = e => { 7117 swiper.controller.control = e.detail[0]; 7118 swiper.update(); 7119 controlElement.removeEventListener('init', onControllerSwiper); 7120 }; 7121 controlElement.addEventListener('init', onControllerSwiper); 7122 } 7123 return; 7124 } 7125 swiper.controller.control = swiper.params.controller.control; 7126 }); 7127 on('update', () => { 7128 removeSpline(); 7129 }); 7130 on('resize', () => { 7131 removeSpline(); 7132 }); 7133 on('observerUpdate', () => { 7134 removeSpline(); 7135 }); 7136 on('setTranslate', (_s, translate, byController) => { 7137 if (!swiper.controller.control || swiper.controller.control.destroyed) return; 7138 swiper.controller.setTranslate(translate, byController); 7139 }); 7140 on('setTransition', (_s, duration, byController) => { 7141 if (!swiper.controller.control || swiper.controller.control.destroyed) return; 7142 swiper.controller.setTransition(duration, byController); 7143 }); 7144 Object.assign(swiper.controller, { 7145 setTranslate, 7146 setTransition 7147 }); 7148} 7149 7150/***/ }), 7151
vendor: 5,825 bytes, lines 7152-7285
7152/***/ "./node_modules/swiper/modules/effect-cards/effect-cards.js": 7153/*!******************************************************************!*\ 7154 !*** ./node_modules/swiper/modules/effect-cards/effect-cards.js ***! 7155 \******************************************************************/ 7156/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 7157 7158__webpack_require__.r(__webpack_exports__); 7159/* harmony export */ __webpack_require__.d(__webpack_exports__, { 7160/* harmony export */ "default": function() { return /* binding */ EffectCards; } 7161/* harmony export */ }); 7162/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-shadow.js */ "./node_modules/swiper/shared/create-shadow.js"); 7163/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 7164/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-target.js */ "./node_modules/swiper/shared/effect-target.js"); 7165/* harmony import */ var _shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/effect-virtual-transition-end.js */ "./node_modules/swiper/shared/effect-virtual-transition-end.js"); 7166/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 7167 7168 7169 7170 7171 7172function EffectCards({ 7173 swiper, 7174 extendParams, 7175 on 7176}) { 7177 extendParams({ 7178 cardsEffect: { 7179 slideShadows: true, 7180 rotate: true, 7181 perSlideRotate: 2, 7182 perSlideOffset: 8 7183 } 7184 }); 7185 const setTranslate = () => { 7186 const { 7187 slides, 7188 activeIndex 7189 } = swiper; 7190 const params = swiper.params.cardsEffect; 7191 const { 7192 startTranslate, 7193 isTouched 7194 } = swiper.touchEventsData; 7195 const currentTranslate = swiper.translate; 7196 for (let i = 0; i < slides.length; i += 1) { 7197 const slideEl = slides[i]; 7198 const slideProgress = slideEl.progress; 7199 const progress = Math.min(Math.max(slideProgress, -4), 4); 7200 let offset = slideEl.swiperSlideOffset; 7201 if (swiper.params.centeredSlides && !swiper.params.cssMode) { 7202 swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`; 7203 } 7204 if (swiper.params.centeredSlides && swiper.params.cssMode) { 7205 offset -= slides[0].swiperSlideOffset; 7206 } 7207 let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset; 7208 let tY = 0; 7209 const tZ = -100 * Math.abs(progress); 7210 let scale = 1; 7211 let rotate = -params.perSlideRotate * progress; 7212 let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75; 7213 const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i; 7214 const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate; 7215 const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate; 7216 if (isSwipeToNext || isSwipeToPrev) { 7217 const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5; 7218 rotate += -28 * progress * subProgress; 7219 scale += -0.5 * subProgress; 7220 tXAdd += 96 * subProgress; 7221 tY = `${-25 * subProgress * Math.abs(progress)}%`; 7222 } 7223 if (progress < 0) { 7224 // next 7225 tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`; 7226 } else if (progress > 0) { 7227 // prev 7228 tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`; 7229 } else { 7230 tX = `${tX}px`; 7231 } 7232 if (!swiper.isHorizontal()) { 7233 const prevY = tY; 7234 tY = tX; 7235 tX = prevY; 7236 } 7237 const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`; 7238 const transform = ` 7239 translate3d(${tX}, ${tY}, ${tZ}px) 7240 rotateZ(${params.rotate ? rotate : 0}deg) 7241 scale(${scaleString}) 7242 `; 7243 if (params.slideShadows) { 7244 // Set shadows 7245 let shadowEl = slideEl.querySelector('.swiper-slide-shadow'); 7246 if (!shadowEl) { 7247 shadowEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params, slideEl); 7248 } 7249 if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1); 7250 } 7251 slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length; 7252 const targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__["default"])(params, slideEl); 7253 targetEl.style.transform = transform; 7254 } 7255 }; 7256 const setTransition = duration => { 7257 const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_4__.getSlideTransformEl)(slideEl)); 7258 transformElements.forEach(el => { 7259 el.style.transitionDuration = `${duration}ms`; 7260 el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => { 7261 shadowEl.style.transitionDuration = `${duration}ms`; 7262 }); 7263 }); 7264 (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__["default"])({ 7265 swiper, 7266 duration, 7267 transformElements 7268 }); 7269 }; 7270 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ 7271 effect: 'cards', 7272 swiper, 7273 on, 7274 setTranslate, 7275 setTransition, 7276 perspective: () => true, 7277 overwriteParams: () => ({ 7278 watchSlidesProgress: true, 7279 virtualTranslate: !swiper.params.cssMode 7280 }) 7281 }); 7282} 7283 7284/***/ }), 7285
vendor: 5,690 bytes, lines 7286-7401
7286/***/ "./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js": 7287/*!**************************************************************************!*\ 7288 !*** ./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js ***! 7289 \**************************************************************************/ 7290/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 7291 7292__webpack_require__.r(__webpack_exports__); 7293/* harmony export */ __webpack_require__.d(__webpack_exports__, { 7294/* harmony export */ "default": function() { return /* binding */ EffectCoverflow; } 7295/* harmony export */ }); 7296/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-shadow.js */ "./node_modules/swiper/shared/create-shadow.js"); 7297/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 7298/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-target.js */ "./node_modules/swiper/shared/effect-target.js"); 7299/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 7300 7301 7302 7303 7304function EffectCoverflow({ 7305 swiper, 7306 extendParams, 7307 on 7308}) { 7309 extendParams({ 7310 coverflowEffect: { 7311 rotate: 50, 7312 stretch: 0, 7313 depth: 100, 7314 scale: 1, 7315 modifier: 1, 7316 slideShadows: true 7317 } 7318 }); 7319 const setTranslate = () => { 7320 const { 7321 width: swiperWidth, 7322 height: swiperHeight, 7323 slides, 7324 slidesSizesGrid 7325 } = swiper; 7326 const params = swiper.params.coverflowEffect; 7327 const isHorizontal = swiper.isHorizontal(); 7328 const transform = swiper.translate; 7329 const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2; 7330 const rotate = isHorizontal ? params.rotate : -params.rotate; 7331 const translate = params.depth; 7332 // Each slide offset from center 7333 for (let i = 0, length = slides.length; i < length; i += 1) { 7334 const slideEl = slides[i]; 7335 const slideSize = slidesSizesGrid[i]; 7336 const slideOffset = slideEl.swiperSlideOffset; 7337 const centerOffset = (center - slideOffset - slideSize / 2) / slideSize; 7338 const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier; 7339 let rotateY = isHorizontal ? rotate * offsetMultiplier : 0; 7340 let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; 7341 // var rotateZ = 0 7342 let translateZ = -translate * Math.abs(offsetMultiplier); 7343 let stretch = params.stretch; 7344 // Allow percentage to make a relative stretch for responsive sliders 7345 if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) { 7346 stretch = parseFloat(params.stretch) / 100 * slideSize; 7347 } 7348 let translateY = isHorizontal ? 0 : stretch * offsetMultiplier; 7349 let translateX = isHorizontal ? stretch * offsetMultiplier : 0; 7350 let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); 7351 7352 // Fix for ultra small values 7353 if (Math.abs(translateX) < 0.001) translateX = 0; 7354 if (Math.abs(translateY) < 0.001) translateY = 0; 7355 if (Math.abs(translateZ) < 0.001) translateZ = 0; 7356 if (Math.abs(rotateY) < 0.001) rotateY = 0; 7357 if (Math.abs(rotateX) < 0.001) rotateX = 0; 7358 if (Math.abs(scale) < 0.001) scale = 0; 7359 const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`; 7360 const targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__["default"])(params, slideEl); 7361 targetEl.style.transform = slideTransform; 7362 slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; 7363 if (params.slideShadows) { 7364 // Set shadows 7365 let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top'); 7366 let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom'); 7367 if (!shadowBeforeEl) { 7368 shadowBeforeEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params, slideEl, isHorizontal ? 'left' : 'top'); 7369 } 7370 if (!shadowAfterEl) { 7371 shadowAfterEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params, slideEl, isHorizontal ? 'right' : 'bottom'); 7372 } 7373 if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; 7374 if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0; 7375 } 7376 } 7377 }; 7378 const setTransition = duration => { 7379 const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_3__.getSlideTransformEl)(slideEl)); 7380 transformElements.forEach(el => { 7381 el.style.transitionDuration = `${duration}ms`; 7382 el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => { 7383 shadowEl.style.transitionDuration = `${duration}ms`; 7384 }); 7385 }); 7386 }; 7387 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ 7388 effect: 'coverflow', 7389 swiper, 7390 on, 7391 setTranslate, 7392 setTransition, 7393 perspective: () => true, 7394 overwriteParams: () => ({ 7395 watchSlidesProgress: true 7396 }) 7397 }); 7398} 7399 7400/***/ }), 7401
vendor: 6,403 bytes, lines 7402-7559
7402/***/ "./node_modules/swiper/modules/effect-creative/effect-creative.js": 7403/*!************************************************************************!*\ 7404 !*** ./node_modules/swiper/modules/effect-creative/effect-creative.js ***! 7405 \************************************************************************/ 7406/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 7407 7408__webpack_require__.r(__webpack_exports__); 7409/* harmony export */ __webpack_require__.d(__webpack_exports__, { 7410/* harmony export */ "default": function() { return /* binding */ EffectCreative; } 7411/* harmony export */ }); 7412/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-shadow.js */ "./node_modules/swiper/shared/create-shadow.js"); 7413/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 7414/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-target.js */ "./node_modules/swiper/shared/effect-target.js"); 7415/* harmony import */ var _shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/effect-virtual-transition-end.js */ "./node_modules/swiper/shared/effect-virtual-transition-end.js"); 7416/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 7417 7418 7419 7420 7421 7422function EffectCreative({ 7423 swiper, 7424 extendParams, 7425 on 7426}) { 7427 extendParams({ 7428 creativeEffect: { 7429 limitProgress: 1, 7430 shadowPerProgress: false, 7431 progressMultiplier: 1, 7432 perspective: true, 7433 prev: { 7434 translate: [0, 0, 0], 7435 rotate: [0, 0, 0], 7436 opacity: 1, 7437 scale: 1 7438 }, 7439 next: { 7440 translate: [0, 0, 0], 7441 rotate: [0, 0, 0], 7442 opacity: 1, 7443 scale: 1 7444 } 7445 } 7446 }); 7447 const getTranslateValue = value => { 7448 if (typeof value === 'string') return value; 7449 return `${value}px`; 7450 }; 7451 const setTranslate = () => { 7452 const { 7453 slides, 7454 wrapperEl, 7455 slidesSizesGrid 7456 } = swiper; 7457 const params = swiper.params.creativeEffect; 7458 const { 7459 progressMultiplier: multiplier 7460 } = params; 7461 const isCenteredSlides = swiper.params.centeredSlides; 7462 if (isCenteredSlides) { 7463 const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0; 7464 wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`; 7465 } 7466 for (let i = 0; i < slides.length; i += 1) { 7467 const slideEl = slides[i]; 7468 const slideProgress = slideEl.progress; 7469 const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress); 7470 let originalProgress = progress; 7471 if (!isCenteredSlides) { 7472 originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress); 7473 } 7474 const offset = slideEl.swiperSlideOffset; 7475 const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0]; 7476 const r = [0, 0, 0]; 7477 let custom = false; 7478 if (!swiper.isHorizontal()) { 7479 t[1] = t[0]; 7480 t[0] = 0; 7481 } 7482 let data = { 7483 translate: [0, 0, 0], 7484 rotate: [0, 0, 0], 7485 scale: 1, 7486 opacity: 1 7487 }; 7488 if (progress < 0) { 7489 data = params.next; 7490 custom = true; 7491 } else if (progress > 0) { 7492 data = params.prev; 7493 custom = true; 7494 } 7495 // set translate 7496 t.forEach((value, index) => { 7497 t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`; 7498 }); 7499 // set rotates 7500 r.forEach((value, index) => { 7501 r[index] = data.rotate[index] * Math.abs(progress * multiplier); 7502 }); 7503 slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length; 7504 const translateString = t.join(', '); 7505 const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`; 7506 const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`; 7507 const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier; 7508 const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; 7509 7510 // Set shadows 7511 if (custom && data.shadow || !custom) { 7512 let shadowEl = slideEl.querySelector('.swiper-slide-shadow'); 7513 if (!shadowEl && data.shadow) { 7514 shadowEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params, slideEl); 7515 } 7516 if (shadowEl) { 7517 const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress; 7518 shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1); 7519 } 7520 } 7521 const targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__["default"])(params, slideEl); 7522 targetEl.style.transform = transform; 7523 targetEl.style.opacity = opacityString; 7524 if (data.origin) { 7525 targetEl.style.transformOrigin = data.origin; 7526 } 7527 } 7528 }; 7529 const setTransition = duration => { 7530 const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_4__.getSlideTransformEl)(slideEl)); 7531 transformElements.forEach(el => { 7532 el.style.transitionDuration = `${duration}ms`; 7533 el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => { 7534 shadowEl.style.transitionDuration = `${duration}ms`; 7535 }); 7536 }); 7537 (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__["default"])({ 7538 swiper, 7539 duration, 7540 transformElements, 7541 allSlides: true 7542 }); 7543 }; 7544 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ 7545 effect: 'creative', 7546 swiper, 7547 on, 7548 setTranslate, 7549 setTransition, 7550 perspective: () => swiper.params.creativeEffect.perspective, 7551 overwriteParams: () => ({ 7552 watchSlidesProgress: true, 7553 virtualTranslate: !swiper.params.cssMode 7554 }) 7555 }); 7556} 7557 7558/***/ }), 7559
vendor: 7,519 bytes, lines 7560-7743
7560/***/ "./node_modules/swiper/modules/effect-cube/effect-cube.js": 7561/*!****************************************************************!*\ 7562 !*** ./node_modules/swiper/modules/effect-cube/effect-cube.js ***! 7563 \****************************************************************/ 7564/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 7565 7566__webpack_require__.r(__webpack_exports__); 7567/* harmony export */ __webpack_require__.d(__webpack_exports__, { 7568/* harmony export */ "default": function() { return /* binding */ EffectCube; } 7569/* harmony export */ }); 7570/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 7571/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 7572 7573 7574function EffectCube({ 7575 swiper, 7576 extendParams, 7577 on 7578}) { 7579 extendParams({ 7580 cubeEffect: { 7581 slideShadows: true, 7582 shadow: true, 7583 shadowOffset: 20, 7584 shadowScale: 0.94 7585 } 7586 }); 7587 const createSlideShadows = (slideEl, progress, isHorizontal) => { 7588 let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top'); 7589 let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom'); 7590 if (!shadowBefore) { 7591 shadowBefore = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', `swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`); 7592 slideEl.append(shadowBefore); 7593 } 7594 if (!shadowAfter) { 7595 shadowAfter = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', `swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`); 7596 slideEl.append(shadowAfter); 7597 } 7598 if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0); 7599 if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0); 7600 }; 7601 const recreateShadows = () => { 7602 // create new ones 7603 const isHorizontal = swiper.isHorizontal(); 7604 swiper.slides.forEach(slideEl => { 7605 const progress = Math.max(Math.min(slideEl.progress, 1), -1); 7606 createSlideShadows(slideEl, progress, isHorizontal); 7607 }); 7608 }; 7609 const setTranslate = () => { 7610 const { 7611 el, 7612 wrapperEl, 7613 slides, 7614 width: swiperWidth, 7615 height: swiperHeight, 7616 rtlTranslate: rtl, 7617 size: swiperSize, 7618 browser 7619 } = swiper; 7620 const params = swiper.params.cubeEffect; 7621 const isHorizontal = swiper.isHorizontal(); 7622 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 7623 let wrapperRotate = 0; 7624 let cubeShadowEl; 7625 if (params.shadow) { 7626 if (isHorizontal) { 7627 cubeShadowEl = swiper.slidesEl.querySelector('.swiper-cube-shadow'); 7628 if (!cubeShadowEl) { 7629 cubeShadowEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', 'swiper-cube-shadow'); 7630 swiper.slidesEl.append(cubeShadowEl); 7631 } 7632 cubeShadowEl.style.height = `${swiperWidth}px`; 7633 } else { 7634 cubeShadowEl = el.querySelector('.swiper-cube-shadow'); 7635 if (!cubeShadowEl) { 7636 cubeShadowEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', 'swiper-cube-shadow'); 7637 el.append(cubeShadowEl); 7638 } 7639 } 7640 } 7641 for (let i = 0; i < slides.length; i += 1) { 7642 const slideEl = slides[i]; 7643 let slideIndex = i; 7644 if (isVirtual) { 7645 slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10); 7646 } 7647 let slideAngle = slideIndex * 90; 7648 let round = Math.floor(slideAngle / 360); 7649 if (rtl) { 7650 slideAngle = -slideAngle; 7651 round = Math.floor(-slideAngle / 360); 7652 } 7653 const progress = Math.max(Math.min(slideEl.progress, 1), -1); 7654 let tx = 0; 7655 let ty = 0; 7656 let tz = 0; 7657 if (slideIndex % 4 === 0) { 7658 tx = -round * 4 * swiperSize; 7659 tz = 0; 7660 } else if ((slideIndex - 1) % 4 === 0) { 7661 tx = 0; 7662 tz = -round * 4 * swiperSize; 7663 } else if ((slideIndex - 2) % 4 === 0) { 7664 tx = swiperSize + round * 4 * swiperSize; 7665 tz = swiperSize; 7666 } else if ((slideIndex - 3) % 4 === 0) { 7667 tx = -swiperSize; 7668 tz = 3 * swiperSize + swiperSize * 4 * round; 7669 } 7670 if (rtl) { 7671 tx = -tx; 7672 } 7673 if (!isHorizontal) { 7674 ty = tx; 7675 tx = 0; 7676 } 7677 const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`; 7678 if (progress <= 1 && progress > -1) { 7679 wrapperRotate = slideIndex * 90 + progress * 90; 7680 if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90; 7681 } 7682 slideEl.style.transform = transform; 7683 if (params.slideShadows) { 7684 createSlideShadows(slideEl, progress, isHorizontal); 7685 } 7686 } 7687 wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`; 7688 wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`; 7689 if (params.shadow) { 7690 if (isHorizontal) { 7691 cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`; 7692 } else { 7693 const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; 7694 const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); 7695 const scale1 = params.shadowScale; 7696 const scale2 = params.shadowScale / multiplier; 7697 const offset = params.shadowOffset; 7698 cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`; 7699 } 7700 } 7701 const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0; 7702 wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`; 7703 wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`); 7704 }; 7705 const setTransition = duration => { 7706 const { 7707 el, 7708 slides 7709 } = swiper; 7710 slides.forEach(slideEl => { 7711 slideEl.style.transitionDuration = `${duration}ms`; 7712 slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => { 7713 subEl.style.transitionDuration = `${duration}ms`; 7714 }); 7715 }); 7716 if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) { 7717 const shadowEl = el.querySelector('.swiper-cube-shadow'); 7718 if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`; 7719 } 7720 }; 7721 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ 7722 effect: 'cube', 7723 swiper, 7724 on, 7725 setTranslate, 7726 setTransition, 7727 recreateShadows, 7728 getEffectParams: () => swiper.params.cubeEffect, 7729 perspective: () => true, 7730 overwriteParams: () => ({ 7731 slidesPerView: 1, 7732 slidesPerGroup: 1, 7733 watchSlidesProgress: true, 7734 resistanceRatio: 0, 7735 spaceBetween: 0, 7736 centeredSlides: false, 7737 virtualTranslate: true 7738 }) 7739 }); 7740} 7741 7742/***/ }), 7743
vendor: 3,143 bytes, lines 7744-7822
7744/***/ "./node_modules/swiper/modules/effect-fade/effect-fade.js": 7745/*!****************************************************************!*\ 7746 !*** ./node_modules/swiper/modules/effect-fade/effect-fade.js ***! 7747 \****************************************************************/ 7748/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 7749 7750__webpack_require__.r(__webpack_exports__); 7751/* harmony export */ __webpack_require__.d(__webpack_exports__, { 7752/* harmony export */ "default": function() { return /* binding */ EffectFade; } 7753/* harmony export */ }); 7754/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 7755/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-target.js */ "./node_modules/swiper/shared/effect-target.js"); 7756/* harmony import */ var _shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-virtual-transition-end.js */ "./node_modules/swiper/shared/effect-virtual-transition-end.js"); 7757/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 7758 7759 7760 7761 7762function EffectFade({ 7763 swiper, 7764 extendParams, 7765 on 7766}) { 7767 extendParams({ 7768 fadeEffect: { 7769 crossFade: false 7770 } 7771 }); 7772 const setTranslate = () => { 7773 const { 7774 slides 7775 } = swiper; 7776 const params = swiper.params.fadeEffect; 7777 for (let i = 0; i < slides.length; i += 1) { 7778 const slideEl = swiper.slides[i]; 7779 const offset = slideEl.swiperSlideOffset; 7780 let tx = -offset; 7781 if (!swiper.params.virtualTranslate) tx -= swiper.translate; 7782 let ty = 0; 7783 if (!swiper.isHorizontal()) { 7784 ty = tx; 7785 tx = 0; 7786 } 7787 const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0); 7788 const targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params, slideEl); 7789 targetEl.style.opacity = slideOpacity; 7790 targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`; 7791 } 7792 }; 7793 const setTransition = duration => { 7794 const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_3__.getSlideTransformEl)(slideEl)); 7795 transformElements.forEach(el => { 7796 el.style.transitionDuration = `${duration}ms`; 7797 }); 7798 (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_2__["default"])({ 7799 swiper, 7800 duration, 7801 transformElements, 7802 allSlides: true 7803 }); 7804 }; 7805 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ 7806 effect: 'fade', 7807 swiper, 7808 on, 7809 setTranslate, 7810 setTransition, 7811 overwriteParams: () => ({ 7812 slidesPerView: 1, 7813 slidesPerGroup: 1, 7814 watchSlidesProgress: true, 7815 spaceBetween: 0, 7816 virtualTranslate: !swiper.params.cssMode 7817 }) 7818 }); 7819} 7820 7821/***/ }), 7822
vendor: 5,325 bytes, lines 7823-7946
7823/***/ "./node_modules/swiper/modules/effect-flip/effect-flip.js": 7824/*!****************************************************************!*\ 7825 !*** ./node_modules/swiper/modules/effect-flip/effect-flip.js ***! 7826 \****************************************************************/ 7827/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 7828 7829__webpack_require__.r(__webpack_exports__); 7830/* harmony export */ __webpack_require__.d(__webpack_exports__, { 7831/* harmony export */ "default": function() { return /* binding */ EffectFlip; } 7832/* harmony export */ }); 7833/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-shadow.js */ "./node_modules/swiper/shared/create-shadow.js"); 7834/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 7835/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-target.js */ "./node_modules/swiper/shared/effect-target.js"); 7836/* harmony import */ var _shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/effect-virtual-transition-end.js */ "./node_modules/swiper/shared/effect-virtual-transition-end.js"); 7837/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 7838 7839 7840 7841 7842 7843function EffectFlip({ 7844 swiper, 7845 extendParams, 7846 on 7847}) { 7848 extendParams({ 7849 flipEffect: { 7850 slideShadows: true, 7851 limitRotation: true 7852 } 7853 }); 7854 const createSlideShadows = (slideEl, progress, params) => { 7855 let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top'); 7856 let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom'); 7857 if (!shadowBefore) { 7858 shadowBefore = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params, slideEl, swiper.isHorizontal() ? 'left' : 'top'); 7859 } 7860 if (!shadowAfter) { 7861 shadowAfter = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params, slideEl, swiper.isHorizontal() ? 'right' : 'bottom'); 7862 } 7863 if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0); 7864 if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0); 7865 }; 7866 const recreateShadows = () => { 7867 // Set shadows 7868 const params = swiper.params.flipEffect; 7869 swiper.slides.forEach(slideEl => { 7870 let progress = slideEl.progress; 7871 if (swiper.params.flipEffect.limitRotation) { 7872 progress = Math.max(Math.min(slideEl.progress, 1), -1); 7873 } 7874 createSlideShadows(slideEl, progress, params); 7875 }); 7876 }; 7877 const setTranslate = () => { 7878 const { 7879 slides, 7880 rtlTranslate: rtl 7881 } = swiper; 7882 const params = swiper.params.flipEffect; 7883 for (let i = 0; i < slides.length; i += 1) { 7884 const slideEl = slides[i]; 7885 let progress = slideEl.progress; 7886 if (swiper.params.flipEffect.limitRotation) { 7887 progress = Math.max(Math.min(slideEl.progress, 1), -1); 7888 } 7889 const offset = slideEl.swiperSlideOffset; 7890 const rotate = -180 * progress; 7891 let rotateY = rotate; 7892 let rotateX = 0; 7893 let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset; 7894 let ty = 0; 7895 if (!swiper.isHorizontal()) { 7896 ty = tx; 7897 tx = 0; 7898 rotateX = -rotateY; 7899 rotateY = 0; 7900 } else if (rtl) { 7901 rotateY = -rotateY; 7902 } 7903 slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length; 7904 if (params.slideShadows) { 7905 createSlideShadows(slideEl, progress, params); 7906 } 7907 const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`; 7908 const targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__["default"])(params, slideEl); 7909 targetEl.style.transform = transform; 7910 } 7911 }; 7912 const setTransition = duration => { 7913 const transformElements = swiper.slides.map(slideEl => (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_4__.getSlideTransformEl)(slideEl)); 7914 transformElements.forEach(el => { 7915 el.style.transitionDuration = `${duration}ms`; 7916 el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => { 7917 shadowEl.style.transitionDuration = `${duration}ms`; 7918 }); 7919 }); 7920 (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__["default"])({ 7921 swiper, 7922 duration, 7923 transformElements 7924 }); 7925 }; 7926 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ 7927 effect: 'flip', 7928 swiper, 7929 on, 7930 setTranslate, 7931 setTransition, 7932 recreateShadows, 7933 getEffectParams: () => swiper.params.flipEffect, 7934 perspective: () => true, 7935 overwriteParams: () => ({ 7936 slidesPerView: 1, 7937 slidesPerGroup: 1, 7938 watchSlidesProgress: true, 7939 spaceBetween: 0, 7940 virtualTranslate: !swiper.params.cssMode 7941 }) 7942 }); 7943} 7944 7945/***/ }), 7946
vendor: 9,125 bytes, lines 7947-8188
7947/***/ "./node_modules/swiper/modules/free-mode/free-mode.js": 7948/*!************************************************************!*\ 7949 !*** ./node_modules/swiper/modules/free-mode/free-mode.js ***! 7950 \************************************************************/ 7951/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 7952 7953__webpack_require__.r(__webpack_exports__); 7954/* harmony export */ __webpack_require__.d(__webpack_exports__, { 7955/* harmony export */ "default": function() { return /* binding */ freeMode; } 7956/* harmony export */ }); 7957/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 7958 7959function freeMode({ 7960 swiper, 7961 extendParams, 7962 emit, 7963 once 7964}) { 7965 extendParams({ 7966 freeMode: { 7967 enabled: false, 7968 momentum: true, 7969 momentumRatio: 1, 7970 momentumBounce: true, 7971 momentumBounceRatio: 1, 7972 momentumVelocityRatio: 1, 7973 sticky: false, 7974 minimumVelocity: 0.02 7975 } 7976 }); 7977 function onTouchStart() { 7978 const translate = swiper.getTranslate(); 7979 swiper.setTranslate(translate); 7980 swiper.setTransition(0); 7981 swiper.touchEventsData.velocities.length = 0; 7982 swiper.freeMode.onTouchEnd({ 7983 currentPos: swiper.rtl ? swiper.translate : -swiper.translate 7984 }); 7985 } 7986 function onTouchMove() { 7987 const { 7988 touchEventsData: data, 7989 touches 7990 } = swiper; 7991 // Velocity 7992 if (data.velocities.length === 0) { 7993 data.velocities.push({ 7994 position: touches[swiper.isHorizontal() ? 'startX' : 'startY'], 7995 time: data.touchStartTime 7996 }); 7997 } 7998 data.velocities.push({ 7999 position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'], 8000 time: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)() 8001 }); 8002 } 8003 function onTouchEnd({ 8004 currentPos 8005 }) { 8006 const { 8007 params, 8008 wrapperEl, 8009 rtlTranslate: rtl, 8010 snapGrid, 8011 touchEventsData: data 8012 } = swiper; 8013 // Time diff 8014 const touchEndTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)(); 8015 const timeDiff = touchEndTime - data.touchStartTime; 8016 if (currentPos < -swiper.minTranslate()) { 8017 swiper.slideTo(swiper.activeIndex); 8018 return; 8019 } 8020 if (currentPos > -swiper.maxTranslate()) { 8021 if (swiper.slides.length < snapGrid.length) { 8022 swiper.slideTo(snapGrid.length - 1); 8023 } else { 8024 swiper.slideTo(swiper.slides.length - 1); 8025 } 8026 return; 8027 } 8028 if (params.freeMode.momentum) { 8029 if (data.velocities.length > 1) { 8030 const lastMoveEvent = data.velocities.pop(); 8031 const velocityEvent = data.velocities.pop(); 8032 const distance = lastMoveEvent.position - velocityEvent.position; 8033 const time = lastMoveEvent.time - velocityEvent.time; 8034 swiper.velocity = distance / time; 8035 swiper.velocity /= 2; 8036 if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) { 8037 swiper.velocity = 0; 8038 } 8039 // this implies that the user stopped moving a finger then released. 8040 // There would be no events with distance zero, so the last event is stale. 8041 if (time > 150 || (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)() - lastMoveEvent.time > 300) { 8042 swiper.velocity = 0; 8043 } 8044 } else { 8045 swiper.velocity = 0; 8046 } 8047 swiper.velocity *= params.freeMode.momentumVelocityRatio; 8048 data.velocities.length = 0; 8049 let momentumDuration = 1000 * params.freeMode.momentumRatio; 8050 const momentumDistance = swiper.velocity * momentumDuration; 8051 let newPosition = swiper.translate + momentumDistance; 8052 if (rtl) newPosition = -newPosition; 8053 let doBounce = false; 8054 let afterBouncePosition; 8055 const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio; 8056 let needsLoopFix; 8057 if (newPosition < swiper.maxTranslate()) { 8058 if (params.freeMode.momentumBounce) { 8059 if (newPosition + swiper.maxTranslate() < -bounceAmount) { 8060 newPosition = swiper.maxTranslate() - bounceAmount; 8061 } 8062 afterBouncePosition = swiper.maxTranslate(); 8063 doBounce = true; 8064 data.allowMomentumBounce = true; 8065 } else { 8066 newPosition = swiper.maxTranslate(); 8067 } 8068 if (params.loop && params.centeredSlides) needsLoopFix = true; 8069 } else if (newPosition > swiper.minTranslate()) { 8070 if (params.freeMode.momentumBounce) { 8071 if (newPosition - swiper.minTranslate() > bounceAmount) { 8072 newPosition = swiper.minTranslate() + bounceAmount; 8073 } 8074 afterBouncePosition = swiper.minTranslate(); 8075 doBounce = true; 8076 data.allowMomentumBounce = true; 8077 } else { 8078 newPosition = swiper.minTranslate(); 8079 } 8080 if (params.loop && params.centeredSlides) needsLoopFix = true; 8081 } else if (params.freeMode.sticky) { 8082 let nextSlide; 8083 for (let j = 0; j < snapGrid.length; j += 1) { 8084 if (snapGrid[j] > -newPosition) { 8085 nextSlide = j; 8086 break; 8087 } 8088 } 8089 if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') { 8090 newPosition = snapGrid[nextSlide]; 8091 } else { 8092 newPosition = snapGrid[nextSlide - 1]; 8093 } 8094 newPosition = -newPosition; 8095 } 8096 if (needsLoopFix) { 8097 once('transitionEnd', () => { 8098 swiper.loopFix(); 8099 }); 8100 } 8101 // Fix duration 8102 if (swiper.velocity !== 0) { 8103 if (rtl) { 8104 momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity); 8105 } else { 8106 momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity); 8107 } 8108 if (params.freeMode.sticky) { 8109 // If freeMode.sticky is active and the user ends a swipe with a slow-velocity 8110 // event, then durations can be 20+ seconds to slide one (or zero!) slides. 8111 // It's easy to see this when simulating touch with mouse events. To fix this, 8112 // limit single-slide swipes to the default slide duration. This also has the 8113 // nice side effect of matching slide speed if the user stopped moving before 8114 // lifting finger or mouse vs. moving slowly before lifting the finger/mouse. 8115 // For faster swipes, also apply limits (albeit higher ones). 8116 const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate); 8117 const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex]; 8118 if (moveDistance < currentSlideSize) { 8119 momentumDuration = params.speed; 8120 } else if (moveDistance < 2 * currentSlideSize) { 8121 momentumDuration = params.speed * 1.5; 8122 } else { 8123 momentumDuration = params.speed * 2.5; 8124 } 8125 } 8126 } else if (params.freeMode.sticky) { 8127 swiper.slideToClosest(); 8128 return; 8129 } 8130 if (params.freeMode.momentumBounce && doBounce) { 8131 swiper.updateProgress(afterBouncePosition); 8132 swiper.setTransition(momentumDuration); 8133 swiper.setTranslate(newPosition); 8134 swiper.transitionStart(true, swiper.swipeDirection); 8135 swiper.animating = true; 8136 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementTransitionEnd)(wrapperEl, () => { 8137 if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return; 8138 emit('momentumBounce'); 8139 swiper.setTransition(params.speed); 8140 setTimeout(() => { 8141 swiper.setTranslate(afterBouncePosition); 8142 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementTransitionEnd)(wrapperEl, () => { 8143 if (!swiper || swiper.destroyed) return; 8144 swiper.transitionEnd(); 8145 }); 8146 }, 0); 8147 }); 8148 } else if (swiper.velocity) { 8149 emit('_freeModeNoMomentumRelease'); 8150 swiper.updateProgress(newPosition); 8151 swiper.setTransition(momentumDuration); 8152 swiper.setTranslate(newPosition); 8153 swiper.transitionStart(true, swiper.swipeDirection); 8154 if (!swiper.animating) { 8155 swiper.animating = true; 8156 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementTransitionEnd)(wrapperEl, () => { 8157 if (!swiper || swiper.destroyed) return; 8158 swiper.transitionEnd(); 8159 }); 8160 } 8161 } else { 8162 swiper.updateProgress(newPosition); 8163 } 8164 swiper.updateActiveIndex(); 8165 swiper.updateSlidesClasses(); 8166 } else if (params.freeMode.sticky) { 8167 swiper.slideToClosest(); 8168 return; 8169 } else if (params.freeMode) { 8170 emit('_freeModeNoMomentumRelease'); 8171 } 8172 if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) { 8173 swiper.updateProgress(); 8174 swiper.updateActiveIndex(); 8175 swiper.updateSlidesClasses(); 8176 } 8177 } 8178 Object.assign(swiper, { 8179 freeMode: { 8180 onTouchStart, 8181 onTouchMove, 8182 onTouchEnd 8183 } 8184 }); 8185} 8186 8187/***/ }), 8188
vendor: 4,165 bytes, lines 8189-8308
8189/***/ "./node_modules/swiper/modules/grid/grid.js": 8190/*!**************************************************!*\ 8191 !*** ./node_modules/swiper/modules/grid/grid.js ***! 8192 \**************************************************/ 8193/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 8194 8195__webpack_require__.r(__webpack_exports__); 8196/* harmony export */ __webpack_require__.d(__webpack_exports__, { 8197/* harmony export */ "default": function() { return /* binding */ Grid; } 8198/* harmony export */ }); 8199function Grid({ 8200 swiper, 8201 extendParams 8202}) { 8203 extendParams({ 8204 grid: { 8205 rows: 1, 8206 fill: 'column' 8207 } 8208 }); 8209 let slidesNumberEvenToRows; 8210 let slidesPerRow; 8211 let numFullColumns; 8212 const getSpaceBetween = () => { 8213 let spaceBetween = swiper.params.spaceBetween; 8214 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 8215 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size; 8216 } else if (typeof spaceBetween === 'string') { 8217 spaceBetween = parseFloat(spaceBetween); 8218 } 8219 return spaceBetween; 8220 }; 8221 const initSlides = slidesLength => { 8222 const { 8223 slidesPerView 8224 } = swiper.params; 8225 const { 8226 rows, 8227 fill 8228 } = swiper.params.grid; 8229 slidesPerRow = slidesNumberEvenToRows / rows; 8230 numFullColumns = Math.floor(slidesLength / rows); 8231 if (Math.floor(slidesLength / rows) === slidesLength / rows) { 8232 slidesNumberEvenToRows = slidesLength; 8233 } else { 8234 slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows; 8235 } 8236 if (slidesPerView !== 'auto' && fill === 'row') { 8237 slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows); 8238 } 8239 }; 8240 const updateSlide = (i, slide, slidesLength, getDirectionLabel) => { 8241 const { 8242 slidesPerGroup 8243 } = swiper.params; 8244 const spaceBetween = getSpaceBetween(); 8245 const { 8246 rows, 8247 fill 8248 } = swiper.params.grid; 8249 // Set slides order 8250 let newSlideOrderIndex; 8251 let column; 8252 let row; 8253 if (fill === 'row' && slidesPerGroup > 1) { 8254 const groupIndex = Math.floor(i / (slidesPerGroup * rows)); 8255 const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex; 8256 const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup); 8257 row = Math.floor(slideIndexInGroup / columnsInGroup); 8258 column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup; 8259 newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows; 8260 slide.style.order = newSlideOrderIndex; 8261 } else if (fill === 'column') { 8262 column = Math.floor(i / rows); 8263 row = i - column * rows; 8264 if (column > numFullColumns || column === numFullColumns && row === rows - 1) { 8265 row += 1; 8266 if (row >= rows) { 8267 row = 0; 8268 column += 1; 8269 } 8270 } 8271 } else { 8272 row = Math.floor(i / slidesPerRow); 8273 column = i - row * slidesPerRow; 8274 } 8275 slide.style[getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : ''; 8276 }; 8277 const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => { 8278 const { 8279 centeredSlides, 8280 roundLengths 8281 } = swiper.params; 8282 const spaceBetween = getSpaceBetween(); 8283 const { 8284 rows 8285 } = swiper.params.grid; 8286 swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows; 8287 swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween; 8288 swiper.wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`; 8289 if (centeredSlides) { 8290 const newSlidesGrid = []; 8291 for (let i = 0; i < snapGrid.length; i += 1) { 8292 let slidesGridItem = snapGrid[i]; 8293 if (roundLengths) slidesGridItem = Math.floor(slidesGridItem); 8294 if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem); 8295 } 8296 snapGrid.splice(0, snapGrid.length); 8297 snapGrid.push(...newSlidesGrid); 8298 } 8299 }; 8300 swiper.grid = { 8301 initSlides, 8302 updateSlide, 8303 updateWrapperSize 8304 }; 8305} 8306 8307/***/ }), 8308
vendor: 4,234 bytes, lines 8309-8412
8309/***/ "./node_modules/swiper/modules/hash-navigation/hash-navigation.js": 8310/*!************************************************************************!*\ 8311 !*** ./node_modules/swiper/modules/hash-navigation/hash-navigation.js ***! 8312 \************************************************************************/ 8313/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 8314 8315__webpack_require__.r(__webpack_exports__); 8316/* harmony export */ __webpack_require__.d(__webpack_exports__, { 8317/* harmony export */ "default": function() { return /* binding */ HashNavigation; } 8318/* harmony export */ }); 8319/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 8320/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 8321 8322 8323function HashNavigation({ 8324 swiper, 8325 extendParams, 8326 emit, 8327 on 8328}) { 8329 let initialized = false; 8330 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 8331 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 8332 extendParams({ 8333 hashNavigation: { 8334 enabled: false, 8335 replaceState: false, 8336 watchState: false, 8337 getSlideIndex(_s, hash) { 8338 if (swiper.virtual && swiper.params.virtual.enabled) { 8339 const slideWithHash = swiper.slides.filter(slideEl => slideEl.getAttribute('data-hash') === hash)[0]; 8340 if (!slideWithHash) return 0; 8341 const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10); 8342 return index; 8343 } 8344 return swiper.getSlideIndex((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash="${hash}"], swiper-slide[data-hash="${hash}"]`)[0]); 8345 } 8346 } 8347 }); 8348 const onHashChange = () => { 8349 emit('hashChange'); 8350 const newHash = document.location.hash.replace('#', ''); 8351 const activeSlideEl = swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`); 8352 const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : ''; 8353 if (newHash !== activeSlideHash) { 8354 const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash); 8355 if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return; 8356 swiper.slideTo(newIndex); 8357 } 8358 }; 8359 const setHash = () => { 8360 if (!initialized || !swiper.params.hashNavigation.enabled) return; 8361 const activeSlideEl = swiper.slidesEl.querySelector(`[data-swiper-slide-index="${swiper.activeIndex}"]`); 8362 const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : ''; 8363 if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) { 8364 window.history.replaceState(null, null, `#${activeSlideHash}` || ''); 8365 emit('hashSet'); 8366 } else { 8367 document.location.hash = activeSlideHash || ''; 8368 emit('hashSet'); 8369 } 8370 }; 8371 const init = () => { 8372 if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return; 8373 initialized = true; 8374 const hash = document.location.hash.replace('#', ''); 8375 if (hash) { 8376 const speed = 0; 8377 const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash); 8378 swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true); 8379 } 8380 if (swiper.params.hashNavigation.watchState) { 8381 window.addEventListener('hashchange', onHashChange); 8382 } 8383 }; 8384 const destroy = () => { 8385 if (swiper.params.hashNavigation.watchState) { 8386 window.removeEventListener('hashchange', onHashChange); 8387 } 8388 }; 8389 on('init', () => { 8390 if (swiper.params.hashNavigation.enabled) { 8391 init(); 8392 } 8393 }); 8394 on('destroy', () => { 8395 if (swiper.params.hashNavigation.enabled) { 8396 destroy(); 8397 } 8398 }); 8399 on('transitionEnd _freeModeNoMomentumRelease', () => { 8400 if (initialized) { 8401 setHash(); 8402 } 8403 }); 8404 on('slideChange', () => { 8405 if (initialized && swiper.params.cssMode) { 8406 setHash(); 8407 } 8408 }); 8409} 8410 8411/***/ }), 8412
vendor: 4,935 bytes, lines 8413-8564
8413/***/ "./node_modules/swiper/modules/history/history.js": 8414/*!********************************************************!*\ 8415 !*** ./node_modules/swiper/modules/history/history.js ***! 8416 \********************************************************/ 8417/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 8418 8419__webpack_require__.r(__webpack_exports__); 8420/* harmony export */ __webpack_require__.d(__webpack_exports__, { 8421/* harmony export */ "default": function() { return /* binding */ History; } 8422/* harmony export */ }); 8423/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 8424 8425function History({ 8426 swiper, 8427 extendParams, 8428 on 8429}) { 8430 extendParams({ 8431 history: { 8432 enabled: false, 8433 root: '', 8434 replaceState: false, 8435 key: 'slides', 8436 keepQuery: false 8437 } 8438 }); 8439 let initialized = false; 8440 let paths = {}; 8441 const slugify = text => { 8442 return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, ''); 8443 }; 8444 const getPathValues = urlOverride => { 8445 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 8446 let location; 8447 if (urlOverride) { 8448 location = new URL(urlOverride); 8449 } else { 8450 location = window.location; 8451 } 8452 const pathArray = location.pathname.slice(1).split('/').filter(part => part !== ''); 8453 const total = pathArray.length; 8454 const key = pathArray[total - 2]; 8455 const value = pathArray[total - 1]; 8456 return { 8457 key, 8458 value 8459 }; 8460 }; 8461 const setHistory = (key, index) => { 8462 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 8463 if (!initialized || !swiper.params.history.enabled) return; 8464 let location; 8465 if (swiper.params.url) { 8466 location = new URL(swiper.params.url); 8467 } else { 8468 location = window.location; 8469 } 8470 const slide = swiper.slides[index]; 8471 let value = slugify(slide.getAttribute('data-history')); 8472 if (swiper.params.history.root.length > 0) { 8473 let root = swiper.params.history.root; 8474 if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1); 8475 value = `${root}/${key ? `${key}/` : ''}${value}`; 8476 } else if (!location.pathname.includes(key)) { 8477 value = `${key ? `${key}/` : ''}${value}`; 8478 } 8479 if (swiper.params.history.keepQuery) { 8480 value += location.search; 8481 } 8482 const currentState = window.history.state; 8483 if (currentState && currentState.value === value) { 8484 return; 8485 } 8486 if (swiper.params.history.replaceState) { 8487 window.history.replaceState({ 8488 value 8489 }, null, value); 8490 } else { 8491 window.history.pushState({ 8492 value 8493 }, null, value); 8494 } 8495 }; 8496 const scrollToSlide = (speed, value, runCallbacks) => { 8497 if (value) { 8498 for (let i = 0, length = swiper.slides.length; i < length; i += 1) { 8499 const slide = swiper.slides[i]; 8500 const slideHistory = slugify(slide.getAttribute('data-history')); 8501 if (slideHistory === value) { 8502 const index = swiper.getSlideIndex(slide); 8503 swiper.slideTo(index, speed, runCallbacks); 8504 } 8505 } 8506 } else { 8507 swiper.slideTo(0, speed, runCallbacks); 8508 } 8509 }; 8510 const setHistoryPopState = () => { 8511 paths = getPathValues(swiper.params.url); 8512 scrollToSlide(swiper.params.speed, paths.value, false); 8513 }; 8514 const init = () => { 8515 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 8516 if (!swiper.params.history) return; 8517 if (!window.history || !window.history.pushState) { 8518 swiper.params.history.enabled = false; 8519 swiper.params.hashNavigation.enabled = true; 8520 return; 8521 } 8522 initialized = true; 8523 paths = getPathValues(swiper.params.url); 8524 if (!paths.key && !paths.value) { 8525 if (!swiper.params.history.replaceState) { 8526 window.addEventListener('popstate', setHistoryPopState); 8527 } 8528 return; 8529 } 8530 scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit); 8531 if (!swiper.params.history.replaceState) { 8532 window.addEventListener('popstate', setHistoryPopState); 8533 } 8534 }; 8535 const destroy = () => { 8536 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 8537 if (!swiper.params.history.replaceState) { 8538 window.removeEventListener('popstate', setHistoryPopState); 8539 } 8540 }; 8541 on('init', () => { 8542 if (swiper.params.history.enabled) { 8543 init(); 8544 } 8545 }); 8546 on('destroy', () => { 8547 if (swiper.params.history.enabled) { 8548 destroy(); 8549 } 8550 }); 8551 on('transitionEnd _freeModeNoMomentumRelease', () => { 8552 if (initialized) { 8553 setHistory(swiper.params.history.key, swiper.activeIndex); 8554 } 8555 }); 8556 on('slideChange', () => { 8557 if (initialized && swiper.params.cssMode) { 8558 setHistory(swiper.params.history.key, swiper.activeIndex); 8559 } 8560 }); 8561} 8562 8563/***/ }), 8564
vendor: 5,261 bytes, lines 8565-8692
8565/***/ "./node_modules/swiper/modules/keyboard/keyboard.js": 8566/*!**********************************************************!*\ 8567 !*** ./node_modules/swiper/modules/keyboard/keyboard.js ***! 8568 \**********************************************************/ 8569/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 8570 8571__webpack_require__.r(__webpack_exports__); 8572/* harmony export */ __webpack_require__.d(__webpack_exports__, { 8573/* harmony export */ "default": function() { return /* binding */ Keyboard; } 8574/* harmony export */ }); 8575/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 8576/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 8577/* eslint-disable consistent-return */ 8578 8579 8580function Keyboard({ 8581 swiper, 8582 extendParams, 8583 on, 8584 emit 8585}) { 8586 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 8587 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 8588 swiper.keyboard = { 8589 enabled: false 8590 }; 8591 extendParams({ 8592 keyboard: { 8593 enabled: false, 8594 onlyInViewport: true, 8595 pageUpDown: true 8596 } 8597 }); 8598 function handle(event) { 8599 if (!swiper.enabled) return; 8600 const { 8601 rtlTranslate: rtl 8602 } = swiper; 8603 let e = event; 8604 if (e.originalEvent) e = e.originalEvent; // jquery fix 8605 const kc = e.keyCode || e.charCode; 8606 const pageUpDown = swiper.params.keyboard.pageUpDown; 8607 const isPageUp = pageUpDown && kc === 33; 8608 const isPageDown = pageUpDown && kc === 34; 8609 const isArrowLeft = kc === 37; 8610 const isArrowRight = kc === 39; 8611 const isArrowUp = kc === 38; 8612 const isArrowDown = kc === 40; 8613 // Directions locks 8614 if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) { 8615 return false; 8616 } 8617 if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) { 8618 return false; 8619 } 8620 if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { 8621 return undefined; 8622 } 8623 if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { 8624 return undefined; 8625 } 8626 if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) { 8627 let inView = false; 8628 // Check that swiper should be inside of visible area of window 8629 if ((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) { 8630 return undefined; 8631 } 8632 const el = swiper.el; 8633 const swiperWidth = el.clientWidth; 8634 const swiperHeight = el.clientHeight; 8635 const windowWidth = window.innerWidth; 8636 const windowHeight = window.innerHeight; 8637 const swiperOffset = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementOffset)(el); 8638 if (rtl) swiperOffset.left -= el.scrollLeft; 8639 const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]]; 8640 for (let i = 0; i < swiperCoord.length; i += 1) { 8641 const point = swiperCoord[i]; 8642 if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) { 8643 if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line 8644 inView = true; 8645 } 8646 } 8647 if (!inView) return undefined; 8648 } 8649 if (swiper.isHorizontal()) { 8650 if (isPageUp || isPageDown || isArrowLeft || isArrowRight) { 8651 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 8652 } 8653 if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext(); 8654 if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev(); 8655 } else { 8656 if (isPageUp || isPageDown || isArrowUp || isArrowDown) { 8657 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 8658 } 8659 if (isPageDown || isArrowDown) swiper.slideNext(); 8660 if (isPageUp || isArrowUp) swiper.slidePrev(); 8661 } 8662 emit('keyPress', kc); 8663 return undefined; 8664 } 8665 function enable() { 8666 if (swiper.keyboard.enabled) return; 8667 document.addEventListener('keydown', handle); 8668 swiper.keyboard.enabled = true; 8669 } 8670 function disable() { 8671 if (!swiper.keyboard.enabled) return; 8672 document.removeEventListener('keydown', handle); 8673 swiper.keyboard.enabled = false; 8674 } 8675 on('init', () => { 8676 if (swiper.params.keyboard.enabled) { 8677 enable(); 8678 } 8679 }); 8680 on('destroy', () => { 8681 if (swiper.keyboard.enabled) { 8682 disable(); 8683 } 8684 }); 8685 Object.assign(swiper.keyboard, { 8686 enable, 8687 disable 8688 }); 8689} 8690 8691/***/ }), 8692
vendor: 2,183 bytes, lines 8693-8726
8693/***/ "./node_modules/swiper/modules/manipulation/manipulation.js": 8694/*!******************************************************************!*\ 8695 !*** ./node_modules/swiper/modules/manipulation/manipulation.js ***! 8696 \******************************************************************/ 8697/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 8698 8699__webpack_require__.r(__webpack_exports__); 8700/* harmony export */ __webpack_require__.d(__webpack_exports__, { 8701/* harmony export */ "default": function() { return /* binding */ Manipulation; } 8702/* harmony export */ }); 8703/* harmony import */ var _methods_appendSlide_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./methods/appendSlide.js */ "./node_modules/swiper/modules/manipulation/methods/appendSlide.js"); 8704/* harmony import */ var _methods_prependSlide_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./methods/prependSlide.js */ "./node_modules/swiper/modules/manipulation/methods/prependSlide.js"); 8705/* harmony import */ var _methods_addSlide_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./methods/addSlide.js */ "./node_modules/swiper/modules/manipulation/methods/addSlide.js"); 8706/* harmony import */ var _methods_removeSlide_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./methods/removeSlide.js */ "./node_modules/swiper/modules/manipulation/methods/removeSlide.js"); 8707/* harmony import */ var _methods_removeAllSlides_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./methods/removeAllSlides.js */ "./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js"); 8708 8709 8710 8711 8712 8713function Manipulation({ 8714 swiper 8715}) { 8716 Object.assign(swiper, { 8717 appendSlide: _methods_appendSlide_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(swiper), 8718 prependSlide: _methods_prependSlide_js__WEBPACK_IMPORTED_MODULE_1__["default"].bind(swiper), 8719 addSlide: _methods_addSlide_js__WEBPACK_IMPORTED_MODULE_2__["default"].bind(swiper), 8720 removeSlide: _methods_removeSlide_js__WEBPACK_IMPORTED_MODULE_3__["default"].bind(swiper), 8721 removeAllSlides: _methods_removeAllSlides_js__WEBPACK_IMPORTED_MODULE_4__["default"].bind(swiper) 8722 }); 8723} 8724 8725/***/ }), 8726
vendor: 2,091 bytes, lines 8727-8792
8727/***/ "./node_modules/swiper/modules/manipulation/methods/addSlide.js": 8728/*!**********************************************************************!*\ 8729 !*** ./node_modules/swiper/modules/manipulation/methods/addSlide.js ***! 8730 \**********************************************************************/ 8731/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 8732 8733__webpack_require__.r(__webpack_exports__); 8734/* harmony export */ __webpack_require__.d(__webpack_exports__, { 8735/* harmony export */ "default": function() { return /* binding */ addSlide; } 8736/* harmony export */ }); 8737function addSlide(index, slides) { 8738 const swiper = this; 8739 const { 8740 params, 8741 activeIndex, 8742 slidesEl 8743 } = swiper; 8744 let activeIndexBuffer = activeIndex; 8745 if (params.loop) { 8746 activeIndexBuffer -= swiper.loopedSlides; 8747 swiper.loopDestroy(); 8748 swiper.recalcSlides(); 8749 } 8750 const baseLength = swiper.slides.length; 8751 if (index <= 0) { 8752 swiper.prependSlide(slides); 8753 return; 8754 } 8755 if (index >= baseLength) { 8756 swiper.appendSlide(slides); 8757 return; 8758 } 8759 let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer; 8760 const slidesBuffer = []; 8761 for (let i = baseLength - 1; i >= index; i -= 1) { 8762 const currentSlide = swiper.slides[i]; 8763 currentSlide.remove(); 8764 slidesBuffer.unshift(currentSlide); 8765 } 8766 if (typeof slides === 'object' && 'length' in slides) { 8767 for (let i = 0; i < slides.length; i += 1) { 8768 if (slides[i]) slidesEl.append(slides[i]); 8769 } 8770 newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer; 8771 } else { 8772 slidesEl.append(slides); 8773 } 8774 for (let i = 0; i < slidesBuffer.length; i += 1) { 8775 slidesEl.append(slidesBuffer[i]); 8776 } 8777 swiper.recalcSlides(); 8778 if (params.loop) { 8779 swiper.loopCreate(); 8780 } 8781 if (!params.observer || swiper.isElement) { 8782 swiper.update(); 8783 } 8784 if (params.loop) { 8785 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 8786 } else { 8787 swiper.slideTo(newActiveIndex, 0, false); 8788 } 8789} 8790 8791/***/ }), 8792
vendor: 1,437 bytes, lines 8793-8839
8793/***/ "./node_modules/swiper/modules/manipulation/methods/appendSlide.js": 8794/*!*************************************************************************!*\ 8795 !*** ./node_modules/swiper/modules/manipulation/methods/appendSlide.js ***! 8796 \*************************************************************************/ 8797/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 8798 8799__webpack_require__.r(__webpack_exports__); 8800/* harmony export */ __webpack_require__.d(__webpack_exports__, { 8801/* harmony export */ "default": function() { return /* binding */ appendSlide; } 8802/* harmony export */ }); 8803function appendSlide(slides) { 8804 const swiper = this; 8805 const { 8806 params, 8807 slidesEl 8808 } = swiper; 8809 if (params.loop) { 8810 swiper.loopDestroy(); 8811 } 8812 const appendElement = slideEl => { 8813 if (typeof slideEl === 'string') { 8814 const tempDOM = document.createElement('div'); 8815 tempDOM.innerHTML = slideEl; 8816 slidesEl.append(tempDOM.children[0]); 8817 tempDOM.innerHTML = ''; 8818 } else { 8819 slidesEl.append(slideEl); 8820 } 8821 }; 8822 if (typeof slides === 'object' && 'length' in slides) { 8823 for (let i = 0; i < slides.length; i += 1) { 8824 if (slides[i]) appendElement(slides[i]); 8825 } 8826 } else { 8827 appendElement(slides); 8828 } 8829 swiper.recalcSlides(); 8830 if (params.loop) { 8831 swiper.loopCreate(); 8832 } 8833 if (!params.observer || swiper.isElement) { 8834 swiper.update(); 8835 } 8836} 8837 8838/***/ }), 8839
vendor: 1,599 bytes, lines 8840-8890
8840/***/ "./node_modules/swiper/modules/manipulation/methods/prependSlide.js": 8841/*!**************************************************************************!*\ 8842 !*** ./node_modules/swiper/modules/manipulation/methods/prependSlide.js ***! 8843 \**************************************************************************/ 8844/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 8845 8846__webpack_require__.r(__webpack_exports__); 8847/* harmony export */ __webpack_require__.d(__webpack_exports__, { 8848/* harmony export */ "default": function() { return /* binding */ prependSlide; } 8849/* harmony export */ }); 8850function prependSlide(slides) { 8851 const swiper = this; 8852 const { 8853 params, 8854 activeIndex, 8855 slidesEl 8856 } = swiper; 8857 if (params.loop) { 8858 swiper.loopDestroy(); 8859 } 8860 let newActiveIndex = activeIndex + 1; 8861 const prependElement = slideEl => { 8862 if (typeof slideEl === 'string') { 8863 const tempDOM = document.createElement('div'); 8864 tempDOM.innerHTML = slideEl; 8865 slidesEl.prepend(tempDOM.children[0]); 8866 tempDOM.innerHTML = ''; 8867 } else { 8868 slidesEl.prepend(slideEl); 8869 } 8870 }; 8871 if (typeof slides === 'object' && 'length' in slides) { 8872 for (let i = 0; i < slides.length; i += 1) { 8873 if (slides[i]) prependElement(slides[i]); 8874 } 8875 newActiveIndex = activeIndex + slides.length; 8876 } else { 8877 prependElement(slides); 8878 } 8879 swiper.recalcSlides(); 8880 if (params.loop) { 8881 swiper.loopCreate(); 8882 } 8883 if (!params.observer || swiper.isElement) { 8884 swiper.update(); 8885 } 8886 swiper.slideTo(newActiveIndex, 0, false); 8887} 8888 8889/***/ }), 8890
vendor: 863 bytes, lines 8891-8911
8891/***/ "./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js": 8892/*!*****************************************************************************!*\ 8893 !*** ./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js ***! 8894 \*****************************************************************************/ 8895/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 8896 8897__webpack_require__.r(__webpack_exports__); 8898/* harmony export */ __webpack_require__.d(__webpack_exports__, { 8899/* harmony export */ "default": function() { return /* binding */ removeAllSlides; } 8900/* harmony export */ }); 8901function removeAllSlides() { 8902 const swiper = this; 8903 const slidesIndexes = []; 8904 for (let i = 0; i < swiper.slides.length; i += 1) { 8905 slidesIndexes.push(i); 8906 } 8907 swiper.removeSlide(slidesIndexes); 8908} 8909 8910/***/ }), 8911
vendor: 1,853 bytes, lines 8912-8963
8912/***/ "./node_modules/swiper/modules/manipulation/methods/removeSlide.js": 8913/*!*************************************************************************!*\ 8914 !*** ./node_modules/swiper/modules/manipulation/methods/removeSlide.js ***! 8915 \*************************************************************************/ 8916/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 8917 8918__webpack_require__.r(__webpack_exports__); 8919/* harmony export */ __webpack_require__.d(__webpack_exports__, { 8920/* harmony export */ "default": function() { return /* binding */ removeSlide; } 8921/* harmony export */ }); 8922function removeSlide(slidesIndexes) { 8923 const swiper = this; 8924 const { 8925 params, 8926 activeIndex 8927 } = swiper; 8928 let activeIndexBuffer = activeIndex; 8929 if (params.loop) { 8930 activeIndexBuffer -= swiper.loopedSlides; 8931 swiper.loopDestroy(); 8932 } 8933 let newActiveIndex = activeIndexBuffer; 8934 let indexToRemove; 8935 if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) { 8936 for (let i = 0; i < slidesIndexes.length; i += 1) { 8937 indexToRemove = slidesIndexes[i]; 8938 if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove(); 8939 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 8940 } 8941 newActiveIndex = Math.max(newActiveIndex, 0); 8942 } else { 8943 indexToRemove = slidesIndexes; 8944 if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove(); 8945 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 8946 newActiveIndex = Math.max(newActiveIndex, 0); 8947 } 8948 swiper.recalcSlides(); 8949 if (params.loop) { 8950 swiper.loopCreate(); 8951 } 8952 if (!params.observer || swiper.isElement) { 8953 swiper.update(); 8954 } 8955 if (params.loop) { 8956 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 8957 } else { 8958 swiper.slideTo(newActiveIndex, 0, false); 8959 } 8960} 8961 8962/***/ }), 8963
vendor: 15,819 bytes, lines 8964-9365
8964/***/ "./node_modules/swiper/modules/mousewheel/mousewheel.js": 8965/*!**************************************************************!*\ 8966 !*** ./node_modules/swiper/modules/mousewheel/mousewheel.js ***! 8967 \**************************************************************/ 8968/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 8969 8970__webpack_require__.r(__webpack_exports__); 8971/* harmony export */ __webpack_require__.d(__webpack_exports__, { 8972/* harmony export */ "default": function() { return /* binding */ Mousewheel; } 8973/* harmony export */ }); 8974/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 8975/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 8976/* eslint-disable consistent-return */ 8977 8978 8979function Mousewheel({ 8980 swiper, 8981 extendParams, 8982 on, 8983 emit 8984}) { 8985 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 8986 extendParams({ 8987 mousewheel: { 8988 enabled: false, 8989 releaseOnEdges: false, 8990 invert: false, 8991 forceToAxis: false, 8992 sensitivity: 1, 8993 eventsTarget: 'container', 8994 thresholdDelta: null, 8995 thresholdTime: null, 8996 noMousewheelClass: 'swiper-no-mousewheel' 8997 } 8998 }); 8999 swiper.mousewheel = { 9000 enabled: false 9001 }; 9002 let timeout; 9003 let lastScrollTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)(); 9004 let lastEventBeforeSnap; 9005 const recentWheelEvents = []; 9006 function normalize(e) { 9007 // Reasonable defaults 9008 const PIXEL_STEP = 10; 9009 const LINE_HEIGHT = 40; 9010 const PAGE_HEIGHT = 800; 9011 let sX = 0; 9012 let sY = 0; // spinX, spinY 9013 let pX = 0; 9014 let pY = 0; // pixelX, pixelY 9015 9016 // Legacy 9017 if ('detail' in e) { 9018 sY = e.detail; 9019 } 9020 if ('wheelDelta' in e) { 9021 sY = -e.wheelDelta / 120; 9022 } 9023 if ('wheelDeltaY' in e) { 9024 sY = -e.wheelDeltaY / 120; 9025 } 9026 if ('wheelDeltaX' in e) { 9027 sX = -e.wheelDeltaX / 120; 9028 } 9029 9030 // side scrolling on FF with DOMMouseScroll 9031 if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) { 9032 sX = sY; 9033 sY = 0; 9034 } 9035 pX = sX * PIXEL_STEP; 9036 pY = sY * PIXEL_STEP; 9037 if ('deltaY' in e) { 9038 pY = e.deltaY; 9039 } 9040 if ('deltaX' in e) { 9041 pX = e.deltaX; 9042 } 9043 if (e.shiftKey && !pX) { 9044 // if user scrolls with shift he wants horizontal scroll 9045 pX = pY; 9046 pY = 0; 9047 } 9048 if ((pX || pY) && e.deltaMode) { 9049 if (e.deltaMode === 1) { 9050 // delta in LINE units 9051 pX *= LINE_HEIGHT; 9052 pY *= LINE_HEIGHT; 9053 } else { 9054 // delta in PAGE units 9055 pX *= PAGE_HEIGHT; 9056 pY *= PAGE_HEIGHT; 9057 } 9058 } 9059 9060 // Fall-back if spin cannot be determined 9061 if (pX && !sX) { 9062 sX = pX < 1 ? -1 : 1; 9063 } 9064 if (pY && !sY) { 9065 sY = pY < 1 ? -1 : 1; 9066 } 9067 return { 9068 spinX: sX, 9069 spinY: sY, 9070 pixelX: pX, 9071 pixelY: pY 9072 }; 9073 } 9074 function handleMouseEnter() { 9075 if (!swiper.enabled) return; 9076 swiper.mouseEntered = true; 9077 } 9078 function handleMouseLeave() { 9079 if (!swiper.enabled) return; 9080 swiper.mouseEntered = false; 9081 } 9082 function animateSlider(newEvent) { 9083 if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) { 9084 // Prevent if delta of wheel scroll delta is below configured threshold 9085 return false; 9086 } 9087 if (swiper.params.mousewheel.thresholdTime && (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)() - lastScrollTime < swiper.params.mousewheel.thresholdTime) { 9088 // Prevent if time between scrolls is below configured threshold 9089 return false; 9090 } 9091 9092 // If the movement is NOT big enough and 9093 // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider): 9094 // Don't go any further (avoid insignificant scroll movement). 9095 if (newEvent.delta >= 6 && (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)() - lastScrollTime < 60) { 9096 // Return false as a default 9097 return true; 9098 } 9099 // If user is scrolling towards the end: 9100 // If the slider hasn't hit the latest slide or 9101 // if the slider is a loop and 9102 // if the slider isn't moving right now: 9103 // Go to next slide and 9104 // emit a scroll event. 9105 // Else (the user is scrolling towards the beginning) and 9106 // if the slider hasn't hit the first slide or 9107 // if the slider is a loop and 9108 // if the slider isn't moving right now: 9109 // Go to prev slide and 9110 // emit a scroll event. 9111 if (newEvent.direction < 0) { 9112 if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) { 9113 swiper.slideNext(); 9114 emit('scroll', newEvent.raw); 9115 } 9116 } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) { 9117 swiper.slidePrev(); 9118 emit('scroll', newEvent.raw); 9119 } 9120 // If you got here is because an animation has been triggered so store the current time 9121 lastScrollTime = new window.Date().getTime(); 9122 // Return false as a default 9123 return false; 9124 } 9125 function releaseScroll(newEvent) { 9126 const params = swiper.params.mousewheel; 9127 if (newEvent.direction < 0) { 9128 if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) { 9129 // Return true to animate scroll on edges 9130 return true; 9131 } 9132 } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) { 9133 // Return true to animate scroll on edges 9134 return true; 9135 } 9136 return false; 9137 } 9138 function handle(event) { 9139 let e = event; 9140 let disableParentSwiper = true; 9141 if (!swiper.enabled) return; 9142 9143 // Ignore event if the target or its parents have the swiper-no-mousewheel class 9144 if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return; 9145 const params = swiper.params.mousewheel; 9146 if (swiper.params.cssMode) { 9147 e.preventDefault(); 9148 } 9149 let targetEl = swiper.el; 9150 if (swiper.params.mousewheel.eventsTarget !== 'container') { 9151 targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget); 9152 } 9153 const targetElContainsTarget = targetEl && targetEl.contains(e.target); 9154 if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true; 9155 if (e.originalEvent) e = e.originalEvent; // jquery fix 9156 let delta = 0; 9157 const rtlFactor = swiper.rtlTranslate ? -1 : 1; 9158 const data = normalize(e); 9159 if (params.forceToAxis) { 9160 if (swiper.isHorizontal()) { 9161 if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true; 9162 } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true; 9163 } else { 9164 delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY; 9165 } 9166 if (delta === 0) return true; 9167 if (params.invert) delta = -delta; 9168 9169 // Get the scroll positions 9170 let positions = swiper.getTranslate() + delta * params.sensitivity; 9171 if (positions >= swiper.minTranslate()) positions = swiper.minTranslate(); 9172 if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); 9173 9174 // When loop is true: 9175 // the disableParentSwiper will be true. 9176 // When loop is false: 9177 // if the scroll positions is not on edge, 9178 // then the disableParentSwiper will be true. 9179 // if the scroll on edge positions, 9180 // then the disableParentSwiper will be false. 9181 disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate()); 9182 if (disableParentSwiper && swiper.params.nested) e.stopPropagation(); 9183 if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) { 9184 // Register the new event in a variable which stores the relevant data 9185 const newEvent = { 9186 time: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)(), 9187 delta: Math.abs(delta), 9188 direction: Math.sign(delta), 9189 raw: event 9190 }; 9191 9192 // Keep the most recent events 9193 if (recentWheelEvents.length >= 2) { 9194 recentWheelEvents.shift(); // only store the last N events 9195 } 9196 9197 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 9198 recentWheelEvents.push(newEvent); 9199 9200 // If there is at least one previous recorded event: 9201 // If direction has changed or 9202 // if the scroll is quicker than the previous one: 9203 // Animate the slider. 9204 // Else (this is the first time the wheel is moved): 9205 // Animate the slider. 9206 if (prevEvent) { 9207 if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) { 9208 animateSlider(newEvent); 9209 } 9210 } else { 9211 animateSlider(newEvent); 9212 } 9213 9214 // If it's time to release the scroll: 9215 // Return now so you don't hit the preventDefault. 9216 if (releaseScroll(newEvent)) { 9217 return true; 9218 } 9219 } else { 9220 // Freemode or scrollContainer: 9221 9222 // If we recently snapped after a momentum scroll, then ignore wheel events 9223 // to give time for the deceleration to finish. Stop ignoring after 500 msecs 9224 // or if it's a new scroll (larger delta or inverse sign as last event before 9225 // an end-of-momentum snap). 9226 const newEvent = { 9227 time: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.now)(), 9228 delta: Math.abs(delta), 9229 direction: Math.sign(delta) 9230 }; 9231 const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction; 9232 if (!ignoreWheelEvents) { 9233 lastEventBeforeSnap = undefined; 9234 let position = swiper.getTranslate() + delta * params.sensitivity; 9235 const wasBeginning = swiper.isBeginning; 9236 const wasEnd = swiper.isEnd; 9237 if (position >= swiper.minTranslate()) position = swiper.minTranslate(); 9238 if (position <= swiper.maxTranslate()) position = swiper.maxTranslate(); 9239 swiper.setTransition(0); 9240 swiper.setTranslate(position); 9241 swiper.updateProgress(); 9242 swiper.updateActiveIndex(); 9243 swiper.updateSlidesClasses(); 9244 if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) { 9245 swiper.updateSlidesClasses(); 9246 } 9247 if (swiper.params.loop) { 9248 swiper.loopFix({ 9249 direction: newEvent.direction < 0 ? 'next' : 'prev', 9250 byMousewheel: true 9251 }); 9252 } 9253 if (swiper.params.freeMode.sticky) { 9254 // When wheel scrolling starts with sticky (aka snap) enabled, then detect 9255 // the end of a momentum scroll by storing recent (N=15?) wheel events. 9256 // 1. do all N events have decreasing or same (absolute value) delta? 9257 // 2. did all N events arrive in the last M (M=500?) msecs? 9258 // 3. does the earliest event have an (absolute value) delta that's 9259 // at least P (P=1?) larger than the most recent event's delta? 9260 // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels? 9261 // If 1-4 are "yes" then we're near the end of a momentum scroll deceleration. 9262 // Snap immediately and ignore remaining wheel events in this scroll. 9263 // See comment above for "remaining wheel events in this scroll" determination. 9264 // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event. 9265 clearTimeout(timeout); 9266 timeout = undefined; 9267 if (recentWheelEvents.length >= 15) { 9268 recentWheelEvents.shift(); // only store the last N events 9269 } 9270 9271 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 9272 const firstEvent = recentWheelEvents[0]; 9273 recentWheelEvents.push(newEvent); 9274 if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) { 9275 // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log. 9276 recentWheelEvents.splice(0); 9277 } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) { 9278 // We're at the end of the deceleration of a momentum scroll, so there's no need 9279 // to wait for more events. Snap ASAP on the next tick. 9280 // Also, because there's some remaining momentum we'll bias the snap in the 9281 // direction of the ongoing scroll because it's better UX for the scroll to snap 9282 // in the same direction as the scroll instead of reversing to snap. Therefore, 9283 // if it's already scrolled more than 20% in the current direction, keep going. 9284 const snapToThreshold = delta > 0 ? 0.8 : 0.2; 9285 lastEventBeforeSnap = newEvent; 9286 recentWheelEvents.splice(0); 9287 timeout = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.nextTick)(() => { 9288 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 9289 }, 0); // no delay; move on next tick 9290 } 9291 9292 if (!timeout) { 9293 // if we get here, then we haven't detected the end of a momentum scroll, so 9294 // we'll consider a scroll "complete" when there haven't been any wheel events 9295 // for 500ms. 9296 timeout = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.nextTick)(() => { 9297 const snapToThreshold = 0.5; 9298 lastEventBeforeSnap = newEvent; 9299 recentWheelEvents.splice(0); 9300 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 9301 }, 500); 9302 } 9303 } 9304 9305 // Emit event 9306 if (!ignoreWheelEvents) emit('scroll', e); 9307 9308 // Stop autoplay 9309 if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); 9310 // Return page scroll on edge positions 9311 if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true; 9312 } 9313 } 9314 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 9315 return false; 9316 } 9317 function events(method) { 9318 let targetEl = swiper.el; 9319 if (swiper.params.mousewheel.eventsTarget !== 'container') { 9320 targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget); 9321 } 9322 targetEl[method]('mouseenter', handleMouseEnter); 9323 targetEl[method]('mouseleave', handleMouseLeave); 9324 targetEl[method]('wheel', handle); 9325 } 9326 function enable() { 9327 if (swiper.params.cssMode) { 9328 swiper.wrapperEl.removeEventListener('wheel', handle); 9329 return true; 9330 } 9331 if (swiper.mousewheel.enabled) return false; 9332 events('addEventListener'); 9333 swiper.mousewheel.enabled = true; 9334 return true; 9335 } 9336 function disable() { 9337 if (swiper.params.cssMode) { 9338 swiper.wrapperEl.addEventListener(event, handle); 9339 return true; 9340 } 9341 if (!swiper.mousewheel.enabled) return false; 9342 events('removeEventListener'); 9343 swiper.mousewheel.enabled = false; 9344 return true; 9345 } 9346 on('init', () => { 9347 if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) { 9348 disable(); 9349 } 9350 if (swiper.params.mousewheel.enabled) enable(); 9351 }); 9352 on('destroy', () => { 9353 if (swiper.params.cssMode) { 9354 enable(); 9355 } 9356 if (swiper.mousewheel.enabled) disable(); 9357 }); 9358 Object.assign(swiper.mousewheel, { 9359 enable, 9360 disable 9361 }); 9362} 9363 9364/***/ }), 9365
vendor: 6,665 bytes, lines 9366-9565
9366/***/ "./node_modules/swiper/modules/navigation/navigation.js": 9367/*!**************************************************************!*\ 9368 !*** ./node_modules/swiper/modules/navigation/navigation.js ***! 9369 \**************************************************************/ 9370/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 9371 9372__webpack_require__.r(__webpack_exports__); 9373/* harmony export */ __webpack_require__.d(__webpack_exports__, { 9374/* harmony export */ "default": function() { return /* binding */ Navigation; } 9375/* harmony export */ }); 9376/* harmony import */ var _shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-element-if-not-defined.js */ "./node_modules/swiper/shared/create-element-if-not-defined.js"); 9377 9378function Navigation({ 9379 swiper, 9380 extendParams, 9381 on, 9382 emit 9383}) { 9384 extendParams({ 9385 navigation: { 9386 nextEl: null, 9387 prevEl: null, 9388 hideOnClick: false, 9389 disabledClass: 'swiper-button-disabled', 9390 hiddenClass: 'swiper-button-hidden', 9391 lockClass: 'swiper-button-lock', 9392 navigationDisabledClass: 'swiper-navigation-disabled' 9393 } 9394 }); 9395 swiper.navigation = { 9396 nextEl: null, 9397 prevEl: null 9398 }; 9399 const makeElementsArray = el => { 9400 if (!Array.isArray(el)) el = [el].filter(e => !!e); 9401 return el; 9402 }; 9403 function getEl(el) { 9404 let res; 9405 if (el && typeof el === 'string' && swiper.isElement) { 9406 res = swiper.el.shadowRoot.querySelector(el); 9407 if (res) return res; 9408 } 9409 if (el) { 9410 if (typeof el === 'string') res = [...document.querySelectorAll(el)]; 9411 if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) { 9412 res = swiper.el.querySelector(el); 9413 } 9414 } 9415 if (el && !res) return el; 9416 // if (Array.isArray(res) && res.length === 1) res = res[0]; 9417 return res; 9418 } 9419 function toggleEl(el, disabled) { 9420 const params = swiper.params.navigation; 9421 el = makeElementsArray(el); 9422 el.forEach(subEl => { 9423 if (subEl) { 9424 subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' ')); 9425 if (subEl.tagName === 'BUTTON') subEl.disabled = disabled; 9426 if (swiper.params.watchOverflow && swiper.enabled) { 9427 subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass); 9428 } 9429 } 9430 }); 9431 } 9432 function update() { 9433 // Update Navigation Buttons 9434 const { 9435 nextEl, 9436 prevEl 9437 } = swiper.navigation; 9438 if (swiper.params.loop) { 9439 toggleEl(prevEl, false); 9440 toggleEl(nextEl, false); 9441 return; 9442 } 9443 toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind); 9444 toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind); 9445 } 9446 function onPrevClick(e) { 9447 e.preventDefault(); 9448 if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return; 9449 swiper.slidePrev(); 9450 emit('navigationPrev'); 9451 } 9452 function onNextClick(e) { 9453 e.preventDefault(); 9454 if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return; 9455 swiper.slideNext(); 9456 emit('navigationNext'); 9457 } 9458 function init() { 9459 const params = swiper.params.navigation; 9460 swiper.params.navigation = (0,_shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_0__["default"])(swiper, swiper.originalParams.navigation, swiper.params.navigation, { 9461 nextEl: 'swiper-button-next', 9462 prevEl: 'swiper-button-prev' 9463 }); 9464 if (!(params.nextEl || params.prevEl)) return; 9465 let nextEl = getEl(params.nextEl); 9466 let prevEl = getEl(params.prevEl); 9467 Object.assign(swiper.navigation, { 9468 nextEl, 9469 prevEl 9470 }); 9471 nextEl = makeElementsArray(nextEl); 9472 prevEl = makeElementsArray(prevEl); 9473 const initButton = (el, dir) => { 9474 if (el) { 9475 el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick); 9476 } 9477 if (!swiper.enabled && el) { 9478 el.classList.add(...params.lockClass.split(' ')); 9479 } 9480 }; 9481 nextEl.forEach(el => initButton(el, 'next')); 9482 prevEl.forEach(el => initButton(el, 'prev')); 9483 } 9484 function destroy() { 9485 let { 9486 nextEl, 9487 prevEl 9488 } = swiper.navigation; 9489 nextEl = makeElementsArray(nextEl); 9490 prevEl = makeElementsArray(prevEl); 9491 const destroyButton = (el, dir) => { 9492 el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick); 9493 el.classList.remove(...swiper.params.navigation.disabledClass.split(' ')); 9494 }; 9495 nextEl.forEach(el => destroyButton(el, 'next')); 9496 prevEl.forEach(el => destroyButton(el, 'prev')); 9497 } 9498 on('init', () => { 9499 if (swiper.params.navigation.enabled === false) { 9500 // eslint-disable-next-line 9501 disable(); 9502 } else { 9503 init(); 9504 update(); 9505 } 9506 }); 9507 on('toEdge fromEdge lock unlock', () => { 9508 update(); 9509 }); 9510 on('destroy', () => { 9511 destroy(); 9512 }); 9513 on('enable disable', () => { 9514 let { 9515 nextEl, 9516 prevEl 9517 } = swiper.navigation; 9518 nextEl = makeElementsArray(nextEl); 9519 prevEl = makeElementsArray(prevEl); 9520 [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.navigation.lockClass)); 9521 }); 9522 on('click', (_s, e) => { 9523 let { 9524 nextEl, 9525 prevEl 9526 } = swiper.navigation; 9527 nextEl = makeElementsArray(nextEl); 9528 prevEl = makeElementsArray(prevEl); 9529 const targetEl = e.target; 9530 if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) { 9531 if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return; 9532 let isHidden; 9533 if (nextEl.length) { 9534 isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass); 9535 } else if (prevEl.length) { 9536 isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass); 9537 } 9538 if (isHidden === true) { 9539 emit('navigationShow'); 9540 } else { 9541 emit('navigationHide'); 9542 } 9543 [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass)); 9544 } 9545 }); 9546 const enable = () => { 9547 swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' ')); 9548 init(); 9549 update(); 9550 }; 9551 const disable = () => { 9552 swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' ')); 9553 destroy(); 9554 }; 9555 Object.assign(swiper.navigation, { 9556 enable, 9557 disable, 9558 update, 9559 init, 9560 destroy 9561 }); 9562} 9563 9564/***/ }), 9565
vendor: 18,303 bytes, lines 9566-10027
9566/***/ "./node_modules/swiper/modules/pagination/pagination.js": 9567/*!**************************************************************!*\ 9568 !*** ./node_modules/swiper/modules/pagination/pagination.js ***! 9569 \**************************************************************/ 9570/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 9571 9572__webpack_require__.r(__webpack_exports__); 9573/* harmony export */ __webpack_require__.d(__webpack_exports__, { 9574/* harmony export */ "default": function() { return /* binding */ Pagination; } 9575/* harmony export */ }); 9576/* harmony import */ var _shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/classes-to-selector.js */ "./node_modules/swiper/shared/classes-to-selector.js"); 9577/* harmony import */ var _shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/create-element-if-not-defined.js */ "./node_modules/swiper/shared/create-element-if-not-defined.js"); 9578/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 9579 9580 9581 9582function Pagination({ 9583 swiper, 9584 extendParams, 9585 on, 9586 emit 9587}) { 9588 const pfx = 'swiper-pagination'; 9589 extendParams({ 9590 pagination: { 9591 el: null, 9592 bulletElement: 'span', 9593 clickable: false, 9594 hideOnClick: false, 9595 renderBullet: null, 9596 renderProgressbar: null, 9597 renderFraction: null, 9598 renderCustom: null, 9599 progressbarOpposite: false, 9600 type: 'bullets', 9601 // 'bullets' or 'progressbar' or 'fraction' or 'custom' 9602 dynamicBullets: false, 9603 dynamicMainBullets: 1, 9604 formatFractionCurrent: number => number, 9605 formatFractionTotal: number => number, 9606 bulletClass: `${pfx}-bullet`, 9607 bulletActiveClass: `${pfx}-bullet-active`, 9608 modifierClass: `${pfx}-`, 9609 currentClass: `${pfx}-current`, 9610 totalClass: `${pfx}-total`, 9611 hiddenClass: `${pfx}-hidden`, 9612 progressbarFillClass: `${pfx}-progressbar-fill`, 9613 progressbarOppositeClass: `${pfx}-progressbar-opposite`, 9614 clickableClass: `${pfx}-clickable`, 9615 lockClass: `${pfx}-lock`, 9616 horizontalClass: `${pfx}-horizontal`, 9617 verticalClass: `${pfx}-vertical`, 9618 paginationDisabledClass: `${pfx}-disabled` 9619 } 9620 }); 9621 swiper.pagination = { 9622 el: null, 9623 bullets: [] 9624 }; 9625 let bulletSize; 9626 let dynamicBulletIndex = 0; 9627 const makeElementsArray = el => { 9628 if (!Array.isArray(el)) el = [el].filter(e => !!e); 9629 return el; 9630 }; 9631 function isPaginationDisabled() { 9632 return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0; 9633 } 9634 function setSideBullets(bulletEl, position) { 9635 const { 9636 bulletActiveClass 9637 } = swiper.params.pagination; 9638 if (!bulletEl) return; 9639 bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`]; 9640 if (bulletEl) { 9641 bulletEl.classList.add(`${bulletActiveClass}-${position}`); 9642 bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`]; 9643 if (bulletEl) { 9644 bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`); 9645 } 9646 } 9647 } 9648 function onBulletClick(e) { 9649 const bulletEl = e.target.closest((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__["default"])(swiper.params.pagination.bulletClass)); 9650 if (!bulletEl) { 9651 return; 9652 } 9653 e.preventDefault(); 9654 const index = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.elementIndex)(bulletEl) * swiper.params.slidesPerGroup; 9655 if (swiper.params.loop) { 9656 if (swiper.realIndex === index) return; 9657 const newSlideIndex = swiper.getSlideIndexByData(index); 9658 const currentSlideIndex = swiper.getSlideIndexByData(swiper.realIndex); 9659 if (newSlideIndex > swiper.slides.length - swiper.loopedSlides) { 9660 swiper.loopFix({ 9661 direction: newSlideIndex > currentSlideIndex ? 'next' : 'prev', 9662 activeSlideIndex: newSlideIndex, 9663 slideTo: false 9664 }); 9665 } 9666 swiper.slideToLoop(index); 9667 } else { 9668 swiper.slideTo(index); 9669 } 9670 } 9671 function update() { 9672 // Render || Update Pagination bullets/items 9673 const rtl = swiper.rtl; 9674 const params = swiper.params.pagination; 9675 if (isPaginationDisabled()) return; 9676 let el = swiper.pagination.el; 9677 el = makeElementsArray(el); 9678 // Current/Total 9679 let current; 9680 let previousIndex; 9681 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 9682 const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 9683 if (swiper.params.loop) { 9684 previousIndex = swiper.previousRealIndex || 0; 9685 current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex; 9686 } else if (typeof swiper.snapIndex !== 'undefined') { 9687 current = swiper.snapIndex; 9688 previousIndex = swiper.previousSnapIndex; 9689 } else { 9690 previousIndex = swiper.previousIndex || 0; 9691 current = swiper.activeIndex || 0; 9692 } 9693 // Types 9694 if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) { 9695 const bullets = swiper.pagination.bullets; 9696 let firstIndex; 9697 let lastIndex; 9698 let midIndex; 9699 if (params.dynamicBullets) { 9700 bulletSize = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.elementOuterSize)(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true); 9701 el.forEach(subEl => { 9702 subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`; 9703 }); 9704 if (params.dynamicMainBullets > 1 && previousIndex !== undefined) { 9705 dynamicBulletIndex += current - (previousIndex || 0); 9706 if (dynamicBulletIndex > params.dynamicMainBullets - 1) { 9707 dynamicBulletIndex = params.dynamicMainBullets - 1; 9708 } else if (dynamicBulletIndex < 0) { 9709 dynamicBulletIndex = 0; 9710 } 9711 } 9712 firstIndex = Math.max(current - dynamicBulletIndex, 0); 9713 lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1); 9714 midIndex = (lastIndex + firstIndex) / 2; 9715 } 9716 bullets.forEach(bulletEl => { 9717 const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat(); 9718 bulletEl.classList.remove(...classesToRemove); 9719 }); 9720 if (el.length > 1) { 9721 bullets.forEach(bullet => { 9722 const bulletIndex = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.elementIndex)(bullet); 9723 if (bulletIndex === current) { 9724 bullet.classList.add(...params.bulletActiveClass.split(' ')); 9725 } 9726 if (params.dynamicBullets) { 9727 if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) { 9728 bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' ')); 9729 } 9730 if (bulletIndex === firstIndex) { 9731 setSideBullets(bullet, 'prev'); 9732 } 9733 if (bulletIndex === lastIndex) { 9734 setSideBullets(bullet, 'next'); 9735 } 9736 } 9737 }); 9738 } else { 9739 const bullet = bullets[current]; 9740 if (bullet) { 9741 bullet.classList.add(...params.bulletActiveClass.split(' ')); 9742 } 9743 if (params.dynamicBullets) { 9744 const firstDisplayedBullet = bullets[firstIndex]; 9745 const lastDisplayedBullet = bullets[lastIndex]; 9746 for (let i = firstIndex; i <= lastIndex; i += 1) { 9747 if (bullets[i]) { 9748 bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' ')); 9749 } 9750 } 9751 setSideBullets(firstDisplayedBullet, 'prev'); 9752 setSideBullets(lastDisplayedBullet, 'next'); 9753 } 9754 } 9755 if (params.dynamicBullets) { 9756 const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4); 9757 const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize; 9758 const offsetProp = rtl ? 'right' : 'left'; 9759 bullets.forEach(bullet => { 9760 bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`; 9761 }); 9762 } 9763 } 9764 el.forEach((subEl, subElIndex) => { 9765 if (params.type === 'fraction') { 9766 subEl.querySelectorAll((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params.currentClass)).forEach(fractionEl => { 9767 fractionEl.textContent = params.formatFractionCurrent(current + 1); 9768 }); 9769 subEl.querySelectorAll((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params.totalClass)).forEach(totalEl => { 9770 totalEl.textContent = params.formatFractionTotal(total); 9771 }); 9772 } 9773 if (params.type === 'progressbar') { 9774 let progressbarDirection; 9775 if (params.progressbarOpposite) { 9776 progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal'; 9777 } else { 9778 progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical'; 9779 } 9780 const scale = (current + 1) / total; 9781 let scaleX = 1; 9782 let scaleY = 1; 9783 if (progressbarDirection === 'horizontal') { 9784 scaleX = scale; 9785 } else { 9786 scaleY = scale; 9787 } 9788 subEl.querySelectorAll((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params.progressbarFillClass)).forEach(progressEl => { 9789 progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`; 9790 progressEl.style.transitionDuration = `${swiper.params.speed}ms`; 9791 }); 9792 } 9793 if (params.type === 'custom' && params.renderCustom) { 9794 subEl.innerHTML = params.renderCustom(swiper, current + 1, total); 9795 if (subElIndex === 0) emit('paginationRender', subEl); 9796 } else { 9797 if (subElIndex === 0) emit('paginationRender', subEl); 9798 emit('paginationUpdate', subEl); 9799 } 9800 if (swiper.params.watchOverflow && swiper.enabled) { 9801 subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass); 9802 } 9803 }); 9804 } 9805 function render() { 9806 // Render Container 9807 const params = swiper.params.pagination; 9808 if (isPaginationDisabled()) return; 9809 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 9810 let el = swiper.pagination.el; 9811 el = makeElementsArray(el); 9812 let paginationHTML = ''; 9813 if (params.type === 'bullets') { 9814 let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 9815 if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) { 9816 numberOfBullets = slidesLength; 9817 } 9818 for (let i = 0; i < numberOfBullets; i += 1) { 9819 if (params.renderBullet) { 9820 paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass); 9821 } else { 9822 paginationHTML += `<${params.bulletElement} class="${params.bulletClass}"></${params.bulletElement}>`; 9823 } 9824 } 9825 } 9826 if (params.type === 'fraction') { 9827 if (params.renderFraction) { 9828 paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass); 9829 } else { 9830 paginationHTML = `<span class="${params.currentClass}"></span>` + ' / ' + `<span class="${params.totalClass}"></span>`; 9831 } 9832 } 9833 if (params.type === 'progressbar') { 9834 if (params.renderProgressbar) { 9835 paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass); 9836 } else { 9837 paginationHTML = `<span class="${params.progressbarFillClass}"></span>`; 9838 } 9839 } 9840 swiper.pagination.bullets = []; 9841 el.forEach(subEl => { 9842 if (params.type !== 'custom') { 9843 subEl.innerHTML = paginationHTML || ''; 9844 } 9845 if (params.type === 'bullets') { 9846 swiper.pagination.bullets.push(...subEl.querySelectorAll((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params.bulletClass))); 9847 } 9848 }); 9849 if (params.type !== 'custom') { 9850 emit('paginationRender', el[0]); 9851 } 9852 } 9853 function init() { 9854 swiper.params.pagination = (0,_shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_1__["default"])(swiper, swiper.originalParams.pagination, swiper.params.pagination, { 9855 el: 'swiper-pagination' 9856 }); 9857 const params = swiper.params.pagination; 9858 if (!params.el) return; 9859 let el; 9860 if (typeof params.el === 'string' && swiper.isElement) { 9861 el = swiper.el.shadowRoot.querySelector(params.el); 9862 } 9863 if (!el && typeof params.el === 'string') { 9864 el = [...document.querySelectorAll(params.el)]; 9865 } 9866 if (!el) { 9867 el = params.el; 9868 } 9869 if (!el || el.length === 0) return; 9870 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) { 9871 el = [...swiper.el.querySelectorAll(params.el)]; 9872 // check if it belongs to another nested Swiper 9873 if (el.length > 1) { 9874 el = el.filter(subEl => { 9875 if ((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.elementParents)(subEl, '.swiper')[0] !== swiper.el) return false; 9876 return true; 9877 })[0]; 9878 } 9879 } 9880 if (Array.isArray(el) && el.length === 1) el = el[0]; 9881 Object.assign(swiper.pagination, { 9882 el 9883 }); 9884 el = makeElementsArray(el); 9885 el.forEach(subEl => { 9886 if (params.type === 'bullets' && params.clickable) { 9887 subEl.classList.add(params.clickableClass); 9888 } 9889 subEl.classList.add(params.modifierClass + params.type); 9890 subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 9891 if (params.type === 'bullets' && params.dynamicBullets) { 9892 subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`); 9893 dynamicBulletIndex = 0; 9894 if (params.dynamicMainBullets < 1) { 9895 params.dynamicMainBullets = 1; 9896 } 9897 } 9898 if (params.type === 'progressbar' && params.progressbarOpposite) { 9899 subEl.classList.add(params.progressbarOppositeClass); 9900 } 9901 if (params.clickable) { 9902 subEl.addEventListener('click', onBulletClick); 9903 } 9904 if (!swiper.enabled) { 9905 subEl.classList.add(params.lockClass); 9906 } 9907 }); 9908 } 9909 function destroy() { 9910 const params = swiper.params.pagination; 9911 if (isPaginationDisabled()) return; 9912 let el = swiper.pagination.el; 9913 if (el) { 9914 el = makeElementsArray(el); 9915 el.forEach(subEl => { 9916 subEl.classList.remove(params.hiddenClass); 9917 subEl.classList.remove(params.modifierClass + params.type); 9918 subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 9919 if (params.clickable) { 9920 subEl.removeEventListener('click', onBulletClick); 9921 } 9922 }); 9923 } 9924 if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' '))); 9925 } 9926 on('changeDirection', () => { 9927 if (!swiper.pagination || !swiper.pagination.el) return; 9928 const params = swiper.params.pagination; 9929 let { 9930 el 9931 } = swiper.pagination; 9932 el = makeElementsArray(el); 9933 el.forEach(subEl => { 9934 subEl.classList.remove(params.horizontalClass, params.verticalClass); 9935 subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 9936 }); 9937 }); 9938 on('init', () => { 9939 if (swiper.params.pagination.enabled === false) { 9940 // eslint-disable-next-line 9941 disable(); 9942 } else { 9943 init(); 9944 render(); 9945 update(); 9946 } 9947 }); 9948 on('activeIndexChange', () => { 9949 if (typeof swiper.snapIndex === 'undefined') { 9950 update(); 9951 } 9952 }); 9953 on('snapIndexChange', () => { 9954 update(); 9955 }); 9956 on('snapGridLengthChange', () => { 9957 render(); 9958 update(); 9959 }); 9960 on('destroy', () => { 9961 destroy(); 9962 }); 9963 on('enable disable', () => { 9964 let { 9965 el 9966 } = swiper.pagination; 9967 if (el) { 9968 el = makeElementsArray(el); 9969 el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass)); 9970 } 9971 }); 9972 on('lock unlock', () => { 9973 update(); 9974 }); 9975 on('click', (_s, e) => { 9976 const targetEl = e.target; 9977 let { 9978 el 9979 } = swiper.pagination; 9980 if (!Array.isArray(el)) el = [el].filter(element => !!element); 9981 if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) { 9982 if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return; 9983 const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass); 9984 if (isHidden === true) { 9985 emit('paginationShow'); 9986 } else { 9987 emit('paginationHide'); 9988 } 9989 el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass)); 9990 } 9991 }); 9992 const enable = () => { 9993 swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass); 9994 let { 9995 el 9996 } = swiper.pagination; 9997 if (el) { 9998 el = makeElementsArray(el); 9999 el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass)); 10000 } 10001 init(); 10002 render(); 10003 update(); 10004 }; 10005 const disable = () => { 10006 swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass); 10007 let { 10008 el 10009 } = swiper.pagination; 10010 if (el) { 10011 el = makeElementsArray(el); 10012 el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass)); 10013 } 10014 destroy(); 10015 }; 10016 Object.assign(swiper.pagination, { 10017 enable, 10018 disable, 10019 render, 10020 update, 10021 init, 10022 destroy 10023 }); 10024} 10025 10026/***/ }), 10027
vendor: 4,509 bytes, lines 10028-10147
10028/***/ "./node_modules/swiper/modules/parallax/parallax.js": 10029/*!**********************************************************!*\ 10030 !*** ./node_modules/swiper/modules/parallax/parallax.js ***! 10031 \**********************************************************/ 10032/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 10033 10034__webpack_require__.r(__webpack_exports__); 10035/* harmony export */ __webpack_require__.d(__webpack_exports__, { 10036/* harmony export */ "default": function() { return /* binding */ Parallax; } 10037/* harmony export */ }); 10038/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 10039 10040function Parallax({ 10041 swiper, 10042 extendParams, 10043 on 10044}) { 10045 extendParams({ 10046 parallax: { 10047 enabled: false 10048 } 10049 }); 10050 const setTransform = (el, progress) => { 10051 const { 10052 rtl 10053 } = swiper; 10054 const rtlFactor = rtl ? -1 : 1; 10055 const p = el.getAttribute('data-swiper-parallax') || '0'; 10056 let x = el.getAttribute('data-swiper-parallax-x'); 10057 let y = el.getAttribute('data-swiper-parallax-y'); 10058 const scale = el.getAttribute('data-swiper-parallax-scale'); 10059 const opacity = el.getAttribute('data-swiper-parallax-opacity'); 10060 const rotate = el.getAttribute('data-swiper-parallax-rotate'); 10061 if (x || y) { 10062 x = x || '0'; 10063 y = y || '0'; 10064 } else if (swiper.isHorizontal()) { 10065 x = p; 10066 y = '0'; 10067 } else { 10068 y = p; 10069 x = '0'; 10070 } 10071 if (x.indexOf('%') >= 0) { 10072 x = `${parseInt(x, 10) * progress * rtlFactor}%`; 10073 } else { 10074 x = `${x * progress * rtlFactor}px`; 10075 } 10076 if (y.indexOf('%') >= 0) { 10077 y = `${parseInt(y, 10) * progress}%`; 10078 } else { 10079 y = `${y * progress}px`; 10080 } 10081 if (typeof opacity !== 'undefined' && opacity !== null) { 10082 const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress)); 10083 el.style.opacity = currentOpacity; 10084 } 10085 let transform = `translate3d(${x}, ${y}, 0px)`; 10086 if (typeof scale !== 'undefined' && scale !== null) { 10087 const currentScale = scale - (scale - 1) * (1 - Math.abs(progress)); 10088 transform += ` scale(${currentScale})`; 10089 } 10090 if (rotate && typeof rotate !== 'undefined' && rotate !== null) { 10091 const currentRotate = rotate * progress * -1; 10092 transform += ` rotate(${currentRotate}deg)`; 10093 } 10094 el.style.transform = transform; 10095 }; 10096 const setTranslate = () => { 10097 const { 10098 el, 10099 slides, 10100 progress, 10101 snapGrid 10102 } = swiper; 10103 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(el, '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').forEach(subEl => { 10104 setTransform(subEl, progress); 10105 }); 10106 slides.forEach((slideEl, slideIndex) => { 10107 let slideProgress = slideEl.progress; 10108 if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') { 10109 slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1); 10110 } 10111 slideProgress = Math.min(Math.max(slideProgress, -1), 1); 10112 slideEl.querySelectorAll('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale], [data-swiper-parallax-rotate]').forEach(subEl => { 10113 setTransform(subEl, slideProgress); 10114 }); 10115 }); 10116 }; 10117 const setTransition = (duration = swiper.params.speed) => { 10118 const { 10119 el 10120 } = swiper; 10121 el.querySelectorAll('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').forEach(parallaxEl => { 10122 let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration; 10123 if (duration === 0) parallaxDuration = 0; 10124 parallaxEl.style.transitionDuration = `${parallaxDuration}ms`; 10125 }); 10126 }; 10127 on('beforeInit', () => { 10128 if (!swiper.params.parallax.enabled) return; 10129 swiper.params.watchSlidesProgress = true; 10130 swiper.originalParams.watchSlidesProgress = true; 10131 }); 10132 on('init', () => { 10133 if (!swiper.params.parallax.enabled) return; 10134 setTranslate(); 10135 }); 10136 on('setTranslate', () => { 10137 if (!swiper.params.parallax.enabled) return; 10138 setTranslate(); 10139 }); 10140 on('setTransition', (_swiper, duration) => { 10141 if (!swiper.params.parallax.enabled) return; 10142 setTransition(duration); 10143 }); 10144} 10145 10146/***/ }), 10147
vendor: 11,352 bytes, lines 10148-10511
10148/***/ "./node_modules/swiper/modules/scrollbar/scrollbar.js": 10149/*!************************************************************!*\ 10150 !*** ./node_modules/swiper/modules/scrollbar/scrollbar.js ***! 10151 \************************************************************/ 10152/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 10153 10154__webpack_require__.r(__webpack_exports__); 10155/* harmony export */ __webpack_require__.d(__webpack_exports__, { 10156/* harmony export */ "default": function() { return /* binding */ Scrollbar; } 10157/* harmony export */ }); 10158/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 10159/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 10160/* harmony import */ var _shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/create-element-if-not-defined.js */ "./node_modules/swiper/shared/create-element-if-not-defined.js"); 10161 10162 10163 10164function Scrollbar({ 10165 swiper, 10166 extendParams, 10167 on, 10168 emit 10169}) { 10170 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 10171 let isTouched = false; 10172 let timeout = null; 10173 let dragTimeout = null; 10174 let dragStartPos; 10175 let dragSize; 10176 let trackSize; 10177 let divider; 10178 extendParams({ 10179 scrollbar: { 10180 el: null, 10181 dragSize: 'auto', 10182 hide: false, 10183 draggable: false, 10184 snapOnRelease: true, 10185 lockClass: 'swiper-scrollbar-lock', 10186 dragClass: 'swiper-scrollbar-drag', 10187 scrollbarDisabledClass: 'swiper-scrollbar-disabled', 10188 horizontalClass: `swiper-scrollbar-horizontal`, 10189 verticalClass: `swiper-scrollbar-vertical` 10190 } 10191 }); 10192 swiper.scrollbar = { 10193 el: null, 10194 dragEl: null 10195 }; 10196 function setTranslate() { 10197 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 10198 const { 10199 scrollbar, 10200 rtlTranslate: rtl 10201 } = swiper; 10202 const { 10203 dragEl, 10204 el 10205 } = scrollbar; 10206 const params = swiper.params.scrollbar; 10207 const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress; 10208 let newSize = dragSize; 10209 let newPos = (trackSize - dragSize) * progress; 10210 if (rtl) { 10211 newPos = -newPos; 10212 if (newPos > 0) { 10213 newSize = dragSize - newPos; 10214 newPos = 0; 10215 } else if (-newPos + dragSize > trackSize) { 10216 newSize = trackSize + newPos; 10217 } 10218 } else if (newPos < 0) { 10219 newSize = dragSize + newPos; 10220 newPos = 0; 10221 } else if (newPos + dragSize > trackSize) { 10222 newSize = trackSize - newPos; 10223 } 10224 if (swiper.isHorizontal()) { 10225 dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`; 10226 dragEl.style.width = `${newSize}px`; 10227 } else { 10228 dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`; 10229 dragEl.style.height = `${newSize}px`; 10230 } 10231 if (params.hide) { 10232 clearTimeout(timeout); 10233 el.style.opacity = 1; 10234 timeout = setTimeout(() => { 10235 el.style.opacity = 0; 10236 el.style.transitionDuration = '400ms'; 10237 }, 1000); 10238 } 10239 } 10240 function setTransition(duration) { 10241 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 10242 swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`; 10243 } 10244 function updateSize() { 10245 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 10246 const { 10247 scrollbar 10248 } = swiper; 10249 const { 10250 dragEl, 10251 el 10252 } = scrollbar; 10253 dragEl.style.width = ''; 10254 dragEl.style.height = ''; 10255 trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight; 10256 divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0)); 10257 if (swiper.params.scrollbar.dragSize === 'auto') { 10258 dragSize = trackSize * divider; 10259 } else { 10260 dragSize = parseInt(swiper.params.scrollbar.dragSize, 10); 10261 } 10262 if (swiper.isHorizontal()) { 10263 dragEl.style.width = `${dragSize}px`; 10264 } else { 10265 dragEl.style.height = `${dragSize}px`; 10266 } 10267 if (divider >= 1) { 10268 el.style.display = 'none'; 10269 } else { 10270 el.style.display = ''; 10271 } 10272 if (swiper.params.scrollbar.hide) { 10273 el.style.opacity = 0; 10274 } 10275 if (swiper.params.watchOverflow && swiper.enabled) { 10276 scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass); 10277 } 10278 } 10279 function getPointerPosition(e) { 10280 return swiper.isHorizontal() ? e.clientX : e.clientY; 10281 } 10282 function setDragPosition(e) { 10283 const { 10284 scrollbar, 10285 rtlTranslate: rtl 10286 } = swiper; 10287 const { 10288 el 10289 } = scrollbar; 10290 let positionRatio; 10291 positionRatio = (getPointerPosition(e) - (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementOffset)(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize); 10292 positionRatio = Math.max(Math.min(positionRatio, 1), 0); 10293 if (rtl) { 10294 positionRatio = 1 - positionRatio; 10295 } 10296 const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio; 10297 swiper.updateProgress(position); 10298 swiper.setTranslate(position); 10299 swiper.updateActiveIndex(); 10300 swiper.updateSlidesClasses(); 10301 } 10302 function onDragStart(e) { 10303 const params = swiper.params.scrollbar; 10304 const { 10305 scrollbar, 10306 wrapperEl 10307 } = swiper; 10308 const { 10309 el, 10310 dragEl 10311 } = scrollbar; 10312 isTouched = true; 10313 dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null; 10314 e.preventDefault(); 10315 e.stopPropagation(); 10316 wrapperEl.style.transitionDuration = '100ms'; 10317 dragEl.style.transitionDuration = '100ms'; 10318 setDragPosition(e); 10319 clearTimeout(dragTimeout); 10320 el.style.transitionDuration = '0ms'; 10321 if (params.hide) { 10322 el.style.opacity = 1; 10323 } 10324 if (swiper.params.cssMode) { 10325 swiper.wrapperEl.style['scroll-snap-type'] = 'none'; 10326 } 10327 emit('scrollbarDragStart', e); 10328 } 10329 function onDragMove(e) { 10330 const { 10331 scrollbar, 10332 wrapperEl 10333 } = swiper; 10334 const { 10335 el, 10336 dragEl 10337 } = scrollbar; 10338 if (!isTouched) return; 10339 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 10340 setDragPosition(e); 10341 wrapperEl.style.transitionDuration = '0ms'; 10342 el.style.transitionDuration = '0ms'; 10343 dragEl.style.transitionDuration = '0ms'; 10344 emit('scrollbarDragMove', e); 10345 } 10346 function onDragEnd(e) { 10347 const params = swiper.params.scrollbar; 10348 const { 10349 scrollbar, 10350 wrapperEl 10351 } = swiper; 10352 const { 10353 el 10354 } = scrollbar; 10355 if (!isTouched) return; 10356 isTouched = false; 10357 if (swiper.params.cssMode) { 10358 swiper.wrapperEl.style['scroll-snap-type'] = ''; 10359 wrapperEl.style.transitionDuration = ''; 10360 } 10361 if (params.hide) { 10362 clearTimeout(dragTimeout); 10363 dragTimeout = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.nextTick)(() => { 10364 el.style.opacity = 0; 10365 el.style.transitionDuration = '400ms'; 10366 }, 1000); 10367 } 10368 emit('scrollbarDragEnd', e); 10369 if (params.snapOnRelease) { 10370 swiper.slideToClosest(); 10371 } 10372 } 10373 function events(method) { 10374 const { 10375 scrollbar, 10376 params 10377 } = swiper; 10378 const el = scrollbar.el; 10379 if (!el) return; 10380 const target = el; 10381 const activeListener = params.passiveListeners ? { 10382 passive: false, 10383 capture: false 10384 } : false; 10385 const passiveListener = params.passiveListeners ? { 10386 passive: true, 10387 capture: false 10388 } : false; 10389 if (!target) return; 10390 const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; 10391 target[eventMethod]('pointerdown', onDragStart, activeListener); 10392 document[eventMethod]('pointermove', onDragMove, activeListener); 10393 document[eventMethod]('pointerup', onDragEnd, passiveListener); 10394 } 10395 function enableDraggable() { 10396 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 10397 events('on'); 10398 } 10399 function disableDraggable() { 10400 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 10401 events('off'); 10402 } 10403 function init() { 10404 const { 10405 scrollbar, 10406 el: swiperEl 10407 } = swiper; 10408 swiper.params.scrollbar = (0,_shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_2__["default"])(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, { 10409 el: 'swiper-scrollbar' 10410 }); 10411 const params = swiper.params.scrollbar; 10412 if (!params.el) return; 10413 let el; 10414 if (typeof params.el === 'string' && swiper.isElement) { 10415 el = swiper.el.shadowRoot.querySelector(params.el); 10416 } 10417 if (!el && typeof params.el === 'string') { 10418 el = document.querySelectorAll(params.el); 10419 } else if (!el) { 10420 el = params.el; 10421 } 10422 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) { 10423 el = swiperEl.querySelector(params.el); 10424 } 10425 if (el.length > 0) el = el[0]; 10426 el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 10427 let dragEl; 10428 if (el) { 10429 dragEl = el.querySelector(`.${swiper.params.scrollbar.dragClass}`); 10430 if (!dragEl) { 10431 dragEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', swiper.params.scrollbar.dragClass); 10432 el.append(dragEl); 10433 } 10434 } 10435 Object.assign(scrollbar, { 10436 el, 10437 dragEl 10438 }); 10439 if (params.draggable) { 10440 enableDraggable(); 10441 } 10442 if (el) { 10443 el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass); 10444 } 10445 } 10446 function destroy() { 10447 const params = swiper.params.scrollbar; 10448 const el = swiper.scrollbar.el; 10449 if (el) { 10450 el.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 10451 } 10452 disableDraggable(); 10453 } 10454 on('init', () => { 10455 if (swiper.params.scrollbar.enabled === false) { 10456 // eslint-disable-next-line 10457 disable(); 10458 } else { 10459 init(); 10460 updateSize(); 10461 setTranslate(); 10462 } 10463 }); 10464 on('update resize observerUpdate lock unlock', () => { 10465 updateSize(); 10466 }); 10467 on('setTranslate', () => { 10468 setTranslate(); 10469 }); 10470 on('setTransition', (_s, duration) => { 10471 setTransition(duration); 10472 }); 10473 on('enable disable', () => { 10474 const { 10475 el 10476 } = swiper.scrollbar; 10477 if (el) { 10478 el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass); 10479 } 10480 }); 10481 on('destroy', () => { 10482 destroy(); 10483 }); 10484 const enable = () => { 10485 swiper.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass); 10486 if (swiper.scrollbar.el) { 10487 swiper.scrollbar.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass); 10488 } 10489 init(); 10490 updateSize(); 10491 setTranslate(); 10492 }; 10493 const disable = () => { 10494 swiper.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass); 10495 if (swiper.scrollbar.el) { 10496 swiper.scrollbar.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass); 10497 } 10498 destroy(); 10499 }; 10500 Object.assign(swiper.scrollbar, { 10501 enable, 10502 disable, 10503 updateSize, 10504 setTranslate, 10505 init, 10506 destroy 10507 }); 10508} 10509 10510/***/ }), 10511
vendor: 8,075 bytes, lines 10512-10716
10512/***/ "./node_modules/swiper/modules/thumbs/thumbs.js": 10513/*!******************************************************!*\ 10514 !*** ./node_modules/swiper/modules/thumbs/thumbs.js ***! 10515 \******************************************************/ 10516/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 10517 10518__webpack_require__.r(__webpack_exports__); 10519/* harmony export */ __webpack_require__.d(__webpack_exports__, { 10520/* harmony export */ "default": function() { return /* binding */ Thumb; } 10521/* harmony export */ }); 10522/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 10523/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 10524 10525 10526function Thumb({ 10527 swiper, 10528 extendParams, 10529 on 10530}) { 10531 extendParams({ 10532 thumbs: { 10533 swiper: null, 10534 multipleActiveThumbs: true, 10535 autoScrollOffset: 0, 10536 slideThumbActiveClass: 'swiper-slide-thumb-active', 10537 thumbsContainerClass: 'swiper-thumbs' 10538 } 10539 }); 10540 let initialized = false; 10541 let swiperCreated = false; 10542 swiper.thumbs = { 10543 swiper: null 10544 }; 10545 function onThumbClick() { 10546 const thumbsSwiper = swiper.thumbs.swiper; 10547 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 10548 const clickedIndex = thumbsSwiper.clickedIndex; 10549 const clickedSlide = thumbsSwiper.clickedSlide; 10550 if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return; 10551 if (typeof clickedIndex === 'undefined' || clickedIndex === null) return; 10552 let slideToIndex; 10553 if (thumbsSwiper.params.loop) { 10554 slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10); 10555 } else { 10556 slideToIndex = clickedIndex; 10557 } 10558 if (swiper.params.loop) { 10559 swiper.slideToLoop(slideToIndex); 10560 } else { 10561 swiper.slideTo(slideToIndex); 10562 } 10563 } 10564 function init() { 10565 const { 10566 thumbs: thumbsParams 10567 } = swiper.params; 10568 if (initialized) return false; 10569 initialized = true; 10570 const SwiperClass = swiper.constructor; 10571 if (thumbsParams.swiper instanceof SwiperClass) { 10572 swiper.thumbs.swiper = thumbsParams.swiper; 10573 Object.assign(swiper.thumbs.swiper.originalParams, { 10574 watchSlidesProgress: true, 10575 slideToClickedSlide: false 10576 }); 10577 Object.assign(swiper.thumbs.swiper.params, { 10578 watchSlidesProgress: true, 10579 slideToClickedSlide: false 10580 }); 10581 swiper.thumbs.swiper.update(); 10582 } else if ((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.isObject)(thumbsParams.swiper)) { 10583 const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper); 10584 Object.assign(thumbsSwiperParams, { 10585 watchSlidesProgress: true, 10586 slideToClickedSlide: false 10587 }); 10588 swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams); 10589 swiperCreated = true; 10590 } 10591 swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass); 10592 swiper.thumbs.swiper.on('tap', onThumbClick); 10593 return true; 10594 } 10595 function update(initial) { 10596 const thumbsSwiper = swiper.thumbs.swiper; 10597 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 10598 const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; 10599 10600 // Activate thumbs 10601 let thumbsToActivate = 1; 10602 const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass; 10603 if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) { 10604 thumbsToActivate = swiper.params.slidesPerView; 10605 } 10606 if (!swiper.params.thumbs.multipleActiveThumbs) { 10607 thumbsToActivate = 1; 10608 } 10609 thumbsToActivate = Math.floor(thumbsToActivate); 10610 thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass)); 10611 if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) { 10612 for (let i = 0; i < thumbsToActivate; i += 1) { 10613 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(thumbsSwiper.slidesEl, `[data-swiper-slide-index="${swiper.realIndex + i}"]`).forEach(slideEl => { 10614 slideEl.classList.add(thumbActiveClass); 10615 }); 10616 } 10617 } else { 10618 for (let i = 0; i < thumbsToActivate; i += 1) { 10619 if (thumbsSwiper.slides[swiper.realIndex + i]) { 10620 thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass); 10621 } 10622 } 10623 } 10624 const autoScrollOffset = swiper.params.thumbs.autoScrollOffset; 10625 const useOffset = autoScrollOffset && !thumbsSwiper.params.loop; 10626 if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) { 10627 const currentThumbsIndex = thumbsSwiper.activeIndex; 10628 let newThumbsIndex; 10629 let direction; 10630 if (thumbsSwiper.params.loop) { 10631 const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0]; 10632 newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide); 10633 direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev'; 10634 } else { 10635 newThumbsIndex = swiper.realIndex; 10636 direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev'; 10637 } 10638 if (useOffset) { 10639 newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset; 10640 } 10641 if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) { 10642 if (thumbsSwiper.params.centeredSlides) { 10643 if (newThumbsIndex > currentThumbsIndex) { 10644 newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1; 10645 } else { 10646 newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1; 10647 } 10648 } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) { 10649 // newThumbsIndex = newThumbsIndex - slidesPerView + 1; 10650 } 10651 thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined); 10652 } 10653 } 10654 } 10655 on('beforeInit', () => { 10656 const { 10657 thumbs 10658 } = swiper.params; 10659 if (!thumbs || !thumbs.swiper) return; 10660 if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) { 10661 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 10662 const getThumbsElementAndInit = () => { 10663 const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper; 10664 if (thumbsElement && thumbsElement.swiper) { 10665 thumbs.swiper = thumbsElement.swiper; 10666 init(); 10667 update(true); 10668 } else if (thumbsElement) { 10669 const onThumbsSwiper = e => { 10670 thumbs.swiper = e.detail[0]; 10671 thumbsElement.removeEventListener('init', onThumbsSwiper); 10672 init(); 10673 update(true); 10674 thumbs.swiper.update(); 10675 swiper.update(); 10676 }; 10677 thumbsElement.addEventListener('init', onThumbsSwiper); 10678 } 10679 return thumbsElement; 10680 }; 10681 const watchForThumbsToAppear = () => { 10682 if (swiper.destroyed) return; 10683 const thumbsElement = getThumbsElementAndInit(); 10684 if (!thumbsElement) { 10685 requestAnimationFrame(watchForThumbsToAppear); 10686 } 10687 }; 10688 requestAnimationFrame(watchForThumbsToAppear); 10689 } else { 10690 init(); 10691 update(true); 10692 } 10693 }); 10694 on('slideChange update resize observerUpdate', () => { 10695 update(); 10696 }); 10697 on('setTransition', (_s, duration) => { 10698 const thumbsSwiper = swiper.thumbs.swiper; 10699 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 10700 thumbsSwiper.setTransition(duration); 10701 }); 10702 on('beforeDestroy', () => { 10703 const thumbsSwiper = swiper.thumbs.swiper; 10704 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 10705 if (swiperCreated) { 10706 thumbsSwiper.destroy(); 10707 } 10708 }); 10709 Object.assign(swiper.thumbs, { 10710 init, 10711 update 10712 }); 10713} 10714 10715/***/ }), 10716
vendor: 11,576 bytes, lines 10717-11056
10717/***/ "./node_modules/swiper/modules/virtual/virtual.js": 10718/*!********************************************************!*\ 10719 !*** ./node_modules/swiper/modules/virtual/virtual.js ***! 10720 \********************************************************/ 10721/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 10722 10723__webpack_require__.r(__webpack_exports__); 10724/* harmony export */ __webpack_require__.d(__webpack_exports__, { 10725/* harmony export */ "default": function() { return /* binding */ Virtual; } 10726/* harmony export */ }); 10727/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 10728/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 10729 10730 10731function Virtual({ 10732 swiper, 10733 extendParams, 10734 on, 10735 emit 10736}) { 10737 extendParams({ 10738 virtual: { 10739 enabled: false, 10740 slides: [], 10741 cache: true, 10742 renderSlide: null, 10743 renderExternal: null, 10744 renderExternalUpdate: true, 10745 addSlidesBefore: 0, 10746 addSlidesAfter: 0 10747 } 10748 }); 10749 let cssModeTimeout; 10750 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 10751 swiper.virtual = { 10752 cache: {}, 10753 from: undefined, 10754 to: undefined, 10755 slides: [], 10756 offset: 0, 10757 slidesGrid: [] 10758 }; 10759 const tempDOM = document.createElement('div'); 10760 function renderSlide(slide, index) { 10761 const params = swiper.params.virtual; 10762 if (params.cache && swiper.virtual.cache[index]) { 10763 return swiper.virtual.cache[index]; 10764 } 10765 // eslint-disable-next-line 10766 let slideEl; 10767 if (params.renderSlide) { 10768 slideEl = params.renderSlide.call(swiper, slide, index); 10769 if (typeof slideEl === 'string') { 10770 tempDOM.innerHTML = slideEl; 10771 slideEl = tempDOM.children[0]; 10772 } 10773 } else if (swiper.isElement) { 10774 slideEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('swiper-slide'); 10775 } else { 10776 slideEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', swiper.params.slideClass); 10777 } 10778 slideEl.setAttribute('data-swiper-slide-index', index); 10779 if (!params.renderSlide) { 10780 slideEl.innerHTML = slide; 10781 } 10782 if (params.cache) swiper.virtual.cache[index] = slideEl; 10783 return slideEl; 10784 } 10785 function update(force) { 10786 const { 10787 slidesPerView, 10788 slidesPerGroup, 10789 centeredSlides, 10790 loop: isLoop 10791 } = swiper.params; 10792 const { 10793 addSlidesBefore, 10794 addSlidesAfter 10795 } = swiper.params.virtual; 10796 const { 10797 from: previousFrom, 10798 to: previousTo, 10799 slides, 10800 slidesGrid: previousSlidesGrid, 10801 offset: previousOffset 10802 } = swiper.virtual; 10803 if (!swiper.params.cssMode) { 10804 swiper.updateActiveIndex(); 10805 } 10806 const activeIndex = swiper.activeIndex || 0; 10807 let offsetProp; 10808 if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top'; 10809 let slidesAfter; 10810 let slidesBefore; 10811 if (centeredSlides) { 10812 slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter; 10813 slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore; 10814 } else { 10815 slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter; 10816 slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore; 10817 } 10818 let from = activeIndex - slidesBefore; 10819 let to = activeIndex + slidesAfter; 10820 if (!isLoop) { 10821 from = Math.max(from, 0); 10822 to = Math.min(to, slides.length - 1); 10823 } 10824 let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0); 10825 if (isLoop && activeIndex >= slidesBefore) { 10826 from -= slidesBefore; 10827 if (!centeredSlides) offset += swiper.slidesGrid[0]; 10828 } else if (isLoop && activeIndex < slidesBefore) { 10829 from = -slidesBefore; 10830 if (centeredSlides) offset += swiper.slidesGrid[0]; 10831 } 10832 Object.assign(swiper.virtual, { 10833 from, 10834 to, 10835 offset, 10836 slidesGrid: swiper.slidesGrid, 10837 slidesBefore, 10838 slidesAfter 10839 }); 10840 function onRendered() { 10841 swiper.updateSlides(); 10842 swiper.updateProgress(); 10843 swiper.updateSlidesClasses(); 10844 emit('virtualUpdate'); 10845 } 10846 if (previousFrom === from && previousTo === to && !force) { 10847 if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) { 10848 swiper.slides.forEach(slideEl => { 10849 slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`; 10850 }); 10851 } 10852 swiper.updateProgress(); 10853 emit('virtualUpdate'); 10854 return; 10855 } 10856 if (swiper.params.virtual.renderExternal) { 10857 swiper.params.virtual.renderExternal.call(swiper, { 10858 offset, 10859 from, 10860 to, 10861 slides: function getSlides() { 10862 const slidesToRender = []; 10863 for (let i = from; i <= to; i += 1) { 10864 slidesToRender.push(slides[i]); 10865 } 10866 return slidesToRender; 10867 }() 10868 }); 10869 if (swiper.params.virtual.renderExternalUpdate) { 10870 onRendered(); 10871 } else { 10872 emit('virtualUpdate'); 10873 } 10874 return; 10875 } 10876 const prependIndexes = []; 10877 const appendIndexes = []; 10878 const getSlideIndex = index => { 10879 let slideIndex = index; 10880 if (index < 0) { 10881 slideIndex = slides.length + index; 10882 } else if (slideIndex >= slides.length) { 10883 // eslint-disable-next-line 10884 slideIndex = slideIndex - slides.length; 10885 } 10886 return slideIndex; 10887 }; 10888 if (force) { 10889 swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}, swiper-slide`).forEach(slideEl => { 10890 slideEl.remove(); 10891 }); 10892 } else { 10893 for (let i = previousFrom; i <= previousTo; i += 1) { 10894 if (i < from || i > to) { 10895 const slideIndex = getSlideIndex(i); 10896 swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}[data-swiper-slide-index="${slideIndex}"], swiper-slide[data-swiper-slide-index="${slideIndex}"]`).forEach(slideEl => { 10897 slideEl.remove(); 10898 }); 10899 } 10900 } 10901 } 10902 const loopFrom = isLoop ? -slides.length : 0; 10903 const loopTo = isLoop ? slides.length * 2 : slides.length; 10904 for (let i = loopFrom; i < loopTo; i += 1) { 10905 if (i >= from && i <= to) { 10906 const slideIndex = getSlideIndex(i); 10907 if (typeof previousTo === 'undefined' || force) { 10908 appendIndexes.push(slideIndex); 10909 } else { 10910 if (i > previousTo) appendIndexes.push(slideIndex); 10911 if (i < previousFrom) prependIndexes.push(slideIndex); 10912 } 10913 } 10914 } 10915 appendIndexes.forEach(index => { 10916 swiper.slidesEl.append(renderSlide(slides[index], index)); 10917 }); 10918 if (isLoop) { 10919 for (let i = prependIndexes.length - 1; i >= 0; i -= 1) { 10920 const index = prependIndexes[i]; 10921 swiper.slidesEl.prepend(renderSlide(slides[index], index)); 10922 } 10923 } else { 10924 prependIndexes.sort((a, b) => b - a); 10925 prependIndexes.forEach(index => { 10926 swiper.slidesEl.prepend(renderSlide(slides[index], index)); 10927 }); 10928 } 10929 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => { 10930 slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`; 10931 }); 10932 onRendered(); 10933 } 10934 function appendSlide(slides) { 10935 if (typeof slides === 'object' && 'length' in slides) { 10936 for (let i = 0; i < slides.length; i += 1) { 10937 if (slides[i]) swiper.virtual.slides.push(slides[i]); 10938 } 10939 } else { 10940 swiper.virtual.slides.push(slides); 10941 } 10942 update(true); 10943 } 10944 function prependSlide(slides) { 10945 const activeIndex = swiper.activeIndex; 10946 let newActiveIndex = activeIndex + 1; 10947 let numberOfNewSlides = 1; 10948 if (Array.isArray(slides)) { 10949 for (let i = 0; i < slides.length; i += 1) { 10950 if (slides[i]) swiper.virtual.slides.unshift(slides[i]); 10951 } 10952 newActiveIndex = activeIndex + slides.length; 10953 numberOfNewSlides = slides.length; 10954 } else { 10955 swiper.virtual.slides.unshift(slides); 10956 } 10957 if (swiper.params.virtual.cache) { 10958 const cache = swiper.virtual.cache; 10959 const newCache = {}; 10960 Object.keys(cache).forEach(cachedIndex => { 10961 const cachedEl = cache[cachedIndex]; 10962 const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index'); 10963 if (cachedElIndex) { 10964 cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides); 10965 } 10966 newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl; 10967 }); 10968 swiper.virtual.cache = newCache; 10969 } 10970 update(true); 10971 swiper.slideTo(newActiveIndex, 0); 10972 } 10973 function removeSlide(slidesIndexes) { 10974 if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return; 10975 let activeIndex = swiper.activeIndex; 10976 if (Array.isArray(slidesIndexes)) { 10977 for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) { 10978 swiper.virtual.slides.splice(slidesIndexes[i], 1); 10979 if (swiper.params.virtual.cache) { 10980 delete swiper.virtual.cache[slidesIndexes[i]]; 10981 } 10982 if (slidesIndexes[i] < activeIndex) activeIndex -= 1; 10983 activeIndex = Math.max(activeIndex, 0); 10984 } 10985 } else { 10986 swiper.virtual.slides.splice(slidesIndexes, 1); 10987 if (swiper.params.virtual.cache) { 10988 delete swiper.virtual.cache[slidesIndexes]; 10989 } 10990 if (slidesIndexes < activeIndex) activeIndex -= 1; 10991 activeIndex = Math.max(activeIndex, 0); 10992 } 10993 update(true); 10994 swiper.slideTo(activeIndex, 0); 10995 } 10996 function removeAllSlides() { 10997 swiper.virtual.slides = []; 10998 if (swiper.params.virtual.cache) { 10999 swiper.virtual.cache = {}; 11000 } 11001 update(true); 11002 swiper.slideTo(0, 0); 11003 } 11004 on('beforeInit', () => { 11005 if (!swiper.params.virtual.enabled) return; 11006 let domSlidesAssigned; 11007 if (typeof swiper.passedParams.virtual.slides === 'undefined') { 11008 const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`)); 11009 if (slides && slides.length) { 11010 swiper.virtual.slides = [...slides]; 11011 domSlidesAssigned = true; 11012 slides.forEach((slideEl, slideIndex) => { 11013 slideEl.setAttribute('data-swiper-slide-index', slideIndex); 11014 swiper.virtual.cache[slideIndex] = slideEl; 11015 slideEl.remove(); 11016 }); 11017 } 11018 } 11019 if (!domSlidesAssigned) { 11020 swiper.virtual.slides = swiper.params.virtual.slides; 11021 } 11022 swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`); 11023 swiper.params.watchSlidesProgress = true; 11024 swiper.originalParams.watchSlidesProgress = true; 11025 if (!swiper.params.initialSlide) { 11026 update(); 11027 } 11028 }); 11029 on('setTranslate', () => { 11030 if (!swiper.params.virtual.enabled) return; 11031 if (swiper.params.cssMode && !swiper._immediateVirtual) { 11032 clearTimeout(cssModeTimeout); 11033 cssModeTimeout = setTimeout(() => { 11034 update(); 11035 }, 100); 11036 } else { 11037 update(); 11038 } 11039 }); 11040 on('init update resize', () => { 11041 if (!swiper.params.virtual.enabled) return; 11042 if (swiper.params.cssMode) { 11043 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.setCSSProperty)(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`); 11044 } 11045 }); 11046 Object.assign(swiper.virtual, { 11047 appendSlide, 11048 prependSlide, 11049 removeSlide, 11050 removeAllSlides, 11051 update 11052 }); 11053} 11054 11055/***/ }), 11056
vendor: 22,571 bytes, lines 11057-11658
11057/***/ "./node_modules/swiper/modules/zoom/zoom.js": 11058/*!**************************************************!*\ 11059 !*** ./node_modules/swiper/modules/zoom/zoom.js ***! 11060 \**************************************************/ 11061/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 11062 11063__webpack_require__.r(__webpack_exports__); 11064/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11065/* harmony export */ "default": function() { return /* binding */ Zoom; } 11066/* harmony export */ }); 11067/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 11068/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 11069 11070 11071function Zoom({ 11072 swiper, 11073 extendParams, 11074 on, 11075 emit 11076}) { 11077 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 11078 extendParams({ 11079 zoom: { 11080 enabled: false, 11081 maxRatio: 3, 11082 minRatio: 1, 11083 toggle: true, 11084 containerClass: 'swiper-zoom-container', 11085 zoomedSlideClass: 'swiper-slide-zoomed' 11086 } 11087 }); 11088 swiper.zoom = { 11089 enabled: false 11090 }; 11091 let currentScale = 1; 11092 let isScaling = false; 11093 let fakeGestureTouched; 11094 let fakeGestureMoved; 11095 const evCache = []; 11096 const gesture = { 11097 originX: 0, 11098 originY: 0, 11099 slideEl: undefined, 11100 slideWidth: undefined, 11101 slideHeight: undefined, 11102 imageEl: undefined, 11103 imageWrapEl: undefined, 11104 maxRatio: 3 11105 }; 11106 const image = { 11107 isTouched: undefined, 11108 isMoved: undefined, 11109 currentX: undefined, 11110 currentY: undefined, 11111 minX: undefined, 11112 minY: undefined, 11113 maxX: undefined, 11114 maxY: undefined, 11115 width: undefined, 11116 height: undefined, 11117 startX: undefined, 11118 startY: undefined, 11119 touchesStart: {}, 11120 touchesCurrent: {} 11121 }; 11122 const velocity = { 11123 x: undefined, 11124 y: undefined, 11125 prevPositionX: undefined, 11126 prevPositionY: undefined, 11127 prevTime: undefined 11128 }; 11129 let scale = 1; 11130 Object.defineProperty(swiper.zoom, 'scale', { 11131 get() { 11132 return scale; 11133 }, 11134 set(value) { 11135 if (scale !== value) { 11136 const imageEl = gesture.imageEl; 11137 const slideEl = gesture.slideEl; 11138 emit('zoomChange', value, imageEl, slideEl); 11139 } 11140 scale = value; 11141 } 11142 }); 11143 function getDistanceBetweenTouches() { 11144 if (evCache.length < 2) return 1; 11145 const x1 = evCache[0].pageX; 11146 const y1 = evCache[0].pageY; 11147 const x2 = evCache[1].pageX; 11148 const y2 = evCache[1].pageY; 11149 const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); 11150 return distance; 11151 } 11152 function getScaleOrigin() { 11153 if (evCache.length < 2) return { 11154 x: null, 11155 y: null 11156 }; 11157 const box = gesture.imageEl.getBoundingClientRect(); 11158 return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y) / currentScale]; 11159 } 11160 function getSlideSelector() { 11161 return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`; 11162 } 11163 function eventWithinSlide(e) { 11164 const slideSelector = getSlideSelector(); 11165 if (e.target.matches(slideSelector)) return true; 11166 if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true; 11167 return false; 11168 } 11169 function eventWithinZoomContainer(e) { 11170 const selector = `.${swiper.params.zoom.containerClass}`; 11171 if (e.target.matches(selector)) return true; 11172 if ([...swiper.el.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true; 11173 return false; 11174 } 11175 11176 // Events 11177 function onGestureStart(e) { 11178 if (e.pointerType === 'mouse') { 11179 evCache.splice(0, evCache.length); 11180 } 11181 if (!eventWithinSlide(e)) return; 11182 const params = swiper.params.zoom; 11183 fakeGestureTouched = false; 11184 fakeGestureMoved = false; 11185 evCache.push(e); 11186 if (evCache.length < 2) { 11187 return; 11188 } 11189 fakeGestureTouched = true; 11190 gesture.scaleStart = getDistanceBetweenTouches(); 11191 if (!gesture.slideEl) { 11192 gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`); 11193 if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex]; 11194 let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`); 11195 if (imageEl) { 11196 imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0]; 11197 } 11198 gesture.imageEl = imageEl; 11199 if (imageEl) { 11200 gesture.imageWrapEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(gesture.imageEl, `.${params.containerClass}`)[0]; 11201 } else { 11202 gesture.imageWrapEl = undefined; 11203 } 11204 if (!gesture.imageWrapEl) { 11205 gesture.imageEl = undefined; 11206 return; 11207 } 11208 gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio; 11209 } 11210 if (gesture.imageEl) { 11211 const [originX, originY] = getScaleOrigin(); 11212 gesture.originX = originX; 11213 gesture.originY = originY; 11214 gesture.imageEl.style.transitionDuration = '0ms'; 11215 } 11216 isScaling = true; 11217 } 11218 function onGestureChange(e) { 11219 if (!eventWithinSlide(e)) return; 11220 const params = swiper.params.zoom; 11221 const zoom = swiper.zoom; 11222 const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId); 11223 if (pointerIndex >= 0) evCache[pointerIndex] = e; 11224 if (evCache.length < 2) { 11225 return; 11226 } 11227 fakeGestureMoved = true; 11228 gesture.scaleMove = getDistanceBetweenTouches(); 11229 if (!gesture.imageEl) { 11230 return; 11231 } 11232 zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale; 11233 if (zoom.scale > gesture.maxRatio) { 11234 zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5; 11235 } 11236 if (zoom.scale < params.minRatio) { 11237 zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5; 11238 } 11239 gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`; 11240 } 11241 function onGestureEnd(e) { 11242 if (!eventWithinSlide(e)) return; 11243 if (e.pointerType === 'mouse' && e.type === 'pointerout') return; 11244 const params = swiper.params.zoom; 11245 const zoom = swiper.zoom; 11246 const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId); 11247 if (pointerIndex >= 0) evCache.splice(pointerIndex, 1); 11248 if (!fakeGestureTouched || !fakeGestureMoved) { 11249 return; 11250 } 11251 fakeGestureTouched = false; 11252 fakeGestureMoved = false; 11253 if (!gesture.imageEl) return; 11254 zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio); 11255 gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`; 11256 gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`; 11257 currentScale = zoom.scale; 11258 isScaling = false; 11259 if (zoom.scale > 1 && gesture.slideEl) { 11260 gesture.slideEl.classList.add(`${params.zoomedSlideClass}`); 11261 } else if (zoom.scale <= 1 && gesture.slideEl) { 11262 gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`); 11263 } 11264 if (zoom.scale === 1) { 11265 gesture.originX = 0; 11266 gesture.originY = 0; 11267 gesture.slideEl = undefined; 11268 } 11269 } 11270 function onTouchStart(e) { 11271 const device = swiper.device; 11272 if (!gesture.imageEl) return; 11273 if (image.isTouched) return; 11274 if (device.android && e.cancelable) e.preventDefault(); 11275 image.isTouched = true; 11276 const event = evCache.length > 0 ? evCache[0] : e; 11277 image.touchesStart.x = event.pageX; 11278 image.touchesStart.y = event.pageY; 11279 } 11280 function onTouchMove(e) { 11281 if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return; 11282 const zoom = swiper.zoom; 11283 if (!gesture.imageEl) return; 11284 if (!image.isTouched || !gesture.slideEl) return; 11285 if (!image.isMoved) { 11286 image.width = gesture.imageEl.offsetWidth; 11287 image.height = gesture.imageEl.offsetHeight; 11288 image.startX = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.getTranslate)(gesture.imageWrapEl, 'x') || 0; 11289 image.startY = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.getTranslate)(gesture.imageWrapEl, 'y') || 0; 11290 gesture.slideWidth = gesture.slideEl.offsetWidth; 11291 gesture.slideHeight = gesture.slideEl.offsetHeight; 11292 gesture.imageWrapEl.style.transitionDuration = '0ms'; 11293 } 11294 // Define if we need image drag 11295 const scaledWidth = image.width * zoom.scale; 11296 const scaledHeight = image.height * zoom.scale; 11297 if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return; 11298 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 11299 image.maxX = -image.minX; 11300 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 11301 image.maxY = -image.minY; 11302 image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX; 11303 image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY; 11304 const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y)); 11305 if (touchesDiff > 5) { 11306 swiper.allowClick = false; 11307 } 11308 if (!image.isMoved && !isScaling) { 11309 if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) { 11310 image.isTouched = false; 11311 return; 11312 } 11313 if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) { 11314 image.isTouched = false; 11315 return; 11316 } 11317 } 11318 if (e.cancelable) { 11319 e.preventDefault(); 11320 } 11321 e.stopPropagation(); 11322 image.isMoved = true; 11323 const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio); 11324 const { 11325 originX, 11326 originY 11327 } = gesture; 11328 image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2); 11329 image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2); 11330 if (image.currentX < image.minX) { 11331 image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8; 11332 } 11333 if (image.currentX > image.maxX) { 11334 image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8; 11335 } 11336 if (image.currentY < image.minY) { 11337 image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8; 11338 } 11339 if (image.currentY > image.maxY) { 11340 image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8; 11341 } 11342 11343 // Velocity 11344 if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x; 11345 if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y; 11346 if (!velocity.prevTime) velocity.prevTime = Date.now(); 11347 velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2; 11348 velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2; 11349 if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0; 11350 if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0; 11351 velocity.prevPositionX = image.touchesCurrent.x; 11352 velocity.prevPositionY = image.touchesCurrent.y; 11353 velocity.prevTime = Date.now(); 11354 gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`; 11355 } 11356 function onTouchEnd() { 11357 const zoom = swiper.zoom; 11358 if (!gesture.imageEl) return; 11359 if (!image.isTouched || !image.isMoved) { 11360 image.isTouched = false; 11361 image.isMoved = false; 11362 return; 11363 } 11364 image.isTouched = false; 11365 image.isMoved = false; 11366 let momentumDurationX = 300; 11367 let momentumDurationY = 300; 11368 const momentumDistanceX = velocity.x * momentumDurationX; 11369 const newPositionX = image.currentX + momentumDistanceX; 11370 const momentumDistanceY = velocity.y * momentumDurationY; 11371 const newPositionY = image.currentY + momentumDistanceY; 11372 11373 // Fix duration 11374 if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); 11375 if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); 11376 const momentumDuration = Math.max(momentumDurationX, momentumDurationY); 11377 image.currentX = newPositionX; 11378 image.currentY = newPositionY; 11379 // Define if we need image drag 11380 const scaledWidth = image.width * zoom.scale; 11381 const scaledHeight = image.height * zoom.scale; 11382 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 11383 image.maxX = -image.minX; 11384 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 11385 image.maxY = -image.minY; 11386 image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX); 11387 image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY); 11388 gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`; 11389 gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`; 11390 } 11391 function onTransitionEnd() { 11392 const zoom = swiper.zoom; 11393 if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) { 11394 if (gesture.imageEl) { 11395 gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)'; 11396 } 11397 if (gesture.imageWrapEl) { 11398 gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)'; 11399 } 11400 gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`); 11401 zoom.scale = 1; 11402 currentScale = 1; 11403 gesture.slideEl = undefined; 11404 gesture.imageEl = undefined; 11405 gesture.imageWrapEl = undefined; 11406 gesture.originX = 0; 11407 gesture.originY = 0; 11408 } 11409 } 11410 function zoomIn(e) { 11411 const zoom = swiper.zoom; 11412 const params = swiper.params.zoom; 11413 if (!gesture.slideEl) { 11414 if (e && e.target) { 11415 gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`); 11416 } 11417 if (!gesture.slideEl) { 11418 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 11419 gesture.slideEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0]; 11420 } else { 11421 gesture.slideEl = swiper.slides[swiper.activeIndex]; 11422 } 11423 } 11424 let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`); 11425 if (imageEl) { 11426 imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0]; 11427 } 11428 gesture.imageEl = imageEl; 11429 if (imageEl) { 11430 gesture.imageWrapEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(gesture.imageEl, `.${params.containerClass}`)[0]; 11431 } else { 11432 gesture.imageWrapEl = undefined; 11433 } 11434 } 11435 if (!gesture.imageEl || !gesture.imageWrapEl) return; 11436 if (swiper.params.cssMode) { 11437 swiper.wrapperEl.style.overflow = 'hidden'; 11438 swiper.wrapperEl.style.touchAction = 'none'; 11439 } 11440 gesture.slideEl.classList.add(`${params.zoomedSlideClass}`); 11441 let touchX; 11442 let touchY; 11443 let offsetX; 11444 let offsetY; 11445 let diffX; 11446 let diffY; 11447 let translateX; 11448 let translateY; 11449 let imageWidth; 11450 let imageHeight; 11451 let scaledWidth; 11452 let scaledHeight; 11453 let translateMinX; 11454 let translateMinY; 11455 let translateMaxX; 11456 let translateMaxY; 11457 let slideWidth; 11458 let slideHeight; 11459 if (typeof image.touchesStart.x === 'undefined' && e) { 11460 touchX = e.pageX; 11461 touchY = e.pageY; 11462 } else { 11463 touchX = image.touchesStart.x; 11464 touchY = image.touchesStart.y; 11465 } 11466 const forceZoomRatio = typeof e === 'number' ? e : null; 11467 if (currentScale === 1 && forceZoomRatio) { 11468 touchX = undefined; 11469 touchY = undefined; 11470 } 11471 zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio; 11472 currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio; 11473 if (e && !(currentScale === 1 && forceZoomRatio)) { 11474 slideWidth = gesture.slideEl.offsetWidth; 11475 slideHeight = gesture.slideEl.offsetHeight; 11476 offsetX = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementOffset)(gesture.slideEl).left + window.scrollX; 11477 offsetY = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementOffset)(gesture.slideEl).top + window.scrollY; 11478 diffX = offsetX + slideWidth / 2 - touchX; 11479 diffY = offsetY + slideHeight / 2 - touchY; 11480 imageWidth = gesture.imageEl.offsetWidth; 11481 imageHeight = gesture.imageEl.offsetHeight; 11482 scaledWidth = imageWidth * zoom.scale; 11483 scaledHeight = imageHeight * zoom.scale; 11484 translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0); 11485 translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0); 11486 translateMaxX = -translateMinX; 11487 translateMaxY = -translateMinY; 11488 translateX = diffX * zoom.scale; 11489 translateY = diffY * zoom.scale; 11490 if (translateX < translateMinX) { 11491 translateX = translateMinX; 11492 } 11493 if (translateX > translateMaxX) { 11494 translateX = translateMaxX; 11495 } 11496 if (translateY < translateMinY) { 11497 translateY = translateMinY; 11498 } 11499 if (translateY > translateMaxY) { 11500 translateY = translateMaxY; 11501 } 11502 } else { 11503 translateX = 0; 11504 translateY = 0; 11505 } 11506 if (forceZoomRatio && zoom.scale === 1) { 11507 gesture.originX = 0; 11508 gesture.originY = 0; 11509 } 11510 gesture.imageWrapEl.style.transitionDuration = '300ms'; 11511 gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`; 11512 gesture.imageEl.style.transitionDuration = '300ms'; 11513 gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`; 11514 } 11515 function zoomOut() { 11516 const zoom = swiper.zoom; 11517 const params = swiper.params.zoom; 11518 if (!gesture.slideEl) { 11519 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 11520 gesture.slideEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementChildren)(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0]; 11521 } else { 11522 gesture.slideEl = swiper.slides[swiper.activeIndex]; 11523 } 11524 let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`); 11525 if (imageEl) { 11526 imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0]; 11527 } 11528 gesture.imageEl = imageEl; 11529 if (imageEl) { 11530 gesture.imageWrapEl = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.elementParents)(gesture.imageEl, `.${params.containerClass}`)[0]; 11531 } else { 11532 gesture.imageWrapEl = undefined; 11533 } 11534 } 11535 if (!gesture.imageEl || !gesture.imageWrapEl) return; 11536 if (swiper.params.cssMode) { 11537 swiper.wrapperEl.style.overflow = ''; 11538 swiper.wrapperEl.style.touchAction = ''; 11539 } 11540 zoom.scale = 1; 11541 currentScale = 1; 11542 gesture.imageWrapEl.style.transitionDuration = '300ms'; 11543 gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)'; 11544 gesture.imageEl.style.transitionDuration = '300ms'; 11545 gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)'; 11546 gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`); 11547 gesture.slideEl = undefined; 11548 gesture.originX = 0; 11549 gesture.originY = 0; 11550 } 11551 11552 // Toggle Zoom 11553 function zoomToggle(e) { 11554 const zoom = swiper.zoom; 11555 if (zoom.scale && zoom.scale !== 1) { 11556 // Zoom Out 11557 zoomOut(); 11558 } else { 11559 // Zoom In 11560 zoomIn(e); 11561 } 11562 } 11563 function getListeners() { 11564 const passiveListener = swiper.params.passiveListeners ? { 11565 passive: true, 11566 capture: false 11567 } : false; 11568 const activeListenerWithCapture = swiper.params.passiveListeners ? { 11569 passive: false, 11570 capture: true 11571 } : true; 11572 return { 11573 passiveListener, 11574 activeListenerWithCapture 11575 }; 11576 } 11577 11578 // Attach/Detach Events 11579 function enable() { 11580 const zoom = swiper.zoom; 11581 if (zoom.enabled) return; 11582 zoom.enabled = true; 11583 const { 11584 passiveListener, 11585 activeListenerWithCapture 11586 } = getListeners(); 11587 11588 // Scale image 11589 swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener); 11590 swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture); 11591 ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => { 11592 swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener); 11593 }); 11594 11595 // Move image 11596 swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture); 11597 } 11598 function disable() { 11599 const zoom = swiper.zoom; 11600 if (!zoom.enabled) return; 11601 zoom.enabled = false; 11602 const { 11603 passiveListener, 11604 activeListenerWithCapture 11605 } = getListeners(); 11606 11607 // Scale image 11608 swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener); 11609 swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture); 11610 ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => { 11611 swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener); 11612 }); 11613 11614 // Move image 11615 swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture); 11616 } 11617 on('init', () => { 11618 if (swiper.params.zoom.enabled) { 11619 enable(); 11620 } 11621 }); 11622 on('destroy', () => { 11623 disable(); 11624 }); 11625 on('touchStart', (_s, e) => { 11626 if (!swiper.zoom.enabled) return; 11627 onTouchStart(e); 11628 }); 11629 on('touchEnd', (_s, e) => { 11630 if (!swiper.zoom.enabled) return; 11631 onTouchEnd(e); 11632 }); 11633 on('doubleTap', (_s, e) => { 11634 if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) { 11635 zoomToggle(e); 11636 } 11637 }); 11638 on('transitionEnd', () => { 11639 if (swiper.zoom.enabled && swiper.params.zoom.enabled) { 11640 onTransitionEnd(); 11641 } 11642 }); 11643 on('slideChange', () => { 11644 if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) { 11645 onTransitionEnd(); 11646 } 11647 }); 11648 Object.assign(swiper.zoom, { 11649 enable, 11650 disable, 11651 in: zoomIn, 11652 out: zoomOut, 11653 toggle: zoomToggle 11654 }); 11655} 11656 11657/***/ }), 11658
vendor: 742 bytes, lines 11659-11675
11659/***/ "./node_modules/swiper/shared/classes-to-selector.js": 11660/*!***********************************************************!*\ 11661 !*** ./node_modules/swiper/shared/classes-to-selector.js ***! 11662 \***********************************************************/ 11663/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 11664 11665__webpack_require__.r(__webpack_exports__); 11666/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11667/* harmony export */ "default": function() { return /* binding */ classesToSelector; } 11668/* harmony export */ }); 11669function classesToSelector(classes = '') { 11670 return `.${classes.trim().replace(/([\.:!+\/])/g, '\\$1') // eslint-disable-line 11671 .replace(/ /g, '.')}`; 11672} 11673 11674/***/ }), 11675
vendor: 1,446 bytes, lines 11676-11707
11676/***/ "./node_modules/swiper/shared/create-element-if-not-defined.js": 11677/*!*********************************************************************!*\ 11678 !*** ./node_modules/swiper/shared/create-element-if-not-defined.js ***! 11679 \*********************************************************************/ 11680/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 11681 11682__webpack_require__.r(__webpack_exports__); 11683/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11684/* harmony export */ "default": function() { return /* binding */ createElementIfNotDefined; } 11685/* harmony export */ }); 11686/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ "./node_modules/swiper/shared/utils.js"); 11687 11688function createElementIfNotDefined(swiper, originalParams, params, checkProps) { 11689 if (swiper.params.createElements) { 11690 Object.keys(checkProps).forEach(key => { 11691 if (!params[key] && params.auto === true) { 11692 let element = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementChildren)(swiper.el, `.${checkProps[key]}`)[0]; 11693 if (!element) { 11694 element = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.createElement)('div', checkProps[key]); 11695 element.className = checkProps[key]; 11696 swiper.el.append(element); 11697 } 11698 params[key] = element; 11699 originalParams[key] = element; 11700 } 11701 }); 11702 } 11703 return params; 11704} 11705 11706/***/ }), 11707
vendor: 1,200 bytes, lines 11708-11732
11708/***/ "./node_modules/swiper/shared/create-shadow.js": 11709/*!*****************************************************!*\ 11710 !*** ./node_modules/swiper/shared/create-shadow.js ***! 11711 \*****************************************************/ 11712/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 11713 11714__webpack_require__.r(__webpack_exports__); 11715/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11716/* harmony export */ "default": function() { return /* binding */ createShadow; } 11717/* harmony export */ }); 11718/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ "./node_modules/swiper/shared/utils.js"); 11719 11720function createShadow(params, slideEl, side) { 11721 const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`; 11722 const shadowContainer = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.getSlideTransformEl)(slideEl); 11723 let shadowEl = shadowContainer.querySelector(`.${shadowClass}`); 11724 if (!shadowEl) { 11725 shadowEl = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.createElement)('div', `swiper-slide-shadow${side ? `-${side}` : ''}`); 11726 shadowContainer.append(shadowEl); 11727 } 11728 return shadowEl; 11729} 11730 11731/***/ }), 11732
vendor: 2,345 bytes, lines 11733-11801
11733/***/ "./node_modules/swiper/shared/effect-init.js": 11734/*!***************************************************!*\ 11735 !*** ./node_modules/swiper/shared/effect-init.js ***! 11736 \***************************************************/ 11737/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 11738 11739__webpack_require__.r(__webpack_exports__); 11740/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11741/* harmony export */ "default": function() { return /* binding */ effectInit; } 11742/* harmony export */ }); 11743function effectInit(params) { 11744 const { 11745 effect, 11746 swiper, 11747 on, 11748 setTranslate, 11749 setTransition, 11750 overwriteParams, 11751 perspective, 11752 recreateShadows, 11753 getEffectParams 11754 } = params; 11755 on('beforeInit', () => { 11756 if (swiper.params.effect !== effect) return; 11757 swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`); 11758 if (perspective && perspective()) { 11759 swiper.classNames.push(`${swiper.params.containerModifierClass}3d`); 11760 } 11761 const overwriteParamsResult = overwriteParams ? overwriteParams() : {}; 11762 Object.assign(swiper.params, overwriteParamsResult); 11763 Object.assign(swiper.originalParams, overwriteParamsResult); 11764 }); 11765 on('setTranslate', () => { 11766 if (swiper.params.effect !== effect) return; 11767 setTranslate(); 11768 }); 11769 on('setTransition', (_s, duration) => { 11770 if (swiper.params.effect !== effect) return; 11771 setTransition(duration); 11772 }); 11773 on('transitionEnd', () => { 11774 if (swiper.params.effect !== effect) return; 11775 if (recreateShadows) { 11776 if (!getEffectParams || !getEffectParams().slideShadows) return; 11777 // remove shadows 11778 swiper.slides.forEach(slideEl => { 11779 slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove()); 11780 }); 11781 // create new one 11782 recreateShadows(); 11783 } 11784 }); 11785 let requireUpdateOnVirtual; 11786 on('virtualUpdate', () => { 11787 if (swiper.params.effect !== effect) return; 11788 if (!swiper.slides.length) { 11789 requireUpdateOnVirtual = true; 11790 } 11791 requestAnimationFrame(() => { 11792 if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) { 11793 setTranslate(); 11794 requireUpdateOnVirtual = false; 11795 } 11796 }); 11797 }); 11798} 11799 11800/***/ }), 11801
vendor: 1,028 bytes, lines 11802-11824
11802/***/ "./node_modules/swiper/shared/effect-target.js": 11803/*!*****************************************************!*\ 11804 !*** ./node_modules/swiper/shared/effect-target.js ***! 11805 \*****************************************************/ 11806/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 11807 11808__webpack_require__.r(__webpack_exports__); 11809/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11810/* harmony export */ "default": function() { return /* binding */ effectTarget; } 11811/* harmony export */ }); 11812/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ "./node_modules/swiper/shared/utils.js"); 11813 11814function effectTarget(effectParams, slideEl) { 11815 const transformEl = (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.getSlideTransformEl)(slideEl); 11816 if (transformEl !== slideEl) { 11817 transformEl.style.backfaceVisibility = 'hidden'; 11818 transformEl.style['-webkit-backface-visibility'] = 'hidden'; 11819 } 11820 return transformEl; 11821} 11822 11823/***/ }), 11824
vendor: 2,104 bytes, lines 11825-11882
11825/***/ "./node_modules/swiper/shared/effect-virtual-transition-end.js": 11826/*!*********************************************************************!*\ 11827 !*** ./node_modules/swiper/shared/effect-virtual-transition-end.js ***! 11828 \*********************************************************************/ 11829/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 11830 11831__webpack_require__.r(__webpack_exports__); 11832/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11833/* harmony export */ "default": function() { return /* binding */ effectVirtualTransitionEnd; } 11834/* harmony export */ }); 11835/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils.js */ "./node_modules/swiper/shared/utils.js"); 11836 11837function effectVirtualTransitionEnd({ 11838 swiper, 11839 duration, 11840 transformElements, 11841 allSlides 11842}) { 11843 const { 11844 activeIndex 11845 } = swiper; 11846 const getSlide = el => { 11847 if (!el.parentElement) { 11848 // assume shadow root 11849 const slide = swiper.slides.filter(slideEl => slideEl.shadowEl && slideEl.shadowEl === el.parentNode)[0]; 11850 return slide; 11851 } 11852 return el.parentElement; 11853 }; 11854 if (swiper.params.virtualTranslate && duration !== 0) { 11855 let eventTriggered = false; 11856 let transitionEndTarget; 11857 if (allSlides) { 11858 transitionEndTarget = transformElements; 11859 } else { 11860 transitionEndTarget = transformElements.filter(transformEl => { 11861 const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl; 11862 return swiper.getSlideIndex(el) === activeIndex; 11863 }); 11864 } 11865 transitionEndTarget.forEach(el => { 11866 (0,_utils_js__WEBPACK_IMPORTED_MODULE_0__.elementTransitionEnd)(el, () => { 11867 if (eventTriggered) return; 11868 if (!swiper || swiper.destroyed) return; 11869 eventTriggered = true; 11870 swiper.animating = false; 11871 const evt = new window.CustomEvent('transitionend', { 11872 bubbles: true, 11873 cancelable: true 11874 }); 11875 swiper.wrapperEl.dispatchEvent(evt); 11876 }); 11877 }); 11878 } 11879} 11880 11881/***/ }), 11882
vendor: 1,601 bytes, lines 11883-11925
11883/***/ "./node_modules/swiper/shared/get-browser.js": 11884/*!***************************************************!*\ 11885 !*** ./node_modules/swiper/shared/get-browser.js ***! 11886 \***************************************************/ 11887/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 11888 11889__webpack_require__.r(__webpack_exports__); 11890/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11891/* harmony export */ "getBrowser": function() { return /* binding */ getBrowser; } 11892/* harmony export */ }); 11893/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 11894 11895let browser; 11896function calcBrowser() { 11897 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 11898 let needPerspectiveFix = false; 11899 function isSafari() { 11900 const ua = window.navigator.userAgent.toLowerCase(); 11901 return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0; 11902 } 11903 if (isSafari()) { 11904 const ua = String(window.navigator.userAgent); 11905 if (ua.includes('Version/')) { 11906 const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num)); 11907 needPerspectiveFix = major < 16 || major === 16 && minor < 2; 11908 } 11909 } 11910 return { 11911 isSafari: needPerspectiveFix || isSafari(), 11912 needPerspectiveFix, 11913 isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent) 11914 }; 11915} 11916function getBrowser() { 11917 if (!browser) { 11918 browser = calcBrowser(); 11919 } 11920 return browser; 11921} 11922 11923 11924/***/ }), 11925
vendor: 2,410 bytes, lines 11926-11991
11926/***/ "./node_modules/swiper/shared/get-device.js": 11927/*!**************************************************!*\ 11928 !*** ./node_modules/swiper/shared/get-device.js ***! 11929 \**************************************************/ 11930/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 11931 11932__webpack_require__.r(__webpack_exports__); 11933/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11934/* harmony export */ "getDevice": function() { return /* binding */ getDevice; } 11935/* harmony export */ }); 11936/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 11937/* harmony import */ var _get_support_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./get-support.js */ "./node_modules/swiper/shared/get-support.js"); 11938 11939 11940let deviceCached; 11941function calcDevice({ 11942 userAgent 11943} = {}) { 11944 const support = (0,_get_support_js__WEBPACK_IMPORTED_MODULE_1__.getSupport)(); 11945 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 11946 const platform = window.navigator.platform; 11947 const ua = userAgent || window.navigator.userAgent; 11948 const device = { 11949 ios: false, 11950 android: false 11951 }; 11952 const screenWidth = window.screen.width; 11953 const screenHeight = window.screen.height; 11954 const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line 11955 let ipad = ua.match(/(iPad).*OS\s([\d_]+)/); 11956 const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); 11957 const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); 11958 const windows = platform === 'Win32'; 11959 let macos = platform === 'MacIntel'; 11960 11961 // iPadOs 13 fix 11962 const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810']; 11963 if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) { 11964 ipad = ua.match(/(Version)\/([\d.]+)/); 11965 if (!ipad) ipad = [0, 1, '13_0_0']; 11966 macos = false; 11967 } 11968 11969 // Android 11970 if (android && !windows) { 11971 device.os = 'android'; 11972 device.android = true; 11973 } 11974 if (ipad || iphone || ipod) { 11975 device.os = 'ios'; 11976 device.ios = true; 11977 } 11978 11979 // Export object 11980 return device; 11981} 11982function getDevice(overrides = {}) { 11983 if (!deviceCached) { 11984 deviceCached = calcDevice(overrides); 11985 } 11986 return deviceCached; 11987} 11988 11989 11990/***/ }), 11991
vendor: 1,251 bytes, lines 11992-12022
11992/***/ "./node_modules/swiper/shared/get-support.js": 11993/*!***************************************************!*\ 11994 !*** ./node_modules/swiper/shared/get-support.js ***! 11995 \***************************************************/ 11996/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 11997 11998__webpack_require__.r(__webpack_exports__); 11999/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12000/* harmony export */ "getSupport": function() { return /* binding */ getSupport; } 12001/* harmony export */ }); 12002/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 12003 12004let support; 12005function calcSupport() { 12006 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 12007 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 12008 return { 12009 smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style, 12010 touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch) 12011 }; 12012} 12013function getSupport() { 12014 if (!support) { 12015 support = calcSupport(); 12016 } 12017 return support; 12018} 12019 12020 12021/***/ }), 12022
vendor: 2,291 bytes, lines 12023-12070
12023/***/ "./node_modules/swiper/shared/process-lazy-preloader.js": 12024/*!**************************************************************!*\ 12025 !*** ./node_modules/swiper/shared/process-lazy-preloader.js ***! 12026 \**************************************************************/ 12027/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12028 12029__webpack_require__.r(__webpack_exports__); 12030/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12031/* harmony export */ "preload": function() { return /* binding */ preload; }, 12032/* harmony export */ "processLazyPreloader": function() { return /* binding */ processLazyPreloader; } 12033/* harmony export */ }); 12034const processLazyPreloader = (swiper, imageEl) => { 12035 if (!swiper || swiper.destroyed || !swiper.params) return; 12036 const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`; 12037 const slideEl = imageEl.closest(slideSelector()); 12038 if (slideEl) { 12039 const lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`); 12040 if (lazyEl) lazyEl.remove(); 12041 } 12042}; 12043const unlazy = (swiper, index) => { 12044 if (!swiper.slides[index]) return; 12045 const imageEl = swiper.slides[index].querySelector('[loading="lazy"]'); 12046 if (imageEl) imageEl.removeAttribute('loading'); 12047}; 12048const preload = swiper => { 12049 if (!swiper || swiper.destroyed || !swiper.params) return; 12050 let amount = swiper.params.lazyPreloadPrevNext; 12051 const len = swiper.slides.length; 12052 if (!len || !amount || amount < 0) return; 12053 amount = Math.min(amount, len); 12054 const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView); 12055 const activeIndex = swiper.activeIndex; 12056 const slideIndexLastInView = activeIndex + slidesPerView - 1; 12057 if (swiper.params.rewind) { 12058 for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) { 12059 const realIndex = (i % len + len) % len; 12060 if (realIndex !== activeIndex && realIndex > slideIndexLastInView) unlazy(swiper, realIndex); 12061 } 12062 } else { 12063 for (let i = Math.max(slideIndexLastInView - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) { 12064 if (i !== activeIndex && i > slideIndexLastInView) unlazy(swiper, i); 12065 } 12066 } 12067}; 12068 12069/***/ }), 12070
vendor: 11,684 bytes, lines 12071-12370
12071/***/ "./node_modules/swiper/shared/utils.js": 12072/*!*********************************************!*\ 12073 !*** ./node_modules/swiper/shared/utils.js ***! 12074 \*********************************************/ 12075/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12076 12077__webpack_require__.r(__webpack_exports__); 12078/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12079/* harmony export */ "animateCSSModeScroll": function() { return /* binding */ animateCSSModeScroll; }, 12080/* harmony export */ "createElement": function() { return /* binding */ createElement; }, 12081/* harmony export */ "deleteProps": function() { return /* binding */ deleteProps; }, 12082/* harmony export */ "elementChildren": function() { return /* binding */ elementChildren; }, 12083/* harmony export */ "elementIndex": function() { return /* binding */ elementIndex; }, 12084/* harmony export */ "elementNextAll": function() { return /* binding */ elementNextAll; }, 12085/* harmony export */ "elementOffset": function() { return /* binding */ elementOffset; }, 12086/* harmony export */ "elementOuterSize": function() { return /* binding */ elementOuterSize; }, 12087/* harmony export */ "elementParents": function() { return /* binding */ elementParents; }, 12088/* harmony export */ "elementPrevAll": function() { return /* binding */ elementPrevAll; }, 12089/* harmony export */ "elementStyle": function() { return /* binding */ elementStyle; }, 12090/* harmony export */ "elementTransitionEnd": function() { return /* binding */ elementTransitionEnd; }, 12091/* harmony export */ "extend": function() { return /* binding */ extend; }, 12092/* harmony export */ "findElementsInElements": function() { return /* binding */ findElementsInElements; }, 12093/* harmony export */ "getComputedStyle": function() { return /* binding */ getComputedStyle; }, 12094/* harmony export */ "getSlideTransformEl": function() { return /* binding */ getSlideTransformEl; }, 12095/* harmony export */ "getTranslate": function() { return /* binding */ getTranslate; }, 12096/* harmony export */ "isObject": function() { return /* binding */ isObject; }, 12097/* harmony export */ "nextTick": function() { return /* binding */ nextTick; }, 12098/* harmony export */ "now": function() { return /* binding */ now; }, 12099/* harmony export */ "setCSSProperty": function() { return /* binding */ setCSSProperty; } 12100/* harmony export */ }); 12101/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 12102 12103function deleteProps(obj) { 12104 const object = obj; 12105 Object.keys(object).forEach(key => { 12106 try { 12107 object[key] = null; 12108 } catch (e) { 12109 // no getter for object 12110 } 12111 try { 12112 delete object[key]; 12113 } catch (e) { 12114 // something got wrong 12115 } 12116 }); 12117} 12118function nextTick(callback, delay = 0) { 12119 return setTimeout(callback, delay); 12120} 12121function now() { 12122 return Date.now(); 12123} 12124function getComputedStyle(el) { 12125 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 12126 let style; 12127 if (window.getComputedStyle) { 12128 style = window.getComputedStyle(el, null); 12129 } 12130 if (!style && el.currentStyle) { 12131 style = el.currentStyle; 12132 } 12133 if (!style) { 12134 style = el.style; 12135 } 12136 return style; 12137} 12138function getTranslate(el, axis = 'x') { 12139 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 12140 let matrix; 12141 let curTransform; 12142 let transformMatrix; 12143 const curStyle = getComputedStyle(el, null); 12144 if (window.WebKitCSSMatrix) { 12145 curTransform = curStyle.transform || curStyle.webkitTransform; 12146 if (curTransform.split(',').length > 6) { 12147 curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', '); 12148 } 12149 // Some old versions of Webkit choke when 'none' is passed; pass 12150 // empty string instead in this case 12151 transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); 12152 } else { 12153 transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); 12154 matrix = transformMatrix.toString().split(','); 12155 } 12156 if (axis === 'x') { 12157 // Latest Chrome and webkits Fix 12158 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; 12159 // Crazy IE10 Matrix 12160 else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); 12161 // Normal Browsers 12162 else curTransform = parseFloat(matrix[4]); 12163 } 12164 if (axis === 'y') { 12165 // Latest Chrome and webkits Fix 12166 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; 12167 // Crazy IE10 Matrix 12168 else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); 12169 // Normal Browsers 12170 else curTransform = parseFloat(matrix[5]); 12171 } 12172 return curTransform || 0; 12173} 12174function isObject(o) { 12175 return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object'; 12176} 12177function isNode(node) { 12178 // eslint-disable-next-line 12179 if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') { 12180 return node instanceof HTMLElement; 12181 } 12182 return node && (node.nodeType === 1 || node.nodeType === 11); 12183} 12184function extend(...args) { 12185 const to = Object(args[0]); 12186 const noExtend = ['__proto__', 'constructor', 'prototype']; 12187 for (let i = 1; i < args.length; i += 1) { 12188 const nextSource = args[i]; 12189 if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) { 12190 const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0); 12191 for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { 12192 const nextKey = keysArray[nextIndex]; 12193 const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); 12194 if (desc !== undefined && desc.enumerable) { 12195 if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 12196 if (nextSource[nextKey].__swiper__) { 12197 to[nextKey] = nextSource[nextKey]; 12198 } else { 12199 extend(to[nextKey], nextSource[nextKey]); 12200 } 12201 } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 12202 to[nextKey] = {}; 12203 if (nextSource[nextKey].__swiper__) { 12204 to[nextKey] = nextSource[nextKey]; 12205 } else { 12206 extend(to[nextKey], nextSource[nextKey]); 12207 } 12208 } else { 12209 to[nextKey] = nextSource[nextKey]; 12210 } 12211 } 12212 } 12213 } 12214 } 12215 return to; 12216} 12217function setCSSProperty(el, varName, varValue) { 12218 el.style.setProperty(varName, varValue); 12219} 12220function animateCSSModeScroll({ 12221 swiper, 12222 targetPosition, 12223 side 12224}) { 12225 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 12226 const startPosition = -swiper.translate; 12227 let startTime = null; 12228 let time; 12229 const duration = swiper.params.speed; 12230 swiper.wrapperEl.style.scrollSnapType = 'none'; 12231 window.cancelAnimationFrame(swiper.cssModeFrameID); 12232 const dir = targetPosition > startPosition ? 'next' : 'prev'; 12233 const isOutOfBound = (current, target) => { 12234 return dir === 'next' && current >= target || dir === 'prev' && current <= target; 12235 }; 12236 const animate = () => { 12237 time = new Date().getTime(); 12238 if (startTime === null) { 12239 startTime = time; 12240 } 12241 const progress = Math.max(Math.min((time - startTime) / duration, 1), 0); 12242 const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2; 12243 let currentPosition = startPosition + easeProgress * (targetPosition - startPosition); 12244 if (isOutOfBound(currentPosition, targetPosition)) { 12245 currentPosition = targetPosition; 12246 } 12247 swiper.wrapperEl.scrollTo({ 12248 [side]: currentPosition 12249 }); 12250 if (isOutOfBound(currentPosition, targetPosition)) { 12251 swiper.wrapperEl.style.overflow = 'hidden'; 12252 swiper.wrapperEl.style.scrollSnapType = ''; 12253 setTimeout(() => { 12254 swiper.wrapperEl.style.overflow = ''; 12255 swiper.wrapperEl.scrollTo({ 12256 [side]: currentPosition 12257 }); 12258 }); 12259 window.cancelAnimationFrame(swiper.cssModeFrameID); 12260 return; 12261 } 12262 swiper.cssModeFrameID = window.requestAnimationFrame(animate); 12263 }; 12264 animate(); 12265} 12266function getSlideTransformEl(slideEl) { 12267 return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowEl && slideEl.shadowEl.querySelector('.swiper-slide-transform') || slideEl; 12268} 12269function findElementsInElements(elements = [], selector = '') { 12270 const found = []; 12271 elements.forEach(el => { 12272 found.push(...el.querySelectorAll(selector)); 12273 }); 12274 return found; 12275} 12276function elementChildren(element, selector = '') { 12277 return [...element.children].filter(el => el.matches(selector)); 12278} 12279function createElement(tag, classes = []) { 12280 const el = document.createElement(tag); 12281 el.classList.add(...(Array.isArray(classes) ? classes : [classes])); 12282 return el; 12283} 12284function elementOffset(el) { 12285 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 12286 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 12287 const box = el.getBoundingClientRect(); 12288 const body = document.body; 12289 const clientTop = el.clientTop || body.clientTop || 0; 12290 const clientLeft = el.clientLeft || body.clientLeft || 0; 12291 const scrollTop = el === window ? window.scrollY : el.scrollTop; 12292 const scrollLeft = el === window ? window.scrollX : el.scrollLeft; 12293 return { 12294 top: box.top + scrollTop - clientTop, 12295 left: box.left + scrollLeft - clientLeft 12296 }; 12297} 12298function elementPrevAll(el, selector) { 12299 const prevEls = []; 12300 while (el.previousElementSibling) { 12301 const prev = el.previousElementSibling; // eslint-disable-line 12302 if (selector) { 12303 if (prev.matches(selector)) prevEls.push(prev); 12304 } else prevEls.push(prev); 12305 el = prev; 12306 } 12307 return prevEls; 12308} 12309function elementNextAll(el, selector) { 12310 const nextEls = []; 12311 while (el.nextElementSibling) { 12312 const next = el.nextElementSibling; // eslint-disable-line 12313 if (selector) { 12314 if (next.matches(selector)) nextEls.push(next); 12315 } else nextEls.push(next); 12316 el = next; 12317 } 12318 return nextEls; 12319} 12320function elementStyle(el, prop) { 12321 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 12322 return window.getComputedStyle(el, null).getPropertyValue(prop); 12323} 12324function elementIndex(el) { 12325 let child = el; 12326 let i; 12327 if (child) { 12328 i = 0; 12329 // eslint-disable-next-line 12330 while ((child = child.previousSibling) !== null) { 12331 if (child.nodeType === 1) i += 1; 12332 } 12333 return i; 12334 } 12335 return undefined; 12336} 12337function elementParents(el, selector) { 12338 const parents = []; // eslint-disable-line 12339 let parent = el.parentElement; // eslint-disable-line 12340 while (parent) { 12341 if (selector) { 12342 if (parent.matches(selector)) parents.push(parent); 12343 } else { 12344 parents.push(parent); 12345 } 12346 parent = parent.parentElement; 12347 } 12348 return parents; 12349} 12350function elementTransitionEnd(el, callback) { 12351 function fireCallBack(e) { 12352 if (e.target !== el) return; 12353 callback.call(el, e); 12354 el.removeEventListener('transitionend', fireCallBack); 12355 } 12356 if (callback) { 12357 el.addEventListener('transitionend', fireCallBack); 12358 } 12359} 12360function elementOuterSize(el, size, includeMargins) { 12361 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 12362 if (includeMargins) { 12363 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')); 12364 } 12365 return el.offsetWidth; 12366} 12367 12368 12369/***/ }), 12370
vendor: 9,443 bytes, lines 12371-12466
12371/***/ "./node_modules/swiper/swiper.esm.js": 12372/*!*******************************************!*\ 12373 !*** ./node_modules/swiper/swiper.esm.js ***! 12374 \*******************************************/ 12375/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12376 12377__webpack_require__.r(__webpack_exports__); 12378/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12379/* harmony export */ "A11y": function() { return /* reexport safe */ _modules_a11y_a11y_js__WEBPACK_IMPORTED_MODULE_10__["default"]; }, 12380/* harmony export */ "Autoplay": function() { return /* reexport safe */ _modules_autoplay_autoplay_js__WEBPACK_IMPORTED_MODULE_13__["default"]; }, 12381/* harmony export */ "Controller": function() { return /* reexport safe */ _modules_controller_controller_js__WEBPACK_IMPORTED_MODULE_9__["default"]; }, 12382/* harmony export */ "EffectCards": function() { return /* reexport safe */ _modules_effect_cards_effect_cards_js__WEBPACK_IMPORTED_MODULE_23__["default"]; }, 12383/* harmony export */ "EffectCoverflow": function() { return /* reexport safe */ _modules_effect_coverflow_effect_coverflow_js__WEBPACK_IMPORTED_MODULE_21__["default"]; }, 12384/* harmony export */ "EffectCreative": function() { return /* reexport safe */ _modules_effect_creative_effect_creative_js__WEBPACK_IMPORTED_MODULE_22__["default"]; }, 12385/* harmony export */ "EffectCube": function() { return /* reexport safe */ _modules_effect_cube_effect_cube_js__WEBPACK_IMPORTED_MODULE_19__["default"]; }, 12386/* harmony export */ "EffectFade": function() { return /* reexport safe */ _modules_effect_fade_effect_fade_js__WEBPACK_IMPORTED_MODULE_18__["default"]; }, 12387/* harmony export */ "EffectFlip": function() { return /* reexport safe */ _modules_effect_flip_effect_flip_js__WEBPACK_IMPORTED_MODULE_20__["default"]; }, 12388/* harmony export */ "FreeMode": function() { return /* reexport safe */ _modules_free_mode_free_mode_js__WEBPACK_IMPORTED_MODULE_15__["default"]; }, 12389/* harmony export */ "Grid": function() { return /* reexport safe */ _modules_grid_grid_js__WEBPACK_IMPORTED_MODULE_16__["default"]; }, 12390/* harmony export */ "HashNavigation": function() { return /* reexport safe */ _modules_hash_navigation_hash_navigation_js__WEBPACK_IMPORTED_MODULE_12__["default"]; }, 12391/* harmony export */ "History": function() { return /* reexport safe */ _modules_history_history_js__WEBPACK_IMPORTED_MODULE_11__["default"]; }, 12392/* harmony export */ "Keyboard": function() { return /* reexport safe */ _modules_keyboard_keyboard_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }, 12393/* harmony export */ "Manipulation": function() { return /* reexport safe */ _modules_manipulation_manipulation_js__WEBPACK_IMPORTED_MODULE_17__["default"]; }, 12394/* harmony export */ "Mousewheel": function() { return /* reexport safe */ _modules_mousewheel_mousewheel_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }, 12395/* harmony export */ "Navigation": function() { return /* reexport safe */ _modules_navigation_navigation_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }, 12396/* harmony export */ "Pagination": function() { return /* reexport safe */ _modules_pagination_pagination_js__WEBPACK_IMPORTED_MODULE_5__["default"]; }, 12397/* harmony export */ "Parallax": function() { return /* reexport safe */ _modules_parallax_parallax_js__WEBPACK_IMPORTED_MODULE_7__["default"]; }, 12398/* harmony export */ "Scrollbar": function() { return /* reexport safe */ _modules_scrollbar_scrollbar_js__WEBPACK_IMPORTED_MODULE_6__["default"]; }, 12399/* harmony export */ "Swiper": function() { return /* reexport safe */ _core_core_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }, 12400/* harmony export */ "Thumbs": function() { return /* reexport safe */ _modules_thumbs_thumbs_js__WEBPACK_IMPORTED_MODULE_14__["default"]; }, 12401/* harmony export */ "Virtual": function() { return /* reexport safe */ _modules_virtual_virtual_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }, 12402/* harmony export */ "Zoom": function() { return /* reexport safe */ _modules_zoom_zoom_js__WEBPACK_IMPORTED_MODULE_8__["default"]; }, 12403/* harmony export */ "default": function() { return /* reexport safe */ _core_core_js__WEBPACK_IMPORTED_MODULE_0__["default"]; } 12404/* harmony export */ }); 12405/* harmony import */ var _core_core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/core.js */ "./node_modules/swiper/core/core.js"); 12406/* harmony import */ var _modules_virtual_virtual_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/virtual/virtual.js */ "./node_modules/swiper/modules/virtual/virtual.js"); 12407/* harmony import */ var _modules_keyboard_keyboard_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/keyboard/keyboard.js */ "./node_modules/swiper/modules/keyboard/keyboard.js"); 12408/* harmony import */ var _modules_mousewheel_mousewheel_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/mousewheel/mousewheel.js */ "./node_modules/swiper/modules/mousewheel/mousewheel.js"); 12409/* harmony import */ var _modules_navigation_navigation_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/navigation/navigation.js */ "./node_modules/swiper/modules/navigation/navigation.js"); 12410/* harmony import */ var _modules_pagination_pagination_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/pagination/pagination.js */ "./node_modules/swiper/modules/pagination/pagination.js"); 12411/* harmony import */ var _modules_scrollbar_scrollbar_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/scrollbar/scrollbar.js */ "./node_modules/swiper/modules/scrollbar/scrollbar.js"); 12412/* harmony import */ var _modules_parallax_parallax_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/parallax/parallax.js */ "./node_modules/swiper/modules/parallax/parallax.js"); 12413/* harmony import */ var _modules_zoom_zoom_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/zoom/zoom.js */ "./node_modules/swiper/modules/zoom/zoom.js"); 12414/* harmony import */ var _modules_controller_controller_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./modules/controller/controller.js */ "./node_modules/swiper/modules/controller/controller.js"); 12415/* harmony import */ var _modules_a11y_a11y_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/a11y/a11y.js */ "./node_modules/swiper/modules/a11y/a11y.js"); 12416/* harmony import */ var _modules_history_history_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/history/history.js */ "./node_modules/swiper/modules/history/history.js"); 12417/* harmony import */ var _modules_hash_navigation_hash_navigation_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modules/hash-navigation/hash-navigation.js */ "./node_modules/swiper/modules/hash-navigation/hash-navigation.js"); 12418/* harmony import */ var _modules_autoplay_autoplay_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./modules/autoplay/autoplay.js */ "./node_modules/swiper/modules/autoplay/autoplay.js"); 12419/* harmony import */ var _modules_thumbs_thumbs_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./modules/thumbs/thumbs.js */ "./node_modules/swiper/modules/thumbs/thumbs.js"); 12420/* harmony import */ var _modules_free_mode_free_mode_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./modules/free-mode/free-mode.js */ "./node_modules/swiper/modules/free-mode/free-mode.js"); 12421/* harmony import */ var _modules_grid_grid_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./modules/grid/grid.js */ "./node_modules/swiper/modules/grid/grid.js"); 12422/* harmony import */ var _modules_manipulation_manipulation_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modules/manipulation/manipulation.js */ "./node_modules/swiper/modules/manipulation/manipulation.js"); 12423/* harmony import */ var _modules_effect_fade_effect_fade_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./modules/effect-fade/effect-fade.js */ "./node_modules/swiper/modules/effect-fade/effect-fade.js"); 12424/* harmony import */ var _modules_effect_cube_effect_cube_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./modules/effect-cube/effect-cube.js */ "./node_modules/swiper/modules/effect-cube/effect-cube.js"); 12425/* harmony import */ var _modules_effect_flip_effect_flip_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./modules/effect-flip/effect-flip.js */ "./node_modules/swiper/modules/effect-flip/effect-flip.js"); 12426/* harmony import */ var _modules_effect_coverflow_effect_coverflow_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./modules/effect-coverflow/effect-coverflow.js */ "./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js"); 12427/* harmony import */ var _modules_effect_creative_effect_creative_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./modules/effect-creative/effect-creative.js */ "./node_modules/swiper/modules/effect-creative/effect-creative.js"); 12428/* harmony import */ var _modules_effect_cards_effect_cards_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./modules/effect-cards/effect-cards.js */ "./node_modules/swiper/modules/effect-cards/effect-cards.js"); 12429/** 12430 * Swiper 9.3.2 12431 * Most modern mobile touch slider and framework with hardware accelerated transitions 12432 * https://swiperjs.com 12433 * 12434 * Copyright 2014-2023 Vladimir Kharlampidi 12435 * 12436 * Released under the MIT License 12437 * 12438 * Released on: May 15, 2023 12439 */ 12440 12441 12442 12443 12444 12445 12446 12447 12448 12449 12450 12451 12452 12453 12454 12455 12456 12457 12458 12459 12460 12461 12462 12463 12464 12465 12466/***/ })
12466 12467 12468/******/ }); 12469/************************************************************************/ 12470/******/ // The module cache 12471/******/ var __webpack_module_cache__ = {}; 12472/******/ 12473/******/ // The require function 12474/******/ function __webpack_require__(moduleId) { 12475/******/ // Check if module is in cache 12476/******/ var cachedModule = __webpack_module_cache__[moduleId]; 12477/******/ if (cachedModule !== undefined) { 12478/******/ return cachedModule.exports; 12479/******/ } 12480/******/ // Create a new module (and put it into the cache) 12481/******/ var module = __webpack_module_cache__[moduleId] = { 12482/******/ // no module.id needed 12483/******/ // no module.loaded needed 12484/******/ exports: {} 12485/******/ }; 12486/******/ 12487/******/ // Execute the module function 12488/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 12489/******/ 12490/******/ // Return the exports of the module 12491/******/ return module.exports; 12492/******/ } 12493/******/ 12494/************************************************************************/ 12495/******/ /* webpack/runtime/define property getters */ 12496/******/ !function() { 12497/******/ // define getter functions for harmony exports 12498/******/ __webpack_require__.d = function(exports, definition) { 12499/******/ for(var key in definition) { 12500/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 12501/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 12502/******/ } 12503/******/ } 12504/******/ }; 12505/******/ }(); 12506/******/ 12507/******/ /* webpack/runtime/hasOwnProperty shorthand */ 12508/******/ !function() { 12509/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } 12510/******/ }(); 12511/******/ 12512/******/ /* webpack/runtime/make namespace object */ 12513/******/ !function() { 12514/******/ // define __esModule on exports 12515/******/ __webpack_require__.r = function(exports) { 12516/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 12517/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 12518/******/ } 12519/******/ Object.defineProperty(exports, '__esModule', { value: true }); 12520/******/ }; 12521/******/ }(); 12522/******/ 12523/************************************************************************/ 12524var __webpack_exports__ = {}; 12525// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. 12526!function() { 12527/*!*********************************************************************!*\ 12528 !*** ./cartridges/app_purina/cartridge/client/default/js/search.js ***! 12529 \*********************************************************************/ 12530 12531 12532var processInclude = __webpack_require__(/*! purina_core/util */ "./cartridges/app_purina_core/cartridge/client/default/js/util.js"); 12533 12534$(document).ready(function () { 12535 processInclude(__webpack_require__(/*! ./search/search */ "./cartridges/app_purina/cartridge/client/default/js/search/search.js")); 12536 processInclude(__webpack_require__(/*! purina_core/product/quickView */ "./cartridges/app_purina_core/cartridge/client/default/js/product/quickView.js")); 12537}); 12538 12539}(); 12540/******/ })() 12541; 12542//# sourceMappingURL=search.js.map
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.