1/******/ (function() { // webpackBootstrap 2/******/ "use strict"; 3/******/ var __webpack_modules__ = ({ 4
5/***/ "./src/assets/js/utils/Gnav.js": 6/*!*************************************!*\ 7 !*** ./src/assets/js/utils/Gnav.js ***! 8 \*************************************/ 9/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 10 11__webpack_require__.r(__webpack_exports__); 12/* harmony import */ var _Parallax__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Parallax */ "./src/assets/js/utils/Parallax.js"); 13 14/* harmony default export */ __webpack_exports__["default"] = (class { 15 constructor() { 16 // â¼ ã°ãã¼ãã«ã¡ãã¥ã¼ 17 const gnavOpen = document.querySelectorAll("#gnavOpen a"); 18 const gnavClose = document.querySelectorAll("#gnavClose, .gnavBg"); 19 const gnavOpenArray = Array.prototype.slice.call(gnavOpen, 0); 20 const gnavCloseArray = Array.prototype.slice.call(gnavClose, 0); 21 gnavOpenArray.forEach(element => { 22 element.addEventListener("click", function (e) { 23 document.querySelector("body").classList.add("-gnavOpen"); 24 _Parallax__WEBPACK_IMPORTED_MODULE_0__.lenis.stop(); 25 e.preventDefault(); 26 }, false); 27 }); 28 gnavCloseArray.forEach(element => { 29 element.addEventListener("click", function (e) { 30 document.querySelector("body").classList.remove("-gnavOpen"); 31 _Parallax__WEBPACK_IMPORTED_MODULE_0__.lenis.start(); 32 e.preventDefault(); 33 }, false); 34 }); 35 } 36}); 37 38/***/ }), 39
40/***/ "./src/assets/js/utils/Parallax.js": 41/*!*****************************************!*\ 42 !*** ./src/assets/js/utils/Parallax.js ***! 43 \*****************************************/ 44/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 45 46__webpack_require__.r(__webpack_exports__); 47/* harmony export */ __webpack_require__.d(__webpack_exports__, { 48/* harmony export */ lenis: function() { return /* binding */ lenis; } 49/* harmony export */ }); 50/* harmony import */ var gsap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! gsap */ "./node_modules/gsap/index.js"); 51/* harmony import */ var gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! gsap/ScrollTrigger */ "./node_modules/gsap/ScrollTrigger.js"); 52/* harmony import */ var _studio_freight_lenis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @studio-freight/lenis */ "./node_modules/@studio-freight/lenis/dist/lenis.modern.mjs"); 53 54 55 56const lenis = new _studio_freight_lenis__WEBPACK_IMPORTED_MODULE_0__["default"]({ 57 wheelMultiplier: 0.6 58}); 59lenis.on("scroll", e => { 60 // console.log(e); 61}); 62function raf(time) { 63 lenis.raf(time); 64 requestAnimationFrame(raf); 65} 66requestAnimationFrame(raf); 67const mm = 767; // matchMedia(SP) 68 69gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.registerPlugin(gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_2__.ScrollTrigger); 70 71// SmoothScroll 72class SmoothScroll { 73 constructor() { 74 this._initSmoothScroll(); 75 } 76 _initSmoothScroll() { 77 const smoothScrollTrigger = document.querySelectorAll('a[href^="#"]'); 78 for (let i = 0; i < smoothScrollTrigger.length; i++) { 79 smoothScrollTrigger[i].addEventListener("click", e => { 80 e.preventDefault(); 81 let href = smoothScrollTrigger[i].getAttribute("href"); 82 let targetElement = document.getElementById(href.replace("#", "")); 83 const rect = targetElement.getBoundingClientRect().top; 84 const offset = window.pageYOffset; 85 const gap = 0; 86 const target = rect + offset - gap; 87 window.scrollTo({ 88 top: target, 89 behavior: "smooth" 90 }); 91 }); 92 } 93 } 94} 95document.addEventListener("DOMContentLoaded", () => { 96 new SmoothScroll(); 97}, false); 98/* harmony default export */ __webpack_exports__["default"] = (class { 99 constructor() { 100 let element; 101 102 // â¼ PAGE TOP 103 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.from(".pageTop", { 104 autoAlpha: 0, 105 scrollTrigger: { 106 trigger: "#wrapper", 107 start: window.innerHeight + " top", 108 toggleActions: "play none none reverse" 109 // markers: true, 110 } 111 }); 112 // â¼ ãããã¼ãé»èæ¯ã«éãªã£ããè²å転ç¨Classä»ä¸ 113 element = document.querySelectorAll("section.-black, .pageHeader"); 114 if (element) { 115 for (let index = 0; index < element.length; index++) { 116 const item = element[index]; 117 gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_2__.ScrollTrigger.create({ 118 trigger: item, 119 start: "top-=40 top", 120 end: "bottom-=40 top", 121 toggleClass: { 122 targets: ".l-header", 123 className: "-white" 124 } 125 // markers: true, 126 }); 127 } 128 } 129 // â¼ TOP MVãã¹ã¯ãã¼ã«ããããã§ã¼ãã¢ã¦ã 130 element = document.querySelector("section.mv"); 131 if (element) { 132 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.to(element, { 133 autoAlpha: 0, 134 scrollTrigger: { 135 trigger: "section.mv", 136 start: "30% top", 137 // scrub: true, 138 toggleActions: "play none none reverse" 139 // markers: true, 140 } 141 }); 142 } 143 // â¼ TOP SHOP NEWS & TOPICSèæ¯ãã§ã¼ã 144 element = document.querySelector(".sec-topTopics .topTopics_bgW"); 145 if (element) { 146 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.to(element, { 147 autoAlpha: 0, 148 scrollTrigger: { 149 trigger: ".sec-topTopics", 150 start: "-20% top", 151 end: "40% top", 152 toggleActions: "play none none reverse", 153 scrub: true 154 // markers: true, 155 } 156 }); 157 } 158 159 element = document.querySelector(".sec-topTopics"); 160 if (element) { 161 gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_2__.ScrollTrigger.create({ 162 trigger: element, 163 start: "-100 bottom", 164 end: "bottom top", 165 toggleClass: { 166 targets: ".sec-topTopics", 167 className: "gsap-topTopicsBG" 168 } 169 // markers: true, 170 }); 171 } 172 // gsap.utils.toArray("section").forEach((target) => { 173 // ScrollTrigger.create({ 174 // trigger: target, 175 // start: "top bottom", 176 // end: "bottom top", 177 // toggleClass: { targets: target, className: "gsap-topTopicsBG" }, 178 // markers: true, 179 // }); 180 // }); 181 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.matchMedia().add("(min-width:" + (mm + 1) + "px)", () => { 182 // â¼ TOP SHOP NEWS & TOPICSã¿ã¤ãã«ãã§ã¼ã 183 element = document.querySelector(".sec-topTopics .title-section"); 184 if (element) { 185 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.from(element, { 186 autoAlpha: 0, 187 scrollTrigger: { 188 trigger: ".sec-topTopics", 189 start: "40% center", 190 // end: "bottom bottom", 191 toggleActions: "play none none reverse" 192 // scrub: true, 193 // markers: true, 194 } 195 }); 196 // â¼ TOP SHOP NEWS & TOPICSã¿ã¤ãã«åºå® 197 gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_2__.ScrollTrigger.create({ 198 pinnedContainer: ".sec-topTopics", 199 trigger: element, 200 pin: true, 201 start: "top top", 202 endTrigger: ".sec-topTopics + section", 203 end: "top bottom", 204 pinSpacing: false 205 // markers: true, 206 }); 207 }
208 // â¼ TOP SHOP NEWS & TOPICS ã«ã¼ããã§ã¼ãã¤ã³ 209 element = document.querySelector(".sec-topTopics .list-topTopics_item"); 210 if (element) { 211 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.from(element, { 212 autoAlpha: 0, 213 y: "15%", 214 duration: 1, 215 scrollTrigger: { 216 trigger: ".sec-topTopics", 217 start: "30% center", 218 toggleActions: "play none none reverse" 219 // markers: true, 220 }, 221 222 stagger: { 223 from: "start", 224 amount: 0.5 225 } 226 }); 227 } 228 }); 229 // â¼ TOP ABOUTç»åãã©ã©ãã¯ã¹ 230 element = document.querySelector(".topAbout_item"); 231 if (element) { 232 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.utils.toArray(".topAbout_item").forEach(target => { 233 const dataY = target.getAttribute("data-y") || 1000; 234 // console.log(dataY); 235 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.fromTo(target, { 236 y: dataY * 10 237 }, { 238 y: dataY * -2, 239 scrollTrigger: { 240 trigger: ".topAbout", 241 start: "0% center", 242 end: "300% center", 243 scrub: true, 244 toggleActions: "play none none reverse" 245 // markers: true, 246 } 247 }); 248 }); 249 } 250 // â¼ TOP ABOUTç»åããªãã³ã°ãã©ã©ãã¯ã¹ 251 element = document.querySelector(".topAbout_item img"); 252 if (element) { 253 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.utils.toArray(".topAbout_item img").forEach(target => { 254 const imgH = target.clientHeight; 255 const maskH = target.parentNode.clientHeight; 256 // console.log({ imgH, maskH }); 257 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.fromTo(target, { 258 y: 0 259 }, { 260 y: -(imgH - maskH), 261 scrollTrigger: { 262 trigger: ".topAbout", 263 start: "0% center", 264 end: "200% top", 265 scrub: true, 266 toggleActions: "play none none reverse" 267 // markers: true, 268 } 269 }); 270 }); 271 } 272 // â¼ TOP ABOUT åºå®è¡¨ç¤º 273 element = document.querySelector(".sec-topAbout"); 274 if (element) { 275 gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_2__.ScrollTrigger.create({ 276 pinnedContainer: element, 277 trigger: element, 278 pin: true, 279 start: "16.667% top", 280 // end: "200% top", 281 invalidateOnRefresh: true 282 // markers: true, 283 }); 284 } 285 // â¼ TOP ABOUT èæ¯ã¢ãã¡ã¼ã·ã§ã³éå§ 286 element = document.querySelector(".topAbout_images"); 287 if (element) { 288 gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_2__.ScrollTrigger.create({ 289 trigger: element, 290 start: "-50% top", 291 toggleClass: { 292 targets: ".sec-topAbout", 293 className: "js-action" 294 }, 295 once: true 296 // markers: true, 297 }); 298 } 299 // â¼ TOP ABOUT ã³ã³ãã³ããã§ã¼ãã¤ã³ 300 element = document.querySelector(".sec-topAbout .title-section"); 301 if (element) { 302 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.from(element, { 303 autoAlpha: 0, 304 delay: 2, 305 scrollTrigger: { 306 trigger: ".topAbout_images", 307 start: "-50% top", 308 toggleActions: "play none none reverse" 309 // markers: true, 310 } 311 }); 312 } 313 314 element = document.querySelector(".sec-topAbout .topAbout_images"); 315 if (element) { 316 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.from(element, { 317 autoAlpha: 0, 318 scrollTrigger: { 319 trigger: ".topAbout_images", 320 start: "-50% top", 321 toggleActions: "play none none reverse" 322 // markers: true, 323 } 324 }); 325 } 326 327 element = document.querySelector(".sec-topAbout .topAbout_text *"); 328 if (element) { 329 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.from(element, { 330 autoAlpha: 0, 331 delay: 2.5, 332 scrollTrigger: { 333 trigger: ".topAbout_images", 334 start: "-50% top", 335 toggleActions: "play none none reverse" 336 // markers: true, 337 } 338 }); 339 } 340 // â¼ TOP ACCESS ããã 341 element = document.querySelector(".sec-topAccess .accessMap_pin"); 342 if (element) { 343 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.from(element, { 344 autoAlpha: 0, 345 y: 30, 346 duration: 1.5, 347 scrollTrigger: { 348 trigger: ".access", 349 start: "bottom bottom", 350 toggleActions: "play none none reverse" 351 // markers: true, 352 } 353 }); 354 } 355 356 element = document.querySelector(".sec-topAccess .accessMap_load"); 357 if (element) { 358 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.from(element, { 359 autoAlpha: 0, 360 y: -30, 361 duration: 1.5, 362 scrollTrigger: { 363 trigger: ".access", 364 start: "bottom bottom", 365 toggleActions: "play none none reverse" 366 // markers: true, 367 } 368 }); 369 } 370 371 element = document.querySelector(".sec-topAccess .accessMap_building"); 372 if (element) { 373 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.from(element, { 374 autoAlpha: 0, 375 scrollTrigger: { 376 trigger: ".access", 377 start: "bottom bottom", 378 toggleActions: "play none none reverse" 379 // markers: true, 380 } 381 }); 382 } 383 // â¼ ãµã¤ãã¢ã³ã«ã¼ã¡ãã¥ã¼ãé»èæ¯ã«éãªã£ããå転ç¨Classä»ä¸ 384 element = document.querySelectorAll(".sideAnchorMenu_item"); 385 if (element.length) { 386 const backElement = document.querySelectorAll('[class^="sec-"], [class*=" sec-"]'); 387 const sectionElement = document.querySelectorAll("section"); 388 for (let i = 0; i < element.length; i++) { 389 for (let index = 0; index < backElement.length; index++) { 390 const item = backElement[index]; 391 if (item.classList.contains("-black")) { 392 const triggerPos = element[i].getBoundingClientRect().top + element[i].clientHeight / 2; 393 gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_2__.ScrollTrigger.create({ 394 trigger: item, 395 start: "top top+=" + triggerPos,
396 end: "bottom top+=" + triggerPos, 397 toggleClass: { 398 targets: element[i], 399 className: "-white" 400 } 401 // markers: true, 402 }); 403 } 404 } 405 } 406 407 for (let i = 0; i < sectionElement.length; i++) { 408 const sectionId = sectionElement[i].id; 409 const sectionAnc = document.querySelector('.sideAnchorMenu_item a[href="#' + sectionId + '"]'); 410 // console.log(sectionAnc); 411 gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_2__.ScrollTrigger.create({ 412 trigger: sectionElement[i], 413 start: "top top+=1", 414 end: "bottom top+=1", 415 toggleClass: { 416 targets: sectionAnc.parentNode, 417 className: "-active" 418 } 419 // markers: true, 420 }); 421 422 if (i === 0) { 423 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.from(".sideAnchorMenu", { 424 autoAlpha: 0, 425 x: 20, 426 scrollTrigger: { 427 trigger: sectionElement[i], 428 start: "top top+=1", 429 toggleActions: "play none none reverse" 430 // markers: true, 431 } 432 }); 433 } 434 435 gsap_ScrollTrigger__WEBPACK_IMPORTED_MODULE_2__.ScrollTrigger.create({ 436 trigger: sectionElement[i], 437 start: "top-=300 top", 438 end: "top+=100 top", 439 snap: { 440 snapTo: [0.75], 441 delay: 0, 442 // duration: { min: 0, max: 3 }, 443 duration: 1, 444 ease: "none" 445 } 446 // markers: true, 447 }); 448 } 449 } 450 // â¼ é座ãã¬ã¤ã¹ã«ã¤ãã¦MV 451 element = document.querySelector(".aboutHeader_img img"); 452 if (element) { 453 gsap__WEBPACK_IMPORTED_MODULE_1__.gsap.to(element, { 454 y: element.clientHeight / 4, 455 ease: "none", 456 scrollTrigger: { 457 trigger: ".aboutHeader_img", 458 start: "top top", 459 scrub: true, 460 toggleActions: "play none none reverse" 461 // markers: true, 462 } 463 }); 464 } 465 } 466}); 467 468/***/ }), 469
470/***/ "./src/assets/js/utils/Popup.js": 471/*!**************************************!*\ 472 !*** ./src/assets/js/utils/Popup.js ***! 473 \**************************************/ 474/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 475 476__webpack_require__.r(__webpack_exports__); 477/* harmony import */ var js_cookie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! js-cookie */ "./node_modules/js-cookie/dist/js.cookie.mjs"); 478/* harmony import */ var _Parallax__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Parallax */ "./src/assets/js/utils/Parallax.js"); 479/* harmony import */ var _TopMv__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TopMv */ "./src/assets/js/utils/TopMv.js"); 480 481 482 483/* harmony default export */ __webpack_exports__["default"] = (class { 484 constructor() { 485 const testMode = false; 486 let myCookie = js_cookie__WEBPACK_IMPORTED_MODULE_0__["default"].get("hide_popup"); 487 const popup_bg = document.querySelector(".popupAd_inner"); 488 const close = document.querySelector(".popupAd_close"); 489 if (!myCookie && close || testMode) { 490 _Parallax__WEBPACK_IMPORTED_MODULE_1__.lenis.stop(); 491 document.body.classList.add("-popupOpen"); 492 popup_bg.addEventListener("click", popupClose); 493 close.addEventListener("click", popupClose); 494 } 495 function popupClose(e) { 496 if (e.target != e.currentTarget) return; 497 _Parallax__WEBPACK_IMPORTED_MODULE_1__.lenis.start(); 498 document.body.classList.remove("-popupOpen"); 499 myCookie = 1; 500 js_cookie__WEBPACK_IMPORTED_MODULE_0__["default"].set("hide_popup", myCookie, { 501 expires: 1, 502 path: "" 503 }); 504 new _TopMv__WEBPACK_IMPORTED_MODULE_2__["default"](2000); 505 } 506 } 507}); 508 509/***/ }), 510
511/***/ "./src/assets/js/utils/ScrollAnim.js": 512/*!*******************************************!*\ 513 !*** ./src/assets/js/utils/ScrollAnim.js ***! 514 \*******************************************/ 515/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 516 517__webpack_require__.r(__webpack_exports__); 518/* harmony default export */ __webpack_exports__["default"] = (class { 519 constructor() { 520 const targetClass = "-target"; 521 const actionClass = "-action"; 522 const readyClass = "-ready"; 523 const options = { 524 rootMargin: "0px 0px -10%", 525 // threshold: [0, 0.2, 0.4, 0.6, 0.8, 1] 526 // threshold: [0.2, 0.8] 527 // threshold: 0, 528 threshold: [0, 0.05, 0.95, 1] 529 }; 530 const callback = (entries, observer) => { 531 entries.forEach(entry => { 532 if (entry.intersectionRatio > 0) { 533 entry.target.classList.add(actionClass); 534 } else if (entry.intersectionRatio === 0) { 535 // entry.target.classList.remove("-action"); // ç»é¢å¤ã«åºããã¢ãã¡ã¼ã·ã§ã³ããªã»ãããã 536 } 537 }); 538 }; 539 const observer = new IntersectionObserver(callback, options); 540 const observers = [...document.querySelectorAll("." + targetClass + ', [class^="sec-"], [class*=" sec-"], section.mv')]; 541 observers.forEach(el => { 542 el.classList.add(readyClass); 543 observer.observe(el); 544 }); 545 } 546}); 547 548/***/ }), 549
550/***/ "./src/assets/js/utils/Swiper.js": 551/*!***************************************!*\ 552 !*** ./src/assets/js/utils/Swiper.js ***! 553 \***************************************/ 554/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 555 556__webpack_require__.r(__webpack_exports__); 557/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ "./node_modules/swiper/swiper.esm.js"); 558 559/* harmony default export */ __webpack_exports__["default"] = (class { 560 constructor() { 561 // â¼ TOP MVã¹ã©ã¤ãã¼ 562 const topMvObj = ".swiper.mv-img"; 563 const topMv = new swiper__WEBPACK_IMPORTED_MODULE_0__["default"](topMvObj, { 564 modules: [swiper__WEBPACK_IMPORTED_MODULE_0__.Autoplay, swiper__WEBPACK_IMPORTED_MODULE_0__.EffectFade], 565 loop: true, 566 speed: 3000, 567 autoplay: { 568 delay: 3000, 569 disableOnInteraction: true 570 }, 571 effect: "fade" 572 }); 573 // ããã«ãéãã¦ããautoplayéå§ 574 if (document.querySelector(topMvObj) != null) { 575 topMv.autoplay.stop(); 576 setTimeout(() => { 577 topMv.autoplay.start(); 578 }, 9000); 579 } 580 581 // â¼ TOP NEWS & EVENT SPçç¨ã¹ã©ã¤ãã¼ 582 const topNewsEventObj = ".swiper.list-newsEvent"; 583 if (document.querySelectorAll(topNewsEventObj).length) { 584 const options = { 585 modules: [swiper__WEBPACK_IMPORTED_MODULE_0__.Autoplay, swiper__WEBPACK_IMPORTED_MODULE_0__.Navigation], 586 loop: true, 587 speed: 1500, 588 autoplay: { 589 delay: 1000, 590 disableOnInteraction: false 591 }, 592 navigation: { 593 nextEl: ".swiper-button-next", 594 prevEl: ".swiper-button-prev" 595 }, 596 spaceBetween: "9.524%", 597 slidesPerView: "auto" 598 }; 599 const breakPoint = 767; 600 let topNewsEvent; 601 if (window.innerWidth <= breakPoint) { 602 topNewsEvent = new swiper__WEBPACK_IMPORTED_MODULE_0__["default"](".swiper.list-newsEvent", options); 603 } else { 604 topNewsEvent = undefined; 605 } 606 window.addEventListener("resize", () => { 607 if (window.innerWidth <= breakPoint) { 608 if (topNewsEvent) return; 609 topNewsEvent = new swiper__WEBPACK_IMPORTED_MODULE_0__["default"](".swiper.list-newsEvent", options); 610 } else { 611 if (!topNewsEvent) return; 612 topNewsEvent.destroy(); 613 topNewsEvent = undefined; 614 } 615 }, false); 616 window.addEventListener("DOMContentLoaded", () => {}, false); 617 } 618 619 // â¼ ãããã¯ã¹ããã¼ã¹ã©ã¤ãã¼ 620 const topicsBannerSlide = document.querySelectorAll(".swiper.topicsBanner .topicsBanner_item"); 621 if (topicsBannerSlide.length > 2) { 622 const topicsBanner = new swiper__WEBPACK_IMPORTED_MODULE_0__["default"](".swiper.topicsBanner", { 623 modules: [swiper__WEBPACK_IMPORTED_MODULE_0__.Autoplay, swiper__WEBPACK_IMPORTED_MODULE_0__.Navigation], 624 loop: true, 625 // loopedSlides: 3, 626 initialSlide: 0, 627 slidesPerView: "auto", 628 // centeredSlides: true, 629 speed: 1000, 630 spaceBetween: 14, 631 autoplay: { 632 delay: 3000, 633 disableOnInteraction: true 634 }, 635 navigation: { 636 nextEl: ".swiper-button-next", 637 prevEl: ".swiper-button-prev" 638 }, 639 breakpoints: { 640 // 769px以ä¸ã®å ´å 641 768: { 642 spaceBetween: 24 643 } 644 } 645 }); 646 } 647 648 // â¼ ã·ã§ãã詳細ãããã¼ã¹ã©ã¤ãã¼ 649 const shopHeaderObj = ".swiper.shopHeader_slider"; 650 const shopHeader = new swiper__WEBPACK_IMPORTED_MODULE_0__["default"](shopHeaderObj, { 651 modules: [swiper__WEBPACK_IMPORTED_MODULE_0__.Autoplay, swiper__WEBPACK_IMPORTED_MODULE_0__.EffectFade, swiper__WEBPACK_IMPORTED_MODULE_0__.Pagination], 652 loop: true, 653 speed: 3000, 654 effect: "fade", 655 autoplay: { 656 delay: 5000, 657 disableOnInteraction: true 658 }, 659 pagination: { 660 el: ".swiper.shopHeader_slider .swiper-pagination", 661 clickable: true 662 }, 663 breakpoints: { 664 // 768px以ä¸ã®å ´å 665 768: { 666 slidesPerView: 1 667 } 668 } 669 }); 670 671 // â¼ NEWS詳細 SPçç¨ã¹ã©ã¤ãã¼ 672 const newsPhotoObj = ".swiper.newsPhoto"; 673 if (document.querySelectorAll(newsPhotoObj).length) { 674 const options = { 675 modules: [swiper__WEBPACK_IMPORTED_MODULE_0__.Autoplay, swiper__WEBPACK_IMPORTED_MODULE_0__.Navigation], 676 loop: true, 677 speed: 1500, 678 autoplay: { 679 delay: 3000, 680 disableOnInteraction: false 681 }, 682 navigation: { 683 nextEl: ".swiper-button-next", 684 prevEl: ".swiper-button-prev" 685 }, 686 spaceBetween: "9.524%", 687 slidesPerView: "auto" 688 }; 689 const breakPoint = 767; 690 let newsPhoto; 691 if (window.innerWidth <= breakPoint) { 692 newsPhoto = new swiper__WEBPACK_IMPORTED_MODULE_0__["default"](newsPhotoObj, options); 693 } else { 694 newsPhoto = undefined; 695 } 696 window.addEventListener("resize", () => { 697 if (window.innerWidth <= breakPoint) { 698 if (newsPhoto) return; 699 newsPhoto = new swiper__WEBPACK_IMPORTED_MODULE_0__["default"](newsPhotoObj, options); 700 } else { 701 if (!newsPhoto) return; 702 newsPhoto.destroy(); 703 newsPhoto = undefined; 704 } 705 }, false); 706 window.addEventListener("DOMContentLoaded", () => {}, false); 707 } 708 } 709}); 710 711/***/ }), 712
713/***/ "./src/assets/js/utils/TopMv.js": 714/*!**************************************!*\ 715 !*** ./src/assets/js/utils/TopMv.js ***! 716 \**************************************/ 717/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 718 719__webpack_require__.r(__webpack_exports__); 720/* harmony default export */ __webpack_exports__["default"] = (class { 721 constructor(delayTime = 2000) { 722 const flashingTime = 300; 723 // const flashingDuration = 1500; 724 const openTime = 7; 725 const patterns = document.querySelectorAll("#patternSet > g:not(#pattern-open)"); 726 const openPatterns = document.querySelectorAll("#openPatterns > g"); 727 const mvNet = document.querySelectorAll("#img-mv-net svg"); 728 let randoms = []; 729 const min = 0, 730 max = openPatterns.length; 731 for (let index = 0; index < patterns.length; index++) { 732 const pattern = patterns[index]; 733 // pattern.classList.add("pattern-" + (index + 1)); 734 const rect = pattern.getBoundingClientRect(); 735 const isInView = 0 < rect.bottom && rect.top < window.innerHeight; 736 // console.log({ isInView }); 737 if (isInView) { 738 pattern.classList.add("inView"); 739 } 740 } 741 const inView = document.getElementsByClassName("inView"); 742 // console.log(patterns.length, inView.length); 743 744 // console.log(max * openTime); 745 746 function animOpen() { 747 for (let i = min; i < max; i++) { 748 while (true) { 749 var tmp = intRandom(min, max); 750 if (!randoms.includes(tmp)) { 751 randoms.push(tmp); 752 break; 753 } 754 } 755 } 756 function intRandom(min, max) { 757 return Math.floor(Math.random() * (max - min)) + min; 758 } 759 // console.log(randoms); 760 761 const openPattern = (item, i) => { 762 setTimeout(() => { 763 openPatterns[item].classList.add("open"); 764 }, i * openTime); 765 }; 766 for (let i = 0; i < randoms.length; i++) { 767 const item = randoms[i]; 768 openPattern(item, i); 769 } 770 } 771 function animNetdel() { 772 for (let index = 0; index < mvNet.length; index++) { 773 const element = mvNet[index]; 774 element.classList.add("fadeout"); 775 } 776 // mvNet.animate([{ opacity: 1 }, { opacity: 0 }], { 777 // duration: 1500, 778 // easing: "ease-in-out", 779 // fill: "forwards", 780 // }); 781 } 782 783 function animFlashing() { 784 const flashing = () => { 785 const random = Math.floor(Math.random() * inView.length); 786 inView[random].classList.add("flash"); 787 setTimeout(() => { 788 inView[random].classList.remove("flash"); 789 }, 2000); 790 }; 791 setInterval(flashing, flashingTime); 792 } 793 async function mvAnim() { 794 await animOpen(); 795 setTimeout(() => { 796 animNetdel(); 797 }, max * openTime * 0.66 + 0); 798 if (inView.length) { 799 setTimeout(() => { 800 animFlashing(); 801 }, max * openTime + 0); 802 } 803 } 804 setTimeout(() => { 805 const popup_st = document.querySelector("body").className; 806 if (popup_st !== "-popupOpen") mvAnim(); 807 }, delayTime); 808 809 // â¼ æ¼ã¨å¤ã§MVã®åçãå¤ãã 810 let nowHour = new Date().getHours(); 811 812 // 18æãã6æã¾ã§ã¯å¤ç¨ã®åçã«å·®ãæ¿ã 813 if (18 <= nowHour || nowHour < 6) nightImg(); 814 function nightImg() { 815 const mvImg = document.querySelectorAll("#mv-img picture"); 816 for (let index = 0; index < mvImg.length; index++) { 817 const element = mvImg[index]; 818 // PCç¨åçã®å·®ãæ¿ã 819 const imgElemnt = element.querySelector("img"); 820 let imgElemnt_src = imgElemnt.getAttribute("src"); 821 imgElemnt_src = imgElemnt_src.replace("-day-", "-night-"); 822 imgElemnt.src = imgElemnt_src; 823 // SPç¨åçã®å·®ãæ¿ã 824 const sourceElemnt = element.querySelector("source"); 825 let sourceElemnt_src = sourceElemnt.getAttribute("srcset"); 826 sourceElemnt_src = sourceElemnt_src.replace("-day-", "-night-"); 827 sourceElemnt.srcset = sourceElemnt_src; 828 } 829 } 830 } 831}); 832 833/***/ }), 834
vendor: 65,977 bytes, lines 835-2403
835/***/ "./node_modules/gsap/CSSPlugin.js": 836/*!****************************************!*\ 837 !*** ./node_modules/gsap/CSSPlugin.js ***! 838 \****************************************/ 839/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 840 841__webpack_require__.r(__webpack_exports__); 842/* harmony export */ __webpack_require__.d(__webpack_exports__, { 843/* harmony export */ CSSPlugin: function() { return /* binding */ CSSPlugin; }, 844/* harmony export */ _createElement: function() { return /* binding */ _createElement; }, 845/* harmony export */ _getBBox: function() { return /* binding */ _getBBox; }, 846/* harmony export */ checkPrefix: function() { return /* binding */ _checkPropPrefix; }, 847/* harmony export */ "default": function() { return /* binding */ CSSPlugin; } 848/* harmony export */ }); 849/* harmony import */ var _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./gsap-core.js */ "./node_modules/gsap/gsap-core.js"); 850/*! 851 * CSSPlugin 3.12.2 852 * https://greensock.com 853 * 854 * Copyright 2008-2023, GreenSock. All rights reserved. 855 * Subject to the terms at https://greensock.com/standard-license or for 856 * Club GreenSock members, the agreement issued with that membership. 857 * @author: Jack Doyle, [email protected] 858*/ 859 860/* eslint-disable */ 861 862 863var _win, 864 _doc, 865 _docElement, 866 _pluginInitted, 867 _tempDiv, 868 _tempDivStyler, 869 _recentSetterPlugin, 870 _reverting, 871 _windowExists = function _windowExists() { 872 return typeof window !== "undefined"; 873}, 874 _transformProps = {}, 875 _RAD2DEG = 180 / Math.PI, 876 _DEG2RAD = Math.PI / 180, 877 _atan2 = Math.atan2, 878 _bigNum = 1e8, 879 _capsExp = /([A-Z])/g, 880 _horizontalExp = /(left|right|width|margin|padding|x)/i, 881 _complexExp = /[\s,\(]\S/, 882 _propertyAliases = { 883 autoAlpha: "opacity,visibility", 884 scale: "scaleX,scaleY", 885 alpha: "opacity" 886}, 887 _renderCSSProp = function _renderCSSProp(ratio, data) { 888 return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data); 889}, 890 _renderPropWithEnd = function _renderPropWithEnd(ratio, data) { 891 return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data); 892}, 893 _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) { 894 return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u : data.b, data); 895}, 896 //if units change, we need a way to render the original unit/value when the tween goes all the way back to the beginning (ratio:0) 897_renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) { 898 var value = data.s + data.c * ratio; 899 data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data); 900}, 901 _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) { 902 return data.set(data.t, data.p, ratio ? data.e : data.b, data); 903}, 904 _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) { 905 return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data); 906}, 907 _setterCSSStyle = function _setterCSSStyle(target, property, value) { 908 return target.style[property] = value; 909}, 910 _setterCSSProp = function _setterCSSProp(target, property, value) { 911 return target.style.setProperty(property, value); 912}, 913 _setterTransform = function _setterTransform(target, property, value) { 914 return target._gsap[property] = value; 915}, 916 _setterScale = function _setterScale(target, property, value) { 917 return target._gsap.scaleX = target._gsap.scaleY = value; 918}, 919 _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) { 920 var cache = target._gsap; 921 cache.scaleX = cache.scaleY = value; 922 cache.renderTransform(ratio, cache); 923}, 924 _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) { 925 var cache = target._gsap; 926 cache[property] = value; 927 cache.renderTransform(ratio, cache); 928}, 929 _transformProp = "transform", 930 _transformOriginProp = _transformProp + "Origin", 931 _saveStyle = function _saveStyle(property, isNotCSS) { 932 var _this = this; 933 934 var target = this.target, 935 style = target.style; 936 937 if (property in _transformProps && style) { 938 this.tfm = this.tfm || {}; 939 940 if (property !== "transform") { 941 property = _propertyAliases[property] || property; 942 ~property.indexOf(",") ? property.split(",").forEach(function (a) { 943 return _this.tfm[a] = _get(target, a); 944 }) : this.tfm[property] = target._gsap.x ? target._gsap[property] : _get(target, property); // note: scale would map to "scaleX,scaleY", thus we loop and apply them both. 945 } else { 946 return _propertyAliases.transform.split(",").forEach(function (p) { 947 return _saveStyle.call(_this, p, isNotCSS); 948 }); 949 } 950 951 if (this.props.indexOf(_transformProp) >= 0) { 952 return; 953 } 954 955 if (target._gsap.svg) { 956 this.svgo = target.getAttribute("data-svg-origin"); 957 this.props.push(_transformOriginProp, isNotCSS, ""); 958 } 959 960 property = _transformProp; 961 } 962 963 (style || isNotCSS) && this.props.push(property, isNotCSS, style[property]); 964}, 965 _removeIndependentTransforms = function _removeIndependentTransforms(style) { 966 if (style.translate) { 967 style.removeProperty("translate"); 968 style.removeProperty("scale"); 969 style.removeProperty("rotate"); 970 } 971}, 972 _revertStyle = function _revertStyle() { 973 var props = this.props, 974 target = this.target, 975 style = target.style, 976 cache = target._gsap, 977 i, 978 p; 979 980 for (i = 0; i < props.length; i += 3) { 981 // stored like this: property, isNotCSS, value 982 props[i + 1] ? target[props[i]] = props[i + 2] : props[i + 2] ? style[props[i]] = props[i + 2] : style.removeProperty(props[i].substr(0, 2) === "--" ? props[i] : props[i].replace(_capsExp, "-$1").toLowerCase()); 983 } 984 985 if (this.tfm) { 986 for (p in this.tfm) { 987 cache[p] = this.tfm[p]; 988 } 989 990 if (cache.svg) { 991 cache.renderTransform(); 992 target.setAttribute("data-svg-origin", this.svgo || ""); 993 } 994 995 i = _reverting(); 996 997 if ((!i || !i.isStart) && !style[_transformProp]) { 998 _removeIndependentTransforms(style); 999 1000 cache.uncache = 1; // if it's a startAt that's being reverted in the _initTween() of the core, we don't need to uncache transforms. This is purely a performance optimization. 1001 } 1002 } 1003}, 1004 _getStyleSaver = function _getStyleSaver(target, properties) { 1005 var saver = { 1006 target: target, 1007 props: [], 1008 revert: _revertStyle, 1009 save: _saveStyle 1010 }; 1011 target._gsap || _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.core.getCache(target); // just make sure there's a _gsap cache defined because we read from it in _saveStyle() and it's more efficient to just check it here once. 1012 1013 properties && properties.split(",").forEach(function (p) { 1014 return saver.save(p); 1015 }); 1016 return saver; 1017}, 1018 _supports3D, 1019 _createElement = function _createElement(type, ns) { 1020 var e = _doc.createElementNS ? _doc.createElementNS((ns || "http://www.w3.org/1999/xhtml").replace(/^https/, "http"), type) : _doc.createElement(type); //some servers swap in https for http in the namespace which can break things, making "style" inaccessible. 1021 1022 return e.style ? e : _doc.createElement(type); //some environments won't allow access to the element's style when created with a namespace in which case we default to the standard createElement() to work around the issue. Also note that when GSAP is embedded directly inside an SVG file, createElement() won't allow access to the style object in Firefox (see https://greensock.com/forums/topic/20215-problem-using-tweenmax-in-standalone-self-containing-svg-file-err-cannot-set-property-csstext-of-undefined/). 1023}, 1024 _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) { 1025 var cs = getComputedStyle(target); 1026 return cs[property] || cs.getPropertyValue(property.replace(_capsExp, "-$1").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || ""; //css variables may not need caps swapped out for dashes and lowercase. 1027}, 1028 _prefixes = "O,Moz,ms,Ms,Webkit".split(","), 1029 _checkPropPrefix = function _checkPropPrefix(property, element, preferPrefix) { 1030 var e = element || _tempDiv, 1031 s = e.style, 1032 i = 5; 1033 1034 if (property in s && !preferPrefix) { 1035 return property; 1036 } 1037 1038 property = property.charAt(0).toUpperCase() + property.substr(1); 1039 1040 while (i-- && !(_prefixes[i] + property in s)) {} 1041 1042 return i < 0 ? null : (i === 3 ? "ms" : i >= 0 ? _prefixes[i] : "") + property; 1043}, 1044 _initCore = function _initCore() { 1045 if (_windowExists() && window.document) { 1046 _win = window; 1047 _doc = _win.document; 1048 _docElement = _doc.documentElement; 1049 _tempDiv = _createElement("div") || { 1050 style: {} 1051 }; 1052 _tempDivStyler = _createElement("div"); 1053 _transformProp = _checkPropPrefix(_transformProp); 1054 _transformOriginProp = _transformProp + "Origin"; 1055 _tempDiv.style.cssText = "border-width:0;line-height:0;position:absolute;padding:0"; //make sure to override certain properties that may contaminate measurements, in case the user has overreaching style sheets. 1056 1057 _supports3D = !!_checkPropPrefix("perspective"); 1058 _reverting = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.core.reverting; 1059 _pluginInitted = 1; 1060 } 1061}, 1062 _getBBoxHack = function _getBBoxHack(swapIfPossible) { 1063 //works around issues in some browsers (like Firefox) that don't correctly report getBBox() on SVG elements inside a <defs> element and/or <mask>. We try creating an SVG, adding it to the documentElement and toss the element in there so that it's definitely part of the rendering tree, then grab the bbox and if it works, we actually swap out the original getBBox() method for our own that does these extra steps whenever getBBox is needed. This helps ensure that performance is optimal (only do all these extra steps when absolutely necessary...most elements don't need it). 1064 var svg = _createElement("svg", this.ownerSVGElement && this.ownerSVGElement.getAttribute("xmlns") || "http://www.w3.org/2000/svg"), 1065 oldParent = this.parentNode, 1066 oldSibling = this.nextSibling, 1067 oldCSS = this.style.cssText, 1068 bbox; 1069 1070 _docElement.appendChild(svg); 1071 1072 svg.appendChild(this); 1073 this.style.display = "block"; 1074 1075 if (swapIfPossible) { 1076 try { 1077 bbox = this.getBBox(); 1078 this._gsapBBox = this.getBBox; //store the original 1079 1080 this.getBBox = _getBBoxHack; 1081 } catch (e) {} 1082 } else if (this._gsapBBox) { 1083 bbox = this._gsapBBox(); 1084 } 1085 1086 if (oldParent) { 1087 if (oldSibling) { 1088 oldParent.insertBefore(this, oldSibling); 1089 } else { 1090 oldParent.appendChild(this); 1091 } 1092 } 1093 1094 _docElement.removeChild(svg); 1095 1096 this.style.cssText = oldCSS; 1097 return bbox; 1098}, 1099 _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) { 1100 var i = attributesArray.length; 1101 1102 while (i--) { 1103 if (target.hasAttribute(attributesArray[i])) { 1104 return target.getAttribute(attributesArray[i]); 1105 } 1106 } 1107}, 1108 _getBBox = function _getBBox(target) { 1109 var bounds; 1110 1111 try { 1112 bounds = target.getBBox(); //Firefox throws errors if you try calling getBBox() on an SVG element that's not rendered (like in a <symbol> or <defs>). https://bugzilla.mozilla.org/show_bug.cgi?id=612118 1113 } catch (error) { 1114 bounds = _getBBoxHack.call(target, true); 1115 } 1116 1117 bounds && (bounds.width || bounds.height) || target.getBBox === _getBBoxHack || (bounds = _getBBoxHack.call(target, true)); //some browsers (like Firefox) misreport the bounds if the element has zero width and height (it just assumes it's at x:0, y:0), thus we need to manually grab the position in that case. 1118 1119 return bounds && !bounds.width && !bounds.x && !bounds.y ? { 1120 x: +_getAttributeFallbacks(target, ["x", "cx", "x1"]) || 0, 1121 y: +_getAttributeFallbacks(target, ["y", "cy", "y1"]) || 0, 1122 width: 0, 1123 height: 0 1124 } : bounds; 1125}, 1126 _isSVG = function _isSVG(e) { 1127 return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e)); 1128}, 1129 //reports if the element is an SVG on which getBBox() actually works 1130_removeProperty = function _removeProperty(target, property) { 1131 if (property) { 1132 var style = target.style; 1133 1134 if (property in _transformProps && property !== _transformOriginProp) { 1135 property = _transformProp; 1136 } 1137 1138 if (style.removeProperty) { 1139 if (property.substr(0, 2) === "ms" || property.substr(0, 6) === "webkit") { 1140 //Microsoft and some Webkit browsers don't conform to the standard of capitalizing the first prefix character, so we adjust so that when we prefix the caps with a dash, it's correct (otherwise it'd be "ms-transform" instead of "-ms-transform" for IE9, for example) 1141 property = "-" + property; 1142 } 1143 1144 style.removeProperty(property.replace(_capsExp, "-$1").toLowerCase()); 1145 } else { 1146 //note: old versions of IE use "removeAttribute()" instead of "removeProperty()" 1147 style.removeAttribute(property); 1148 } 1149 } 1150}, 1151 _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) { 1152 var pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue); 1153 plugin._pt = pt; 1154 pt.b = beginning; 1155 pt.e = end; 1156 1157 plugin._props.push(property); 1158 1159 return pt; 1160}, 1161 _nonConvertibleUnits = { 1162 deg: 1, 1163 rad: 1, 1164 turn: 1 1165}, 1166 _nonStandardLayouts = { 1167 grid: 1, 1168 flex: 1 1169}, 1170 //takes a single value like 20px and converts it to the unit specified, like "%", returning only the numeric amount. 1171_convertToUnit = function _convertToUnit(target, property, value, unit) { 1172 var curValue = parseFloat(value) || 0, 1173 curUnit = (value + "").trim().substr((curValue + "").length) || "px", 1174 // some browsers leave extra whitespace at the beginning of CSS variables, hence the need to trim() 1175 style = _tempDiv.style, 1176 horizontal = _horizontalExp.test(property), 1177 isRootSVG = target.tagName.toLowerCase() === "svg", 1178 measureProperty = (isRootSVG ? "client" : "offset") + (horizontal ? "Width" : "Height"), 1179 amount = 100, 1180 toPixels = unit === "px", 1181 toPercent = unit === "%", 1182 px, 1183 parent, 1184 cache, 1185 isSVG; 1186 1187 if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) { 1188 return curValue; 1189 } 1190 1191 curUnit !== "px" && !toPixels && (curValue = _convertToUnit(target, property, value, "px")); 1192 isSVG = target.getCTM && _isSVG(target); 1193 1194 if ((toPercent || curUnit === "%") && (_transformProps[property] || ~property.indexOf("adius"))) { 1195 px = isSVG ? target.getBBox()[horizontal ? "width" : "height"] : target[measureProperty]; 1196 return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(toPercent ? curValue / px * amount : curValue / 100 * px); 1197 } 1198 1199 style[horizontal ? "width" : "height"] = amount + (toPixels ? curUnit : unit); 1200 parent = ~property.indexOf("adius") || unit === "em" && target.appendChild && !isRootSVG ? target : target.parentNode; 1201 1202 if (isSVG) { 1203 parent = (target.ownerSVGElement || {}).parentNode; 1204 } 1205 1206 if (!parent || parent === _doc || !parent.appendChild) { 1207 parent = _doc.body; 1208 } 1209 1210 cache = parent._gsap; 1211 1212 if (cache && toPercent && cache.width && horizontal && cache.time === _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._ticker.time && !cache.uncache) { 1213 return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(curValue / cache.width * amount); 1214 } else { 1215 (toPercent || curUnit === "%") && !_nonStandardLayouts[_getComputedProperty(parent, "display")] && (style.position = _getComputedProperty(target, "position")); 1216 parent === target && (style.position = "static"); // like for borderRadius, if it's a % we must have it relative to the target itself but that may not have position: relative or position: absolute in which case it'd go up the chain until it finds its offsetParent (bad). position: static protects against that. 1217 1218 parent.appendChild(_tempDiv); 1219 px = _tempDiv[measureProperty]; 1220 parent.removeChild(_tempDiv); 1221 style.position = "absolute"; 1222 1223 if (horizontal && toPercent) { 1224 cache = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getCache)(parent); 1225 cache.time = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._ticker.time; 1226 cache.width = parent[measureProperty]; 1227 } 1228 } 1229 1230 return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0); 1231}, 1232 _get = function _get(target, property, unit, uncache) { 1233 var value; 1234 _pluginInitted || _initCore(); 1235 1236 if (property in _propertyAliases && property !== "transform") { 1237 property = _propertyAliases[property]; 1238 1239 if (~property.indexOf(",")) { 1240 property = property.split(",")[0]; 1241 } 1242 } 1243 1244 if (_transformProps[property] && property !== "transform") { 1245 value = _parseTransform(target, uncache); 1246 value = property !== "transformOrigin" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + " " + value.zOrigin + "px"; 1247 } else { 1248 value = target.style[property]; 1249 1250 if (!value || value === "auto" || uncache || ~(value + "").indexOf("calc(")) { 1251 value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getProperty)(target, property) || (property === "opacity" ? 1 : 0); // note: some browsers, like Firefox, don't report borderRadius correctly! Instead, it only reports every corner like borderTopLeftRadius 1252 } 1253 } 1254 1255 return unit && !~(value + "").trim().indexOf(" ") ? _convertToUnit(target, property, value, unit) + unit : value; 1256}, 1257 _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) { 1258 // note: we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus "this" would refer to the plugin. 1259 if (!start || start === "none") { 1260 // some browsers like Safari actually PREFER the prefixed property and mis-report the unprefixed value like clipPath (BUG). In other words, even though clipPath exists in the style ("clipPath" in target.style) and it's set in the CSS properly (along with -webkit-clip-path), Safari reports clipPath as "none" whereas WebkitClipPath reports accurately like "ellipse(100% 0% at 50% 0%)", so in this case we must SWITCH to using the prefixed property instead. See https://greensock.com/forums/topic/18310-clippath-doesnt-work-on-ios/ 1261 var p = _checkPropPrefix(prop, target, 1), 1262 s = p && _getComputedProperty(target, p, 1); 1263 1264 if (s && s !== start) { 1265 prop = p; 1266 start = s; 1267 } else if (prop === "borderColor") { 1268 start = _getComputedProperty(target, "borderTopColor"); // Firefox bug: always reports "borderColor" as "", so we must fall back to borderTopColor. See https://greensock.com/forums/topic/24583-how-to-return-colors-that-i-had-after-reverse/ 1269 } 1270 } 1271 1272 var pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, target.style, prop, 0, 1, _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._renderComplexString), 1273 index = 0, 1274 matchIndex = 0, 1275 a, 1276 result, 1277 startValues, 1278 startNum, 1279 color, 1280 startValue, 1281 endValue, 1282 endNum, 1283 chunk, 1284 endUnit, 1285 startUnit, 1286 endValues; 1287 pt.b = start; 1288 pt.e = end; 1289 start += ""; // ensure values are strings 1290 1291 end += ""; 1292 1293 if (end === "auto") { 1294 target.style[prop] = end; 1295 end = _getComputedProperty(target, prop) || end; 1296 target.style[prop] = start; 1297 } 1298 1299 a = [start, end]; 1300 1301 (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._colorStringFilter)(a); // pass an array with the starting and ending values and let the filter do whatever it needs to the values. If colors are found, it returns true and then we must match where the color shows up order-wise because for things like boxShadow, sometimes the browser provides the computed values with the color FIRST, but the user provides it with the color LAST, so flip them if necessary. Same for drop-shadow(). 1302 1303 1304 start = a[0]; 1305 end = a[1]; 1306 startValues = start.match(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp) || []; 1307 endValues = end.match(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp) || []; 1308 1309 if (endValues.length) { 1310 while (result = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp.exec(end)) { 1311 endValue = result[0]; 1312 chunk = end.substring(index, result.index); 1313 1314 if (color) { 1315 color = (color + 1) % 5; 1316 } else if (chunk.substr(-5) === "rgba(" || chunk.substr(-5) === "hsla(") { 1317 color = 1; 1318 } 1319 1320 if (endValue !== (startValue = startValues[matchIndex++] || "")) { 1321 startNum = parseFloat(startValue) || 0; 1322 startUnit = startValue.substr((startNum + "").length); 1323 endValue.charAt(1) === "=" && (endValue = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(startNum, endValue) + startUnit); 1324 endNum = parseFloat(endValue); 1325 endUnit = endValue.substr((endNum + "").length); 1326 index = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numWithUnitExp.lastIndex - endUnit.length; 1327 1328 if (!endUnit) { 1329 //if something like "perspective:300" is passed in and we must add a unit to the end 1330 endUnit = endUnit || _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[prop] || startUnit; 1331 1332 if (index === end.length) { 1333 end += endUnit; 1334 pt.e += endUnit; 1335 } 1336 } 1337 1338 if (startUnit !== endUnit) { 1339 startNum = _convertToUnit(target, prop, startValue, endUnit) || 0; 1340 } // these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method. 1341 1342 1343 pt._pt = { 1344 _next: pt._pt, 1345 p: chunk || matchIndex === 1 ? chunk : ",", 1346 //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case. 1347 s: startNum, 1348 c: endNum - startNum, 1349 m: color && color < 4 || prop === "zIndex" ? Math.round : 0 1350 }; 1351 } 1352 } 1353 1354 pt.c = index < end.length ? end.substring(index, end.length) : ""; //we use the "c" of the PropTween to store the final part of the string (after the last number) 1355 } else { 1356 pt.r = prop === "display" && end === "none" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue; 1357 } 1358 1359 _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._relExp.test(end) && (pt.e = 0); //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value). 1360 1361 this._pt = pt; //start the linked list with this new PropTween. Remember, we call _tweenComplexCSSString.call(pluginInstance...) to ensure that it's scoped properly. We may call it from within another plugin too, thus "this" would refer to the plugin. 1362 1363 return pt; 1364}, 1365 _keywordToPercent = { 1366 top: "0%", 1367 bottom: "100%", 1368 left: "0%", 1369 right: "100%", 1370 center: "50%" 1371}, 1372 _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) { 1373 var split = value.split(" "), 1374 x = split[0], 1375 y = split[1] || "50%"; 1376 1377 if (x === "top" || x === "bottom" || y === "left" || y === "right") { 1378 //the user provided them in the wrong order, so flip them 1379 value = x; 1380 x = y; 1381 y = value; 1382 } 1383 1384 split[0] = _keywordToPercent[x] || x; 1385 split[1] = _keywordToPercent[y] || y; 1386 return split.join(" "); 1387}, 1388 _renderClearProps = function _renderClearProps(ratio, data) { 1389 if (data.tween && data.tween._time === data.tween._dur) { 1390 var target = data.t, 1391 style = target.style, 1392 props = data.u, 1393 cache = target._gsap, 1394 prop, 1395 clearTransforms, 1396 i; 1397 1398 if (props === "all" || props === true) { 1399 style.cssText = ""; 1400 clearTransforms = 1; 1401 } else { 1402 props = props.split(","); 1403 i = props.length; 1404 1405 while (--i > -1) { 1406 prop = props[i]; 1407 1408 if (_transformProps[prop]) { 1409 clearTransforms = 1; 1410 prop = prop === "transformOrigin" ? _transformOriginProp : _transformProp; 1411 } 1412 1413 _removeProperty(target, prop); 1414 } 1415 } 1416 1417 if (clearTransforms) { 1418 _removeProperty(target, _transformProp); 1419 1420 if (cache) { 1421 cache.svg && target.removeAttribute("transform"); 1422 1423 _parseTransform(target, 1); // force all the cached values back to "normal"/identity, otherwise if there's another tween that's already set to render transforms on this element, it could display the wrong values. 1424 1425 1426 cache.uncache = 1; 1427 1428 _removeIndependentTransforms(style); 1429 } 1430 } 1431 } 1432}, 1433 // note: specialProps should return 1 if (and only if) they have a non-zero priority. It indicates we need to sort the linked list. 1434_specialProps = { 1435 clearProps: function clearProps(plugin, target, property, endValue, tween) { 1436 if (tween.data !== "isFromStart") { 1437 var pt = plugin._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, target, property, 0, 0, _renderClearProps); 1438 pt.u = endValue; 1439 pt.pr = -10; 1440 pt.tween = tween; 1441 1442 plugin._props.push(property); 1443 1444 return 1; 1445 } 1446 } 1447 /* className feature (about 0.4kb gzipped). 1448 , className(plugin, target, property, endValue, tween) { 1449 let _renderClassName = (ratio, data) => { 1450 data.css.render(ratio, data.css); 1451 if (!ratio || ratio === 1) { 1452 let inline = data.rmv, 1453 target = data.t, 1454 p; 1455 target.setAttribute("class", ratio ? data.e : data.b); 1456 for (p in inline) { 1457 _removeProperty(target, p); 1458 } 1459 } 1460 }, 1461 _getAllStyles = (target) => { 1462 let styles = {}, 1463 computed = getComputedStyle(target), 1464 p; 1465 for (p in computed) { 1466 if (isNaN(p) && p !== "cssText" && p !== "length") { 1467 styles[p] = computed[p]; 1468 } 1469 } 1470 _setDefaults(styles, _parseTransform(target, 1)); 1471 return styles; 1472 }, 1473 startClassList = target.getAttribute("class"), 1474 style = target.style, 1475 cssText = style.cssText, 1476 cache = target._gsap, 1477 classPT = cache.classPT, 1478 inlineToRemoveAtEnd = {}, 1479 data = {t:target, plugin:plugin, rmv:inlineToRemoveAtEnd, b:startClassList, e:(endValue.charAt(1) !== "=") ? endValue : startClassList.replace(new RegExp("(?:\\s|^)" + endValue.substr(2) + "(?![\\w-])"), "") + ((endValue.charAt(0) === "+") ? " " + endValue.substr(2) : "")}, 1480 changingVars = {}, 1481 startVars = _getAllStyles(target), 1482 transformRelated = /(transform|perspective)/i, 1483 endVars, p; 1484 if (classPT) { 1485 classPT.r(1, classPT.d); 1486 _removeLinkedListItem(classPT.d.plugin, classPT, "_pt"); 1487 } 1488 target.setAttribute("class", data.e); 1489 endVars = _getAllStyles(target, true); 1490 target.setAttribute("class", startClassList); 1491 for (p in endVars) { 1492 if (endVars[p] !== startVars[p] && !transformRelated.test(p)) { 1493 changingVars[p] = endVars[p]; 1494 if (!style[p] && style[p] !== "0") { 1495 inlineToRemoveAtEnd[p] = 1; 1496 } 1497 } 1498 } 1499 cache.classPT = plugin._pt = new PropTween(plugin._pt, target, "className", 0, 0, _renderClassName, data, 0, -11); 1500 if (style.cssText !== cssText) { //only apply if things change. Otherwise, in cases like a background-image that's pulled dynamically, it could cause a refresh. See https://greensock.com/forums/topic/20368-possible-gsap-bug-switching-classnames-in-chrome/. 1501 style.cssText = cssText; //we recorded cssText before we swapped classes and ran _getAllStyles() because in cases when a className tween is overwritten, we remove all the related tweening properties from that class change (otherwise class-specific stuff can't override properties we've directly set on the target's style object due to specificity). 1502 } 1503 _parseTransform(target, true); //to clear the caching of transforms 1504 data.css = new gsap.plugins.css(); 1505 data.css.init(target, changingVars, tween); 1506 plugin._props.push(...data.css._props); 1507 return 1; 1508 } 1509 */ 1510 1511}, 1512 1513/* 1514 * -------------------------------------------------------------------------------------- 1515 * TRANSFORMS 1516 * -------------------------------------------------------------------------------------- 1517 */ 1518_identity2DMatrix = [1, 0, 0, 1, 0, 0], 1519 _rotationalProperties = {}, 1520 _isNullTransform = function _isNullTransform(value) { 1521 return value === "matrix(1, 0, 0, 1, 0, 0)" || value === "none" || !value; 1522}, 1523 _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) { 1524 var matrixString = _getComputedProperty(target, _transformProp); 1525 1526 return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._numExp).map(_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round); 1527}, 1528 _getMatrix = function _getMatrix(target, force2D) { 1529 var cache = target._gsap || (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getCache)(target), 1530 style = target.style, 1531 matrix = _getComputedTransformMatrixAsArray(target), 1532 parent, 1533 nextSibling, 1534 temp, 1535 addedToDOM; 1536 1537 if (cache.svg && target.getAttribute("transform")) { 1538 temp = target.transform.baseVal.consolidate().matrix; //ensures that even complex values like "translate(50,60) rotate(135,0,0)" are parsed because it mashes it into a matrix. 1539 1540 matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f]; 1541 return matrix.join(",") === "1,0,0,1,0,0" ? _identity2DMatrix : matrix; 1542 } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) { 1543 //note: if offsetParent is null, that means the element isn't in the normal document flow, like if it has display:none or one of its ancestors has display:none). Firefox returns null for getComputedStyle() if the element is in an iframe that has display:none. https://bugzilla.mozilla.org/show_bug.cgi?id=548397 1544 //browsers don't report transforms accurately unless the element is in the DOM and has a display value that's not "none". Firefox and Microsoft browsers have a partial bug where they'll report transforms even if display:none BUT not any percentage-based values like translate(-50%, 8px) will be reported as if it's translate(0, 8px). 1545 temp = style.display; 1546 style.display = "block"; 1547 parent = target.parentNode; 1548 1549 if (!parent || !target.offsetParent) { 1550 // note: in 3.3.0 we switched target.offsetParent to _doc.body.contains(target) to avoid [sometimes unnecessary] MutationObserver calls but that wasn't adequate because there are edge cases where nested position: fixed elements need to get reparented to accurately sense transforms. See https://github.com/greensock/GSAP/issues/388 and https://github.com/greensock/GSAP/issues/375 1551 addedToDOM = 1; //flag 1552 1553 nextSibling = target.nextElementSibling; 1554 1555 _docElement.appendChild(target); //we must add it to the DOM in order to get values properly 1556 1557 } 1558 1559 matrix = _getComputedTransformMatrixAsArray(target); 1560 temp ? style.display = temp : _removeProperty(target, "display"); 1561 1562 if (addedToDOM) { 1563 nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target); 1564 } 1565 } 1566 1567 return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix; 1568}, 1569 _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) { 1570 var cache = target._gsap, 1571 matrix = matrixArray || _getMatrix(target, true), 1572 xOriginOld = cache.xOrigin || 0, 1573 yOriginOld = cache.yOrigin || 0, 1574 xOffsetOld = cache.xOffset || 0, 1575 yOffsetOld = cache.yOffset || 0, 1576 a = matrix[0], 1577 b = matrix[1], 1578 c = matrix[2], 1579 d = matrix[3], 1580 tx = matrix[4], 1581 ty = matrix[5], 1582 originSplit = origin.split(" "), 1583 xOrigin = parseFloat(originSplit[0]) || 0, 1584 yOrigin = parseFloat(originSplit[1]) || 0, 1585 bounds, 1586 determinant, 1587 x, 1588 y; 1589 1590 if (!originIsAbsolute) { 1591 bounds = _getBBox(target); 1592 xOrigin = bounds.x + (~originSplit[0].indexOf("%") ? xOrigin / 100 * bounds.width : xOrigin); 1593 yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf("%") ? yOrigin / 100 * bounds.height : yOrigin); 1594 } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) { 1595 //if it's zero (like if scaleX and scaleY are zero), skip it to avoid errors with dividing by zero. 1596 x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant; 1597 y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant; 1598 xOrigin = x; 1599 yOrigin = y; 1600 } 1601 1602 if (smooth || smooth !== false && cache.smooth) { 1603 tx = xOrigin - xOriginOld; 1604 ty = yOrigin - yOriginOld; 1605 cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx; 1606 cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty; 1607 } else { 1608 cache.xOffset = cache.yOffset = 0; 1609 } 1610 1611 cache.xOrigin = xOrigin; 1612 cache.yOrigin = yOrigin; 1613 cache.smooth = !!smooth; 1614 cache.origin = origin; 1615 cache.originIsAbsolute = !!originIsAbsolute; 1616 target.style[_transformOriginProp] = "0px 0px"; //otherwise, if someone sets an origin via CSS, it will likely interfere with the SVG transform attribute ones (because remember, we're baking the origin into the matrix() value). 1617 1618 if (pluginToAddPropTweensTo) { 1619 _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOrigin", xOriginOld, xOrigin); 1620 1621 _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOrigin", yOriginOld, yOrigin); 1622 1623 _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOffset", xOffsetOld, cache.xOffset); 1624 1625 _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOffset", yOffsetOld, cache.yOffset); 1626 } 1627 1628 target.setAttribute("data-svg-origin", xOrigin + " " + yOrigin); 1629}, 1630 _parseTransform = function _parseTransform(target, uncache) { 1631 var cache = target._gsap || new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.GSCache(target); 1632 1633 if ("x" in cache && !uncache && !cache.uncache) { 1634 return cache; 1635 } 1636 1637 var style = target.style, 1638 invertedScaleX = cache.scaleX < 0, 1639 px = "px", 1640 deg = "deg", 1641 cs = getComputedStyle(target), 1642 origin = _getComputedProperty(target, _transformOriginProp) || "0", 1643 x, 1644 y, 1645 z, 1646 scaleX, 1647 scaleY, 1648 rotation, 1649 rotationX, 1650 rotationY, 1651 skewX, 1652 skewY, 1653 perspective, 1654 xOrigin, 1655 yOrigin, 1656 matrix, 1657 angle, 1658 cos, 1659 sin, 1660 a, 1661 b, 1662 c, 1663 d, 1664 a12, 1665 a22, 1666 t1, 1667 t2, 1668 t3, 1669 a13, 1670 a23, 1671 a33, 1672 a42, 1673 a43, 1674 a32; 1675 x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0; 1676 scaleX = scaleY = 1; 1677 cache.svg = !!(target.getCTM && _isSVG(target)); 1678 1679 if (cs.translate) { 1680 // accommodate independent transforms by combining them into normal ones. 1681 if (cs.translate !== "none" || cs.scale !== "none" || cs.rotate !== "none") { 1682 style[_transformProp] = (cs.translate !== "none" ? "translate3d(" + (cs.translate + " 0 0").split(" ").slice(0, 3).join(", ") + ") " : "") + (cs.rotate !== "none" ? "rotate(" + cs.rotate + ") " : "") + (cs.scale !== "none" ? "scale(" + cs.scale.split(" ").join(",") + ") " : "") + (cs[_transformProp] !== "none" ? cs[_transformProp] : ""); 1683 } 1684 1685 style.scale = style.rotate = style.translate = "none"; 1686 } 1687 1688 matrix = _getMatrix(target, cache.svg); 1689 1690 if (cache.svg) { 1691 if (cache.uncache) { 1692 // if cache.uncache is true (and maybe if origin is 0,0), we need to set element.style.transformOrigin = (cache.xOrigin - bbox.x) + "px " + (cache.yOrigin - bbox.y) + "px". Previously we let the data-svg-origin stay instead, but when introducing revert(), it complicated things. 1693 t2 = target.getBBox(); 1694 origin = cache.xOrigin - t2.x + "px " + (cache.yOrigin - t2.y) + "px"; 1695 t1 = ""; 1696 } else { 1697 t1 = !uncache && target.getAttribute("data-svg-origin"); // Remember, to work around browser inconsistencies we always force SVG elements' transformOrigin to 0,0 and offset the translation accordingly. 1698 } 1699 1700 _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix); 1701 } 1702 1703 xOrigin = cache.xOrigin || 0; 1704 yOrigin = cache.yOrigin || 0; 1705 1706 if (matrix !== _identity2DMatrix) { 1707 a = matrix[0]; //a11 1708 1709 b = matrix[1]; //a21 1710 1711 c = matrix[2]; //a31 1712 1713 d = matrix[3]; //a41 1714 1715 x = a12 = matrix[4]; 1716 y = a22 = matrix[5]; //2D matrix 1717 1718 if (matrix.length === 6) { 1719 scaleX = Math.sqrt(a * a + b * b); 1720 scaleY = Math.sqrt(d * d + c * c); 1721 rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0; //note: if scaleX is 0, we cannot accurately measure rotation. Same for skewX with a scaleY of 0. Therefore, we default to the previously recorded value (or zero if that doesn't exist). 1722 1723 skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0; 1724 skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD))); 1725 1726 if (cache.svg) { 1727 x -= xOrigin - (xOrigin * a + yOrigin * c); 1728 y -= yOrigin - (xOrigin * b + yOrigin * d); 1729 } //3D matrix 1730 1731 } else { 1732 a32 = matrix[6]; 1733 a42 = matrix[7]; 1734 a13 = matrix[8]; 1735 a23 = matrix[9]; 1736 a33 = matrix[10]; 1737 a43 = matrix[11]; 1738 x = matrix[12]; 1739 y = matrix[13]; 1740 z = matrix[14]; 1741 angle = _atan2(a32, a33); 1742 rotationX = angle * _RAD2DEG; //rotationX 1743 1744 if (angle) { 1745 cos = Math.cos(-angle); 1746 sin = Math.sin(-angle); 1747 t1 = a12 * cos + a13 * sin; 1748 t2 = a22 * cos + a23 * sin; 1749 t3 = a32 * cos + a33 * sin; 1750 a13 = a12 * -sin + a13 * cos; 1751 a23 = a22 * -sin + a23 * cos; 1752 a33 = a32 * -sin + a33 * cos; 1753 a43 = a42 * -sin + a43 * cos; 1754 a12 = t1; 1755 a22 = t2; 1756 a32 = t3; 1757 } //rotationY 1758 1759 1760 angle = _atan2(-c, a33); 1761 rotationY = angle * _RAD2DEG; 1762 1763 if (angle) { 1764 cos = Math.cos(-angle); 1765 sin = Math.sin(-angle); 1766 t1 = a * cos - a13 * sin; 1767 t2 = b * cos - a23 * sin; 1768 t3 = c * cos - a33 * sin; 1769 a43 = d * sin + a43 * cos; 1770 a = t1; 1771 b = t2; 1772 c = t3; 1773 } //rotationZ 1774 1775 1776 angle = _atan2(b, a); 1777 rotation = angle * _RAD2DEG; 1778 1779 if (angle) { 1780 cos = Math.cos(angle); 1781 sin = Math.sin(angle); 1782 t1 = a * cos + b * sin; 1783 t2 = a12 * cos + a22 * sin; 1784 b = b * cos - a * sin; 1785 a22 = a22 * cos - a12 * sin; 1786 a = t1; 1787 a12 = t2; 1788 } 1789 1790 if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) { 1791 //when rotationY is set, it will often be parsed as 180 degrees different than it should be, and rotationX and rotation both being 180 (it looks the same), so we adjust for that here. 1792 rotationX = rotation = 0; 1793 rotationY = 180 - rotationY; 1794 } 1795 1796 scaleX = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(Math.sqrt(a * a + b * b + c * c)); 1797 scaleY = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(Math.sqrt(a22 * a22 + a32 * a32)); 1798 angle = _atan2(a12, a22); 1799 skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0; 1800 perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0; 1801 } 1802 1803 if (cache.svg) { 1804 //sense if there are CSS transforms applied on an SVG element in which case we must overwrite them when rendering. The transform attribute is more reliable cross-browser, but we can't just remove the CSS ones because they may be applied in a CSS rule somewhere (not just inline). 1805 t1 = target.getAttribute("transform"); 1806 cache.forceCSS = target.setAttribute("transform", "") || !_isNullTransform(_getComputedProperty(target, _transformProp)); 1807 t1 && target.setAttribute("transform", t1); 1808 } 1809 } 1810 1811 if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) { 1812 if (invertedScaleX) { 1813 scaleX *= -1; 1814 skewX += rotation <= 0 ? 180 : -180; 1815 rotation += rotation <= 0 ? 180 : -180; 1816 } else { 1817 scaleY *= -1; 1818 skewX += skewX <= 0 ? 180 : -180; 1819 } 1820 } 1821 1822 uncache = uncache || cache.uncache; 1823 cache.x = x - ((cache.xPercent = x && (!uncache && cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px; 1824 cache.y = y - ((cache.yPercent = y && (!uncache && cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px; 1825 cache.z = z + px; 1826 cache.scaleX = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(scaleX); 1827 cache.scaleY = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(scaleY); 1828 cache.rotation = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(rotation) + deg; 1829 cache.rotationX = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(rotationX) + deg; 1830 cache.rotationY = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(rotationY) + deg; 1831 cache.skewX = skewX + deg; 1832 cache.skewY = skewY + deg; 1833 cache.transformPerspective = perspective + px; 1834 1835 if (cache.zOrigin = parseFloat(origin.split(" ")[2]) || 0) { 1836 style[_transformOriginProp] = _firstTwoOnly(origin); 1837 } 1838 1839 cache.xOffset = cache.yOffset = 0; 1840 cache.force3D = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.force3D; 1841 cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms; 1842 cache.uncache = 0; 1843 return cache; 1844}, 1845 _firstTwoOnly = function _firstTwoOnly(value) { 1846 return (value = value.split(" "))[0] + " " + value[1]; 1847}, 1848 //for handling transformOrigin values, stripping out the 3rd dimension 1849_addPxTranslate = function _addPxTranslate(target, start, value) { 1850 var unit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(start); 1851 return (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(parseFloat(start) + parseFloat(_convertToUnit(target, "x", value + "px", unit))) + unit; 1852}, 1853 _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) { 1854 cache.z = "0px"; 1855 cache.rotationY = cache.rotationX = "0deg"; 1856 cache.force3D = 0; 1857 1858 _renderCSSTransforms(ratio, cache); 1859}, 1860 _zeroDeg = "0deg", 1861 _zeroPx = "0px", 1862 _endParenthesis = ") ", 1863 _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) { 1864 var _ref = cache || this, 1865 xPercent = _ref.xPercent, 1866 yPercent = _ref.yPercent, 1867 x = _ref.x, 1868 y = _ref.y, 1869 z = _ref.z, 1870 rotation = _ref.rotation, 1871 rotationY = _ref.rotationY, 1872 rotationX = _ref.rotationX, 1873 skewX = _ref.skewX, 1874 skewY = _ref.skewY, 1875 scaleX = _ref.scaleX, 1876 scaleY = _ref.scaleY, 1877 transformPerspective = _ref.transformPerspective, 1878 force3D = _ref.force3D, 1879 target = _ref.target, 1880 zOrigin = _ref.zOrigin, 1881 transforms = "", 1882 use3D = force3D === "auto" && ratio && ratio !== 1 || force3D === true; // Safari has a bug that causes it not to render 3D transform-origin values properly, so we force the z origin to 0, record it in the cache, and then do the math here to offset the translate values accordingly (basically do the 3D transform-origin part manually) 1883 1884 1885 if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) { 1886 var angle = parseFloat(rotationY) * _DEG2RAD, 1887 a13 = Math.sin(angle), 1888 a33 = Math.cos(angle), 1889 cos; 1890 1891 angle = parseFloat(rotationX) * _DEG2RAD; 1892 cos = Math.cos(angle); 1893 x = _addPxTranslate(target, x, a13 * cos * -zOrigin); 1894 y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin); 1895 z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin); 1896 } 1897 1898 if (transformPerspective !== _zeroPx) { 1899 transforms += "perspective(" + transformPerspective + _endParenthesis; 1900 } 1901 1902 if (xPercent || yPercent) { 1903 transforms += "translate(" + xPercent + "%, " + yPercent + "%) "; 1904 } 1905 1906 if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) { 1907 transforms += z !== _zeroPx || use3D ? "translate3d(" + x + ", " + y + ", " + z + ") " : "translate(" + x + ", " + y + _endParenthesis; 1908 } 1909 1910 if (rotation !== _zeroDeg) { 1911 transforms += "rotate(" + rotation + _endParenthesis; 1912 } 1913 1914 if (rotationY !== _zeroDeg) { 1915 transforms += "rotateY(" + rotationY + _endParenthesis; 1916 } 1917 1918 if (rotationX !== _zeroDeg) { 1919 transforms += "rotateX(" + rotationX + _endParenthesis; 1920 } 1921 1922 if (skewX !== _zeroDeg || skewY !== _zeroDeg) { 1923 transforms += "skew(" + skewX + ", " + skewY + _endParenthesis; 1924 } 1925 1926 if (scaleX !== 1 || scaleY !== 1) { 1927 transforms += "scale(" + scaleX + ", " + scaleY + _endParenthesis; 1928 } 1929 1930 target.style[_transformProp] = transforms || "translate(0, 0)"; 1931}, 1932 _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) { 1933 var _ref2 = cache || this, 1934 xPercent = _ref2.xPercent, 1935 yPercent = _ref2.yPercent, 1936 x = _ref2.x, 1937 y = _ref2.y, 1938 rotation = _ref2.rotation, 1939 skewX = _ref2.skewX, 1940 skewY = _ref2.skewY, 1941 scaleX = _ref2.scaleX, 1942 scaleY = _ref2.scaleY, 1943 target = _ref2.target, 1944 xOrigin = _ref2.xOrigin, 1945 yOrigin = _ref2.yOrigin, 1946 xOffset = _ref2.xOffset, 1947 yOffset = _ref2.yOffset, 1948 forceCSS = _ref2.forceCSS, 1949 tx = parseFloat(x), 1950 ty = parseFloat(y), 1951 a11, 1952 a21, 1953 a12, 1954 a22, 1955 temp; 1956 1957 rotation = parseFloat(rotation); 1958 skewX = parseFloat(skewX); 1959 skewY = parseFloat(skewY); 1960 1961 if (skewY) { 1962 //for performance reasons, we combine all skewing into the skewX and rotation values. Remember, a skewY of 10 degrees looks the same as a rotation of 10 degrees plus a skewX of 10 degrees. 1963 skewY = parseFloat(skewY); 1964 skewX += skewY; 1965 rotation += skewY; 1966 } 1967 1968 if (rotation || skewX) { 1969 rotation *= _DEG2RAD; 1970 skewX *= _DEG2RAD; 1971 a11 = Math.cos(rotation) * scaleX; 1972 a21 = Math.sin(rotation) * scaleX; 1973 a12 = Math.sin(rotation - skewX) * -scaleY; 1974 a22 = Math.cos(rotation - skewX) * scaleY; 1975 1976 if (skewX) { 1977 skewY *= _DEG2RAD; 1978 temp = Math.tan(skewX - skewY); 1979 temp = Math.sqrt(1 + temp * temp); 1980 a12 *= temp; 1981 a22 *= temp; 1982 1983 if (skewY) { 1984 temp = Math.tan(skewY); 1985 temp = Math.sqrt(1 + temp * temp); 1986 a11 *= temp; 1987 a21 *= temp; 1988 } 1989 } 1990 1991 a11 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a11); 1992 a21 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a21); 1993 a12 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a12); 1994 a22 = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(a22); 1995 } else { 1996 a11 = scaleX; 1997 a22 = scaleY; 1998 a21 = a12 = 0; 1999 } 2000 2001 if (tx && !~(x + "").indexOf("px") || ty && !~(y + "").indexOf("px")) { 2002 tx = _convertToUnit(target, "x", x, "px"); 2003 ty = _convertToUnit(target, "y", y, "px"); 2004 } 2005 2006 if (xOrigin || yOrigin || xOffset || yOffset) { 2007 tx = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset); 2008 ty = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset); 2009 } 2010 2011 if (xPercent || yPercent) { 2012 //The SVG spec doesn't support percentage-based translation in the "transform" attribute, so we merge it into the translation to simulate it. 2013 temp = target.getBBox(); 2014 tx = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(tx + xPercent / 100 * temp.width); 2015 ty = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._round)(ty + yPercent / 100 * temp.height); 2016 } 2017 2018 temp = "matrix(" + a11 + "," + a21 + "," + a12 + "," + a22 + "," + tx + "," + ty + ")"; 2019 target.setAttribute("transform", temp); 2020 forceCSS && (target.style[_transformProp] = temp); //some browsers prioritize CSS transforms over the transform attribute. When we sense that the user has CSS transforms applied, we must overwrite them this way (otherwise some browser simply won't render the transform attribute changes!) 2021}, 2022 _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue) { 2023 var cap = 360, 2024 isString = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._isString)(endValue), 2025 endNum = parseFloat(endValue) * (isString && ~endValue.indexOf("rad") ? _RAD2DEG : 1), 2026 change = endNum - startNum, 2027 finalValue = startNum + change + "deg", 2028 direction, 2029 pt; 2030 2031 if (isString) { 2032 direction = endValue.split("_")[1]; 2033 2034 if (direction === "short") { 2035 change %= cap; 2036 2037 if (change !== change % (cap / 2)) { 2038 change += change < 0 ? cap : -cap; 2039 } 2040 } 2041 2042 if (direction === "cw" && change < 0) { 2043 change = (change + cap * _bigNum) % cap - ~~(change / cap) * cap; 2044 } else if (direction === "ccw" && change > 0) { 2045 change = (change - cap * _bigNum) % cap - ~~(change / cap) * cap; 2046 } 2047 } 2048 2049 plugin._pt = pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd); 2050 pt.e = finalValue; 2051 pt.u = "deg"; 2052 2053 plugin._props.push(property); 2054 2055 return pt; 2056}, 2057 _assign = function _assign(target, source) { 2058 // Internet Explorer doesn't have Object.assign(), so we recreate it here. 2059 for (var p in source) { 2060 target[p] = source[p]; 2061 } 2062 2063 return target; 2064}, 2065 _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) { 2066 //for handling cases where someone passes in a whole transform string, like transform: "scale(2, 3) rotate(20deg) translateY(30em)" 2067 var startCache = _assign({}, target._gsap), 2068 exclude = "perspective,force3D,transformOrigin,svgOrigin", 2069 style = target.style, 2070 endCache, 2071 p, 2072 startValue, 2073 endValue, 2074 startNum, 2075 endNum, 2076 startUnit, 2077 endUnit; 2078 2079 if (startCache.svg) { 2080 startValue = target.getAttribute("transform"); 2081 target.setAttribute("transform", ""); 2082 style[_transformProp] = transforms; 2083 endCache = _parseTransform(target, 1); 2084 2085 _removeProperty(target, _transformProp); 2086 2087 target.setAttribute("transform", startValue); 2088 } else { 2089 startValue = getComputedStyle(target)[_transformProp]; 2090 style[_transformProp] = transforms; 2091 endCache = _parseTransform(target, 1); 2092 style[_transformProp] = startValue; 2093 } 2094 2095 for (p in _transformProps) { 2096 startValue = startCache[p]; 2097 endValue = endCache[p]; 2098 2099 if (startValue !== endValue && exclude.indexOf(p) < 0) { 2100 //tweening to no perspective gives very unintuitive results - just keep the same perspective in that case. 2101 startUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(startValue); 2102 endUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(endValue); 2103 startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue); 2104 endNum = parseFloat(endValue); 2105 plugin._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp); 2106 plugin._pt.u = endUnit || 0; 2107 2108 plugin._props.push(p); 2109 } 2110 } 2111 2112 _assign(endCache, startCache); 2113}; // handle splitting apart padding, margin, borderWidth, and borderRadius into their 4 components. Firefox, for example, won't report borderRadius correctly - it will only do borderTopLeftRadius and the other corners. We also want to handle paddingTop, marginLeft, borderRightWidth, etc. 2114 2115 2116(0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)("padding,margin,Width,Radius", function (name, index) { 2117 var t = "Top", 2118 r = "Right", 2119 b = "Bottom", 2120 l = "Left", 2121 props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) { 2122 return index < 2 ? name + side : "border" + side + name; 2123 }); 2124 2125 _specialProps[index > 1 ? "border" + name : name] = function (plugin, target, property, endValue, tween) { 2126 var a, vars; 2127 2128 if (arguments.length < 4) { 2129 // getter, passed target, property, and unit (from _get()) 2130 a = props.map(function (prop) { 2131 return _get(plugin, prop, property); 2132 }); 2133 vars = a.join(" "); 2134 return vars.split(a[0]).length === 5 ? a[0] : vars; 2135 } 2136 2137 a = (endValue + "").split(" "); 2138 vars = {}; 2139 props.forEach(function (prop, i) { 2140 return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0]; 2141 }); 2142 plugin.init(target, vars, tween); 2143 }; 2144}); 2145 2146var CSSPlugin = { 2147 name: "css", 2148 register: _initCore, 2149 targetTest: function targetTest(target) { 2150 return target.style && target.nodeType; 2151 }, 2152 init: function init(target, vars, tween, index, targets) { 2153 var props = this._props, 2154 style = target.style, 2155 startAt = tween.vars.startAt, 2156 startValue, 2157 endValue, 2158 endNum, 2159 startNum, 2160 type, 2161 specialProp, 2162 p, 2163 startUnit, 2164 endUnit, 2165 relative, 2166 isTransformRelated, 2167 transformPropTween, 2168 cache, 2169 smooth, 2170 hasPriority, 2171 inlineProps; 2172 _pluginInitted || _initCore(); // we may call init() multiple times on the same plugin instance, like when adding special properties, so make sure we don't overwrite the revert data or inlineProps 2173 2174 this.styles = this.styles || _getStyleSaver(target); 2175 inlineProps = this.styles.props; 2176 this.tween = tween; 2177 2178 for (p in vars) { 2179 if (p === "autoRound") { 2180 continue; 2181 } 2182 2183 endValue = vars[p]; 2184 2185 if (_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._plugins[p] && (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._checkPlugin)(p, vars, tween, index, target, targets)) { 2186 // plugins 2187 continue; 2188 } 2189 2190 type = typeof endValue; 2191 specialProp = _specialProps[p]; 2192 2193 if (type === "function") { 2194 endValue = endValue.call(tween, index, target, targets); 2195 type = typeof endValue; 2196 } 2197 2198 if (type === "string" && ~endValue.indexOf("random(")) { 2199 endValue = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._replaceRandom)(endValue); 2200 } 2201 2202 if (specialProp) { 2203 specialProp(this, target, p, endValue, tween) && (hasPriority = 1); 2204 } else if (p.substr(0, 2) === "--") { 2205 //CSS variable 2206 startValue = (getComputedStyle(target).getPropertyValue(p) + "").trim(); 2207 endValue += ""; 2208 _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._colorExp.lastIndex = 0; 2209 2210 if (!_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._colorExp.test(startValue)) { 2211 // colors don't have units 2212 startUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(startValue); 2213 endUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(endValue); 2214 } 2215 2216 endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit); 2217 this.add(style, "setProperty", startValue, endValue, index, targets, 0, 0, p); 2218 props.push(p); 2219 inlineProps.push(p, 0, style[p]); 2220 } else if (type !== "undefined") { 2221 if (startAt && p in startAt) { 2222 // in case someone hard-codes a complex value as the start, like top: "calc(2vh / 2)". Without this, it'd use the computed value (always in px) 2223 startValue = typeof startAt[p] === "function" ? startAt[p].call(tween, index, target, targets) : startAt[p]; 2224 (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._isString)(startValue) && ~startValue.indexOf("random(") && (startValue = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._replaceRandom)(startValue)); 2225 (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(startValue + "") || (startValue += _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[p] || (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(_get(target, p)) || ""); // for cases when someone passes in a unitless value like {x: 100}; if we try setting translate(100, 0px) it won't work. 2226 2227 (startValue + "").charAt(1) === "=" && (startValue = _get(target, p)); // can't work with relative values 2228 } else { 2229 startValue = _get(target, p); 2230 } 2231 2232 startNum = parseFloat(startValue); 2233 relative = type === "string" && endValue.charAt(1) === "=" && endValue.substr(0, 2); 2234 relative && (endValue = endValue.substr(2)); 2235 endNum = parseFloat(endValue); 2236 2237 if (p in _propertyAliases) { 2238 if (p === "autoAlpha") { 2239 //special case where we control the visibility along with opacity. We still allow the opacity value to pass through and get tweened. 2240 if (startNum === 1 && _get(target, "visibility") === "hidden" && endNum) { 2241 //if visibility is initially set to "hidden", we should interpret that as intent to make opacity 0 (a convenience) 2242 startNum = 0; 2243 } 2244 2245 inlineProps.push("visibility", 0, style.visibility); 2246 2247 _addNonTweeningPT(this, style, "visibility", startNum ? "inherit" : "hidden", endNum ? "inherit" : "hidden", !endNum); 2248 } 2249 2250 if (p !== "scale" && p !== "transform") { 2251 p = _propertyAliases[p]; 2252 ~p.indexOf(",") && (p = p.split(",")[0]); 2253 } 2254 } 2255 2256 isTransformRelated = p in _transformProps; //--- TRANSFORM-RELATED --- 2257 2258 if (isTransformRelated) { 2259 this.styles.save(p); 2260 2261 if (!transformPropTween) { 2262 cache = target._gsap; 2263 cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform); // if, for example, gsap.set(... {transform:"translateX(50vw)"}), the _get() call doesn't parse the transform, thus cache.renderTransform won't be set yet so force the parsing of the transform here. 2264 2265 smooth = vars.smoothOrigin !== false && cache.smooth; 2266 transformPropTween = this._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1); //the first time through, create the rendering PropTween so that it runs LAST (in the linked list, we keep adding to the beginning) 2267 2268 transformPropTween.dep = 1; //flag it as dependent so that if things get killed/overwritten and this is the only PropTween left, we can safely kill the whole tween. 2269 } 2270 2271 if (p === "scale") { 2272 this._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, cache, "scaleY", cache.scaleY, (relative ? (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(cache.scaleY, relative + endNum) : endNum) - cache.scaleY || 0, _renderCSSProp); 2273 this._pt.u = 0; 2274 props.push("scaleY", p); 2275 p += "X"; 2276 } else if (p === "transformOrigin") { 2277 inlineProps.push(_transformOriginProp, 0, style[_transformOriginProp]); 2278 endValue = _convertKeywordsToPercentages(endValue); //in case something like "left top" or "bottom right" is passed in. Convert to percentages. 2279 2280 if (cache.svg) { 2281 _applySVGOrigin(target, endValue, 0, smooth, 0, this); 2282 } else { 2283 endUnit = parseFloat(endValue.split(" ")[2]) || 0; //handle the zOrigin separately! 2284 2285 endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, "zOrigin", cache.zOrigin, endUnit); 2286 2287 _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue)); 2288 } 2289 2290 continue; 2291 } else if (p === "svgOrigin") { 2292 _applySVGOrigin(target, endValue, 1, smooth, 0, this); 2293 2294 continue; 2295 } else if (p in _rotationalProperties) { 2296 _addRotationalPropTween(this, cache, p, startNum, relative ? (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(startNum, relative + endValue) : endValue); 2297 2298 continue; 2299 } else if (p === "smoothOrigin") { 2300 _addNonTweeningPT(this, cache, "smooth", cache.smooth, endValue); 2301 2302 continue; 2303 } else if (p === "force3D") { 2304 cache[p] = endValue; 2305 continue; 2306 } else if (p === "transform") { 2307 _addRawTransformPTs(this, endValue, target); 2308 2309 continue; 2310 } 2311 } else if (!(p in style)) { 2312 p = _checkPropPrefix(p) || p; 2313 } 2314 2315 if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) { 2316 startUnit = (startValue + "").substr((startNum + "").length); 2317 endNum || (endNum = 0); // protect against NaN 2318 2319 endUnit = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.getUnit)(endValue) || (p in _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units ? _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[p] : startUnit); 2320 startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit)); 2321 this._pt = new _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, (relative ? (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._parseRelative)(startNum, relative + endNum) : endNum) - startNum, !isTransformRelated && (endUnit === "px" || p === "zIndex") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp); 2322 this._pt.u = endUnit || 0; 2323 2324 if (startUnit !== endUnit && endUnit !== "%") { 2325 //when the tween goes all the way back to the beginning, we need to revert it to the OLD/ORIGINAL value (with those units). We record that as a "b" (beginning) property and point to a render method that handles that. (performance optimization) 2326 this._pt.b = startValue; 2327 this._pt.r = _renderCSSPropWithBeginning; 2328 } 2329 } else if (!(p in style)) { 2330 if (p in target) { 2331 //maybe it's not a style - it could be a property added directly to an element in which case we'll try to animate that. 2332 this.add(target, p, startValue || target[p], relative ? relative + endValue : endValue, index, targets); 2333 } else if (p !== "parseTransform") { 2334 (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._missingPlugin)(p, endValue); 2335 2336 continue; 2337 } 2338 } else { 2339 _tweenComplexCSSString.call(this, target, p, startValue, relative ? relative + endValue : endValue); 2340 } 2341 2342 isTransformRelated || (p in style ? inlineProps.push(p, 0, style[p]) : inlineProps.push(p, 1, startValue || target[p])); 2343 props.push(p); 2344 } 2345 } 2346 2347 hasPriority && (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._sortPropTweensByPriority)(this); 2348 }, 2349 render: function render(ratio, data) { 2350 if (data.tween._time || !_reverting()) { 2351 var pt = data._pt; 2352 2353 while (pt) { 2354 pt.r(ratio, pt.d); 2355 pt = pt._next; 2356 } 2357 } else { 2358 data.styles.revert(); 2359 } 2360 }, 2361 get: _get, 2362 aliases: _propertyAliases, 2363 getSetter: function getSetter(target, property, plugin) { 2364 //returns a setter function that accepts target, property, value and applies it accordingly. Remember, properties like "x" aren't as simple as target.style.property = value because they've got to be applied to a proxy object and then merged into a transform string in a renderer. 2365 var p = _propertyAliases[property]; 2366 p && p.indexOf(",") < 0 && (property = p); 2367 return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, "x")) ? plugin && _recentSetterPlugin === plugin ? property === "scale" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === "scale" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !(0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._isUndefined)(target.style[property]) ? _setterCSSStyle : ~property.indexOf("-") ? _setterCSSProp : (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._getSetter)(target, property); 2368 }, 2369 core: { 2370 _removeProperty: _removeProperty, 2371 _getMatrix: _getMatrix 2372 } 2373}; 2374_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.utils.checkPrefix = _checkPropPrefix; 2375_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.core.getStyleSaver = _getStyleSaver; 2376 2377(function (positionAndScale, rotation, others, aliases) { 2378 var all = (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(positionAndScale + "," + rotation + "," + others, function (name) { 2379 _transformProps[name] = 1; 2380 }); 2381 2382 (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(rotation, function (name) { 2383 _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[name] = "deg"; 2384 _rotationalProperties[name] = 1; 2385 }); 2386 2387 _propertyAliases[all[13]] = positionAndScale + "," + rotation; 2388 2389 (0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)(aliases, function (name) { 2390 var split = name.split(":"); 2391 _propertyAliases[split[1]] = all[split[0]]; 2392 }); 2393})("x,y,z,scale,scaleX,scaleY,xPercent,yPercent", "rotation,rotationX,rotationY,skewX,skewY", "transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective", "0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY"); 2394 2395(0,_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._forEachName)("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective", function (name) { 2396 _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__._config.units[name] = "px"; 2397}); 2398 2399_gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.registerPlugin(CSSPlugin); 2400 2401 2402/***/ }), 2403
vendor: 26,145 bytes, lines 2404-3108
2404/***/ "./node_modules/gsap/Observer.js": 2405/*!***************************************!*\ 2406 !*** ./node_modules/gsap/Observer.js ***! 2407 \***************************************/ 2408/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 2409 2410__webpack_require__.r(__webpack_exports__); 2411/* harmony export */ __webpack_require__.d(__webpack_exports__, { 2412/* harmony export */ Observer: function() { return /* binding */ Observer; }, 2413/* harmony export */ _getProxyProp: function() { return /* binding */ _getProxyProp; }, 2414/* harmony export */ _getScrollFunc: function() { return /* binding */ _getScrollFunc; }, 2415/* harmony export */ _getTarget: function() { return /* binding */ _getTarget; }, 2416/* harmony export */ _getVelocityProp: function() { return /* binding */ _getVelocityProp; }, 2417/* harmony export */ _horizontal: function() { return /* binding */ _horizontal; }, 2418/* harmony export */ _isViewport: function() { return /* binding */ _isViewport; }, 2419/* harmony export */ _proxies: function() { return /* binding */ _proxies; }, 2420/* harmony export */ _scrollers: function() { return /* binding */ _scrollers; }, 2421/* harmony export */ _vertical: function() { return /* binding */ _vertical; }, 2422/* harmony export */ "default": function() { return /* binding */ Observer; } 2423/* harmony export */ }); 2424function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 2425 2426function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 2427 2428/*! 2429 * Observer 3.12.2 2430 * https://greensock.com 2431 * 2432 * @license Copyright 2008-2023, GreenSock. All rights reserved. 2433 * Subject to the terms at https://greensock.com/standard-license or for 2434 * Club GreenSock members, the agreement issued with that membership. 2435 * @author: Jack Doyle, [email protected] 2436*/ 2437 2438/* eslint-disable */ 2439var gsap, 2440 _coreInitted, 2441 _clamp, 2442 _win, 2443 _doc, 2444 _docEl, 2445 _body, 2446 _isTouch, 2447 _pointerType, 2448 ScrollTrigger, 2449 _root, 2450 _normalizer, 2451 _eventTypes, 2452 _context, 2453 _getGSAP = function _getGSAP() { 2454 return gsap || typeof window !== "undefined" && (gsap = window.gsap) && gsap.registerPlugin && gsap; 2455}, 2456 _startup = 1, 2457 _observers = [], 2458 _scrollers = [], 2459 _proxies = [], 2460 _getTime = Date.now, 2461 _bridge = function _bridge(name, value) { 2462 return value; 2463}, 2464 _integrate = function _integrate() { 2465 var core = ScrollTrigger.core, 2466 data = core.bridge || {}, 2467 scrollers = core._scrollers, 2468 proxies = core._proxies; 2469 scrollers.push.apply(scrollers, _scrollers); 2470 proxies.push.apply(proxies, _proxies); 2471 _scrollers = scrollers; 2472 _proxies = proxies; 2473 2474 _bridge = function _bridge(name, value) { 2475 return data[name](value); 2476 }; 2477}, 2478 _getProxyProp = function _getProxyProp(element, property) { 2479 return ~_proxies.indexOf(element) && _proxies[_proxies.indexOf(element) + 1][property]; 2480}, 2481 _isViewport = function _isViewport(el) { 2482 return !!~_root.indexOf(el); 2483}, 2484 _addListener = function _addListener(element, type, func, nonPassive, capture) { 2485 return element.addEventListener(type, func, { 2486 passive: !nonPassive, 2487 capture: !!capture 2488 }); 2489}, 2490 _removeListener = function _removeListener(element, type, func, capture) { 2491 return element.removeEventListener(type, func, !!capture); 2492}, 2493 _scrollLeft = "scrollLeft", 2494 _scrollTop = "scrollTop", 2495 _onScroll = function _onScroll() { 2496 return _normalizer && _normalizer.isPressed || _scrollers.cache++; 2497}, 2498 _scrollCacheFunc = function _scrollCacheFunc(f, doNotCache) { 2499 var cachingFunc = function cachingFunc(value) { 2500 // since reading the scrollTop/scrollLeft/pageOffsetY/pageOffsetX can trigger a layout, this function allows us to cache the value so it only gets read fresh after a "scroll" event fires (or while we're refreshing because that can lengthen the page and alter the scroll position). when "soft" is true, that means don't actually set the scroll, but cache the new value instead (useful in ScrollSmoother) 2501 if (value || value === 0) { 2502 _startup && (_win.history.scrollRestoration = "manual"); // otherwise the new position will get overwritten by the browser onload. 2503 2504 var isNormalizing = _normalizer && _normalizer.isPressed; 2505 value = cachingFunc.v = Math.round(value) || (_normalizer && _normalizer.iOS ? 1 : 0); //TODO: iOS Bug: if you allow it to go to 0, Safari can start to report super strange (wildly inaccurate) touch positions! 2506 2507 f(value); 2508 cachingFunc.cacheID = _scrollers.cache; 2509 isNormalizing && _bridge("ss", value); // set scroll (notify ScrollTrigger so it can dispatch a "scrollStart" event if necessary 2510 } else if (doNotCache || _scrollers.cache !== cachingFunc.cacheID || _bridge("ref")) { 2511 cachingFunc.cacheID = _scrollers.cache; 2512 cachingFunc.v = f(); 2513 } 2514 2515 return cachingFunc.v + cachingFunc.offset; 2516 }; 2517 2518 cachingFunc.offset = 0; 2519 return f && cachingFunc; 2520}, 2521 _horizontal = { 2522 s: _scrollLeft, 2523 p: "left", 2524 p2: "Left", 2525 os: "right", 2526 os2: "Right", 2527 d: "width", 2528 d2: "Width", 2529 a: "x", 2530 sc: _scrollCacheFunc(function (value) { 2531 return arguments.length ? _win.scrollTo(value, _vertical.sc()) : _win.pageXOffset || _doc[_scrollLeft] || _docEl[_scrollLeft] || _body[_scrollLeft] || 0; 2532 }) 2533}, 2534 _vertical = { 2535 s: _scrollTop, 2536 p: "top", 2537 p2: "Top", 2538 os: "bottom", 2539 os2: "Bottom", 2540 d: "height", 2541 d2: "Height", 2542 a: "y", 2543 op: _horizontal, 2544 sc: _scrollCacheFunc(function (value) { 2545 return arguments.length ? _win.scrollTo(_horizontal.sc(), value) : _win.pageYOffset || _doc[_scrollTop] || _docEl[_scrollTop] || _body[_scrollTop] || 0; 2546 }) 2547}, 2548 _getTarget = function _getTarget(t, self) { 2549 return (self && self._ctx && self._ctx.selector || gsap.utils.toArray)(t)[0] || (typeof t === "string" && gsap.config().nullTargetWarn !== false ? console.warn("Element not found:", t) : null); 2550}, 2551 _getScrollFunc = function _getScrollFunc(element, _ref) { 2552 var s = _ref.s, 2553 sc = _ref.sc; 2554 // we store the scroller functions in an alternating sequenced Array like [element, verticalScrollFunc, horizontalScrollFunc, ...] so that we can minimize memory, maximize performance, and we also record the last position as a ".rec" property in order to revert to that after refreshing to ensure things don't shift around. 2555 _isViewport(element) && (element = _doc.scrollingElement || _docEl); 2556 2557 var i = _scrollers.indexOf(element), 2558 offset = sc === _vertical.sc ? 1 : 2; 2559 2560 !~i && (i = _scrollers.push(element) - 1); 2561 _scrollers[i + offset] || _addListener(element, "scroll", _onScroll); // clear the cache when a scroll occurs 2562 2563 var prev = _scrollers[i + offset], 2564 func = prev || (_scrollers[i + offset] = _scrollCacheFunc(_getProxyProp(element, s), true) || (_isViewport(element) ? sc : _scrollCacheFunc(function (value) { 2565 return arguments.length ? element[s] = value : element[s]; 2566 }))); 2567 func.target = element; 2568 prev || (func.smooth = gsap.getProperty(element, "scrollBehavior") === "smooth"); // only set it the first time (don't reset every time a scrollFunc is requested because perhaps it happens during a refresh() when it's disabled in ScrollTrigger. 2569 2570 return func; 2571}, 2572 _getVelocityProp = function _getVelocityProp(value, minTimeRefresh, useDelta) { 2573 var v1 = value, 2574 v2 = value, 2575 t1 = _getTime(), 2576 t2 = t1, 2577 min = minTimeRefresh || 50, 2578 dropToZeroTime = Math.max(500, min * 3), 2579 update = function update(value, force) { 2580 var t = _getTime(); 2581 2582 if (force || t - t1 > min) { 2583 v2 = v1; 2584 v1 = value; 2585 t2 = t1; 2586 t1 = t; 2587 } else if (useDelta) { 2588 v1 += value; 2589 } else { 2590 // not totally necessary, but makes it a bit more accurate by adjusting the v1 value according to the new slope. This way we're not just ignoring the incoming data. Removing for now because it doesn't seem to make much practical difference and it's probably not worth the kb. 2591 v1 = v2 + (value - v2) / (t - t2) * (t1 - t2); 2592 } 2593 }, 2594 reset = function reset() { 2595 v2 = v1 = useDelta ? 0 : v1; 2596 t2 = t1 = 0; 2597 }, 2598 getVelocity = function getVelocity(latestValue) { 2599 var tOld = t2, 2600 vOld = v2, 2601 t = _getTime(); 2602 2603 (latestValue || latestValue === 0) && latestValue !== v1 && update(latestValue); 2604 return t1 === t2 || t - t2 > dropToZeroTime ? 0 : (v1 + (useDelta ? vOld : -vOld)) / ((useDelta ? t : t1) - tOld) * 1000; 2605 }; 2606 2607 return { 2608 update: update, 2609 reset: reset, 2610 getVelocity: getVelocity 2611 }; 2612}, 2613 _getEvent = function _getEvent(e, preventDefault) { 2614 preventDefault && !e._gsapAllow && e.preventDefault(); 2615 return e.changedTouches ? e.changedTouches[0] : e; 2616}, 2617 _getAbsoluteMax = function _getAbsoluteMax(a) { 2618 var max = Math.max.apply(Math, a), 2619 min = Math.min.apply(Math, a); 2620 return Math.abs(max) >= Math.abs(min) ? max : min; 2621}, 2622 _setScrollTrigger = function _setScrollTrigger() { 2623 ScrollTrigger = gsap.core.globals().ScrollTrigger; 2624 ScrollTrigger && ScrollTrigger.core && _integrate(); 2625}, 2626 _initCore = function _initCore(core) { 2627 gsap = core || _getGSAP(); 2628 2629 if (gsap && typeof document !== "undefined" && document.body) { 2630 _win = window; 2631 _doc = document; 2632 _docEl = _doc.documentElement; 2633 _body = _doc.body; 2634 _root = [_win, _doc, _docEl, _body]; 2635 _clamp = gsap.utils.clamp; 2636 2637 _context = gsap.core.context || function () {}; 2638 2639 _pointerType = "onpointerenter" in _body ? "pointer" : "mouse"; // isTouch is 0 if no touch, 1 if ONLY touch, and 2 if it can accommodate touch but also other types like mouse/pointer. 2640 2641 _isTouch = Observer.isTouch = _win.matchMedia && _win.matchMedia("(hover: none), (pointer: coarse)").matches ? 1 : "ontouchstart" in _win || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 ? 2 : 0; 2642 _eventTypes = Observer.eventTypes = ("ontouchstart" in _docEl ? "touchstart,touchmove,touchcancel,touchend" : !("onpointerdown" in _docEl) ? "mousedown,mousemove,mouseup,mouseup" : "pointerdown,pointermove,pointercancel,pointerup").split(","); 2643 setTimeout(function () { 2644 return _startup = 0; 2645 }, 500); 2646 2647 _setScrollTrigger(); 2648 2649 _coreInitted = 1; 2650 } 2651 2652 return _coreInitted; 2653}; 2654 2655_horizontal.op = _vertical; 2656_scrollers.cache = 0; 2657var Observer = /*#__PURE__*/function () { 2658 function Observer(vars) { 2659 this.init(vars); 2660 } 2661 2662 var _proto = Observer.prototype; 2663 2664 _proto.init = function init(vars) { 2665 _coreInitted || _initCore(gsap) || console.warn("Please gsap.registerPlugin(Observer)"); 2666 ScrollTrigger || _setScrollTrigger(); 2667 var tolerance = vars.tolerance, 2668 dragMinimum = vars.dragMinimum, 2669 type = vars.type, 2670 target = vars.target, 2671 lineHeight = vars.lineHeight, 2672 debounce = vars.debounce, 2673 preventDefault = vars.preventDefault, 2674 onStop = vars.onStop, 2675 onStopDelay = vars.onStopDelay, 2676 ignore = vars.ignore, 2677 wheelSpeed = vars.wheelSpeed, 2678 event = vars.event, 2679 onDragStart = vars.onDragStart, 2680 onDragEnd = vars.onDragEnd, 2681 onDrag = vars.onDrag, 2682 onPress = vars.onPress, 2683 onRelease = vars.onRelease, 2684 onRight = vars.onRight, 2685 onLeft = vars.onLeft, 2686 onUp = vars.onUp, 2687 onDown = vars.onDown, 2688 onChangeX = vars.onChangeX, 2689 onChangeY = vars.onChangeY, 2690 onChange = vars.onChange, 2691 onToggleX = vars.onToggleX, 2692 onToggleY = vars.onToggleY, 2693 onHover = vars.onHover, 2694 onHoverEnd = vars.onHoverEnd, 2695 onMove = vars.onMove, 2696 ignoreCheck = vars.ignoreCheck, 2697 isNormalizer = vars.isNormalizer, 2698 onGestureStart = vars.onGestureStart, 2699 onGestureEnd = vars.onGestureEnd, 2700 onWheel = vars.onWheel, 2701 onEnable = vars.onEnable, 2702 onDisable = vars.onDisable, 2703 onClick = vars.onClick, 2704 scrollSpeed = vars.scrollSpeed, 2705 capture = vars.capture, 2706 allowClicks = vars.allowClicks, 2707 lockAxis = vars.lockAxis, 2708 onLockAxis = vars.onLockAxis; 2709 this.target = target = _getTarget(target) || _docEl; 2710 this.vars = vars; 2711 ignore && (ignore = gsap.utils.toArray(ignore)); 2712 tolerance = tolerance || 1e-9; 2713 dragMinimum = dragMinimum || 0; 2714 wheelSpeed = wheelSpeed || 1; 2715 scrollSpeed = scrollSpeed || 1; 2716 type = type || "wheel,touch,pointer"; 2717 debounce = debounce !== false; 2718 lineHeight || (lineHeight = parseFloat(_win.getComputedStyle(_body).lineHeight) || 22); // note: browser may report "normal", so default to 22. 2719 2720 var id, 2721 onStopDelayedCall, 2722 dragged, 2723 moved, 2724 wheeled, 2725 locked, 2726 axis, 2727 self = this, 2728 prevDeltaX = 0, 2729 prevDeltaY = 0, 2730 scrollFuncX = _getScrollFunc(target, _horizontal), 2731 scrollFuncY = _getScrollFunc(target, _vertical), 2732 scrollX = scrollFuncX(), 2733 scrollY = scrollFuncY(), 2734 limitToTouch = ~type.indexOf("touch") && !~type.indexOf("pointer") && _eventTypes[0] === "pointerdown", 2735 // for devices that accommodate mouse events and touch events, we need to distinguish. 2736 isViewport = _isViewport(target), 2737 ownerDoc = target.ownerDocument || _doc, 2738 deltaX = [0, 0, 0], 2739 // wheel, scroll, pointer/touch 2740 deltaY = [0, 0, 0], 2741 onClickTime = 0, 2742 clickCapture = function clickCapture() { 2743 return onClickTime = _getTime(); 2744 }, 2745 _ignoreCheck = function _ignoreCheck(e, isPointerOrTouch) { 2746 return (self.event = e) && ignore && ~ignore.indexOf(e.target) || isPointerOrTouch && limitToTouch && e.pointerType !== "touch" || ignoreCheck && ignoreCheck(e, isPointerOrTouch); 2747 }, 2748 onStopFunc = function onStopFunc() { 2749 self._vx.reset(); 2750 2751 self._vy.reset(); 2752 2753 onStopDelayedCall.pause(); 2754 onStop && onStop(self); 2755 }, 2756 update = function update() { 2757 var dx = self.deltaX = _getAbsoluteMax(deltaX), 2758 dy = self.deltaY = _getAbsoluteMax(deltaY), 2759 changedX = Math.abs(dx) >= tolerance, 2760 changedY = Math.abs(dy) >= tolerance; 2761 2762 onChange && (changedX || changedY) && onChange(self, dx, dy, deltaX, deltaY); // in ScrollTrigger.normalizeScroll(), we need to know if it was touch/pointer so we need access to the deltaX/deltaY Arrays before we clear them out. 2763 2764 if (changedX) { 2765 onRight && self.deltaX > 0 && onRight(self); 2766 onLeft && self.deltaX < 0 && onLeft(self); 2767 onChangeX && onChangeX(self); 2768 onToggleX && self.deltaX < 0 !== prevDeltaX < 0 && onToggleX(self); 2769 prevDeltaX = self.deltaX; 2770 deltaX[0] = deltaX[1] = deltaX[2] = 0; 2771 } 2772 2773 if (changedY) { 2774 onDown && self.deltaY > 0 && onDown(self); 2775 onUp && self.deltaY < 0 && onUp(self); 2776 onChangeY && onChangeY(self); 2777 onToggleY && self.deltaY < 0 !== prevDeltaY < 0 && onToggleY(self); 2778 prevDeltaY = self.deltaY; 2779 deltaY[0] = deltaY[1] = deltaY[2] = 0; 2780 } 2781 2782 if (moved || dragged) { 2783 onMove && onMove(self); 2784 2785 if (dragged) { 2786 onDrag(self); 2787 dragged = false; 2788 } 2789 2790 moved = false; 2791 } 2792 2793 locked && !(locked = false) && onLockAxis && onLockAxis(self); 2794 2795 if (wheeled) { 2796 onWheel(self); 2797 wheeled = false; 2798 } 2799 2800 id = 0; 2801 }, 2802 onDelta = function onDelta(x, y, index) { 2803 deltaX[index] += x; 2804 deltaY[index] += y; 2805 2806 self._vx.update(x); 2807 2808 self._vy.update(y); 2809 2810 debounce ? id || (id = requestAnimationFrame(update)) : update(); 2811 }, 2812 onTouchOrPointerDelta = function onTouchOrPointerDelta(x, y) { 2813 if (lockAxis && !axis) { 2814 self.axis = axis = Math.abs(x) > Math.abs(y) ? "x" : "y"; 2815 locked = true; 2816 } 2817 2818 if (axis !== "y") { 2819 deltaX[2] += x; 2820 2821 self._vx.update(x, true); // update the velocity as frequently as possible instead of in the debounced function so that very quick touch-scrolls (flicks) feel natural. If it's the mouse/touch/pointer, force it so that we get snappy/accurate momentum scroll. 2822 2823 } 2824 2825 if (axis !== "x") { 2826 deltaY[2] += y; 2827 2828 self._vy.update(y, true); 2829 } 2830 2831 debounce ? id || (id = requestAnimationFrame(update)) : update(); 2832 }, 2833 _onDrag = function _onDrag(e) { 2834 if (_ignoreCheck(e, 1)) { 2835 return; 2836 } 2837 2838 e = _getEvent(e, preventDefault); 2839 var x = e.clientX, 2840 y = e.clientY, 2841 dx = x - self.x, 2842 dy = y - self.y, 2843 isDragging = self.isDragging; 2844 self.x = x; 2845 self.y = y; 2846 2847 if (isDragging || Math.abs(self.startX - x) >= dragMinimum || Math.abs(self.startY - y) >= dragMinimum) { 2848 onDrag && (dragged = true); 2849 isDragging || (self.isDragging = true); 2850 onTouchOrPointerDelta(dx, dy); 2851 isDragging || onDragStart && onDragStart(self); 2852 } 2853 }, 2854 _onPress = self.onPress = function (e) { 2855 if (_ignoreCheck(e, 1) || e && e.button) { 2856 return; 2857 } 2858 2859 self.axis = axis = null; 2860 onStopDelayedCall.pause(); 2861 self.isPressed = true; 2862 e = _getEvent(e); // note: may need to preventDefault(?) Won't side-scroll on iOS Safari if we do, though. 2863 2864 prevDeltaX = prevDeltaY = 0; 2865 self.startX = self.x = e.clientX; 2866 self.startY = self.y = e.clientY; 2867 2868 self._vx.reset(); // otherwise the t2 may be stale if the user touches and flicks super fast and releases in less than 2 requestAnimationFrame ticks, causing velocity to be 0. 2869 2870 2871 self._vy.reset(); 2872 2873 _addListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, preventDefault, true); 2874 2875 self.deltaX = self.deltaY = 0; 2876 onPress && onPress(self); 2877 }, 2878 _onRelease = self.onRelease = function (e) { 2879 if (_ignoreCheck(e, 1)) { 2880 return; 2881 } 2882 2883 _removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true); 2884 2885 var isTrackingDrag = !isNaN(self.y - self.startY), 2886 wasDragging = self.isDragging && (Math.abs(self.x - self.startX) > 3 || Math.abs(self.y - self.startY) > 3), 2887 // some touch devices need some wiggle room in terms of sensing clicks - the finger may move a few pixels. 2888 eventData = _getEvent(e); 2889 2890 if (!wasDragging && isTrackingDrag) { 2891 self._vx.reset(); 2892 2893 self._vy.reset(); 2894 2895 if (preventDefault && allowClicks) { 2896 gsap.delayedCall(0.08, function () { 2897 // some browsers (like Firefox) won't trust script-generated clicks, so if the user tries to click on a video to play it, for example, it simply won't work. Since a regular "click" event will most likely be generated anyway (one that has its isTrusted flag set to true), we must slightly delay our script-generated click so that the "real"/trusted one is prioritized. Remember, when there are duplicate events in quick succession, we suppress all but the first one. Some browsers don't even trigger the "real" one at all, so our synthetic one is a safety valve that ensures that no matter what, a click event does get dispatched. 2898 if (_getTime() - onClickTime > 300 && !e.defaultPrevented) { 2899 if (e.target.click) { 2900 //some browsers (like mobile Safari) don't properly trigger the click event 2901 e.target.click(); 2902 } else if (ownerDoc.createEvent) { 2903 var syntheticEvent = ownerDoc.createEvent("MouseEvents"); 2904 syntheticEvent.initMouseEvent("click", true, true, _win, 1, eventData.screenX, eventData.screenY, eventData.clientX, eventData.clientY, false, false, false, false, 0, null); 2905 e.target.dispatchEvent(syntheticEvent); 2906 } 2907 } 2908 }); 2909 } 2910 } 2911 2912 self.isDragging = self.isGesturing = self.isPressed = false; 2913 onStop && !isNormalizer && onStopDelayedCall.restart(true); 2914 onDragEnd && wasDragging && onDragEnd(self); 2915 onRelease && onRelease(self, wasDragging); 2916 }, 2917 _onGestureStart = function _onGestureStart(e) { 2918 return e.touches && e.touches.length > 1 && (self.isGesturing = true) && onGestureStart(e, self.isDragging); 2919 }, 2920 _onGestureEnd = function _onGestureEnd() { 2921 return (self.isGesturing = false) || onGestureEnd(self); 2922 }, 2923 onScroll = function onScroll(e) { 2924 if (_ignoreCheck(e)) { 2925 return; 2926 } 2927 2928 var x = scrollFuncX(), 2929 y = scrollFuncY(); 2930 onDelta((x - scrollX) * scrollSpeed, (y - scrollY) * scrollSpeed, 1); 2931 scrollX = x; 2932 scrollY = y; 2933 onStop && onStopDelayedCall.restart(true); 2934 }, 2935 _onWheel = function _onWheel(e) { 2936 if (_ignoreCheck(e)) { 2937 return; 2938 } 2939 2940 e = _getEvent(e, preventDefault); 2941 onWheel && (wheeled = true); 2942 var multiplier = (e.deltaMode === 1 ? lineHeight : e.deltaMode === 2 ? _win.innerHeight : 1) * wheelSpeed; 2943 onDelta(e.deltaX * multiplier, e.deltaY * multiplier, 0); 2944 onStop && !isNormalizer && onStopDelayedCall.restart(true); 2945 }, 2946 _onMove = function _onMove(e) { 2947 if (_ignoreCheck(e)) { 2948 return; 2949 } 2950 2951 var x = e.clientX, 2952 y = e.clientY, 2953 dx = x - self.x, 2954 dy = y - self.y; 2955 self.x = x; 2956 self.y = y; 2957 moved = true; 2958 (dx || dy) && onTouchOrPointerDelta(dx, dy); 2959 }, 2960 _onHover = function _onHover(e) { 2961 self.event = e; 2962 onHover(self); 2963 }, 2964 _onHoverEnd = function _onHoverEnd(e) { 2965 self.event = e; 2966 onHoverEnd(self); 2967 }, 2968 _onClick = function _onClick(e) { 2969 return _ignoreCheck(e) || _getEvent(e, preventDefault) && onClick(self); 2970 }; 2971 2972 onStopDelayedCall = self._dc = gsap.delayedCall(onStopDelay || 0.25, onStopFunc).pause(); 2973 self.deltaX = self.deltaY = 0; 2974 self._vx = _getVelocityProp(0, 50, true); 2975 self._vy = _getVelocityProp(0, 50, true); 2976 self.scrollX = scrollFuncX; 2977 self.scrollY = scrollFuncY; 2978 self.isDragging = self.isGesturing = self.isPressed = false; 2979 2980 _context(this); 2981 2982 self.enable = function (e) { 2983 if (!self.isEnabled) { 2984 _addListener(isViewport ? ownerDoc : target, "scroll", _onScroll); 2985 2986 type.indexOf("scroll") >= 0 && _addListener(isViewport ? ownerDoc : target, "scroll", onScroll, preventDefault, capture); 2987 type.indexOf("wheel") >= 0 && _addListener(target, "wheel", _onWheel, preventDefault, capture); 2988 2989 if (type.indexOf("touch") >= 0 && _isTouch || type.indexOf("pointer") >= 0) { 2990 _addListener(target, _eventTypes[0], _onPress, preventDefault, capture); 2991 2992 _addListener(ownerDoc, _eventTypes[2], _onRelease); 2993 2994 _addListener(ownerDoc, _eventTypes[3], _onRelease); 2995 2996 allowClicks && _addListener(target, "click", clickCapture, false, true); 2997 onClick && _addListener(target, "click", _onClick); 2998 onGestureStart && _addListener(ownerDoc, "gesturestart", _onGestureStart); 2999 onGestureEnd && _addListener(ownerDoc, "gestureend", _onGestureEnd); 3000 onHover && _addListener(target, _pointerType + "enter", _onHover); 3001 onHoverEnd && _addListener(target, _pointerType + "leave", _onHoverEnd); 3002 onMove && _addListener(target, _pointerType + "move", _onMove); 3003 } 3004 3005 self.isEnabled = true; 3006 e && e.type && _onPress(e); 3007 onEnable && onEnable(self); 3008 } 3009 3010 return self; 3011 }; 3012 3013 self.disable = function () { 3014 if (self.isEnabled) { 3015 // only remove the _onScroll listener if there aren't any others that rely on the functionality. 3016 _observers.filter(function (o) { 3017 return o !== self && _isViewport(o.target); 3018 }).length || _removeListener(isViewport ? ownerDoc : target, "scroll", _onScroll); 3019 3020 if (self.isPressed) { 3021 self._vx.reset(); 3022 3023 self._vy.reset(); 3024 3025 _removeListener(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true); 3026 } 3027 3028 _removeListener(isViewport ? ownerDoc : target, "scroll", onScroll, capture); 3029 3030 _removeListener(target, "wheel", _onWheel, capture); 3031 3032 _removeListener(target, _eventTypes[0], _onPress, capture); 3033 3034 _removeListener(ownerDoc, _eventTypes[2], _onRelease); 3035 3036 _removeListener(ownerDoc, _eventTypes[3], _onRelease); 3037 3038 _removeListener(target, "click", clickCapture, true); 3039 3040 _removeListener(target, "click", _onClick); 3041 3042 _removeListener(ownerDoc, "gesturestart", _onGestureStart); 3043 3044 _removeListener(ownerDoc, "gestureend", _onGestureEnd); 3045 3046 _removeListener(target, _pointerType + "enter", _onHover); 3047 3048 _removeListener(target, _pointerType + "leave", _onHoverEnd); 3049 3050 _removeListener(target, _pointerType + "move", _onMove); 3051 3052 self.isEnabled = self.isPressed = self.isDragging = false; 3053 onDisable && onDisable(self); 3054 } 3055 }; 3056 3057 self.kill = self.revert = function () { 3058 self.disable(); 3059 3060 var i = _observers.indexOf(self); 3061 3062 i >= 0 && _observers.splice(i, 1); 3063 _normalizer === self && (_normalizer = 0); 3064 }; 3065 3066 _observers.push(self); 3067 3068 isNormalizer && _isViewport(target) && (_normalizer = self); 3069 self.enable(event); 3070 }; 3071 3072 _createClass(Observer, [{ 3073 key: "velocityX", 3074 get: function get() { 3075 return this._vx.getVelocity(); 3076 } 3077 }, { 3078 key: "velocityY", 3079 get: function get() { 3080 return this._vy.getVelocity(); 3081 } 3082 }]); 3083 3084 return Observer; 3085}(); 3086Observer.version = "3.12.2"; 3087 3088Observer.create = function (vars) { 3089 return new Observer(vars); 3090}; 3091 3092Observer.register = _initCore; 3093 3094Observer.getAll = function () { 3095 return _observers.slice(); 3096}; 3097 3098Observer.getById = function (id) { 3099 return _observers.filter(function (o) { 3100 return o.vars.id === id; 3101 })[0]; 3102}; 3103 3104_getGSAP() && gsap.registerPlugin(Observer); 3105 3106 3107/***/ }), 3108
vendor: 112,188 bytes, lines 3109-5729
3109/***/ "./node_modules/gsap/ScrollTrigger.js": 3110/*!********************************************!*\ 3111 !*** ./node_modules/gsap/ScrollTrigger.js ***! 3112 \********************************************/ 3113/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 3114 3115__webpack_require__.r(__webpack_exports__); 3116/* harmony export */ __webpack_require__.d(__webpack_exports__, { 3117/* harmony export */ ScrollTrigger: function() { return /* binding */ ScrollTrigger; }, 3118/* harmony export */ "default": function() { return /* binding */ ScrollTrigger; } 3119/* harmony export */ }); 3120/* harmony import */ var _Observer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Observer.js */ "./node_modules/gsap/Observer.js"); 3121/*! 3122 * ScrollTrigger 3.12.2 3123 * https://greensock.com 3124 * 3125 * @license Copyright 2008-2023, GreenSock. All rights reserved. 3126 * Subject to the terms at https://greensock.com/standard-license or for 3127 * Club GreenSock members, the agreement issued with that membership. 3128 * @author: Jack Doyle, [email protected] 3129*/ 3130 3131/* eslint-disable */ 3132 3133 3134var gsap, 3135 _coreInitted, 3136 _win, 3137 _doc, 3138 _docEl, 3139 _body, 3140 _root, 3141 _resizeDelay, 3142 _toArray, 3143 _clamp, 3144 _time2, 3145 _syncInterval, 3146 _refreshing, 3147 _pointerIsDown, 3148 _transformProp, 3149 _i, 3150 _prevWidth, 3151 _prevHeight, 3152 _autoRefresh, 3153 _sort, 3154 _suppressOverwrites, 3155 _ignoreResize, 3156 _normalizer, 3157 _ignoreMobileResize, 3158 _baseScreenHeight, 3159 _baseScreenWidth, 3160 _fixIOSBug, 3161 _context, 3162 _scrollRestoration, 3163 _div100vh, 3164 _100vh, 3165 _limitCallbacks, 3166 // if true, we'll only trigger callbacks if the active state toggles, so if you scroll immediately past both the start and end positions of a ScrollTrigger (thus inactive to inactive), neither its onEnter nor onLeave will be called. This is useful during startup. 3167_startup = 1, 3168 _getTime = Date.now, 3169 _time1 = _getTime(), 3170 _lastScrollTime = 0, 3171 _enabled = 0, 3172 _parseClamp = function _parseClamp(value, type, self) { 3173 var clamp = _isString(value) && (value.substr(0, 6) === "clamp(" || value.indexOf("max") > -1); 3174 self["_" + type + "Clamp"] = clamp; 3175 return clamp ? value.substr(6, value.length - 7) : value; 3176}, 3177 _keepClamp = function _keepClamp(value, clamp) { 3178 return clamp && (!_isString(value) || value.substr(0, 6) !== "clamp(") ? "clamp(" + value + ")" : value; 3179}, 3180 _rafBugFix = function _rafBugFix() { 3181 return _enabled && requestAnimationFrame(_rafBugFix); 3182}, 3183 // in some browsers (like Firefox), screen repaints weren't consistent unless we had SOMETHING queued up in requestAnimationFrame()! So this just creates a super simple loop to keep it alive and smooth out repaints. 3184_pointerDownHandler = function _pointerDownHandler() { 3185 return _pointerIsDown = 1; 3186}, 3187 _pointerUpHandler = function _pointerUpHandler() { 3188 return _pointerIsDown = 0; 3189}, 3190 _passThrough = function _passThrough(v) { 3191 return v; 3192}, 3193 _round = function _round(value) { 3194 return Math.round(value * 100000) / 100000 || 0; 3195}, 3196 _windowExists = function _windowExists() { 3197 return typeof window !== "undefined"; 3198}, 3199 _getGSAP = function _getGSAP() { 3200 return gsap || _windowExists() && (gsap = window.gsap) && gsap.registerPlugin && gsap; 3201}, 3202 _isViewport = function _isViewport(e) { 3203 return !!~_root.indexOf(e); 3204}, 3205 _getViewportDimension = function _getViewportDimension(dimensionProperty) { 3206 return (dimensionProperty === "Height" ? _100vh : _win["inner" + dimensionProperty]) || _docEl["client" + dimensionProperty] || _body["client" + dimensionProperty]; 3207}, 3208 _getBoundsFunc = function _getBoundsFunc(element) { 3209 return (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(element, "getBoundingClientRect") || (_isViewport(element) ? function () { 3210 _winOffsets.width = _win.innerWidth; 3211 _winOffsets.height = _100vh; 3212 return _winOffsets; 3213 } : function () { 3214 return _getBounds(element); 3215 }); 3216}, 3217 _getSizeFunc = function _getSizeFunc(scroller, isViewport, _ref) { 3218 var d = _ref.d, 3219 d2 = _ref.d2, 3220 a = _ref.a; 3221 return (a = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, "getBoundingClientRect")) ? function () { 3222 return a()[d]; 3223 } : function () { 3224 return (isViewport ? _getViewportDimension(d2) : scroller["client" + d2]) || 0; 3225 }; 3226}, 3227 _getOffsetsFunc = function _getOffsetsFunc(element, isViewport) { 3228 return !isViewport || ~_Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.indexOf(element) ? _getBoundsFunc(element) : function () { 3229 return _winOffsets; 3230 }; 3231}, 3232 _maxScroll = function _maxScroll(element, _ref2) { 3233 var s = _ref2.s, 3234 d2 = _ref2.d2, 3235 d = _ref2.d, 3236 a = _ref2.a; 3237 return Math.max(0, (s = "scroll" + d2) && (a = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(element, s)) ? a() - _getBoundsFunc(element)()[d] : _isViewport(element) ? (_docEl[s] || _body[s]) - _getViewportDimension(d2) : element[s] - element["offset" + d2]); 3238}, 3239 _iterateAutoRefresh = function _iterateAutoRefresh(func, events) { 3240 for (var i = 0; i < _autoRefresh.length; i += 3) { 3241 (!events || ~events.indexOf(_autoRefresh[i + 1])) && func(_autoRefresh[i], _autoRefresh[i + 1], _autoRefresh[i + 2]); 3242 } 3243}, 3244 _isString = function _isString(value) { 3245 return typeof value === "string"; 3246}, 3247 _isFunction = function _isFunction(value) { 3248 return typeof value === "function"; 3249}, 3250 _isNumber = function _isNumber(value) { 3251 return typeof value === "number"; 3252}, 3253 _isObject = function _isObject(value) { 3254 return typeof value === "object"; 3255}, 3256 _endAnimation = function _endAnimation(animation, reversed, pause) { 3257 return animation && animation.progress(reversed ? 0 : 1) && pause && animation.pause(); 3258}, 3259 _callback = function _callback(self, func) { 3260 if (self.enabled) { 3261 var result = func(self); 3262 result && result.totalTime && (self.callbackAnimation = result); 3263 } 3264}, 3265 _abs = Math.abs, 3266 _left = "left", 3267 _top = "top", 3268 _right = "right", 3269 _bottom = "bottom", 3270 _width = "width", 3271 _height = "height", 3272 _Right = "Right", 3273 _Left = "Left", 3274 _Top = "Top", 3275 _Bottom = "Bottom", 3276 _padding = "padding", 3277 _margin = "margin", 3278 _Width = "Width", 3279 _Height = "Height", 3280 _px = "px", 3281 _getComputedStyle = function _getComputedStyle(element) { 3282 return _win.getComputedStyle(element); 3283}, 3284 _makePositionable = function _makePositionable(element) { 3285 // if the element already has position: absolute or fixed, leave that, otherwise make it position: relative 3286 var position = _getComputedStyle(element).position; 3287 3288 element.style.position = position === "absolute" || position === "fixed" ? position : "relative"; 3289}, 3290 _setDefaults = function _setDefaults(obj, defaults) { 3291 for (var p in defaults) { 3292 p in obj || (obj[p] = defaults[p]); 3293 } 3294 3295 return obj; 3296}, 3297 _getBounds = function _getBounds(element, withoutTransforms) { 3298 var tween = withoutTransforms && _getComputedStyle(element)[_transformProp] !== "matrix(1, 0, 0, 1, 0, 0)" && gsap.to(element, { 3299 x: 0, 3300 y: 0, 3301 xPercent: 0, 3302 yPercent: 0, 3303 rotation: 0, 3304 rotationX: 0, 3305 rotationY: 0, 3306 scale: 1, 3307 skewX: 0, 3308 skewY: 0 3309 }).progress(1), 3310 bounds = element.getBoundingClientRect(); 3311 tween && tween.progress(0).kill(); 3312 return bounds; 3313}, 3314 _getSize = function _getSize(element, _ref3) { 3315 var d2 = _ref3.d2; 3316 return element["offset" + d2] || element["client" + d2] || 0; 3317}, 3318 _getLabelRatioArray = function _getLabelRatioArray(timeline) { 3319 var a = [], 3320 labels = timeline.labels, 3321 duration = timeline.duration(), 3322 p; 3323 3324 for (p in labels) { 3325 a.push(labels[p] / duration); 3326 } 3327 3328 return a; 3329}, 3330 _getClosestLabel = function _getClosestLabel(animation) { 3331 return function (value) { 3332 return gsap.utils.snap(_getLabelRatioArray(animation), value); 3333 }; 3334}, 3335 _snapDirectional = function _snapDirectional(snapIncrementOrArray) { 3336 var snap = gsap.utils.snap(snapIncrementOrArray), 3337 a = Array.isArray(snapIncrementOrArray) && snapIncrementOrArray.slice(0).sort(function (a, b) { 3338 return a - b; 3339 }); 3340 return a ? function (value, direction, threshold) { 3341 if (threshold === void 0) { 3342 threshold = 1e-3; 3343 } 3344 3345 var i; 3346 3347 if (!direction) { 3348 return snap(value); 3349 } 3350 3351 if (direction > 0) { 3352 value -= threshold; // to avoid rounding errors. If we're too strict, it might snap forward, then immediately again, and again. 3353 3354 for (i = 0; i < a.length; i++) { 3355 if (a[i] >= value) { 3356 return a[i]; 3357 } 3358 } 3359 3360 return a[i - 1]; 3361 } else { 3362 i = a.length; 3363 value += threshold; 3364 3365 while (i--) { 3366 if (a[i] <= value) { 3367 return a[i]; 3368 } 3369 } 3370 } 3371 3372 return a[0]; 3373 } : function (value, direction, threshold) { 3374 if (threshold === void 0) { 3375 threshold = 1e-3; 3376 } 3377 3378 var snapped = snap(value); 3379 return !direction || Math.abs(snapped - value) < threshold || snapped - value < 0 === direction < 0 ? snapped : snap(direction < 0 ? value - snapIncrementOrArray : value + snapIncrementOrArray); 3380 }; 3381}, 3382 _getLabelAtDirection = function _getLabelAtDirection(timeline) { 3383 return function (value, st) { 3384 return _snapDirectional(_getLabelRatioArray(timeline))(value, st.direction); 3385 }; 3386}, 3387 _multiListener = function _multiListener(func, element, types, callback) { 3388 return types.split(",").forEach(function (type) { 3389 return func(element, type, callback); 3390 }); 3391}, 3392 _addListener = function _addListener(element, type, func, nonPassive, capture) { 3393 return element.addEventListener(type, func, { 3394 passive: !nonPassive, 3395 capture: !!capture 3396 }); 3397}, 3398 _removeListener = function _removeListener(element, type, func, capture) { 3399 return element.removeEventListener(type, func, !!capture); 3400}, 3401 _wheelListener = function _wheelListener(func, el, scrollFunc) { 3402 scrollFunc = scrollFunc && scrollFunc.wheelHandler; 3403 3404 if (scrollFunc) { 3405 func(el, "wheel", scrollFunc); 3406 func(el, "touchmove", scrollFunc); 3407 } 3408}, 3409 _markerDefaults = { 3410 startColor: "green", 3411 endColor: "red", 3412 indent: 0, 3413 fontSize: "16px", 3414 fontWeight: "normal" 3415}, 3416 _defaults = { 3417 toggleActions: "play", 3418 anticipatePin: 0 3419}, 3420 _keywords = { 3421 top: 0, 3422 left: 0, 3423 center: 0.5, 3424 bottom: 1, 3425 right: 1 3426}, 3427 _offsetToPx = function _offsetToPx(value, size) { 3428 if (_isString(value)) { 3429 var eqIndex = value.indexOf("="), 3430 relative = ~eqIndex ? +(value.charAt(eqIndex - 1) + 1) * parseFloat(value.substr(eqIndex + 1)) : 0; 3431 3432 if (~eqIndex) { 3433 value.indexOf("%") > eqIndex && (relative *= size / 100); 3434 value = value.substr(0, eqIndex - 1); 3435 } 3436 3437 value = relative + (value in _keywords ? _keywords[value] * size : ~value.indexOf("%") ? parseFloat(value) * size / 100 : parseFloat(value) || 0); 3438 } 3439 3440 return value; 3441}, 3442 _createMarker = function _createMarker(type, name, container, direction, _ref4, offset, matchWidthEl, containerAnimation) { 3443 var startColor = _ref4.startColor, 3444 endColor = _ref4.endColor, 3445 fontSize = _ref4.fontSize, 3446 indent = _ref4.indent, 3447 fontWeight = _ref4.fontWeight; 3448 3449 var e = _doc.createElement("div"), 3450 useFixedPosition = _isViewport(container) || (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(container, "pinType") === "fixed", 3451 isScroller = type.indexOf("scroller") !== -1, 3452 parent = useFixedPosition ? _body : container, 3453 isStart = type.indexOf("start") !== -1, 3454 color = isStart ? startColor : endColor, 3455 css = "border-color:" + color + ";font-size:" + fontSize + ";color:" + color + ";font-weight:" + fontWeight + ";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;"; 3456 3457 css += "position:" + ((isScroller || containerAnimation) && useFixedPosition ? "fixed;" : "absolute;"); 3458 (isScroller || containerAnimation || !useFixedPosition) && (css += (direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical ? _right : _bottom) + ":" + (offset + parseFloat(indent)) + "px;"); 3459 matchWidthEl && (css += "box-sizing:border-box;text-align:left;width:" + matchWidthEl.offsetWidth + "px;"); 3460 e._isStart = isStart; 3461 e.setAttribute("class", "gsap-marker-" + type + (name ? " marker-" + name : "")); 3462 e.style.cssText = css; 3463 e.innerText = name || name === 0 ? type + "-" + name : type; 3464 parent.children[0] ? parent.insertBefore(e, parent.children[0]) : parent.appendChild(e); 3465 e._offset = e["offset" + direction.op.d2]; 3466 3467 _positionMarker(e, 0, direction, isStart); 3468 3469 return e; 3470}, 3471 _positionMarker = function _positionMarker(marker, start, direction, flipped) { 3472 var vars = { 3473 display: "block" 3474 }, 3475 side = direction[flipped ? "os2" : "p2"], 3476 oppositeSide = direction[flipped ? "p2" : "os2"]; 3477 marker._isFlipped = flipped; 3478 vars[direction.a + "Percent"] = flipped ? -100 : 0; 3479 vars[direction.a] = flipped ? "1px" : 0; 3480 vars["border" + side + _Width] = 1; 3481 vars["border" + oppositeSide + _Width] = 0; 3482 vars[direction.p] = start + "px"; 3483 gsap.set(marker, vars); 3484}, 3485 _triggers = [], 3486 _ids = {}, 3487 _rafID, 3488 _sync = function _sync() { 3489 return _getTime() - _lastScrollTime > 34 && (_rafID || (_rafID = requestAnimationFrame(_updateAll))); 3490}, 3491 _onScroll = function _onScroll() { 3492 // previously, we tried to optimize performance by batching/deferring to the next requestAnimationFrame(), but discovered that Safari has a few bugs that make this unworkable (especially on iOS). See https://codepen.io/GreenSock/pen/16c435b12ef09c38125204818e7b45fc?editors=0010 and https://codepen.io/GreenSock/pen/JjOxYpQ/3dd65ccec5a60f1d862c355d84d14562?editors=0010 and https://codepen.io/GreenSock/pen/ExbrPNa/087cef197dc35445a0951e8935c41503?editors=0010 3493 if (!_normalizer || !_normalizer.isPressed || _normalizer.startX > _body.clientWidth) { 3494 // if the user is dragging the scrollbar, allow it. 3495 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++; 3496 3497 if (_normalizer) { 3498 _rafID || (_rafID = requestAnimationFrame(_updateAll)); 3499 } else { 3500 _updateAll(); // Safari in particular (on desktop) NEEDS the immediate update rather than waiting for a requestAnimationFrame() whereas iOS seems to benefit from waiting for the requestAnimationFrame() tick, at least when normalizing. See https://codepen.io/GreenSock/pen/qBYozqO?editors=0110 3501 3502 } 3503 3504 _lastScrollTime || _dispatch("scrollStart"); 3505 _lastScrollTime = _getTime(); 3506 } 3507}, 3508 _setBaseDimensions = function _setBaseDimensions() { 3509 _baseScreenWidth = _win.innerWidth; 3510 _baseScreenHeight = _win.innerHeight; 3511}, 3512 _onResize = function _onResize() { 3513 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++; 3514 !_refreshing && !_ignoreResize && !_doc.fullscreenElement && !_doc.webkitFullscreenElement && (!_ignoreMobileResize || _baseScreenWidth !== _win.innerWidth || Math.abs(_win.innerHeight - _baseScreenHeight) > _win.innerHeight * 0.25) && _resizeDelay.restart(true); 3515}, 3516 // ignore resizes triggered by refresh() 3517_listeners = {}, 3518 _emptyArray = [], 3519 _softRefresh = function _softRefresh() { 3520 return _removeListener(ScrollTrigger, "scrollEnd", _softRefresh) || _refreshAll(true); 3521}, 3522 _dispatch = function _dispatch(type) { 3523 return _listeners[type] && _listeners[type].map(function (f) { 3524 return f(); 3525 }) || _emptyArray; 3526}, 3527 _savedStyles = [], 3528 // when ScrollTrigger.saveStyles() is called, the inline styles are recorded in this Array in a sequential format like [element, cssText, gsCache, media]. This keeps it very memory-efficient and fast to iterate through. 3529_revertRecorded = function _revertRecorded(media) { 3530 for (var i = 0; i < _savedStyles.length; i += 5) { 3531 if (!media || _savedStyles[i + 4] && _savedStyles[i + 4].query === media) { 3532 _savedStyles[i].style.cssText = _savedStyles[i + 1]; 3533 _savedStyles[i].getBBox && _savedStyles[i].setAttribute("transform", _savedStyles[i + 2] || ""); 3534 _savedStyles[i + 3].uncache = 1; 3535 } 3536 } 3537}, 3538 _revertAll = function _revertAll(kill, media) { 3539 var trigger; 3540 3541 for (_i = 0; _i < _triggers.length; _i++) { 3542 trigger = _triggers[_i]; 3543 3544 if (trigger && (!media || trigger._ctx === media)) { 3545 if (kill) { 3546 trigger.kill(1); 3547 } else { 3548 trigger.revert(true, true); 3549 } 3550 } 3551 } 3552 3553 media && _revertRecorded(media); 3554 media || _dispatch("revert"); 3555}, 3556 _clearScrollMemory = function _clearScrollMemory(scrollRestoration, force) { 3557 // zero-out all the recorded scroll positions. Don't use _triggers because if, for example, .matchMedia() is used to create some ScrollTriggers and then the user resizes and it removes ALL ScrollTriggers, and then go back to a size where there are ScrollTriggers, it would have kept the position(s) saved from the initial state. 3558 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++; 3559 (force || !_refreshingAll) && _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(function (obj) { 3560 return _isFunction(obj) && obj.cacheID++ && (obj.rec = 0); 3561 }); 3562 _isString(scrollRestoration) && (_win.history.scrollRestoration = _scrollRestoration = scrollRestoration); 3563}, 3564 _refreshingAll, 3565 _refreshID = 0, 3566 _queueRefreshID, 3567 _queueRefreshAll = function _queueRefreshAll() { 3568 // we don't want to call _refreshAll() every time we create a new ScrollTrigger (for performance reasons) - it's better to batch them. Some frameworks dynamically load content and we can't rely on the window's "load" or "DOMContentLoaded" events to trigger it. 3569 if (_queueRefreshID !== _refreshID) { 3570 var id = _queueRefreshID = _refreshID; 3571 requestAnimationFrame(function () { 3572 return id === _refreshID && _refreshAll(true); 3573 }); 3574 } 3575}, 3576 _refresh100vh = function _refresh100vh() { 3577 _body.appendChild(_div100vh); 3578 3579 _100vh = _div100vh.offsetHeight || _win.innerHeight; 3580 3581 _body.removeChild(_div100vh); 3582}, 3583 _refreshAll = function _refreshAll(force, skipRevert) { 3584 if (_lastScrollTime && !force) { 3585 _addListener(ScrollTrigger, "scrollEnd", _softRefresh); 3586 3587 return; 3588 } 3589 3590 _refresh100vh(); 3591 3592 _refreshingAll = ScrollTrigger.isRefreshing = true; 3593 3594 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(function (obj) { 3595 return _isFunction(obj) && ++obj.cacheID && (obj.rec = obj()); 3596 }); // force the clearing of the cache because some browsers take a little while to dispatch the "scroll" event and the user may have changed the scroll position and then called ScrollTrigger.refresh() right away 3597 3598 3599 var refreshInits = _dispatch("refreshInit"); 3600 3601 _sort && ScrollTrigger.sort(); 3602 skipRevert || _revertAll(); 3603 3604 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(function (obj) { 3605 if (_isFunction(obj)) { 3606 obj.smooth && (obj.target.style.scrollBehavior = "auto"); // smooth scrolling interferes 3607 3608 obj(0); 3609 } 3610 }); 3611 3612 _triggers.slice(0).forEach(function (t) { 3613 return t.refresh(); 3614 }); // don't loop with _i because during a refresh() someone could call ScrollTrigger.update() which would iterate through _i resulting in a skip. 3615 3616 3617 _triggers.forEach(function (t, i) { 3618 // nested pins (pinnedContainer) with pinSpacing may expand the container, so we must accommodate that here. 3619 if (t._subPinOffset && t.pin) { 3620 var prop = t.vars.horizontal ? "offsetWidth" : "offsetHeight", 3621 original = t.pin[prop]; 3622 t.revert(true, 1); 3623 t.adjustPinSpacing(t.pin[prop] - original); 3624 t.refresh(); 3625 } 3626 }); 3627 3628 _triggers.forEach(function (t) { 3629 // the scroller's max scroll position may change after all the ScrollTriggers refreshed (like pinning could push it down), so we need to loop back and correct any with end: "max". Same for anything with a clamped end 3630 var max = _maxScroll(t.scroller, t._dir); 3631 3632 (t.vars.end === "max" || t._endClamp && t.end > max) && t.setPositions(t.start, Math.max(t.start + 1, max), true); 3633 }); 3634 3635 refreshInits.forEach(function (result) { 3636 return result && result.render && result.render(-1); 3637 }); // if the onRefreshInit() returns an animation (typically a gsap.set()), revert it. This makes it easy to put things in a certain spot before refreshing for measurement purposes, and then put things back. 3638 3639 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(function (obj) { 3640 if (_isFunction(obj)) { 3641 obj.smooth && requestAnimationFrame(function () { 3642 return obj.target.style.scrollBehavior = "smooth"; 3643 }); 3644 obj.rec && obj(obj.rec); 3645 } 3646 }); 3647 3648 _clearScrollMemory(_scrollRestoration, 1); 3649 3650 _resizeDelay.pause(); 3651 3652 _refreshID++; 3653 _refreshingAll = 2; 3654 3655 _updateAll(2); 3656 3657 _triggers.forEach(function (t) { 3658 return _isFunction(t.vars.onRefresh) && t.vars.onRefresh(t); 3659 }); 3660 3661 _refreshingAll = ScrollTrigger.isRefreshing = false; 3662 3663 _dispatch("refresh"); 3664}, 3665 _lastScroll = 0, 3666 _direction = 1, 3667 _primary, 3668 _updateAll = function _updateAll(force) { 3669 if (!_refreshingAll || force === 2) { 3670 ScrollTrigger.isUpdating = true; 3671 _primary && _primary.update(0); // ScrollSmoother uses refreshPriority -9999 to become the primary that gets updated before all others because it affects the scroll position. 3672 3673 var l = _triggers.length, 3674 time = _getTime(), 3675 recordVelocity = time - _time1 >= 50, 3676 scroll = l && _triggers[0].scroll(); 3677 3678 _direction = _lastScroll > scroll ? -1 : 1; 3679 _refreshingAll || (_lastScroll = scroll); 3680 3681 if (recordVelocity) { 3682 if (_lastScrollTime && !_pointerIsDown && time - _lastScrollTime > 200) { 3683 _lastScrollTime = 0; 3684 3685 _dispatch("scrollEnd"); 3686 } 3687 3688 _time2 = _time1; 3689 _time1 = time; 3690 } 3691 3692 if (_direction < 0) { 3693 _i = l; 3694 3695 while (_i-- > 0) { 3696 _triggers[_i] && _triggers[_i].update(0, recordVelocity); 3697 } 3698 3699 _direction = 1; 3700 } else { 3701 for (_i = 0; _i < l; _i++) { 3702 _triggers[_i] && _triggers[_i].update(0, recordVelocity); 3703 } 3704 } 3705 3706 ScrollTrigger.isUpdating = false; 3707 } 3708 3709 _rafID = 0; 3710}, 3711 _propNamesToCopy = [_left, _top, _bottom, _right, _margin + _Bottom, _margin + _Right, _margin + _Top, _margin + _Left, "display", "flexShrink", "float", "zIndex", "gridColumnStart", "gridColumnEnd", "gridRowStart", "gridRowEnd", "gridArea", "justifySelf", "alignSelf", "placeSelf", "order"], 3712 _stateProps = _propNamesToCopy.concat([_width, _height, "boxSizing", "max" + _Width, "max" + _Height, "position", _margin, _padding, _padding + _Top, _padding + _Right, _padding + _Bottom, _padding + _Left]), 3713 _swapPinOut = function _swapPinOut(pin, spacer, state) { 3714 _setState(state); 3715 3716 var cache = pin._gsap; 3717 3718 if (cache.spacerIsNative) { 3719 _setState(cache.spacerState); 3720 } else if (pin._gsap.swappedIn) { 3721 var parent = spacer.parentNode; 3722 3723 if (parent) { 3724 parent.insertBefore(pin, spacer); 3725 parent.removeChild(spacer); 3726 } 3727 } 3728 3729 pin._gsap.swappedIn = false; 3730}, 3731 _swapPinIn = function _swapPinIn(pin, spacer, cs, spacerState) { 3732 if (!pin._gsap.swappedIn) { 3733 var i = _propNamesToCopy.length, 3734 spacerStyle = spacer.style, 3735 pinStyle = pin.style, 3736 p; 3737 3738 while (i--) { 3739 p = _propNamesToCopy[i]; 3740 spacerStyle[p] = cs[p]; 3741 } 3742 3743 spacerStyle.position = cs.position === "absolute" ? "absolute" : "relative"; 3744 cs.display === "inline" && (spacerStyle.display = "inline-block"); 3745 pinStyle[_bottom] = pinStyle[_right] = "auto"; 3746 spacerStyle.flexBasis = cs.flexBasis || "auto"; 3747 spacerStyle.overflow = "visible"; 3748 spacerStyle.boxSizing = "border-box"; 3749 spacerStyle[_width] = _getSize(pin, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal) + _px; 3750 spacerStyle[_height] = _getSize(pin, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical) + _px; 3751 spacerStyle[_padding] = pinStyle[_margin] = pinStyle[_top] = pinStyle[_left] = "0"; 3752 3753 _setState(spacerState); 3754 3755 pinStyle[_width] = pinStyle["max" + _Width] = cs[_width]; 3756 pinStyle[_height] = pinStyle["max" + _Height] = cs[_height]; 3757 pinStyle[_padding] = cs[_padding]; 3758 3759 if (pin.parentNode !== spacer) { 3760 pin.parentNode.insertBefore(spacer, pin); 3761 spacer.appendChild(pin); 3762 } 3763 3764 pin._gsap.swappedIn = true; 3765 } 3766}, 3767 _capsExp = /([A-Z])/g, 3768 _setState = function _setState(state) { 3769 if (state) { 3770 var style = state.t.style, 3771 l = state.length, 3772 i = 0, 3773 p, 3774 value; 3775 (state.t._gsap || gsap.core.getCache(state.t)).uncache = 1; // otherwise transforms may be off 3776 3777 for (; i < l; i += 2) { 3778 value = state[i + 1]; 3779 p = state[i]; 3780 3781 if (value) { 3782 style[p] = value; 3783 } else if (style[p]) { 3784 style.removeProperty(p.replace(_capsExp, "-$1").toLowerCase()); 3785 } 3786 } 3787 } 3788}, 3789 _getState = function _getState(element) { 3790 // returns an Array with alternating values like [property, value, property, value] and a "t" property pointing to the target (element). Makes it fast and cheap. 3791 var l = _stateProps.length, 3792 style = element.style, 3793 state = [], 3794 i = 0; 3795 3796 for (; i < l; i++) { 3797 state.push(_stateProps[i], style[_stateProps[i]]); 3798 } 3799 3800 state.t = element; 3801 return state; 3802}, 3803 _copyState = function _copyState(state, override, omitOffsets) { 3804 var result = [], 3805 l = state.length, 3806 i = omitOffsets ? 8 : 0, 3807 // skip top, left, right, bottom if omitOffsets is true 3808 p; 3809 3810 for (; i < l; i += 2) { 3811 p = state[i]; 3812 result.push(p, p in override ? override[p] : state[i + 1]); 3813 } 3814 3815 result.t = state.t; 3816 return result; 3817}, 3818 _winOffsets = { 3819 left: 0, 3820 top: 0 3821}, 3822 // // potential future feature (?) Allow users to calculate where a trigger hits (scroll position) like getScrollPosition("#id", "top bottom") 3823// _getScrollPosition = (trigger, position, {scroller, containerAnimation, horizontal}) => { 3824// scroller = _getTarget(scroller || _win); 3825// let direction = horizontal ? _horizontal : _vertical, 3826// isViewport = _isViewport(scroller); 3827// _getSizeFunc(scroller, isViewport, direction); 3828// return _parsePosition(position, _getTarget(trigger), _getSizeFunc(scroller, isViewport, direction)(), direction, _getScrollFunc(scroller, direction)(), 0, 0, 0, _getOffsetsFunc(scroller, isViewport)(), isViewport ? 0 : parseFloat(_getComputedStyle(scroller)["border" + direction.p2 + _Width]) || 0, 0, containerAnimation ? containerAnimation.duration() : _maxScroll(scroller), containerAnimation); 3829// }, 3830_parsePosition = function _parsePosition(value, trigger, scrollerSize, direction, scroll, marker, markerScroller, self, scrollerBounds, borderWidth, useFixedPosition, scrollerMax, containerAnimation, clampZeroProp) { 3831 _isFunction(value) && (value = value(self)); 3832 3833 if (_isString(value) && value.substr(0, 3) === "max") { 3834 value = scrollerMax + (value.charAt(4) === "=" ? _offsetToPx("0" + value.substr(3), scrollerSize) : 0); 3835 } 3836 3837 var time = containerAnimation ? containerAnimation.time() : 0, 3838 p1, 3839 p2, 3840 element; 3841 containerAnimation && containerAnimation.seek(0); 3842 isNaN(value) || (value = +value); // convert a string number like "45" to an actual number 3843 3844 if (!_isNumber(value)) { 3845 _isFunction(trigger) && (trigger = trigger(self)); 3846 var offsets = (value || "0").split(" "), 3847 bounds, 3848 localOffset, 3849 globalOffset, 3850 display; 3851 element = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(trigger, self) || _body; 3852 bounds = _getBounds(element) || {}; 3853 3854 if ((!bounds || !bounds.left && !bounds.top) && _getComputedStyle(element).display === "none") { 3855 // if display is "none", it won't report getBoundingClientRect() properly 3856 display = element.style.display; 3857 element.style.display = "block"; 3858 bounds = _getBounds(element); 3859 display ? element.style.display = display : element.style.removeProperty("display"); 3860 } 3861 3862 localOffset = _offsetToPx(offsets[0], bounds[direction.d]); 3863 globalOffset = _offsetToPx(offsets[1] || "0", scrollerSize); 3864 value = bounds[direction.p] - scrollerBounds[direction.p] - borderWidth + localOffset + scroll - globalOffset; 3865 markerScroller && _positionMarker(markerScroller, globalOffset, direction, scrollerSize - globalOffset < 20 || markerScroller._isStart && globalOffset > 20); 3866 scrollerSize -= scrollerSize - globalOffset; // adjust for the marker 3867 } else { 3868 containerAnimation && (value = gsap.utils.mapRange(containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, 0, scrollerMax, value)); 3869 markerScroller && _positionMarker(markerScroller, scrollerSize, direction, true); 3870 } 3871 3872 if (clampZeroProp) { 3873 self[clampZeroProp] = value || -0.001; 3874 value < 0 && (value = 0); 3875 } 3876 3877 if (marker) { 3878 var position = value + scrollerSize, 3879 isStart = marker._isStart; 3880 p1 = "scroll" + direction.d2; 3881 3882 _positionMarker(marker, position, direction, isStart && position > 20 || !isStart && (useFixedPosition ? Math.max(_body[p1], _docEl[p1]) : marker.parentNode[p1]) <= position + 1); 3883 3884 if (useFixedPosition) { 3885 scrollerBounds = _getBounds(markerScroller); 3886 useFixedPosition && (marker.style[direction.op.p] = scrollerBounds[direction.op.p] - direction.op.m - marker._offset + _px); 3887 } 3888 } 3889 3890 if (containerAnimation && element) { 3891 p1 = _getBounds(element); 3892 containerAnimation.seek(scrollerMax); 3893 p2 = _getBounds(element); 3894 containerAnimation._caScrollDist = p1[direction.p] - p2[direction.p]; 3895 value = value / containerAnimation._caScrollDist * scrollerMax; 3896 } 3897 3898 containerAnimation && containerAnimation.seek(time); 3899 return containerAnimation ? value : Math.round(value); 3900}, 3901 _prefixExp = /(webkit|moz|length|cssText|inset)/i, 3902 _reparent = function _reparent(element, parent, top, left) { 3903 if (element.parentNode !== parent) { 3904 var style = element.style, 3905 p, 3906 cs; 3907 3908 if (parent === _body) { 3909 element._stOrig = style.cssText; // record original inline styles so we can revert them later 3910 3911 cs = _getComputedStyle(element); 3912 3913 for (p in cs) { 3914 // must copy all relevant styles to ensure that nothing changes visually when we reparent to the <body>. Skip the vendor prefixed ones. 3915 if (!+p && !_prefixExp.test(p) && cs[p] && typeof style[p] === "string" && p !== "0") { 3916 style[p] = cs[p]; 3917 } 3918 } 3919 3920 style.top = top; 3921 style.left = left; 3922 } else { 3923 style.cssText = element._stOrig; 3924 } 3925 3926 gsap.core.getCache(element).uncache = 1; 3927 parent.appendChild(element); 3928 } 3929}, 3930 _interruptionTracker = function _interruptionTracker(getValueFunc, initialValue, onInterrupt) { 3931 var last1 = initialValue, 3932 last2 = last1; 3933 return function (value) { 3934 var current = Math.round(getValueFunc()); // round because in some [very uncommon] Windows environments, scroll can get reported with decimals even though it was set without. 3935 3936 if (current !== last1 && current !== last2 && Math.abs(current - last1) > 3 && Math.abs(current - last2) > 3) { 3937 // if the user scrolls, kill the tween. iOS Safari intermittently misreports the scroll position, it may be the most recently-set one or the one before that! When Safari is zoomed (CMD-+), it often misreports as 1 pixel off too! So if we set the scroll position to 125, for example, it'll actually report it as 124. 3938 value = current; 3939 onInterrupt && onInterrupt(); 3940 } 3941 3942 last2 = last1; 3943 last1 = value; 3944 return value; 3945 }; 3946}, 3947 _shiftMarker = function _shiftMarker(marker, direction, value) { 3948 var vars = {}; 3949 vars[direction.p] = "+=" + value; 3950 gsap.set(marker, vars); 3951}, 3952 // _mergeAnimations = animations => { 3953// let tl = gsap.timeline({smoothChildTiming: true}).startTime(Math.min(...animations.map(a => a.globalTime(0)))); 3954// animations.forEach(a => {let time = a.totalTime(); tl.add(a); a.totalTime(time); }); 3955// tl.smoothChildTiming = false; 3956// return tl; 3957// }, 3958// returns a function that can be used to tween the scroll position in the direction provided, and when doing so it'll add a .tween property to the FUNCTION itself, and remove it when the tween completes or gets killed. This gives us a way to have multiple ScrollTriggers use a central function for any given scroller and see if there's a scroll tween running (which would affect if/how things get updated) 3959_getTweenCreator = function _getTweenCreator(scroller, direction) { 3960 var getScroll = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(scroller, direction), 3961 prop = "_scroll" + direction.p2, 3962 // add a tweenable property to the scroller that's a getter/setter function, like _scrollTop or _scrollLeft. This way, if someone does gsap.killTweensOf(scroller) it'll kill the scroll tween. 3963 getTween = function getTween(scrollTo, vars, initialValue, change1, change2) { 3964 var tween = getTween.tween, 3965 onComplete = vars.onComplete, 3966 modifiers = {}; 3967 initialValue = initialValue || getScroll(); 3968 3969 var checkForInterruption = _interruptionTracker(getScroll, initialValue, function () { 3970 tween.kill(); 3971 getTween.tween = 0; 3972 }); 3973 3974 change2 = change1 && change2 || 0; // if change1 is 0, we set that to the difference and ignore change2. Otherwise, there would be a compound effect. 3975 3976 change1 = change1 || scrollTo - initialValue; 3977 tween && tween.kill(); 3978 vars[prop] = scrollTo; 3979 vars.modifiers = modifiers; 3980 3981 modifiers[prop] = function () { 3982 return checkForInterruption(initialValue + change1 * tween.ratio + change2 * tween.ratio * tween.ratio); 3983 }; 3984 3985 vars.onUpdate = function () { 3986 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++; 3987 3988 _updateAll(); 3989 }; 3990 3991 vars.onComplete = function () { 3992 getTween.tween = 0; 3993 onComplete && onComplete.call(tween); 3994 }; 3995 3996 tween = getTween.tween = gsap.to(scroller, vars); 3997 return tween; 3998 }; 3999 4000 scroller[prop] = getScroll; 4001 4002 getScroll.wheelHandler = function () { 4003 return getTween.tween && getTween.tween.kill() && (getTween.tween = 0); 4004 }; 4005 4006 _addListener(scroller, "wheel", getScroll.wheelHandler); // Windows machines handle mousewheel scrolling in chunks (like "3 lines per scroll") meaning the typical strategy for cancelling the scroll isn't as sensitive. It's much more likely to match one of the previous 2 scroll event positions. So we kill any snapping as soon as there's a wheel event. 4007 4008 4009 ScrollTrigger.isTouch && _addListener(scroller, "touchmove", getScroll.wheelHandler); 4010 return getTween; 4011}; 4012 4013var ScrollTrigger = /*#__PURE__*/function () { 4014 function ScrollTrigger(vars, animation) { 4015 _coreInitted || ScrollTrigger.register(gsap) || console.warn("Please gsap.registerPlugin(ScrollTrigger)"); 4016 4017 _context(this); 4018 4019 this.init(vars, animation); 4020 } 4021 4022 var _proto = ScrollTrigger.prototype; 4023 4024 _proto.init = function init(vars, animation) { 4025 this.progress = this.start = 0; 4026 this.vars && this.kill(true, true); // in case it's being initted again 4027 4028 if (!_enabled) { 4029 this.update = this.refresh = this.kill = _passThrough; 4030 return; 4031 } 4032 4033 vars = _setDefaults(_isString(vars) || _isNumber(vars) || vars.nodeType ? { 4034 trigger: vars 4035 } : vars, _defaults); 4036 4037 var _vars = vars, 4038 onUpdate = _vars.onUpdate, 4039 toggleClass = _vars.toggleClass, 4040 id = _vars.id, 4041 onToggle = _vars.onToggle, 4042 onRefresh = _vars.onRefresh, 4043 scrub = _vars.scrub, 4044 trigger = _vars.trigger, 4045 pin = _vars.pin, 4046 pinSpacing = _vars.pinSpacing, 4047 invalidateOnRefresh = _vars.invalidateOnRefresh, 4048 anticipatePin = _vars.anticipatePin, 4049 onScrubComplete = _vars.onScrubComplete, 4050 onSnapComplete = _vars.onSnapComplete, 4051 once = _vars.once, 4052 snap = _vars.snap, 4053 pinReparent = _vars.pinReparent, 4054 pinSpacer = _vars.pinSpacer, 4055 containerAnimation = _vars.containerAnimation, 4056 fastScrollEnd = _vars.fastScrollEnd, 4057 preventOverlaps = _vars.preventOverlaps, 4058 direction = vars.horizontal || vars.containerAnimation && vars.horizontal !== false ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical, 4059 isToggle = !scrub && scrub !== 0, 4060 scroller = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.scroller || _win), 4061 scrollerCache = gsap.core.getCache(scroller), 4062 isViewport = _isViewport(scroller), 4063 useFixedPosition = ("pinType" in vars ? vars.pinType : (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, "pinType") || isViewport && "fixed") === "fixed", 4064 callbacks = [vars.onEnter, vars.onLeave, vars.onEnterBack, vars.onLeaveBack], 4065 toggleActions = isToggle && vars.toggleActions.split(" "), 4066 markers = "markers" in vars ? vars.markers : _defaults.markers, 4067 borderWidth = isViewport ? 0 : parseFloat(_getComputedStyle(scroller)["border" + direction.p2 + _Width]) || 0, 4068 self = this, 4069 onRefreshInit = vars.onRefreshInit && function () { 4070 return vars.onRefreshInit(self); 4071 }, 4072 getScrollerSize = _getSizeFunc(scroller, isViewport, direction), 4073 getScrollerOffsets = _getOffsetsFunc(scroller, isViewport), 4074 lastSnap = 0, 4075 lastRefresh = 0, 4076 prevProgress = 0, 4077 scrollFunc = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(scroller, direction), 4078 tweenTo, 4079 pinCache, 4080 snapFunc, 4081 scroll1, 4082 scroll2, 4083 start, 4084 end, 4085 markerStart, 4086 markerEnd, 4087 markerStartTrigger, 4088 markerEndTrigger, 4089 markerVars, 4090 executingOnRefresh, 4091 change, 4092 pinOriginalState, 4093 pinActiveState, 4094 pinState, 4095 spacer, 4096 offset, 4097 pinGetter, 4098 pinSetter, 4099 pinStart, 4100 pinChange, 4101 spacingStart, 4102 spacerState, 4103 markerStartSetter, 4104 pinMoves, 4105 markerEndSetter, 4106 cs, 4107 snap1, 4108 snap2, 4109 scrubTween, 4110 scrubSmooth, 4111 snapDurClamp, 4112 snapDelayedCall, 4113 prevScroll, 4114 prevAnimProgress, 4115 caMarkerSetter, 4116 customRevertReturn; // for the sake of efficiency, _startClamp/_endClamp serve like a truthy value indicating that clamping was enabled on the start/end, and ALSO store the actual pre-clamped numeric value. We tap into that in ScrollSmoother for speed effects. So for example, if start="clamp(top bottom)" results in a start of -100 naturally, it would get clamped to 0 but -100 would be stored in _startClamp. 4117 4118 4119 self._startClamp = self._endClamp = false; 4120 self._dir = direction; 4121 anticipatePin *= 45; 4122 self.scroller = scroller; 4123 self.scroll = containerAnimation ? containerAnimation.time.bind(containerAnimation) : scrollFunc; 4124 scroll1 = scrollFunc(); 4125 self.vars = vars; 4126 animation = animation || vars.animation; 4127 4128 if ("refreshPriority" in vars) { 4129 _sort = 1; 4130 vars.refreshPriority === -9999 && (_primary = self); // used by ScrollSmoother 4131 } 4132 4133 scrollerCache.tweenScroll = scrollerCache.tweenScroll || { 4134 top: _getTweenCreator(scroller, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical), 4135 left: _getTweenCreator(scroller, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal) 4136 }; 4137 self.tweenTo = tweenTo = scrollerCache.tweenScroll[direction.p]; 4138 4139 self.scrubDuration = function (value) { 4140 scrubSmooth = _isNumber(value) && value; 4141 4142 if (!scrubSmooth) { 4143 scrubTween && scrubTween.progress(1).kill(); 4144 scrubTween = 0; 4145 } else { 4146 scrubTween ? scrubTween.duration(value) : scrubTween = gsap.to(animation, { 4147 ease: "expo", 4148 totalProgress: "+=0", 4149 duration: scrubSmooth, 4150 paused: true, 4151 onComplete: function onComplete() { 4152 return onScrubComplete && onScrubComplete(self); 4153 } 4154 }); 4155 } 4156 }; 4157 4158 if (animation) { 4159 animation.vars.lazy = false; 4160 animation._initted && !self.isReverted || animation.vars.immediateRender !== false && vars.immediateRender !== false && animation.duration() && animation.render(0, true, true); // special case: if this ScrollTrigger gets re-initted, a from() tween with a stagger could get initted initially and then reverted on the re-init which means it'll need to get rendered again here to properly display things. Otherwise, See https://greensock.com/forums/topic/36777-scrollsmoother-splittext-nextjs/ and https://codepen.io/GreenSock/pen/eYPyPpd?editors=0010 4161 4162 self.animation = animation.pause(); 4163 animation.scrollTrigger = self; 4164 self.scrubDuration(scrub); 4165 snap1 = 0; 4166 id || (id = animation.vars.id); 4167 } 4168 4169 if (snap) { 4170 // TODO: potential idea: use legitimate CSS scroll snapping by pushing invisible elements into the DOM that serve as snap positions, and toggle the document.scrollingElement.style.scrollSnapType onToggle. See https://codepen.io/GreenSock/pen/JjLrgWM for a quick proof of concept. 4171 if (!_isObject(snap) || snap.push) { 4172 snap = { 4173 snapTo: snap 4174 }; 4175 } 4176 4177 "scrollBehavior" in _body.style && gsap.set(isViewport ? [_body, _docEl] : scroller, { 4178 scrollBehavior: "auto" 4179 }); // smooth scrolling doesn't work with snap. 4180 4181 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.forEach(function (o) { 4182 return _isFunction(o) && o.target === (isViewport ? _doc.scrollingElement || _docEl : scroller) && (o.smooth = false); 4183 }); // note: set smooth to false on both the vertical and horizontal scroll getters/setters 4184 4185 4186 snapFunc = _isFunction(snap.snapTo) ? snap.snapTo : snap.snapTo === "labels" ? _getClosestLabel(animation) : snap.snapTo === "labelsDirectional" ? _getLabelAtDirection(animation) : snap.directional !== false ? function (value, st) { 4187 return _snapDirectional(snap.snapTo)(value, _getTime() - lastRefresh < 500 ? 0 : st.direction); 4188 } : gsap.utils.snap(snap.snapTo); 4189 snapDurClamp = snap.duration || { 4190 min: 0.1, 4191 max: 2 4192 }; 4193 snapDurClamp = _isObject(snapDurClamp) ? _clamp(snapDurClamp.min, snapDurClamp.max) : _clamp(snapDurClamp, snapDurClamp); 4194 snapDelayedCall = gsap.delayedCall(snap.delay || scrubSmooth / 2 || 0.1, function () { 4195 var scroll = scrollFunc(), 4196 refreshedRecently = _getTime() - lastRefresh < 500, 4197 tween = tweenTo.tween; 4198 4199 if ((refreshedRecently || Math.abs(self.getVelocity()) < 10) && !tween && !_pointerIsDown && lastSnap !== scroll) { 4200 var progress = (scroll - start) / change, 4201 totalProgress = animation && !isToggle ? animation.totalProgress() : progress, 4202 velocity = refreshedRecently ? 0 : (totalProgress - snap2) / (_getTime() - _time2) * 1000 || 0, 4203 change1 = gsap.utils.clamp(-progress, 1 - progress, _abs(velocity / 2) * velocity / 0.185), 4204 naturalEnd = progress + (snap.inertia === false ? 0 : change1), 4205 endValue = _clamp(0, 1, snapFunc(naturalEnd, self)), 4206 endScroll = Math.round(start + endValue * change), 4207 _snap = snap, 4208 onStart = _snap.onStart, 4209 _onInterrupt = _snap.onInterrupt, 4210 _onComplete = _snap.onComplete; 4211 4212 if (scroll <= end && scroll >= start && endScroll !== scroll) { 4213 if (tween && !tween._initted && tween.data <= _abs(endScroll - scroll)) { 4214 // there's an overlapping snap! So we must figure out which one is closer and let that tween live. 4215 return; 4216 } 4217 4218 if (snap.inertia === false) { 4219 change1 = endValue - progress; 4220 } 4221 4222 tweenTo(endScroll, { 4223 duration: snapDurClamp(_abs(Math.max(_abs(naturalEnd - totalProgress), _abs(endValue - totalProgress)) * 0.185 / velocity / 0.05 || 0)), 4224 ease: snap.ease || "power3", 4225 data: _abs(endScroll - scroll), 4226 // record the distance so that if another snap tween occurs (conflict) we can prioritize the closest snap. 4227 onInterrupt: function onInterrupt() { 4228 return snapDelayedCall.restart(true) && _onInterrupt && _onInterrupt(self); 4229 }, 4230 onComplete: function onComplete() { 4231 self.update(); 4232 lastSnap = scrollFunc(); 4233 snap1 = snap2 = animation && !isToggle ? animation.totalProgress() : self.progress; 4234 onSnapComplete && onSnapComplete(self); 4235 _onComplete && _onComplete(self); 4236 } 4237 }, scroll, change1 * change, endScroll - scroll - change1 * change); 4238 onStart && onStart(self, tweenTo.tween); 4239 } 4240 } else if (self.isActive && lastSnap !== scroll) { 4241 snapDelayedCall.restart(true); 4242 } 4243 }).pause(); 4244 } 4245 4246 id && (_ids[id] = self); 4247 trigger = self.trigger = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(trigger || pin !== true && pin); // if a trigger has some kind of scroll-related effect applied that could contaminate the "y" or "x" position (like a ScrollSmoother effect), we needed a way to temporarily revert it, so we use the stRevert property of the gsCache. It can return another function that we'll call at the end so it can return to its normal state. 4248 4249 customRevertReturn = trigger && trigger._gsap && trigger._gsap.stRevert; 4250 customRevertReturn && (customRevertReturn = customRevertReturn(self)); 4251 pin = pin === true ? trigger : (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(pin); 4252 _isString(toggleClass) && (toggleClass = { 4253 targets: trigger, 4254 className: toggleClass 4255 }); 4256 4257 if (pin) { 4258 pinSpacing === false || pinSpacing === _margin || (pinSpacing = !pinSpacing && pin.parentNode && pin.parentNode.style && _getComputedStyle(pin.parentNode).display === "flex" ? false : _padding); // if the parent is display: flex, don't apply pinSpacing by default. We should check that pin.parentNode is an element (not shadow dom window) 4259 4260 self.pin = pin; 4261 pinCache = gsap.core.getCache(pin); 4262 4263 if (!pinCache.spacer) { 4264 // record the spacer and pinOriginalState on the cache in case someone tries pinning the same element with MULTIPLE ScrollTriggers - we don't want to have multiple spacers or record the "original" pin state after it has already been affected by another ScrollTrigger. 4265 if (pinSpacer) { 4266 pinSpacer = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(pinSpacer); 4267 pinSpacer && !pinSpacer.nodeType && (pinSpacer = pinSpacer.current || pinSpacer.nativeElement); // for React & Angular 4268 4269 pinCache.spacerIsNative = !!pinSpacer; 4270 pinSpacer && (pinCache.spacerState = _getState(pinSpacer)); 4271 } 4272 4273 pinCache.spacer = spacer = pinSpacer || _doc.createElement("div"); 4274 spacer.classList.add("pin-spacer"); 4275 id && spacer.classList.add("pin-spacer-" + id); 4276 pinCache.pinState = pinOriginalState = _getState(pin); 4277 } else { 4278 pinOriginalState = pinCache.pinState; 4279 } 4280 4281 vars.force3D !== false && gsap.set(pin, { 4282 force3D: true 4283 }); 4284 self.spacer = spacer = pinCache.spacer; 4285 cs = _getComputedStyle(pin); 4286 spacingStart = cs[pinSpacing + direction.os2]; 4287 pinGetter = gsap.getProperty(pin); 4288 pinSetter = gsap.quickSetter(pin, direction.a, _px); // pin.firstChild && !_maxScroll(pin, direction) && (pin.style.overflow = "hidden"); // protects from collapsing margins, but can have unintended consequences as demonstrated here: https://codepen.io/GreenSock/pen/1e42c7a73bfa409d2cf1e184e7a4248d so it was removed in favor of just telling people to set up their CSS to avoid the collapsing margins (overflow: hidden | auto is just one option. Another is border-top: 1px solid transparent). 4289 4290 _swapPinIn(pin, spacer, cs); 4291 4292 pinState = _getState(pin); 4293 } 4294 4295 if (markers) { 4296 markerVars = _isObject(markers) ? _setDefaults(markers, _markerDefaults) : _markerDefaults; 4297 markerStartTrigger = _createMarker("scroller-start", id, scroller, direction, markerVars, 0); 4298 markerEndTrigger = _createMarker("scroller-end", id, scroller, direction, markerVars, 0, markerStartTrigger); 4299 offset = markerStartTrigger["offset" + direction.op.d2]; 4300 4301 var content = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)((0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, "content") || scroller); 4302 4303 markerStart = this.markerStart = _createMarker("start", id, content, direction, markerVars, offset, 0, containerAnimation); 4304 markerEnd = this.markerEnd = _createMarker("end", id, content, direction, markerVars, offset, 0, containerAnimation); 4305 containerAnimation && (caMarkerSetter = gsap.quickSetter([markerStart, markerEnd], direction.a, _px)); 4306 4307 if (!useFixedPosition && !(_Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.length && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getProxyProp)(scroller, "fixedMarkers") === true)) { 4308 _makePositionable(isViewport ? _body : scroller); 4309 4310 gsap.set([markerStartTrigger, markerEndTrigger], { 4311 force3D: true 4312 }); 4313 markerStartSetter = gsap.quickSetter(markerStartTrigger, direction.a, _px); 4314 markerEndSetter = gsap.quickSetter(markerEndTrigger, direction.a, _px); 4315 } 4316 } 4317 4318 if (containerAnimation) { 4319 var oldOnUpdate = containerAnimation.vars.onUpdate, 4320 oldParams = containerAnimation.vars.onUpdateParams; 4321 containerAnimation.eventCallback("onUpdate", function () { 4322 self.update(0, 0, 1); 4323 oldOnUpdate && oldOnUpdate.apply(containerAnimation, oldParams || []); 4324 }); 4325 } 4326 4327 self.previous = function () { 4328 return _triggers[_triggers.indexOf(self) - 1]; 4329 }; 4330 4331 self.next = function () { 4332 return _triggers[_triggers.indexOf(self) + 1]; 4333 }; 4334 4335 self.revert = function (revert, temp) { 4336 if (!temp) { 4337 return self.kill(true); 4338 } // for compatibility with gsap.context() and gsap.matchMedia() which call revert() 4339 4340 4341 var r = revert !== false || !self.enabled, 4342 prevRefreshing = _refreshing; 4343 4344 if (r !== self.isReverted) { 4345 if (r) { 4346 prevScroll = Math.max(scrollFunc(), self.scroll.rec || 0); // record the scroll so we can revert later (repositioning/pinning things can affect scroll position). In the static refresh() method, we first record all the scroll positions as a reference. 4347 4348 prevProgress = self.progress; 4349 prevAnimProgress = animation && animation.progress(); 4350 } 4351 4352 markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) { 4353 return m.style.display = r ? "none" : "block"; 4354 }); 4355 4356 if (r) { 4357 _refreshing = self; 4358 self.update(r); // make sure the pin is back in its original position so that all the measurements are correct. do this BEFORE swapping the pin out 4359 } 4360 4361 if (pin && (!pinReparent || !self.isActive)) { 4362 if (r) { 4363 _swapPinOut(pin, spacer, pinOriginalState); 4364 } else { 4365 _swapPinIn(pin, spacer, _getComputedStyle(pin), spacerState); 4366 } 4367 } 4368 4369 r || self.update(r); // when we're restoring, the update should run AFTER swapping the pin into its pin-spacer. 4370 4371 _refreshing = prevRefreshing; // restore. We set it to true during the update() so that things fire properly in there. 4372 4373 self.isReverted = r; 4374 } 4375 }; 4376 4377 self.refresh = function (soft, force, position, pinOffset) { 4378 // position is typically only defined if it's coming from setPositions() - it's a way to skip the normal parsing. pinOffset is also only from setPositions() and is mostly related to fancy stuff we need to do in ScrollSmoother with effects 4379 if ((_refreshing || !self.enabled) && !force) { 4380 return; 4381 } 4382 4383 if (pin && soft && _lastScrollTime) { 4384 _addListener(ScrollTrigger, "scrollEnd", _softRefresh); 4385 4386 return; 4387 } 4388 4389 !_refreshingAll && onRefreshInit && onRefreshInit(self); 4390 _refreshing = self; 4391 4392 if (tweenTo.tween && !position) { 4393 // we skip this if a position is passed in because typically that's from .setPositions() and it's best to allow in-progress snapping to continue. 4394 tweenTo.tween.kill(); 4395 tweenTo.tween = 0; 4396 } 4397 4398 scrubTween && scrubTween.pause(); 4399 invalidateOnRefresh && animation && animation.revert({ 4400 kill: false 4401 }).invalidate(); 4402 self.isReverted || self.revert(true, true); 4403 self._subPinOffset = false; // we'll set this to true in the sub-pins if we find any 4404 4405 var size = getScrollerSize(), 4406 scrollerBounds = getScrollerOffsets(), 4407 max = containerAnimation ? containerAnimation.duration() : _maxScroll(scroller, direction), 4408 isFirstRefresh = change <= 0.01, 4409 offset = 0, 4410 otherPinOffset = pinOffset || 0, 4411 parsedEnd = _isObject(position) ? position.end : vars.end, 4412 parsedEndTrigger = vars.endTrigger || trigger, 4413 parsedStart = _isObject(position) ? position.start : vars.start || (vars.start === 0 || !trigger ? 0 : pin ? "0 0" : "0 100%"), 4414 pinnedContainer = self.pinnedContainer = vars.pinnedContainer && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.pinnedContainer, self), 4415 triggerIndex = trigger && Math.max(0, _triggers.indexOf(self)) || 0, 4416 i = triggerIndex, 4417 cs, 4418 bounds, 4419 scroll, 4420 isVertical, 4421 override, 4422 curTrigger, 4423 curPin, 4424 oppositeScroll, 4425 initted, 4426 revertedPins, 4427 forcedOverflow, 4428 markerStartOffset, 4429 markerEndOffset; 4430 4431 if (markers && _isObject(position)) { 4432 // if we alter the start/end positions with .setPositions(), it generally feeds in absolute NUMBERS which don't convey information about where to line up the markers, so to keep it intuitive, we record how far the trigger positions shift after applying the new numbers and then offset by that much in the opposite direction. We do the same to the associated trigger markers too of course. 4433 markerStartOffset = gsap.getProperty(markerStartTrigger, direction.p); 4434 markerEndOffset = gsap.getProperty(markerEndTrigger, direction.p); 4435 } 4436 4437 while (i--) { 4438 // user might try to pin the same element more than once, so we must find any prior triggers with the same pin, revert them, and determine how long they're pinning so that we can offset things appropriately. Make sure we revert from last to first so that things "rewind" properly. 4439 curTrigger = _triggers[i]; 4440 curTrigger.end || curTrigger.refresh(0, 1) || (_refreshing = self); // if it's a timeline-based trigger that hasn't been fully initialized yet because it's waiting for 1 tick, just force the refresh() here, otherwise if it contains a pin that's supposed to affect other ScrollTriggers further down the page, they won't be adjusted properly. 4441 4442 curPin = curTrigger.pin; 4443 4444 if (curPin && (curPin === trigger || curPin === pin || curPin === pinnedContainer) && !curTrigger.isReverted) { 4445 revertedPins || (revertedPins = []); 4446 revertedPins.unshift(curTrigger); // we'll revert from first to last to make sure things reach their end state properly 4447 4448 curTrigger.revert(true, true); 4449 } 4450 4451 if (curTrigger !== _triggers[i]) { 4452 // in case it got removed. 4453 triggerIndex--; 4454 i--; 4455 } 4456 } 4457 4458 _isFunction(parsedStart) && (parsedStart = parsedStart(self)); 4459 parsedStart = _parseClamp(parsedStart, "start", self); 4460 start = _parsePosition(parsedStart, trigger, size, direction, scrollFunc(), markerStart, markerStartTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._startClamp && "_startClamp") || (pin ? -0.001 : 0); 4461 _isFunction(parsedEnd) && (parsedEnd = parsedEnd(self)); 4462 4463 if (_isString(parsedEnd) && !parsedEnd.indexOf("+=")) { 4464 if (~parsedEnd.indexOf(" ")) { 4465 parsedEnd = (_isString(parsedStart) ? parsedStart.split(" ")[0] : "") + parsedEnd; 4466 } else { 4467 offset = _offsetToPx(parsedEnd.substr(2), size); 4468 parsedEnd = _isString(parsedStart) ? parsedStart : (containerAnimation ? gsap.utils.mapRange(0, containerAnimation.duration(), containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, start) : start) + offset; // _parsePosition won't factor in the offset if the start is a number, so do it here. 4469 4470 parsedEndTrigger = trigger; 4471 } 4472 } 4473 4474 parsedEnd = _parseClamp(parsedEnd, "end", self); 4475 end = Math.max(start, _parsePosition(parsedEnd || (parsedEndTrigger ? "100% 0" : max), parsedEndTrigger, size, direction, scrollFunc() + offset, markerEnd, markerEndTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._endClamp && "_endClamp")) || -0.001; 4476 offset = 0; 4477 i = triggerIndex; 4478 4479 while (i--) { 4480 curTrigger = _triggers[i]; 4481 curPin = curTrigger.pin; 4482 4483 if (curPin && curTrigger.start - curTrigger._pinPush <= start && !containerAnimation && curTrigger.end > 0) { 4484 cs = curTrigger.end - (self._startClamp ? Math.max(0, curTrigger.start) : curTrigger.start); 4485 4486 if ((curPin === trigger && curTrigger.start - curTrigger._pinPush < start || curPin === pinnedContainer) && isNaN(parsedStart)) { 4487 // numeric start values shouldn't be offset at all - treat them as absolute 4488 offset += cs * (1 - curTrigger.progress); 4489 } 4490 4491 curPin === pin && (otherPinOffset += cs); 4492 } 4493 } 4494 4495 start += offset; 4496 end += offset; 4497 self._startClamp && (self._startClamp += offset); 4498 4499 if (self._endClamp && !_refreshingAll) { 4500 self._endClamp = end || -0.001; 4501 end = Math.min(end, _maxScroll(scroller, direction)); 4502 } 4503 4504 change = end - start || (start -= 0.01) && 0.001; 4505 4506 if (isFirstRefresh) { 4507 // on the very first refresh(), the prevProgress couldn't have been accurate yet because the start/end were never calculated, so we set it here. Before 3.11.5, it could lead to an inaccurate scroll position restoration with snapping. 4508 prevProgress = gsap.utils.clamp(0, 1, gsap.utils.normalize(start, end, prevScroll)); 4509 } 4510 4511 self._pinPush = otherPinOffset; 4512 4513 if (markerStart && offset) { 4514 // offset the markers if necessary 4515 cs = {}; 4516 cs[direction.a] = "+=" + offset; 4517 pinnedContainer && (cs[direction.p] = "-=" + scrollFunc()); 4518 gsap.set([markerStart, markerEnd], cs); 4519 } 4520 4521 if (pin) { 4522 cs = _getComputedStyle(pin); 4523 isVertical = direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical; 4524 scroll = scrollFunc(); // recalculate because the triggers can affect the scroll 4525 4526 pinStart = parseFloat(pinGetter(direction.a)) + otherPinOffset; 4527 4528 if (!max && end > 1) { 4529 // makes sure the scroller has a scrollbar, otherwise if something has width: 100%, for example, it would be too big (exclude the scrollbar). See https://greensock.com/forums/topic/25182-scrolltrigger-width-of-page-increase-where-markers-are-set-to-false/ 4530 forcedOverflow = (isViewport ? _doc.scrollingElement || _docEl : scroller).style; 4531 forcedOverflow = { 4532 style: forcedOverflow, 4533 value: forcedOverflow["overflow" + direction.a.toUpperCase()] 4534 }; 4535 4536 if (isViewport && _getComputedStyle(_body)["overflow" + direction.a.toUpperCase()] !== "scroll") { 4537 // avoid an extra scrollbar if BOTH <html> and <body> have overflow set to "scroll" 4538 forcedOverflow.style["overflow" + direction.a.toUpperCase()] = "scroll"; 4539 } 4540 } 4541 4542 _swapPinIn(pin, spacer, cs); 4543 4544 pinState = _getState(pin); // transforms will interfere with the top/left/right/bottom placement, so remove them temporarily. getBoundingClientRect() factors in transforms. 4545 4546 bounds = _getBounds(pin, true); 4547 oppositeScroll = useFixedPosition && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(scroller, isVertical ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical)(); 4548 4549 if (pinSpacing) { 4550 spacerState = [pinSpacing + direction.os2, change + otherPinOffset + _px]; 4551 spacerState.t = spacer; 4552 i = pinSpacing === _padding ? _getSize(pin, direction) + change + otherPinOffset : 0; 4553 i && spacerState.push(direction.d, i + _px); // for box-sizing: border-box (must include padding). 4554 4555 _setState(spacerState); 4556 4557 if (pinnedContainer) { 4558 // in ScrollTrigger.refresh(), we need to re-evaluate the pinContainer's size because this pinSpacing may stretch it out, but we can't just add the exact distance because depending on layout, it may not push things down or it may only do so partially. 4559 _triggers.forEach(function (t) { 4560 if (t.pin === pinnedContainer && t.vars.pinSpacing !== false) { 4561 t._subPinOffset = true; 4562 } 4563 }); 4564 } 4565 4566 useFixedPosition && scrollFunc(prevScroll); 4567 } 4568 4569 if (useFixedPosition) { 4570 override = { 4571 top: bounds.top + (isVertical ? scroll - start : oppositeScroll) + _px, 4572 left: bounds.left + (isVertical ? oppositeScroll : scroll - start) + _px, 4573 boxSizing: "border-box", 4574 position: "fixed" 4575 }; 4576 override[_width] = override["max" + _Width] = Math.ceil(bounds.width) + _px; 4577 override[_height] = override["max" + _Height] = Math.ceil(bounds.height) + _px; 4578 override[_margin] = override[_margin + _Top] = override[_margin + _Right] = override[_margin + _Bottom] = override[_margin + _Left] = "0"; 4579 override[_padding] = cs[_padding]; 4580 override[_padding + _Top] = cs[_padding + _Top]; 4581 override[_padding + _Right] = cs[_padding + _Right]; 4582 override[_padding + _Bottom] = cs[_padding + _Bottom]; 4583 override[_padding + _Left] = cs[_padding + _Left]; 4584 pinActiveState = _copyState(pinOriginalState, override, pinReparent); 4585 _refreshingAll && scrollFunc(0); 4586 } 4587 4588 if (animation) { 4589 // the animation might be affecting the transform, so we must jump to the end, check the value, and compensate accordingly. Otherwise, when it becomes unpinned, the pinSetter() will get set to a value that doesn't include whatever the animation did. 4590 initted = animation._initted; // if not, we must invalidate() after this step, otherwise it could lock in starting values prematurely. 4591 4592 _suppressOverwrites(1); 4593 4594 animation.render(animation.duration(), true, true); 4595 pinChange = pinGetter(direction.a) - pinStart + change + otherPinOffset; 4596 pinMoves = Math.abs(change - pinChange) > 1; 4597 useFixedPosition && pinMoves && pinActiveState.splice(pinActiveState.length - 2, 2); // transform is the last property/value set in the state Array. Since the animation is controlling that, we should omit it. 4598 4599 animation.render(0, true, true); 4600 initted || animation.invalidate(true); 4601 animation.parent || animation.totalTime(animation.totalTime()); // if, for example, a toggleAction called play() and then refresh() happens and when we render(1) above, it would cause the animation to complete and get removed from its parent, so this makes sure it gets put back in. 4602 4603 _suppressOverwrites(0); 4604 } else { 4605 pinChange = change; 4606 } 4607 4608 forcedOverflow && (forcedOverflow.value ? forcedOverflow.style["overflow" + direction.a.toUpperCase()] = forcedOverflow.value : forcedOverflow.style.removeProperty("overflow-" + direction.a)); 4609 } else if (trigger && scrollFunc() && !containerAnimation) { 4610 // it may be INSIDE a pinned element, so walk up the tree and look for any elements with _pinOffset to compensate because anything with pinSpacing that's already scrolled would throw off the measurements in getBoundingClientRect() 4611 bounds = trigger.parentNode; 4612 4613 while (bounds && bounds !== _body) { 4614 if (bounds._pinOffset) { 4615 start -= bounds._pinOffset; 4616 end -= bounds._pinOffset; 4617 } 4618 4619 bounds = bounds.parentNode; 4620 } 4621 } 4622 4623 revertedPins && revertedPins.forEach(function (t) { 4624 return t.revert(false, true); 4625 }); 4626 self.start = start; 4627 self.end = end; 4628 scroll1 = scroll2 = _refreshingAll ? prevScroll : scrollFunc(); // reset velocity 4629 4630 if (!containerAnimation && !_refreshingAll) { 4631 scroll1 < prevScroll && scrollFunc(prevScroll); 4632 self.scroll.rec = 0; 4633 } 4634 4635 self.revert(false, true); 4636 lastRefresh = _getTime(); 4637 4638 if (snapDelayedCall) { 4639 lastSnap = -1; // just so snapping gets re-enabled, clear out any recorded last value 4640 // self.isActive && scrollFunc(start + change * prevProgress); // previously this line was here to ensure that when snapping kicks in, it's from the previous progress but in some cases that's not desirable, like an all-page ScrollTrigger when new content gets added to the page, that'd totally change the progress. 4641 4642 snapDelayedCall.restart(true); 4643 } 4644 4645 _refreshing = 0; 4646 animation && isToggle && (animation._initted || prevAnimProgress) && animation.progress() !== prevAnimProgress && animation.progress(prevAnimProgress || 0, true).render(animation.time(), true, true); // must force a re-render because if saveStyles() was used on the target(s), the styles could have been wiped out during the refresh(). 4647 4648 if (isFirstRefresh || prevProgress !== self.progress || containerAnimation) { 4649 // ensures that the direction is set properly (when refreshing, progress is set back to 0 initially, then back again to wherever it needs to be) and that callbacks are triggered. 4650 animation && !isToggle && animation.totalProgress(containerAnimation && start < -0.001 && !prevProgress ? gsap.utils.normalize(start, end, 0) : prevProgress, true); // to avoid issues where animation callbacks like onStart aren't triggered. 4651 4652 self.progress = isFirstRefresh || (scroll1 - start) / change === prevProgress ? 0 : prevProgress; 4653 } 4654 4655 pin && pinSpacing && (spacer._pinOffset = Math.round(self.progress * pinChange)); 4656 scrubTween && scrubTween.invalidate(); 4657 4658 if (!isNaN(markerStartOffset)) { 4659 // numbers were passed in for the position which are absolute, so instead of just putting the markers at the very bottom of the viewport, we figure out how far they shifted down (it's safe to assume they were originally positioned in closer relation to the trigger element with values like "top", "center", a percentage or whatever, so we offset that much in the opposite direction to basically revert them to the relative position thy were at previously. 4660 markerStartOffset -= gsap.getProperty(markerStartTrigger, direction.p); 4661 markerEndOffset -= gsap.getProperty(markerEndTrigger, direction.p); 4662 4663 _shiftMarker(markerStartTrigger, direction, markerStartOffset); 4664 4665 _shiftMarker(markerStart, direction, markerStartOffset - (pinOffset || 0)); 4666 4667 _shiftMarker(markerEndTrigger, direction, markerEndOffset); 4668 4669 _shiftMarker(markerEnd, direction, markerEndOffset - (pinOffset || 0)); 4670 } 4671 4672 isFirstRefresh && !_refreshingAll && self.update(); // edge case - when you reload a page when it's already scrolled down, some browsers fire a "scroll" event before DOMContentLoaded, triggering an updateAll(). If we don't update the self.progress as part of refresh(), then when it happens next, it may record prevProgress as 0 when it really shouldn't, potentially causing a callback in an animation to fire again. 4673 4674 if (onRefresh && !_refreshingAll && !executingOnRefresh) { 4675 // when refreshing all, we do extra work to correct pinnedContainer sizes and ensure things don't exceed the maxScroll, so we should do all the refreshes at the end after all that work so that the start/end values are corrected. 4676 executingOnRefresh = true; 4677 onRefresh(self); 4678 executingOnRefresh = false; 4679 } 4680 }; 4681 4682 self.getVelocity = function () { 4683 return (scrollFunc() - scroll2) / (_getTime() - _time2) * 1000 || 0; 4684 }; 4685 4686 self.endAnimation = function () { 4687 _endAnimation(self.callbackAnimation); 4688 4689 if (animation) { 4690 scrubTween ? scrubTween.progress(1) : !animation.paused() ? _endAnimation(animation, animation.reversed()) : isToggle || _endAnimation(animation, self.direction < 0, 1); 4691 } 4692 }; 4693 4694 self.labelToScroll = function (label) { 4695 return animation && animation.labels && (start || self.refresh() || start) + animation.labels[label] / animation.duration() * change || 0; 4696 }; 4697 4698 self.getTrailing = function (name) { 4699 var i = _triggers.indexOf(self), 4700 a = self.direction > 0 ? _triggers.slice(0, i).reverse() : _triggers.slice(i + 1); 4701 4702 return (_isString(name) ? a.filter(function (t) { 4703 return t.vars.preventOverlaps === name; 4704 }) : a).filter(function (t) { 4705 return self.direction > 0 ? t.end <= start : t.start >= end; 4706 }); 4707 }; 4708 4709 self.update = function (reset, recordVelocity, forceFake) { 4710 if (containerAnimation && !forceFake && !reset) { 4711 return; 4712 } 4713 4714 var scroll = _refreshingAll === true ? prevScroll : self.scroll(), 4715 p = reset ? 0 : (scroll - start) / change, 4716 clipped = p < 0 ? 0 : p > 1 ? 1 : p || 0, 4717 prevProgress = self.progress, 4718 isActive, 4719 wasActive, 4720 toggleState, 4721 action, 4722 stateChanged, 4723 toggled, 4724 isAtMax, 4725 isTakingAction; 4726 4727 if (recordVelocity) { 4728 scroll2 = scroll1; 4729 scroll1 = containerAnimation ? scrollFunc() : scroll; 4730 4731 if (snap) { 4732 snap2 = snap1; 4733 snap1 = animation && !isToggle ? animation.totalProgress() : clipped; 4734 } 4735 } // anticipate the pinning a few ticks ahead of time based on velocity to avoid a visual glitch due to the fact that most browsers do scrolling on a separate thread (not synced with requestAnimationFrame). 4736 4737 4738 anticipatePin && !clipped && pin && !_refreshing && !_startup && _lastScrollTime && start < scroll + (scroll - scroll2) / (_getTime() - _time2) * anticipatePin && (clipped = 0.0001); 4739 4740 if (clipped !== prevProgress && self.enabled) { 4741 isActive = self.isActive = !!clipped && clipped < 1; 4742 wasActive = !!prevProgress && prevProgress < 1; 4743 toggled = isActive !== wasActive; 4744 stateChanged = toggled || !!clipped !== !!prevProgress; // could go from start all the way to end, thus it didn't toggle but it did change state in a sense (may need to fire a callback) 4745 4746 self.direction = clipped > prevProgress ? 1 : -1; 4747 self.progress = clipped; 4748 4749 if (stateChanged && !_refreshing) { 4750 toggleState = clipped && !prevProgress ? 0 : clipped === 1 ? 1 : prevProgress === 1 ? 2 : 3; // 0 = enter, 1 = leave, 2 = enterBack, 3 = leaveBack (we prioritize the FIRST encounter, thus if you scroll really fast past the onEnter and onLeave in one tick, it'd prioritize onEnter. 4751 4752 if (isToggle) { 4753 action = !toggled && toggleActions[toggleState + 1] !== "none" && toggleActions[toggleState + 1] || toggleActions[toggleState]; // if it didn't toggle, that means it shot right past and since we prioritize the "enter" action, we should switch to the "leave" in this case (but only if one is defined) 4754 4755 isTakingAction = animation && (action === "complete" || action === "reset" || action in animation); 4756 } 4757 } 4758 4759 preventOverlaps && (toggled || isTakingAction) && (isTakingAction || scrub || !animation) && (_isFunction(preventOverlaps) ? preventOverlaps(self) : self.getTrailing(preventOverlaps).forEach(function (t) { 4760 return t.endAnimation(); 4761 })); 4762 4763 if (!isToggle) { 4764 if (scrubTween && !_refreshing && !_startup) { 4765 scrubTween._dp._time - scrubTween._start !== scrubTween._time && scrubTween.render(scrubTween._dp._time - scrubTween._start); // if there's a scrub on both the container animation and this one (or a ScrollSmoother), the update order would cause this one not to have rendered yet, so it wouldn't make any progress before we .restart() it heading toward the new progress so it'd appear stuck thus we force a render here. 4766 4767 if (scrubTween.resetTo) { 4768 scrubTween.resetTo("totalProgress", clipped, animation._tTime / animation._tDur); 4769 } else { 4770 // legacy support (courtesy), before 3.10.0 4771 scrubTween.vars.totalProgress = clipped; 4772 scrubTween.invalidate().restart(); 4773 } 4774 } else if (animation) { 4775 animation.totalProgress(clipped, !!(_refreshing && (lastRefresh || reset))); 4776 } 4777 } 4778 4779 if (pin) { 4780 reset && pinSpacing && (spacer.style[pinSpacing + direction.os2] = spacingStart); 4781 4782 if (!useFixedPosition) { 4783 pinSetter(_round(pinStart + pinChange * clipped)); 4784 } else if (stateChanged) { 4785 isAtMax = !reset && clipped > prevProgress && end + 1 > scroll && scroll + 1 >= _maxScroll(scroller, direction); // if it's at the VERY end of the page, don't switch away from position: fixed because it's pointless and it could cause a brief flash when the user scrolls back up (when it gets pinned again) 4786 4787 if (pinReparent) { 4788 if (!reset && (isActive || isAtMax)) { 4789 var bounds = _getBounds(pin, true), 4790 _offset = scroll - start; 4791 4792 _reparent(pin, _body, bounds.top + (direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical ? _offset : 0) + _px, bounds.left + (direction === _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical ? 0 : _offset) + _px); 4793 } else { 4794 _reparent(pin, spacer); 4795 } 4796 } 4797 4798 _setState(isActive || isAtMax ? pinActiveState : pinState); 4799 4800 pinMoves && clipped < 1 && isActive || pinSetter(pinStart + (clipped === 1 && !isAtMax ? pinChange : 0)); 4801 } 4802 } 4803 4804 snap && !tweenTo.tween && !_refreshing && !_startup && snapDelayedCall.restart(true); 4805 toggleClass && (toggled || once && clipped && (clipped < 1 || !_limitCallbacks)) && _toArray(toggleClass.targets).forEach(function (el) { 4806 return el.classList[isActive || once ? "add" : "remove"](toggleClass.className); 4807 }); // classes could affect positioning, so do it even if reset or refreshing is true. 4808 4809 onUpdate && !isToggle && !reset && onUpdate(self); 4810 4811 if (stateChanged && !_refreshing) { 4812 if (isToggle) { 4813 if (isTakingAction) { 4814 if (action === "complete") { 4815 animation.pause().totalProgress(1); 4816 } else if (action === "reset") { 4817 animation.restart(true).pause(); 4818 } else if (action === "restart") { 4819 animation.restart(true); 4820 } else { 4821 animation[action](); 4822 } 4823 } 4824 4825 onUpdate && onUpdate(self); 4826 } 4827 4828 if (toggled || !_limitCallbacks) { 4829 // on startup, the page could be scrolled and we don't want to fire callbacks that didn't toggle. For example onEnter shouldn't fire if the ScrollTrigger isn't actually entered. 4830 onToggle && toggled && _callback(self, onToggle); 4831 callbacks[toggleState] && _callback(self, callbacks[toggleState]); 4832 once && (clipped === 1 ? self.kill(false, 1) : callbacks[toggleState] = 0); // a callback shouldn't be called again if once is true. 4833 4834 if (!toggled) { 4835 // it's possible to go completely past, like from before the start to after the end (or vice-versa) in which case BOTH callbacks should be fired in that order 4836 toggleState = clipped === 1 ? 1 : 3; 4837 callbacks[toggleState] && _callback(self, callbacks[toggleState]); 4838 } 4839 } 4840 4841 if (fastScrollEnd && !isActive && Math.abs(self.getVelocity()) > (_isNumber(fastScrollEnd) ? fastScrollEnd : 2500)) { 4842 _endAnimation(self.callbackAnimation); 4843 4844 scrubTween ? scrubTween.progress(1) : _endAnimation(animation, action === "reverse" ? 1 : !clipped, 1); 4845 } 4846 } else if (isToggle && onUpdate && !_refreshing) { 4847 onUpdate(self); 4848 } 4849 } // update absolutely-positioned markers (only if the scroller isn't the viewport) 4850 4851 4852 if (markerEndSetter) { 4853 var n = containerAnimation ? scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0) : scroll; 4854 markerStartSetter(n + (markerStartTrigger._isFlipped ? 1 : 0)); 4855 markerEndSetter(n); 4856 } 4857 4858 caMarkerSetter && caMarkerSetter(-scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0)); 4859 }; 4860 4861 self.enable = function (reset, refresh) { 4862 if (!self.enabled) { 4863 self.enabled = true; 4864 4865 _addListener(scroller, "resize", _onResize); 4866 4867 isViewport || _addListener(scroller, "scroll", _onScroll); 4868 onRefreshInit && _addListener(ScrollTrigger, "refreshInit", onRefreshInit); 4869 4870 if (reset !== false) { 4871 self.progress = prevProgress = 0; 4872 scroll1 = scroll2 = lastSnap = scrollFunc(); 4873 } 4874 4875 refresh !== false && self.refresh(); 4876 } 4877 }; 4878 4879 self.getTween = function (snap) { 4880 return snap && tweenTo ? tweenTo.tween : scrubTween; 4881 }; 4882 4883 self.setPositions = function (newStart, newEnd, keepClamp, pinOffset) { 4884 // doesn't persist after refresh()! Intended to be a way to override values that were set during refresh(), like you could set it in onRefresh() 4885 if (containerAnimation) { 4886 // convert ratios into scroll positions. Remember, start/end values on ScrollTriggers that have a containerAnimation refer to the time (in seconds), NOT scroll positions. 4887 var st = containerAnimation.scrollTrigger, 4888 duration = containerAnimation.duration(), 4889 _change = st.end - st.start; 4890 4891 newStart = st.start + _change * newStart / duration; 4892 newEnd = st.start + _change * newEnd / duration; 4893 } 4894 4895 self.refresh(false, false, { 4896 start: _keepClamp(newStart, keepClamp && !!self._startClamp), 4897 end: _keepClamp(newEnd, keepClamp && !!self._endClamp) 4898 }, pinOffset); 4899 self.update(); 4900 }; 4901 4902 self.adjustPinSpacing = function (amount) { 4903 if (spacerState && amount) { 4904 var i = spacerState.indexOf(direction.d) + 1; 4905 spacerState[i] = parseFloat(spacerState[i]) + amount + _px; 4906 spacerState[1] = parseFloat(spacerState[1]) + amount + _px; 4907 4908 _setState(spacerState); 4909 } 4910 }; 4911 4912 self.disable = function (reset, allowAnimation) { 4913 if (self.enabled) { 4914 reset !== false && self.revert(true, true); 4915 self.enabled = self.isActive = false; 4916 allowAnimation || scrubTween && scrubTween.pause(); 4917 prevScroll = 0; 4918 pinCache && (pinCache.uncache = 1); 4919 onRefreshInit && _removeListener(ScrollTrigger, "refreshInit", onRefreshInit); 4920 4921 if (snapDelayedCall) { 4922 snapDelayedCall.pause(); 4923 tweenTo.tween && tweenTo.tween.kill() && (tweenTo.tween = 0); 4924 } 4925 4926 if (!isViewport) { 4927 var i = _triggers.length; 4928 4929 while (i--) { 4930 if (_triggers[i].scroller === scroller && _triggers[i] !== self) { 4931 return; //don't remove the listeners if there are still other triggers referencing it. 4932 } 4933 } 4934 4935 _removeListener(scroller, "resize", _onResize); 4936 4937 isViewport || _removeListener(scroller, "scroll", _onScroll); 4938 } 4939 } 4940 }; 4941 4942 self.kill = function (revert, allowAnimation) { 4943 self.disable(revert, allowAnimation); 4944 scrubTween && !allowAnimation && scrubTween.kill(); 4945 id && delete _ids[id]; 4946 4947 var i = _triggers.indexOf(self); 4948 4949 i >= 0 && _triggers.splice(i, 1); 4950 i === _i && _direction > 0 && _i--; // if we're in the middle of a refresh() or update(), splicing would cause skips in the index, so adjust... 4951 // if no other ScrollTrigger instances of the same scroller are found, wipe out any recorded scroll position. Otherwise, in a single page application, for example, it could maintain scroll position when it really shouldn't. 4952 4953 i = 0; 4954 4955 _triggers.forEach(function (t) { 4956 return t.scroller === self.scroller && (i = 1); 4957 }); 4958 4959 i || _refreshingAll || (self.scroll.rec = 0); 4960 4961 if (animation) { 4962 animation.scrollTrigger = null; 4963 revert && animation.revert({ 4964 kill: false 4965 }); 4966 allowAnimation || animation.kill(); 4967 } 4968 4969 markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) { 4970 return m.parentNode && m.parentNode.removeChild(m); 4971 }); 4972 _primary === self && (_primary = 0); 4973 4974 if (pin) { 4975 pinCache && (pinCache.uncache = 1); 4976 i = 0; 4977 4978 _triggers.forEach(function (t) { 4979 return t.pin === pin && i++; 4980 }); 4981 4982 i || (pinCache.spacer = 0); // if there aren't any more ScrollTriggers with the same pin, remove the spacer, otherwise it could be contaminated with old/stale values if the user re-creates a ScrollTrigger for the same element. 4983 } 4984 4985 vars.onKill && vars.onKill(self); 4986 }; 4987 4988 _triggers.push(self); 4989 4990 self.enable(false, false); 4991 customRevertReturn && customRevertReturn(self); 4992 4993 if (animation && animation.add && !change) { 4994 // if the animation is a timeline, it may not have been populated yet, so it wouldn't render at the proper place on the first refresh(), thus we should schedule one for the next tick. If "change" is defined, we know it must be re-enabling, thus we can refresh() right away. 4995 var updateFunc = self.update; // some browsers may fire a scroll event BEFORE a tick elapses and/or the DOMContentLoaded fires. So there's a chance update() will be called BEFORE a refresh() has happened on a Timeline-attached ScrollTrigger which means the start/end won't be calculated yet. We don't want to add conditional logic inside the update() method (like check to see if end is defined and if not, force a refresh()) because that's a function that gets hit a LOT (performance). So we swap out the real update() method for this one that'll re-attach it the first time it gets called and of course forces a refresh(). 4996 4997 self.update = function () { 4998 self.update = updateFunc; 4999 start || end || self.refresh(); 5000 }; 5001 5002 gsap.delayedCall(0.01, self.update); 5003 change = 0.01; 5004 start = end = 0; 5005 } else { 5006 self.refresh(); 5007 } 5008 5009 pin && _queueRefreshAll(); // pinning could affect the positions of other things, so make sure we queue a full refresh() 5010 }; 5011 5012 ScrollTrigger.register = function register(core) { 5013 if (!_coreInitted) { 5014 gsap = core || _getGSAP(); 5015 _windowExists() && window.document && ScrollTrigger.enable(); 5016 _coreInitted = _enabled; 5017 } 5018 5019 return _coreInitted; 5020 }; 5021 5022 ScrollTrigger.defaults = function defaults(config) { 5023 if (config) { 5024 for (var p in config) { 5025 _defaults[p] = config[p]; 5026 } 5027 } 5028 5029 return _defaults; 5030 }; 5031 5032 ScrollTrigger.disable = function disable(reset, kill) { 5033 _enabled = 0; 5034 5035 _triggers.forEach(function (trigger) { 5036 return trigger[kill ? "kill" : "disable"](reset); 5037 }); 5038 5039 _removeListener(_win, "wheel", _onScroll); 5040 5041 _removeListener(_doc, "scroll", _onScroll); 5042 5043 clearInterval(_syncInterval); 5044 5045 _removeListener(_doc, "touchcancel", _passThrough); 5046 5047 _removeListener(_body, "touchstart", _passThrough); 5048 5049 _multiListener(_removeListener, _doc, "pointerdown,touchstart,mousedown", _pointerDownHandler); 5050 5051 _multiListener(_removeListener, _doc, "pointerup,touchend,mouseup", _pointerUpHandler); 5052 5053 _resizeDelay.kill(); 5054 5055 _iterateAutoRefresh(_removeListener); 5056 5057 for (var i = 0; i < _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.length; i += 3) { 5058 _wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i + 1]); 5059 5060 _wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i + 2]); 5061 } 5062 }; 5063 5064 ScrollTrigger.enable = function enable() { 5065 _win = window; 5066 _doc = document; 5067 _docEl = _doc.documentElement; 5068 _body = _doc.body; 5069 5070 if (gsap) { 5071 _toArray = gsap.utils.toArray; 5072 _clamp = gsap.utils.clamp; 5073 _context = gsap.core.context || _passThrough; 5074 _suppressOverwrites = gsap.core.suppressOverwrites || _passThrough; 5075 _scrollRestoration = _win.history.scrollRestoration || "auto"; 5076 _lastScroll = _win.pageYOffset; 5077 gsap.core.globals("ScrollTrigger", ScrollTrigger); // must register the global manually because in Internet Explorer, functions (classes) don't have a "name" property. 5078 5079 if (_body) { 5080 _enabled = 1; 5081 _div100vh = document.createElement("div"); // to solve mobile browser address bar show/hide resizing, we shouldn't rely on window.innerHeight. Instead, use a <div> with its height set to 100vh and measure that since that's what the scrolling is based on anyway and it's not affected by address bar showing/hiding. 5082 5083 _div100vh.style.height = "100vh"; 5084 _div100vh.style.position = "absolute"; 5085 5086 _refresh100vh(); 5087 5088 _rafBugFix(); 5089 5090 _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.register(gsap); // isTouch is 0 if no touch, 1 if ONLY touch, and 2 if it can accommodate touch but also other types like mouse/pointer. 5091 5092 ScrollTrigger.isTouch = _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch; 5093 _fixIOSBug = _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch && /(iPad|iPhone|iPod|Mac)/g.test(navigator.userAgent); // since 2017, iOS has had a bug that causes event.clientX/Y to be inaccurate when a scroll occurs, thus we must alternate ignoring every other touchmove event to work around it. See https://bugs.webkit.org/show_bug.cgi?id=181954 and https://codepen.io/GreenSock/pen/ExbrPNa/087cef197dc35445a0951e8935c41503 5094 5095 _addListener(_win, "wheel", _onScroll); // mostly for 3rd party smooth scrolling libraries. 5096 5097 5098 _root = [_win, _doc, _docEl, _body]; 5099 5100 if (gsap.matchMedia) { 5101 ScrollTrigger.matchMedia = function (vars) { 5102 var mm = gsap.matchMedia(), 5103 p; 5104 5105 for (p in vars) { 5106 mm.add(p, vars[p]); 5107 } 5108 5109 return mm; 5110 }; 5111 5112 gsap.addEventListener("matchMediaInit", function () { 5113 return _revertAll(); 5114 }); 5115 gsap.addEventListener("matchMediaRevert", function () { 5116 return _revertRecorded(); 5117 }); 5118 gsap.addEventListener("matchMedia", function () { 5119 _refreshAll(0, 1); 5120 5121 _dispatch("matchMedia"); 5122 }); 5123 gsap.matchMedia("(orientation: portrait)", function () { 5124 // when orientation changes, we should take new base measurements for the ignoreMobileResize feature. 5125 _setBaseDimensions(); 5126 5127 return _setBaseDimensions; 5128 }); 5129 } else { 5130 console.warn("Requires GSAP 3.11.0 or later"); 5131 } 5132 5133 _setBaseDimensions(); 5134 5135 _addListener(_doc, "scroll", _onScroll); // some browsers (like Chrome), the window stops dispatching scroll events on the window if you scroll really fast, but it's consistent on the document! 5136 5137 5138 var bodyStyle = _body.style, 5139 border = bodyStyle.borderTopStyle, 5140 AnimationProto = gsap.core.Animation.prototype, 5141 bounds, 5142 i; 5143 AnimationProto.revert || Object.defineProperty(AnimationProto, "revert", { 5144 value: function value() { 5145 return this.time(-0.01, true); 5146 } 5147 }); // only for backwards compatibility (Animation.revert() was added after 3.10.4) 5148 5149 bodyStyle.borderTopStyle = "solid"; // works around an issue where a margin of a child element could throw off the bounds of the _body, making it seem like there's a margin when there actually isn't. The border ensures that the bounds are accurate. 5150 5151 bounds = _getBounds(_body); 5152 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical.m = Math.round(bounds.top + _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical.sc()) || 0; // accommodate the offset of the <body> caused by margins and/or padding 5153 5154 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal.m = Math.round(bounds.left + _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal.sc()) || 0; 5155 border ? bodyStyle.borderTopStyle = border : bodyStyle.removeProperty("border-top-style"); // TODO: (?) maybe move to leveraging the velocity mechanism in Observer and skip intervals. 5156 5157 _syncInterval = setInterval(_sync, 250); 5158 gsap.delayedCall(0.5, function () { 5159 return _startup = 0; 5160 }); 5161 5162 _addListener(_doc, "touchcancel", _passThrough); // some older Android devices intermittently stop dispatching "touchmove" events if we don't listen for "touchcancel" on the document. 5163 5164 5165 _addListener(_body, "touchstart", _passThrough); //works around Safari bug: https://greensock.com/forums/topic/21450-draggable-in-iframe-on-mobile-is-buggy/ 5166 5167 5168 _multiListener(_addListener, _doc, "pointerdown,touchstart,mousedown", _pointerDownHandler); 5169 5170 _multiListener(_addListener, _doc, "pointerup,touchend,mouseup", _pointerUpHandler); 5171 5172 _transformProp = gsap.utils.checkPrefix("transform"); 5173 5174 _stateProps.push(_transformProp); 5175 5176 _coreInitted = _getTime(); 5177 _resizeDelay = gsap.delayedCall(0.2, _refreshAll).pause(); 5178 _autoRefresh = [_doc, "visibilitychange", function () { 5179 var w = _win.innerWidth, 5180 h = _win.innerHeight; 5181 5182 if (_doc.hidden) { 5183 _prevWidth = w; 5184 _prevHeight = h; 5185 } else if (_prevWidth !== w || _prevHeight !== h) { 5186 _onResize(); 5187 } 5188 }, _doc, "DOMContentLoaded", _refreshAll, _win, "load", _refreshAll, _win, "resize", _onResize]; 5189 5190 _iterateAutoRefresh(_addListener); 5191 5192 _triggers.forEach(function (trigger) { 5193 return trigger.enable(0, 1); 5194 }); 5195 5196 for (i = 0; i < _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.length; i += 3) { 5197 _wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i + 1]); 5198 5199 _wheelListener(_removeListener, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i], _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers[i + 2]); 5200 } 5201 } 5202 } 5203 }; 5204 5205 ScrollTrigger.config = function config(vars) { 5206 "limitCallbacks" in vars && (_limitCallbacks = !!vars.limitCallbacks); 5207 var ms = vars.syncInterval; 5208 ms && clearInterval(_syncInterval) || (_syncInterval = ms) && setInterval(_sync, ms); 5209 "ignoreMobileResize" in vars && (_ignoreMobileResize = ScrollTrigger.isTouch === 1 && vars.ignoreMobileResize); 5210 5211 if ("autoRefreshEvents" in vars) { 5212 _iterateAutoRefresh(_removeListener) || _iterateAutoRefresh(_addListener, vars.autoRefreshEvents || "none"); 5213 _ignoreResize = (vars.autoRefreshEvents + "").indexOf("resize") === -1; 5214 } 5215 }; 5216 5217 ScrollTrigger.scrollerProxy = function scrollerProxy(target, vars) { 5218 var t = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(target), 5219 i = _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.indexOf(t), 5220 isViewport = _isViewport(t); 5221 5222 if (~i) { 5223 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.splice(i, isViewport ? 6 : 2); 5224 } 5225 5226 if (vars) { 5227 isViewport ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.unshift(_win, vars, _body, vars, _docEl, vars) : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies.unshift(t, vars); 5228 } 5229 }; 5230 5231 ScrollTrigger.clearMatchMedia = function clearMatchMedia(query) { 5232 _triggers.forEach(function (t) { 5233 return t._ctx && t._ctx.query === query && t._ctx.kill(true, true); 5234 }); 5235 }; 5236 5237 ScrollTrigger.isInViewport = function isInViewport(element, ratio, horizontal) { 5238 var bounds = (_isString(element) ? (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(element) : element).getBoundingClientRect(), 5239 offset = bounds[horizontal ? _width : _height] * ratio || 0; 5240 return horizontal ? bounds.right - offset > 0 && bounds.left + offset < _win.innerWidth : bounds.bottom - offset > 0 && bounds.top + offset < _win.innerHeight; 5241 }; 5242 5243 ScrollTrigger.positionInViewport = function positionInViewport(element, referencePoint, horizontal) { 5244 _isString(element) && (element = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(element)); 5245 var bounds = element.getBoundingClientRect(), 5246 size = bounds[horizontal ? _width : _height], 5247 offset = referencePoint == null ? size / 2 : referencePoint in _keywords ? _keywords[referencePoint] * size : ~referencePoint.indexOf("%") ? parseFloat(referencePoint) * size / 100 : parseFloat(referencePoint) || 0; 5248 return horizontal ? (bounds.left + offset) / _win.innerWidth : (bounds.top + offset) / _win.innerHeight; 5249 }; 5250 5251 ScrollTrigger.killAll = function killAll(allowListeners) { 5252 _triggers.slice(0).forEach(function (t) { 5253 return t.vars.id !== "ScrollSmoother" && t.kill(); 5254 }); 5255 5256 if (allowListeners !== true) { 5257 var listeners = _listeners.killAll || []; 5258 _listeners = {}; 5259 listeners.forEach(function (f) { 5260 return f(); 5261 }); 5262 } 5263 }; 5264 5265 return ScrollTrigger; 5266}(); 5267ScrollTrigger.version = "3.12.2"; 5268 5269ScrollTrigger.saveStyles = function (targets) { 5270 return targets ? _toArray(targets).forEach(function (target) { 5271 // saved styles are recorded in a consecutive alternating Array, like [element, cssText, transform attribute, cache, matchMedia, ...] 5272 if (target && target.style) { 5273 var i = _savedStyles.indexOf(target); 5274 5275 i >= 0 && _savedStyles.splice(i, 5); 5276 5277 _savedStyles.push(target, target.style.cssText, target.getBBox && target.getAttribute("transform"), gsap.core.getCache(target), _context()); 5278 } 5279 }) : _savedStyles; 5280}; 5281 5282ScrollTrigger.revert = function (soft, media) { 5283 return _revertAll(!soft, media); 5284}; 5285 5286ScrollTrigger.create = function (vars, animation) { 5287 return new ScrollTrigger(vars, animation); 5288}; 5289 5290ScrollTrigger.refresh = function (safe) { 5291 return safe ? _onResize() : (_coreInitted || ScrollTrigger.register()) && _refreshAll(true); 5292}; 5293 5294ScrollTrigger.update = function (force) { 5295 return ++_Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache && _updateAll(force === true ? 2 : 0); 5296}; 5297 5298ScrollTrigger.clearScrollMemory = _clearScrollMemory; 5299 5300ScrollTrigger.maxScroll = function (element, horizontal) { 5301 return _maxScroll(element, horizontal ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical); 5302}; 5303 5304ScrollTrigger.getScrollFunc = function (element, horizontal) { 5305 return (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)((0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(element), horizontal ? _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal : _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical); 5306}; 5307 5308ScrollTrigger.getById = function (id) { 5309 return _ids[id]; 5310}; 5311 5312ScrollTrigger.getAll = function () { 5313 return _triggers.filter(function (t) { 5314 return t.vars.id !== "ScrollSmoother"; 5315 }); 5316}; // it's common for people to ScrollTrigger.getAll(t => t.kill()) on page routes, for example, and we don't want it to ruin smooth scrolling by killing the main ScrollSmoother one. 5317 5318 5319ScrollTrigger.isScrolling = function () { 5320 return !!_lastScrollTime; 5321}; 5322 5323ScrollTrigger.snapDirectional = _snapDirectional; 5324 5325ScrollTrigger.addEventListener = function (type, callback) { 5326 var a = _listeners[type] || (_listeners[type] = []); 5327 ~a.indexOf(callback) || a.push(callback); 5328}; 5329 5330ScrollTrigger.removeEventListener = function (type, callback) { 5331 var a = _listeners[type], 5332 i = a && a.indexOf(callback); 5333 i >= 0 && a.splice(i, 1); 5334}; 5335 5336ScrollTrigger.batch = function (targets, vars) { 5337 var result = [], 5338 varsCopy = {}, 5339 interval = vars.interval || 0.016, 5340 batchMax = vars.batchMax || 1e9, 5341 proxyCallback = function proxyCallback(type, callback) { 5342 var elements = [], 5343 triggers = [], 5344 delay = gsap.delayedCall(interval, function () { 5345 callback(elements, triggers); 5346 elements = []; 5347 triggers = []; 5348 }).pause(); 5349 return function (self) { 5350 elements.length || delay.restart(true); 5351 elements.push(self.trigger); 5352 triggers.push(self); 5353 batchMax <= elements.length && delay.progress(1); 5354 }; 5355 }, 5356 p; 5357 5358 for (p in vars) { 5359 varsCopy[p] = p.substr(0, 2) === "on" && _isFunction(vars[p]) && p !== "onRefreshInit" ? proxyCallback(p, vars[p]) : vars[p]; 5360 } 5361 5362 if (_isFunction(batchMax)) { 5363 batchMax = batchMax(); 5364 5365 _addListener(ScrollTrigger, "refresh", function () { 5366 return batchMax = vars.batchMax(); 5367 }); 5368 } 5369 5370 _toArray(targets).forEach(function (target) { 5371 var config = {}; 5372 5373 for (p in varsCopy) { 5374 config[p] = varsCopy[p]; 5375 } 5376 5377 config.trigger = target; 5378 result.push(ScrollTrigger.create(config)); 5379 }); 5380 5381 return result; 5382}; // to reduce file size. clamps the scroll and also returns a duration multiplier so that if the scroll gets chopped shorter, the duration gets curtailed as well (otherwise if you're very close to the top of the page, for example, and swipe up really fast, it'll suddenly slow down and take a long time to reach the top). 5383 5384 5385var _clampScrollAndGetDurationMultiplier = function _clampScrollAndGetDurationMultiplier(scrollFunc, current, end, max) { 5386 current > max ? scrollFunc(max) : current < 0 && scrollFunc(0); 5387 return end > max ? (max - current) / (end - current) : end < 0 ? current / (current - end) : 1; 5388}, 5389 _allowNativePanning = function _allowNativePanning(target, direction) { 5390 if (direction === true) { 5391 target.style.removeProperty("touch-action"); 5392 } else { 5393 target.style.touchAction = direction === true ? "auto" : direction ? "pan-" + direction + (_Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch ? " pinch-zoom" : "") : "none"; // note: Firefox doesn't support it pinch-zoom properly, at least in addition to a pan-x or pan-y. 5394 } 5395 5396 target === _docEl && _allowNativePanning(_body, direction); 5397}, 5398 _overflow = { 5399 auto: 1, 5400 scroll: 1 5401}, 5402 _nestedScroll = function _nestedScroll(_ref5) { 5403 var event = _ref5.event, 5404 target = _ref5.target, 5405 axis = _ref5.axis; 5406 5407 var node = (event.changedTouches ? event.changedTouches[0] : event).target, 5408 cache = node._gsap || gsap.core.getCache(node), 5409 time = _getTime(), 5410 cs; 5411 5412 if (!cache._isScrollT || time - cache._isScrollT > 2000) { 5413 // cache for 2 seconds to improve performance. 5414 while (node && node !== _body && (node.scrollHeight <= node.clientHeight && node.scrollWidth <= node.clientWidth || !(_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]))) { 5415 node = node.parentNode; 5416 } 5417 5418 cache._isScroll = node && node !== target && !_isViewport(node) && (_overflow[(cs = _getComputedStyle(node)).overflowY] || _overflow[cs.overflowX]); 5419 cache._isScrollT = time; 5420 } 5421 5422 if (cache._isScroll || axis === "x") { 5423 event.stopPropagation(); 5424 event._gsapAllow = true; 5425 } 5426}, 5427 // capture events on scrollable elements INSIDE the <body> and allow those by calling stopPropagation() when we find a scrollable ancestor 5428_inputObserver = function _inputObserver(target, type, inputs, nested) { 5429 return _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.create({ 5430 target: target, 5431 capture: true, 5432 debounce: false, 5433 lockAxis: true, 5434 type: type, 5435 onWheel: nested = nested && _nestedScroll, 5436 onPress: nested, 5437 onDrag: nested, 5438 onScroll: nested, 5439 onEnable: function onEnable() { 5440 return inputs && _addListener(_doc, _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.eventTypes[0], _captureInputs, false, true); 5441 }, 5442 onDisable: function onDisable() { 5443 return _removeListener(_doc, _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.eventTypes[0], _captureInputs, true); 5444 } 5445 }); 5446}, 5447 _inputExp = /(input|label|select|textarea)/i, 5448 _inputIsFocused, 5449 _captureInputs = function _captureInputs(e) { 5450 var isInput = _inputExp.test(e.target.tagName); 5451 5452 if (isInput || _inputIsFocused) { 5453 e._gsapAllow = true; 5454 _inputIsFocused = isInput; 5455 } 5456}, 5457 _getScrollNormalizer = function _getScrollNormalizer(vars) { 5458 _isObject(vars) || (vars = {}); 5459 vars.preventDefault = vars.isNormalizer = vars.allowClicks = true; 5460 vars.type || (vars.type = "wheel,touch"); 5461 vars.debounce = !!vars.debounce; 5462 vars.id = vars.id || "normalizer"; 5463 5464 var _vars2 = vars, 5465 normalizeScrollX = _vars2.normalizeScrollX, 5466 momentum = _vars2.momentum, 5467 allowNestedScroll = _vars2.allowNestedScroll, 5468 onRelease = _vars2.onRelease, 5469 self, 5470 maxY, 5471 target = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.target) || _docEl, 5472 smoother = gsap.core.globals().ScrollSmoother, 5473 smootherInstance = smoother && smoother.get(), 5474 content = _fixIOSBug && (vars.content && (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getTarget)(vars.content) || smootherInstance && vars.content !== false && !smootherInstance.smooth() && smootherInstance.content()), 5475 scrollFuncY = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical), 5476 scrollFuncX = (0,_Observer_js__WEBPACK_IMPORTED_MODULE_0__._getScrollFunc)(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal), 5477 scale = 1, 5478 initialScale = (_Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer.isTouch && _win.visualViewport ? _win.visualViewport.scale * _win.visualViewport.width : _win.outerWidth) / _win.innerWidth, 5479 wheelRefresh = 0, 5480 resolveMomentumDuration = _isFunction(momentum) ? function () { 5481 return momentum(self); 5482 } : function () { 5483 return momentum || 2.8; 5484 }, 5485 lastRefreshID, 5486 skipTouchMove, 5487 inputObserver = _inputObserver(target, vars.type, true, allowNestedScroll), 5488 resumeTouchMove = function resumeTouchMove() { 5489 return skipTouchMove = false; 5490 }, 5491 scrollClampX = _passThrough, 5492 scrollClampY = _passThrough, 5493 updateClamps = function updateClamps() { 5494 maxY = _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical); 5495 scrollClampY = _clamp(_fixIOSBug ? 1 : 0, maxY); 5496 normalizeScrollX && (scrollClampX = _clamp(0, _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal))); 5497 lastRefreshID = _refreshID; 5498 }, 5499 removeContentOffset = function removeContentOffset() { 5500 content._gsap.y = _round(parseFloat(content._gsap.y) + scrollFuncY.offset) + "px"; 5501 content.style.transform = "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, " + parseFloat(content._gsap.y) + ", 0, 1)"; 5502 scrollFuncY.offset = scrollFuncY.cacheID = 0; 5503 }, 5504 ignoreDrag = function ignoreDrag() { 5505 if (skipTouchMove) { 5506 requestAnimationFrame(resumeTouchMove); 5507 5508 var offset = _round(self.deltaY / 2), 5509 scroll = scrollClampY(scrollFuncY.v - offset); 5510 5511 if (content && scroll !== scrollFuncY.v + scrollFuncY.offset) { 5512 scrollFuncY.offset = scroll - scrollFuncY.v; 5513 5514 var y = _round((parseFloat(content && content._gsap.y) || 0) - scrollFuncY.offset); 5515 5516 content.style.transform = "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, " + y + ", 0, 1)"; 5517 content._gsap.y = y + "px"; 5518 scrollFuncY.cacheID = _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache; 5519 5520 _updateAll(); 5521 } 5522 5523 return true; 5524 } 5525 5526 scrollFuncY.offset && removeContentOffset(); 5527 skipTouchMove = true; 5528 }, 5529 tween, 5530 startScrollX, 5531 startScrollY, 5532 onStopDelayedCall, 5533 onResize = function onResize() { 5534 // if the window resizes, like on an iPhone which Apple FORCES the address bar to show/hide even if we event.preventDefault(), it may be scrolling too far now that the address bar is showing, so we must dynamically adjust the momentum tween. 5535 updateClamps(); 5536 5537 if (tween.isActive() && tween.vars.scrollY > maxY) { 5538 scrollFuncY() > maxY ? tween.progress(1) && scrollFuncY(maxY) : tween.resetTo("scrollY", maxY); 5539 } 5540 }; 5541 5542 content && gsap.set(content, { 5543 y: "+=0" 5544 }); // to ensure there's a cache (element._gsap) 5545 5546 vars.ignoreCheck = function (e) { 5547 return _fixIOSBug && e.type === "touchmove" && ignoreDrag(e) || scale > 1.05 && e.type !== "touchstart" || self.isGesturing || e.touches && e.touches.length > 1; 5548 }; 5549 5550 vars.onPress = function () { 5551 skipTouchMove = false; 5552 var prevScale = scale; 5553 scale = _round((_win.visualViewport && _win.visualViewport.scale || 1) / initialScale); 5554 tween.pause(); 5555 prevScale !== scale && _allowNativePanning(target, scale > 1.01 ? true : normalizeScrollX ? false : "x"); 5556 startScrollX = scrollFuncX(); 5557 startScrollY = scrollFuncY(); 5558 updateClamps(); 5559 lastRefreshID = _refreshID; 5560 }; 5561 5562 vars.onRelease = vars.onGestureStart = function (self, wasDragging) { 5563 scrollFuncY.offset && removeContentOffset(); 5564 5565 if (!wasDragging) { 5566 onStopDelayedCall.restart(true); 5567 } else { 5568 _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers.cache++; // make sure we're pulling the non-cached value 5569 // alternate algorithm: durX = Math.min(6, Math.abs(self.velocityX / 800)), dur = Math.max(durX, Math.min(6, Math.abs(self.velocityY / 800))); dur = dur * (0.4 + (1 - _power4In(dur / 6)) * 0.6)) * (momentumSpeed || 1) 5570 5571 var dur = resolveMomentumDuration(), 5572 currentScroll, 5573 endScroll; 5574 5575 if (normalizeScrollX) { 5576 currentScroll = scrollFuncX(); 5577 endScroll = currentScroll + dur * 0.05 * -self.velocityX / 0.227; // the constant .227 is from power4(0.05). velocity is inverted because scrolling goes in the opposite direction. 5578 5579 dur *= _clampScrollAndGetDurationMultiplier(scrollFuncX, currentScroll, endScroll, _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._horizontal)); 5580 tween.vars.scrollX = scrollClampX(endScroll); 5581 } 5582 5583 currentScroll = scrollFuncY(); 5584 endScroll = currentScroll + dur * 0.05 * -self.velocityY / 0.227; // the constant .227 is from power4(0.05) 5585 5586 dur *= _clampScrollAndGetDurationMultiplier(scrollFuncY, currentScroll, endScroll, _maxScroll(target, _Observer_js__WEBPACK_IMPORTED_MODULE_0__._vertical)); 5587 tween.vars.scrollY = scrollClampY(endScroll); 5588 tween.invalidate().duration(dur).play(0.01); 5589 5590 if (_fixIOSBug && tween.vars.scrollY >= maxY || currentScroll >= maxY - 1) { 5591 // iOS bug: it'll show the address bar but NOT fire the window "resize" event until the animation is done but we must protect against overshoot so we leverage an onUpdate to do so. 5592 gsap.to({}, { 5593 onUpdate: onResize, 5594 duration: dur 5595 }); 5596 } 5597 } 5598 5599 onRelease && onRelease(self); 5600 }; 5601 5602 vars.onWheel = function () { 5603 tween._ts && tween.pause(); 5604 5605 if (_getTime() - wheelRefresh > 1000) { 5606 // after 1 second, refresh the clamps otherwise that'll only happen when ScrollTrigger.refresh() is called or for touch-scrolling. 5607 lastRefreshID = 0; 5608 wheelRefresh = _getTime(); 5609 } 5610 }; 5611 5612 vars.onChange = function (self, dx, dy, xArray, yArray) { 5613 _refreshID !== lastRefreshID && updateClamps(); 5614 dx && normalizeScrollX && scrollFuncX(scrollClampX(xArray[2] === dx ? startScrollX + (self.startX - self.x) : scrollFuncX() + dx - xArray[1])); // for more precision, we track pointer/touch movement from the start, otherwise it'll drift. 5615 5616 if (dy) { 5617 scrollFuncY.offset && removeContentOffset(); 5618 var isTouch = yArray[2] === dy, 5619 y = isTouch ? startScrollY + self.startY - self.y : scrollFuncY() + dy - yArray[1], 5620 yClamped = scrollClampY(y); 5621 isTouch && y !== yClamped && (startScrollY += yClamped - y); 5622 scrollFuncY(yClamped); 5623 } 5624 5625 (dy || dx) && _updateAll(); 5626 }; 5627 5628 vars.onEnable = function () { 5629 _allowNativePanning(target, normalizeScrollX ? false : "x"); 5630 5631 ScrollTrigger.addEventListener("refresh", onResize); 5632 5633 _addListener(_win, "resize", onResize); 5634 5635 if (scrollFuncY.smooth) { 5636 scrollFuncY.target.style.scrollBehavior = "auto"; 5637 scrollFuncY.smooth = scrollFuncX.smooth = false; 5638 } 5639 5640 inputObserver.enable(); 5641 }; 5642 5643 vars.onDisable = function () { 5644 _allowNativePanning(target, true); 5645 5646 _removeListener(_win, "resize", onResize); 5647 5648 ScrollTrigger.removeEventListener("refresh", onResize); 5649 inputObserver.kill(); 5650 }; 5651 5652 vars.lockAxis = vars.lockAxis !== false; 5653 self = new _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer(vars); 5654 self.iOS = _fixIOSBug; // used in the Observer getCachedScroll() function to work around an iOS bug that wreaks havoc with TouchEvent.clientY if we allow scroll to go all the way back to 0. 5655 5656 _fixIOSBug && !scrollFuncY() && scrollFuncY(1); // iOS bug causes event.clientY values to freak out (wildly inaccurate) if the scroll position is exactly 0. 5657 5658 _fixIOSBug && gsap.ticker.add(_passThrough); // prevent the ticker from sleeping 5659 5660 onStopDelayedCall = self._dc; 5661 tween = gsap.to(self, { 5662 ease: "power4", 5663 paused: true, 5664 scrollX: normalizeScrollX ? "+=0.1" : "+=0", 5665 scrollY: "+=0.1", 5666 modifiers: { 5667 scrollY: _interruptionTracker(scrollFuncY, scrollFuncY(), function () { 5668 return tween.pause(); 5669 }) 5670 }, 5671 onUpdate: _updateAll, 5672 onComplete: onStopDelayedCall.vars.onComplete 5673 }); // we need the modifier to sense if the scroll position is altered outside of the momentum tween (like with a scrollTo tween) so we can pause() it to prevent conflicts. 5674 5675 return self; 5676}; 5677 5678ScrollTrigger.sort = function (func) { 5679 return _triggers.sort(func || function (a, b) { 5680 return (a.vars.refreshPriority || 0) * -1e6 + a.start - (b.start + (b.vars.refreshPriority || 0) * -1e6); 5681 }); 5682}; 5683 5684ScrollTrigger.observe = function (vars) { 5685 return new _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer(vars); 5686}; 5687 5688ScrollTrigger.normalizeScroll = function (vars) { 5689 if (typeof vars === "undefined") { 5690 return _normalizer; 5691 } 5692 5693 if (vars === true && _normalizer) { 5694 return _normalizer.enable(); 5695 } 5696 5697 if (vars === false) { 5698 return _normalizer && _normalizer.kill(); 5699 } 5700 5701 var normalizer = vars instanceof _Observer_js__WEBPACK_IMPORTED_MODULE_0__.Observer ? vars : _getScrollNormalizer(vars); 5702 _normalizer && _normalizer.target === normalizer.target && _normalizer.kill(); 5703 _isViewport(normalizer.target) && (_normalizer = normalizer); 5704 return normalizer; 5705}; 5706 5707ScrollTrigger.core = { 5708 // smaller file size way to leverage in ScrollSmoother and Observer 5709 _getVelocityProp: _Observer_js__WEBPACK_IMPORTED_MODULE_0__._getVelocityProp, 5710 _inputObserver: _inputObserver, 5711 _scrollers: _Observer_js__WEBPACK_IMPORTED_MODULE_0__._scrollers, 5712 _proxies: _Observer_js__WEBPACK_IMPORTED_MODULE_0__._proxies, 5713 bridge: { 5714 // when normalizeScroll sets the scroll position (ss = setScroll) 5715 ss: function ss() { 5716 _lastScrollTime || _dispatch("scrollStart"); 5717 _lastScrollTime = _getTime(); 5718 }, 5719 // a way to get the _refreshing value in Observer 5720 ref: function ref() { 5721 return _refreshing; 5722 } 5723 } 5724}; 5725_getGSAP() && gsap.registerPlugin(ScrollTrigger); 5726 5727 5728/***/ }), 5729
vendor: 174,106 bytes, lines 5730-10271
5730/***/ "./node_modules/gsap/gsap-core.js": 5731/*!****************************************!*\ 5732 !*** ./node_modules/gsap/gsap-core.js ***! 5733 \****************************************/ 5734/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 5735 5736__webpack_require__.r(__webpack_exports__); 5737/* harmony export */ __webpack_require__.d(__webpack_exports__, { 5738/* harmony export */ Animation: function() { return /* binding */ Animation; }, 5739/* harmony export */ Back: function() { return /* binding */ Back; }, 5740/* harmony export */ Bounce: function() { return /* binding */ Bounce; }, 5741/* harmony export */ Circ: function() { return /* binding */ Circ; }, 5742/* harmony export */ Cubic: function() { return /* binding */ Cubic; }, 5743/* harmony export */ Elastic: function() { return /* binding */ Elastic; }, 5744/* harmony export */ Expo: function() { return /* binding */ Expo; }, 5745/* harmony export */ GSCache: function() { return /* binding */ GSCache; }, 5746/* harmony export */ Linear: function() { return /* binding */ Linear; }, 5747/* harmony export */ Power0: function() { return /* binding */ Power0; }, 5748/* harmony export */ Power1: function() { return /* binding */ Power1; }, 5749/* harmony export */ Power2: function() { return /* binding */ Power2; }, 5750/* harmony export */ Power3: function() { return /* binding */ Power3; }, 5751/* harmony export */ Power4: function() { return /* binding */ Power4; }, 5752/* harmony export */ PropTween: function() { return /* binding */ PropTween; }, 5753/* harmony export */ Quad: function() { return /* binding */ Quad; }, 5754/* harmony export */ Quart: function() { return /* binding */ Quart; }, 5755/* harmony export */ Quint: function() { return /* binding */ Quint; }, 5756/* harmony export */ Sine: function() { return /* binding */ Sine; }, 5757/* harmony export */ SteppedEase: function() { return /* binding */ SteppedEase; }, 5758/* harmony export */ Strong: function() { return /* binding */ Strong; }, 5759/* harmony export */ Timeline: function() { return /* binding */ Timeline; }, 5760/* harmony export */ TimelineLite: function() { return /* binding */ Timeline; }, 5761/* harmony export */ TimelineMax: function() { return /* binding */ Timeline; }, 5762/* harmony export */ Tween: function() { return /* binding */ Tween; }, 5763/* harmony export */ TweenLite: function() { return /* binding */ Tween; }, 5764/* harmony export */ TweenMax: function() { return /* binding */ Tween; }, 5765/* harmony export */ _checkPlugin: function() { return /* binding */ _checkPlugin; }, 5766/* harmony export */ _colorExp: function() { return /* binding */ _colorExp; }, 5767/* harmony export */ _colorStringFilter: function() { return /* binding */ _colorStringFilter; }, 5768/* harmony export */ _config: function() { return /* binding */ _config; }, 5769/* harmony export */ _forEachName: function() { return /* binding */ _forEachName; }, 5770/* harmony export */ _getCache: function() { return /* binding */ _getCache; }, 5771/* harmony export */ _getProperty: function() { return /* binding */ _getProperty; }, 5772/* harmony export */ _getSetter: function() { return /* binding */ _getSetter; }, 5773/* harmony export */ _isString: function() { return /* binding */ _isString; }, 5774/* harmony export */ _isUndefined: function() { return /* binding */ _isUndefined; }, 5775/* harmony export */ _missingPlugin: function() { return /* binding */ _missingPlugin; }, 5776/* harmony export */ _numExp: function() { return /* binding */ _numExp; }, 5777/* harmony export */ _numWithUnitExp: function() { return /* binding */ _numWithUnitExp; }, 5778/* harmony export */ _parseRelative: function() { return /* binding */ _parseRelative; }, 5779/* harmony export */ _plugins: function() { return /* binding */ _plugins; }, 5780/* harmony export */ _relExp: function() { return /* binding */ _relExp; }, 5781/* harmony export */ _removeLinkedListItem: function() { return /* binding */ _removeLinkedListItem; }, 5782/* harmony export */ _renderComplexString: function() { return /* binding */ _renderComplexString; }, 5783/* harmony export */ _replaceRandom: function() { return /* binding */ _replaceRandom; }, 5784/* harmony export */ _round: function() { return /* binding */ _round; }, 5785/* harmony export */ _roundModifier: function() { return /* binding */ _roundModifier; }, 5786/* harmony export */ _setDefaults: function() { return /* binding */ _setDefaults; }, 5787/* harmony export */ _sortPropTweensByPriority: function() { return /* binding */ _sortPropTweensByPriority; }, 5788/* harmony export */ _ticker: function() { return /* binding */ _ticker; }, 5789/* harmony export */ clamp: function() { return /* binding */ clamp; }, 5790/* harmony export */ "default": function() { return /* binding */ gsap; }, 5791/* harmony export */ distribute: function() { return /* binding */ distribute; }, 5792/* harmony export */ getUnit: function() { return /* binding */ getUnit; }, 5793/* harmony export */ gsap: function() { return /* binding */ gsap; }, 5794/* harmony export */ interpolate: function() { return /* binding */ interpolate; }, 5795/* harmony export */ mapRange: function() { return /* binding */ mapRange; }, 5796/* harmony export */ normalize: function() { return /* binding */ normalize; }, 5797/* harmony export */ pipe: function() { return /* binding */ pipe; }, 5798/* harmony export */ random: function() { return /* binding */ random; }, 5799/* harmony export */ selector: function() { return /* binding */ selector; }, 5800/* harmony export */ shuffle: function() { return /* binding */ shuffle; }, 5801/* harmony export */ snap: function() { return /* binding */ snap; }, 5802/* harmony export */ splitColor: function() { return /* binding */ splitColor; }, 5803/* harmony export */ toArray: function() { return /* binding */ toArray; }, 5804/* harmony export */ unitize: function() { return /* binding */ unitize; }, 5805/* harmony export */ wrap: function() { return /* binding */ wrap; }, 5806/* harmony export */ wrapYoyo: function() { return /* binding */ wrapYoyo; } 5807/* harmony export */ }); 5808function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 5809 5810function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } 5811 5812/*! 5813 * GSAP 3.12.2 5814 * https://greensock.com 5815 * 5816 * @license Copyright 2008-2023, GreenSock. All rights reserved. 5817 * Subject to the terms at https://greensock.com/standard-license or for 5818 * Club GreenSock members, the agreement issued with that membership. 5819 * @author: Jack Doyle, [email protected] 5820*/ 5821 5822/* eslint-disable */ 5823var _config = { 5824 autoSleep: 120, 5825 force3D: "auto", 5826 nullTargetWarn: 1, 5827 units: { 5828 lineHeight: "" 5829 } 5830}, 5831 _defaults = { 5832 duration: .5, 5833 overwrite: false, 5834 delay: 0 5835}, 5836 _suppressOverwrites, 5837 _reverting, 5838 _context, 5839 _bigNum = 1e8, 5840 _tinyNum = 1 / _bigNum, 5841 _2PI = Math.PI * 2, 5842 _HALF_PI = _2PI / 4, 5843 _gsID = 0, 5844 _sqrt = Math.sqrt, 5845 _cos = Math.cos, 5846 _sin = Math.sin, 5847 _isString = function _isString(value) { 5848 return typeof value === "string"; 5849}, 5850 _isFunction = function _isFunction(value) { 5851 return typeof value === "function"; 5852}, 5853 _isNumber = function _isNumber(value) { 5854 return typeof value === "number"; 5855}, 5856 _isUndefined = function _isUndefined(value) { 5857 return typeof value === "undefined"; 5858}, 5859 _isObject = function _isObject(value) { 5860 return typeof value === "object"; 5861}, 5862 _isNotFalse = function _isNotFalse(value) { 5863 return value !== false; 5864}, 5865 _windowExists = function _windowExists() { 5866 return typeof window !== "undefined"; 5867}, 5868 _isFuncOrString = function _isFuncOrString(value) { 5869 return _isFunction(value) || _isString(value); 5870}, 5871 _isTypedArray = typeof ArrayBuffer === "function" && ArrayBuffer.isView || function () {}, 5872 // note: IE10 has ArrayBuffer, but NOT ArrayBuffer.isView(). 5873_isArray = Array.isArray, 5874 _strictNumExp = /(?:-?\.?\d|\.)+/gi, 5875 //only numbers (including negatives and decimals) but NOT relative values. 5876_numExp = /[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g, 5877 //finds any numbers, including ones that start with += or -=, negative numbers, and ones in scientific notation like 1e-8. 5878_numWithUnitExp = /[-+=.]*\d+[.e-]*\d*[a-z%]*/g, 5879 _complexStringNumExp = /[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi, 5880 //duplicate so that while we're looping through matches from exec(), it doesn't contaminate the lastIndex of _numExp which we use to search for colors too. 5881_relExp = /[+-]=-?[.\d]+/, 5882 _delimitedValueExp = /[^,'"\[\]\s]+/gi, 5883 // previously /[#\-+.]*\b[a-z\d\-=+%.]+/gi but didn't catch special characters. 5884_unitExp = /^[+\-=e\s\d]*\d+[.\d]*([a-z]*|%)\s*$/i, 5885 _globalTimeline, 5886 _win, 5887 _coreInitted, 5888 _doc, 5889 _globals = {}, 5890 _installScope = {}, 5891 _coreReady, 5892 _install = function _install(scope) { 5893 return (_installScope = _merge(scope, _globals)) && gsap; 5894}, 5895 _missingPlugin = function _missingPlugin(property, value) { 5896 return console.warn("Invalid property", property, "set to", value, "Missing plugin? gsap.registerPlugin()"); 5897}, 5898 _warn = function _warn(message, suppress) { 5899 return !suppress && console.warn(message); 5900}, 5901 _addGlobal = function _addGlobal(name, obj) { 5902 return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals; 5903}, 5904 _emptyFunc = function _emptyFunc() { 5905 return 0; 5906}, 5907 _startAtRevertConfig = { 5908 suppressEvents: true, 5909 isStart: true, 5910 kill: false 5911}, 5912 _revertConfigNoKill = { 5913 suppressEvents: true, 5914 kill: false 5915}, 5916 _revertConfig = { 5917 suppressEvents: true 5918}, 5919 _reservedProps = {}, 5920 _lazyTweens = [], 5921 _lazyLookup = {}, 5922 _lastRenderedFrame, 5923 _plugins = {}, 5924 _effects = {}, 5925 _nextGCFrame = 30, 5926 _harnessPlugins = [], 5927 _callbackNames = "", 5928 _harness = function _harness(targets) { 5929 var target = targets[0], 5930 harnessPlugin, 5931 i; 5932 _isObject(target) || _isFunction(target) || (targets = [targets]); 5933 5934 if (!(harnessPlugin = (target._gsap || {}).harness)) { 5935 // find the first target with a harness. We assume targets passed into an animation will be of similar type, meaning the same kind of harness can be used for them all (performance optimization) 5936 i = _harnessPlugins.length; 5937 5938 while (i-- && !_harnessPlugins[i].targetTest(target)) {} 5939 5940 harnessPlugin = _harnessPlugins[i]; 5941 } 5942 5943 i = targets.length; 5944 5945 while (i--) { 5946 targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1); 5947 } 5948 5949 return targets; 5950}, 5951 _getCache = function _getCache(target) { 5952 return target._gsap || _harness(toArray(target))[0]._gsap; 5953}, 5954 _getProperty = function _getProperty(target, property, v) { 5955 return (v = target[property]) && _isFunction(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v; 5956}, 5957 _forEachName = function _forEachName(names, func) { 5958 return (names = names.split(",")).forEach(func) || names; 5959}, 5960 //split a comma-delimited list of names into an array, then run a forEach() function and return the split array (this is just a way to consolidate/shorten some code). 5961_round = function _round(value) { 5962 return Math.round(value * 100000) / 100000 || 0; 5963}, 5964 _roundPrecise = function _roundPrecise(value) { 5965 return Math.round(value * 10000000) / 10000000 || 0; 5966}, 5967 // increased precision mostly for timing values. 5968_parseRelative = function _parseRelative(start, value) { 5969 var operator = value.charAt(0), 5970 end = parseFloat(value.substr(2)); 5971 start = parseFloat(start); 5972 return operator === "+" ? start + end : operator === "-" ? start - end : operator === "*" ? start * end : start / end; 5973}, 5974 _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) { 5975 //searches one array to find matches for any of the items in the toFind array. As soon as one is found, it returns true. It does NOT return all the matches; it's simply a boolean search. 5976 var l = toFind.length, 5977 i = 0; 5978 5979 for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {} 5980 5981 return i < l; 5982}, 5983 _lazyRender = function _lazyRender() { 5984 var l = _lazyTweens.length, 5985 a = _lazyTweens.slice(0), 5986 i, 5987 tween; 5988 5989 _lazyLookup = {}; 5990 _lazyTweens.length = 0; 5991 5992 for (i = 0; i < l; i++) { 5993 tween = a[i]; 5994 tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0); 5995 } 5996}, 5997 _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) { 5998 _lazyTweens.length && !_reverting && _lazyRender(); 5999 animation.render(time, suppressEvents, force || _reverting && time < 0 && (animation._initted || animation._startAt)); 6000 _lazyTweens.length && !_reverting && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when someone calls seek() or time() or progress(), they expect an immediate render. 6001}, 6002 _numericIfPossible = function _numericIfPossible(value) { 6003 var n = parseFloat(value); 6004 return (n || n === 0) && (value + "").match(_delimitedValueExp).length < 2 ? n : _isString(value) ? value.trim() : value; 6005}, 6006 _passThrough = function _passThrough(p) { 6007 return p; 6008}, 6009 _setDefaults = function _setDefaults(obj, defaults) { 6010 for (var p in defaults) { 6011 p in obj || (obj[p] = defaults[p]); 6012 } 6013 6014 return obj; 6015}, 6016 _setKeyframeDefaults = function _setKeyframeDefaults(excludeDuration) { 6017 return function (obj, defaults) { 6018 for (var p in defaults) { 6019 p in obj || p === "duration" && excludeDuration || p === "ease" || (obj[p] = defaults[p]); 6020 } 6021 }; 6022}, 6023 _merge = function _merge(base, toMerge) { 6024 for (var p in toMerge) { 6025 base[p] = toMerge[p]; 6026 } 6027 6028 return base; 6029}, 6030 _mergeDeep = function _mergeDeep(base, toMerge) { 6031 for (var p in toMerge) { 6032 p !== "__proto__" && p !== "constructor" && p !== "prototype" && (base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]); 6033 } 6034 6035 return base; 6036}, 6037 _copyExcluding = function _copyExcluding(obj, excluding) { 6038 var copy = {}, 6039 p; 6040 6041 for (p in obj) { 6042 p in excluding || (copy[p] = obj[p]); 6043 } 6044 6045 return copy; 6046}, 6047 _inheritDefaults = function _inheritDefaults(vars) { 6048 var parent = vars.parent || _globalTimeline, 6049 func = vars.keyframes ? _setKeyframeDefaults(_isArray(vars.keyframes)) : _setDefaults; 6050 6051 if (_isNotFalse(vars.inherit)) { 6052 while (parent) { 6053 func(vars, parent.vars.defaults); 6054 parent = parent.parent || parent._dp; 6055 } 6056 } 6057 6058 return vars; 6059}, 6060 _arraysMatch = function _arraysMatch(a1, a2) { 6061 var i = a1.length, 6062 match = i === a2.length; 6063 6064 while (match && i-- && a1[i] === a2[i]) {} 6065 6066 return i < 0; 6067}, 6068 _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) { 6069 if (firstProp === void 0) { 6070 firstProp = "_first"; 6071 } 6072 6073 if (lastProp === void 0) { 6074 lastProp = "_last"; 6075 } 6076 6077 var prev = parent[lastProp], 6078 t; 6079 6080 if (sortBy) { 6081 t = child[sortBy]; 6082 6083 while (prev && prev[sortBy] > t) { 6084 prev = prev._prev; 6085 } 6086 } 6087 6088 if (prev) { 6089 child._next = prev._next; 6090 prev._next = child; 6091 } else { 6092 child._next = parent[firstProp]; 6093 parent[firstProp] = child; 6094 } 6095 6096 if (child._next) { 6097 child._next._prev = child; 6098 } else { 6099 parent[lastProp] = child; 6100 } 6101 6102 child._prev = prev; 6103 child.parent = child._dp = parent; 6104 return child; 6105}, 6106 _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) { 6107 if (firstProp === void 0) { 6108 firstProp = "_first"; 6109 } 6110 6111 if (lastProp === void 0) { 6112 lastProp = "_last"; 6113 } 6114 6115 var prev = child._prev, 6116 next = child._next; 6117 6118 if (prev) { 6119 prev._next = next; 6120 } else if (parent[firstProp] === child) { 6121 parent[firstProp] = next; 6122 } 6123 6124 if (next) { 6125 next._prev = prev; 6126 } else if (parent[lastProp] === child) { 6127 parent[lastProp] = prev; 6128 } 6129 6130 child._next = child._prev = child.parent = null; // don't delete the _dp just so we can revert if necessary. But parent should be null to indicate the item isn't in a linked list. 6131}, 6132 _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) { 6133 child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove && child.parent.remove(child); 6134 child._act = 0; 6135}, 6136 _uncache = function _uncache(animation, child) { 6137 if (animation && (!child || child._end > animation._dur || child._start < 0)) { 6138 // performance optimization: if a child animation is passed in we should only uncache if that child EXTENDS the animation (its end time is beyond the end) 6139 var a = animation; 6140 6141 while (a) { 6142 a._dirty = 1; 6143 a = a.parent; 6144 } 6145 } 6146 6147 return animation; 6148}, 6149 _recacheAncestors = function _recacheAncestors(animation) { 6150 var parent = animation.parent; 6151 6152 while (parent && parent.parent) { 6153 //sometimes we must force a re-sort of all children and update the duration/totalDuration of all ancestor timelines immediately in case, for example, in the middle of a render loop, one tween alters another tween's timeScale which shoves its startTime before 0, forcing the parent timeline to shift around and shiftChildren() which could affect that next tween's render (startTime). Doesn't matter for the root timeline though. 6154 parent._dirty = 1; 6155 parent.totalDuration(); 6156 parent = parent.parent; 6157 } 6158 6159 return animation; 6160}, 6161 _rewindStartAt = function _rewindStartAt(tween, totalTime, suppressEvents, force) { 6162 return tween._startAt && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween.vars.immediateRender && !tween.vars.autoRevert || tween._startAt.render(totalTime, true, force)); 6163}, 6164 _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) { 6165 return !animation || animation._ts && _hasNoPausedAncestors(animation.parent); 6166}, 6167 _elapsedCycleDuration = function _elapsedCycleDuration(animation) { 6168 return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0; 6169}, 6170 // feed in the totalTime and cycleDuration and it'll return the cycle (iteration minus 1) and if the playhead is exactly at the very END, it will NOT bump up to the next cycle. 6171_animationCycle = function _animationCycle(tTime, cycleDuration) { 6172 var whole = Math.floor(tTime /= cycleDuration); 6173 return tTime && whole === tTime ? whole - 1 : whole; 6174}, 6175 _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) { 6176 return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur); 6177}, 6178 _setEnd = function _setEnd(animation) { 6179 return animation._end = _roundPrecise(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0)); 6180}, 6181 _alignPlayhead = function _alignPlayhead(animation, totalTime) { 6182 // adjusts the animation's _start and _end according to the provided totalTime (only if the parent's smoothChildTiming is true and the animation isn't paused). It doesn't do any rendering or forcing things back into parent timelines, etc. - that's what totalTime() is for. 6183 var parent = animation._dp; 6184 6185 if (parent && parent.smoothChildTiming && animation._ts) { 6186 animation._start = _roundPrecise(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts)); 6187 6188 _setEnd(animation); 6189 6190 parent._dirty || _uncache(parent, animation); //for performance improvement. If the parent's cache is already dirty, it already took care of marking the ancestors as dirty too, so skip the function call here. 6191 } 6192 6193 return animation; 6194}, 6195 6196/* 6197_totalTimeToTime = (clampedTotalTime, duration, repeat, repeatDelay, yoyo) => { 6198 let cycleDuration = duration + repeatDelay, 6199 time = _round(clampedTotalTime % cycleDuration); 6200 if (time > duration) { 6201 time = duration; 6202 } 6203 return (yoyo && (~~(clampedTotalTime / cycleDuration) & 1)) ? duration - time : time; 6204}, 6205*/ 6206_postAddChecks = function _postAddChecks(timeline, child) { 6207 var t; 6208 6209 if (child._time || !child._dur && child._initted || child._start < timeline._time && (child._dur || !child.add)) { 6210 // in case, for example, the _start is moved on a tween that has already rendered, or if it's being inserted into a timeline BEFORE where the playhead is currently. Imagine it's at its end state, then the startTime is moved WAY later (after the end of this timeline), it should render at its beginning. Special case: if it's a timeline (has .add() method) and no duration, we can skip rendering because the user may be populating it AFTER adding it to a parent timeline (unconventional, but possible, and we wouldn't want it to get removed if the parent's autoRemoveChildren is true). 6211 t = _parentToChildTotalTime(timeline.rawTime(), child); 6212 6213 if (!child._dur || _clamp(0, child.totalDuration(), t) - child._tTime > _tinyNum) { 6214 child.render(t, true); 6215 } 6216 } //if the timeline has already ended but the inserted tween/timeline extends the duration, we should enable this timeline again so that it renders properly. We should also align the playhead with the parent timeline's when appropriate. 6217 6218 6219 if (_uncache(timeline, child)._dp && timeline._initted && timeline._time >= timeline._dur && timeline._ts) { 6220 //in case any of the ancestors had completed but should now be enabled... 6221 if (timeline._dur < timeline.duration()) { 6222 t = timeline; 6223 6224 while (t._dp) { 6225 t.rawTime() >= 0 && t.totalTime(t._tTime); //moves the timeline (shifts its startTime) if necessary, and also enables it. If it's currently zero, though, it may not be scheduled to render until later so there's no need to force it to align with the current playhead position. Only move to catch up with the playhead. 6226 6227 t = t._dp; 6228 } 6229 } 6230 6231 timeline._zTime = -_tinyNum; // helps ensure that the next render() will be forced (crossingStart = true in render()), even if the duration hasn't changed (we're adding a child which would need to get rendered). Definitely an edge case. Note: we MUST do this AFTER the loop above where the totalTime() might trigger a render() because this _addToTimeline() method gets called from the Animation constructor, BEFORE tweens even record their targets, etc. so we wouldn't want things to get triggered in the wrong order. 6232 } 6233}, 6234 _addToTimeline = function _addToTimeline(timeline, child, position, skipChecks) { 6235 child.parent && _removeFromParent(child); 6236 child._start = _roundPrecise((_isNumber(position) ? position : position || timeline !== _globalTimeline ? _parsePosition(timeline, position, child) : timeline._time) + child._delay); 6237 child._end = _roundPrecise(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0)); 6238 6239 _addLinkedListItem(timeline, child, "_first", "_last", timeline._sort ? "_start" : 0); 6240 6241 _isFromOrFromStart(child) || (timeline._recent = child); 6242 skipChecks || _postAddChecks(timeline, child); 6243 timeline._ts < 0 && _alignPlayhead(timeline, timeline._tTime); // if the timeline is reversed and the new child makes it longer, we may need to adjust the parent's _start (push it back) 6244 6245 return timeline; 6246}, 6247 _scrollTrigger = function _scrollTrigger(animation, trigger) { 6248 return (_globals.ScrollTrigger || _missingPlugin("scrollTrigger", trigger)) && _globals.ScrollTrigger.create(trigger, animation); 6249}, 6250 _attemptInitTween = function _attemptInitTween(tween, time, force, suppressEvents, tTime) { 6251 _initTween(tween, time, tTime); 6252 6253 if (!tween._initted) { 6254 return 1; 6255 } 6256 6257 if (!force && tween._pt && !_reverting && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) { 6258 _lazyTweens.push(tween); 6259 6260 tween._lazy = [tTime, suppressEvents]; 6261 return 1; 6262 } 6263}, 6264 _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart(_ref) { 6265 var parent = _ref.parent; 6266 return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart(parent)); 6267}, 6268 // check parent's _lock because when a timeline repeats/yoyos and does its artificial wrapping, we shouldn't force the ratio back to 0 6269_isFromOrFromStart = function _isFromOrFromStart(_ref2) { 6270 var data = _ref2.data; 6271 return data === "isFromStart" || data === "isStart"; 6272}, 6273 _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) { 6274 var prevRatio = tween.ratio, 6275 ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1, 6276 // if the tween or its parent is reversed and the totalTime is 0, we should go to a ratio of 0. Edge case: if a from() or fromTo() stagger tween is placed later in a timeline, the "startAt" zero-duration tween could initially render at a time when the parent timeline's playhead is technically BEFORE where this tween is, so make sure that any "from" and "fromTo" startAt tweens are rendered the first time at a ratio of 1. 6277 repeatDelay = tween._rDelay, 6278 tTime = 0, 6279 pt, 6280 iteration, 6281 prevIteration; 6282 6283 if (repeatDelay && tween._repeat) { 6284 // in case there's a zero-duration tween that has a repeat with a repeatDelay 6285 tTime = _clamp(0, tween._tDur, totalTime); 6286 iteration = _animationCycle(tTime, repeatDelay); 6287 tween._yoyo && iteration & 1 && (ratio = 1 - ratio); 6288 6289 if (iteration !== _animationCycle(tween._tTime, repeatDelay)) { 6290 // if iteration changed 6291 prevRatio = 1 - ratio; 6292 tween.vars.repeatRefresh && tween._initted && tween.invalidate(); 6293 } 6294 } 6295 6296 if (ratio !== prevRatio || _reverting || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) { 6297 if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents, tTime)) { 6298 // if we render the very beginning (time == 0) of a fromTo(), we must force the render (normal tweens wouldn't need to render at a time of 0 when the prevTime was also 0). This is also mandatory to make sure overwriting kicks in immediately. 6299 return; 6300 } 6301 6302 prevIteration = tween._zTime; 6303 tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0); // when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration tween, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. 6304 6305 suppressEvents || (suppressEvents = totalTime && !prevIteration); // if it was rendered previously at exactly 0 (_zTime) and now the playhead is moving away, DON'T fire callbacks otherwise they'll seem like duplicates. 6306 6307 tween.ratio = ratio; 6308 tween._from && (ratio = 1 - ratio); 6309 tween._time = 0; 6310 tween._tTime = tTime; 6311 pt = tween._pt; 6312 6313 while (pt) { 6314 pt.r(ratio, pt.d); 6315 pt = pt._next; 6316 } 6317 6318 totalTime < 0 && _rewindStartAt(tween, totalTime, suppressEvents, true); 6319 tween._onUpdate && !suppressEvents && _callback(tween, "onUpdate"); 6320 tTime && tween._repeat && !suppressEvents && tween.parent && _callback(tween, "onRepeat"); 6321 6322 if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) { 6323 ratio && _removeFromParent(tween, 1); 6324 6325 if (!suppressEvents && !_reverting) { 6326 _callback(tween, ratio ? "onComplete" : "onReverseComplete", true); 6327 6328 tween._prom && tween._prom(); 6329 } 6330 } 6331 } else if (!tween._zTime) { 6332 tween._zTime = totalTime; 6333 } 6334}, 6335 _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) { 6336 var child; 6337 6338 if (time > prevTime) { 6339 child = animation._first; 6340 6341 while (child && child._start <= time) { 6342 if (child.data === "isPause" && child._start > prevTime) { 6343 return child; 6344 } 6345 6346 child = child._next; 6347 } 6348 } else { 6349 child = animation._last; 6350 6351 while (child && child._start >= time) { 6352 if (child.data === "isPause" && child._start < prevTime) { 6353 return child; 6354 } 6355 6356 child = child._prev; 6357 } 6358 } 6359}, 6360 _setDuration = function _setDuration(animation, duration, skipUncache, leavePlayhead) { 6361 var repeat = animation._repeat, 6362 dur = _roundPrecise(duration) || 0, 6363 totalProgress = animation._tTime / animation._tDur; 6364 totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur); 6365 animation._dur = dur; 6366 animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _roundPrecise(dur * (repeat + 1) + animation._rDelay * repeat); 6367 totalProgress > 0 && !leavePlayhead && _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress); 6368 animation.parent && _setEnd(animation); 6369 skipUncache || _uncache(animation.parent, animation); 6370 return animation; 6371}, 6372 _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) { 6373 return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur); 6374}, 6375 _zeroPosition = { 6376 _start: 0, 6377 endTime: _emptyFunc, 6378 totalDuration: _emptyFunc 6379}, 6380 _parsePosition = function _parsePosition(animation, position, percentAnimation) { 6381 var labels = animation.labels, 6382 recent = animation._recent || _zeroPosition, 6383 clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur, 6384 //in case there's a child that infinitely repeats, users almost never intend for the insertion point of a new child to be based on a SUPER long value like that so we clip it and assume the most recently-added child's endTime should be used instead. 6385 i, 6386 offset, 6387 isPercent; 6388 6389 if (_isString(position) && (isNaN(position) || position in labels)) { 6390 //if the string is a number like "1", check to see if there's a label with that name, otherwise interpret it as a number (absolute value). 6391 offset = position.charAt(0); 6392 isPercent = position.substr(-1) === "%"; 6393 i = position.indexOf("="); 6394 6395 if (offset === "<" || offset === ">") { 6396 i >= 0 && (position = position.replace(/=/, "")); 6397 return (offset === "<" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1); 6398 } 6399 6400 if (i < 0) { 6401 position in labels || (labels[position] = clippedDuration); 6402 return labels[position]; 6403 } 6404 6405 offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1)); 6406 6407 if (isPercent && percentAnimation) { 6408 offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration(); 6409 } 6410 6411 return i > 1 ? _parsePosition(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset; 6412 } 6413 6414 return position == null ? clippedDuration : +position; 6415}, 6416 _createTweenType = function _createTweenType(type, params, timeline) { 6417 var isLegacy = _isNumber(params[1]), 6418 varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1), 6419 vars = params[varsIndex], 6420 irVars, 6421 parent; 6422 6423 isLegacy && (vars.duration = params[1]); 6424 vars.parent = timeline; 6425 6426 if (type) { 6427 irVars = vars; 6428 parent = timeline; 6429 6430 while (parent && !("immediateRender" in irVars)) { 6431 // inheritance hasn't happened yet, but someone may have set a default in an ancestor timeline. We could do vars.immediateRender = _isNotFalse(_inheritDefaults(vars).immediateRender) but that'd exact a slight performance penalty because _inheritDefaults() also runs in the Tween constructor. We're paying a small kb price here to gain speed. 6432 irVars = parent.vars.defaults || {}; 6433 parent = _isNotFalse(parent.vars.inherit) && parent.parent; 6434 } 6435 6436 vars.immediateRender = _isNotFalse(irVars.immediateRender); 6437 type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1]; // "from" vars 6438 } 6439 6440 return new Tween(params[0], vars, params[varsIndex + 1]); 6441}, 6442 _conditionalReturn = function _conditionalReturn(value, func) { 6443 return value || value === 0 ? func(value) : func; 6444}, 6445 _clamp = function _clamp(min, max, value) { 6446 return value < min ? min : value > max ? max : value; 6447}, 6448 getUnit = function getUnit(value, v) { 6449 return !_isString(value) || !(v = _unitExp.exec(value)) ? "" : v[1]; 6450}, 6451 // note: protect against padded numbers as strings, like "100.100". That shouldn't return "00" as the unit. If it's numeric, return no unit. 6452clamp = function clamp(min, max, value) { 6453 return _conditionalReturn(value, function (v) { 6454 return _clamp(min, max, v); 6455 }); 6456}, 6457 _slice = [].slice, 6458 _isArrayLike = function _isArrayLike(value, nonEmpty) { 6459 return value && _isObject(value) && "length" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win; 6460}, 6461 _flatten = function _flatten(ar, leaveStrings, accumulator) { 6462 if (accumulator === void 0) { 6463 accumulator = []; 6464 } 6465 6466 return ar.forEach(function (value) { 6467 var _accumulator; 6468 6469 return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value); 6470 }) || accumulator; 6471}, 6472 //takes any value and returns an array. If it's a string (and leaveStrings isn't true), it'll use document.querySelectorAll() and convert that to an array. It'll also accept iterables like jQuery objects. 6473toArray = function toArray(value, scope, leaveStrings) { 6474 return _context && !scope && _context.selector ? _context.selector(value) : _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call((scope || _doc).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : []; 6475}, 6476 selector = function selector(value) { 6477 value = toArray(value)[0] || _warn("Invalid scope") || {}; 6478 return function (v) { 6479 var el = value.current || value.nativeElement || value; 6480 return toArray(v, el.querySelectorAll ? el : el === value ? _warn("Invalid scope") || _doc.createElement("div") : value); 6481 }; 6482}, 6483 shuffle = function shuffle(a) { 6484 return a.sort(function () { 6485 return .5 - Math.random(); 6486 }); 6487}, 6488 // alternative that's a bit faster and more reliably diverse but bigger: for (let j, v, i = a.length; i; j = Math.floor(Math.random() * i), v = a[--i], a[i] = a[j], a[j] = v); return a; 6489//for distributing values across an array. Can accept a number, a function or (most commonly) a function which can contain the following properties: {base, amount, from, ease, grid, axis, length, each}. Returns a function that expects the following parameters: index, target, array. Recognizes the following 6490distribute = function distribute(v) { 6491 if (_isFunction(v)) { 6492 return v; 6493 } 6494 6495 var vars = _isObject(v) ? v : { 6496 each: v 6497 }, 6498 //n:1 is just to indicate v was a number; we leverage that later to set v according to the length we get. If a number is passed in, we treat it like the old stagger value where 0.1, for example, would mean that things would be distributed with 0.1 between each element in the array rather than a total "amount" that's chunked out among them all. 6499 ease = _parseEase(vars.ease), 6500 from = vars.from || 0, 6501 base = parseFloat(vars.base) || 0, 6502 cache = {}, 6503 isDecimal = from > 0 && from < 1, 6504 ratios = isNaN(from) || isDecimal, 6505 axis = vars.axis, 6506 ratioX = from, 6507 ratioY = from; 6508 6509 if (_isString(from)) { 6510 ratioX = ratioY = { 6511 center: .5, 6512 edges: .5, 6513 end: 1 6514 }[from] || 0; 6515 } else if (!isDecimal && ratios) { 6516 ratioX = from[0]; 6517 ratioY = from[1]; 6518 } 6519 6520 return function (i, target, a) { 6521 var l = (a || vars).length, 6522 distances = cache[l], 6523 originX, 6524 originY, 6525 x, 6526 y, 6527 d, 6528 j, 6529 max, 6530 min, 6531 wrapAt; 6532 6533 if (!distances) { 6534 wrapAt = vars.grid === "auto" ? 0 : (vars.grid || [1, _bigNum])[1]; 6535 6536 if (!wrapAt) { 6537 max = -_bigNum; 6538 6539 while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {} 6540 6541 wrapAt--; 6542 } 6543 6544 distances = cache[l] = []; 6545 originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt; 6546 originY = wrapAt === _bigNum ? 0 : ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0; 6547 max = 0; 6548 min = _bigNum; 6549 6550 for (j = 0; j < l; j++) { 6551 x = j % wrapAt - originX; 6552 y = originY - (j / wrapAt | 0); 6553 distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === "y" ? y : x); 6554 d > max && (max = d); 6555 d < min && (min = d); 6556 } 6557 6558 from === "random" && shuffle(distances); 6559 distances.max = max - min; 6560 distances.min = min; 6561 distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === "y" ? l / wrapAt : wrapAt) || 0) * (from === "edges" ? -1 : 1); 6562 distances.b = l < 0 ? base - l : base; 6563 distances.u = getUnit(vars.amount || vars.each) || 0; //unit 6564 6565 ease = ease && l < 0 ? _invertEase(ease) : ease; 6566 } 6567 6568 l = (distances[i] - distances.min) / distances.max || 0; 6569 return _roundPrecise(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u; //round in order to work around floating point errors 6570 }; 6571}, 6572 _roundModifier = function _roundModifier(v) { 6573 //pass in 0.1 get a function that'll round to the nearest tenth, or 5 to round to the closest 5, or 0.001 to the closest 1000th, etc. 6574 var p = Math.pow(10, ((v + "").split(".")[1] || "").length); //to avoid floating point math errors (like 24 * 0.1 == 2.4000000000000004), we chop off at a specific number of decimal places (much faster than toFixed()) 6575 6576 return function (raw) { 6577 var n = _roundPrecise(Math.round(parseFloat(raw) / v) * v * p); 6578 6579 return (n - n % 1) / p + (_isNumber(raw) ? 0 : getUnit(raw)); // n - n % 1 replaces Math.floor() in order to handle negative values properly. For example, Math.floor(-150.00000000000003) is 151! 6580 }; 6581}, 6582 snap = function snap(snapTo, value) { 6583 var isArray = _isArray(snapTo), 6584 radius, 6585 is2D; 6586 6587 if (!isArray && _isObject(snapTo)) { 6588 radius = isArray = snapTo.radius || _bigNum; 6589 6590 if (snapTo.values) { 6591 snapTo = toArray(snapTo.values); 6592 6593 if (is2D = !_isNumber(snapTo[0])) { 6594 radius *= radius; //performance optimization so we don't have to Math.sqrt() in the loop. 6595 } 6596 } else { 6597 snapTo = _roundModifier(snapTo.increment); 6598 } 6599 } 6600 6601 return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) { 6602 is2D = snapTo(raw); 6603 return Math.abs(is2D - raw) <= radius ? is2D : raw; 6604 } : function (raw) { 6605 var x = parseFloat(is2D ? raw.x : raw), 6606 y = parseFloat(is2D ? raw.y : 0), 6607 min = _bigNum, 6608 closest = 0, 6609 i = snapTo.length, 6610 dx, 6611 dy; 6612 6613 while (i--) { 6614 if (is2D) { 6615 dx = snapTo[i].x - x; 6616 dy = snapTo[i].y - y; 6617 dx = dx * dx + dy * dy; 6618 } else { 6619 dx = Math.abs(snapTo[i] - x); 6620 } 6621 6622 if (dx < min) { 6623 min = dx; 6624 closest = i; 6625 } 6626 } 6627 6628 closest = !radius || min <= radius ? snapTo[closest] : raw; 6629 return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw); 6630 }); 6631}, 6632 random = function random(min, max, roundingIncrement, returnFunction) { 6633 return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () { 6634 return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + "").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * .99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction; 6635 }); 6636}, 6637 pipe = function pipe() { 6638 for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) { 6639 functions[_key] = arguments[_key]; 6640 } 6641 6642 return function (value) { 6643 return functions.reduce(function (v, f) { 6644 return f(v); 6645 }, value); 6646 }; 6647}, 6648 unitize = function unitize(func, unit) { 6649 return function (value) { 6650 return func(parseFloat(value)) + (unit || getUnit(value)); 6651 }; 6652}, 6653 normalize = function normalize(min, max, value) { 6654 return mapRange(min, max, 0, 1, value); 6655}, 6656 _wrapArray = function _wrapArray(a, wrapper, value) { 6657 return _conditionalReturn(value, function (index) { 6658 return a[~~wrapper(index)]; 6659 }); 6660}, 6661 wrap = function wrap(min, max, value) { 6662 // NOTE: wrap() CANNOT be an arrow function! A very odd compiling bug causes problems (unrelated to GSAP). 6663 var range = max - min; 6664 return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) { 6665 return (range + (value - min) % range) % range + min; 6666 }); 6667}, 6668 wrapYoyo = function wrapYoyo(min, max, value) { 6669 var range = max - min, 6670 total = range * 2; 6671 return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) { 6672 value = (total + (value - min) % total) % total || 0; 6673 return min + (value > range ? total - value : value); 6674 }); 6675}, 6676 _replaceRandom = function _replaceRandom(value) { 6677 //replaces all occurrences of random(...) in a string with the calculated random value. can be a range like random(-100, 100, 5) or an array like random([0, 100, 500]) 6678 var prev = 0, 6679 s = "", 6680 i, 6681 nums, 6682 end, 6683 isArray; 6684 6685 while (~(i = value.indexOf("random(", prev))) { 6686 end = value.indexOf(")", i); 6687 isArray = value.charAt(i + 7) === "["; 6688 nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp); 6689 s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5); 6690 prev = end + 1; 6691 } 6692 6693 return s + value.substr(prev, value.length - prev); 6694}, 6695 mapRange = function mapRange(inMin, inMax, outMin, outMax, value) { 6696 var inRange = inMax - inMin, 6697 outRange = outMax - outMin; 6698 return _conditionalReturn(value, function (value) { 6699 return outMin + ((value - inMin) / inRange * outRange || 0); 6700 }); 6701}, 6702 interpolate = function interpolate(start, end, progress, mutate) { 6703 var func = isNaN(start + end) ? 0 : function (p) { 6704 return (1 - p) * start + p * end; 6705 }; 6706 6707 if (!func) { 6708 var isString = _isString(start), 6709 master = {}, 6710 p, 6711 i, 6712 interpolators, 6713 l, 6714 il; 6715 6716 progress === true && (mutate = 1) && (progress = null); 6717 6718 if (isString) { 6719 start = { 6720 p: start 6721 }; 6722 end = { 6723 p: end 6724 }; 6725 } else if (_isArray(start) && !_isArray(end)) { 6726 interpolators = []; 6727 l = start.length; 6728 il = l - 2; 6729 6730 for (i = 1; i < l; i++) { 6731 interpolators.push(interpolate(start[i - 1], start[i])); //build the interpolators up front as a performance optimization so that when the function is called many times, it can just reuse them. 6732 } 6733 6734 l--; 6735 6736 func = function func(p) { 6737 p *= l; 6738 var i = Math.min(il, ~~p); 6739 return interpolators[i](p - i); 6740 }; 6741 6742 progress = end; 6743 } else if (!mutate) { 6744 start = _merge(_isArray(start) ? [] : {}, start); 6745 } 6746 6747 if (!interpolators) { 6748 for (p in end) { 6749 _addPropTween.call(master, start, p, "get", end[p]); 6750 } 6751 6752 func = function func(p) { 6753 return _renderPropTweens(p, master) || (isString ? start.p : start); 6754 }; 6755 } 6756 } 6757 6758 return _conditionalReturn(progress, func); 6759}, 6760 _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) { 6761 //used for nextLabel() and previousLabel() 6762 var labels = timeline.labels, 6763 min = _bigNum, 6764 p, 6765 distance, 6766 label; 6767 6768 for (p in labels) { 6769 distance = labels[p] - fromTime; 6770 6771 if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) { 6772 label = p; 6773 min = distance; 6774 } 6775 } 6776 6777 return label; 6778}, 6779 _callback = function _callback(animation, type, executeLazyFirst) { 6780 var v = animation.vars, 6781 callback = v[type], 6782 prevContext = _context, 6783 context = animation._ctx, 6784 params, 6785 scope, 6786 result; 6787 6788 if (!callback) { 6789 return; 6790 } 6791 6792 params = v[type + "Params"]; 6793 scope = v.callbackScope || animation; 6794 executeLazyFirst && _lazyTweens.length && _lazyRender(); //in case rendering caused any tweens to lazy-init, we should render them because typically when a timeline finishes, users expect things to have rendered fully. Imagine an onUpdate on a timeline that reports/checks tweened values. 6795 6796 context && (_context = context); 6797 result = params ? callback.apply(scope, params) : callback.call(scope); 6798 _context = prevContext; 6799 return result; 6800}, 6801 _interrupt = function _interrupt(animation) { 6802 _removeFromParent(animation); 6803 6804 animation.scrollTrigger && animation.scrollTrigger.kill(!!_reverting); 6805 animation.progress() < 1 && _callback(animation, "onInterrupt"); 6806 return animation; 6807}, 6808 _quickTween, 6809 _registerPluginQueue = [], 6810 _createPlugin = function _createPlugin(config) { 6811 if (_windowExists() && config) { 6812 // edge case: some build tools may pass in a null/undefined value 6813 config = !config.name && config["default"] || config; //UMD packaging wraps things oddly, so for example MotionPathHelper becomes {MotionPathHelper:MotionPathHelper, default:MotionPathHelper}. 6814 6815 var name = config.name, 6816 isFunc = _isFunction(config), 6817 Plugin = name && !isFunc && config.init ? function () { 6818 this._props = []; 6819 } : config, 6820 //in case someone passes in an object that's not a plugin, like CustomEase 6821 instanceDefaults = { 6822 init: _emptyFunc, 6823 render: _renderPropTweens, 6824 add: _addPropTween, 6825 kill: _killPropTweensOf, 6826 modifier: _addPluginModifier, 6827 rawVars: 0 6828 }, 6829 statics = { 6830 targetTest: 0, 6831 get: 0, 6832 getSetter: _getSetter, 6833 aliases: {}, 6834 register: 0 6835 }; 6836 6837 _wake(); 6838 6839 if (config !== Plugin) { 6840 if (_plugins[name]) { 6841 return; 6842 } 6843 6844 _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics)); //static methods 6845 6846 6847 _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics))); //instance methods 6848 6849 6850 _plugins[Plugin.prop = name] = Plugin; 6851 6852 if (config.targetTest) { 6853 _harnessPlugins.push(Plugin); 6854 6855 _reservedProps[name] = 1; 6856 } 6857 6858 name = (name === "css" ? "CSS" : name.charAt(0).toUpperCase() + name.substr(1)) + "Plugin"; //for the global name. "motionPath" should become MotionPathPlugin 6859 } 6860 6861 _addGlobal(name, Plugin); 6862 6863 config.register && config.register(gsap, Plugin, PropTween); 6864 } else { 6865 config && _registerPluginQueue.push(config); 6866 } 6867}, 6868 6869/* 6870 * -------------------------------------------------------------------------------------- 6871 * COLORS 6872 * -------------------------------------------------------------------------------------- 6873 */ 6874_255 = 255, 6875 _colorLookup = { 6876 aqua: [0, _255, _255], 6877 lime: [0, _255, 0], 6878 silver: [192, 192, 192], 6879 black: [0, 0, 0], 6880 maroon: [128, 0, 0], 6881 teal: [0, 128, 128], 6882 blue: [0, 0, _255], 6883 navy: [0, 0, 128], 6884 white: [_255, _255, _255], 6885 olive: [128, 128, 0], 6886 yellow: [_255, _255, 0], 6887 orange: [_255, 165, 0], 6888 gray: [128, 128, 128], 6889 purple: [128, 0, 128], 6890 green: [0, 128, 0], 6891 red: [_255, 0, 0], 6892 pink: [_255, 192, 203], 6893 cyan: [0, _255, _255], 6894 transparent: [_255, _255, _255, 0] 6895}, 6896 // possible future idea to replace the hard-coded color name values - put this in the ticker.wake() where we set the _doc: 6897// let ctx = _doc.createElement("canvas").getContext("2d"); 6898// _forEachName("aqua,lime,silver,black,maroon,teal,blue,navy,white,olive,yellow,orange,gray,purple,green,red,pink,cyan", color => {ctx.fillStyle = color; _colorLookup[color] = splitColor(ctx.fillStyle)}); 6899_hue = function _hue(h, m1, m2) { 6900 h += h < 0 ? 1 : h > 1 ? -1 : 0; 6901 return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0; 6902}, 6903 splitColor = function splitColor(v, toHSL, forceAlpha) { 6904 var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0, 6905 r, 6906 g, 6907 b, 6908 h, 6909 s, 6910 l, 6911 max, 6912 min, 6913 d, 6914 wasHSL; 6915 6916 if (!a) { 6917 if (v.substr(-1) === ",") { 6918 //sometimes a trailing comma is included and we should chop it off (typically from a comma-delimited list of values like a textShadow:"2px 2px 2px blue, 5px 5px 5px rgb(255,0,0)" - in this example "blue," has a trailing comma. We could strip it out inside parseComplex() but we'd need to do it to the beginning and ending values plus it wouldn't provide protection from other potential scenarios like if the user passes in a similar value. 6919 v = v.substr(0, v.length - 1); 6920 } 6921 6922 if (_colorLookup[v]) { 6923 a = _colorLookup[v]; 6924 } else if (v.charAt(0) === "#") { 6925 if (v.length < 6) { 6926 //for shorthand like #9F0 or #9F0F (could have alpha) 6927 r = v.charAt(1); 6928 g = v.charAt(2); 6929 b = v.charAt(3); 6930 v = "#" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : ""); 6931 } 6932 6933 if (v.length === 9) { 6934 // hex with alpha, like #fd5e53ff 6935 a = parseInt(v.substr(1, 6), 16); 6936 return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255]; 6937 } 6938 6939 v = parseInt(v.substr(1), 16); 6940 a = [v >> 16, v >> 8 & _255, v & _255]; 6941 } else if (v.substr(0, 3) === "hsl") { 6942 a = wasHSL = v.match(_strictNumExp); 6943 6944 if (!toHSL) { 6945 h = +a[0] % 360 / 360; 6946 s = +a[1] / 100; 6947 l = +a[2] / 100; 6948 g = l <= .5 ? l * (s + 1) : l + s - l * s; 6949 r = l * 2 - g; 6950 a.length > 3 && (a[3] *= 1); //cast as number 6951 6952 a[0] = _hue(h + 1 / 3, r, g); 6953 a[1] = _hue(h, r, g); 6954 a[2] = _hue(h - 1 / 3, r, g); 6955 } else if (~v.indexOf("=")) { 6956 //if relative values are found, just return the raw strings with the relative prefixes in place. 6957 a = v.match(_numExp); 6958 forceAlpha && a.length < 4 && (a[3] = 1); 6959 return a; 6960 } 6961 } else { 6962 a = v.match(_strictNumExp) || _colorLookup.transparent; 6963 } 6964 6965 a = a.map(Number); 6966 } 6967 6968 if (toHSL && !wasHSL) { 6969 r = a[0] / _255; 6970 g = a[1] / _255; 6971 b = a[2] / _255; 6972 max = Math.max(r, g, b); 6973 min = Math.min(r, g, b); 6974 l = (max + min) / 2; 6975 6976 if (max === min) { 6977 h = s = 0; 6978 } else { 6979 d = max - min; 6980 s = l > 0.5 ? d / (2 - max - min) : d / (max + min); 6981 h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4; 6982 h *= 60; 6983 } 6984 6985 a[0] = ~~(h + .5); 6986 a[1] = ~~(s * 100 + .5); 6987 a[2] = ~~(l * 100 + .5); 6988 } 6989 6990 forceAlpha && a.length < 4 && (a[3] = 1); 6991 return a; 6992}, 6993 _colorOrderData = function _colorOrderData(v) { 6994 // strips out the colors from the string, finds all the numeric slots (with units) and returns an array of those. The Array also has a "c" property which is an Array of the index values where the colors belong. This is to help work around issues where there's a mis-matched order of color/numeric data like drop-shadow(#f00 0px 1px 2px) and drop-shadow(0x 1px 2px #f00). This is basically a helper function used in _formatColors() 6995 var values = [], 6996 c = [], 6997 i = -1; 6998 v.split(_colorExp).forEach(function (v) { 6999 var a = v.match(_numWithUnitExp) || []; 7000 values.push.apply(values, a); 7001 c.push(i += a.length + 1); 7002 }); 7003 values.c = c; 7004 return values; 7005}, 7006 _formatColors = function _formatColors(s, toHSL, orderMatchData) { 7007 var result = "", 7008 colors = (s + result).match(_colorExp), 7009 type = toHSL ? "hsla(" : "rgba(", 7010 i = 0, 7011 c, 7012 shell, 7013 d, 7014 l; 7015 7016 if (!colors) { 7017 return s; 7018 } 7019 7020 colors = colors.map(function (color) { 7021 return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + "," + color[1] + "%," + color[2] + "%," + color[3] : color.join(",")) + ")"; 7022 }); 7023 7024 if (orderMatchData) { 7025 d = _colorOrderData(s); 7026 c = orderMatchData.c; 7027 7028 if (c.join(result) !== d.c.join(result)) { 7029 shell = s.replace(_colorExp, "1").split(_numWithUnitExp); 7030 l = shell.length - 1; 7031 7032 for (; i < l; i++) { 7033 result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + "0,0,0,0)" : (d.length ? d : colors.length ? colors : orderMatchData).shift()); 7034 } 7035 } 7036 } 7037 7038 if (!shell) { 7039 shell = s.split(_colorExp); 7040 l = shell.length - 1; 7041 7042 for (; i < l; i++) { 7043 result += shell[i] + colors[i]; 7044 } 7045 } 7046 7047 return result + shell[l]; 7048}, 7049 _colorExp = function () { 7050 var s = "(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3,4}){1,2}\\b", 7051 //we'll dynamically build this Regular Expression to conserve file size. After building it, it will be able to find rgb(), rgba(), # (hexadecimal), and named color values like red, blue, purple, etc., 7052 p; 7053 7054 for (p in _colorLookup) { 7055 s += "|" + p + "\\b"; 7056 } 7057 7058 return new RegExp(s + ")", "gi"); 7059}(), 7060 _hslExp = /hsl[a]?\(/, 7061 _colorStringFilter = function _colorStringFilter(a) { 7062 var combined = a.join(" "), 7063 toHSL; 7064 _colorExp.lastIndex = 0; 7065 7066 if (_colorExp.test(combined)) { 7067 toHSL = _hslExp.test(combined); 7068 a[1] = _formatColors(a[1], toHSL); 7069 a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1])); // make sure the order of numbers/colors match with the END value. 7070 7071 return true; 7072 } 7073}, 7074 7075/* 7076 * -------------------------------------------------------------------------------------- 7077 * TICKER 7078 * -------------------------------------------------------------------------------------- 7079 */ 7080_tickerActive, 7081 _ticker = function () { 7082 var _getTime = Date.now, 7083 _lagThreshold = 500, 7084 _adjustedLag = 33, 7085 _startTime = _getTime(), 7086 _lastUpdate = _startTime, 7087 _gap = 1000 / 240, 7088 _nextTime = _gap, 7089 _listeners = [], 7090 _id, 7091 _req, 7092 _raf, 7093 _self, 7094 _delta, 7095 _i, 7096 _tick = function _tick(v) { 7097 var elapsed = _getTime() - _lastUpdate, 7098 manual = v === true, 7099 overlap, 7100 dispatch, 7101 time, 7102 frame; 7103 7104 elapsed > _lagThreshold && (_startTime += elapsed - _adjustedLag); 7105 _lastUpdate += elapsed; 7106 time = _lastUpdate - _startTime; 7107 overlap = time - _nextTime; 7108 7109 if (overlap > 0 || manual) { 7110 frame = ++_self.frame; 7111 _delta = time - _self.time * 1000; 7112 _self.time = time = time / 1000; 7113 _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap); 7114 dispatch = 1; 7115 } 7116 7117 manual || (_id = _req(_tick)); //make sure the request is made before we dispatch the "tick" event so that timing is maintained. Otherwise, if processing the "tick" requires a bunch of time (like 15ms) and we're using a setTimeout() that's based on 16.7ms, it'd technically take 31.7ms between frames otherwise. 7118 7119 if (dispatch) { 7120 for (_i = 0; _i < _listeners.length; _i++) { 7121 // use _i and check _listeners.length instead of a variable because a listener could get removed during the loop, and if that happens to an element less than the current index, it'd throw things off in the loop. 7122 _listeners[_i](time, _delta, frame, v); 7123 } 7124 } 7125 }; 7126 7127 _self = { 7128 time: 0, 7129 frame: 0, 7130 tick: function tick() { 7131 _tick(true); 7132 }, 7133 deltaRatio: function deltaRatio(fps) { 7134 return _delta / (1000 / (fps || 60)); 7135 }, 7136 wake: function wake() { 7137 if (_coreReady) { 7138 if (!_coreInitted && _windowExists()) { 7139 _win = _coreInitted = window; 7140 _doc = _win.document || {}; 7141 _globals.gsap = gsap; 7142 (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version); 7143 7144 _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {}); 7145 7146 _raf = _win.requestAnimationFrame; 7147 7148 _registerPluginQueue.forEach(_createPlugin); 7149 } 7150 7151 _id && _self.sleep(); 7152 7153 _req = _raf || function (f) { 7154 return setTimeout(f, _nextTime - _self.time * 1000 + 1 | 0); 7155 }; 7156 7157 _tickerActive = 1; 7158 7159 _tick(2); 7160 } 7161 }, 7162 sleep: function sleep() { 7163 (_raf ? _win.cancelAnimationFrame : clearTimeout)(_id); 7164 _tickerActive = 0; 7165 _req = _emptyFunc; 7166 }, 7167 lagSmoothing: function lagSmoothing(threshold, adjustedLag) { 7168 _lagThreshold = threshold || Infinity; // zero should be interpreted as basically unlimited 7169 7170 _adjustedLag = Math.min(adjustedLag || 33, _lagThreshold); 7171 }, 7172 fps: function fps(_fps) { 7173 _gap = 1000 / (_fps || 240); 7174 _nextTime = _self.time * 1000 + _gap; 7175 }, 7176 add: function add(callback, once, prioritize) { 7177 var func = once ? function (t, d, f, v) { 7178 callback(t, d, f, v); 7179 7180 _self.remove(func); 7181 } : callback; 7182 7183 _self.remove(callback); 7184 7185 _listeners[prioritize ? "unshift" : "push"](func); 7186 7187 _wake(); 7188 7189 return func; 7190 }, 7191 remove: function remove(callback, i) { 7192 ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1) && _i >= i && _i--; 7193 }, 7194 _listeners: _listeners 7195 }; 7196 return _self; 7197}(), 7198 _wake = function _wake() { 7199 return !_tickerActive && _ticker.wake(); 7200}, 7201 //also ensures the core classes are initialized. 7202 7203/* 7204* ------------------------------------------------- 7205* EASING 7206* ------------------------------------------------- 7207*/ 7208_easeMap = {}, 7209 _customEaseExp = /^[\d.\-M][\d.\-,\s]/, 7210 _quotesExp = /["']/g, 7211 _parseObjectInString = function _parseObjectInString(value) { 7212 //takes a string like "{wiggles:10, type:anticipate})" and turns it into a real object. Notice it ends in ")" and includes the {} wrappers. This is because we only use this function for parsing ease configs and prioritized optimization rather than reusability. 7213 var obj = {}, 7214 split = value.substr(1, value.length - 3).split(":"), 7215 key = split[0], 7216 i = 1, 7217 l = split.length, 7218 index, 7219 val, 7220 parsedVal; 7221 7222 for (; i < l; i++) { 7223 val = split[i]; 7224 index = i !== l - 1 ? val.lastIndexOf(",") : val.length; 7225 parsedVal = val.substr(0, index); 7226 obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, "").trim() : +parsedVal; 7227 key = val.substr(index + 1).trim(); 7228 } 7229 7230 return obj; 7231}, 7232 _valueInParentheses = function _valueInParentheses(value) { 7233 var open = value.indexOf("(") + 1, 7234 close = value.indexOf(")"), 7235 nested = value.indexOf("(", open); 7236 return value.substring(open, ~nested && nested < close ? value.indexOf(")", close + 1) : close); 7237}, 7238 _configEaseFromString = function _configEaseFromString(name) { 7239 //name can be a string like "elastic.out(1,0.5)", and pass in _easeMap as obj and it'll parse it out and call the actual function like _easeMap.Elastic.easeOut.config(1,0.5). It will also parse custom ease strings as long as CustomEase is loaded and registered (internally as _easeMap._CE). 7240 var split = (name + "").split("("), 7241 ease = _easeMap[split[0]]; 7242 return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf("{") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(",").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE("", name) : ease; 7243}, 7244 _invertEase = function _invertEase(ease) { 7245 return function (p) { 7246 return 1 - ease(1 - p); 7247 }; 7248}, 7249 // allow yoyoEase to be set in children and have those affected when the parent/ancestor timeline yoyos. 7250_propagateYoyoEase = function _propagateYoyoEase(timeline, isYoyo) { 7251 var child = timeline._first, 7252 ease; 7253 7254 while (child) { 7255 if (child instanceof Timeline) { 7256 _propagateYoyoEase(child, isYoyo); 7257 } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) { 7258 if (child.timeline) { 7259 _propagateYoyoEase(child.timeline, isYoyo); 7260 } else { 7261 ease = child._ease; 7262 child._ease = child._yEase; 7263 child._yEase = ease; 7264 child._yoyo = isYoyo; 7265 } 7266 } 7267 7268 child = child._next; 7269 } 7270}, 7271 _parseEase = function _parseEase(ease, defaultEase) { 7272 return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase; 7273}, 7274 _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) { 7275 if (easeOut === void 0) { 7276 easeOut = function easeOut(p) { 7277 return 1 - easeIn(1 - p); 7278 }; 7279 } 7280 7281 if (easeInOut === void 0) { 7282 easeInOut = function easeInOut(p) { 7283 return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2; 7284 }; 7285 } 7286 7287 var ease = { 7288 easeIn: easeIn, 7289 easeOut: easeOut, 7290 easeInOut: easeInOut 7291 }, 7292 lowercaseName; 7293 7294 _forEachName(names, function (name) { 7295 _easeMap[name] = _globals[name] = ease; 7296 _easeMap[lowercaseName = name.toLowerCase()] = easeOut; 7297 7298 for (var p in ease) { 7299 _easeMap[lowercaseName + (p === "easeIn" ? ".in" : p === "easeOut" ? ".out" : ".inOut")] = _easeMap[name + "." + p] = ease[p]; 7300 } 7301 }); 7302 7303 return ease; 7304}, 7305 _easeInOutFromOut = function _easeInOutFromOut(easeOut) { 7306 return function (p) { 7307 return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2; 7308 }; 7309}, 7310 _configElastic = function _configElastic(type, amplitude, period) { 7311 var p1 = amplitude >= 1 ? amplitude : 1, 7312 //note: if amplitude is < 1, we simply adjust the period for a more natural feel. Otherwise the math doesn't work right and the curve starts at 1. 7313 p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1), 7314 p3 = p2 / _2PI * (Math.asin(1 / p1) || 0), 7315 easeOut = function easeOut(p) { 7316 return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1; 7317 }, 7318 ease = type === "out" ? easeOut : type === "in" ? function (p) { 7319 return 1 - easeOut(1 - p); 7320 } : _easeInOutFromOut(easeOut); 7321 7322 p2 = _2PI / p2; //precalculate to optimize 7323 7324 ease.config = function (amplitude, period) { 7325 return _configElastic(type, amplitude, period); 7326 }; 7327 7328 return ease; 7329}, 7330 _configBack = function _configBack(type, overshoot) { 7331 if (overshoot === void 0) { 7332 overshoot = 1.70158; 7333 } 7334 7335 var easeOut = function easeOut(p) { 7336 return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0; 7337 }, 7338 ease = type === "out" ? easeOut : type === "in" ? function (p) { 7339 return 1 - easeOut(1 - p); 7340 } : _easeInOutFromOut(easeOut); 7341 7342 ease.config = function (overshoot) { 7343 return _configBack(type, overshoot); 7344 }; 7345 7346 return ease; 7347}; // a cheaper (kb and cpu) but more mild way to get a parameterized weighted ease by feeding in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear. 7348// _weightedEase = ratio => { 7349// let y = 0.5 + ratio / 2; 7350// return p => (2 * (1 - p) * p * y + p * p); 7351// }, 7352// a stronger (but more expensive kb/cpu) parameterized weighted ease that lets you feed in a value between -1 (easeIn) and 1 (easeOut) where 0 is linear. 7353// _weightedEaseStrong = ratio => { 7354// ratio = .5 + ratio / 2; 7355// let o = 1 / 3 * (ratio < .5 ? ratio : 1 - ratio), 7356// b = ratio - o, 7357// c = ratio + o; 7358// return p => p === 1 ? p : 3 * b * (1 - p) * (1 - p) * p + 3 * c * (1 - p) * p * p + p * p * p; 7359// }; 7360 7361 7362_forEachName("Linear,Quad,Cubic,Quart,Quint,Strong", function (name, i) { 7363 var power = i < 5 ? i + 1 : i; 7364 7365 _insertEase(name + ",Power" + (power - 1), i ? function (p) { 7366 return Math.pow(p, power); 7367 } : function (p) { 7368 return p; 7369 }, function (p) { 7370 return 1 - Math.pow(1 - p, power); 7371 }, function (p) { 7372 return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2; 7373 }); 7374}); 7375 7376_easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn; 7377 7378_insertEase("Elastic", _configElastic("in"), _configElastic("out"), _configElastic()); 7379 7380(function (n, c) { 7381 var n1 = 1 / c, 7382 n2 = 2 * n1, 7383 n3 = 2.5 * n1, 7384 easeOut = function easeOut(p) { 7385 return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375; 7386 }; 7387 7388 _insertEase("Bounce", function (p) { 7389 return 1 - easeOut(1 - p); 7390 }, easeOut); 7391})(7.5625, 2.75); 7392 7393_insertEase("Expo", function (p) { 7394 return p ? Math.pow(2, 10 * (p - 1)) : 0; 7395}); 7396 7397_insertEase("Circ", function (p) { 7398 return -(_sqrt(1 - p * p) - 1); 7399}); 7400 7401_insertEase("Sine", function (p) { 7402 return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1; 7403}); 7404 7405_insertEase("Back", _configBack("in"), _configBack("out"), _configBack()); 7406 7407_easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = { 7408 config: function config(steps, immediateStart) { 7409 if (steps === void 0) { 7410 steps = 1; 7411 } 7412 7413 var p1 = 1 / steps, 7414 p2 = steps + (immediateStart ? 0 : 1), 7415 p3 = immediateStart ? 1 : 0, 7416 max = 1 - _tinyNum; 7417 return function (p) { 7418 return ((p2 * _clamp(0, max, p) | 0) + p3) * p1; 7419 }; 7420 } 7421}; 7422_defaults.ease = _easeMap["quad.out"]; 7423 7424_forEachName("onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt", function (name) { 7425 return _callbackNames += name + "," + name + "Params,"; 7426}); 7427/* 7428 * -------------------------------------------------------------------------------------- 7429 * CACHE 7430 * -------------------------------------------------------------------------------------- 7431 */ 7432 7433 7434var GSCache = function GSCache(target, harness) { 7435 this.id = _gsID++; 7436 target._gsap = this; 7437 this.target = target; 7438 this.harness = harness; 7439 this.get = harness ? harness.get : _getProperty; 7440 this.set = harness ? harness.getSetter : _getSetter; 7441}; 7442/* 7443 * -------------------------------------------------------------------------------------- 7444 * ANIMATION 7445 * -------------------------------------------------------------------------------------- 7446 */ 7447 7448var Animation = /*#__PURE__*/function () { 7449 function Animation(vars) { 7450 this.vars = vars; 7451 this._delay = +vars.delay || 0; 7452 7453 if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) { 7454 // TODO: repeat: Infinity on a timeline's children must flag that timeline internally and affect its totalDuration, otherwise it'll stop in the negative direction when reaching the start. 7455 this._rDelay = vars.repeatDelay || 0; 7456 this._yoyo = !!vars.yoyo || !!vars.yoyoEase; 7457 } 7458 7459 this._ts = 1; 7460 7461 _setDuration(this, +vars.duration, 1, 1); 7462 7463 this.data = vars.data; 7464 7465 if (_context) { 7466 this._ctx = _context; 7467 7468 _context.data.push(this); 7469 } 7470 7471 _tickerActive || _ticker.wake(); 7472 } 7473 7474 var _proto = Animation.prototype; 7475 7476 _proto.delay = function delay(value) { 7477 if (value || value === 0) { 7478 this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay); 7479 this._delay = value; 7480 return this; 7481 } 7482 7483 return this._delay; 7484 }; 7485 7486 _proto.duration = function duration(value) { 7487 return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur; 7488 }; 7489 7490 _proto.totalDuration = function totalDuration(value) { 7491 if (!arguments.length) { 7492 return this._tDur; 7493 } 7494 7495 this._dirty = 0; 7496 return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1)); 7497 }; 7498 7499 _proto.totalTime = function totalTime(_totalTime, suppressEvents) { 7500 _wake(); 7501 7502 if (!arguments.length) { 7503 return this._tTime; 7504 } 7505 7506 var parent = this._dp; 7507 7508 if (parent && parent.smoothChildTiming && this._ts) { 7509 _alignPlayhead(this, _totalTime); 7510 7511 !parent._dp || parent.parent || _postAddChecks(parent, this); // edge case: if this is a child of a timeline that already completed, for example, we must re-activate the parent. 7512 //in case any of the ancestor timelines had completed but should now be enabled, we should reset their totalTime() which will also ensure that they're lined up properly and enabled. Skip for animations that are on the root (wasteful). Example: a TimelineLite.exportRoot() is performed when there's a paused tween on the root, the export will not complete until that tween is unpaused, but imagine a child gets restarted later, after all [unpaused] tweens have completed. The start of that child would get pushed out, but one of the ancestors may have completed. 7513 7514 while (parent && parent.parent) { 7515 if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) { 7516 parent.totalTime(parent._tTime, true); 7517 } 7518 7519 parent = parent.parent; 7520 } 7521 7522 if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) { 7523 //if the animation doesn't have a parent, put it back into its last parent (recorded as _dp for exactly cases like this). Limit to parents with autoRemoveChildren (like globalTimeline) so that if the user manually removes an animation from a timeline and then alters its playhead, it doesn't get added back in. 7524 _addToTimeline(this._dp, this, this._start - this._delay); 7525 } 7526 } 7527 7528 if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) { 7529 // check for _ptLookup on a Tween instance to ensure it has actually finished being instantiated, otherwise if this.reverse() gets called in the Animation constructor, it could trigger a render() here even though the _targets weren't populated, thus when _init() is called there won't be any PropTweens (it'll act like the tween is non-functional) 7530 this._ts || (this._pTime = _totalTime); // otherwise, if an animation is paused, then the playhead is moved back to zero, then resumed, it'd revert back to the original time at the pause 7531 //if (!this._lock) { // avoid endless recursion (not sure we need this yet or if it's worth the performance hit) 7532 // this._lock = 1; 7533 7534 _lazySafeRender(this, _totalTime, suppressEvents); // this._lock = 0; 7535 //} 7536 7537 } 7538 7539 return this; 7540 }; 7541 7542 _proto.time = function time(value, suppressEvents) { 7543 return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % (this._dur + this._rDelay) || (value ? this._dur : 0), suppressEvents) : this._time; // note: if the modulus results in 0, the playhead could be exactly at the end or the beginning, and we always defer to the END with a non-zero value, otherwise if you set the time() to the very end (duration()), it would render at the START! 7544 }; 7545 7546 _proto.totalProgress = function totalProgress(value, suppressEvents) { 7547 return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.ratio; 7548 }; 7549 7550 _proto.progress = function progress(value, suppressEvents) { 7551 return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.ratio; 7552 }; 7553 7554 _proto.iteration = function iteration(value, suppressEvents) { 7555 var cycleDuration = this.duration() + this._rDelay; 7556 7557 return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1; 7558 } // potential future addition: 7559 // isPlayingBackwards() { 7560 // let animation = this, 7561 // orientation = 1; // 1 = forward, -1 = backward 7562 // while (animation) { 7563 // orientation *= animation.reversed() || (animation.repeat() && !(animation.iteration() & 1)) ? -1 : 1; 7564 // animation = animation.parent; 7565 // } 7566 // return orientation < 0; 7567 // } 7568 ; 7569 7570 _proto.timeScale = function timeScale(value) { 7571 if (!arguments.length) { 7572 return this._rts === -_tinyNum ? 0 : this._rts; // recorded timeScale. Special case: if someone calls reverse() on an animation with timeScale of 0, we assign it -_tinyNum to remember it's reversed. 7573 } 7574 7575 if (this._rts === value) { 7576 return this; 7577 } 7578 7579 var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime; // make sure to do the parentToChildTotalTime() BEFORE setting the new _ts because the old one must be used in that calculation. 7580 // future addition? Up side: fast and minimal file size. Down side: only works on this animation; if a timeline is reversed, for example, its childrens' onReverse wouldn't get called. 7581 //(+value < 0 && this._rts >= 0) && _callback(this, "onReverse", true); 7582 // prioritize rendering where the parent's playhead lines up instead of this._tTime because there could be a tween that's animating another tween's timeScale in the same rendering loop (same parent), thus if the timeScale tween renders first, it would alter _start BEFORE _tTime was set on that tick (in the rendering loop), effectively freezing it until the timeScale tween finishes. 7583 7584 this._rts = +value || 0; 7585 this._ts = this._ps || value === -_tinyNum ? 0 : this._rts; // _ts is the functional timeScale which would be 0 if the animation is paused. 7586 7587 this.totalTime(_clamp(-Math.abs(this._delay), this._tDur, tTime), true); 7588 7589 _setEnd(this); // if parent.smoothChildTiming was false, the end time didn't get updated in the _alignPlayhead() method, so do it here. 7590 7591 7592 return _recacheAncestors(this); 7593 }; 7594 7595 _proto.paused = function paused(value) { 7596 if (!arguments.length) { 7597 return this._ps; 7598 } 7599 7600 if (this._ps !== value) { 7601 this._ps = value; 7602 7603 if (value) { 7604 this._pTime = this._tTime || Math.max(-this._delay, this.rawTime()); // if the pause occurs during the delay phase, make sure that's factored in when resuming. 7605 7606 this._ts = this._act = 0; // _ts is the functional timeScale, so a paused tween would effectively have a timeScale of 0. We record the "real" timeScale as _rts (recorded time scale) 7607 } else { 7608 _wake(); 7609 7610 this._ts = this._rts; //only defer to _pTime (pauseTime) if tTime is zero. Remember, someone could pause() an animation, then scrub the playhead and resume(). If the parent doesn't have smoothChildTiming, we render at the rawTime() because the startTime won't get updated. 7611 7612 this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && Math.abs(this._zTime) !== _tinyNum && (this._tTime -= _tinyNum)); // edge case: animation.progress(1).pause().play() wouldn't render again because the playhead is already at the end, but the call to totalTime() below will add it back to its parent...and not remove it again (since removing only happens upon rendering at a new time). Offsetting the _tTime slightly is done simply to cause the final render in totalTime() that'll pop it off its timeline (if autoRemoveChildren is true, of course). Check to make sure _zTime isn't -_tinyNum to avoid an edge case where the playhead is pushed to the end but INSIDE a tween/callback, the timeline itself is paused thus halting rendering and leaving a few unrendered. When resuming, it wouldn't render those otherwise. 7613 } 7614 } 7615 7616 return this; 7617 }; 7618 7619 _proto.startTime = function startTime(value) { 7620 if (arguments.length) { 7621 this._start = value; 7622 var parent = this.parent || this._dp; 7623 parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay); 7624 return this; 7625 } 7626 7627 return this._start; 7628 }; 7629 7630 _proto.endTime = function endTime(includeRepeats) { 7631 return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts || 1); 7632 }; 7633 7634 _proto.rawTime = function rawTime(wrapRepeats) { 7635 var parent = this.parent || this._dp; // _dp = detached parent 7636 7637 return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this); 7638 }; 7639 7640 _proto.revert = function revert(config) { 7641 if (config === void 0) { 7642 config = _revertConfig; 7643 } 7644 7645 var prevIsReverting = _reverting; 7646 _reverting = config; 7647 7648 if (this._initted || this._startAt) { 7649 this.timeline && this.timeline.revert(config); 7650 this.totalTime(-0.01, config.suppressEvents); 7651 } 7652 7653 this.data !== "nested" && config.kill !== false && this.kill(); 7654 _reverting = prevIsReverting; 7655 return this; 7656 }; 7657 7658 _proto.globalTime = function globalTime(rawTime) { 7659 var animation = this, 7660 time = arguments.length ? rawTime : animation.rawTime(); 7661 7662 while (animation) { 7663 time = animation._start + time / (animation._ts || 1); 7664 animation = animation._dp; 7665 } 7666 7667 return !this.parent && this._sat ? this._sat.vars.immediateRender ? -Infinity : this._sat.globalTime(rawTime) : time; // the _startAt tweens for .fromTo() and .from() that have immediateRender should always be FIRST in the timeline (important for context.revert()). "_sat" stands for _startAtTween, referring to the parent tween that created the _startAt. We must discern if that tween had immediateRender so that we can know whether or not to prioritize it in revert(). 7668 }; 7669 7670 _proto.repeat = function repeat(value) { 7671 if (arguments.length) { 7672 this._repeat = value === Infinity ? -2 : value; 7673 return _onUpdateTotalDuration(this); 7674 } 7675 7676 return this._repeat === -2 ? Infinity : this._repeat; 7677 }; 7678 7679 _proto.repeatDelay = function repeatDelay(value) { 7680 if (arguments.length) { 7681 var time = this._time; 7682 this._rDelay = value; 7683 7684 _onUpdateTotalDuration(this); 7685 7686 return time ? this.time(time) : this; 7687 } 7688 7689 return this._rDelay; 7690 }; 7691 7692 _proto.yoyo = function yoyo(value) { 7693 if (arguments.length) { 7694 this._yoyo = value; 7695 return this; 7696 } 7697 7698 return this._yoyo; 7699 }; 7700 7701 _proto.seek = function seek(position, suppressEvents) { 7702 return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents)); 7703 }; 7704 7705 _proto.restart = function restart(includeDelay, suppressEvents) { 7706 return this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents)); 7707 }; 7708 7709 _proto.play = function play(from, suppressEvents) { 7710 from != null && this.seek(from, suppressEvents); 7711 return this.reversed(false).paused(false); 7712 }; 7713 7714 _proto.reverse = function reverse(from, suppressEvents) { 7715 from != null && this.seek(from || this.totalDuration(), suppressEvents); 7716 return this.reversed(true).paused(false); 7717 }; 7718 7719 _proto.pause = function pause(atTime, suppressEvents) { 7720 atTime != null && this.seek(atTime, suppressEvents); 7721 return this.paused(true); 7722 }; 7723 7724 _proto.resume = function resume() { 7725 return this.paused(false); 7726 }; 7727 7728 _proto.reversed = function reversed(value) { 7729 if (arguments.length) { 7730 !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0)); // in case timeScale is zero, reversing would have no effect so we use _tinyNum. 7731 7732 return this; 7733 } 7734 7735 return this._rts < 0; 7736 }; 7737 7738 _proto.invalidate = function invalidate() { 7739 this._initted = this._act = 0; 7740 this._zTime = -_tinyNum; 7741 return this; 7742 }; 7743 7744 _proto.isActive = function isActive() { 7745 var parent = this.parent || this._dp, 7746 start = this._start, 7747 rawTime; 7748 return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum); 7749 }; 7750 7751 _proto.eventCallback = function eventCallback(type, callback, params) { 7752 var vars = this.vars; 7753 7754 if (arguments.length > 1) { 7755 if (!callback) { 7756 delete vars[type]; 7757 } else { 7758 vars[type] = callback; 7759 params && (vars[type + "Params"] = params); 7760 type === "onUpdate" && (this._onUpdate = callback); 7761 } 7762 7763 return this; 7764 } 7765 7766 return vars[type]; 7767 }; 7768 7769 _proto.then = function then(onFulfilled) { 7770 var self = this; 7771 return new Promise(function (resolve) { 7772 var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough, 7773 _resolve = function _resolve() { 7774 var _then = self.then; 7775 self.then = null; // temporarily null the then() method to avoid an infinite loop (see https://github.com/greensock/GSAP/issues/322) 7776 7777 _isFunction(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then); 7778 resolve(f); 7779 self.then = _then; 7780 }; 7781 7782 if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) { 7783 _resolve(); 7784 } else { 7785 self._prom = _resolve; 7786 } 7787 }); 7788 }; 7789 7790 _proto.kill = function kill() { 7791 _interrupt(this); 7792 }; 7793 7794 return Animation; 7795}(); 7796 7797_setDefaults(Animation.prototype, { 7798 _time: 0, 7799 _start: 0, 7800 _end: 0, 7801 _tTime: 0, 7802 _tDur: 0, 7803 _dirty: 0, 7804 _repeat: 0, 7805 _yoyo: false, 7806 parent: null, 7807 _initted: false, 7808 _rDelay: 0, 7809 _ts: 1, 7810 _dp: 0, 7811 ratio: 0, 7812 _zTime: -_tinyNum, 7813 _prom: 0, 7814 _ps: false, 7815 _rts: 1 7816}); 7817/* 7818 * ------------------------------------------------- 7819 * TIMELINE 7820 * ------------------------------------------------- 7821 */ 7822 7823 7824var Timeline = /*#__PURE__*/function (_Animation) { 7825 _inheritsLoose(Timeline, _Animation); 7826 7827 function Timeline(vars, position) { 7828 var _this; 7829 7830 if (vars === void 0) { 7831 vars = {}; 7832 } 7833 7834 _this = _Animation.call(this, vars) || this; 7835 _this.labels = {}; 7836 _this.smoothChildTiming = !!vars.smoothChildTiming; 7837 _this.autoRemoveChildren = !!vars.autoRemoveChildren; 7838 _this._sort = _isNotFalse(vars.sortChildren); 7839 _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position); 7840 vars.reversed && _this.reverse(); 7841 vars.paused && _this.paused(true); 7842 vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger); 7843 return _this; 7844 } 7845 7846 var _proto2 = Timeline.prototype; 7847 7848 _proto2.to = function to(targets, vars, position) { 7849 _createTweenType(0, arguments, this); 7850 7851 return this; 7852 }; 7853 7854 _proto2.from = function from(targets, vars, position) { 7855 _createTweenType(1, arguments, this); 7856 7857 return this; 7858 }; 7859 7860 _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) { 7861 _createTweenType(2, arguments, this); 7862 7863 return this; 7864 }; 7865 7866 _proto2.set = function set(targets, vars, position) { 7867 vars.duration = 0; 7868 vars.parent = this; 7869 _inheritDefaults(vars).repeatDelay || (vars.repeat = 0); 7870 vars.immediateRender = !!vars.immediateRender; 7871 new Tween(targets, vars, _parsePosition(this, position), 1); 7872 return this; 7873 }; 7874 7875 _proto2.call = function call(callback, params, position) { 7876 return _addToTimeline(this, Tween.delayedCall(0, callback, params), position); 7877 } //ONLY for backward compatibility! Maybe delete? 7878 ; 7879 7880 _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) { 7881 vars.duration = duration; 7882 vars.stagger = vars.stagger || stagger; 7883 vars.onComplete = onCompleteAll; 7884 vars.onCompleteParams = onCompleteAllParams; 7885 vars.parent = this; 7886 new Tween(targets, vars, _parsePosition(this, position)); 7887 return this; 7888 }; 7889 7890 _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) { 7891 vars.runBackwards = 1; 7892 _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender); 7893 return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams); 7894 }; 7895 7896 _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) { 7897 toVars.startAt = fromVars; 7898 _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender); 7899 return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams); 7900 }; 7901 7902 _proto2.render = function render(totalTime, suppressEvents, force) { 7903 var prevTime = this._time, 7904 tDur = this._dirty ? this.totalDuration() : this._tDur, 7905 dur = this._dur, 7906 tTime = totalTime <= 0 ? 0 : _roundPrecise(totalTime), 7907 // if a paused timeline is resumed (or its _start is updated for another reason...which rounds it), that could result in the playhead shifting a **tiny** amount and a zero-duration child at that spot may get rendered at a different ratio, like its totalTime in render() may be 1e-17 instead of 0, for example. 7908 crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur), 7909 time, 7910 child, 7911 next, 7912 iteration, 7913 cycleDuration, 7914 prevPaused, 7915 pauseTween, 7916 timeScale, 7917 prevStart, 7918 prevIteration, 7919 yoyo, 7920 isYoyo; 7921 this !== _globalTimeline && tTime > tDur && totalTime >= 0 && (tTime = tDur); 7922 7923 if (tTime !== this._tTime || force || crossingStart) { 7924 if (prevTime !== this._time && dur) { 7925 //if totalDuration() finds a child with a negative startTime and smoothChildTiming is true, things get shifted around internally so we need to adjust the time accordingly. For example, if a tween starts at -30 we must shift EVERYTHING forward 30 seconds and move this timeline's startTime backward by 30 seconds so that things align with the playhead (no jump). 7926 tTime += this._time - prevTime; 7927 totalTime += this._time - prevTime; 7928 } 7929 7930 time = tTime; 7931 prevStart = this._start; 7932 timeScale = this._ts; 7933 prevPaused = !timeScale; 7934 7935 if (crossingStart) { 7936 dur || (prevTime = this._zTime); //when the playhead arrives at EXACTLY time 0 (right on top) of a zero-duration timeline, we need to discern if events are suppressed so that when the playhead moves again (next time), it'll trigger the callback. If events are NOT suppressed, obviously the callback would be triggered in this render. Basically, the callback should fire either when the playhead ARRIVES or LEAVES this exact spot, not both. Imagine doing a timeline.seek(0) and there's a callback that sits at 0. Since events are suppressed on that seek() by default, nothing will fire, but when the playhead moves off of that position, the callback should fire. This behavior is what people intuitively expect. 7937 7938 (totalTime || !suppressEvents) && (this._zTime = totalTime); 7939 } 7940 7941 if (this._repeat) { 7942 //adjust the time for repeats and yoyos 7943 yoyo = this._yoyo; 7944 cycleDuration = dur + this._rDelay; 7945 7946 if (this._repeat < -1 && totalTime < 0) { 7947 return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force); 7948 } 7949 7950 time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!) 7951 7952 if (tTime === tDur) { 7953 // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't) 7954 iteration = this._repeat; 7955 time = dur; 7956 } else { 7957 iteration = ~~(tTime / cycleDuration); 7958 7959 if (iteration && iteration === tTime / cycleDuration) { 7960 time = dur; 7961 iteration--; 7962 } 7963 7964 time > dur && (time = dur); 7965 } 7966 7967 prevIteration = _animationCycle(this._tTime, cycleDuration); 7968 !prevTime && this._tTime && prevIteration !== iteration && this._tTime - prevIteration * cycleDuration - this._dur <= 0 && (prevIteration = iteration); // edge case - if someone does addPause() at the very beginning of a repeating timeline, that pause is technically at the same spot as the end which causes this._time to get set to 0 when the totalTime would normally place the playhead at the end. See https://greensock.com/forums/topic/23823-closing-nav-animation-not-working-on-ie-and-iphone-6-maybe-other-older-browser/?tab=comments#comment-113005 also, this._tTime - prevIteration * cycleDuration - this._dur <= 0 just checks to make sure it wasn't previously in the "repeatDelay" portion 7969 7970 if (yoyo && iteration & 1) { 7971 time = dur - time; 7972 isYoyo = 1; 7973 } 7974 /* 7975 make sure children at the end/beginning of the timeline are rendered properly. If, for example, 7976 a 3-second long timeline rendered at 2.9 seconds previously, and now renders at 3.2 seconds (which 7977 would get translated to 2.8 seconds if the timeline yoyos or 0.2 seconds if it just repeats), there 7978 could be a callback or a short tween that's at 2.95 or 3 seconds in which wouldn't render. So 7979 we need to push the timeline to the end (and/or beginning depending on its yoyo value). Also we must 7980 ensure that zero-duration tweens at the very beginning or end of the Timeline work. 7981 */ 7982 7983 7984 if (iteration !== prevIteration && !this._lock) { 7985 var rewinding = yoyo && prevIteration & 1, 7986 doesWrap = rewinding === (yoyo && iteration & 1); 7987 iteration < prevIteration && (rewinding = !rewinding); 7988 prevTime = rewinding ? 0 : tTime % dur ? dur : tTime; // if the playhead is landing exactly at the end of an iteration, use that totalTime rather than only the duration, otherwise it'll skip the 2nd render since it's effectively at the same time. 7989 7990 this._lock = 1; 7991 this.render(prevTime || (isYoyo ? 0 : _roundPrecise(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0; 7992 this._tTime = tTime; // if a user gets the iteration() inside the onRepeat, for example, it should be accurate. 7993 7994 !suppressEvents && this.parent && _callback(this, "onRepeat"); 7995 this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1); 7996 7997 if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) { 7998 // if prevTime is 0 and we render at the very end, _time will be the end, thus won't match. So in this edge case, prevTime won't match _time but that's okay. If it gets killed in the onRepeat, eject as well. 7999 return this; 8000 } 8001 8002 dur = this._dur; // in case the duration changed in the onRepeat 8003 8004 tDur = this._tDur; 8005 8006 if (doesWrap) { 8007 this._lock = 2; 8008 prevTime = rewinding ? dur : -0.0001; 8009 this.render(prevTime, true); 8010 this.vars.repeatRefresh && !isYoyo && this.invalidate(); 8011 } 8012 8013 this._lock = 0; 8014 8015 if (!this._ts && !prevPaused) { 8016 return this; 8017 } //in order for yoyoEase to work properly when there's a stagger, we must swap out the ease in each sub-tween. 8018 8019 8020 _propagateYoyoEase(this, isYoyo); 8021 } 8022 } 8023 8024 if (this._hasPause && !this._forcing && this._lock < 2) { 8025 pauseTween = _findNextPauseTween(this, _roundPrecise(prevTime), _roundPrecise(time)); 8026 8027 if (pauseTween) { 8028 tTime -= time - (time = pauseTween._start); 8029 } 8030 } 8031 8032 this._tTime = tTime; 8033 this._time = time; 8034 this._act = !timeScale; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick. 8035 8036 if (!this._initted) { 8037 this._onUpdate = this.vars.onUpdate; 8038 this._initted = 1; 8039 this._zTime = totalTime; 8040 prevTime = 0; // upon init, the playhead should always go forward; someone could invalidate() a completed timeline and then if they restart(), that would make child tweens render in reverse order which could lock in the wrong starting values if they build on each other, like tl.to(obj, {x: 100}).to(obj, {x: 0}). 8041 } 8042 8043 if (!prevTime && time && !suppressEvents && !iteration) { 8044 _callback(this, "onStart"); 8045 8046 if (this._tTime !== tTime) { 8047 // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart. 8048 return this; 8049 } 8050 } 8051 8052 if (time >= prevTime && totalTime >= 0) { 8053 child = this._first; 8054 8055 while (child) { 8056 next = child._next; 8057 8058 if ((child._act || time >= child._start) && child._ts && pauseTween !== child) { 8059 if (child.parent !== this) { 8060 // an extreme edge case - the child's render could do something like kill() the "next" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe. 8061 return this.render(totalTime, suppressEvents, force); 8062 } 8063 8064 child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force); 8065 8066 if (time !== this._time || !this._ts && !prevPaused) { 8067 //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete 8068 pauseTween = 0; 8069 next && (tTime += this._zTime = -_tinyNum); // it didn't finish rendering, so flag zTime as negative so that so that the next time render() is called it'll be forced (to render any remaining children) 8070 8071 break; 8072 } 8073 } 8074 8075 child = next; 8076 } 8077 } else { 8078 child = this._last; 8079 var adjustedTime = totalTime < 0 ? totalTime : time; //when the playhead goes backward beyond the start of this timeline, we must pass that information down to the child animations so that zero-duration tweens know whether to render their starting or ending values. 8080 8081 while (child) { 8082 next = child._prev; 8083 8084 if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) { 8085 if (child.parent !== this) { 8086 // an extreme edge case - the child's render could do something like kill() the "next" one in the linked list, or reparent it. In that case we must re-initiate the whole render to be safe. 8087 return this.render(totalTime, suppressEvents, force); 8088 } 8089 8090 child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force || _reverting && (child._initted || child._startAt)); // if reverting, we should always force renders of initted tweens (but remember that .fromTo() or .from() may have a _startAt but not _initted yet). If, for example, a .fromTo() tween with a stagger (which creates an internal timeline) gets reverted BEFORE some of its child tweens render for the first time, it may not properly trigger them to revert. 8091 8092 if (time !== this._time || !this._ts && !prevPaused) { 8093 //in case a tween pauses or seeks the timeline when rendering, like inside of an onUpdate/onComplete 8094 pauseTween = 0; 8095 next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum); // it didn't finish rendering, so adjust zTime so that so that the next time render() is called it'll be forced (to render any remaining children) 8096 8097 break; 8098 } 8099 } 8100 8101 child = next; 8102 } 8103 } 8104 8105 if (pauseTween && !suppressEvents) { 8106 this.pause(); 8107 pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1; 8108 8109 if (this._ts) { 8110 //the callback resumed playback! So since we may have held back the playhead due to where the pause is positioned, go ahead and jump to where it's SUPPOSED to be (if no pause happened). 8111 this._start = prevStart; //if the pause was at an earlier time and the user resumed in the callback, it could reposition the timeline (changing its startTime), throwing things off slightly, so we make sure the _start doesn't shift. 8112 8113 _setEnd(this); 8114 8115 return this.render(totalTime, suppressEvents, force); 8116 } 8117 } 8118 8119 this._onUpdate && !suppressEvents && _callback(this, "onUpdate", true); 8120 if (tTime === tDur && this._tTime >= this.totalDuration() || !tTime && prevTime) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) if (!this._lock) { 8121 // remember, a child's callback may alter this timeline's playhead or timeScale which is why we need to add some of these checks. 8122 (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative. 8123 8124 if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) { 8125 _callback(this, tTime === tDur && totalTime >= 0 ? "onComplete" : "onReverseComplete", true); 8126 8127 this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom(); 8128 } 8129 } 8130 } 8131 8132 return this; 8133 }; 8134 8135 _proto2.add = function add(child, position) { 8136 var _this2 = this; 8137 8138 _isNumber(position) || (position = _parsePosition(this, position, child)); 8139 8140 if (!(child instanceof Animation)) { 8141 if (_isArray(child)) { 8142 child.forEach(function (obj) { 8143 return _this2.add(obj, position); 8144 }); 8145 return this; 8146 } 8147 8148 if (_isString(child)) { 8149 return this.addLabel(child, position); 8150 } 8151 8152 if (_isFunction(child)) { 8153 child = Tween.delayedCall(0, child); 8154 } else { 8155 return this; 8156 } 8157 } 8158 8159 return this !== child ? _addToTimeline(this, child, position) : this; //don't allow a timeline to be added to itself as a child! 8160 }; 8161 8162 _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) { 8163 if (nested === void 0) { 8164 nested = true; 8165 } 8166 8167 if (tweens === void 0) { 8168 tweens = true; 8169 } 8170 8171 if (timelines === void 0) { 8172 timelines = true; 8173 } 8174 8175 if (ignoreBeforeTime === void 0) { 8176 ignoreBeforeTime = -_bigNum; 8177 } 8178 8179 var a = [], 8180 child = this._first; 8181 8182 while (child) { 8183 if (child._start >= ignoreBeforeTime) { 8184 if (child instanceof Tween) { 8185 tweens && a.push(child); 8186 } else { 8187 timelines && a.push(child); 8188 nested && a.push.apply(a, child.getChildren(true, tweens, timelines)); 8189 } 8190 } 8191 8192 child = child._next; 8193 } 8194 8195 return a; 8196 }; 8197 8198 _proto2.getById = function getById(id) { 8199 var animations = this.getChildren(1, 1, 1), 8200 i = animations.length; 8201 8202 while (i--) { 8203 if (animations[i].vars.id === id) { 8204 return animations[i]; 8205 } 8206 } 8207 }; 8208 8209 _proto2.remove = function remove(child) { 8210 if (_isString(child)) { 8211 return this.removeLabel(child); 8212 } 8213 8214 if (_isFunction(child)) { 8215 return this.killTweensOf(child); 8216 } 8217 8218 _removeLinkedListItem(this, child); 8219 8220 if (child === this._recent) { 8221 this._recent = this._last; 8222 } 8223 8224 return _uncache(this); 8225 }; 8226 8227 _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) { 8228 if (!arguments.length) { 8229 return this._tTime; 8230 } 8231 8232 this._forcing = 1; 8233 8234 if (!this._dp && this._ts) { 8235 //special case for the global timeline (or any other that has no parent or detached parent). 8236 this._start = _roundPrecise(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts)); 8237 } 8238 8239 _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents); 8240 8241 this._forcing = 0; 8242 return this; 8243 }; 8244 8245 _proto2.addLabel = function addLabel(label, position) { 8246 this.labels[label] = _parsePosition(this, position); 8247 return this; 8248 }; 8249 8250 _proto2.removeLabel = function removeLabel(label) { 8251 delete this.labels[label]; 8252 return this; 8253 }; 8254 8255 _proto2.addPause = function addPause(position, callback, params) { 8256 var t = Tween.delayedCall(0, callback || _emptyFunc, params); 8257 t.data = "isPause"; 8258 this._hasPause = 1; 8259 return _addToTimeline(this, t, _parsePosition(this, position)); 8260 }; 8261 8262 _proto2.removePause = function removePause(position) { 8263 var child = this._first; 8264 position = _parsePosition(this, position); 8265 8266 while (child) { 8267 if (child._start === position && child.data === "isPause") { 8268 _removeFromParent(child); 8269 } 8270 8271 child = child._next; 8272 } 8273 }; 8274 8275 _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) { 8276 var tweens = this.getTweensOf(targets, onlyActive), 8277 i = tweens.length; 8278 8279 while (i--) { 8280 _overwritingTween !== tweens[i] && tweens[i].kill(targets, props); 8281 } 8282 8283 return this; 8284 }; 8285 8286 _proto2.getTweensOf = function getTweensOf(targets, onlyActive) { 8287 var a = [], 8288 parsedTargets = toArray(targets), 8289 child = this._first, 8290 isGlobalTime = _isNumber(onlyActive), 8291 // a number is interpreted as a global time. If the animation spans 8292 children; 8293 8294 while (child) { 8295 if (child instanceof Tween) { 8296 if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) { 8297 // note: if this is for overwriting, it should only be for tweens that aren't paused and are initted. 8298 a.push(child); 8299 } 8300 } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) { 8301 a.push.apply(a, children); 8302 } 8303 8304 child = child._next; 8305 } 8306 8307 return a; 8308 } // potential future feature - targets() on timelines 8309 // targets() { 8310 // let result = []; 8311 // this.getChildren(true, true, false).forEach(t => result.push(...t.targets())); 8312 // return result.filter((v, i) => result.indexOf(v) === i); 8313 // } 8314 ; 8315 8316 _proto2.tweenTo = function tweenTo(position, vars) { 8317 vars = vars || {}; 8318 8319 var tl = this, 8320 endTime = _parsePosition(tl, position), 8321 _vars = vars, 8322 startAt = _vars.startAt, 8323 _onStart = _vars.onStart, 8324 onStartParams = _vars.onStartParams, 8325 immediateRender = _vars.immediateRender, 8326 initted, 8327 tween = Tween.to(tl, _setDefaults({ 8328 ease: vars.ease || "none", 8329 lazy: false, 8330 immediateRender: false, 8331 time: endTime, 8332 overwrite: "auto", 8333 duration: vars.duration || Math.abs((endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum, 8334 onStart: function onStart() { 8335 tl.pause(); 8336 8337 if (!initted) { 8338 var duration = vars.duration || Math.abs((endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale()); 8339 tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true); 8340 initted = 1; 8341 } 8342 8343 _onStart && _onStart.apply(tween, onStartParams || []); //in case the user had an onStart in the vars - we don't want to overwrite it. 8344 } 8345 }, vars)); 8346 8347 return immediateRender ? tween.render(0) : tween; 8348 }; 8349 8350 _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) { 8351 return this.tweenTo(toPosition, _setDefaults({ 8352 startAt: { 8353 time: _parsePosition(this, fromPosition) 8354 } 8355 }, vars)); 8356 }; 8357 8358 _proto2.recent = function recent() { 8359 return this._recent; 8360 }; 8361 8362 _proto2.nextLabel = function nextLabel(afterTime) { 8363 if (afterTime === void 0) { 8364 afterTime = this._time; 8365 } 8366 8367 return _getLabelInDirection(this, _parsePosition(this, afterTime)); 8368 }; 8369 8370 _proto2.previousLabel = function previousLabel(beforeTime) { 8371 if (beforeTime === void 0) { 8372 beforeTime = this._time; 8373 } 8374 8375 return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1); 8376 }; 8377 8378 _proto2.currentLabel = function currentLabel(value) { 8379 return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum); 8380 }; 8381 8382 _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) { 8383 if (ignoreBeforeTime === void 0) { 8384 ignoreBeforeTime = 0; 8385 } 8386 8387 var child = this._first, 8388 labels = this.labels, 8389 p; 8390 8391 while (child) { 8392 if (child._start >= ignoreBeforeTime) { 8393 child._start += amount; 8394 child._end += amount; 8395 } 8396 8397 child = child._next; 8398 } 8399 8400 if (adjustLabels) { 8401 for (p in labels) { 8402 if (labels[p] >= ignoreBeforeTime) { 8403 labels[p] += amount; 8404 } 8405 } 8406 } 8407 8408 return _uncache(this); 8409 }; 8410 8411 _proto2.invalidate = function invalidate(soft) { 8412 var child = this._first; 8413 this._lock = 0; 8414 8415 while (child) { 8416 child.invalidate(soft); 8417 child = child._next; 8418 } 8419 8420 return _Animation.prototype.invalidate.call(this, soft); 8421 }; 8422 8423 _proto2.clear = function clear(includeLabels) { 8424 if (includeLabels === void 0) { 8425 includeLabels = true; 8426 } 8427 8428 var child = this._first, 8429 next; 8430 8431 while (child) { 8432 next = child._next; 8433 this.remove(child); 8434 child = next; 8435 } 8436 8437 this._dp && (this._time = this._tTime = this._pTime = 0); 8438 includeLabels && (this.labels = {}); 8439 return _uncache(this); 8440 }; 8441 8442 _proto2.totalDuration = function totalDuration(value) { 8443 var max = 0, 8444 self = this, 8445 child = self._last, 8446 prevStart = _bigNum, 8447 prev, 8448 start, 8449 parent; 8450 8451 if (arguments.length) { 8452 return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value)); 8453 } 8454 8455 if (self._dirty) { 8456 parent = self.parent; 8457 8458 while (child) { 8459 prev = child._prev; //record it here in case the tween changes position in the sequence... 8460 8461 child._dirty && child.totalDuration(); //could change the tween._startTime, so make sure the animation's cache is clean before analyzing it. 8462 8463 start = child._start; 8464 8465 if (start > prevStart && self._sort && child._ts && !self._lock) { 8466 //in case one of the tweens shifted out of order, it needs to be re-inserted into the correct position in the sequence 8467 self._lock = 1; //prevent endless recursive calls - there are methods that get triggered that check duration/totalDuration when we add(). 8468 8469 _addToTimeline(self, child, start - child._delay, 1)._lock = 0; 8470 } else { 8471 prevStart = start; 8472 } 8473 8474 if (start < 0 && child._ts) { 8475 //children aren't allowed to have negative startTimes unless smoothChildTiming is true, so adjust here if one is found. 8476 max -= start; 8477 8478 if (!parent && !self._dp || parent && parent.smoothChildTiming) { 8479 self._start += start / self._ts; 8480 self._time -= start; 8481 self._tTime -= start; 8482 } 8483 8484 self.shiftChildren(-start, false, -1e999); 8485 prevStart = 0; 8486 } 8487 8488 child._end > max && child._ts && (max = child._end); 8489 child = prev; 8490 } 8491 8492 _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1); 8493 8494 self._dirty = 0; 8495 } 8496 8497 return self._tDur; 8498 }; 8499 8500 Timeline.updateRoot = function updateRoot(time) { 8501 if (_globalTimeline._ts) { 8502 _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline)); 8503 8504 _lastRenderedFrame = _ticker.frame; 8505 } 8506 8507 if (_ticker.frame >= _nextGCFrame) { 8508 _nextGCFrame += _config.autoSleep || 120; 8509 var child = _globalTimeline._first; 8510 if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) { 8511 while (child && !child._ts) { 8512 child = child._next; 8513 } 8514 8515 child || _ticker.sleep(); 8516 } 8517 } 8518 }; 8519 8520 return Timeline; 8521}(Animation); 8522 8523_setDefaults(Timeline.prototype, { 8524 _lock: 0, 8525 _hasPause: 0, 8526 _forcing: 0 8527}); 8528 8529var _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) { 8530 //note: we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus "this" would refer to the plugin. 8531 var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter), 8532 index = 0, 8533 matchIndex = 0, 8534 result, 8535 startNums, 8536 color, 8537 endNum, 8538 chunk, 8539 startNum, 8540 hasRandom, 8541 a; 8542 pt.b = start; 8543 pt.e = end; 8544 start += ""; //ensure values are strings 8545 8546 end += ""; 8547 8548 if (hasRandom = ~end.indexOf("random(")) { 8549 end = _replaceRandom(end); 8550 } 8551 8552 if (stringFilter) { 8553 a = [start, end]; 8554 stringFilter(a, target, prop); //pass an array with the starting and ending values and let the filter do whatever it needs to the values. 8555 8556 start = a[0]; 8557 end = a[1]; 8558 } 8559 8560 startNums = start.match(_complexStringNumExp) || []; 8561 8562 while (result = _complexStringNumExp.exec(end)) { 8563 endNum = result[0]; 8564 chunk = end.substring(index, result.index); 8565 8566 if (color) { 8567 color = (color + 1) % 5; 8568 } else if (chunk.substr(-5) === "rgba(") { 8569 color = 1; 8570 } 8571 8572 if (endNum !== startNums[matchIndex++]) { 8573 startNum = parseFloat(startNums[matchIndex - 1]) || 0; //these nested PropTweens are handled in a special way - we'll never actually call a render or setter method on them. We'll just loop through them in the parent complex string PropTween's render method. 8574 8575 pt._pt = { 8576 _next: pt._pt, 8577 p: chunk || matchIndex === 1 ? chunk : ",", 8578 //note: SVG spec allows omission of comma/space when a negative sign is wedged between two numbers, like 2.5-5.3 instead of 2.5,-5.3 but when tweening, the negative value may switch to positive, so we insert the comma just in case. 8579 s: startNum, 8580 c: endNum.charAt(1) === "=" ? _parseRelative(startNum, endNum) - startNum : parseFloat(endNum) - startNum, 8581 m: color && color < 4 ? Math.round : 0 8582 }; 8583 index = _complexStringNumExp.lastIndex; 8584 } 8585 } 8586 8587 pt.c = index < end.length ? end.substring(index, end.length) : ""; //we use the "c" of the PropTween to store the final part of the string (after the last number) 8588 8589 pt.fp = funcParam; 8590 8591 if (_relExp.test(end) || hasRandom) { 8592 pt.e = 0; //if the end string contains relative values or dynamic random(...) values, delete the end it so that on the final render we don't actually set it to the string with += or -= characters (forces it to use the calculated value). 8593 } 8594 8595 this._pt = pt; //start the linked list with this new PropTween. Remember, we call _addComplexStringPropTween.call(tweenInstance...) to ensure that it's scoped properly. We may call it from within a plugin too, thus "this" would refer to the plugin. 8596 8597 return pt; 8598}, 8599 _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam, optional) { 8600 _isFunction(end) && (end = end(index || 0, target, targets)); 8601 var currentValue = target[prop], 8602 parsedStart = start !== "get" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf("set") || !_isFunction(target["get" + prop.substr(3)]) ? prop : "get" + prop.substr(3)](funcParam) : target[prop](), 8603 setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc, 8604 pt; 8605 8606 if (_isString(end)) { 8607 if (~end.indexOf("random(")) { 8608 end = _replaceRandom(end); 8609 } 8610 8611 if (end.charAt(1) === "=") { 8612 pt = _parseRelative(parsedStart, end) + (getUnit(parsedStart) || 0); 8613 8614 if (pt || pt === 0) { 8615 // to avoid isNaN, like if someone passes in a value like "!= whatever" 8616 end = pt; 8617 } 8618 } 8619 } 8620 8621 if (!optional || parsedStart !== end || _forceAllPropTweens) { 8622 if (!isNaN(parsedStart * end) && end !== "") { 8623 // fun fact: any number multiplied by "" is evaluated as the number 0! 8624 pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === "boolean" ? _renderBoolean : _renderPlain, 0, setter); 8625 funcParam && (pt.fp = funcParam); 8626 modifier && pt.modifier(modifier, this, target); 8627 return this._pt = pt; 8628 } 8629 8630 !currentValue && !(prop in target) && _missingPlugin(prop, end); 8631 return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam); 8632 } 8633}, 8634 //creates a copy of the vars object and processes any function-based values (putting the resulting values directly into the copy) as well as strings with "random()" in them. It does NOT process relative values. 8635_processVars = function _processVars(vars, index, target, targets, tween) { 8636 _isFunction(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets)); 8637 8638 if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) { 8639 return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars; 8640 } 8641 8642 var copy = {}, 8643 p; 8644 8645 for (p in vars) { 8646 copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets); 8647 } 8648 8649 return copy; 8650}, 8651 _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) { 8652 var plugin, pt, ptLookup, i; 8653 8654 if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) { 8655 tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority); 8656 8657 if (tween !== _quickTween) { 8658 ptLookup = tween._ptLookup[tween._targets.indexOf(target)]; //note: we can't use tween._ptLookup[index] because for staggered tweens, the index from the fullTargets array won't match what it is in each individual tween that spawns from the stagger. 8659 8660 i = plugin._props.length; 8661 8662 while (i--) { 8663 ptLookup[plugin._props[i]] = pt; 8664 } 8665 } 8666 } 8667 8668 return plugin; 8669}, 8670 _overwritingTween, 8671 //store a reference temporarily so we can avoid overwriting itself. 8672_forceAllPropTweens, 8673 _initTween = function _initTween(tween, time, tTime) { 8674 var vars = tween.vars, 8675 ease = vars.ease, 8676 startAt = vars.startAt, 8677 immediateRender = vars.immediateRender, 8678 lazy = vars.lazy, 8679 onUpdate = vars.onUpdate, 8680 onUpdateParams = vars.onUpdateParams, 8681 callbackScope = vars.callbackScope, 8682 runBackwards = vars.runBackwards, 8683 yoyoEase = vars.yoyoEase, 8684 keyframes = vars.keyframes, 8685 autoRevert = vars.autoRevert, 8686 dur = tween._dur, 8687 prevStartAt = tween._startAt, 8688 targets = tween._targets, 8689 parent = tween.parent, 8690 fullTargets = parent && parent.data === "nested" ? parent.vars.targets : targets, 8691 autoOverwrite = tween._overwrite === "auto" && !_suppressOverwrites, 8692 tl = tween.timeline, 8693 cleanVars, 8694 i, 8695 p, 8696 pt, 8697 target, 8698 hasPriority, 8699 gsData, 8700 harness, 8701 plugin, 8702 ptLookup, 8703 index, 8704 harnessVars, 8705 overwritten; 8706 tl && (!keyframes || !ease) && (ease = "none"); 8707 tween._ease = _parseEase(ease, _defaults.ease); 8708 tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0; 8709 8710 if (yoyoEase && tween._yoyo && !tween._repeat) { 8711 //there must have been a parent timeline with yoyo:true that is currently in its yoyo phase, so flip the eases. 8712 yoyoEase = tween._yEase; 8713 tween._yEase = tween._ease; 8714 tween._ease = yoyoEase; 8715 } 8716 8717 tween._from = !tl && !!vars.runBackwards; //nested timelines should never run backwards - the backwards-ness is in the child tweens. 8718 8719 if (!tl || keyframes && !vars.stagger) { 8720 //if there's an internal timeline, skip all the parsing because we passed that task down the chain. 8721 harness = targets[0] ? _getCache(targets[0]).harness : 0; 8722 harnessVars = harness && vars[harness.prop]; //someone may need to specify CSS-specific values AND non-CSS values, like if the element has an "x" property plus it's a standard DOM element. We allow people to distinguish by wrapping plugin-specific stuff in a css:{} object for example. 8723 8724 cleanVars = _copyExcluding(vars, _reservedProps); 8725 8726 if (prevStartAt) { 8727 prevStartAt._zTime < 0 && prevStartAt.progress(1); // in case it's a lazy startAt that hasn't rendered yet. 8728 8729 time < 0 && runBackwards && immediateRender && !autoRevert ? prevStartAt.render(-1, true) : prevStartAt.revert(runBackwards && dur ? _revertConfigNoKill : _startAtRevertConfig); // if it's a "startAt" (not "from()" or runBackwards: true), we only need to do a shallow revert (keep transforms cached in CSSPlugin) 8730 // don't just _removeFromParent(prevStartAt.render(-1, true)) because that'll leave inline styles. We're creating a new _startAt for "startAt" tweens that re-capture things to ensure that if the pre-tween values changed since the tween was created, they're recorded. 8731 8732 prevStartAt._lazy = 0; 8733 } 8734 8735 if (startAt) { 8736 _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({ 8737 data: "isStart", 8738 overwrite: false, 8739 parent: parent, 8740 immediateRender: true, 8741 lazy: !prevStartAt && _isNotFalse(lazy), 8742 startAt: null, 8743 delay: 0, 8744 onUpdate: onUpdate, 8745 onUpdateParams: onUpdateParams, 8746 callbackScope: callbackScope, 8747 stagger: 0 8748 }, startAt))); //copy the properties/values into a new object to avoid collisions, like var to = {x:0}, from = {x:500}; timeline.fromTo(e, from, to).fromTo(e, to, from); 8749 8750 8751 tween._startAt._dp = 0; // don't allow it to get put back into root timeline! Like when revert() is called and totalTime() gets set. 8752 8753 tween._startAt._sat = tween; // used in globalTime(). _sat stands for _startAtTween 8754 8755 time < 0 && (_reverting || !immediateRender && !autoRevert) && tween._startAt.revert(_revertConfigNoKill); // rare edge case, like if a render is forced in the negative direction of a non-initted tween. 8756 8757 if (immediateRender) { 8758 if (dur && time <= 0 && tTime <= 0) { 8759 // check tTime here because in the case of a yoyo tween whose playhead gets pushed to the end like tween.progress(1), we should allow it through so that the onComplete gets fired properly. 8760 time && (tween._zTime = time); 8761 return; //we skip initialization here so that overwriting doesn't occur until the tween actually begins. Otherwise, if you create several immediateRender:true tweens of the same target/properties to drop into a Timeline, the last one created would overwrite the first ones because they didn't get placed into the timeline yet before the first render occurs and kicks in overwriting. 8762 } 8763 } 8764 } else if (runBackwards && dur) { 8765 //from() tweens must be handled uniquely: their beginning values must be rendered but we don't want overwriting to occur yet (when time is still 0). Wait until the tween actually begins before doing all the routines like overwriting. At that time, we should render at the END of the tween to ensure that things initialize correctly (remember, from() tweens go backwards) 8766 if (!prevStartAt) { 8767 time && (immediateRender = false); //in rare cases (like if a from() tween runs and then is invalidate()-ed), immediateRender could be true but the initial forced-render gets skipped, so there's no need to force the render in this context when the _time is greater than 0 8768 8769 p = _setDefaults({ 8770 overwrite: false, 8771 data: "isFromStart", 8772 //we tag the tween with as "isFromStart" so that if [inside a plugin] we need to only do something at the very END of a tween, we have a way of identifying this tween as merely the one that's setting the beginning values for a "from()" tween. For example, clearProps in CSSPlugin should only get applied at the very END of a tween and without this tag, from(...{height:100, clearProps:"height", delay:1}) would wipe the height at the beginning of the tween and after 1 second, it'd kick back in. 8773 lazy: immediateRender && !prevStartAt && _isNotFalse(lazy), 8774 immediateRender: immediateRender, 8775 //zero-duration tweens render immediately by default, but if we're not specifically instructed to render this tween immediately, we should skip this and merely _init() to record the starting values (rendering them immediately would push them to completion which is wasteful in that case - we'd have to render(-1) immediately after) 8776 stagger: 0, 8777 parent: parent //ensures that nested tweens that had a stagger are handled properly, like gsap.from(".class", {y: gsap.utils.wrap([-100,100]), stagger: 0.5}) 8778 8779 }, cleanVars); 8780 harnessVars && (p[harness.prop] = harnessVars); // in case someone does something like .from(..., {css:{}}) 8781 8782 _removeFromParent(tween._startAt = Tween.set(targets, p)); 8783 8784 tween._startAt._dp = 0; // don't allow it to get put back into root timeline! 8785 8786 tween._startAt._sat = tween; // used in globalTime() 8787 8788 time < 0 && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween._startAt.render(-1, true)); 8789 tween._zTime = time; 8790 8791 if (!immediateRender) { 8792 _initTween(tween._startAt, _tinyNum, _tinyNum); //ensures that the initial values are recorded 8793 8794 } else if (!time) { 8795 return; 8796 } 8797 } 8798 } 8799 8800 tween._pt = tween._ptCache = 0; 8801 lazy = dur && _isNotFalse(lazy) || lazy && !dur; 8802 8803 for (i = 0; i < targets.length; i++) { 8804 target = targets[i]; 8805 gsData = target._gsap || _harness(targets)[i]._gsap; 8806 tween._ptLookup[i] = ptLookup = {}; 8807 _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender(); //if other tweens of the same target have recently initted but haven't rendered yet, we've got to force the render so that the starting values are correct (imagine populating a timeline with a bunch of sequential tweens and then jumping to the end) 8808 8809 index = fullTargets === targets ? i : fullTargets.indexOf(target); 8810 8811 if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) { 8812 tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority); 8813 8814 plugin._props.forEach(function (name) { 8815 ptLookup[name] = pt; 8816 }); 8817 8818 plugin.priority && (hasPriority = 1); 8819 } 8820 8821 if (!harness || harnessVars) { 8822 for (p in cleanVars) { 8823 if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) { 8824 plugin.priority && (hasPriority = 1); 8825 } else { 8826 ptLookup[p] = pt = _addPropTween.call(tween, target, p, "get", cleanVars[p], index, fullTargets, 0, vars.stringFilter); 8827 } 8828 } 8829 } 8830 8831 tween._op && tween._op[i] && tween.kill(target, tween._op[i]); 8832 8833 if (autoOverwrite && tween._pt) { 8834 _overwritingTween = tween; 8835 8836 _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(time)); // make sure the overwriting doesn't overwrite THIS tween!!! 8837 8838 8839 overwritten = !tween.parent; 8840 _overwritingTween = 0; 8841 } 8842 8843 tween._pt && lazy && (_lazyLookup[gsData.id] = 1); 8844 } 8845 8846 hasPriority && _sortPropTweensByPriority(tween); 8847 tween._onInit && tween._onInit(tween); //plugins like RoundProps must wait until ALL of the PropTweens are instantiated. In the plugin's init() function, it sets the _onInit on the tween instance. May not be pretty/intuitive, but it's fast and keeps file size down. 8848 } 8849 8850 tween._onUpdate = onUpdate; 8851 tween._initted = (!tween._op || tween._pt) && !overwritten; // if overwrittenProps resulted in the entire tween being killed, do NOT flag it as initted or else it may render for one tick. 8852 8853 keyframes && time <= 0 && tl.render(_bigNum, true, true); // if there's a 0% keyframe, it'll render in the "before" state for any staggered/delayed animations thus when the following tween initializes, it'll use the "before" state instead of the "after" state as the initial values. 8854}, 8855 _updatePropTweens = function _updatePropTweens(tween, property, value, start, startIsRelative, ratio, time) { 8856 var ptCache = (tween._pt && tween._ptCache || (tween._ptCache = {}))[property], 8857 pt, 8858 rootPT, 8859 lookup, 8860 i; 8861 8862 if (!ptCache) { 8863 ptCache = tween._ptCache[property] = []; 8864 lookup = tween._ptLookup; 8865 i = tween._targets.length; 8866 8867 while (i--) { 8868 pt = lookup[i][property]; 8869 8870 if (pt && pt.d && pt.d._pt) { 8871 // it's a plugin, so find the nested PropTween 8872 pt = pt.d._pt; 8873 8874 while (pt && pt.p !== property && pt.fp !== property) { 8875 // "fp" is functionParam for things like setting CSS variables which require .setProperty("--var-name", value) 8876 pt = pt._next; 8877 } 8878 } 8879 8880 if (!pt) { 8881 // there is no PropTween associated with that property, so we must FORCE one to be created and ditch out of this 8882 // if the tween has other properties that already rendered at new positions, we'd normally have to rewind to put them back like tween.render(0, true) before forcing an _initTween(), but that can create another edge case like tweening a timeline's progress would trigger onUpdates to fire which could move other things around. It's better to just inform users that .resetTo() should ONLY be used for tweens that already have that property. For example, you can't gsap.to(...{ y: 0 }) and then tween.restTo("x", 200) for example. 8883 _forceAllPropTweens = 1; // otherwise, when we _addPropTween() and it finds no change between the start and end values, it skips creating a PropTween (for efficiency...why tween when there's no difference?) but in this case we NEED that PropTween created so we can edit it. 8884 8885 tween.vars[property] = "+=0"; 8886 8887 _initTween(tween, time); 8888 8889 _forceAllPropTweens = 0; 8890 return 1; 8891 } 8892 8893 ptCache.push(pt); 8894 } 8895 } 8896 8897 i = ptCache.length; 8898 8899 while (i--) { 8900 rootPT = ptCache[i]; 8901 pt = rootPT._pt || rootPT; // complex values may have nested PropTweens. We only accommodate the FIRST value. 8902 8903 pt.s = (start || start === 0) && !startIsRelative ? start : pt.s + (start || 0) + ratio * pt.c; 8904 pt.c = value - pt.s; 8905 rootPT.e && (rootPT.e = _round(value) + getUnit(rootPT.e)); // mainly for CSSPlugin (end value) 8906 8907 rootPT.b && (rootPT.b = pt.s + getUnit(rootPT.b)); // (beginning value) 8908 } 8909}, 8910 _addAliasesToVars = function _addAliasesToVars(targets, vars) { 8911 var harness = targets[0] ? _getCache(targets[0]).harness : 0, 8912 propertyAliases = harness && harness.aliases, 8913 copy, 8914 p, 8915 i, 8916 aliases; 8917 8918 if (!propertyAliases) { 8919 return vars; 8920 } 8921 8922 copy = _merge({}, vars); 8923 8924 for (p in propertyAliases) { 8925 if (p in copy) { 8926 aliases = propertyAliases[p].split(","); 8927 i = aliases.length; 8928 8929 while (i--) { 8930 copy[aliases[i]] = copy[p]; 8931 } 8932 } 8933 } 8934 8935 return copy; 8936}, 8937 // parses multiple formats, like {"0%": {x: 100}, {"50%": {x: -20}} and { x: {"0%": 100, "50%": -20} }, and an "ease" can be set on any object. We populate an "allProps" object with an Array for each property, like {x: [{}, {}], y:[{}, {}]} with data for each property tween. The objects have a "t" (time), "v", (value), and "e" (ease) property. This allows us to piece together a timeline later. 8938_parseKeyframe = function _parseKeyframe(prop, obj, allProps, easeEach) { 8939 var ease = obj.ease || easeEach || "power1.inOut", 8940 p, 8941 a; 8942 8943 if (_isArray(obj)) { 8944 a = allProps[prop] || (allProps[prop] = []); // t = time (out of 100), v = value, e = ease 8945 8946 obj.forEach(function (value, i) { 8947 return a.push({ 8948 t: i / (obj.length - 1) * 100, 8949 v: value, 8950 e: ease 8951 }); 8952 }); 8953 } else { 8954 for (p in obj) { 8955 a = allProps[p] || (allProps[p] = []); 8956 p === "ease" || a.push({ 8957 t: parseFloat(prop), 8958 v: obj[p], 8959 e: ease 8960 }); 8961 } 8962 } 8963}, 8964 _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) { 8965 return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf("random(") ? _replaceRandom(value) : value; 8966}, 8967 _staggerTweenProps = _callbackNames + "repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert", 8968 _staggerPropsToSkip = {}; 8969 8970_forEachName(_staggerTweenProps + ",id,stagger,delay,duration,paused,scrollTrigger", function (name) { 8971 return _staggerPropsToSkip[name] = 1; 8972}); 8973/* 8974 * -------------------------------------------------------------------------------------- 8975 * TWEEN 8976 * -------------------------------------------------------------------------------------- 8977 */ 8978 8979 8980var Tween = /*#__PURE__*/function (_Animation2) { 8981 _inheritsLoose(Tween, _Animation2); 8982 8983 function Tween(targets, vars, position, skipInherit) { 8984 var _this3; 8985 8986 if (typeof vars === "number") { 8987 position.duration = vars; 8988 vars = position; 8989 position = null; 8990 } 8991 8992 _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this; 8993 var _this3$vars = _this3.vars, 8994 duration = _this3$vars.duration, 8995 delay = _this3$vars.delay, 8996 immediateRender = _this3$vars.immediateRender, 8997 stagger = _this3$vars.stagger, 8998 overwrite = _this3$vars.overwrite, 8999 keyframes = _this3$vars.keyframes, 9000 defaults = _this3$vars.defaults, 9001 scrollTrigger = _this3$vars.scrollTrigger, 9002 yoyoEase = _this3$vars.yoyoEase, 9003 parent = vars.parent || _globalTimeline, 9004 parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber(targets[0]) : "length" in vars) ? [targets] : toArray(targets), 9005 tl, 9006 i, 9007 copy, 9008 l, 9009 p, 9010 curTarget, 9011 staggerFunc, 9012 staggerVarsToMerge; 9013 _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn("GSAP target " + targets + " not found. https://greensock.com", !_config.nullTargetWarn) || []; 9014 _this3._ptLookup = []; //PropTween lookup. An array containing an object for each target, having keys for each tweening property 9015 9016 _this3._overwrite = overwrite; 9017 9018 if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) { 9019 vars = _this3.vars; 9020 tl = _this3.timeline = new Timeline({ 9021 data: "nested", 9022 defaults: defaults || {}, 9023 targets: parent && parent.data === "nested" ? parent.vars.targets : parsedTargets 9024 }); // we need to store the targets because for staggers and keyframes, we end up creating an individual tween for each but function-based values need to know the index and the whole Array of targets. 9025 9026 tl.kill(); 9027 tl.parent = tl._dp = _assertThisInitialized(_this3); 9028 tl._start = 0; 9029 9030 if (stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) { 9031 l = parsedTargets.length; 9032 staggerFunc = stagger && distribute(stagger); 9033 9034 if (_isObject(stagger)) { 9035 //users can pass in callbacks like onStart/onComplete in the stagger object. These should fire with each individual tween. 9036 for (p in stagger) { 9037 if (~_staggerTweenProps.indexOf(p)) { 9038 staggerVarsToMerge || (staggerVarsToMerge = {}); 9039 staggerVarsToMerge[p] = stagger[p]; 9040 } 9041 } 9042 } 9043 9044 for (i = 0; i < l; i++) { 9045 copy = _copyExcluding(vars, _staggerPropsToSkip); 9046 copy.stagger = 0; 9047 yoyoEase && (copy.yoyoEase = yoyoEase); 9048 staggerVarsToMerge && _merge(copy, staggerVarsToMerge); 9049 curTarget = parsedTargets[i]; //don't just copy duration or delay because if they're a string or function, we'd end up in an infinite loop because _isFuncOrString() would evaluate as true in the child tweens, entering this loop, etc. So we parse the value straight from vars and default to 0. 9050 9051 copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets); 9052 copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay; 9053 9054 if (!stagger && l === 1 && copy.delay) { 9055 // if someone does delay:"random(1, 5)", repeat:-1, for example, the delay shouldn't be inside the repeat. 9056 _this3._delay = delay = copy.delay; 9057 _this3._start += delay; 9058 copy.delay = 0; 9059 } 9060 9061 tl.to(curTarget, copy, staggerFunc ? staggerFunc(i, curTarget, parsedTargets) : 0); 9062 tl._ease = _easeMap.none; 9063 } 9064 9065 tl.duration() ? duration = delay = 0 : _this3.timeline = 0; // if the timeline's duration is 0, we don't need a timeline internally! 9066 } else if (keyframes) { 9067 _inheritDefaults(_setDefaults(tl.vars.defaults, { 9068 ease: "none" 9069 })); 9070 9071 tl._ease = _parseEase(keyframes.ease || vars.ease || "none"); 9072 var time = 0, 9073 a, 9074 kf, 9075 v; 9076 9077 if (_isArray(keyframes)) { 9078 keyframes.forEach(function (frame) { 9079 return tl.to(parsedTargets, frame, ">"); 9080 }); 9081 tl.duration(); // to ensure tl._dur is cached because we tap into it for performance purposes in the render() method. 9082 } else { 9083 copy = {}; 9084 9085 for (p in keyframes) { 9086 p === "ease" || p === "easeEach" || _parseKeyframe(p, keyframes[p], copy, keyframes.easeEach); 9087 } 9088 9089 for (p in copy) { 9090 a = copy[p].sort(function (a, b) { 9091 return a.t - b.t; 9092 }); 9093 time = 0; 9094 9095 for (i = 0; i < a.length; i++) { 9096 kf = a[i]; 9097 v = { 9098 ease: kf.e, 9099 duration: (kf.t - (i ? a[i - 1].t : 0)) / 100 * duration 9100 }; 9101 v[p] = kf.v; 9102 tl.to(parsedTargets, v, time); 9103 time += v.duration; 9104 } 9105 } 9106 9107 tl.duration() < duration && tl.to({}, { 9108 duration: duration - tl.duration() 9109 }); // in case keyframes didn't go to 100% 9110 } 9111 } 9112 9113 duration || _this3.duration(duration = tl.duration()); 9114 } else { 9115 _this3.timeline = 0; //speed optimization, faster lookups (no going up the prototype chain) 9116 } 9117 9118 if (overwrite === true && !_suppressOverwrites) { 9119 _overwritingTween = _assertThisInitialized(_this3); 9120 9121 _globalTimeline.killTweensOf(parsedTargets); 9122 9123 _overwritingTween = 0; 9124 } 9125 9126 _addToTimeline(parent, _assertThisInitialized(_this3), position); 9127 9128 vars.reversed && _this3.reverse(); 9129 vars.paused && _this3.paused(true); 9130 9131 if (immediateRender || !duration && !keyframes && _this3._start === _roundPrecise(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== "nested") { 9132 _this3._tTime = -_tinyNum; //forces a render without having to set the render() "force" parameter to true because we want to allow lazying by default (using the "force" parameter always forces an immediate full render) 9133 9134 _this3.render(Math.max(0, -delay) || 0); //in case delay is negative 9135 9136 } 9137 9138 scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger); 9139 return _this3; 9140 } 9141 9142 var _proto3 = Tween.prototype; 9143 9144 _proto3.render = function render(totalTime, suppressEvents, force) { 9145 var prevTime = this._time, 9146 tDur = this._tDur, 9147 dur = this._dur, 9148 isNegative = totalTime < 0, 9149 tTime = totalTime > tDur - _tinyNum && !isNegative ? tDur : totalTime < _tinyNum ? 0 : totalTime, 9150 time, 9151 pt, 9152 iteration, 9153 cycleDuration, 9154 prevIteration, 9155 isYoyo, 9156 ratio, 9157 timeline, 9158 yoyoEase; 9159 9160 if (!dur) { 9161 _renderZeroDurationTween(this, totalTime, suppressEvents, force); 9162 } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== isNegative) { 9163 //this senses if we're crossing over the start time, in which case we must record _zTime and force the render, but we do it in this lengthy conditional way for performance reasons (usually we can skip the calculations): this._initted && (this._zTime < 0) !== (totalTime < 0) 9164 time = tTime; 9165 timeline = this.timeline; 9166 9167 if (this._repeat) { 9168 //adjust the time for repeats and yoyos 9169 cycleDuration = dur + this._rDelay; 9170 9171 if (this._repeat < -1 && isNegative) { 9172 return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force); 9173 } 9174 9175 time = _roundPrecise(tTime % cycleDuration); //round to avoid floating point errors. (4 % 0.8 should be 0 but some browsers report it as 0.79999999!) 9176 9177 if (tTime === tDur) { 9178 // the tDur === tTime is for edge cases where there's a lengthy decimal on the duration and it may reach the very end but the time is rendered as not-quite-there (remember, tDur is rounded to 4 decimals whereas dur isn't) 9179 iteration = this._repeat; 9180 time = dur; 9181 } else { 9182 iteration = ~~(tTime / cycleDuration); 9183 9184 if (iteration && iteration === tTime / cycleDuration) { 9185 time = dur; 9186 iteration--; 9187 } 9188 9189 time > dur && (time = dur); 9190 } 9191 9192 isYoyo = this._yoyo && iteration & 1; 9193 9194 if (isYoyo) { 9195 yoyoEase = this._yEase; 9196 time = dur - time; 9197 } 9198 9199 prevIteration = _animationCycle(this._tTime, cycleDuration); 9200 9201 if (time === prevTime && !force && this._initted) { 9202 //could be during the repeatDelay part. No need to render and fire callbacks. 9203 this._tTime = tTime; 9204 return this; 9205 } 9206 9207 if (iteration !== prevIteration) { 9208 timeline && this._yEase && _propagateYoyoEase(timeline, isYoyo); //repeatRefresh functionality 9209 9210 if (this.vars.repeatRefresh && !isYoyo && !this._lock) { 9211 this._lock = force = 1; //force, otherwise if lazy is true, the _attemptInitTween() will return and we'll jump out and get caught bouncing on each tick. 9212 9213 this.render(_roundPrecise(cycleDuration * iteration), true).invalidate()._lock = 0; 9214 } 9215 } 9216 } 9217 9218 if (!this._initted) { 9219 if (_attemptInitTween(this, isNegative ? totalTime : time, force, suppressEvents, tTime)) { 9220 this._tTime = 0; // in constructor if immediateRender is true, we set _tTime to -_tinyNum to have the playhead cross the starting point but we can't leave _tTime as a negative number. 9221 9222 return this; 9223 } 9224 9225 if (prevTime !== this._time) { 9226 // rare edge case - during initialization, an onUpdate in the _startAt (.fromTo()) might force this tween to render at a different spot in which case we should ditch this render() call so that it doesn't revert the values. 9227 return this; 9228 } 9229 9230 if (dur !== this._dur) { 9231 // while initting, a plugin like InertiaPlugin might alter the duration, so rerun from the start to ensure everything renders as it should. 9232 return this.render(totalTime, suppressEvents, force); 9233 } 9234 } 9235 9236 this._tTime = tTime; 9237 this._time = time; 9238 9239 if (!this._act && this._ts) { 9240 this._act = 1; //as long as it's not paused, force it to be active so that if the user renders independent of the parent timeline, it'll be forced to re-render on the next tick. 9241 9242 this._lazy = 0; 9243 } 9244 9245 this.ratio = ratio = (yoyoEase || this._ease)(time / dur); 9246 9247 if (this._from) { 9248 this.ratio = ratio = 1 - ratio; 9249 } 9250 9251 if (time && !prevTime && !suppressEvents && !iteration) { 9252 _callback(this, "onStart"); 9253 9254 if (this._tTime !== tTime) { 9255 // in case the onStart triggered a render at a different spot, eject. Like if someone did animation.pause(0.5) or something inside the onStart. 9256 return this; 9257 } 9258 } 9259 9260 pt = this._pt; 9261 9262 while (pt) { 9263 pt.r(ratio, pt.d); 9264 pt = pt._next; 9265 } 9266 9267 timeline && timeline.render(totalTime < 0 ? totalTime : !time && isYoyo ? -_tinyNum : timeline._dur * timeline._ease(time / this._dur), suppressEvents, force) || this._startAt && (this._zTime = totalTime); 9268 9269 if (this._onUpdate && !suppressEvents) { 9270 isNegative && _rewindStartAt(this, totalTime, suppressEvents, force); //note: for performance reasons, we tuck this conditional logic inside less traveled areas (most tweens don't have an onUpdate). We'd just have it at the end before the onComplete, but the values should be updated before any onUpdate is called, so we ALSO put it here and then if it's not called, we do so later near the onComplete. 9271 9272 _callback(this, "onUpdate"); 9273 } 9274 9275 this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback(this, "onRepeat"); 9276 9277 if ((tTime === this._tDur || !tTime) && this._tTime === tTime) { 9278 isNegative && !this._onUpdate && _rewindStartAt(this, totalTime, true, true); 9279 (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); // don't remove if we're rendering at exactly a time of 0, as there could be autoRevert values that should get set on the next tick (if the playhead goes backward beyond the startTime, negative totalTime). Don't remove if the timeline is reversed and the playhead isn't at 0, otherwise tl.progress(1).reverse() won't work. Only remove if the playhead is at the end and timeScale is positive, or if the playhead is at 0 and the timeScale is negative. 9280 9281 if (!suppressEvents && !(isNegative && !prevTime) && (tTime || prevTime || isYoyo)) { 9282 // if prevTime and tTime are zero, we shouldn't fire the onReverseComplete. This could happen if you gsap.to(... {paused:true}).play(); 9283 _callback(this, tTime === tDur ? "onComplete" : "onReverseComplete", true); 9284 9285 this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom(); 9286 } 9287 } 9288 } 9289 9290 return this; 9291 }; 9292 9293 _proto3.targets = function targets() { 9294 return this._targets; 9295 }; 9296 9297 _proto3.invalidate = function invalidate(soft) { 9298 // "soft" gives us a way to clear out everything EXCEPT the recorded pre-"from" portion of from() tweens. Otherwise, for example, if you tween.progress(1).render(0, true true).invalidate(), the "from" values would persist and then on the next render, the from() tweens would initialize and the current value would match the "from" values, thus animate from the same value to the same value (no animation). We tap into this in ScrollTrigger's refresh() where we must push a tween to completion and then back again but honor its init state in case the tween is dependent on another tween further up on the page. 9299 (!soft || !this.vars.runBackwards) && (this._startAt = 0); 9300 this._pt = this._op = this._onUpdate = this._lazy = this.ratio = 0; 9301 this._ptLookup = []; 9302 this.timeline && this.timeline.invalidate(soft); 9303 return _Animation2.prototype.invalidate.call(this, soft); 9304 }; 9305 9306 _proto3.resetTo = function resetTo(property, value, start, startIsRelative) { 9307 _tickerActive || _ticker.wake(); 9308 this._ts || this.play(); 9309 var time = Math.min(this._dur, (this._dp._time - this._start) * this._ts), 9310 ratio; 9311 this._initted || _initTween(this, time); 9312 ratio = this._ease(time / this._dur); // don't just get tween.ratio because it may not have rendered yet. 9313 // possible future addition to allow an object with multiple values to update, like tween.resetTo({x: 100, y: 200}); At this point, it doesn't seem worth the added kb given the fact that most users will likely opt for the convenient gsap.quickTo() way of interacting with this method. 9314 // if (_isObject(property)) { // performance optimization 9315 // for (p in property) { 9316 // if (_updatePropTweens(this, p, property[p], value ? value[p] : null, start, ratio, time)) { 9317 // return this.resetTo(property, value, start, startIsRelative); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again. 9318 // } 9319 // } 9320 // } else { 9321 9322 if (_updatePropTweens(this, property, value, start, startIsRelative, ratio, time)) { 9323 return this.resetTo(property, value, start, startIsRelative); // if a PropTween wasn't found for the property, it'll get forced with a re-initialization so we need to jump out and start over again. 9324 } //} 9325 9326 9327 _alignPlayhead(this, 0); 9328 9329 this.parent || _addLinkedListItem(this._dp, this, "_first", "_last", this._dp._sort ? "_start" : 0); 9330 return this.render(0); 9331 }; 9332 9333 _proto3.kill = function kill(targets, vars) { 9334 if (vars === void 0) { 9335 vars = "all"; 9336 } 9337 9338 if (!targets && (!vars || vars === "all")) { 9339 this._lazy = this._pt = 0; 9340 return this.parent ? _interrupt(this) : this; 9341 } 9342 9343 if (this.timeline) { 9344 var tDur = this.timeline.totalDuration(); 9345 this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this); // if nothing is left tweening, interrupt. 9346 9347 this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1); // if a nested tween is killed that changes the duration, it should affect this tween's duration. We must use the ratio, though, because sometimes the internal timeline is stretched like for keyframes where they don't all add up to whatever the parent tween's duration was set to. 9348 9349 return this; 9350 } 9351 9352 var parsedTargets = this._targets, 9353 killingTargets = targets ? toArray(targets) : parsedTargets, 9354 propTweenLookup = this._ptLookup, 9355 firstPT = this._pt, 9356 overwrittenProps, 9357 curLookup, 9358 curOverwriteProps, 9359 props, 9360 p, 9361 pt, 9362 i; 9363 9364 if ((!vars || vars === "all") && _arraysMatch(parsedTargets, killingTargets)) { 9365 vars === "all" && (this._pt = 0); 9366 return _interrupt(this); 9367 } 9368 9369 overwrittenProps = this._op = this._op || []; 9370 9371 if (vars !== "all") { 9372 //so people can pass in a comma-delimited list of property names 9373 if (_isString(vars)) { 9374 p = {}; 9375 9376 _forEachName(vars, function (name) { 9377 return p[name] = 1; 9378 }); 9379 9380 vars = p; 9381 } 9382 9383 vars = _addAliasesToVars(parsedTargets, vars); 9384 } 9385 9386 i = parsedTargets.length; 9387 9388 while (i--) { 9389 if (~killingTargets.indexOf(parsedTargets[i])) { 9390 curLookup = propTweenLookup[i]; 9391 9392 if (vars === "all") { 9393 overwrittenProps[i] = vars; 9394 props = curLookup; 9395 curOverwriteProps = {}; 9396 } else { 9397 curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {}; 9398 props = vars; 9399 } 9400 9401 for (p in props) { 9402 pt = curLookup && curLookup[p]; 9403 9404 if (pt) { 9405 if (!("kill" in pt.d) || pt.d.kill(p) === true) { 9406 _removeLinkedListItem(this, pt, "_pt"); 9407 } 9408 9409 delete curLookup[p]; 9410 } 9411 9412 if (curOverwriteProps !== "all") { 9413 curOverwriteProps[p] = 1; 9414 } 9415 } 9416 } 9417 } 9418 9419 this._initted && !this._pt && firstPT && _interrupt(this); //if all tweening properties are killed, kill the tween. Without this line, if there's a tween with multiple targets and then you killTweensOf() each target individually, the tween would technically still remain active and fire its onComplete even though there aren't any more properties tweening. 9420 9421 return this; 9422 }; 9423 9424 Tween.to = function to(targets, vars) { 9425 return new Tween(targets, vars, arguments[2]); 9426 }; 9427 9428 Tween.from = function from(targets, vars) { 9429 return _createTweenType(1, arguments); 9430 }; 9431 9432 Tween.delayedCall = function delayedCall(delay, callback, params, scope) { 9433 return new Tween(callback, 0, { 9434 immediateRender: false, 9435 lazy: false, 9436 overwrite: false, 9437 delay: delay, 9438 onComplete: callback, 9439 onReverseComplete: callback, 9440 onCompleteParams: params, 9441 onReverseCompleteParams: params, 9442 callbackScope: scope 9443 }); // we must use onReverseComplete too for things like timeline.add(() => {...}) which should be triggered in BOTH directions (forward and reverse) 9444 }; 9445 9446 Tween.fromTo = function fromTo(targets, fromVars, toVars) { 9447 return _createTweenType(2, arguments); 9448 }; 9449 9450 Tween.set = function set(targets, vars) { 9451 vars.duration = 0; 9452 vars.repeatDelay || (vars.repeat = 0); 9453 return new Tween(targets, vars); 9454 }; 9455 9456 Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) { 9457 return _globalTimeline.killTweensOf(targets, props, onlyActive); 9458 }; 9459 9460 return Tween; 9461}(Animation); 9462 9463_setDefaults(Tween.prototype, { 9464 _targets: [], 9465 _lazy: 0, 9466 _startAt: 0, 9467 _op: 0, 9468 _onInit: 0 9469}); //add the pertinent timeline methods to Tween instances so that users can chain conveniently and create a timeline automatically. (removed due to concerns that it'd ultimately add to more confusion especially for beginners) 9470// _forEachName("to,from,fromTo,set,call,add,addLabel,addPause", name => { 9471// Tween.prototype[name] = function() { 9472// let tl = new Timeline(); 9473// return _addToTimeline(tl, this)[name].apply(tl, toArray(arguments)); 9474// } 9475// }); 9476//for backward compatibility. Leverage the timeline calls. 9477 9478 9479_forEachName("staggerTo,staggerFrom,staggerFromTo", function (name) { 9480 Tween[name] = function () { 9481 var tl = new Timeline(), 9482 params = _slice.call(arguments, 0); 9483 9484 params.splice(name === "staggerFromTo" ? 5 : 4, 0, 0); 9485 return tl[name].apply(tl, params); 9486 }; 9487}); 9488/* 9489 * -------------------------------------------------------------------------------------- 9490 * PROPTWEEN 9491 * -------------------------------------------------------------------------------------- 9492 */ 9493 9494 9495var _setterPlain = function _setterPlain(target, property, value) { 9496 return target[property] = value; 9497}, 9498 _setterFunc = function _setterFunc(target, property, value) { 9499 return target[property](value); 9500}, 9501 _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) { 9502 return target[property](data.fp, value); 9503}, 9504 _setterAttribute = function _setterAttribute(target, property, value) { 9505 return target.setAttribute(property, value); 9506}, 9507 _getSetter = function _getSetter(target, property) { 9508 return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain; 9509}, 9510 _renderPlain = function _renderPlain(ratio, data) { 9511 return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1000000) / 1000000, data); 9512}, 9513 _renderBoolean = function _renderBoolean(ratio, data) { 9514 return data.set(data.t, data.p, !!(data.s + data.c * ratio), data); 9515}, 9516 _renderComplexString = function _renderComplexString(ratio, data) { 9517 var pt = data._pt, 9518 s = ""; 9519 9520 if (!ratio && data.b) { 9521 //b = beginning string 9522 s = data.b; 9523 } else if (ratio === 1 && data.e) { 9524 //e = ending string 9525 s = data.e; 9526 } else { 9527 while (pt) { 9528 s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s; //we use the "p" property for the text inbetween (like a suffix). And in the context of a complex string, the modifier (m) is typically just Math.round(), like for RGB colors. 9529 9530 pt = pt._next; 9531 } 9532 9533 s += data.c; //we use the "c" of the PropTween to store the final chunk of non-numeric text. 9534 } 9535 9536 data.set(data.t, data.p, s, data); 9537}, 9538 _renderPropTweens = function _renderPropTweens(ratio, data) { 9539 var pt = data._pt; 9540 9541 while (pt) { 9542 pt.r(ratio, pt.d); 9543 pt = pt._next; 9544 } 9545}, 9546 _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) { 9547 var pt = this._pt, 9548 next; 9549 9550 while (pt) { 9551 next = pt._next; 9552 pt.p === property && pt.modifier(modifier, tween, target); 9553 pt = next; 9554 } 9555}, 9556 _killPropTweensOf = function _killPropTweensOf(property) { 9557 var pt = this._pt, 9558 hasNonDependentRemaining, 9559 next; 9560 9561 while (pt) { 9562 next = pt._next; 9563 9564 if (pt.p === property && !pt.op || pt.op === property) { 9565 _removeLinkedListItem(this, pt, "_pt"); 9566 } else if (!pt.dep) { 9567 hasNonDependentRemaining = 1; 9568 } 9569 9570 pt = next; 9571 } 9572 9573 return !hasNonDependentRemaining; 9574}, 9575 _setterWithModifier = function _setterWithModifier(target, property, value, data) { 9576 data.mSet(target, property, data.m.call(data.tween, value, data.mt), data); 9577}, 9578 _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) { 9579 var pt = parent._pt, 9580 next, 9581 pt2, 9582 first, 9583 last; //sorts the PropTween linked list in order of priority because some plugins need to do their work after ALL of the PropTweens were created (like RoundPropsPlugin and ModifiersPlugin) 9584 9585 while (pt) { 9586 next = pt._next; 9587 pt2 = first; 9588 9589 while (pt2 && pt2.pr > pt.pr) { 9590 pt2 = pt2._next; 9591 } 9592 9593 if (pt._prev = pt2 ? pt2._prev : last) { 9594 pt._prev._next = pt; 9595 } else { 9596 first = pt; 9597 } 9598 9599 if (pt._next = pt2) { 9600 pt2._prev = pt; 9601 } else { 9602 last = pt; 9603 } 9604 9605 pt = next; 9606 } 9607 9608 parent._pt = first; 9609}; //PropTween key: t = target, p = prop, r = renderer, d = data, s = start, c = change, op = overwriteProperty (ONLY populated when it's different than p), pr = priority, _next/_prev for the linked list siblings, set = setter, m = modifier, mSet = modifierSetter (the original setter, before a modifier was added) 9610 9611 9612var PropTween = /*#__PURE__*/function () { 9613 function PropTween(next, target, prop, start, change, renderer, data, setter, priority) { 9614 this.t = target; 9615 this.s = start; 9616 this.c = change; 9617 this.p = prop; 9618 this.r = renderer || _renderPlain; 9619 this.d = data || this; 9620 this.set = setter || _setterPlain; 9621 this.pr = priority || 0; 9622 this._next = next; 9623 9624 if (next) { 9625 next._prev = this; 9626 } 9627 } 9628 9629 var _proto4 = PropTween.prototype; 9630 9631 _proto4.modifier = function modifier(func, tween, target) { 9632 this.mSet = this.mSet || this.set; //in case it was already set (a PropTween can only have one modifier) 9633 9634 this.set = _setterWithModifier; 9635 this.m = func; 9636 this.mt = target; //modifier target 9637 9638 this.tween = tween; 9639 }; 9640 9641 return PropTween; 9642}(); //Initialization tasks 9643 9644_forEachName(_callbackNames + "parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger", function (name) { 9645 return _reservedProps[name] = 1; 9646}); 9647 9648_globals.TweenMax = _globals.TweenLite = Tween; 9649_globals.TimelineLite = _globals.TimelineMax = Timeline; 9650_globalTimeline = new Timeline({ 9651 sortChildren: false, 9652 defaults: _defaults, 9653 autoRemoveChildren: true, 9654 id: "root", 9655 smoothChildTiming: true 9656}); 9657_config.stringFilter = _colorStringFilter; 9658 9659var _media = [], 9660 _listeners = {}, 9661 _emptyArray = [], 9662 _lastMediaTime = 0, 9663 _contextID = 0, 9664 _dispatch = function _dispatch(type) { 9665 return (_listeners[type] || _emptyArray).map(function (f) { 9666 return f(); 9667 }); 9668}, 9669 _onMediaChange = function _onMediaChange() { 9670 var time = Date.now(), 9671 matches = []; 9672 9673 if (time - _lastMediaTime > 2) { 9674 _dispatch("matchMediaInit"); 9675 9676 _media.forEach(function (c) { 9677 var queries = c.queries, 9678 conditions = c.conditions, 9679 match, 9680 p, 9681 anyMatch, 9682 toggled; 9683 9684 for (p in queries) { 9685 match = _win.matchMedia(queries[p]).matches; // Firefox doesn't update the "matches" property of the MediaQueryList object correctly - it only does so as it calls its change handler - so we must re-create a media query here to ensure it's accurate. 9686 9687 match && (anyMatch = 1); 9688 9689 if (match !== conditions[p]) { 9690 conditions[p] = match; 9691 toggled = 1; 9692 } 9693 } 9694 9695 if (toggled) { 9696 c.revert(); 9697 anyMatch && matches.push(c); 9698 } 9699 }); 9700 9701 _dispatch("matchMediaRevert"); 9702 9703 matches.forEach(function (c) { 9704 return c.onMatch(c); 9705 }); 9706 _lastMediaTime = time; 9707 9708 _dispatch("matchMedia"); 9709 } 9710}; 9711 9712var Context = /*#__PURE__*/function () { 9713 function Context(func, scope) { 9714 this.selector = scope && selector(scope); 9715 this.data = []; 9716 this._r = []; // returned/cleanup functions 9717 9718 this.isReverted = false; 9719 this.id = _contextID++; // to work around issues that frameworks like Vue cause by making things into Proxies which make it impossible to do something like _media.indexOf(this) because "this" would no longer refer to the Context instance itself - it'd refer to a Proxy! We needed a way to identify the context uniquely 9720 9721 func && this.add(func); 9722 } 9723 9724 var _proto5 = Context.prototype; 9725 9726 _proto5.add = function add(name, func, scope) { 9727 // possible future addition if we need the ability to add() an animation to a context and for whatever reason cannot create that animation inside of a context.add(() => {...}) function. 9728 // if (name && _isFunction(name.revert)) { 9729 // this.data.push(name); 9730 // return (name._ctx = this); 9731 // } 9732 if (_isFunction(name)) { 9733 scope = func; 9734 func = name; 9735 name = _isFunction; 9736 } 9737 9738 var self = this, 9739 f = function f() { 9740 var prev = _context, 9741 prevSelector = self.selector, 9742 result; 9743 prev && prev !== self && prev.data.push(self); 9744 scope && (self.selector = selector(scope)); 9745 _context = self; 9746 result = func.apply(self, arguments); 9747 _isFunction(result) && self._r.push(result); 9748 _context = prev; 9749 self.selector = prevSelector; 9750 self.isReverted = false; 9751 return result; 9752 }; 9753 9754 self.last = f; 9755 return name === _isFunction ? f(self) : name ? self[name] = f : f; 9756 }; 9757 9758 _proto5.ignore = function ignore(func) { 9759 var prev = _context; 9760 _context = null; 9761 func(this); 9762 _context = prev; 9763 }; 9764 9765 _proto5.getTweens = function getTweens() { 9766 var a = []; 9767 this.data.forEach(function (e) { 9768 return e instanceof Context ? a.push.apply(a, e.getTweens()) : e instanceof Tween && !(e.parent && e.parent.data === "nested") && a.push(e); 9769 }); 9770 return a; 9771 }; 9772 9773 _proto5.clear = function clear() { 9774 this._r.length = this.data.length = 0; 9775 }; 9776 9777 _proto5.kill = function kill(revert, matchMedia) { 9778 var _this4 = this; 9779 9780 if (revert) { 9781 var tweens = this.getTweens(); 9782 this.data.forEach(function (t) { 9783 // Flip plugin tweens are very different in that they should actually be pushed to their end. The plugin replaces the timeline's .revert() method to do exactly that. But we also need to remove any of those nested tweens inside the flip timeline so that they don't get individually reverted. 9784 if (t.data === "isFlip") { 9785 t.revert(); 9786 t.getChildren(true, true, false).forEach(function (tween) { 9787 return tweens.splice(tweens.indexOf(tween), 1); 9788 }); 9789 } 9790 }); // save as an object so that we can cache the globalTime for each tween to optimize performance during the sort 9791 9792 tweens.map(function (t) { 9793 return { 9794 g: t.globalTime(0), 9795 t: t 9796 }; 9797 }).sort(function (a, b) { 9798 return b.g - a.g || -Infinity; 9799 }).forEach(function (o) { 9800 return o.t.revert(revert); 9801 }); // note: all of the _startAt tweens should be reverted in reverse order that they were created, and they'll all have the same globalTime (-1) so the " || -1" in the sort keeps the order properly. 9802 9803 this.data.forEach(function (e) { 9804 return !(e instanceof Tween) && e.revert && e.revert(revert); 9805 }); 9806 9807 this._r.forEach(function (f) { 9808 return f(revert, _this4); 9809 }); 9810 9811 this.isReverted = true; 9812 } else { 9813 this.data.forEach(function (e) { 9814 return e.kill && e.kill(); 9815 }); 9816 } 9817 9818 this.clear(); 9819 9820 if (matchMedia) { 9821 var i = _media.length; 9822 9823 while (i--) { 9824 // previously, we checked _media.indexOf(this), but some frameworks like Vue enforce Proxy objects that make it impossible to get the proper result that way, so we must use a unique ID number instead. 9825 _media[i].id === this.id && _media.splice(i, 1); 9826 } 9827 } 9828 }; 9829 9830 _proto5.revert = function revert(config) { 9831 this.kill(config || {}); 9832 }; 9833 9834 return Context; 9835}(); 9836 9837var MatchMedia = /*#__PURE__*/function () { 9838 function MatchMedia(scope) { 9839 this.contexts = []; 9840 this.scope = scope; 9841 } 9842 9843 var _proto6 = MatchMedia.prototype; 9844 9845 _proto6.add = function add(conditions, func, scope) { 9846 _isObject(conditions) || (conditions = { 9847 matches: conditions 9848 }); 9849 var context = new Context(0, scope || this.scope), 9850 cond = context.conditions = {}, 9851 mq, 9852 p, 9853 active; 9854 _context && !context.selector && (context.selector = _context.selector); // in case a context is created inside a context. Like a gsap.matchMedia() that's inside a scoped gsap.context() 9855 9856 this.contexts.push(context); 9857 func = context.add("onMatch", func); 9858 context.queries = conditions; 9859 9860 for (p in conditions) { 9861 if (p === "all") { 9862 active = 1; 9863 } else { 9864 mq = _win.matchMedia(conditions[p]); 9865 9866 if (mq) { 9867 _media.indexOf(context) < 0 && _media.push(context); 9868 (cond[p] = mq.matches) && (active = 1); 9869 mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener("change", _onMediaChange); 9870 } 9871 } 9872 } 9873 9874 active && func(context); 9875 return this; 9876 } // refresh() { 9877 // let time = _lastMediaTime, 9878 // media = _media; 9879 // _lastMediaTime = -1; 9880 // _media = this.contexts; 9881 // _onMediaChange(); 9882 // _lastMediaTime = time; 9883 // _media = media; 9884 // } 9885 ; 9886 9887 _proto6.revert = function revert(config) { 9888 this.kill(config || {}); 9889 }; 9890 9891 _proto6.kill = function kill(revert) { 9892 this.contexts.forEach(function (c) { 9893 return c.kill(revert, true); 9894 }); 9895 }; 9896 9897 return MatchMedia; 9898}(); 9899/* 9900 * -------------------------------------------------------------------------------------- 9901 * GSAP 9902 * -------------------------------------------------------------------------------------- 9903 */ 9904 9905 9906var _gsap = { 9907 registerPlugin: function registerPlugin() { 9908 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 9909 args[_key2] = arguments[_key2]; 9910 } 9911 9912 args.forEach(function (config) { 9913 return _createPlugin(config); 9914 }); 9915 }, 9916 timeline: function timeline(vars) { 9917 return new Timeline(vars); 9918 }, 9919 getTweensOf: function getTweensOf(targets, onlyActive) { 9920 return _globalTimeline.getTweensOf(targets, onlyActive); 9921 }, 9922 getProperty: function getProperty(target, property, unit, uncache) { 9923 _isString(target) && (target = toArray(target)[0]); //in case selector text or an array is passed in 9924 9925 var getter = _getCache(target || {}).get, 9926 format = unit ? _passThrough : _numericIfPossible; 9927 9928 unit === "native" && (unit = ""); 9929 return !target ? target : !property ? function (property, unit, uncache) { 9930 return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache)); 9931 } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache)); 9932 }, 9933 quickSetter: function quickSetter(target, property, unit) { 9934 target = toArray(target); 9935 9936 if (target.length > 1) { 9937 var setters = target.map(function (t) { 9938 return gsap.quickSetter(t, property, unit); 9939 }), 9940 l = setters.length; 9941 return function (value) { 9942 var i = l; 9943 9944 while (i--) { 9945 setters[i](value); 9946 } 9947 }; 9948 } 9949 9950 target = target[0] || {}; 9951 9952 var Plugin = _plugins[property], 9953 cache = _getCache(target), 9954 p = cache.harness && (cache.harness.aliases || {})[property] || property, 9955 // in case it's an alias, like "rotate" for "rotation". 9956 setter = Plugin ? function (value) { 9957 var p = new Plugin(); 9958 _quickTween._pt = 0; 9959 p.init(target, unit ? value + unit : value, _quickTween, 0, [target]); 9960 p.render(1, p); 9961 _quickTween._pt && _renderPropTweens(1, _quickTween); 9962 } : cache.set(target, p); 9963 9964 return Plugin ? setter : function (value) { 9965 return setter(target, p, unit ? value + unit : value, cache, 1); 9966 }; 9967 }, 9968 quickTo: function quickTo(target, property, vars) { 9969 var _merge2; 9970 9971 var tween = gsap.to(target, _merge((_merge2 = {}, _merge2[property] = "+=0.1", _merge2.paused = true, _merge2), vars || {})), 9972 func = function func(value, start, startIsRelative) { 9973 return tween.resetTo(property, value, start, startIsRelative); 9974 }; 9975 9976 func.tween = tween; 9977 return func; 9978 }, 9979 isTweening: function isTweening(targets) { 9980 return _globalTimeline.getTweensOf(targets, true).length > 0; 9981 }, 9982 defaults: function defaults(value) { 9983 value && value.ease && (value.ease = _parseEase(value.ease, _defaults.ease)); 9984 return _mergeDeep(_defaults, value || {}); 9985 }, 9986 config: function config(value) { 9987 return _mergeDeep(_config, value || {}); 9988 }, 9989 registerEffect: function registerEffect(_ref3) { 9990 var name = _ref3.name, 9991 effect = _ref3.effect, 9992 plugins = _ref3.plugins, 9993 defaults = _ref3.defaults, 9994 extendTimeline = _ref3.extendTimeline; 9995 (plugins || "").split(",").forEach(function (pluginName) { 9996 return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + " effect requires " + pluginName + " plugin."); 9997 }); 9998 9999 _effects[name] = function (targets, vars, tl) { 10000 return effect(toArray(targets), _setDefaults(vars || {}, defaults), tl); 10001 }; 10002 10003 if (extendTimeline) { 10004 Timeline.prototype[name] = function (targets, vars, position) { 10005 return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}, this), position); 10006 }; 10007 } 10008 }, 10009 registerEase: function registerEase(name, ease) { 10010 _easeMap[name] = _parseEase(ease); 10011 }, 10012 parseEase: function parseEase(ease, defaultEase) { 10013 return arguments.length ? _parseEase(ease, defaultEase) : _easeMap; 10014 }, 10015 getById: function getById(id) { 10016 return _globalTimeline.getById(id); 10017 }, 10018 exportRoot: function exportRoot(vars, includeDelayedCalls) { 10019 if (vars === void 0) { 10020 vars = {}; 10021 } 10022 10023 var tl = new Timeline(vars), 10024 child, 10025 next; 10026 tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming); 10027 10028 _globalTimeline.remove(tl); 10029 10030 tl._dp = 0; //otherwise it'll get re-activated when adding children and be re-introduced into _globalTimeline's linked list (then added to itself). 10031 10032 tl._time = tl._tTime = _globalTimeline._time; 10033 child = _globalTimeline._first; 10034 10035 while (child) { 10036 next = child._next; 10037 10038 if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) { 10039 _addToTimeline(tl, child, child._start - child._delay); 10040 } 10041 10042 child = next; 10043 } 10044 10045 _addToTimeline(_globalTimeline, tl, 0); 10046 10047 return tl; 10048 }, 10049 context: function context(func, scope) { 10050 return func ? new Context(func, scope) : _context; 10051 }, 10052 matchMedia: function matchMedia(scope) { 10053 return new MatchMedia(scope); 10054 }, 10055 matchMediaRefresh: function matchMediaRefresh() { 10056 return _media.forEach(function (c) { 10057 var cond = c.conditions, 10058 found, 10059 p; 10060 10061 for (p in cond) { 10062 if (cond[p]) { 10063 cond[p] = false; 10064 found = 1; 10065 } 10066 } 10067 10068 found && c.revert(); 10069 }) || _onMediaChange(); 10070 }, 10071 addEventListener: function addEventListener(type, callback) { 10072 var a = _listeners[type] || (_listeners[type] = []); 10073 ~a.indexOf(callback) || a.push(callback); 10074 }, 10075 removeEventListener: function removeEventListener(type, callback) { 10076 var a = _listeners[type], 10077 i = a && a.indexOf(callback); 10078 i >= 0 && a.splice(i, 1); 10079 }, 10080 utils: { 10081 wrap: wrap, 10082 wrapYoyo: wrapYoyo, 10083 distribute: distribute, 10084 random: random, 10085 snap: snap, 10086 normalize: normalize, 10087 getUnit: getUnit, 10088 clamp: clamp, 10089 splitColor: splitColor, 10090 toArray: toArray, 10091 selector: selector, 10092 mapRange: mapRange, 10093 pipe: pipe, 10094 unitize: unitize, 10095 interpolate: interpolate, 10096 shuffle: shuffle 10097 }, 10098 install: _install, 10099 effects: _effects, 10100 ticker: _ticker, 10101 updateRoot: Timeline.updateRoot, 10102 plugins: _plugins, 10103 globalTimeline: _globalTimeline, 10104 core: { 10105 PropTween: PropTween, 10106 globals: _addGlobal, 10107 Tween: Tween, 10108 Timeline: Timeline, 10109 Animation: Animation, 10110 getCache: _getCache, 10111 _removeLinkedListItem: _removeLinkedListItem, 10112 reverting: function reverting() { 10113 return _reverting; 10114 }, 10115 context: function context(toAdd) { 10116 if (toAdd && _context) { 10117 _context.data.push(toAdd); 10118 10119 toAdd._ctx = _context; 10120 } 10121 10122 return _context; 10123 }, 10124 suppressOverwrites: function suppressOverwrites(value) { 10125 return _suppressOverwrites = value; 10126 } 10127 } 10128}; 10129 10130_forEachName("to,from,fromTo,delayedCall,set,killTweensOf", function (name) { 10131 return _gsap[name] = Tween[name]; 10132}); 10133 10134_ticker.add(Timeline.updateRoot); 10135 10136_quickTween = _gsap.to({}, { 10137 duration: 0 10138}); // ---- EXTRA PLUGINS -------------------------------------------------------- 10139 10140var _getPluginPropTween = function _getPluginPropTween(plugin, prop) { 10141 var pt = plugin._pt; 10142 10143 while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) { 10144 pt = pt._next; 10145 } 10146 10147 return pt; 10148}, 10149 _addModifiers = function _addModifiers(tween, modifiers) { 10150 var targets = tween._targets, 10151 p, 10152 i, 10153 pt; 10154 10155 for (p in modifiers) { 10156 i = targets.length; 10157 10158 while (i--) { 10159 pt = tween._ptLookup[i][p]; 10160 10161 if (pt && (pt = pt.d)) { 10162 if (pt._pt) { 10163 // is a plugin 10164 pt = _getPluginPropTween(pt, p); 10165 } 10166 10167 pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p); 10168 } 10169 } 10170 } 10171}, 10172 _buildModifierPlugin = function _buildModifierPlugin(name, modifier) { 10173 return { 10174 name: name, 10175 rawVars: 1, 10176 //don't pre-process function-based values or "random()" strings. 10177 init: function init(target, vars, tween) { 10178 tween._onInit = function (tween) { 10179 var temp, p; 10180 10181 if (_isString(vars)) { 10182 temp = {}; 10183 10184 _forEachName(vars, function (name) { 10185 return temp[name] = 1; 10186 }); //if the user passes in a comma-delimited list of property names to roundProps, like "x,y", we round to whole numbers. 10187 10188 10189 vars = temp; 10190 } 10191 10192 if (modifier) { 10193 temp = {}; 10194 10195 for (p in vars) { 10196 temp[p] = modifier(vars[p]); 10197 } 10198 10199 vars = temp; 10200 } 10201 10202 _addModifiers(tween, vars); 10203 }; 10204 } 10205 }; 10206}; //register core plugins 10207 10208 10209var gsap = _gsap.registerPlugin({ 10210 name: "attr", 10211 init: function init(target, vars, tween, index, targets) { 10212 var p, pt, v; 10213 this.tween = tween; 10214 10215 for (p in vars) { 10216 v = target.getAttribute(p) || ""; 10217 pt = this.add(target, "setAttribute", (v || 0) + "", vars[p], index, targets, 0, 0, p); 10218 pt.op = p; 10219 pt.b = v; // record the beginning value so we can revert() 10220 10221 this._props.push(p); 10222 } 10223 }, 10224 render: function render(ratio, data) { 10225 var pt = data._pt; 10226 10227 while (pt) { 10228 _reverting ? pt.set(pt.t, pt.p, pt.b, pt) : pt.r(ratio, pt.d); // if reverting, go back to the original (pt.b) 10229 10230 pt = pt._next; 10231 } 10232 } 10233}, { 10234 name: "endArray", 10235 init: function init(target, value) { 10236 var i = value.length; 10237 10238 while (i--) { 10239 this.add(target, i, target[i] || 0, value[i], 0, 0, 0, 0, 0, 1); 10240 } 10241 } 10242}, _buildModifierPlugin("roundProps", _roundModifier), _buildModifierPlugin("modifiers"), _buildModifierPlugin("snap", snap)) || _gsap; //to prevent the core plugins from being dropped via aggressive tree shaking, we must include them in the variable declaration in this way. 10243 10244Tween.version = Timeline.version = gsap.version = "3.12.2"; 10245_coreReady = 1; 10246_windowExists() && _wake(); 10247var Power0 = _easeMap.Power0, 10248 Power1 = _easeMap.Power1, 10249 Power2 = _easeMap.Power2, 10250 Power3 = _easeMap.Power3, 10251 Power4 = _easeMap.Power4, 10252 Linear = _easeMap.Linear, 10253 Quad = _easeMap.Quad, 10254 Cubic = _easeMap.Cubic, 10255 Quart = _easeMap.Quart, 10256 Quint = _easeMap.Quint, 10257 Strong = _easeMap.Strong, 10258 Elastic = _easeMap.Elastic, 10259 Back = _easeMap.Back, 10260 SteppedEase = _easeMap.SteppedEase, 10261 Bounce = _easeMap.Bounce, 10262 Sine = _easeMap.Sine, 10263 Expo = _easeMap.Expo, 10264 Circ = _easeMap.Circ; 10265 10266 //export some internal methods/orojects for use in CSSPlugin so that we can externalize that file and allow custom builds that exclude it. 10267 10268 10269 10270/***/ }), 10271
vendor: 3,981 bytes, lines 10272-10316
10272/***/ "./node_modules/gsap/index.js": 10273/*!************************************!*\ 10274 !*** ./node_modules/gsap/index.js ***! 10275 \************************************/ 10276/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 10277 10278__webpack_require__.r(__webpack_exports__); 10279/* harmony export */ __webpack_require__.d(__webpack_exports__, { 10280/* harmony export */ Back: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Back; }, 10281/* harmony export */ Bounce: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Bounce; }, 10282/* harmony export */ CSSPlugin: function() { return /* reexport safe */ _CSSPlugin_js__WEBPACK_IMPORTED_MODULE_1__.CSSPlugin; }, 10283/* harmony export */ Circ: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Circ; }, 10284/* harmony export */ Cubic: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Cubic; }, 10285/* harmony export */ Elastic: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Elastic; }, 10286/* harmony export */ Expo: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Expo; }, 10287/* harmony export */ Linear: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Linear; }, 10288/* harmony export */ Power0: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power0; }, 10289/* harmony export */ Power1: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power1; }, 10290/* harmony export */ Power2: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power2; }, 10291/* harmony export */ Power3: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power3; }, 10292/* harmony export */ Power4: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Power4; }, 10293/* harmony export */ Quad: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Quad; }, 10294/* harmony export */ Quart: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Quart; }, 10295/* harmony export */ Quint: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Quint; }, 10296/* harmony export */ Sine: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Sine; }, 10297/* harmony export */ SteppedEase: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.SteppedEase; }, 10298/* harmony export */ Strong: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.Strong; }, 10299/* harmony export */ TimelineLite: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.TimelineLite; }, 10300/* harmony export */ TimelineMax: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.TimelineMax; }, 10301/* harmony export */ TweenLite: function() { return /* reexport safe */ _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.TweenLite; }, 10302/* harmony export */ TweenMax: function() { return /* binding */ TweenMaxWithCSS; }, 10303/* harmony export */ "default": function() { return /* binding */ gsapWithCSS; }, 10304/* harmony export */ gsap: function() { return /* binding */ gsapWithCSS; } 10305/* harmony export */ }); 10306/* harmony import */ var _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./gsap-core.js */ "./node_modules/gsap/gsap-core.js"); 10307/* harmony import */ var _CSSPlugin_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CSSPlugin.js */ "./node_modules/gsap/CSSPlugin.js"); 10308 10309 10310var gsapWithCSS = _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap.registerPlugin(_CSSPlugin_js__WEBPACK_IMPORTED_MODULE_1__.CSSPlugin) || _gsap_core_js__WEBPACK_IMPORTED_MODULE_0__.gsap, 10311 // to protect from tree shaking 10312TweenMaxWithCSS = gsapWithCSS.core.Tween; 10313 10314 10315/***/ }), 10316
vendor: 10,632 bytes, lines 10317-10332
10317/***/ "./node_modules/@studio-freight/lenis/dist/lenis.modern.mjs": 10318/*!******************************************************************!*\ 10319 !*** ./node_modules/@studio-freight/lenis/dist/lenis.modern.mjs ***! 10320 \******************************************************************/ 10321/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 10322 10323__webpack_require__.r(__webpack_exports__); 10324/* harmony export */ __webpack_require__.d(__webpack_exports__, { 10325/* harmony export */ "default": function() { return /* binding */ r; } 10326/* harmony export */ }); 10327function t(){return t=Object.assign?Object.assign.bind():function(t){for(var i=1;i<arguments.length;i++){var e=arguments[i];for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s])}return t},t.apply(this,arguments)}function i(t,i,e){return Math.max(t,Math.min(i,e))}class e{advance(t){var e;if(!this.isRunning)return;let s=!1;if(this.lerp)this.value=(o=this.value,n=this.to,(1-(r=1-Math.exp(-60*this.lerp*t)))*o+r*n),Math.round(this.value)===this.to&&(this.value=this.to,s=!0);else{this.currentTime+=t;const e=i(0,this.currentTime/this.duration,1);s=e>=1;const o=s?1:this.easing(e);this.value=this.from+(this.to-this.from)*o}var o,n,r;null==(e=this.onUpdate)||e.call(this,this.value,{completed:s}),s&&this.stop()}stop(){this.isRunning=!1}fromTo(t,i,{lerp:e=.1,duration:s=1,easing:o=(t=>t),onUpdate:n}){this.from=this.value=t,this.to=i,this.lerp=e,this.duration=s,this.easing=o,this.currentTime=0,this.isRunning=!0,this.onUpdate=n}}class s{constructor({wrapper:t,content:i,autoResize:e=!0}={}){if(this.resize=()=>{this.onWrapperResize(),this.onContentResize()},this.onWrapperResize=()=>{this.wrapper===window?(this.width=window.innerWidth,this.height=window.innerHeight):(this.width=this.wrapper.clientWidth,this.height=this.wrapper.clientHeight)},this.onContentResize=()=>{this.scrollHeight=this.content.scrollHeight,this.scrollWidth=this.content.scrollWidth},this.wrapper=t,this.content=i,e){const t=function(t,i){let e;return function(){let i=arguments,s=this;clearTimeout(e),e=setTimeout(function(){t.apply(s,i)},250)}}(this.resize);this.wrapper!==window&&(this.wrapperResizeObserver=new ResizeObserver(t),this.wrapperResizeObserver.observe(this.wrapper)),this.contentResizeObserver=new ResizeObserver(t),this.contentResizeObserver.observe(this.content)}this.resize()}destroy(){var t,i;null==(t=this.wrapperResizeObserver)||t.disconnect(),null==(i=this.contentResizeObserver)||i.disconnect()}get limit(){return{x:this.scrollWidth-this.width,y:this.scrollHeight-this.height}}}class o{constructor(){this.events={}}emit(t,...i){let e=this.events[t]||[];for(let t=0,s=e.length;t<s;t++)e[t](...i)}on(t,i){var e;return(null==(e=this.events[t])?void 0:e.push(i))||(this.events[t]=[i]),()=>{var e;this.events[t]=null==(e=this.events[t])?void 0:e.filter(t=>i!==t)}}destroy(){this.events={}}}class n{constructor(t,{wheelMultiplier:e=1,touchMultiplier:s=2,normalizeWheel:n=!1}){this.onTouchStart=t=>{const{clientX:i,clientY:e}=t.targetTouches?t.targetTouches[0]:t;this.touchStart.x=i,this.touchStart.y=e,this.lastDelta={x:0,y:0}},this.onTouchMove=t=>{const{clientX:i,clientY:e}=t.targetTouches?t.targetTouches[0]:t,s=-(i-this.touchStart.x)*this.touchMultiplier,o=-(e-this.touchStart.y)*this.touchMultiplier;this.touchStart.x=i,this.touchStart.y=e,this.lastDelta={x:s,y:o},this.emitter.emit("scroll",{type:"touch",deltaX:s,deltaY:o,event:t})},this.onTouchEnd=t=>{this.emitter.emit("scroll",{type:"touch",inertia:!0,deltaX:this.lastDelta.x,deltaY:this.lastDelta.y,event:t})},this.onWheel=t=>{let{deltaX:e,deltaY:s}=t;this.normalizeWheel&&(e=i(-100,e,100),s=i(-100,s,100)),e*=this.wheelMultiplier,s*=this.wheelMultiplier,this.emitter.emit("scroll",{type:"wheel",deltaX:e,deltaY:s,event:t})},this.element=t,this.wheelMultiplier=e,this.touchMultiplier=s,this.normalizeWheel=n,this.touchStart={x:null,y:null},this.emitter=new o,this.element.addEventListener("wheel",this.onWheel,{passive:!1}),this.element.addEventListener("touchstart",this.onTouchStart,{passive:!1}),this.element.addEventListener("touchmove",this.onTouchMove,{passive:!1}),this.element.addEventListener("touchend",this.onTouchEnd,{passive:!1})}on(t,i){return this.emitter.on(t,i)}destroy(){this.emitter.destroy(),this.element.removeEventListener("wheel",this.onWheel,{passive:!1}),this.element.removeEventListener("touchstart",this.onTouchStart,{passive:!1}),this.element.removeEventListener("touchmove",this.onTouchMove,{passive:!1}),this.element.removeEventListener("touchend",this.onTouchEnd,{passive:!1})}}class r{constructor({wrapper:i=window,content:r=document.documentElement,wheelEventsTarget:l=i,smoothWheel:h=!0,smoothTouch:a=!1,syncTouch:c=!1,syncTouchLerp:u=.1,__iosNoInertiaSyncTouchLerp:p=.4,touchInertiaMultiplier:m=35,duration:d,easing:v=(t=>Math.min(1,1.001-Math.pow(2,-10*t))),lerp:g=d&&.1,infinite:S=!1,orientation:w="vertical",gestureOrientation:f="vertical",touchMultiplier:y=1,wheelMultiplier:T=1,normalizeWheel:z=!1,autoResize:M=!0}={}){this.onVirtualScroll=({type:i,inertia:e,deltaX:s,deltaY:o,event:n})=>{if(n.ctrlKey)return;const r="touch"===i,l="wheel"===i;if("vertical"===this.options.gestureOrientation&&0===o||"horizontal"===this.options.gestureOrientation&&0===s||r&&"vertical"===this.options.gestureOrientation&&0===this.scroll&&!this.options.infinite&&o<=0)return;if(n.composedPath().find(t=>(null==t||null==t.hasAttribute?void 0:t.hasAttribute("data-lenis-prevent"))||r&&(null==t||null==t.hasAttribute?void 0:t.hasAttribute("data-lenis-prevent-touch"))||l&&(null==t||null==t.hasAttribute?void 0:t.hasAttribute("data-lenis-prevent-wheel"))))return;if(this.isStopped||this.isLocked)return void n.preventDefault();if(this.isSmooth=(this.options.smoothTouch||this.options.syncTouch)&&r||this.options.smoothWheel&&l,!this.isSmooth)return this.isScrolling=!1,void this.animate.stop();n.preventDefault();let h=o;"both"===this.options.gestureOrientation?h=Math.abs(o)>Math.abs(s)?o:s:"horizontal"===this.options.gestureOrientation&&(h=s);const a=r&&this.options.syncTouch,c=r&&e&&Math.abs(h)>1;c&&(h=this.velocity*this.options.touchInertiaMultiplier),this.scrollTo(this.targetScroll+h,t({programmatic:!1},a&&{lerp:c?this.syncTouchLerp:this.options.__iosNoInertiaSyncTouchLerp}))},this.onScroll=()=>{if(!this.isScrolling){const t=this.animatedScroll;this.animatedScroll=this.targetScroll=this.actualScroll,this.velocity=0,this.direction=Math.sign(this.animatedScroll-t),this.emit()}},window.lenisVersion="1.0.19",i!==document.documentElement&&i!==document.body||(i=window),this.options={wrapper:i,content:r,wheelEventsTarget:l,smoothWheel:h,smoothTouch:a,syncTouch:c,syncTouchLerp:u,__iosNoInertiaSyncTouchLerp:p,touchInertiaMultiplier:m,duration:d,easing:v,lerp:g,infinite:S,gestureOrientation:f,orientation:w,touchMultiplier:y,wheelMultiplier:T,normalizeWheel:z,autoResize:M},this.dimensions=new s({wrapper:i,content:r,autoResize:M}),this.rootElement.classList.add("lenis"),this.velocity=0,this.isStopped=!1,this.isSmooth=h||a,this.isScrolling=!1,this.targetScroll=this.animatedScroll=this.actualScroll,this.animate=new e,this.emitter=new o,this.options.wrapper.addEventListener("scroll",this.onScroll,{passive:!1}),this.virtualScroll=new n(l,{touchMultiplier:y,wheelMultiplier:T,normalizeWheel:z}),this.virtualScroll.on("scroll",this.onVirtualScroll)}destroy(){this.emitter.destroy(),this.options.wrapper.removeEventListener("scroll",this.onScroll,{passive:!1}),this.virtualScroll.destroy(),this.dimensions.destroy(),this.rootElement.classList.remove("lenis"),this.rootElement.classList.remove("lenis-smooth"),this.rootElement.classList.remove("lenis-scrolling"),this.rootElement.classList.remove("lenis-stopped")}on(t,i){return this.emitter.on(t,i)}off(t,i){var e;this.emitter.events[t]=null==(e=this.emitter.events[t])?void 0:e.filter(t=>i!==t)}setScroll(t){this.isHorizontal?this.rootElement.scrollLeft=t:this.rootElement.scrollTop=t}resize(){this.dimensions.resize()}emit(){this.emitter.emit("scroll",this)}reset(){this.isLocked=!1,this.isScrolling=!1,this.velocity=0,this.animate.stop()}start(){this.isStopped=!1,this.reset()}stop(){this.isStopped=!0,this.animate.stop(),this.reset()}raf(t){const i=t-(this.time||t);this.time=t,this.animate.advance(.001*i)}scrollTo(t,{offset:e=0,immediate:s=!1,lock:o=!1,duration:n=this.options.duration,easing:r=this.options.easing,lerp:l=!n&&this.options.lerp,onComplete:h=null,force:a=!1,programmatic:c=!0}={}){if(!this.isStopped||a){if(["top","left","start"].includes(t))t=0;else if(["bottom","right","end"].includes(t))t=this.limit;else{var u;let i;if("string"==typeof t?i=document.querySelector(t):null!=(u=t)&&u.nodeType&&(i=t),i){if(this.options.wrapper!==window){const t=this.options.wrapper.getBoundingClientRect();e-=this.isHorizontal?t.left:t.top}const s=i.getBoundingClientRect();t=(this.isHorizontal?s.left:s.top)+this.animatedScroll}}if("number"==typeof t){if(t+=e,t=Math.round(t),this.options.infinite?c&&(this.targetScroll=this.animatedScroll=this.scroll):t=i(0,t,this.limit),s)return this.animatedScroll=this.targetScroll=t,this.setScroll(this.scroll),this.reset(),this.emit(),void(null==h||h());if(!c){if(t===this.targetScroll)return;this.targetScroll=t}this.animate.fromTo(this.animatedScroll,t,{duration:n,easing:r,lerp:l,onUpdate:(t,{completed:i})=>{o&&(this.isLocked=!0),this.isScrolling=!0,this.velocity=t-this.animatedScroll,this.direction=Math.sign(this.velocity),this.animatedScroll=t,this.setScroll(this.scroll),c&&(this.targetScroll=t),i&&(o&&(this.isLocked=!1),requestAnimationFrame(()=>{this.isScrolling=!1}),this.velocity=0,null==h||h()),this.emit()}})}}}get rootElement(){return this.options.wrapper===window?this.options.content:this.options.wrapper}get limit(){return this.dimensions.limit[this.isHorizontal?"x":"y"]}get isHorizontal(){return"horizontal"===this.options.orientation}get actualScroll(){return this.isHorizontal?this.rootElement.scrollLeft:this.rootElement.scrollTop}get scroll(){return this.options.infinite?(this.animatedScroll%(t=this.limit)+t)%t:this.animatedScroll;var t}get progress(){return 0===this.limit?1:this.scroll/this.limit}get isSmooth(){return this.__isSmooth}set isSmooth(t){this.__isSmooth!==t&&(this.rootElement.classList.toggle("lenis-smooth",t),this.__isSmooth=t)}get isScrolling(){return this.__isScrolling}set isScrolling(t){this.__isScrolling!==t&&(this.rootElement.classList.toggle("lenis-scrolling",t),this.__isScrolling=t)}get isStopped(){return this.__isStopped}set isStopped(t){this.__isStopped!==t&&(this.rootElement.classList.toggle("lenis-stopped",t),this.__isStopped=t)}} 10328//# sourceMappingURL=lenis.modern.mjs.map 10329 10330 10331/***/ }), 10332
vendor: 42,630 bytes, lines 10333-11929
10333/***/ "./node_modules/dom7/dom7.esm.js": 10334/*!***************************************!*\ 10335 !*** ./node_modules/dom7/dom7.esm.js ***! 10336 \***************************************/ 10337/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 10338 10339__webpack_require__.r(__webpack_exports__); 10340/* harmony export */ __webpack_require__.d(__webpack_exports__, { 10341/* harmony export */ $: function() { return /* binding */ $; }, 10342/* harmony export */ add: function() { return /* binding */ add; }, 10343/* harmony export */ addClass: function() { return /* binding */ addClass; }, 10344/* harmony export */ animate: function() { return /* binding */ animate; }, 10345/* harmony export */ animationEnd: function() { return /* binding */ animationEnd; }, 10346/* harmony export */ append: function() { return /* binding */ append; }, 10347/* harmony export */ appendTo: function() { return /* binding */ appendTo; }, 10348/* harmony export */ attr: function() { return /* binding */ attr; }, 10349/* harmony export */ blur: function() { return /* binding */ blur; }, 10350/* harmony export */ change: function() { return /* binding */ change; }, 10351/* harmony export */ children: function() { return /* binding */ children; }, 10352/* harmony export */ click: function() { return /* binding */ click; }, 10353/* harmony export */ closest: function() { return /* binding */ closest; }, 10354/* harmony export */ css: function() { return /* binding */ css; }, 10355/* harmony export */ data: function() { return /* binding */ data; }, 10356/* harmony export */ dataset: function() { return /* binding */ dataset; }, 10357/* harmony export */ detach: function() { return /* binding */ detach; }, 10358/* harmony export */ each: function() { return /* binding */ each; }, 10359/* harmony export */ empty: function() { return /* binding */ empty; }, 10360/* harmony export */ eq: function() { return /* binding */ eq; }, 10361/* harmony export */ filter: function() { return /* binding */ filter; }, 10362/* harmony export */ find: function() { return /* binding */ find; }, 10363/* harmony export */ focus: function() { return /* binding */ focus; }, 10364/* harmony export */ focusin: function() { return /* binding */ focusin; }, 10365/* harmony export */ focusout: function() { return /* binding */ focusout; }, 10366/* harmony export */ hasClass: function() { return /* binding */ hasClass; }, 10367/* harmony export */ height: function() { return /* binding */ height; }, 10368/* harmony export */ hide: function() { return /* binding */ hide; }, 10369/* harmony export */ html: function() { return /* binding */ html; }, 10370/* harmony export */ index: function() { return /* binding */ index; }, 10371/* harmony export */ insertAfter: function() { return /* binding */ insertAfter; }, 10372/* harmony export */ insertBefore: function() { return /* binding */ insertBefore; }, 10373/* harmony export */ is: function() { return /* binding */ is; }, 10374/* harmony export */ keydown: function() { return /* binding */ keydown; }, 10375/* harmony export */ keypress: function() { return /* binding */ keypress; }, 10376/* harmony export */ keyup: function() { return /* binding */ keyup; }, 10377/* harmony export */ mousedown: function() { return /* binding */ mousedown; }, 10378/* harmony export */ mouseenter: function() { return /* binding */ mouseenter; }, 10379/* harmony export */ mouseleave: function() { return /* binding */ mouseleave; }, 10380/* harmony export */ mousemove: function() { return /* binding */ mousemove; }, 10381/* harmony export */ mouseout: function() { return /* binding */ mouseout; }, 10382/* harmony export */ mouseover: function() { return /* binding */ mouseover; }, 10383/* harmony export */ mouseup: function() { return /* binding */ mouseup; }, 10384/* harmony export */ next: function() { return /* binding */ next; }, 10385/* harmony export */ nextAll: function() { return /* binding */ nextAll; }, 10386/* harmony export */ off: function() { return /* binding */ off; }, 10387/* harmony export */ offset: function() { return /* binding */ offset; }, 10388/* harmony export */ on: function() { return /* binding */ on; }, 10389/* harmony export */ once: function() { return /* binding */ once; }, 10390/* harmony export */ outerHeight: function() { return /* binding */ outerHeight; }, 10391/* harmony export */ outerWidth: function() { return /* binding */ outerWidth; }, 10392/* harmony export */ parent: function() { return /* binding */ parent; }, 10393/* harmony export */ parents: function() { return /* binding */ parents; }, 10394/* harmony export */ prepend: function() { return /* binding */ prepend; }, 10395/* harmony export */ prependTo: function() { return /* binding */ prependTo; }, 10396/* harmony export */ prev: function() { return /* binding */ prev; }, 10397/* harmony export */ prevAll: function() { return /* binding */ prevAll; }, 10398/* harmony export */ prop: function() { return /* binding */ prop; }, 10399/* harmony export */ remove: function() { return /* binding */ remove; }, 10400/* harmony export */ removeAttr: function() { return /* binding */ removeAttr; }, 10401/* harmony export */ removeClass: function() { return /* binding */ removeClass; }, 10402/* harmony export */ removeData: function() { return /* binding */ removeData; }, 10403/* harmony export */ resize: function() { return /* binding */ resize; }, 10404/* harmony export */ scroll: function() { return /* binding */ scroll; }, 10405/* harmony export */ scrollLeft: function() { return /* binding */ scrollLeft; }, 10406/* harmony export */ scrollTo: function() { return /* binding */ scrollTo; }, 10407/* harmony export */ scrollTop: function() { return /* binding */ scrollTop; }, 10408/* harmony export */ show: function() { return /* binding */ show; }, 10409/* harmony export */ siblings: function() { return /* binding */ siblings; }, 10410/* harmony export */ stop: function() { return /* binding */ stop; }, 10411/* harmony export */ styles: function() { return /* binding */ styles; }, 10412/* harmony export */ submit: function() { return /* binding */ submit; }, 10413/* harmony export */ text: function() { return /* binding */ text; }, 10414/* harmony export */ toggleClass: function() { return /* binding */ toggleClass; }, 10415/* harmony export */ touchend: function() { return /* binding */ touchend; }, 10416/* harmony export */ touchmove: function() { return /* binding */ touchmove; }, 10417/* harmony export */ touchstart: function() { return /* binding */ touchstart; }, 10418/* harmony export */ transform: function() { return /* binding */ transform; }, 10419/* harmony export */ transition: function() { return /* binding */ transition; }, 10420/* harmony export */ transitionEnd: function() { return /* binding */ transitionEnd; }, 10421/* harmony export */ transitionStart: function() { return /* binding */ transitionStart; }, 10422/* harmony export */ trigger: function() { return /* binding */ trigger; }, 10423/* harmony export */ val: function() { return /* binding */ val; }, 10424/* harmony export */ value: function() { return /* binding */ value; }, 10425/* harmony export */ width: function() { return /* binding */ width; } 10426/* harmony export */ }); 10427/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 10428/** 10429 * Dom7 4.0.6 10430 * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API 10431 * https://framework7.io/docs/dom7.html 10432 * 10433 * Copyright 2023, Vladimir Kharlampidi 10434 * 10435 * Licensed under MIT 10436 * 10437 * Released on: February 2, 2023 10438 */ 10439 10440 10441/* eslint-disable no-proto */ 10442function makeReactive(obj) { 10443 const proto = obj.__proto__; 10444 Object.defineProperty(obj, '__proto__', { 10445 get() { 10446 return proto; 10447 }, 10448 10449 set(value) { 10450 proto.__proto__ = value; 10451 } 10452 10453 }); 10454} 10455 10456class Dom7 extends Array { 10457 constructor(items) { 10458 if (typeof items === 'number') { 10459 super(items); 10460 } else { 10461 super(...(items || [])); 10462 makeReactive(this); 10463 } 10464 } 10465 10466} 10467 10468function arrayFlat(arr = []) { 10469 const res = []; 10470 arr.forEach(el => { 10471 if (Array.isArray(el)) { 10472 res.push(...arrayFlat(el)); 10473 } else { 10474 res.push(el); 10475 } 10476 }); 10477 return res; 10478} 10479function arrayFilter(arr, callback) { 10480 return Array.prototype.filter.call(arr, callback); 10481} 10482function arrayUnique(arr) { 10483 const uniqueArray = []; 10484 10485 for (let i = 0; i < arr.length; i += 1) { 10486 if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]); 10487 } 10488 10489 return uniqueArray; 10490} 10491function toCamelCase(string) { 10492 return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase()); 10493} 10494 10495// eslint-disable-next-line 10496 10497function qsa(selector, context) { 10498 if (typeof selector !== 'string') { 10499 return [selector]; 10500 } 10501 10502 const a = []; 10503 const res = context.querySelectorAll(selector); 10504 10505 for (let i = 0; i < res.length; i += 1) { 10506 a.push(res[i]); 10507 } 10508 10509 return a; 10510} 10511 10512function $(selector, context) { 10513 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 10514 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 10515 let arr = []; 10516 10517 if (!context && selector instanceof Dom7) { 10518 return selector; 10519 } 10520 10521 if (!selector) { 10522 return new Dom7(arr); 10523 } 10524 10525 if (typeof selector === 'string') { 10526 const html = selector.trim(); 10527 10528 if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) { 10529 let toCreate = 'div'; 10530 if (html.indexOf('<li') === 0) toCreate = 'ul'; 10531 if (html.indexOf('<tr') === 0) toCreate = 'tbody'; 10532 if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr'; 10533 if (html.indexOf('<tbody') === 0) toCreate = 'table'; 10534 if (html.indexOf('<option') === 0) toCreate = 'select'; 10535 const tempParent = document.createElement(toCreate); 10536 tempParent.innerHTML = html; 10537 10538 for (let i = 0; i < tempParent.childNodes.length; i += 1) { 10539 arr.push(tempParent.childNodes[i]); 10540 } 10541 } else { 10542 arr = qsa(selector.trim(), context || document); 10543 } // arr = qsa(selector, document); 10544 10545 } else if (selector.nodeType || selector === window || selector === document) { 10546 arr.push(selector); 10547 } else if (Array.isArray(selector)) { 10548 if (selector instanceof Dom7) return selector; 10549 arr = selector; 10550 } 10551 10552 return new Dom7(arrayUnique(arr)); 10553} 10554 10555$.fn = Dom7.prototype; 10556 10557// eslint-disable-next-line 10558 10559function addClass(...classes) { 10560 const classNames = arrayFlat(classes.map(c => c.split(' '))); 10561 this.forEach(el => { 10562 el.classList.add(...classNames); 10563 }); 10564 return this; 10565} 10566 10567function removeClass(...classes) { 10568 const classNames = arrayFlat(classes.map(c => c.split(' '))); 10569 this.forEach(el => { 10570 el.classList.remove(...classNames); 10571 }); 10572 return this; 10573} 10574 10575function toggleClass(...classes) { 10576 const classNames = arrayFlat(classes.map(c => c.split(' '))); 10577 this.forEach(el => { 10578 classNames.forEach(className => { 10579 el.classList.toggle(className); 10580 }); 10581 }); 10582} 10583 10584function hasClass(...classes) { 10585 const classNames = arrayFlat(classes.map(c => c.split(' '))); 10586 return arrayFilter(this, el => { 10587 return classNames.filter(className => el.classList.contains(className)).length > 0; 10588 }).length > 0; 10589} 10590 10591function attr(attrs, value) { 10592 if (arguments.length === 1 && typeof attrs === 'string') { 10593 // Get attr 10594 if (this[0]) return this[0].getAttribute(attrs); 10595 return undefined; 10596 } // Set attrs 10597 10598 10599 for (let i = 0; i < this.length; i += 1) { 10600 if (arguments.length === 2) { 10601 // String 10602 this[i].setAttribute(attrs, value); 10603 } else { 10604 // Object 10605 for (const attrName in attrs) { 10606 this[i][attrName] = attrs[attrName]; 10607 this[i].setAttribute(attrName, attrs[attrName]); 10608 } 10609 } 10610 } 10611 10612 return this; 10613} 10614 10615function removeAttr(attr) { 10616 for (let i = 0; i < this.length; i += 1) { 10617 this[i].removeAttribute(attr); 10618 } 10619 10620 return this; 10621} 10622 10623function prop(props, value) { 10624 if (arguments.length === 1 && typeof props === 'string') { 10625 // Get prop 10626 if (this[0]) return this[0][props]; 10627 } else { 10628 // Set props 10629 for (let i = 0; i < this.length; i += 1) { 10630 if (arguments.length === 2) { 10631 // String 10632 this[i][props] = value; 10633 } else { 10634 // Object 10635 for (const propName in props) { 10636 this[i][propName] = props[propName]; 10637 } 10638 } 10639 } 10640 10641 return this; 10642 } 10643 10644 return this; 10645} 10646 10647function data(key, value) { 10648 let el; 10649 10650 if (typeof value === 'undefined') { 10651 el = this[0]; 10652 if (!el) return undefined; // Get value 10653 10654 if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) { 10655 return el.dom7ElementDataStorage[key]; 10656 } 10657 10658 const dataKey = el.getAttribute(`data-${key}`); 10659 10660 if (dataKey) { 10661 return dataKey; 10662 } 10663 10664 return undefined; 10665 } // Set value 10666 10667 10668 for (let i = 0; i < this.length; i += 1) { 10669 el = this[i]; 10670 if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {}; 10671 el.dom7ElementDataStorage[key] = value; 10672 } 10673 10674 return this; 10675} 10676 10677function removeData(key) { 10678 for (let i = 0; i < this.length; i += 1) { 10679 const el = this[i]; 10680 10681 if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) { 10682 el.dom7ElementDataStorage[key] = null; 10683 delete el.dom7ElementDataStorage[key]; 10684 } 10685 } 10686} 10687 10688function dataset() { 10689 const el = this[0]; 10690 if (!el) return undefined; 10691 const dataset = {}; // eslint-disable-line 10692 10693 if (el.dataset) { 10694 for (const dataKey in el.dataset) { 10695 dataset[dataKey] = el.dataset[dataKey]; 10696 } 10697 } else { 10698 for (let i = 0; i < el.attributes.length; i += 1) { 10699 const attr = el.attributes[i]; 10700 10701 if (attr.name.indexOf('data-') >= 0) { 10702 dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value; 10703 } 10704 } 10705 } 10706 10707 for (const key in dataset) { 10708 if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1; 10709 } 10710 10711 return dataset; 10712} 10713 10714function val(value) { 10715 if (typeof value === 'undefined') { 10716 // get value 10717 const el = this[0]; 10718 if (!el) return undefined; 10719 10720 if (el.multiple && el.nodeName.toLowerCase() === 'select') { 10721 const values = []; 10722 10723 for (let i = 0; i < el.selectedOptions.length; i += 1) { 10724 values.push(el.selectedOptions[i].value); 10725 } 10726 10727 return values; 10728 } 10729 10730 return el.value; 10731 } // set value 10732 10733 10734 for (let i = 0; i < this.length; i += 1) { 10735 const el = this[i]; 10736 10737 if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') { 10738 for (let j = 0; j < el.options.length; j += 1) { 10739 el.options[j].selected = value.indexOf(el.options[j].value) >= 0; 10740 } 10741 } else { 10742 el.value = value; 10743 } 10744 } 10745 10746 return this; 10747} 10748 10749function value(value) { 10750 return this.val(value); 10751} 10752 10753function transform(transform) { 10754 for (let i = 0; i < this.length; i += 1) { 10755 this[i].style.transform = transform; 10756 } 10757 10758 return this; 10759} 10760 10761function transition(duration) { 10762 for (let i = 0; i < this.length; i += 1) { 10763 this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration; 10764 } 10765 10766 return this; 10767} 10768 10769function on(...args) { 10770 let [eventType, targetSelector, listener, capture] = args; 10771 10772 if (typeof args[1] === 'function') { 10773 [eventType, listener, capture] = args; 10774 targetSelector = undefined; 10775 } 10776 10777 if (!capture) capture = false; 10778 10779 function handleLiveEvent(e) { 10780 const target = e.target; 10781 if (!target) return; 10782 const eventData = e.target.dom7EventData || []; 10783 10784 if (eventData.indexOf(e) < 0) { 10785 eventData.unshift(e); 10786 } 10787 10788 if ($(target).is(targetSelector)) listener.apply(target, eventData);else { 10789 const parents = $(target).parents(); // eslint-disable-line 10790 10791 for (let k = 0; k < parents.length; k += 1) { 10792 if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData); 10793 } 10794 } 10795 } 10796 10797 function handleEvent(e) { 10798 const eventData = e && e.target ? e.target.dom7EventData || [] : []; 10799 10800 if (eventData.indexOf(e) < 0) { 10801 eventData.unshift(e); 10802 } 10803 10804 listener.apply(this, eventData); 10805 } 10806 10807 const events = eventType.split(' '); 10808 let j; 10809 10810 for (let i = 0; i < this.length; i += 1) { 10811 const el = this[i]; 10812 10813 if (!targetSelector) { 10814 for (j = 0; j < events.length; j += 1) { 10815 const event = events[j]; 10816 if (!el.dom7Listeners) el.dom7Listeners = {}; 10817 if (!el.dom7Listeners[event]) el.dom7Listeners[event] = []; 10818 el.dom7Listeners[event].push({ 10819 listener, 10820 proxyListener: handleEvent 10821 }); 10822 el.addEventListener(event, handleEvent, capture); 10823 } 10824 } else { 10825 // Live events 10826 for (j = 0; j < events.length; j += 1) { 10827 const event = events[j]; 10828 if (!el.dom7LiveListeners) el.dom7LiveListeners = {}; 10829 if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = []; 10830 el.dom7LiveListeners[event].push({ 10831 listener, 10832 proxyListener: handleLiveEvent 10833 }); 10834 el.addEventListener(event, handleLiveEvent, capture); 10835 } 10836 } 10837 } 10838 10839 return this; 10840} 10841 10842function off(...args) { 10843 let [eventType, targetSelector, listener, capture] = args; 10844 10845 if (typeof args[1] === 'function') { 10846 [eventType, listener, capture] = args; 10847 targetSelector = undefined; 10848 } 10849 10850 if (!capture) capture = false; 10851 const events = eventType.split(' '); 10852 10853 for (let i = 0; i < events.length; i += 1) { 10854 const event = events[i]; 10855 10856 for (let j = 0; j < this.length; j += 1) { 10857 const el = this[j]; 10858 let handlers; 10859 10860 if (!targetSelector && el.dom7Listeners) { 10861 handlers = el.dom7Listeners[event]; 10862 } else if (targetSelector && el.dom7LiveListeners) { 10863 handlers = el.dom7LiveListeners[event]; 10864 } 10865 10866 if (handlers && handlers.length) { 10867 for (let k = handlers.length - 1; k >= 0; k -= 1) { 10868 const handler = handlers[k]; 10869 10870 if (listener && handler.listener === listener) { 10871 el.removeEventListener(event, handler.proxyListener, capture); 10872 handlers.splice(k, 1); 10873 } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) { 10874 el.removeEventListener(event, handler.proxyListener, capture); 10875 handlers.splice(k, 1); 10876 } else if (!listener) { 10877 el.removeEventListener(event, handler.proxyListener, capture); 10878 handlers.splice(k, 1); 10879 } 10880 } 10881 } 10882 } 10883 } 10884 10885 return this; 10886} 10887 10888function once(...args) { 10889 const dom = this; 10890 let [eventName, targetSelector, listener, capture] = args; 10891 10892 if (typeof args[1] === 'function') { 10893 [eventName, listener, capture] = args; 10894 targetSelector = undefined; 10895 } 10896 10897 function onceHandler(...eventArgs) { 10898 listener.apply(this, eventArgs); 10899 dom.off(eventName, targetSelector, onceHandler, capture); 10900 10901 if (onceHandler.dom7proxy) { 10902 delete onceHandler.dom7proxy; 10903 } 10904 } 10905 10906 onceHandler.dom7proxy = listener; 10907 return dom.on(eventName, targetSelector, onceHandler, capture); 10908} 10909 10910function trigger(...args) { 10911 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 10912 const events = args[0].split(' '); 10913 const eventData = args[1]; 10914 10915 for (let i = 0; i < events.length; i += 1) { 10916 const event = events[i]; 10917 10918 for (let j = 0; j < this.length; j += 1) { 10919 const el = this[j]; 10920 10921 if (window.CustomEvent) { 10922 const evt = new window.CustomEvent(event, { 10923 detail: eventData, 10924 bubbles: true, 10925 cancelable: true 10926 }); 10927 el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0); 10928 el.dispatchEvent(evt); 10929 el.dom7EventData = []; 10930 delete el.dom7EventData; 10931 } 10932 } 10933 } 10934 10935 return this; 10936} 10937 10938function transitionStart(callback) { 10939 const dom = this; 10940 10941 function fireCallBack(e) { 10942 if (e.target !== this) return; 10943 callback.call(this, e); 10944 dom.off('transitionstart', fireCallBack); 10945 } 10946 10947 if (callback) { 10948 dom.on('transitionstart', fireCallBack); 10949 } 10950 10951 return this; 10952} 10953 10954function transitionEnd(callback) { 10955 const dom = this; 10956 10957 function fireCallBack(e) { 10958 if (e.target !== this) return; 10959 callback.call(this, e); 10960 dom.off('transitionend', fireCallBack); 10961 } 10962 10963 if (callback) { 10964 dom.on('transitionend', fireCallBack); 10965 } 10966 10967 return this; 10968} 10969 10970function animationEnd(callback) { 10971 const dom = this; 10972 10973 function fireCallBack(e) { 10974 if (e.target !== this) return; 10975 callback.call(this, e); 10976 dom.off('animationend', fireCallBack); 10977 } 10978 10979 if (callback) { 10980 dom.on('animationend', fireCallBack); 10981 } 10982 10983 return this; 10984} 10985 10986function width() { 10987 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 10988 10989 if (this[0] === window) { 10990 return window.innerWidth; 10991 } 10992 10993 if (this.length > 0) { 10994 return parseFloat(this.css('width')); 10995 } 10996 10997 return null; 10998} 10999 11000function outerWidth(includeMargins) { 11001 if (this.length > 0) { 11002 if (includeMargins) { 11003 const styles = this.styles(); 11004 return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left')); 11005 } 11006 11007 return this[0].offsetWidth; 11008 } 11009 11010 return null; 11011} 11012 11013function height() { 11014 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 11015 11016 if (this[0] === window) { 11017 return window.innerHeight; 11018 } 11019 11020 if (this.length > 0) { 11021 return parseFloat(this.css('height')); 11022 } 11023 11024 return null; 11025} 11026 11027function outerHeight(includeMargins) { 11028 if (this.length > 0) { 11029 if (includeMargins) { 11030 const styles = this.styles(); 11031 return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom')); 11032 } 11033 11034 return this[0].offsetHeight; 11035 } 11036 11037 return null; 11038} 11039 11040function offset() { 11041 if (this.length > 0) { 11042 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 11043 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 11044 const el = this[0]; 11045 const box = el.getBoundingClientRect(); 11046 const body = document.body; 11047 const clientTop = el.clientTop || body.clientTop || 0; 11048 const clientLeft = el.clientLeft || body.clientLeft || 0; 11049 const scrollTop = el === window ? window.scrollY : el.scrollTop; 11050 const scrollLeft = el === window ? window.scrollX : el.scrollLeft; 11051 return { 11052 top: box.top + scrollTop - clientTop, 11053 left: box.left + scrollLeft - clientLeft 11054 }; 11055 } 11056 11057 return null; 11058} 11059 11060function hide() { 11061 for (let i = 0; i < this.length; i += 1) { 11062 this[i].style.display = 'none'; 11063 } 11064 11065 return this; 11066} 11067 11068function show() { 11069 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 11070 11071 for (let i = 0; i < this.length; i += 1) { 11072 const el = this[i]; 11073 11074 if (el.style.display === 'none') { 11075 el.style.display = ''; 11076 } 11077 11078 if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') { 11079 // Still not visible 11080 el.style.display = 'block'; 11081 } 11082 } 11083 11084 return this; 11085} 11086 11087function styles() { 11088 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 11089 if (this[0]) return window.getComputedStyle(this[0], null); 11090 return {}; 11091} 11092 11093function css(props, value) { 11094 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 11095 let i; 11096 11097 if (arguments.length === 1) { 11098 if (typeof props === 'string') { 11099 // .css('width') 11100 if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props); 11101 } else { 11102 // .css({ width: '100px' }) 11103 for (i = 0; i < this.length; i += 1) { 11104 for (const prop in props) { 11105 this[i].style[prop] = props[prop]; 11106 } 11107 } 11108 11109 return this; 11110 } 11111 } 11112 11113 if (arguments.length === 2 && typeof props === 'string') { 11114 // .css('width', '100px') 11115 for (i = 0; i < this.length; i += 1) { 11116 this[i].style[props] = value; 11117 } 11118 11119 return this; 11120 } 11121 11122 return this; 11123} 11124 11125function each(callback) { 11126 if (!callback) return this; 11127 this.forEach((el, index) => { 11128 callback.apply(el, [el, index]); 11129 }); 11130 return this; 11131} 11132 11133function filter(callback) { 11134 const result = arrayFilter(this, callback); 11135 return $(result); 11136} 11137 11138function html(html) { 11139 if (typeof html === 'undefined') { 11140 return this[0] ? this[0].innerHTML : null; 11141 } 11142 11143 for (let i = 0; i < this.length; i += 1) { 11144 this[i].innerHTML = html; 11145 } 11146 11147 return this; 11148} 11149 11150function text(text) { 11151 if (typeof text === 'undefined') { 11152 return this[0] ? this[0].textContent.trim() : null; 11153 } 11154 11155 for (let i = 0; i < this.length; i += 1) { 11156 this[i].textContent = text; 11157 } 11158 11159 return this; 11160} 11161 11162function is(selector) { 11163 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 11164 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 11165 const el = this[0]; 11166 let compareWith; 11167 let i; 11168 if (!el || typeof selector === 'undefined') return false; 11169 11170 if (typeof selector === 'string') { 11171 if (el.matches) return el.matches(selector); 11172 if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector); 11173 if (el.msMatchesSelector) return el.msMatchesSelector(selector); 11174 compareWith = $(selector); 11175 11176 for (i = 0; i < compareWith.length; i += 1) { 11177 if (compareWith[i] === el) return true; 11178 } 11179 11180 return false; 11181 } 11182 11183 if (selector === document) { 11184 return el === document; 11185 } 11186 11187 if (selector === window) { 11188 return el === window; 11189 } 11190 11191 if (selector.nodeType || selector instanceof Dom7) { 11192 compareWith = selector.nodeType ? [selector] : selector; 11193 11194 for (i = 0; i < compareWith.length; i += 1) { 11195 if (compareWith[i] === el) return true; 11196 } 11197 11198 return false; 11199 } 11200 11201 return false; 11202} 11203 11204function index() { 11205 let child = this[0]; 11206 let i; 11207 11208 if (child) { 11209 i = 0; // eslint-disable-next-line 11210 11211 while ((child = child.previousSibling) !== null) { 11212 if (child.nodeType === 1) i += 1; 11213 } 11214 11215 return i; 11216 } 11217 11218 return undefined; 11219} 11220 11221function eq(index) { 11222 if (typeof index === 'undefined') return this; 11223 const length = this.length; 11224 11225 if (index > length - 1) { 11226 return $([]); 11227 } 11228 11229 if (index < 0) { 11230 const returnIndex = length + index; 11231 if (returnIndex < 0) return $([]); 11232 return $([this[returnIndex]]); 11233 } 11234 11235 return $([this[index]]); 11236} 11237 11238function append(...els) { 11239 let newChild; 11240 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 11241 11242 for (let k = 0; k < els.length; k += 1) { 11243 newChild = els[k]; 11244 11245 for (let i = 0; i < this.length; i += 1) { 11246 if (typeof newChild === 'string') { 11247 const tempDiv = document.createElement('div'); 11248 tempDiv.innerHTML = newChild; 11249 11250 while (tempDiv.firstChild) { 11251 this[i].appendChild(tempDiv.firstChild); 11252 } 11253 } else if (newChild instanceof Dom7) { 11254 for (let j = 0; j < newChild.length; j += 1) { 11255 this[i].appendChild(newChild[j]); 11256 } 11257 } else { 11258 this[i].appendChild(newChild); 11259 } 11260 } 11261 } 11262 11263 return this; 11264} 11265 11266function appendTo(parent) { 11267 $(parent).append(this); 11268 return this; 11269} 11270 11271function prepend(newChild) { 11272 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 11273 let i; 11274 let j; 11275 11276 for (i = 0; i < this.length; i += 1) { 11277 if (typeof newChild === 'string') { 11278 const tempDiv = document.createElement('div'); 11279 tempDiv.innerHTML = newChild; 11280 11281 for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) { 11282 this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]); 11283 } 11284 } else if (newChild instanceof Dom7) { 11285 for (j = 0; j < newChild.length; j += 1) { 11286 this[i].insertBefore(newChild[j], this[i].childNodes[0]); 11287 } 11288 } else { 11289 this[i].insertBefore(newChild, this[i].childNodes[0]); 11290 } 11291 } 11292 11293 return this; 11294} 11295 11296function prependTo(parent) { 11297 $(parent).prepend(this); 11298 return this; 11299} 11300 11301function insertBefore(selector) { 11302 const before = $(selector); 11303 11304 for (let i = 0; i < this.length; i += 1) { 11305 if (before.length === 1) { 11306 before[0].parentNode.insertBefore(this[i], before[0]); 11307 } else if (before.length > 1) { 11308 for (let j = 0; j < before.length; j += 1) { 11309 before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]); 11310 } 11311 } 11312 } 11313} 11314 11315function insertAfter(selector) { 11316 const after = $(selector); 11317 11318 for (let i = 0; i < this.length; i += 1) { 11319 if (after.length === 1) { 11320 after[0].parentNode.insertBefore(this[i], after[0].nextSibling); 11321 } else if (after.length > 1) { 11322 for (let j = 0; j < after.length; j += 1) { 11323 after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling); 11324 } 11325 } 11326 } 11327} 11328 11329function next(selector) { 11330 if (this.length > 0) { 11331 if (selector) { 11332 if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) { 11333 return $([this[0].nextElementSibling]); 11334 } 11335 11336 return $([]); 11337 } 11338 11339 if (this[0].nextElementSibling) return $([this[0].nextElementSibling]); 11340 return $([]); 11341 } 11342 11343 return $([]); 11344} 11345 11346function nextAll(selector) { 11347 const nextEls = []; 11348 let el = this[0]; 11349 if (!el) return $([]); 11350 11351 while (el.nextElementSibling) { 11352 const next = el.nextElementSibling; // eslint-disable-line 11353 11354 if (selector) { 11355 if ($(next).is(selector)) nextEls.push(next); 11356 } else nextEls.push(next); 11357 11358 el = next; 11359 } 11360 11361 return $(nextEls); 11362} 11363 11364function prev(selector) { 11365 if (this.length > 0) { 11366 const el = this[0]; 11367 11368 if (selector) { 11369 if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) { 11370 return $([el.previousElementSibling]); 11371 } 11372 11373 return $([]); 11374 } 11375 11376 if (el.previousElementSibling) return $([el.previousElementSibling]); 11377 return $([]); 11378 } 11379 11380 return $([]); 11381} 11382 11383function prevAll(selector) { 11384 const prevEls = []; 11385 let el = this[0]; 11386 if (!el) return $([]); 11387 11388 while (el.previousElementSibling) { 11389 const prev = el.previousElementSibling; // eslint-disable-line 11390 11391 if (selector) { 11392 if ($(prev).is(selector)) prevEls.push(prev); 11393 } else prevEls.push(prev); 11394 11395 el = prev; 11396 } 11397 11398 return $(prevEls); 11399} 11400 11401function siblings(selector) { 11402 return this.nextAll(selector).add(this.prevAll(selector)); 11403} 11404 11405function parent(selector) { 11406 const parents = []; // eslint-disable-line 11407 11408 for (let i = 0; i < this.length; i += 1) { 11409 if (this[i].parentNode !== null) { 11410 if (selector) { 11411 if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode); 11412 } else { 11413 parents.push(this[i].parentNode); 11414 } 11415 } 11416 } 11417 11418 return $(parents); 11419} 11420 11421function parents(selector) { 11422 const parents = []; // eslint-disable-line 11423 11424 for (let i = 0; i < this.length; i += 1) { 11425 let parent = this[i].parentNode; // eslint-disable-line 11426 11427 while (parent) { 11428 if (selector) { 11429 if ($(parent).is(selector)) parents.push(parent); 11430 } else { 11431 parents.push(parent); 11432 } 11433 11434 parent = parent.parentNode; 11435 } 11436 } 11437 11438 return $(parents); 11439} 11440 11441function closest(selector) { 11442 let closest = this; // eslint-disable-line 11443 11444 if (typeof selector === 'undefined') { 11445 return $([]); 11446 } 11447 11448 if (!closest.is(selector)) { 11449 closest = closest.parents(selector).eq(0); 11450 } 11451 11452 return closest; 11453} 11454 11455function find(selector) { 11456 const foundElements = []; 11457 11458 for (let i = 0; i < this.length; i += 1) { 11459 const found = this[i].querySelectorAll(selector); 11460 11461 for (let j = 0; j < found.length; j += 1) { 11462 foundElements.push(found[j]); 11463 } 11464 } 11465 11466 return $(foundElements); 11467} 11468 11469function children(selector) { 11470 const children = []; // eslint-disable-line 11471 11472 for (let i = 0; i < this.length; i += 1) { 11473 const childNodes = this[i].children; 11474 11475 for (let j = 0; j < childNodes.length; j += 1) { 11476 if (!selector || $(childNodes[j]).is(selector)) { 11477 children.push(childNodes[j]); 11478 } 11479 } 11480 } 11481 11482 return $(children); 11483} 11484 11485function remove() { 11486 for (let i = 0; i < this.length; i += 1) { 11487 if (this[i].parentNode) this[i].parentNode.removeChild(this[i]); 11488 } 11489 11490 return this; 11491} 11492 11493function detach() { 11494 return this.remove(); 11495} 11496 11497function add(...els) { 11498 const dom = this; 11499 let i; 11500 let j; 11501 11502 for (i = 0; i < els.length; i += 1) { 11503 const toAdd = $(els[i]); 11504 11505 for (j = 0; j < toAdd.length; j += 1) { 11506 dom.push(toAdd[j]); 11507 } 11508 } 11509 11510 return dom; 11511} 11512 11513function empty() { 11514 for (let i = 0; i < this.length; i += 1) { 11515 const el = this[i]; 11516 11517 if (el.nodeType === 1) { 11518 for (let j = 0; j < el.childNodes.length; j += 1) { 11519 if (el.childNodes[j].parentNode) { 11520 el.childNodes[j].parentNode.removeChild(el.childNodes[j]); 11521 } 11522 } 11523 11524 el.textContent = ''; 11525 } 11526 } 11527 11528 return this; 11529} 11530 11531// eslint-disable-next-line 11532 11533function scrollTo(...args) { 11534 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 11535 let [left, top, duration, easing, callback] = args; 11536 11537 if (args.length === 4 && typeof easing === 'function') { 11538 callback = easing; 11539 [left, top, duration, callback, easing] = args; 11540 } 11541 11542 if (typeof easing === 'undefined') easing = 'swing'; 11543 return this.each(function animate() { 11544 const el = this; 11545 let currentTop; 11546 let currentLeft; 11547 let maxTop; 11548 let maxLeft; 11549 let newTop; 11550 let newLeft; 11551 let scrollTop; // eslint-disable-line 11552 11553 let scrollLeft; // eslint-disable-line 11554 11555 let animateTop = top > 0 || top === 0; 11556 let animateLeft = left > 0 || left === 0; 11557 11558 if (typeof easing === 'undefined') { 11559 easing = 'swing'; 11560 } 11561 11562 if (animateTop) { 11563 currentTop = el.scrollTop; 11564 11565 if (!duration) { 11566 el.scrollTop = top; 11567 } 11568 } 11569 11570 if (animateLeft) { 11571 currentLeft = el.scrollLeft; 11572 11573 if (!duration) { 11574 el.scrollLeft = left; 11575 } 11576 } 11577 11578 if (!duration) return; 11579 11580 if (animateTop) { 11581 maxTop = el.scrollHeight - el.offsetHeight; 11582 newTop = Math.max(Math.min(top, maxTop), 0); 11583 } 11584 11585 if (animateLeft) { 11586 maxLeft = el.scrollWidth - el.offsetWidth; 11587 newLeft = Math.max(Math.min(left, maxLeft), 0); 11588 } 11589 11590 let startTime = null; 11591 if (animateTop && newTop === currentTop) animateTop = false; 11592 if (animateLeft && newLeft === currentLeft) animateLeft = false; 11593 11594 function render(time = new Date().getTime()) { 11595 if (startTime === null) { 11596 startTime = time; 11597 } 11598 11599 const progress = Math.max(Math.min((time - startTime) / duration, 1), 0); 11600 const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2; 11601 let done; 11602 if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop); 11603 if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft); 11604 11605 if (animateTop && newTop > currentTop && scrollTop >= newTop) { 11606 el.scrollTop = newTop; 11607 done = true; 11608 } 11609 11610 if (animateTop && newTop < currentTop && scrollTop <= newTop) { 11611 el.scrollTop = newTop; 11612 done = true; 11613 } 11614 11615 if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) { 11616 el.scrollLeft = newLeft; 11617 done = true; 11618 } 11619 11620 if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) { 11621 el.scrollLeft = newLeft; 11622 done = true; 11623 } 11624 11625 if (done) { 11626 if (callback) callback(); 11627 return; 11628 } 11629 11630 if (animateTop) el.scrollTop = scrollTop; 11631 if (animateLeft) el.scrollLeft = scrollLeft; 11632 window.requestAnimationFrame(render); 11633 } 11634 11635 window.requestAnimationFrame(render); 11636 }); 11637} // scrollTop(top, duration, easing, callback) { 11638 11639 11640function scrollTop(...args) { 11641 let [top, duration, easing, callback] = args; 11642 11643 if (args.length === 3 && typeof easing === 'function') { 11644 [top, duration, callback, easing] = args; 11645 } 11646 11647 const dom = this; 11648 11649 if (typeof top === 'undefined') { 11650 if (dom.length > 0) return dom[0].scrollTop; 11651 return null; 11652 } 11653 11654 return dom.scrollTo(undefined, top, duration, easing, callback); 11655} 11656 11657function scrollLeft(...args) { 11658 let [left, duration, easing, callback] = args; 11659 11660 if (args.length === 3 && typeof easing === 'function') { 11661 [left, duration, callback, easing] = args; 11662 } 11663 11664 const dom = this; 11665 11666 if (typeof left === 'undefined') { 11667 if (dom.length > 0) return dom[0].scrollLeft; 11668 return null; 11669 } 11670 11671 return dom.scrollTo(left, undefined, duration, easing, callback); 11672} 11673 11674// eslint-disable-next-line 11675 11676function animate(initialProps, initialParams) { 11677 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 11678 const els = this; 11679 const a = { 11680 props: Object.assign({}, initialProps), 11681 params: Object.assign({ 11682 duration: 300, 11683 easing: 'swing' // or 'linear' 11684 11685 /* Callbacks 11686 begin(elements) 11687 complete(elements) 11688 progress(elements, complete, remaining, start, tweenValue) 11689 */ 11690 11691 }, initialParams), 11692 elements: els, 11693 animating: false, 11694 que: [], 11695 11696 easingProgress(easing, progress) { 11697 if (easing === 'swing') { 11698 return 0.5 - Math.cos(progress * Math.PI) / 2; 11699 } 11700 11701 if (typeof easing === 'function') { 11702 return easing(progress); 11703 } 11704 11705 return progress; 11706 }, 11707 11708 stop() { 11709 if (a.frameId) { 11710 window.cancelAnimationFrame(a.frameId); 11711 } 11712 11713 a.animating = false; 11714 a.elements.each(el => { 11715 const element = el; 11716 delete element.dom7AnimateInstance; 11717 }); 11718 a.que = []; 11719 }, 11720 11721 done(complete) { 11722 a.animating = false; 11723 a.elements.each(el => { 11724 const element = el; 11725 delete element.dom7AnimateInstance; 11726 }); 11727 if (complete) complete(els); 11728 11729 if (a.que.length > 0) { 11730 const que = a.que.shift(); 11731 a.animate(que[0], que[1]); 11732 } 11733 }, 11734 11735 animate(props, params) { 11736 if (a.animating) { 11737 a.que.push([props, params]); 11738 return a; 11739 } 11740 11741 const elements = []; // Define & Cache Initials & Units 11742 11743 a.elements.each((el, index) => { 11744 let initialFullValue; 11745 let initialValue; 11746 let unit; 11747 let finalValue; 11748 let finalFullValue; 11749 if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a; 11750 elements[index] = { 11751 container: el 11752 }; 11753 Object.keys(props).forEach(prop => { 11754 initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.'); 11755 initialValue = parseFloat(initialFullValue); 11756 unit = initialFullValue.replace(initialValue, ''); 11757 finalValue = parseFloat(props[prop]); 11758 finalFullValue = props[prop] + unit; 11759 elements[index][prop] = { 11760 initialFullValue, 11761 initialValue, 11762 unit, 11763 finalValue, 11764 finalFullValue, 11765 currentValue: initialValue 11766 }; 11767 }); 11768 }); 11769 let startTime = null; 11770 let time; 11771 let elementsDone = 0; 11772 let propsDone = 0; 11773 let done; 11774 let began = false; 11775 a.animating = true; 11776 11777 function render() { 11778 time = new Date().getTime(); 11779 let progress; 11780 let easeProgress; // let el; 11781 11782 if (!began) { 11783 began = true; 11784 if (params.begin) params.begin(els); 11785 } 11786 11787 if (startTime === null) { 11788 startTime = time; 11789 } 11790 11791 if (params.progress) { 11792 // eslint-disable-next-line 11793 params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime); 11794 } 11795 11796 elements.forEach(element => { 11797 const el = element; 11798 if (done || el.done) return; 11799 Object.keys(props).forEach(prop => { 11800 if (done || el.done) return; 11801 progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0); 11802 easeProgress = a.easingProgress(params.easing, progress); 11803 const { 11804 initialValue, 11805 finalValue, 11806 unit 11807 } = el[prop]; 11808 el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue); 11809 const currentValue = el[prop].currentValue; 11810 11811 if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) { 11812 el.container.style[prop] = finalValue + unit; 11813 propsDone += 1; 11814 11815 if (propsDone === Object.keys(props).length) { 11816 el.done = true; 11817 elementsDone += 1; 11818 } 11819 11820 if (elementsDone === elements.length) { 11821 done = true; 11822 } 11823 } 11824 11825 if (done) { 11826 a.done(params.complete); 11827 return; 11828 } 11829 11830 el.container.style[prop] = currentValue + unit; 11831 }); 11832 }); 11833 if (done) return; // Then call 11834 11835 a.frameId = window.requestAnimationFrame(render); 11836 } 11837 11838 a.frameId = window.requestAnimationFrame(render); 11839 return a; 11840 } 11841 11842 }; 11843 11844 if (a.elements.length === 0) { 11845 return els; 11846 } 11847 11848 let animateInstance; 11849 11850 for (let i = 0; i < a.elements.length; i += 1) { 11851 if (a.elements[i].dom7AnimateInstance) { 11852 animateInstance = a.elements[i].dom7AnimateInstance; 11853 } else a.elements[i].dom7AnimateInstance = a; 11854 } 11855 11856 if (!animateInstance) { 11857 animateInstance = a; 11858 } 11859 11860 if (initialProps === 'stop') { 11861 animateInstance.stop(); 11862 } else { 11863 animateInstance.animate(a.props, a.params); 11864 } 11865 11866 return els; 11867} 11868 11869function stop() { 11870 const els = this; 11871 11872 for (let i = 0; i < els.length; i += 1) { 11873 if (els[i].dom7AnimateInstance) { 11874 els[i].dom7AnimateInstance.stop(); 11875 } 11876 } 11877} 11878 11879const noTrigger = 'resize scroll'.split(' '); 11880 11881function shortcut(name) { 11882 function eventHandler(...args) { 11883 if (typeof args[0] === 'undefined') { 11884 for (let i = 0; i < this.length; i += 1) { 11885 if (noTrigger.indexOf(name) < 0) { 11886 if (name in this[i]) this[i][name]();else { 11887 $(this[i]).trigger(name); 11888 } 11889 } 11890 } 11891 11892 return this; 11893 } 11894 11895 return this.on(name, ...args); 11896 } 11897 11898 return eventHandler; 11899} 11900 11901const click = shortcut('click'); 11902const blur = shortcut('blur'); 11903const focus = shortcut('focus'); 11904const focusin = shortcut('focusin'); 11905const focusout = shortcut('focusout'); 11906const keyup = shortcut('keyup'); 11907const keydown = shortcut('keydown'); 11908const keypress = shortcut('keypress'); 11909const submit = shortcut('submit'); 11910const change = shortcut('change'); 11911const mousedown = shortcut('mousedown'); 11912const mousemove = shortcut('mousemove'); 11913const mouseup = shortcut('mouseup'); 11914const mouseenter = shortcut('mouseenter'); 11915const mouseleave = shortcut('mouseleave'); 11916const mouseout = shortcut('mouseout'); 11917const mouseover = shortcut('mouseover'); 11918const touchstart = shortcut('touchstart'); 11919const touchend = shortcut('touchend'); 11920const touchmove = shortcut('touchmove'); 11921const resize = shortcut('resize'); 11922const scroll = shortcut('scroll'); 11923 11924/* harmony default export */ __webpack_exports__["default"] = ($); 11925 11926 11927 11928/***/ }), 11929
vendor: 3,993 bytes, lines 11930-12077
11930/***/ "./node_modules/js-cookie/dist/js.cookie.mjs": 11931/*!***************************************************!*\ 11932 !*** ./node_modules/js-cookie/dist/js.cookie.mjs ***! 11933 \***************************************************/ 11934/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 11935 11936__webpack_require__.r(__webpack_exports__); 11937/* harmony export */ __webpack_require__.d(__webpack_exports__, { 11938/* harmony export */ "default": function() { return /* binding */ api; } 11939/* harmony export */ }); 11940/*! js-cookie v3.0.5 | MIT */ 11941/* eslint-disable no-var */ 11942function assign (target) { 11943 for (var i = 1; i < arguments.length; i++) { 11944 var source = arguments[i]; 11945 for (var key in source) { 11946 target[key] = source[key]; 11947 } 11948 } 11949 return target 11950} 11951/* eslint-enable no-var */ 11952 11953/* eslint-disable no-var */ 11954var defaultConverter = { 11955 read: function (value) { 11956 if (value[0] === '"') { 11957 value = value.slice(1, -1); 11958 } 11959 return value.replace(/(%[\dA-F]{2})+/gi, decodeURIComponent) 11960 }, 11961 write: function (value) { 11962 return encodeURIComponent(value).replace( 11963 /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g, 11964 decodeURIComponent 11965 ) 11966 } 11967}; 11968/* eslint-enable no-var */ 11969 11970/* eslint-disable no-var */ 11971 11972function init (converter, defaultAttributes) { 11973 function set (name, value, attributes) { 11974 if (typeof document === 'undefined') { 11975 return 11976 } 11977 11978 attributes = assign({}, defaultAttributes, attributes); 11979 11980 if (typeof attributes.expires === 'number') { 11981 attributes.expires = new Date(Date.now() + attributes.expires * 864e5); 11982 } 11983 if (attributes.expires) { 11984 attributes.expires = attributes.expires.toUTCString(); 11985 } 11986 11987 name = encodeURIComponent(name) 11988 .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent) 11989 .replace(/[()]/g, escape); 11990 11991 var stringifiedAttributes = ''; 11992 for (var attributeName in attributes) { 11993 if (!attributes[attributeName]) { 11994 continue 11995 } 11996 11997 stringifiedAttributes += '; ' + attributeName; 11998 11999 if (attributes[attributeName] === true) { 12000 continue 12001 } 12002 12003 // Considers RFC 6265 section 5.2: 12004 // ... 12005 // 3. If the remaining unparsed-attributes contains a %x3B (";") 12006 // character: 12007 // Consume the characters of the unparsed-attributes up to, 12008 // not including, the first %x3B (";") character. 12009 // ... 12010 stringifiedAttributes += '=' + attributes[attributeName].split(';')[0]; 12011 } 12012 12013 return (document.cookie = 12014 name + '=' + converter.write(value, name) + stringifiedAttributes) 12015 } 12016 12017 function get (name) { 12018 if (typeof document === 'undefined' || (arguments.length && !name)) { 12019 return 12020 } 12021 12022 // To prevent the for loop in the first place assign an empty array 12023 // in case there are no cookies at all. 12024 var cookies = document.cookie ? document.cookie.split('; ') : []; 12025 var jar = {}; 12026 for (var i = 0; i < cookies.length; i++) { 12027 var parts = cookies[i].split('='); 12028 var value = parts.slice(1).join('='); 12029 12030 try { 12031 var found = decodeURIComponent(parts[0]); 12032 jar[found] = converter.read(value, found); 12033 12034 if (name === found) { 12035 break 12036 } 12037 } catch (e) {} 12038 } 12039 12040 return name ? jar[name] : jar 12041 } 12042 12043 return Object.create( 12044 { 12045 set, 12046 get, 12047 remove: function (name, attributes) { 12048 set( 12049 name, 12050 '', 12051 assign({}, attributes, { 12052 expires: -1 12053 }) 12054 ); 12055 }, 12056 withAttributes: function (attributes) { 12057 return init(this.converter, assign({}, this.attributes, attributes)) 12058 }, 12059 withConverter: function (converter) { 12060 return init(assign({}, this.converter, converter), this.attributes) 12061 } 12062 }, 12063 { 12064 attributes: { value: Object.freeze(defaultAttributes) }, 12065 converter: { value: Object.freeze(converter) } 12066 } 12067 ) 12068} 12069 12070var api = init(defaultConverter, { path: '/' }); 12071/* eslint-enable no-var */ 12072 12073 12074 12075 12076/***/ }), 12077
vendor: 3,999 bytes, lines 12078-12243
12078/***/ "./node_modules/ssr-window/ssr-window.esm.js": 12079/*!***************************************************!*\ 12080 !*** ./node_modules/ssr-window/ssr-window.esm.js ***! 12081 \***************************************************/ 12082/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12083 12084__webpack_require__.r(__webpack_exports__); 12085/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12086/* harmony export */ extend: function() { return /* binding */ extend; }, 12087/* harmony export */ getDocument: function() { return /* binding */ getDocument; }, 12088/* harmony export */ getWindow: function() { return /* binding */ getWindow; }, 12089/* harmony export */ ssrDocument: function() { return /* binding */ ssrDocument; }, 12090/* harmony export */ ssrWindow: function() { return /* binding */ ssrWindow; } 12091/* harmony export */ }); 12092/** 12093 * SSR Window 4.0.2 12094 * Better handling for window object in SSR environment 12095 * https://github.com/nolimits4web/ssr-window 12096 * 12097 * Copyright 2021, Vladimir Kharlampidi 12098 * 12099 * Licensed under MIT 12100 * 12101 * Released on: December 13, 2021 12102 */ 12103/* eslint-disable no-param-reassign */ 12104function isObject(obj) { 12105 return (obj !== null && 12106 typeof obj === 'object' && 12107 'constructor' in obj && 12108 obj.constructor === Object); 12109} 12110function extend(target = {}, src = {}) { 12111 Object.keys(src).forEach((key) => { 12112 if (typeof target[key] === 'undefined') 12113 target[key] = src[key]; 12114 else if (isObject(src[key]) && 12115 isObject(target[key]) && 12116 Object.keys(src[key]).length > 0) { 12117 extend(target[key], src[key]); 12118 } 12119 }); 12120} 12121 12122const ssrDocument = { 12123 body: {}, 12124 addEventListener() { }, 12125 removeEventListener() { }, 12126 activeElement: { 12127 blur() { }, 12128 nodeName: '', 12129 }, 12130 querySelector() { 12131 return null; 12132 }, 12133 querySelectorAll() { 12134 return []; 12135 }, 12136 getElementById() { 12137 return null; 12138 }, 12139 createEvent() { 12140 return { 12141 initEvent() { }, 12142 }; 12143 }, 12144 createElement() { 12145 return { 12146 children: [], 12147 childNodes: [], 12148 style: {}, 12149 setAttribute() { }, 12150 getElementsByTagName() { 12151 return []; 12152 }, 12153 }; 12154 }, 12155 createElementNS() { 12156 return {}; 12157 }, 12158 importNode() { 12159 return null; 12160 }, 12161 location: { 12162 hash: '', 12163 host: '', 12164 hostname: '', 12165 href: '', 12166 origin: '', 12167 pathname: '', 12168 protocol: '', 12169 search: '', 12170 }, 12171}; 12172function getDocument() { 12173 const doc = typeof document !== 'undefined' ? document : {}; 12174 extend(doc, ssrDocument); 12175 return doc; 12176} 12177 12178const ssrWindow = { 12179 document: ssrDocument, 12180 navigator: { 12181 userAgent: '', 12182 }, 12183 location: { 12184 hash: '', 12185 host: '', 12186 hostname: '', 12187 href: '', 12188 origin: '', 12189 pathname: '', 12190 protocol: '', 12191 search: '', 12192 }, 12193 history: { 12194 replaceState() { }, 12195 pushState() { }, 12196 go() { }, 12197 back() { }, 12198 }, 12199 CustomEvent: function CustomEvent() { 12200 return this; 12201 }, 12202 addEventListener() { }, 12203 removeEventListener() { }, 12204 getComputedStyle() { 12205 return { 12206 getPropertyValue() { 12207 return ''; 12208 }, 12209 }; 12210 }, 12211 Image() { }, 12212 Date() { }, 12213 screen: {}, 12214 setTimeout() { }, 12215 clearTimeout() { }, 12216 matchMedia() { 12217 return {}; 12218 }, 12219 requestAnimationFrame(callback) { 12220 if (typeof setTimeout === 'undefined') { 12221 callback(); 12222 return null; 12223 } 12224 return setTimeout(callback, 0); 12225 }, 12226 cancelAnimationFrame(id) { 12227 if (typeof setTimeout === 'undefined') { 12228 return; 12229 } 12230 clearTimeout(id); 12231 }, 12232}; 12233function getWindow() { 12234 const win = typeof window !== 'undefined' ? window : {}; 12235 extend(win, ssrWindow); 12236 return win; 12237} 12238 12239 12240 12241 12242/***/ }), 12243
vendor: 1,858 bytes, lines 12244-12297
12244/***/ "./node_modules/swiper/core/breakpoints/getBreakpoint.js": 12245/*!***************************************************************!*\ 12246 !*** ./node_modules/swiper/core/breakpoints/getBreakpoint.js ***! 12247 \***************************************************************/ 12248/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12249 12250__webpack_require__.r(__webpack_exports__); 12251/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12252/* harmony export */ "default": function() { return /* binding */ getBreakpoint; } 12253/* harmony export */ }); 12254/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 12255 12256function getBreakpoint(breakpoints, base = 'window', containerEl) { 12257 if (!breakpoints || base === 'container' && !containerEl) return undefined; 12258 let breakpoint = false; 12259 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 12260 const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight; 12261 const points = Object.keys(breakpoints).map(point => { 12262 if (typeof point === 'string' && point.indexOf('@') === 0) { 12263 const minRatio = parseFloat(point.substr(1)); 12264 const value = currentHeight * minRatio; 12265 return { 12266 value, 12267 point 12268 }; 12269 } 12270 12271 return { 12272 value: point, 12273 point 12274 }; 12275 }); 12276 points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10)); 12277 12278 for (let i = 0; i < points.length; i += 1) { 12279 const { 12280 point, 12281 value 12282 } = points[i]; 12283 12284 if (base === 'window') { 12285 if (window.matchMedia(`(min-width: ${value}px)`).matches) { 12286 breakpoint = point; 12287 } 12288 } else if (value <= containerEl.clientWidth) { 12289 breakpoint = point; 12290 } 12291 } 12292 12293 return breakpoint || 'max'; 12294} 12295 12296/***/ }), 12297
vendor: 975 bytes, lines 12298-12315
12298/***/ "./node_modules/swiper/core/breakpoints/index.js": 12299/*!*******************************************************!*\ 12300 !*** ./node_modules/swiper/core/breakpoints/index.js ***! 12301 \*******************************************************/ 12302/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12303 12304__webpack_require__.r(__webpack_exports__); 12305/* harmony import */ var _setBreakpoint_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setBreakpoint.js */ "./node_modules/swiper/core/breakpoints/setBreakpoint.js"); 12306/* harmony import */ var _getBreakpoint_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getBreakpoint.js */ "./node_modules/swiper/core/breakpoints/getBreakpoint.js"); 12307 12308 12309/* harmony default export */ __webpack_exports__["default"] = ({ 12310 setBreakpoint: _setBreakpoint_js__WEBPACK_IMPORTED_MODULE_0__["default"], 12311 getBreakpoint: _getBreakpoint_js__WEBPACK_IMPORTED_MODULE_1__["default"] 12312}); 12313 12314/***/ }), 12315
vendor: 3,757 bytes, lines 12316-12414
12316/***/ "./node_modules/swiper/core/breakpoints/setBreakpoint.js": 12317/*!***************************************************************!*\ 12318 !*** ./node_modules/swiper/core/breakpoints/setBreakpoint.js ***! 12319 \***************************************************************/ 12320/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12321 12322__webpack_require__.r(__webpack_exports__); 12323/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12324/* harmony export */ "default": function() { return /* binding */ setBreakpoint; } 12325/* harmony export */ }); 12326/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 12327 12328 12329const isGridEnabled = (swiper, params) => { 12330 return swiper.grid && params.grid && params.grid.rows > 1; 12331}; 12332 12333function setBreakpoint() { 12334 const swiper = this; 12335 const { 12336 activeIndex, 12337 initialized, 12338 loopedSlides = 0, 12339 params, 12340 $el 12341 } = swiper; 12342 const breakpoints = params.breakpoints; 12343 if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters 12344 12345 const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el); 12346 if (!breakpoint || swiper.currentBreakpoint === breakpoint) return; 12347 const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined; 12348 const breakpointParams = breakpointOnlyParams || swiper.originalParams; 12349 const wasMultiRow = isGridEnabled(swiper, params); 12350 const isMultiRow = isGridEnabled(swiper, breakpointParams); 12351 const wasEnabled = params.enabled; 12352 12353 if (wasMultiRow && !isMultiRow) { 12354 $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`); 12355 swiper.emitContainerClasses(); 12356 } else if (!wasMultiRow && isMultiRow) { 12357 $el.addClass(`${params.containerModifierClass}grid`); 12358 12359 if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') { 12360 $el.addClass(`${params.containerModifierClass}grid-column`); 12361 } 12362 12363 swiper.emitContainerClasses(); 12364 } // Toggle navigation, pagination, scrollbar 12365 12366 12367 ['navigation', 'pagination', 'scrollbar'].forEach(prop => { 12368 const wasModuleEnabled = params[prop] && params[prop].enabled; 12369 const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled; 12370 12371 if (wasModuleEnabled && !isModuleEnabled) { 12372 swiper[prop].disable(); 12373 } 12374 12375 if (!wasModuleEnabled && isModuleEnabled) { 12376 swiper[prop].enable(); 12377 } 12378 }); 12379 const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction; 12380 const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged); 12381 12382 if (directionChanged && initialized) { 12383 swiper.changeDirection(); 12384 } 12385 12386 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(swiper.params, breakpointParams); 12387 const isEnabled = swiper.params.enabled; 12388 Object.assign(swiper, { 12389 allowTouchMove: swiper.params.allowTouchMove, 12390 allowSlideNext: swiper.params.allowSlideNext, 12391 allowSlidePrev: swiper.params.allowSlidePrev 12392 }); 12393 12394 if (wasEnabled && !isEnabled) { 12395 swiper.disable(); 12396 } else if (!wasEnabled && isEnabled) { 12397 swiper.enable(); 12398 } 12399 12400 swiper.currentBreakpoint = breakpoint; 12401 swiper.emit('_beforeBreakpoint', breakpointParams); 12402 12403 if (needsReLoop && initialized) { 12404 swiper.loopDestroy(); 12405 swiper.loopCreate(); 12406 swiper.updateSlides(); 12407 swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false); 12408 } 12409 12410 swiper.emit('breakpoint', breakpointParams); 12411} 12412 12413/***/ }), 12414
vendor: 1,350 bytes, lines 12415-12462
12415/***/ "./node_modules/swiper/core/check-overflow/index.js": 12416/*!**********************************************************!*\ 12417 !*** ./node_modules/swiper/core/check-overflow/index.js ***! 12418 \**********************************************************/ 12419/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12420 12421__webpack_require__.r(__webpack_exports__); 12422function checkOverflow() { 12423 const swiper = this; 12424 const { 12425 isLocked: wasLocked, 12426 params 12427 } = swiper; 12428 const { 12429 slidesOffsetBefore 12430 } = params; 12431 12432 if (slidesOffsetBefore) { 12433 const lastSlideIndex = swiper.slides.length - 1; 12434 const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2; 12435 swiper.isLocked = swiper.size > lastSlideRightEdge; 12436 } else { 12437 swiper.isLocked = swiper.snapGrid.length === 1; 12438 } 12439 12440 if (params.allowSlideNext === true) { 12441 swiper.allowSlideNext = !swiper.isLocked; 12442 } 12443 12444 if (params.allowSlidePrev === true) { 12445 swiper.allowSlidePrev = !swiper.isLocked; 12446 } 12447 12448 if (wasLocked && wasLocked !== swiper.isLocked) { 12449 swiper.isEnd = false; 12450 } 12451 12452 if (wasLocked !== swiper.isLocked) { 12453 swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); 12454 } 12455} 12456 12457/* harmony default export */ __webpack_exports__["default"] = ({ 12458 checkOverflow 12459}); 12460 12461/***/ }), 12462
vendor: 1,907 bytes, lines 12463-12529
12463/***/ "./node_modules/swiper/core/classes/addClasses.js": 12464/*!********************************************************!*\ 12465 !*** ./node_modules/swiper/core/classes/addClasses.js ***! 12466 \********************************************************/ 12467/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12468 12469__webpack_require__.r(__webpack_exports__); 12470/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12471/* harmony export */ "default": function() { return /* binding */ addClasses; } 12472/* harmony export */ }); 12473function prepareClasses(entries, prefix) { 12474 const resultClasses = []; 12475 entries.forEach(item => { 12476 if (typeof item === 'object') { 12477 Object.keys(item).forEach(classNames => { 12478 if (item[classNames]) { 12479 resultClasses.push(prefix + classNames); 12480 } 12481 }); 12482 } else if (typeof item === 'string') { 12483 resultClasses.push(prefix + item); 12484 } 12485 }); 12486 return resultClasses; 12487} 12488 12489function addClasses() { 12490 const swiper = this; 12491 const { 12492 classNames, 12493 params, 12494 rtl, 12495 $el, 12496 device, 12497 support 12498 } = swiper; // prettier-ignore 12499 12500 const suffixes = prepareClasses(['initialized', params.direction, { 12501 'pointer-events': !support.touch 12502 }, { 12503 'free-mode': swiper.params.freeMode && params.freeMode.enabled 12504 }, { 12505 'autoheight': params.autoHeight 12506 }, { 12507 'rtl': rtl 12508 }, { 12509 'grid': params.grid && params.grid.rows > 1 12510 }, { 12511 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column' 12512 }, { 12513 'android': device.android 12514 }, { 12515 'ios': device.ios 12516 }, { 12517 'css-mode': params.cssMode 12518 }, { 12519 'centered': params.cssMode && params.centeredSlides 12520 }, { 12521 'watch-progress': params.watchSlidesProgress 12522 }], params.containerModifierClass); 12523 classNames.push(...suffixes); 12524 $el.addClass([...classNames].join(' ')); 12525 swiper.emitContainerClasses(); 12526} 12527 12528/***/ }), 12529
vendor: 936 bytes, lines 12530-12547
12530/***/ "./node_modules/swiper/core/classes/index.js": 12531/*!***************************************************!*\ 12532 !*** ./node_modules/swiper/core/classes/index.js ***! 12533 \***************************************************/ 12534/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12535 12536__webpack_require__.r(__webpack_exports__); 12537/* harmony import */ var _addClasses_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./addClasses.js */ "./node_modules/swiper/core/classes/addClasses.js"); 12538/* harmony import */ var _removeClasses_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./removeClasses.js */ "./node_modules/swiper/core/classes/removeClasses.js"); 12539 12540 12541/* harmony default export */ __webpack_exports__["default"] = ({ 12542 addClasses: _addClasses_js__WEBPACK_IMPORTED_MODULE_0__["default"], 12543 removeClasses: _removeClasses_js__WEBPACK_IMPORTED_MODULE_1__["default"] 12544}); 12545 12546/***/ }), 12547
vendor: 759 bytes, lines 12548-12569
12548/***/ "./node_modules/swiper/core/classes/removeClasses.js": 12549/*!***********************************************************!*\ 12550 !*** ./node_modules/swiper/core/classes/removeClasses.js ***! 12551 \***********************************************************/ 12552/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12553 12554__webpack_require__.r(__webpack_exports__); 12555/* harmony export */ __webpack_require__.d(__webpack_exports__, { 12556/* harmony export */ "default": function() { return /* binding */ removeClasses; } 12557/* harmony export */ }); 12558function removeClasses() { 12559 const swiper = this; 12560 const { 12561 $el, 12562 classNames 12563 } = swiper; 12564 $el.removeClass(classNames.join(' ')); 12565 swiper.emitContainerClasses(); 12566} 12567 12568/***/ }), 12569
vendor: 22,476 bytes, lines 12570-13235
12570/***/ "./node_modules/swiper/core/core.js": 12571/*!******************************************!*\ 12572 !*** ./node_modules/swiper/core/core.js ***! 12573 \******************************************/ 12574/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 12575 12576__webpack_require__.r(__webpack_exports__); 12577/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 12578/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 12579/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 12580/* harmony import */ var _shared_get_support_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../shared/get-support.js */ "./node_modules/swiper/shared/get-support.js"); 12581/* harmony import */ var _shared_get_device_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../shared/get-device.js */ "./node_modules/swiper/shared/get-device.js"); 12582/* harmony import */ var _shared_get_browser_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../shared/get-browser.js */ "./node_modules/swiper/shared/get-browser.js"); 12583/* harmony import */ var _modules_resize_resize_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/resize/resize.js */ "./node_modules/swiper/core/modules/resize/resize.js"); 12584/* harmony import */ var _modules_observer_observer_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/observer/observer.js */ "./node_modules/swiper/core/modules/observer/observer.js"); 12585/* harmony import */ var _events_emitter_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./events-emitter.js */ "./node_modules/swiper/core/events-emitter.js"); 12586/* harmony import */ var _update_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./update/index.js */ "./node_modules/swiper/core/update/index.js"); 12587/* harmony import */ var _translate_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./translate/index.js */ "./node_modules/swiper/core/translate/index.js"); 12588/* harmony import */ var _transition_index_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./transition/index.js */ "./node_modules/swiper/core/transition/index.js"); 12589/* harmony import */ var _slide_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./slide/index.js */ "./node_modules/swiper/core/slide/index.js"); 12590/* harmony import */ var _loop_index_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./loop/index.js */ "./node_modules/swiper/core/loop/index.js"); 12591/* harmony import */ var _grab_cursor_index_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./grab-cursor/index.js */ "./node_modules/swiper/core/grab-cursor/index.js"); 12592/* harmony import */ var _events_index_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./events/index.js */ "./node_modules/swiper/core/events/index.js"); 12593/* harmony import */ var _breakpoints_index_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./breakpoints/index.js */ "./node_modules/swiper/core/breakpoints/index.js"); 12594/* harmony import */ var _classes_index_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./classes/index.js */ "./node_modules/swiper/core/classes/index.js"); 12595/* harmony import */ var _images_index_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./images/index.js */ "./node_modules/swiper/core/images/index.js"); 12596/* harmony import */ var _check_overflow_index_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./check-overflow/index.js */ "./node_modules/swiper/core/check-overflow/index.js"); 12597/* harmony import */ var _defaults_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./defaults.js */ "./node_modules/swiper/core/defaults.js"); 12598/* harmony import */ var _moduleExtendParams_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./moduleExtendParams.js */ "./node_modules/swiper/core/moduleExtendParams.js"); 12599/* eslint no-param-reassign: "off" */ 12600 12601 12602 12603 12604 12605 12606 12607 12608 12609 12610 12611 12612 12613 12614 12615 12616 12617 12618 12619 12620 12621 12622const prototypes = { 12623 eventsEmitter: _events_emitter_js__WEBPACK_IMPORTED_MODULE_8__["default"], 12624 update: _update_index_js__WEBPACK_IMPORTED_MODULE_9__["default"], 12625 translate: _translate_index_js__WEBPACK_IMPORTED_MODULE_10__["default"], 12626 transition: _transition_index_js__WEBPACK_IMPORTED_MODULE_11__["default"], 12627 slide: _slide_index_js__WEBPACK_IMPORTED_MODULE_12__["default"], 12628 loop: _loop_index_js__WEBPACK_IMPORTED_MODULE_13__["default"], 12629 grabCursor: _grab_cursor_index_js__WEBPACK_IMPORTED_MODULE_14__["default"], 12630 events: _events_index_js__WEBPACK_IMPORTED_MODULE_15__["default"], 12631 breakpoints: _breakpoints_index_js__WEBPACK_IMPORTED_MODULE_16__["default"], 12632 checkOverflow: _check_overflow_index_js__WEBPACK_IMPORTED_MODULE_19__["default"], 12633 classes: _classes_index_js__WEBPACK_IMPORTED_MODULE_17__["default"], 12634 images: _images_index_js__WEBPACK_IMPORTED_MODULE_18__["default"] 12635}; 12636const extendedDefaults = {}; 12637 12638class Swiper { 12639 constructor(...args) { 12640 let el; 12641 let params; 12642 12643 if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') { 12644 params = args[0]; 12645 } else { 12646 [el, params] = args; 12647 } 12648 12649 if (!params) params = {}; 12650 params = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.extend)({}, params); 12651 if (el && !params.el) params.el = el; 12652 12653 if (params.el && (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params.el).length > 1) { 12654 const swipers = []; 12655 (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params.el).each(containerEl => { 12656 const newParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.extend)({}, params, { 12657 el: containerEl 12658 }); 12659 swipers.push(new Swiper(newParams)); 12660 }); // eslint-disable-next-line no-constructor-return 12661 12662 return swipers; 12663 } // Swiper Instance 12664 12665 12666 const swiper = this; 12667 swiper.__swiper__ = true; 12668 swiper.support = (0,_shared_get_support_js__WEBPACK_IMPORTED_MODULE_3__.getSupport)(); 12669 swiper.device = (0,_shared_get_device_js__WEBPACK_IMPORTED_MODULE_4__.getDevice)({ 12670 userAgent: params.userAgent 12671 }); 12672 swiper.browser = (0,_shared_get_browser_js__WEBPACK_IMPORTED_MODULE_5__.getBrowser)(); 12673 swiper.eventsListeners = {}; 12674 swiper.eventsAnyListeners = []; 12675 swiper.modules = [...swiper.__modules__]; 12676 12677 if (params.modules && Array.isArray(params.modules)) { 12678 swiper.modules.push(...params.modules); 12679 } 12680 12681 const allModulesParams = {}; 12682 swiper.modules.forEach(mod => { 12683 mod({ 12684 swiper, 12685 extendParams: (0,_moduleExtendParams_js__WEBPACK_IMPORTED_MODULE_21__["default"])(params, allModulesParams), 12686 on: swiper.on.bind(swiper), 12687 once: swiper.once.bind(swiper), 12688 off: swiper.off.bind(swiper), 12689 emit: swiper.emit.bind(swiper) 12690 }); 12691 }); // Extend defaults with modules params 12692 12693 const swiperParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.extend)({}, _defaults_js__WEBPACK_IMPORTED_MODULE_20__["default"], allModulesParams); // Extend defaults with passed params 12694 12695 swiper.params = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.extend)({}, swiperParams, extendedDefaults, params); 12696 swiper.originalParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.extend)({}, swiper.params); 12697 swiper.passedParams = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.extend)({}, params); // add event listeners 12698 12699 if (swiper.params && swiper.params.on) { 12700 Object.keys(swiper.params.on).forEach(eventName => { 12701 swiper.on(eventName, swiper.params.on[eventName]); 12702 }); 12703 } 12704 12705 if (swiper.params && swiper.params.onAny) { 12706 swiper.onAny(swiper.params.onAny); 12707 } // Save Dom lib 12708 12709 12710 swiper.$ = _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"]; // Extend Swiper 12711 12712 Object.assign(swiper, { 12713 enabled: swiper.params.enabled, 12714 el, 12715 // Classes 12716 classNames: [], 12717 // Slides 12718 slides: (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(), 12719 slidesGrid: [], 12720 snapGrid: [], 12721 slidesSizesGrid: [], 12722 12723 // isDirection 12724 isHorizontal() { 12725 return swiper.params.direction === 'horizontal'; 12726 }, 12727 12728 isVertical() { 12729 return swiper.params.direction === 'vertical'; 12730 }, 12731 12732 // Indexes 12733 activeIndex: 0, 12734 realIndex: 0, 12735 // 12736 isBeginning: true, 12737 isEnd: false, 12738 // Props 12739 translate: 0, 12740 previousTranslate: 0, 12741 progress: 0, 12742 velocity: 0, 12743 animating: false, 12744 // Locks 12745 allowSlideNext: swiper.params.allowSlideNext, 12746 allowSlidePrev: swiper.params.allowSlidePrev, 12747 // Touch Events 12748 touchEvents: function touchEvents() { 12749 const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel']; 12750 const desktop = ['pointerdown', 'pointermove', 'pointerup']; 12751 swiper.touchEventsTouch = { 12752 start: touch[0], 12753 move: touch[1], 12754 end: touch[2], 12755 cancel: touch[3] 12756 }; 12757 swiper.touchEventsDesktop = { 12758 start: desktop[0], 12759 move: desktop[1], 12760 end: desktop[2] 12761 }; 12762 return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop; 12763 }(), 12764 touchEventsData: { 12765 isTouched: undefined, 12766 isMoved: undefined, 12767 allowTouchCallbacks: undefined, 12768 touchStartTime: undefined, 12769 isScrolling: undefined, 12770 currentTranslate: undefined, 12771 startTranslate: undefined, 12772 allowThresholdMove: undefined, 12773 // Form elements to match 12774 focusableElements: swiper.params.focusableElements, 12775 // Last click time 12776 lastClickTime: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.now)(), 12777 clickTimeout: undefined, 12778 // Velocities 12779 velocities: [], 12780 allowMomentumBounce: undefined, 12781 isTouchEvent: undefined, 12782 startMoving: undefined 12783 }, 12784 // Clicks 12785 allowClick: true, 12786 // Touches 12787 allowTouchMove: swiper.params.allowTouchMove, 12788 touches: { 12789 startX: 0, 12790 startY: 0, 12791 currentX: 0, 12792 currentY: 0, 12793 diff: 0 12794 }, 12795 // Images 12796 imagesToLoad: [], 12797 imagesLoaded: 0 12798 }); 12799 swiper.emit('_swiper'); // Init 12800 12801 if (swiper.params.init) { 12802 swiper.init(); 12803 } // Return app instance 12804 // eslint-disable-next-line no-constructor-return 12805 12806 12807 return swiper; 12808 } 12809 12810 enable() { 12811 const swiper = this; 12812 if (swiper.enabled) return; 12813 swiper.enabled = true; 12814 12815 if (swiper.params.grabCursor) { 12816 swiper.setGrabCursor(); 12817 } 12818 12819 swiper.emit('enable'); 12820 } 12821 12822 disable() { 12823 const swiper = this; 12824 if (!swiper.enabled) return; 12825 swiper.enabled = false; 12826 12827 if (swiper.params.grabCursor) { 12828 swiper.unsetGrabCursor(); 12829 } 12830 12831 swiper.emit('disable'); 12832 } 12833 12834 setProgress(progress, speed) { 12835 const swiper = this; 12836 progress = Math.min(Math.max(progress, 0), 1); 12837 const min = swiper.minTranslate(); 12838 const max = swiper.maxTranslate(); 12839 const current = (max - min) * progress + min; 12840 swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed); 12841 swiper.updateActiveIndex(); 12842 swiper.updateSlidesClasses(); 12843 } 12844 12845 emitContainerClasses() { 12846 const swiper = this; 12847 if (!swiper.params._emitClasses || !swiper.el) return; 12848 const cls = swiper.el.className.split(' ').filter(className => { 12849 return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0; 12850 }); 12851 swiper.emit('_containerClasses', cls.join(' ')); 12852 } 12853 12854 getSlideClasses(slideEl) { 12855 const swiper = this; 12856 if (swiper.destroyed) return ''; 12857 return slideEl.className.split(' ').filter(className => { 12858 return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0; 12859 }).join(' '); 12860 } 12861 12862 emitSlidesClasses() { 12863 const swiper = this; 12864 if (!swiper.params._emitClasses || !swiper.el) return; 12865 const updates = []; 12866 swiper.slides.each(slideEl => { 12867 const classNames = swiper.getSlideClasses(slideEl); 12868 updates.push({ 12869 slideEl, 12870 classNames 12871 }); 12872 swiper.emit('_slideClass', slideEl, classNames); 12873 }); 12874 swiper.emit('_slideClasses', updates); 12875 } 12876 12877 slidesPerViewDynamic(view = 'current', exact = false) { 12878 const swiper = this; 12879 const { 12880 params, 12881 slides, 12882 slidesGrid, 12883 slidesSizesGrid, 12884 size: swiperSize, 12885 activeIndex 12886 } = swiper; 12887 let spv = 1; 12888 12889 if (params.centeredSlides) { 12890 let slideSize = slides[activeIndex].swiperSlideSize; 12891 let breakLoop; 12892 12893 for (let i = activeIndex + 1; i < slides.length; i += 1) { 12894 if (slides[i] && !breakLoop) { 12895 slideSize += slides[i].swiperSlideSize; 12896 spv += 1; 12897 if (slideSize > swiperSize) breakLoop = true; 12898 } 12899 } 12900 12901 for (let i = activeIndex - 1; i >= 0; i -= 1) { 12902 if (slides[i] && !breakLoop) { 12903 slideSize += slides[i].swiperSlideSize; 12904 spv += 1; 12905 if (slideSize > swiperSize) breakLoop = true; 12906 } 12907 } 12908 } else { 12909 // eslint-disable-next-line 12910 if (view === 'current') { 12911 for (let i = activeIndex + 1; i < slides.length; i += 1) { 12912 const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize; 12913 12914 if (slideInView) { 12915 spv += 1; 12916 } 12917 } 12918 } else { 12919 // previous 12920 for (let i = activeIndex - 1; i >= 0; i -= 1) { 12921 const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize; 12922 12923 if (slideInView) { 12924 spv += 1; 12925 } 12926 } 12927 } 12928 } 12929 12930 return spv; 12931 } 12932 12933 update() { 12934 const swiper = this; 12935 if (!swiper || swiper.destroyed) return; 12936 const { 12937 snapGrid, 12938 params 12939 } = swiper; // Breakpoints 12940 12941 if (params.breakpoints) { 12942 swiper.setBreakpoint(); 12943 } 12944 12945 swiper.updateSize(); 12946 swiper.updateSlides(); 12947 swiper.updateProgress(); 12948 swiper.updateSlidesClasses(); 12949 12950 function setTranslate() { 12951 const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; 12952 const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); 12953 swiper.setTranslate(newTranslate); 12954 swiper.updateActiveIndex(); 12955 swiper.updateSlidesClasses(); 12956 } 12957 12958 let translated; 12959 12960 if (swiper.params.freeMode && swiper.params.freeMode.enabled) { 12961 setTranslate(); 12962 12963 if (swiper.params.autoHeight) { 12964 swiper.updateAutoHeight(); 12965 } 12966 } else { 12967 if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) { 12968 translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true); 12969 } else { 12970 translated = swiper.slideTo(swiper.activeIndex, 0, false, true); 12971 } 12972 12973 if (!translated) { 12974 setTranslate(); 12975 } 12976 } 12977 12978 if (params.watchOverflow && snapGrid !== swiper.snapGrid) { 12979 swiper.checkOverflow(); 12980 } 12981 12982 swiper.emit('update'); 12983 } 12984 12985 changeDirection(newDirection, needUpdate = true) { 12986 const swiper = this; 12987 const currentDirection = swiper.params.direction; 12988 12989 if (!newDirection) { 12990 // eslint-disable-next-line 12991 newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal'; 12992 } 12993 12994 if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') { 12995 return swiper; 12996 } 12997 12998 swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`); 12999 swiper.emitContainerClasses(); 13000 swiper.params.direction = newDirection; 13001 swiper.slides.each(slideEl => { 13002 if (newDirection === 'vertical') { 13003 slideEl.style.width = ''; 13004 } else { 13005 slideEl.style.height = ''; 13006 } 13007 }); 13008 swiper.emit('changeDirection'); 13009 if (needUpdate) swiper.update(); 13010 return swiper; 13011 } 13012 13013 changeLanguageDirection(direction) { 13014 const swiper = this; 13015 if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return; 13016 swiper.rtl = direction === 'rtl'; 13017 swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl; 13018 13019 if (swiper.rtl) { 13020 swiper.$el.addClass(`${swiper.params.containerModifierClass}rtl`); 13021 swiper.el.dir = 'rtl'; 13022 } else { 13023 swiper.$el.removeClass(`${swiper.params.containerModifierClass}rtl`); 13024 swiper.el.dir = 'ltr'; 13025 } 13026 13027 swiper.update(); 13028 } 13029 13030 mount(el) { 13031 const swiper = this; 13032 if (swiper.mounted) return true; // Find el 13033 13034 const $el = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(el || swiper.params.el); 13035 el = $el[0]; 13036 13037 if (!el) { 13038 return false; 13039 } 13040 13041 el.swiper = swiper; 13042 13043 const getWrapperSelector = () => { 13044 return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`; 13045 }; 13046 13047 const getWrapper = () => { 13048 if (el && el.shadowRoot && el.shadowRoot.querySelector) { 13049 const res = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items 13050 13051 res.children = options => $el.children(options); 13052 13053 return res; 13054 } 13055 13056 if (!$el.children) { 13057 return (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])($el).children(getWrapperSelector()); 13058 } 13059 13060 return $el.children(getWrapperSelector()); 13061 }; // Find Wrapper 13062 13063 13064 let $wrapperEl = getWrapper(); 13065 13066 if ($wrapperEl.length === 0 && swiper.params.createElements) { 13067 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 13068 const wrapper = document.createElement('div'); 13069 $wrapperEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(wrapper); 13070 wrapper.className = swiper.params.wrapperClass; 13071 $el.append(wrapper); 13072 $el.children(`.${swiper.params.slideClass}`).each(slideEl => { 13073 $wrapperEl.append(slideEl); 13074 }); 13075 } 13076 13077 Object.assign(swiper, { 13078 $el, 13079 el, 13080 $wrapperEl, 13081 wrapperEl: $wrapperEl[0], 13082 mounted: true, 13083 // RTL 13084 rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl', 13085 rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'), 13086 wrongRTL: $wrapperEl.css('display') === '-webkit-box' 13087 }); 13088 return true; 13089 } 13090 13091 init(el) { 13092 const swiper = this; 13093 if (swiper.initialized) return swiper; 13094 const mounted = swiper.mount(el); 13095 if (mounted === false) return swiper; 13096 swiper.emit('beforeInit'); // Set breakpoint 13097 13098 if (swiper.params.breakpoints) { 13099 swiper.setBreakpoint(); 13100 } // Add Classes 13101 13102 13103 swiper.addClasses(); // Create loop 13104 13105 if (swiper.params.loop) { 13106 swiper.loopCreate(); 13107 } // Update size 13108 13109 13110 swiper.updateSize(); // Update slides 13111 13112 swiper.updateSlides(); 13113 13114 if (swiper.params.watchOverflow) { 13115 swiper.checkOverflow(); 13116 } // Set Grab Cursor 13117 13118 13119 if (swiper.params.grabCursor && swiper.enabled) { 13120 swiper.setGrabCursor(); 13121 } 13122 13123 if (swiper.params.preloadImages) { 13124 swiper.preloadImages(); 13125 } // Slide To Initial Slide 13126 13127 13128 if (swiper.params.loop) { 13129 swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true); 13130 } else { 13131 swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true); 13132 } // Attach events 13133 13134 13135 swiper.attachEvents(); // Init Flag 13136 13137 swiper.initialized = true; // Emit 13138 13139 swiper.emit('init'); 13140 swiper.emit('afterInit'); 13141 return swiper; 13142 } 13143 13144 destroy(deleteInstance = true, cleanStyles = true) { 13145 const swiper = this; 13146 const { 13147 params, 13148 $el, 13149 $wrapperEl, 13150 slides 13151 } = swiper; 13152 13153 if (typeof swiper.params === 'undefined' || swiper.destroyed) { 13154 return null; 13155 } 13156 13157 swiper.emit('beforeDestroy'); // Init Flag 13158 13159 swiper.initialized = false; // Detach events 13160 13161 swiper.detachEvents(); // Destroy loop 13162 13163 if (params.loop) { 13164 swiper.loopDestroy(); 13165 } // Cleanup styles 13166 13167 13168 if (cleanStyles) { 13169 swiper.removeClasses(); 13170 $el.removeAttr('style'); 13171 $wrapperEl.removeAttr('style'); 13172 13173 if (slides && slides.length) { 13174 slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index'); 13175 } 13176 } 13177 13178 swiper.emit('destroy'); // Detach emitter events 13179 13180 Object.keys(swiper.eventsListeners).forEach(eventName => { 13181 swiper.off(eventName); 13182 }); 13183 13184 if (deleteInstance !== false) { 13185 swiper.$el[0].swiper = null; 13186 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.deleteProps)(swiper); 13187 } 13188 13189 swiper.destroyed = true; 13190 return null; 13191 } 13192 13193 static extendDefaults(newDefaults) { 13194 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.extend)(extendedDefaults, newDefaults); 13195 } 13196 13197 static get extendedDefaults() { 13198 return extendedDefaults; 13199 } 13200 13201 static get defaults() { 13202 return _defaults_js__WEBPACK_IMPORTED_MODULE_20__["default"]; 13203 } 13204 13205 static installModule(mod) { 13206 if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = []; 13207 const modules = Swiper.prototype.__modules__; 13208 13209 if (typeof mod === 'function' && modules.indexOf(mod) < 0) { 13210 modules.push(mod); 13211 } 13212 } 13213 13214 static use(module) { 13215 if (Array.isArray(module)) { 13216 module.forEach(m => Swiper.installModule(m)); 13217 return Swiper; 13218 } 13219 13220 Swiper.installModule(module); 13221 return Swiper; 13222 } 13223 13224} 13225 13226Object.keys(prototypes).forEach(prototypeGroup => { 13227 Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => { 13228 Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; 13229 }); 13230}); 13231Swiper.use([_modules_resize_resize_js__WEBPACK_IMPORTED_MODULE_6__["default"], _modules_observer_observer_js__WEBPACK_IMPORTED_MODULE_7__["default"]]); 13232/* harmony default export */ __webpack_exports__["default"] = (Swiper); 13233 13234/***/ }), 13235
vendor: 3,585 bytes, lines 13236-13369
13236/***/ "./node_modules/swiper/core/defaults.js": 13237/*!**********************************************!*\ 13238 !*** ./node_modules/swiper/core/defaults.js ***! 13239 \**********************************************/ 13240/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 13241 13242__webpack_require__.r(__webpack_exports__); 13243/* harmony default export */ __webpack_exports__["default"] = ({ 13244 init: true, 13245 direction: 'horizontal', 13246 touchEventsTarget: 'wrapper', 13247 initialSlide: 0, 13248 speed: 300, 13249 cssMode: false, 13250 updateOnWindowResize: true, 13251 resizeObserver: true, 13252 nested: false, 13253 createElements: false, 13254 enabled: true, 13255 focusableElements: 'input, select, option, textarea, button, video, label', 13256 // Overrides 13257 width: null, 13258 height: null, 13259 // 13260 preventInteractionOnTransition: false, 13261 // ssr 13262 userAgent: null, 13263 url: null, 13264 // To support iOS's swipe-to-go-back gesture (when being used in-app). 13265 edgeSwipeDetection: false, 13266 edgeSwipeThreshold: 20, 13267 // Autoheight 13268 autoHeight: false, 13269 // Set wrapper width 13270 setWrapperSize: false, 13271 // Virtual Translate 13272 virtualTranslate: false, 13273 // Effects 13274 effect: 'slide', 13275 // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' 13276 // Breakpoints 13277 breakpoints: undefined, 13278 breakpointsBase: 'window', 13279 // Slides grid 13280 spaceBetween: 0, 13281 slidesPerView: 1, 13282 slidesPerGroup: 1, 13283 slidesPerGroupSkip: 0, 13284 slidesPerGroupAuto: false, 13285 centeredSlides: false, 13286 centeredSlidesBounds: false, 13287 slidesOffsetBefore: 0, 13288 // in px 13289 slidesOffsetAfter: 0, 13290 // in px 13291 normalizeSlideIndex: true, 13292 centerInsufficientSlides: false, 13293 // Disable swiper and hide navigation when container not overflow 13294 watchOverflow: true, 13295 // Round length 13296 roundLengths: false, 13297 // Touches 13298 touchRatio: 1, 13299 touchAngle: 45, 13300 simulateTouch: true, 13301 shortSwipes: true, 13302 longSwipes: true, 13303 longSwipesRatio: 0.5, 13304 longSwipesMs: 300, 13305 followFinger: true, 13306 allowTouchMove: true, 13307 threshold: 0, 13308 touchMoveStopPropagation: false, 13309 touchStartPreventDefault: true, 13310 touchStartForcePreventDefault: false, 13311 touchReleaseOnEdges: false, 13312 // Unique Navigation Elements 13313 uniqueNavElements: true, 13314 // Resistance 13315 resistance: true, 13316 resistanceRatio: 0.85, 13317 // Progress 13318 watchSlidesProgress: false, 13319 // Cursor 13320 grabCursor: false, 13321 // Clicks 13322 preventClicks: true, 13323 preventClicksPropagation: true, 13324 slideToClickedSlide: false, 13325 // Images 13326 preloadImages: true, 13327 updateOnImagesReady: true, 13328 // loop 13329 loop: false, 13330 loopAdditionalSlides: 0, 13331 loopedSlides: null, 13332 loopedSlidesLimit: true, 13333 loopFillGroupWithBlank: false, 13334 loopPreventsSlide: true, 13335 // rewind 13336 rewind: false, 13337 // Swiping/no swiping 13338 allowSlidePrev: true, 13339 allowSlideNext: true, 13340 swipeHandler: null, 13341 // '.swipe-handler', 13342 noSwiping: true, 13343 noSwipingClass: 'swiper-no-swiping', 13344 noSwipingSelector: null, 13345 // Passive Listeners 13346 passiveListeners: true, 13347 maxBackfaceHiddenSlides: 10, 13348 // NS 13349 containerModifierClass: 'swiper-', 13350 // NEW 13351 slideClass: 'swiper-slide', 13352 slideBlankClass: 'swiper-slide-invisible-blank', 13353 slideActiveClass: 'swiper-slide-active', 13354 slideDuplicateActiveClass: 'swiper-slide-duplicate-active', 13355 slideVisibleClass: 'swiper-slide-visible', 13356 slideDuplicateClass: 'swiper-slide-duplicate', 13357 slideNextClass: 'swiper-slide-next', 13358 slideDuplicateNextClass: 'swiper-slide-duplicate-next', 13359 slidePrevClass: 'swiper-slide-prev', 13360 slideDuplicatePrevClass: 'swiper-slide-duplicate-prev', 13361 wrapperClass: 'swiper-wrapper', 13362 // Callbacks 13363 runCallbacksOnInit: true, 13364 // Internals 13365 _emitClasses: false 13366}); 13367 13368/***/ }), 13369
vendor: 3,724 bytes, lines 13370-13493
13370/***/ "./node_modules/swiper/core/events-emitter.js": 13371/*!****************************************************!*\ 13372 !*** ./node_modules/swiper/core/events-emitter.js ***! 13373 \****************************************************/ 13374/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 13375 13376__webpack_require__.r(__webpack_exports__); 13377/* eslint-disable no-underscore-dangle */ 13378/* harmony default export */ __webpack_exports__["default"] = ({ 13379 on(events, handler, priority) { 13380 const self = this; 13381 if (!self.eventsListeners || self.destroyed) return self; 13382 if (typeof handler !== 'function') return self; 13383 const method = priority ? 'unshift' : 'push'; 13384 events.split(' ').forEach(event => { 13385 if (!self.eventsListeners[event]) self.eventsListeners[event] = []; 13386 self.eventsListeners[event][method](handler); 13387 }); 13388 return self; 13389 }, 13390 13391 once(events, handler, priority) { 13392 const self = this; 13393 if (!self.eventsListeners || self.destroyed) return self; 13394 if (typeof handler !== 'function') return self; 13395 13396 function onceHandler(...args) { 13397 self.off(events, onceHandler); 13398 13399 if (onceHandler.__emitterProxy) { 13400 delete onceHandler.__emitterProxy; 13401 } 13402 13403 handler.apply(self, args); 13404 } 13405 13406 onceHandler.__emitterProxy = handler; 13407 return self.on(events, onceHandler, priority); 13408 }, 13409 13410 onAny(handler, priority) { 13411 const self = this; 13412 if (!self.eventsListeners || self.destroyed) return self; 13413 if (typeof handler !== 'function') return self; 13414 const method = priority ? 'unshift' : 'push'; 13415 13416 if (self.eventsAnyListeners.indexOf(handler) < 0) { 13417 self.eventsAnyListeners[method](handler); 13418 } 13419 13420 return self; 13421 }, 13422 13423 offAny(handler) { 13424 const self = this; 13425 if (!self.eventsListeners || self.destroyed) return self; 13426 if (!self.eventsAnyListeners) return self; 13427 const index = self.eventsAnyListeners.indexOf(handler); 13428 13429 if (index >= 0) { 13430 self.eventsAnyListeners.splice(index, 1); 13431 } 13432 13433 return self; 13434 }, 13435 13436 off(events, handler) { 13437 const self = this; 13438 if (!self.eventsListeners || self.destroyed) return self; 13439 if (!self.eventsListeners) return self; 13440 events.split(' ').forEach(event => { 13441 if (typeof handler === 'undefined') { 13442 self.eventsListeners[event] = []; 13443 } else if (self.eventsListeners[event]) { 13444 self.eventsListeners[event].forEach((eventHandler, index) => { 13445 if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) { 13446 self.eventsListeners[event].splice(index, 1); 13447 } 13448 }); 13449 } 13450 }); 13451 return self; 13452 }, 13453 13454 emit(...args) { 13455 const self = this; 13456 if (!self.eventsListeners || self.destroyed) return self; 13457 if (!self.eventsListeners) return self; 13458 let events; 13459 let data; 13460 let context; 13461 13462 if (typeof args[0] === 'string' || Array.isArray(args[0])) { 13463 events = args[0]; 13464 data = args.slice(1, args.length); 13465 context = self; 13466 } else { 13467 events = args[0].events; 13468 data = args[0].data; 13469 context = args[0].context || self; 13470 } 13471 13472 data.unshift(context); 13473 const eventsArray = Array.isArray(events) ? events : events.split(' '); 13474 eventsArray.forEach(event => { 13475 if (self.eventsAnyListeners && self.eventsAnyListeners.length) { 13476 self.eventsAnyListeners.forEach(eventHandler => { 13477 eventHandler.apply(context, [event, ...data]); 13478 }); 13479 } 13480 13481 if (self.eventsListeners && self.eventsListeners[event]) { 13482 self.eventsListeners[event].forEach(eventHandler => { 13483 eventHandler.apply(context, data); 13484 }); 13485 } 13486 }); 13487 return self; 13488 } 13489 13490}); 13491 13492/***/ }), 13493
vendor: 4,390 bytes, lines 13494-13607
13494/***/ "./node_modules/swiper/core/events/index.js": 13495/*!**************************************************!*\ 13496 !*** ./node_modules/swiper/core/events/index.js ***! 13497 \**************************************************/ 13498/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 13499 13500__webpack_require__.r(__webpack_exports__); 13501/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 13502/* harmony import */ var _onTouchStart_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./onTouchStart.js */ "./node_modules/swiper/core/events/onTouchStart.js"); 13503/* harmony import */ var _onTouchMove_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./onTouchMove.js */ "./node_modules/swiper/core/events/onTouchMove.js"); 13504/* harmony import */ var _onTouchEnd_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./onTouchEnd.js */ "./node_modules/swiper/core/events/onTouchEnd.js"); 13505/* harmony import */ var _onResize_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./onResize.js */ "./node_modules/swiper/core/events/onResize.js"); 13506/* harmony import */ var _onClick_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./onClick.js */ "./node_modules/swiper/core/events/onClick.js"); 13507/* harmony import */ var _onScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./onScroll.js */ "./node_modules/swiper/core/events/onScroll.js"); 13508 13509 13510 13511 13512 13513 13514 13515let dummyEventAttached = false; 13516 13517function dummyEventListener() {} 13518 13519const events = (swiper, method) => { 13520 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 13521 const { 13522 params, 13523 touchEvents, 13524 el, 13525 wrapperEl, 13526 device, 13527 support 13528 } = swiper; 13529 const capture = !!params.nested; 13530 const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; 13531 const swiperMethod = method; // Touch Events 13532 13533 if (!support.touch) { 13534 el[domMethod](touchEvents.start, swiper.onTouchStart, false); 13535 document[domMethod](touchEvents.move, swiper.onTouchMove, capture); 13536 document[domMethod](touchEvents.end, swiper.onTouchEnd, false); 13537 } else { 13538 const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? { 13539 passive: true, 13540 capture: false 13541 } : false; 13542 el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener); 13543 el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? { 13544 passive: false, 13545 capture 13546 } : capture); 13547 el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener); 13548 13549 if (touchEvents.cancel) { 13550 el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener); 13551 } 13552 } // Prevent Links Clicks 13553 13554 13555 if (params.preventClicks || params.preventClicksPropagation) { 13556 el[domMethod]('click', swiper.onClick, true); 13557 } 13558 13559 if (params.cssMode) { 13560 wrapperEl[domMethod]('scroll', swiper.onScroll); 13561 } // Resize handler 13562 13563 13564 if (params.updateOnWindowResize) { 13565 swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', _onResize_js__WEBPACK_IMPORTED_MODULE_4__["default"], true); 13566 } else { 13567 swiper[swiperMethod]('observerUpdate', _onResize_js__WEBPACK_IMPORTED_MODULE_4__["default"], true); 13568 } 13569}; 13570 13571function attachEvents() { 13572 const swiper = this; 13573 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 13574 const { 13575 params, 13576 support 13577 } = swiper; 13578 swiper.onTouchStart = _onTouchStart_js__WEBPACK_IMPORTED_MODULE_1__["default"].bind(swiper); 13579 swiper.onTouchMove = _onTouchMove_js__WEBPACK_IMPORTED_MODULE_2__["default"].bind(swiper); 13580 swiper.onTouchEnd = _onTouchEnd_js__WEBPACK_IMPORTED_MODULE_3__["default"].bind(swiper); 13581 13582 if (params.cssMode) { 13583 swiper.onScroll = _onScroll_js__WEBPACK_IMPORTED_MODULE_6__["default"].bind(swiper); 13584 } 13585 13586 swiper.onClick = _onClick_js__WEBPACK_IMPORTED_MODULE_5__["default"].bind(swiper); 13587 13588 if (support.touch && !dummyEventAttached) { 13589 document.addEventListener('touchstart', dummyEventListener); 13590 dummyEventAttached = true; 13591 } 13592 13593 events(swiper, 'on'); 13594} 13595 13596function detachEvents() { 13597 const swiper = this; 13598 events(swiper, 'off'); 13599} 13600 13601/* harmony default export */ __webpack_exports__["default"] = ({ 13602 attachEvents, 13603 detachEvents 13604}); 13605 13606/***/ }), 13607
vendor: 859 bytes, lines 13608-13633
13608/***/ "./node_modules/swiper/core/events/onClick.js": 13609/*!****************************************************!*\ 13610 !*** ./node_modules/swiper/core/events/onClick.js ***! 13611 \****************************************************/ 13612/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 13613 13614__webpack_require__.r(__webpack_exports__); 13615/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13616/* harmony export */ "default": function() { return /* binding */ onClick; } 13617/* harmony export */ }); 13618function onClick(e) { 13619 const swiper = this; 13620 if (!swiper.enabled) return; 13621 13622 if (!swiper.allowClick) { 13623 if (swiper.params.preventClicks) e.preventDefault(); 13624 13625 if (swiper.params.preventClicksPropagation && swiper.animating) { 13626 e.stopPropagation(); 13627 e.stopImmediatePropagation(); 13628 } 13629 } 13630} 13631 13632/***/ }), 13633
vendor: 1,633 bytes, lines 13634-13689
13634/***/ "./node_modules/swiper/core/events/onResize.js": 13635/*!*****************************************************!*\ 13636 !*** ./node_modules/swiper/core/events/onResize.js ***! 13637 \*****************************************************/ 13638/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 13639 13640__webpack_require__.r(__webpack_exports__); 13641/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13642/* harmony export */ "default": function() { return /* binding */ onResize; } 13643/* harmony export */ }); 13644function onResize() { 13645 const swiper = this; 13646 const { 13647 params, 13648 el 13649 } = swiper; 13650 if (el && el.offsetWidth === 0) return; // Breakpoints 13651 13652 if (params.breakpoints) { 13653 swiper.setBreakpoint(); 13654 } // Save locks 13655 13656 13657 const { 13658 allowSlideNext, 13659 allowSlidePrev, 13660 snapGrid 13661 } = swiper; // Disable locks on resize 13662 13663 swiper.allowSlideNext = true; 13664 swiper.allowSlidePrev = true; 13665 swiper.updateSize(); 13666 swiper.updateSlides(); 13667 swiper.updateSlidesClasses(); 13668 13669 if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) { 13670 swiper.slideTo(swiper.slides.length - 1, 0, false, true); 13671 } else { 13672 swiper.slideTo(swiper.activeIndex, 0, false, true); 13673 } 13674 13675 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 13676 swiper.autoplay.run(); 13677 } // Return locks after resize 13678 13679 13680 swiper.allowSlidePrev = allowSlidePrev; 13681 swiper.allowSlideNext = allowSlideNext; 13682 13683 if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) { 13684 swiper.checkOverflow(); 13685 } 13686} 13687 13688/***/ }), 13689
vendor: 1,445 bytes, lines 13690-13737
13690/***/ "./node_modules/swiper/core/events/onScroll.js": 13691/*!*****************************************************!*\ 13692 !*** ./node_modules/swiper/core/events/onScroll.js ***! 13693 \*****************************************************/ 13694/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 13695 13696__webpack_require__.r(__webpack_exports__); 13697/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13698/* harmony export */ "default": function() { return /* binding */ onScroll; } 13699/* harmony export */ }); 13700function onScroll() { 13701 const swiper = this; 13702 const { 13703 wrapperEl, 13704 rtlTranslate, 13705 enabled 13706 } = swiper; 13707 if (!enabled) return; 13708 swiper.previousTranslate = swiper.translate; 13709 13710 if (swiper.isHorizontal()) { 13711 swiper.translate = -wrapperEl.scrollLeft; 13712 } else { 13713 swiper.translate = -wrapperEl.scrollTop; 13714 } // eslint-disable-next-line 13715 13716 13717 if (swiper.translate === 0) swiper.translate = 0; 13718 swiper.updateActiveIndex(); 13719 swiper.updateSlidesClasses(); 13720 let newProgress; 13721 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 13722 13723 if (translatesDiff === 0) { 13724 newProgress = 0; 13725 } else { 13726 newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff; 13727 } 13728 13729 if (newProgress !== swiper.progress) { 13730 swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate); 13731 } 13732 13733 swiper.emit('setTranslate', swiper.translate, false); 13734} 13735 13736/***/ }), 13737
vendor: 5,522 bytes, lines 13738-13912
13738/***/ "./node_modules/swiper/core/events/onTouchEnd.js": 13739/*!*******************************************************!*\ 13740 !*** ./node_modules/swiper/core/events/onTouchEnd.js ***! 13741 \*******************************************************/ 13742/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 13743 13744__webpack_require__.r(__webpack_exports__); 13745/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13746/* harmony export */ "default": function() { return /* binding */ onTouchEnd; } 13747/* harmony export */ }); 13748/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 13749 13750function onTouchEnd(event) { 13751 const swiper = this; 13752 const data = swiper.touchEventsData; 13753 const { 13754 params, 13755 touches, 13756 rtlTranslate: rtl, 13757 slidesGrid, 13758 enabled 13759 } = swiper; 13760 if (!enabled) return; 13761 let e = event; 13762 if (e.originalEvent) e = e.originalEvent; 13763 13764 if (data.allowTouchCallbacks) { 13765 swiper.emit('touchEnd', e); 13766 } 13767 13768 data.allowTouchCallbacks = false; 13769 13770 if (!data.isTouched) { 13771 if (data.isMoved && params.grabCursor) { 13772 swiper.setGrabCursor(false); 13773 } 13774 13775 data.isMoved = false; 13776 data.startMoving = false; 13777 return; 13778 } // Return Grab Cursor 13779 13780 13781 if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 13782 swiper.setGrabCursor(false); 13783 } // Time diff 13784 13785 13786 const touchEndTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)(); 13787 const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click 13788 13789 if (swiper.allowClick) { 13790 const pathTree = e.path || e.composedPath && e.composedPath(); 13791 swiper.updateClickedSlide(pathTree && pathTree[0] || e.target); 13792 swiper.emit('tap click', e); 13793 13794 if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) { 13795 swiper.emit('doubleTap doubleClick', e); 13796 } 13797 } 13798 13799 data.lastClickTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)(); 13800 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.nextTick)(() => { 13801 if (!swiper.destroyed) swiper.allowClick = true; 13802 }); 13803 13804 if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) { 13805 data.isTouched = false; 13806 data.isMoved = false; 13807 data.startMoving = false; 13808 return; 13809 } 13810 13811 data.isTouched = false; 13812 data.isMoved = false; 13813 data.startMoving = false; 13814 let currentPos; 13815 13816 if (params.followFinger) { 13817 currentPos = rtl ? swiper.translate : -swiper.translate; 13818 } else { 13819 currentPos = -data.currentTranslate; 13820 } 13821 13822 if (params.cssMode) { 13823 return; 13824 } 13825 13826 if (swiper.params.freeMode && params.freeMode.enabled) { 13827 swiper.freeMode.onTouchEnd({ 13828 currentPos 13829 }); 13830 return; 13831 } // Find current slide 13832 13833 13834 let stopIndex = 0; 13835 let groupSize = swiper.slidesSizesGrid[0]; 13836 13837 for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) { 13838 const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 13839 13840 if (typeof slidesGrid[i + increment] !== 'undefined') { 13841 if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) { 13842 stopIndex = i; 13843 groupSize = slidesGrid[i + increment] - slidesGrid[i]; 13844 } 13845 } else if (currentPos >= slidesGrid[i]) { 13846 stopIndex = i; 13847 groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; 13848 } 13849 } 13850 13851 let rewindFirstIndex = null; 13852 let rewindLastIndex = null; 13853 13854 if (params.rewind) { 13855 if (swiper.isBeginning) { 13856 rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; 13857 } else if (swiper.isEnd) { 13858 rewindFirstIndex = 0; 13859 } 13860 } // Find current slide size 13861 13862 13863 const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; 13864 const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup; 13865 13866 if (timeDiff > params.longSwipesMs) { 13867 // Long touches 13868 if (!params.longSwipes) { 13869 swiper.slideTo(swiper.activeIndex); 13870 return; 13871 } 13872 13873 if (swiper.swipeDirection === 'next') { 13874 if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex); 13875 } 13876 13877 if (swiper.swipeDirection === 'prev') { 13878 if (ratio > 1 - params.longSwipesRatio) { 13879 swiper.slideTo(stopIndex + increment); 13880 } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) { 13881 swiper.slideTo(rewindLastIndex); 13882 } else { 13883 swiper.slideTo(stopIndex); 13884 } 13885 } 13886 } else { 13887 // Short swipes 13888 if (!params.shortSwipes) { 13889 swiper.slideTo(swiper.activeIndex); 13890 return; 13891 } 13892 13893 const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl); 13894 13895 if (!isNavButtonTarget) { 13896 if (swiper.swipeDirection === 'next') { 13897 swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment); 13898 } 13899 13900 if (swiper.swipeDirection === 'prev') { 13901 swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex); 13902 } 13903 } else if (e.target === swiper.navigation.nextEl) { 13904 swiper.slideTo(stopIndex + increment); 13905 } else { 13906 swiper.slideTo(stopIndex); 13907 } 13908 } 13909} 13910 13911/***/ }), 13912
vendor: 7,830 bytes, lines 13913-14151
13913/***/ "./node_modules/swiper/core/events/onTouchMove.js": 13914/*!********************************************************!*\ 13915 !*** ./node_modules/swiper/core/events/onTouchMove.js ***! 13916 \********************************************************/ 13917/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 13918 13919__webpack_require__.r(__webpack_exports__); 13920/* harmony export */ __webpack_require__.d(__webpack_exports__, { 13921/* harmony export */ "default": function() { return /* binding */ onTouchMove; } 13922/* harmony export */ }); 13923/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 13924/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 13925/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 13926 13927 13928 13929function onTouchMove(event) { 13930 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 13931 const swiper = this; 13932 const data = swiper.touchEventsData; 13933 const { 13934 params, 13935 touches, 13936 rtlTranslate: rtl, 13937 enabled 13938 } = swiper; 13939 if (!enabled) return; 13940 let e = event; 13941 if (e.originalEvent) e = e.originalEvent; 13942 13943 if (!data.isTouched) { 13944 if (data.startMoving && data.isScrolling) { 13945 swiper.emit('touchMoveOpposite', e); 13946 } 13947 13948 return; 13949 } 13950 13951 if (data.isTouchEvent && e.type !== 'touchmove') return; 13952 const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]); 13953 const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX; 13954 const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY; 13955 13956 if (e.preventedByNestedSwiper) { 13957 touches.startX = pageX; 13958 touches.startY = pageY; 13959 return; 13960 } 13961 13962 if (!swiper.allowTouchMove) { 13963 if (!(0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(e.target).is(data.focusableElements)) { 13964 swiper.allowClick = false; 13965 } 13966 13967 if (data.isTouched) { 13968 Object.assign(touches, { 13969 startX: pageX, 13970 startY: pageY, 13971 currentX: pageX, 13972 currentY: pageY 13973 }); 13974 data.touchStartTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.now)(); 13975 } 13976 13977 return; 13978 } 13979 13980 if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) { 13981 if (swiper.isVertical()) { 13982 // Vertical 13983 if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) { 13984 data.isTouched = false; 13985 data.isMoved = false; 13986 return; 13987 } 13988 } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) { 13989 return; 13990 } 13991 } 13992 13993 if (data.isTouchEvent && document.activeElement) { 13994 if (e.target === document.activeElement && (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(e.target).is(data.focusableElements)) { 13995 data.isMoved = true; 13996 swiper.allowClick = false; 13997 return; 13998 } 13999 } 14000 14001 if (data.allowTouchCallbacks) { 14002 swiper.emit('touchMove', e); 14003 } 14004 14005 if (e.targetTouches && e.targetTouches.length > 1) return; 14006 touches.currentX = pageX; 14007 touches.currentY = pageY; 14008 const diffX = touches.currentX - touches.startX; 14009 const diffY = touches.currentY - touches.startY; 14010 if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return; 14011 14012 if (typeof data.isScrolling === 'undefined') { 14013 let touchAngle; 14014 14015 if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) { 14016 data.isScrolling = false; 14017 } else { 14018 // eslint-disable-next-line 14019 if (diffX * diffX + diffY * diffY >= 25) { 14020 touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI; 14021 data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle; 14022 } 14023 } 14024 } 14025 14026 if (data.isScrolling) { 14027 swiper.emit('touchMoveOpposite', e); 14028 } 14029 14030 if (typeof data.startMoving === 'undefined') { 14031 if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) { 14032 data.startMoving = true; 14033 } 14034 } 14035 14036 if (data.isScrolling) { 14037 data.isTouched = false; 14038 return; 14039 } 14040 14041 if (!data.startMoving) { 14042 return; 14043 } 14044 14045 swiper.allowClick = false; 14046 14047 if (!params.cssMode && e.cancelable) { 14048 e.preventDefault(); 14049 } 14050 14051 if (params.touchMoveStopPropagation && !params.nested) { 14052 e.stopPropagation(); 14053 } 14054 14055 if (!data.isMoved) { 14056 if (params.loop && !params.cssMode) { 14057 swiper.loopFix(); 14058 } 14059 14060 data.startTranslate = swiper.getTranslate(); 14061 swiper.setTransition(0); 14062 14063 if (swiper.animating) { 14064 swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend'); 14065 } 14066 14067 data.allowMomentumBounce = false; // Grab Cursor 14068 14069 if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 14070 swiper.setGrabCursor(true); 14071 } 14072 14073 swiper.emit('sliderFirstMove', e); 14074 } 14075 14076 swiper.emit('sliderMove', e); 14077 data.isMoved = true; 14078 let diff = swiper.isHorizontal() ? diffX : diffY; 14079 touches.diff = diff; 14080 diff *= params.touchRatio; 14081 if (rtl) diff = -diff; 14082 swiper.swipeDirection = diff > 0 ? 'prev' : 'next'; 14083 data.currentTranslate = diff + data.startTranslate; 14084 let disableParentSwiper = true; 14085 let resistanceRatio = params.resistanceRatio; 14086 14087 if (params.touchReleaseOnEdges) { 14088 resistanceRatio = 0; 14089 } 14090 14091 if (diff > 0 && data.currentTranslate > swiper.minTranslate()) { 14092 disableParentSwiper = false; 14093 if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio; 14094 } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) { 14095 disableParentSwiper = false; 14096 if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio; 14097 } 14098 14099 if (disableParentSwiper) { 14100 e.preventedByNestedSwiper = true; 14101 } // Directions locks 14102 14103 14104 if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) { 14105 data.currentTranslate = data.startTranslate; 14106 } 14107 14108 if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) { 14109 data.currentTranslate = data.startTranslate; 14110 } 14111 14112 if (!swiper.allowSlidePrev && !swiper.allowSlideNext) { 14113 data.currentTranslate = data.startTranslate; 14114 } // Threshold 14115 14116 14117 if (params.threshold > 0) { 14118 if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { 14119 if (!data.allowThresholdMove) { 14120 data.allowThresholdMove = true; 14121 touches.startX = touches.currentX; 14122 touches.startY = touches.currentY; 14123 data.currentTranslate = data.startTranslate; 14124 touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; 14125 return; 14126 } 14127 } else { 14128 data.currentTranslate = data.startTranslate; 14129 return; 14130 } 14131 } 14132 14133 if (!params.followFinger || params.cssMode) return; // Update active index in free mode 14134 14135 if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) { 14136 swiper.updateActiveIndex(); 14137 swiper.updateSlidesClasses(); 14138 } 14139 14140 if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) { 14141 swiper.freeMode.onTouchMove(); 14142 } // Update progress 14143 14144 14145 swiper.updateProgress(data.currentTranslate); // Update translate 14146 14147 swiper.setTranslate(data.currentTranslate); 14148} 14149 14150/***/ }), 14151
vendor: 5,751 bytes, lines 14152-14299
14152/***/ "./node_modules/swiper/core/events/onTouchStart.js": 14153/*!*********************************************************!*\ 14154 !*** ./node_modules/swiper/core/events/onTouchStart.js ***! 14155 \*********************************************************/ 14156/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14157 14158__webpack_require__.r(__webpack_exports__); 14159/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14160/* harmony export */ "default": function() { return /* binding */ onTouchStart; } 14161/* harmony export */ }); 14162/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 14163/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 14164/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 14165 14166 14167 // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd 14168 14169function closestElement(selector, base = this) { 14170 function __closestFrom(el) { 14171 if (!el || el === (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)() || el === (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)()) return null; 14172 if (el.assignedSlot) el = el.assignedSlot; 14173 const found = el.closest(selector); 14174 14175 if (!found && !el.getRootNode) { 14176 return null; 14177 } 14178 14179 return found || __closestFrom(el.getRootNode().host); 14180 } 14181 14182 return __closestFrom(base); 14183} 14184 14185function onTouchStart(event) { 14186 const swiper = this; 14187 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 14188 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 14189 const data = swiper.touchEventsData; 14190 const { 14191 params, 14192 touches, 14193 enabled 14194 } = swiper; 14195 if (!enabled) return; 14196 14197 if (swiper.animating && params.preventInteractionOnTransition) { 14198 return; 14199 } 14200 14201 if (!swiper.animating && params.cssMode && params.loop) { 14202 swiper.loopFix(); 14203 } 14204 14205 let e = event; 14206 if (e.originalEvent) e = e.originalEvent; 14207 let $targetEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(e.target); 14208 14209 if (params.touchEventsTarget === 'wrapper') { 14210 if (!$targetEl.closest(swiper.wrapperEl).length) return; 14211 } 14212 14213 data.isTouchEvent = e.type === 'touchstart'; 14214 if (!data.isTouchEvent && 'which' in e && e.which === 3) return; 14215 if (!data.isTouchEvent && 'button' in e && e.button > 0) return; 14216 if (data.isTouched && data.isMoved) return; // change target el for shadow root component 14217 14218 const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; // eslint-disable-next-line 14219 14220 const eventPath = event.composedPath ? event.composedPath() : event.path; 14221 14222 if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) { 14223 $targetEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(eventPath[0]); 14224 } 14225 14226 const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`; 14227 const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element 14228 14229 if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, $targetEl[0]) : $targetEl.closest(noSwipingSelector)[0])) { 14230 swiper.allowClick = true; 14231 return; 14232 } 14233 14234 if (params.swipeHandler) { 14235 if (!$targetEl.closest(params.swipeHandler)[0]) return; 14236 } 14237 14238 touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; 14239 touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; 14240 const startX = touches.currentX; 14241 const startY = touches.currentY; // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore 14242 14243 const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection; 14244 const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold; 14245 14246 if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) { 14247 if (edgeSwipeDetection === 'prevent') { 14248 event.preventDefault(); 14249 } else { 14250 return; 14251 } 14252 } 14253 14254 Object.assign(data, { 14255 isTouched: true, 14256 isMoved: false, 14257 allowTouchCallbacks: true, 14258 isScrolling: undefined, 14259 startMoving: undefined 14260 }); 14261 touches.startX = startX; 14262 touches.startY = startY; 14263 data.touchStartTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.now)(); 14264 swiper.allowClick = true; 14265 swiper.updateSize(); 14266 swiper.swipeDirection = undefined; 14267 if (params.threshold > 0) data.allowThresholdMove = false; 14268 14269 if (e.type !== 'touchstart') { 14270 let preventDefault = true; 14271 14272 if ($targetEl.is(data.focusableElements)) { 14273 preventDefault = false; 14274 14275 if ($targetEl[0].nodeName === 'SELECT') { 14276 data.isTouched = false; 14277 } 14278 } 14279 14280 if (document.activeElement && (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) { 14281 document.activeElement.blur(); 14282 } 14283 14284 const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault; 14285 14286 if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) { 14287 e.preventDefault(); 14288 } 14289 } 14290 14291 if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) { 14292 swiper.freeMode.onTouchStart(); 14293 } 14294 14295 swiper.emit('touchStart', e); 14296} 14297 14298/***/ }), 14299
vendor: 985 bytes, lines 14300-14317
14300/***/ "./node_modules/swiper/core/grab-cursor/index.js": 14301/*!*******************************************************!*\ 14302 !*** ./node_modules/swiper/core/grab-cursor/index.js ***! 14303 \*******************************************************/ 14304/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14305 14306__webpack_require__.r(__webpack_exports__); 14307/* harmony import */ var _setGrabCursor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setGrabCursor.js */ "./node_modules/swiper/core/grab-cursor/setGrabCursor.js"); 14308/* harmony import */ var _unsetGrabCursor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./unsetGrabCursor.js */ "./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js"); 14309 14310 14311/* harmony default export */ __webpack_exports__["default"] = ({ 14312 setGrabCursor: _setGrabCursor_js__WEBPACK_IMPORTED_MODULE_0__["default"], 14313 unsetGrabCursor: _unsetGrabCursor_js__WEBPACK_IMPORTED_MODULE_1__["default"] 14314}); 14315 14316/***/ }), 14317
vendor: 973 bytes, lines 14318-14337
14318/***/ "./node_modules/swiper/core/grab-cursor/setGrabCursor.js": 14319/*!***************************************************************!*\ 14320 !*** ./node_modules/swiper/core/grab-cursor/setGrabCursor.js ***! 14321 \***************************************************************/ 14322/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14323 14324__webpack_require__.r(__webpack_exports__); 14325/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14326/* harmony export */ "default": function() { return /* binding */ setGrabCursor; } 14327/* harmony export */ }); 14328function setGrabCursor(moving) { 14329 const swiper = this; 14330 if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return; 14331 const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl; 14332 el.style.cursor = 'move'; 14333 el.style.cursor = moving ? 'grabbing' : 'grab'; 14334} 14335 14336/***/ }), 14337
vendor: 886 bytes, lines 14338-14359
14338/***/ "./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js": 14339/*!*****************************************************************!*\ 14340 !*** ./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js ***! 14341 \*****************************************************************/ 14342/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14343 14344__webpack_require__.r(__webpack_exports__); 14345/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14346/* harmony export */ "default": function() { return /* binding */ unsetGrabCursor; } 14347/* harmony export */ }); 14348function unsetGrabCursor() { 14349 const swiper = this; 14350 14351 if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) { 14352 return; 14353 } 14354 14355 swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = ''; 14356} 14357 14358/***/ }), 14359
vendor: 925 bytes, lines 14360-14377
14360/***/ "./node_modules/swiper/core/images/index.js": 14361/*!**************************************************!*\ 14362 !*** ./node_modules/swiper/core/images/index.js ***! 14363 \**************************************************/ 14364/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14365 14366__webpack_require__.r(__webpack_exports__); 14367/* harmony import */ var _loadImage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./loadImage.js */ "./node_modules/swiper/core/images/loadImage.js"); 14368/* harmony import */ var _preloadImages_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./preloadImages.js */ "./node_modules/swiper/core/images/preloadImages.js"); 14369 14370 14371/* harmony default export */ __webpack_exports__["default"] = ({ 14372 loadImage: _loadImage_js__WEBPACK_IMPORTED_MODULE_0__["default"], 14373 preloadImages: _preloadImages_js__WEBPACK_IMPORTED_MODULE_1__["default"] 14374}); 14375 14376/***/ }), 14377
vendor: 1,650 bytes, lines 14378-14429
14378/***/ "./node_modules/swiper/core/images/loadImage.js": 14379/*!******************************************************!*\ 14380 !*** ./node_modules/swiper/core/images/loadImage.js ***! 14381 \******************************************************/ 14382/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14383 14384__webpack_require__.r(__webpack_exports__); 14385/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14386/* harmony export */ "default": function() { return /* binding */ loadImage; } 14387/* harmony export */ }); 14388/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 14389/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 14390 14391 14392function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) { 14393 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 14394 let image; 14395 14396 function onReady() { 14397 if (callback) callback(); 14398 } 14399 14400 const isPicture = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imageEl).parent('picture')[0]; 14401 14402 if (!isPicture && (!imageEl.complete || !checkForComplete)) { 14403 if (src) { 14404 image = new window.Image(); 14405 image.onload = onReady; 14406 image.onerror = onReady; 14407 14408 if (sizes) { 14409 image.sizes = sizes; 14410 } 14411 14412 if (srcset) { 14413 image.srcset = srcset; 14414 } 14415 14416 if (src) { 14417 image.src = src; 14418 } 14419 } else { 14420 onReady(); 14421 } 14422 } else { 14423 // image already loaded... 14424 onReady(); 14425 } 14426} 14427 14428/***/ }), 14429
vendor: 1,344 bytes, lines 14430-14461
14430/***/ "./node_modules/swiper/core/images/preloadImages.js": 14431/*!**********************************************************!*\ 14432 !*** ./node_modules/swiper/core/images/preloadImages.js ***! 14433 \**********************************************************/ 14434/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14435 14436__webpack_require__.r(__webpack_exports__); 14437/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14438/* harmony export */ "default": function() { return /* binding */ preloadImages; } 14439/* harmony export */ }); 14440function preloadImages() { 14441 const swiper = this; 14442 swiper.imagesToLoad = swiper.$el.find('img'); 14443 14444 function onReady() { 14445 if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return; 14446 if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1; 14447 14448 if (swiper.imagesLoaded === swiper.imagesToLoad.length) { 14449 if (swiper.params.updateOnImagesReady) swiper.update(); 14450 swiper.emit('imagesReady'); 14451 } 14452 } 14453 14454 for (let i = 0; i < swiper.imagesToLoad.length; i += 1) { 14455 const imageEl = swiper.imagesToLoad[i]; 14456 swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady); 14457 } 14458} 14459 14460/***/ }), 14461
vendor: 1,128 bytes, lines 14462-14482
14462/***/ "./node_modules/swiper/core/loop/index.js": 14463/*!************************************************!*\ 14464 !*** ./node_modules/swiper/core/loop/index.js ***! 14465 \************************************************/ 14466/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14467 14468__webpack_require__.r(__webpack_exports__); 14469/* harmony import */ var _loopCreate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./loopCreate.js */ "./node_modules/swiper/core/loop/loopCreate.js"); 14470/* harmony import */ var _loopFix_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./loopFix.js */ "./node_modules/swiper/core/loop/loopFix.js"); 14471/* harmony import */ var _loopDestroy_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./loopDestroy.js */ "./node_modules/swiper/core/loop/loopDestroy.js"); 14472 14473 14474 14475/* harmony default export */ __webpack_exports__["default"] = ({ 14476 loopCreate: _loopCreate_js__WEBPACK_IMPORTED_MODULE_0__["default"], 14477 loopFix: _loopFix_js__WEBPACK_IMPORTED_MODULE_1__["default"], 14478 loopDestroy: _loopDestroy_js__WEBPACK_IMPORTED_MODULE_2__["default"] 14479}); 14480 14481/***/ }), 14482
vendor: 3,185 bytes, lines 14483-14553
14483/***/ "./node_modules/swiper/core/loop/loopCreate.js": 14484/*!*****************************************************!*\ 14485 !*** ./node_modules/swiper/core/loop/loopCreate.js ***! 14486 \*****************************************************/ 14487/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14488 14489__webpack_require__.r(__webpack_exports__); 14490/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14491/* harmony export */ "default": function() { return /* binding */ loopCreate; } 14492/* harmony export */ }); 14493/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 14494/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 14495 14496 14497function loopCreate() { 14498 const swiper = this; 14499 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 14500 const { 14501 params, 14502 $wrapperEl 14503 } = swiper; // Remove duplicated slides 14504 14505 const $selector = $wrapperEl.children().length > 0 ? (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])($wrapperEl.children()[0].parentNode) : $wrapperEl; 14506 $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove(); 14507 let slides = $selector.children(`.${params.slideClass}`); 14508 14509 if (params.loopFillGroupWithBlank) { 14510 const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup; 14511 14512 if (blankSlidesNum !== params.slidesPerGroup) { 14513 for (let i = 0; i < blankSlidesNum; i += 1) { 14514 const blankNode = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`); 14515 $selector.append(blankNode); 14516 } 14517 14518 slides = $selector.children(`.${params.slideClass}`); 14519 } 14520 } 14521 14522 if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length; 14523 swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10)); 14524 swiper.loopedSlides += params.loopAdditionalSlides; 14525 14526 if (swiper.loopedSlides > slides.length && swiper.params.loopedSlidesLimit) { 14527 swiper.loopedSlides = slides.length; 14528 } 14529 14530 const prependSlides = []; 14531 const appendSlides = []; 14532 slides.each((el, index) => { 14533 const slide = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(el); 14534 slide.attr('data-swiper-slide-index', index); 14535 }); 14536 14537 for (let i = 0; i < swiper.loopedSlides; i += 1) { 14538 const index = i - Math.floor(i / slides.length) * slides.length; 14539 appendSlides.push(slides.eq(index)[0]); 14540 prependSlides.unshift(slides.eq(slides.length - index - 1)[0]); 14541 } 14542 14543 for (let i = 0; i < appendSlides.length; i += 1) { 14544 $selector.append((0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass)); 14545 } 14546 14547 for (let i = prependSlides.length - 1; i >= 0; i -= 1) { 14548 $selector.prepend((0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass)); 14549 } 14550} 14551 14552/***/ }), 14553
vendor: 859 bytes, lines 14554-14576
14554/***/ "./node_modules/swiper/core/loop/loopDestroy.js": 14555/*!******************************************************!*\ 14556 !*** ./node_modules/swiper/core/loop/loopDestroy.js ***! 14557 \******************************************************/ 14558/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14559 14560__webpack_require__.r(__webpack_exports__); 14561/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14562/* harmony export */ "default": function() { return /* binding */ loopDestroy; } 14563/* harmony export */ }); 14564function loopDestroy() { 14565 const swiper = this; 14566 const { 14567 $wrapperEl, 14568 params, 14569 slides 14570 } = swiper; 14571 $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove(); 14572 slides.removeAttr('data-swiper-slide-index'); 14573} 14574 14575/***/ }), 14576
vendor: 1,797 bytes, lines 14577-14630
14577/***/ "./node_modules/swiper/core/loop/loopFix.js": 14578/*!**************************************************!*\ 14579 !*** ./node_modules/swiper/core/loop/loopFix.js ***! 14580 \**************************************************/ 14581/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14582 14583__webpack_require__.r(__webpack_exports__); 14584/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14585/* harmony export */ "default": function() { return /* binding */ loopFix; } 14586/* harmony export */ }); 14587function loopFix() { 14588 const swiper = this; 14589 swiper.emit('beforeLoopFix'); 14590 const { 14591 activeIndex, 14592 slides, 14593 loopedSlides, 14594 allowSlidePrev, 14595 allowSlideNext, 14596 snapGrid, 14597 rtlTranslate: rtl 14598 } = swiper; 14599 let newIndex; 14600 swiper.allowSlidePrev = true; 14601 swiper.allowSlideNext = true; 14602 const snapTranslate = -snapGrid[activeIndex]; 14603 const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding 14604 14605 if (activeIndex < loopedSlides) { 14606 newIndex = slides.length - loopedSlides * 3 + activeIndex; 14607 newIndex += loopedSlides; 14608 const slideChanged = swiper.slideTo(newIndex, 0, false, true); 14609 14610 if (slideChanged && diff !== 0) { 14611 swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); 14612 } 14613 } else if (activeIndex >= slides.length - loopedSlides) { 14614 // Fix For Positive Oversliding 14615 newIndex = -slides.length + activeIndex + loopedSlides; 14616 newIndex += loopedSlides; 14617 const slideChanged = swiper.slideTo(newIndex, 0, false, true); 14618 14619 if (slideChanged && diff !== 0) { 14620 swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); 14621 } 14622 } 14623 14624 swiper.allowSlidePrev = allowSlidePrev; 14625 swiper.allowSlideNext = allowSlideNext; 14626 swiper.emit('loopFix'); 14627} 14628 14629/***/ }), 14630
vendor: 1,927 bytes, lines 14631-14682
14631/***/ "./node_modules/swiper/core/moduleExtendParams.js": 14632/*!********************************************************!*\ 14633 !*** ./node_modules/swiper/core/moduleExtendParams.js ***! 14634 \********************************************************/ 14635/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14636 14637__webpack_require__.r(__webpack_exports__); 14638/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14639/* harmony export */ "default": function() { return /* binding */ moduleExtendParams; } 14640/* harmony export */ }); 14641/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 14642 14643function moduleExtendParams(params, allModulesParams) { 14644 return function extendParams(obj = {}) { 14645 const moduleParamName = Object.keys(obj)[0]; 14646 const moduleParams = obj[moduleParamName]; 14647 14648 if (typeof moduleParams !== 'object' || moduleParams === null) { 14649 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(allModulesParams, obj); 14650 return; 14651 } 14652 14653 if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) { 14654 params[moduleParamName] = { 14655 auto: true 14656 }; 14657 } 14658 14659 if (!(moduleParamName in params && 'enabled' in moduleParams)) { 14660 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(allModulesParams, obj); 14661 return; 14662 } 14663 14664 if (params[moduleParamName] === true) { 14665 params[moduleParamName] = { 14666 enabled: true 14667 }; 14668 } 14669 14670 if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) { 14671 params[moduleParamName].enabled = true; 14672 } 14673 14674 if (!params[moduleParamName]) params[moduleParamName] = { 14675 enabled: false 14676 }; 14677 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.extend)(allModulesParams, obj); 14678 }; 14679} 14680 14681/***/ }), 14682
vendor: 2,778 bytes, lines 14683-14771
14683/***/ "./node_modules/swiper/core/modules/observer/observer.js": 14684/*!***************************************************************!*\ 14685 !*** ./node_modules/swiper/core/modules/observer/observer.js ***! 14686 \***************************************************************/ 14687/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14688 14689__webpack_require__.r(__webpack_exports__); 14690/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14691/* harmony export */ "default": function() { return /* binding */ Observer; } 14692/* harmony export */ }); 14693/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 14694 14695function Observer({ 14696 swiper, 14697 extendParams, 14698 on, 14699 emit 14700}) { 14701 const observers = []; 14702 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 14703 14704 const attach = (target, options = {}) => { 14705 const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver; 14706 const observer = new ObserverFunc(mutations => { 14707 // The observerUpdate event should only be triggered 14708 // once despite the number of mutations. Additional 14709 // triggers are redundant and are very costly 14710 if (mutations.length === 1) { 14711 emit('observerUpdate', mutations[0]); 14712 return; 14713 } 14714 14715 const observerUpdate = function observerUpdate() { 14716 emit('observerUpdate', mutations[0]); 14717 }; 14718 14719 if (window.requestAnimationFrame) { 14720 window.requestAnimationFrame(observerUpdate); 14721 } else { 14722 window.setTimeout(observerUpdate, 0); 14723 } 14724 }); 14725 observer.observe(target, { 14726 attributes: typeof options.attributes === 'undefined' ? true : options.attributes, 14727 childList: typeof options.childList === 'undefined' ? true : options.childList, 14728 characterData: typeof options.characterData === 'undefined' ? true : options.characterData 14729 }); 14730 observers.push(observer); 14731 }; 14732 14733 const init = () => { 14734 if (!swiper.params.observer) return; 14735 14736 if (swiper.params.observeParents) { 14737 const containerParents = swiper.$el.parents(); 14738 14739 for (let i = 0; i < containerParents.length; i += 1) { 14740 attach(containerParents[i]); 14741 } 14742 } // Observe container 14743 14744 14745 attach(swiper.$el[0], { 14746 childList: swiper.params.observeSlideChildren 14747 }); // Observe wrapper 14748 14749 attach(swiper.$wrapperEl[0], { 14750 attributes: false 14751 }); 14752 }; 14753 14754 const destroy = () => { 14755 observers.forEach(observer => { 14756 observer.disconnect(); 14757 }); 14758 observers.splice(0, observers.length); 14759 }; 14760 14761 extendParams({ 14762 observer: false, 14763 observeParents: false, 14764 observeSlideChildren: false 14765 }); 14766 on('init', init); 14767 on('destroy', destroy); 14768} 14769 14770/***/ }), 14771
vendor: 2,808 bytes, lines 14772-14860
14772/***/ "./node_modules/swiper/core/modules/resize/resize.js": 14773/*!***********************************************************!*\ 14774 !*** ./node_modules/swiper/core/modules/resize/resize.js ***! 14775 \***********************************************************/ 14776/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14777 14778__webpack_require__.r(__webpack_exports__); 14779/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14780/* harmony export */ "default": function() { return /* binding */ Resize; } 14781/* harmony export */ }); 14782/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 14783 14784function Resize({ 14785 swiper, 14786 on, 14787 emit 14788}) { 14789 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 14790 let observer = null; 14791 let animationFrame = null; 14792 14793 const resizeHandler = () => { 14794 if (!swiper || swiper.destroyed || !swiper.initialized) return; 14795 emit('beforeResize'); 14796 emit('resize'); 14797 }; 14798 14799 const createObserver = () => { 14800 if (!swiper || swiper.destroyed || !swiper.initialized) return; 14801 observer = new ResizeObserver(entries => { 14802 animationFrame = window.requestAnimationFrame(() => { 14803 const { 14804 width, 14805 height 14806 } = swiper; 14807 let newWidth = width; 14808 let newHeight = height; 14809 entries.forEach(({ 14810 contentBoxSize, 14811 contentRect, 14812 target 14813 }) => { 14814 if (target && target !== swiper.el) return; 14815 newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize; 14816 newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize; 14817 }); 14818 14819 if (newWidth !== width || newHeight !== height) { 14820 resizeHandler(); 14821 } 14822 }); 14823 }); 14824 observer.observe(swiper.el); 14825 }; 14826 14827 const removeObserver = () => { 14828 if (animationFrame) { 14829 window.cancelAnimationFrame(animationFrame); 14830 } 14831 14832 if (observer && observer.unobserve && swiper.el) { 14833 observer.unobserve(swiper.el); 14834 observer = null; 14835 } 14836 }; 14837 14838 const orientationChangeHandler = () => { 14839 if (!swiper || swiper.destroyed || !swiper.initialized) return; 14840 emit('orientationchange'); 14841 }; 14842 14843 on('init', () => { 14844 if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') { 14845 createObserver(); 14846 return; 14847 } 14848 14849 window.addEventListener('resize', resizeHandler); 14850 window.addEventListener('orientationchange', orientationChangeHandler); 14851 }); 14852 on('destroy', () => { 14853 removeObserver(); 14854 window.removeEventListener('resize', resizeHandler); 14855 window.removeEventListener('orientationchange', orientationChangeHandler); 14856 }); 14857} 14858 14859/***/ }), 14860
vendor: 2,134 bytes, lines 14861-14893
14861/***/ "./node_modules/swiper/core/slide/index.js": 14862/*!*************************************************!*\ 14863 !*** ./node_modules/swiper/core/slide/index.js ***! 14864 \*************************************************/ 14865/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14866 14867__webpack_require__.r(__webpack_exports__); 14868/* harmony import */ var _slideTo_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./slideTo.js */ "./node_modules/swiper/core/slide/slideTo.js"); 14869/* harmony import */ var _slideToLoop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./slideToLoop.js */ "./node_modules/swiper/core/slide/slideToLoop.js"); 14870/* harmony import */ var _slideNext_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./slideNext.js */ "./node_modules/swiper/core/slide/slideNext.js"); 14871/* harmony import */ var _slidePrev_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./slidePrev.js */ "./node_modules/swiper/core/slide/slidePrev.js"); 14872/* harmony import */ var _slideReset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./slideReset.js */ "./node_modules/swiper/core/slide/slideReset.js"); 14873/* harmony import */ var _slideToClosest_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./slideToClosest.js */ "./node_modules/swiper/core/slide/slideToClosest.js"); 14874/* harmony import */ var _slideToClickedSlide_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./slideToClickedSlide.js */ "./node_modules/swiper/core/slide/slideToClickedSlide.js"); 14875 14876 14877 14878 14879 14880 14881 14882/* harmony default export */ __webpack_exports__["default"] = ({ 14883 slideTo: _slideTo_js__WEBPACK_IMPORTED_MODULE_0__["default"], 14884 slideToLoop: _slideToLoop_js__WEBPACK_IMPORTED_MODULE_1__["default"], 14885 slideNext: _slideNext_js__WEBPACK_IMPORTED_MODULE_2__["default"], 14886 slidePrev: _slidePrev_js__WEBPACK_IMPORTED_MODULE_3__["default"], 14887 slideReset: _slideReset_js__WEBPACK_IMPORTED_MODULE_4__["default"], 14888 slideToClosest: _slideToClosest_js__WEBPACK_IMPORTED_MODULE_5__["default"], 14889 slideToClickedSlide: _slideToClickedSlide_js__WEBPACK_IMPORTED_MODULE_6__["default"] 14890}); 14891 14892/***/ }), 14893
vendor: 1,484 bytes, lines 14894-14936
14894/***/ "./node_modules/swiper/core/slide/slideNext.js": 14895/*!*****************************************************!*\ 14896 !*** ./node_modules/swiper/core/slide/slideNext.js ***! 14897 \*****************************************************/ 14898/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14899 14900__webpack_require__.r(__webpack_exports__); 14901/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14902/* harmony export */ "default": function() { return /* binding */ slideNext; } 14903/* harmony export */ }); 14904/* eslint no-unused-vars: "off" */ 14905function slideNext(speed = this.params.speed, runCallbacks = true, internal) { 14906 const swiper = this; 14907 const { 14908 animating, 14909 enabled, 14910 params 14911 } = swiper; 14912 if (!enabled) return swiper; 14913 let perGroup = params.slidesPerGroup; 14914 14915 if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { 14916 perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1); 14917 } 14918 14919 const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup; 14920 14921 if (params.loop) { 14922 if (animating && params.loopPreventsSlide) return false; 14923 swiper.loopFix(); // eslint-disable-next-line 14924 14925 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 14926 } 14927 14928 if (params.rewind && swiper.isEnd) { 14929 return swiper.slideTo(0, speed, runCallbacks, internal); 14930 } 14931 14932 return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 14933} 14934 14935/***/ }), 14936
vendor: 2,559 bytes, lines 14937-15013
14937/***/ "./node_modules/swiper/core/slide/slidePrev.js": 14938/*!*****************************************************!*\ 14939 !*** ./node_modules/swiper/core/slide/slidePrev.js ***! 14940 \*****************************************************/ 14941/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 14942 14943__webpack_require__.r(__webpack_exports__); 14944/* harmony export */ __webpack_require__.d(__webpack_exports__, { 14945/* harmony export */ "default": function() { return /* binding */ slidePrev; } 14946/* harmony export */ }); 14947/* eslint no-unused-vars: "off" */ 14948function slidePrev(speed = this.params.speed, runCallbacks = true, internal) { 14949 const swiper = this; 14950 const { 14951 params, 14952 animating, 14953 snapGrid, 14954 slidesGrid, 14955 rtlTranslate, 14956 enabled 14957 } = swiper; 14958 if (!enabled) return swiper; 14959 14960 if (params.loop) { 14961 if (animating && params.loopPreventsSlide) return false; 14962 swiper.loopFix(); // eslint-disable-next-line 14963 14964 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 14965 } 14966 14967 const translate = rtlTranslate ? swiper.translate : -swiper.translate; 14968 14969 function normalize(val) { 14970 if (val < 0) return -Math.floor(Math.abs(val)); 14971 return Math.floor(val); 14972 } 14973 14974 const normalizedTranslate = normalize(translate); 14975 const normalizedSnapGrid = snapGrid.map(val => normalize(val)); 14976 let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; 14977 14978 if (typeof prevSnap === 'undefined' && params.cssMode) { 14979 let prevSnapIndex; 14980 snapGrid.forEach((snap, snapIndex) => { 14981 if (normalizedTranslate >= snap) { 14982 // prevSnap = snap; 14983 prevSnapIndex = snapIndex; 14984 } 14985 }); 14986 14987 if (typeof prevSnapIndex !== 'undefined') { 14988 prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex]; 14989 } 14990 } 14991 14992 let prevIndex = 0; 14993 14994 if (typeof prevSnap !== 'undefined') { 14995 prevIndex = slidesGrid.indexOf(prevSnap); 14996 if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; 14997 14998 if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { 14999 prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1; 15000 prevIndex = Math.max(prevIndex, 0); 15001 } 15002 } 15003 15004 if (params.rewind && swiper.isBeginning) { 15005 const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1; 15006 return swiper.slideTo(lastIndex, speed, runCallbacks, internal); 15007 } 15008 15009 return swiper.slideTo(prevIndex, speed, runCallbacks, internal); 15010} 15011 15012/***/ }), 15013
vendor: 778 bytes, lines 15014-15031
15014/***/ "./node_modules/swiper/core/slide/slideReset.js": 15015/*!******************************************************!*\ 15016 !*** ./node_modules/swiper/core/slide/slideReset.js ***! 15017 \******************************************************/ 15018/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15019 15020__webpack_require__.r(__webpack_exports__); 15021/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15022/* harmony export */ "default": function() { return /* binding */ slideReset; } 15023/* harmony export */ }); 15024/* eslint no-unused-vars: "off" */ 15025function slideReset(speed = this.params.speed, runCallbacks = true, internal) { 15026 const swiper = this; 15027 return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); 15028} 15029 15030/***/ }), 15031
vendor: 6,488 bytes, lines 15032-15225
15032/***/ "./node_modules/swiper/core/slide/slideTo.js": 15033/*!***************************************************!*\ 15034 !*** ./node_modules/swiper/core/slide/slideTo.js ***! 15035 \***************************************************/ 15036/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15037 15038__webpack_require__.r(__webpack_exports__); 15039/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15040/* harmony export */ "default": function() { return /* binding */ slideTo; } 15041/* harmony export */ }); 15042/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 15043 15044function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) { 15045 if (typeof index !== 'number' && typeof index !== 'string') { 15046 throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`); 15047 } 15048 15049 if (typeof index === 'string') { 15050 /** 15051 * The `index` argument converted from `string` to `number`. 15052 * @type {number} 15053 */ 15054 const indexAsNumber = parseInt(index, 10); 15055 /** 15056 * Determines whether the `index` argument is a valid `number` 15057 * after being converted from the `string` type. 15058 * @type {boolean} 15059 */ 15060 15061 const isValidNumber = isFinite(indexAsNumber); 15062 15063 if (!isValidNumber) { 15064 throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`); 15065 } // Knowing that the converted `index` is a valid number, 15066 // we can update the original argument's value. 15067 15068 15069 index = indexAsNumber; 15070 } 15071 15072 const swiper = this; 15073 let slideIndex = index; 15074 if (slideIndex < 0) slideIndex = 0; 15075 const { 15076 params, 15077 snapGrid, 15078 slidesGrid, 15079 previousIndex, 15080 activeIndex, 15081 rtlTranslate: rtl, 15082 wrapperEl, 15083 enabled 15084 } = swiper; 15085 15086 if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) { 15087 return false; 15088 } 15089 15090 const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); 15091 let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); 15092 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 15093 const translate = -snapGrid[snapIndex]; // Normalize slideIndex 15094 15095 if (params.normalizeSlideIndex) { 15096 for (let i = 0; i < slidesGrid.length; i += 1) { 15097 const normalizedTranslate = -Math.floor(translate * 100); 15098 const normalizedGrid = Math.floor(slidesGrid[i] * 100); 15099 const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100); 15100 15101 if (typeof slidesGrid[i + 1] !== 'undefined') { 15102 if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) { 15103 slideIndex = i; 15104 } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) { 15105 slideIndex = i + 1; 15106 } 15107 } else if (normalizedTranslate >= normalizedGrid) { 15108 slideIndex = i; 15109 } 15110 } 15111 } // Directions locks 15112 15113 15114 if (swiper.initialized && slideIndex !== activeIndex) { 15115 if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) { 15116 return false; 15117 } 15118 15119 if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { 15120 if ((activeIndex || 0) !== slideIndex) return false; 15121 } 15122 } 15123 15124 if (slideIndex !== (previousIndex || 0) && runCallbacks) { 15125 swiper.emit('beforeSlideChangeStart'); 15126 } // Update progress 15127 15128 15129 swiper.updateProgress(translate); 15130 let direction; 15131 if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index 15132 15133 if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) { 15134 swiper.updateActiveIndex(slideIndex); // Update Height 15135 15136 if (params.autoHeight) { 15137 swiper.updateAutoHeight(); 15138 } 15139 15140 swiper.updateSlidesClasses(); 15141 15142 if (params.effect !== 'slide') { 15143 swiper.setTranslate(translate); 15144 } 15145 15146 if (direction !== 'reset') { 15147 swiper.transitionStart(runCallbacks, direction); 15148 swiper.transitionEnd(runCallbacks, direction); 15149 } 15150 15151 return false; 15152 } 15153 15154 if (params.cssMode) { 15155 const isH = swiper.isHorizontal(); 15156 const t = rtl ? translate : -translate; 15157 15158 if (speed === 0) { 15159 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 15160 15161 if (isVirtual) { 15162 swiper.wrapperEl.style.scrollSnapType = 'none'; 15163 swiper._immediateVirtual = true; 15164 } 15165 15166 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 15167 15168 if (isVirtual) { 15169 requestAnimationFrame(() => { 15170 swiper.wrapperEl.style.scrollSnapType = ''; 15171 swiper._swiperImmediateVirtual = false; 15172 }); 15173 } 15174 } else { 15175 if (!swiper.support.smoothScroll) { 15176 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.animateCSSModeScroll)({ 15177 swiper, 15178 targetPosition: t, 15179 side: isH ? 'left' : 'top' 15180 }); 15181 return true; 15182 } 15183 15184 wrapperEl.scrollTo({ 15185 [isH ? 'left' : 'top']: t, 15186 behavior: 'smooth' 15187 }); 15188 } 15189 15190 return true; 15191 } 15192 15193 swiper.setTransition(speed); 15194 swiper.setTranslate(translate); 15195 swiper.updateActiveIndex(slideIndex); 15196 swiper.updateSlidesClasses(); 15197 swiper.emit('beforeTransitionStart', speed, internal); 15198 swiper.transitionStart(runCallbacks, direction); 15199 15200 if (speed === 0) { 15201 swiper.transitionEnd(runCallbacks, direction); 15202 } else if (!swiper.animating) { 15203 swiper.animating = true; 15204 15205 if (!swiper.onSlideToWrapperTransitionEnd) { 15206 swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { 15207 if (!swiper || swiper.destroyed) return; 15208 if (e.target !== this) return; 15209 swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 15210 swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); 15211 swiper.onSlideToWrapperTransitionEnd = null; 15212 delete swiper.onSlideToWrapperTransitionEnd; 15213 swiper.transitionEnd(runCallbacks, direction); 15214 }; 15215 } 15216 15217 swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 15218 swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); 15219 } 15220 15221 return true; 15222} 15223 15224/***/ }), 15225
vendor: 2,442 bytes, lines 15226-15279
15226/***/ "./node_modules/swiper/core/slide/slideToClickedSlide.js": 15227/*!***************************************************************!*\ 15228 !*** ./node_modules/swiper/core/slide/slideToClickedSlide.js ***! 15229 \***************************************************************/ 15230/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15231 15232__webpack_require__.r(__webpack_exports__); 15233/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15234/* harmony export */ "default": function() { return /* binding */ slideToClickedSlide; } 15235/* harmony export */ }); 15236/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 15237/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 15238 15239 15240function slideToClickedSlide() { 15241 const swiper = this; 15242 const { 15243 params, 15244 $wrapperEl 15245 } = swiper; 15246 const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; 15247 let slideToIndex = swiper.clickedIndex; 15248 let realIndex; 15249 15250 if (params.loop) { 15251 if (swiper.animating) return; 15252 realIndex = parseInt((0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(swiper.clickedSlide).attr('data-swiper-slide-index'), 10); 15253 15254 if (params.centeredSlides) { 15255 if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) { 15256 swiper.loopFix(); 15257 slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`).eq(0).index(); 15258 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.nextTick)(() => { 15259 swiper.slideTo(slideToIndex); 15260 }); 15261 } else { 15262 swiper.slideTo(slideToIndex); 15263 } 15264 } else if (slideToIndex > swiper.slides.length - slidesPerView) { 15265 swiper.loopFix(); 15266 slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`).eq(0).index(); 15267 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.nextTick)(() => { 15268 swiper.slideTo(slideToIndex); 15269 }); 15270 } else { 15271 swiper.slideTo(slideToIndex); 15272 } 15273 } else { 15274 swiper.slideTo(slideToIndex); 15275 } 15276} 15277 15278/***/ }), 15279
vendor: 1,961 bytes, lines 15280-15324
15280/***/ "./node_modules/swiper/core/slide/slideToClosest.js": 15281/*!**********************************************************!*\ 15282 !*** ./node_modules/swiper/core/slide/slideToClosest.js ***! 15283 \**********************************************************/ 15284/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15285 15286__webpack_require__.r(__webpack_exports__); 15287/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15288/* harmony export */ "default": function() { return /* binding */ slideToClosest; } 15289/* harmony export */ }); 15290/* eslint no-unused-vars: "off" */ 15291function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) { 15292 const swiper = this; 15293 let index = swiper.activeIndex; 15294 const skip = Math.min(swiper.params.slidesPerGroupSkip, index); 15295 const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); 15296 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 15297 15298 if (translate >= swiper.snapGrid[snapIndex]) { 15299 // The current translate is on or after the current snap index, so the choice 15300 // is between the current index and the one after it. 15301 const currentSnap = swiper.snapGrid[snapIndex]; 15302 const nextSnap = swiper.snapGrid[snapIndex + 1]; 15303 15304 if (translate - currentSnap > (nextSnap - currentSnap) * threshold) { 15305 index += swiper.params.slidesPerGroup; 15306 } 15307 } else { 15308 // The current translate is before the current snap index, so the choice 15309 // is between the current index and the one before it. 15310 const prevSnap = swiper.snapGrid[snapIndex - 1]; 15311 const currentSnap = swiper.snapGrid[snapIndex]; 15312 15313 if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) { 15314 index -= swiper.params.slidesPerGroup; 15315 } 15316 } 15317 15318 index = Math.max(index, 0); 15319 index = Math.min(index, swiper.slidesGrid.length - 1); 15320 return swiper.slideTo(index, speed, runCallbacks, internal); 15321} 15322 15323/***/ }), 15324
vendor: 1,527 bytes, lines 15325-15370
15325/***/ "./node_modules/swiper/core/slide/slideToLoop.js": 15326/*!*******************************************************!*\ 15327 !*** ./node_modules/swiper/core/slide/slideToLoop.js ***! 15328 \*******************************************************/ 15329/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15330 15331__webpack_require__.r(__webpack_exports__); 15332/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15333/* harmony export */ "default": function() { return /* binding */ slideToLoop; } 15334/* harmony export */ }); 15335function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) { 15336 if (typeof index === 'string') { 15337 /** 15338 * The `index` argument converted from `string` to `number`. 15339 * @type {number} 15340 */ 15341 const indexAsNumber = parseInt(index, 10); 15342 /** 15343 * Determines whether the `index` argument is a valid `number` 15344 * after being converted from the `string` type. 15345 * @type {boolean} 15346 */ 15347 15348 const isValidNumber = isFinite(indexAsNumber); 15349 15350 if (!isValidNumber) { 15351 throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`); 15352 } // Knowing that the converted `index` is a valid number, 15353 // we can update the original argument's value. 15354 15355 15356 index = indexAsNumber; 15357 } 15358 15359 const swiper = this; 15360 let newIndex = index; 15361 15362 if (swiper.params.loop) { 15363 newIndex += swiper.loopedSlides; 15364 } 15365 15366 return swiper.slideTo(newIndex, speed, runCallbacks, internal); 15367} 15368 15369/***/ }), 15370
vendor: 1,235 bytes, lines 15371-15391
15371/***/ "./node_modules/swiper/core/transition/index.js": 15372/*!******************************************************!*\ 15373 !*** ./node_modules/swiper/core/transition/index.js ***! 15374 \******************************************************/ 15375/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15376 15377__webpack_require__.r(__webpack_exports__); 15378/* harmony import */ var _setTransition_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setTransition.js */ "./node_modules/swiper/core/transition/setTransition.js"); 15379/* harmony import */ var _transitionStart_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./transitionStart.js */ "./node_modules/swiper/core/transition/transitionStart.js"); 15380/* harmony import */ var _transitionEnd_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./transitionEnd.js */ "./node_modules/swiper/core/transition/transitionEnd.js"); 15381 15382 15383 15384/* harmony default export */ __webpack_exports__["default"] = ({ 15385 setTransition: _setTransition_js__WEBPACK_IMPORTED_MODULE_0__["default"], 15386 transitionStart: _transitionStart_js__WEBPACK_IMPORTED_MODULE_1__["default"], 15387 transitionEnd: _transitionEnd_js__WEBPACK_IMPORTED_MODULE_2__["default"] 15388}); 15389 15390/***/ }), 15391
vendor: 809 bytes, lines 15392-15413
15392/***/ "./node_modules/swiper/core/transition/setTransition.js": 15393/*!**************************************************************!*\ 15394 !*** ./node_modules/swiper/core/transition/setTransition.js ***! 15395 \**************************************************************/ 15396/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15397 15398__webpack_require__.r(__webpack_exports__); 15399/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15400/* harmony export */ "default": function() { return /* binding */ setTransition; } 15401/* harmony export */ }); 15402function setTransition(duration, byController) { 15403 const swiper = this; 15404 15405 if (!swiper.params.cssMode) { 15406 swiper.$wrapperEl.transition(duration); 15407 } 15408 15409 swiper.emit('setTransition', duration, byController); 15410} 15411 15412/***/ }), 15413
vendor: 1,291 bytes, lines 15414-15459
15414/***/ "./node_modules/swiper/core/transition/transitionEmit.js": 15415/*!***************************************************************!*\ 15416 !*** ./node_modules/swiper/core/transition/transitionEmit.js ***! 15417 \***************************************************************/ 15418/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15419 15420__webpack_require__.r(__webpack_exports__); 15421/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15422/* harmony export */ "default": function() { return /* binding */ transitionEmit; } 15423/* harmony export */ }); 15424function transitionEmit({ 15425 swiper, 15426 runCallbacks, 15427 direction, 15428 step 15429}) { 15430 const { 15431 activeIndex, 15432 previousIndex 15433 } = swiper; 15434 let dir = direction; 15435 15436 if (!dir) { 15437 if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset'; 15438 } 15439 15440 swiper.emit(`transition${step}`); 15441 15442 if (runCallbacks && activeIndex !== previousIndex) { 15443 if (dir === 'reset') { 15444 swiper.emit(`slideResetTransition${step}`); 15445 return; 15446 } 15447 15448 swiper.emit(`slideChangeTransition${step}`); 15449 15450 if (dir === 'next') { 15451 swiper.emit(`slideNextTransition${step}`); 15452 } else { 15453 swiper.emit(`slidePrevTransition${step}`); 15454 } 15455 } 15456} 15457 15458/***/ }), 15459
vendor: 1,116 bytes, lines 15460-15489
15460/***/ "./node_modules/swiper/core/transition/transitionEnd.js": 15461/*!**************************************************************!*\ 15462 !*** ./node_modules/swiper/core/transition/transitionEnd.js ***! 15463 \**************************************************************/ 15464/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15465 15466__webpack_require__.r(__webpack_exports__); 15467/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15468/* harmony export */ "default": function() { return /* binding */ transitionEnd; } 15469/* harmony export */ }); 15470/* harmony import */ var _transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transitionEmit.js */ "./node_modules/swiper/core/transition/transitionEmit.js"); 15471 15472function transitionEnd(runCallbacks = true, direction) { 15473 const swiper = this; 15474 const { 15475 params 15476 } = swiper; 15477 swiper.animating = false; 15478 if (params.cssMode) return; 15479 swiper.setTransition(0); 15480 (0,_transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ 15481 swiper, 15482 runCallbacks, 15483 direction, 15484 step: 'End' 15485 }); 15486} 15487 15488/***/ }), 15489
vendor: 1,139 bytes, lines 15490-15522
15490/***/ "./node_modules/swiper/core/transition/transitionStart.js": 15491/*!****************************************************************!*\ 15492 !*** ./node_modules/swiper/core/transition/transitionStart.js ***! 15493 \****************************************************************/ 15494/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15495 15496__webpack_require__.r(__webpack_exports__); 15497/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15498/* harmony export */ "default": function() { return /* binding */ transitionStart; } 15499/* harmony export */ }); 15500/* harmony import */ var _transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./transitionEmit.js */ "./node_modules/swiper/core/transition/transitionEmit.js"); 15501 15502function transitionStart(runCallbacks = true, direction) { 15503 const swiper = this; 15504 const { 15505 params 15506 } = swiper; 15507 if (params.cssMode) return; 15508 15509 if (params.autoHeight) { 15510 swiper.updateAutoHeight(); 15511 } 15512 15513 (0,_transitionEmit_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ 15514 swiper, 15515 runCallbacks, 15516 direction, 15517 step: 'Start' 15518 }); 15519} 15520 15521/***/ }), 15522
vendor: 1,265 bytes, lines 15523-15558
15523/***/ "./node_modules/swiper/core/translate/getTranslate.js": 15524/*!************************************************************!*\ 15525 !*** ./node_modules/swiper/core/translate/getTranslate.js ***! 15526 \************************************************************/ 15527/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15528 15529__webpack_require__.r(__webpack_exports__); 15530/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15531/* harmony export */ "default": function() { return /* binding */ getSwiperTranslate; } 15532/* harmony export */ }); 15533/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 15534 15535function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') { 15536 const swiper = this; 15537 const { 15538 params, 15539 rtlTranslate: rtl, 15540 translate, 15541 $wrapperEl 15542 } = swiper; 15543 15544 if (params.virtualTranslate) { 15545 return rtl ? -translate : translate; 15546 } 15547 15548 if (params.cssMode) { 15549 return translate; 15550 } 15551 15552 let currentTranslate = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.getTranslate)($wrapperEl[0], axis); 15553 if (rtl) currentTranslate = -currentTranslate; 15554 return currentTranslate || 0; 15555} 15556 15557/***/ }), 15558
vendor: 1,698 bytes, lines 15559-15585
15559/***/ "./node_modules/swiper/core/translate/index.js": 15560/*!*****************************************************!*\ 15561 !*** ./node_modules/swiper/core/translate/index.js ***! 15562 \*****************************************************/ 15563/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15564 15565__webpack_require__.r(__webpack_exports__); 15566/* harmony import */ var _getTranslate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getTranslate.js */ "./node_modules/swiper/core/translate/getTranslate.js"); 15567/* harmony import */ var _setTranslate_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./setTranslate.js */ "./node_modules/swiper/core/translate/setTranslate.js"); 15568/* harmony import */ var _minTranslate_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./minTranslate.js */ "./node_modules/swiper/core/translate/minTranslate.js"); 15569/* harmony import */ var _maxTranslate_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./maxTranslate.js */ "./node_modules/swiper/core/translate/maxTranslate.js"); 15570/* harmony import */ var _translateTo_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./translateTo.js */ "./node_modules/swiper/core/translate/translateTo.js"); 15571 15572 15573 15574 15575 15576/* harmony default export */ __webpack_exports__["default"] = ({ 15577 getTranslate: _getTranslate_js__WEBPACK_IMPORTED_MODULE_0__["default"], 15578 setTranslate: _setTranslate_js__WEBPACK_IMPORTED_MODULE_1__["default"], 15579 minTranslate: _minTranslate_js__WEBPACK_IMPORTED_MODULE_2__["default"], 15580 maxTranslate: _maxTranslate_js__WEBPACK_IMPORTED_MODULE_3__["default"], 15581 translateTo: _translateTo_js__WEBPACK_IMPORTED_MODULE_4__["default"] 15582}); 15583 15584/***/ }), 15585
vendor: 667 bytes, lines 15586-15601
15586/***/ "./node_modules/swiper/core/translate/maxTranslate.js": 15587/*!************************************************************!*\ 15588 !*** ./node_modules/swiper/core/translate/maxTranslate.js ***! 15589 \************************************************************/ 15590/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15591 15592__webpack_require__.r(__webpack_exports__); 15593/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15594/* harmony export */ "default": function() { return /* binding */ maxTranslate; } 15595/* harmony export */ }); 15596function maxTranslate() { 15597 return -this.snapGrid[this.snapGrid.length - 1]; 15598} 15599 15600/***/ }), 15601
vendor: 644 bytes, lines 15602-15617
15602/***/ "./node_modules/swiper/core/translate/minTranslate.js": 15603/*!************************************************************!*\ 15604 !*** ./node_modules/swiper/core/translate/minTranslate.js ***! 15605 \************************************************************/ 15606/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15607 15608__webpack_require__.r(__webpack_exports__); 15609/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15610/* harmony export */ "default": function() { return /* binding */ minTranslate; } 15611/* harmony export */ }); 15612function minTranslate() { 15613 return -this.snapGrid[0]; 15614} 15615 15616/***/ }), 15617
vendor: 1,737 bytes, lines 15618-15678
15618/***/ "./node_modules/swiper/core/translate/setTranslate.js": 15619/*!************************************************************!*\ 15620 !*** ./node_modules/swiper/core/translate/setTranslate.js ***! 15621 \************************************************************/ 15622/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15623 15624__webpack_require__.r(__webpack_exports__); 15625/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15626/* harmony export */ "default": function() { return /* binding */ setTranslate; } 15627/* harmony export */ }); 15628function setTranslate(translate, byController) { 15629 const swiper = this; 15630 const { 15631 rtlTranslate: rtl, 15632 params, 15633 $wrapperEl, 15634 wrapperEl, 15635 progress 15636 } = swiper; 15637 let x = 0; 15638 let y = 0; 15639 const z = 0; 15640 15641 if (swiper.isHorizontal()) { 15642 x = rtl ? -translate : translate; 15643 } else { 15644 y = translate; 15645 } 15646 15647 if (params.roundLengths) { 15648 x = Math.floor(x); 15649 y = Math.floor(y); 15650 } 15651 15652 if (params.cssMode) { 15653 wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y; 15654 } else if (!params.virtualTranslate) { 15655 $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`); 15656 } 15657 15658 swiper.previousTranslate = swiper.translate; 15659 swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress 15660 15661 let newProgress; 15662 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 15663 15664 if (translatesDiff === 0) { 15665 newProgress = 0; 15666 } else { 15667 newProgress = (translate - swiper.minTranslate()) / translatesDiff; 15668 } 15669 15670 if (newProgress !== progress) { 15671 swiper.updateProgress(translate); 15672 } 15673 15674 swiper.emit('setTranslate', swiper.translate, byController); 15675} 15676 15677/***/ }), 15678
vendor: 3,375 bytes, lines 15679-15777
15679/***/ "./node_modules/swiper/core/translate/translateTo.js": 15680/*!***********************************************************!*\ 15681 !*** ./node_modules/swiper/core/translate/translateTo.js ***! 15682 \***********************************************************/ 15683/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15684 15685__webpack_require__.r(__webpack_exports__); 15686/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15687/* harmony export */ "default": function() { return /* binding */ translateTo; } 15688/* harmony export */ }); 15689/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 15690 15691function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) { 15692 const swiper = this; 15693 const { 15694 params, 15695 wrapperEl 15696 } = swiper; 15697 15698 if (swiper.animating && params.preventInteractionOnTransition) { 15699 return false; 15700 } 15701 15702 const minTranslate = swiper.minTranslate(); 15703 const maxTranslate = swiper.maxTranslate(); 15704 let newTranslate; 15705 if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate; // Update progress 15706 15707 swiper.updateProgress(newTranslate); 15708 15709 if (params.cssMode) { 15710 const isH = swiper.isHorizontal(); 15711 15712 if (speed === 0) { 15713 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; 15714 } else { 15715 if (!swiper.support.smoothScroll) { 15716 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.animateCSSModeScroll)({ 15717 swiper, 15718 targetPosition: -newTranslate, 15719 side: isH ? 'left' : 'top' 15720 }); 15721 return true; 15722 } 15723 15724 wrapperEl.scrollTo({ 15725 [isH ? 'left' : 'top']: -newTranslate, 15726 behavior: 'smooth' 15727 }); 15728 } 15729 15730 return true; 15731 } 15732 15733 if (speed === 0) { 15734 swiper.setTransition(0); 15735 swiper.setTranslate(newTranslate); 15736 15737 if (runCallbacks) { 15738 swiper.emit('beforeTransitionStart', speed, internal); 15739 swiper.emit('transitionEnd'); 15740 } 15741 } else { 15742 swiper.setTransition(speed); 15743 swiper.setTranslate(newTranslate); 15744 15745 if (runCallbacks) { 15746 swiper.emit('beforeTransitionStart', speed, internal); 15747 swiper.emit('transitionStart'); 15748 } 15749 15750 if (!swiper.animating) { 15751 swiper.animating = true; 15752 15753 if (!swiper.onTranslateToWrapperTransitionEnd) { 15754 swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) { 15755 if (!swiper || swiper.destroyed) return; 15756 if (e.target !== this) return; 15757 swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 15758 swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); 15759 swiper.onTranslateToWrapperTransitionEnd = null; 15760 delete swiper.onTranslateToWrapperTransitionEnd; 15761 15762 if (runCallbacks) { 15763 swiper.emit('transitionEnd'); 15764 } 15765 }; 15766 } 15767 15768 swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 15769 swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); 15770 } 15771 } 15772 15773 return true; 15774} 15775 15776/***/ }), 15777
vendor: 2,844 bytes, lines 15778-15816
15778/***/ "./node_modules/swiper/core/update/index.js": 15779/*!**************************************************!*\ 15780 !*** ./node_modules/swiper/core/update/index.js ***! 15781 \**************************************************/ 15782/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15783 15784__webpack_require__.r(__webpack_exports__); 15785/* harmony import */ var _updateSize_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./updateSize.js */ "./node_modules/swiper/core/update/updateSize.js"); 15786/* harmony import */ var _updateSlides_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./updateSlides.js */ "./node_modules/swiper/core/update/updateSlides.js"); 15787/* harmony import */ var _updateAutoHeight_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./updateAutoHeight.js */ "./node_modules/swiper/core/update/updateAutoHeight.js"); 15788/* harmony import */ var _updateSlidesOffset_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./updateSlidesOffset.js */ "./node_modules/swiper/core/update/updateSlidesOffset.js"); 15789/* harmony import */ var _updateSlidesProgress_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./updateSlidesProgress.js */ "./node_modules/swiper/core/update/updateSlidesProgress.js"); 15790/* harmony import */ var _updateProgress_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./updateProgress.js */ "./node_modules/swiper/core/update/updateProgress.js"); 15791/* harmony import */ var _updateSlidesClasses_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./updateSlidesClasses.js */ "./node_modules/swiper/core/update/updateSlidesClasses.js"); 15792/* harmony import */ var _updateActiveIndex_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./updateActiveIndex.js */ "./node_modules/swiper/core/update/updateActiveIndex.js"); 15793/* harmony import */ var _updateClickedSlide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./updateClickedSlide.js */ "./node_modules/swiper/core/update/updateClickedSlide.js"); 15794 15795 15796 15797 15798 15799 15800 15801 15802 15803/* harmony default export */ __webpack_exports__["default"] = ({ 15804 updateSize: _updateSize_js__WEBPACK_IMPORTED_MODULE_0__["default"], 15805 updateSlides: _updateSlides_js__WEBPACK_IMPORTED_MODULE_1__["default"], 15806 updateAutoHeight: _updateAutoHeight_js__WEBPACK_IMPORTED_MODULE_2__["default"], 15807 updateSlidesOffset: _updateSlidesOffset_js__WEBPACK_IMPORTED_MODULE_3__["default"], 15808 updateSlidesProgress: _updateSlidesProgress_js__WEBPACK_IMPORTED_MODULE_4__["default"], 15809 updateProgress: _updateProgress_js__WEBPACK_IMPORTED_MODULE_5__["default"], 15810 updateSlidesClasses: _updateSlidesClasses_js__WEBPACK_IMPORTED_MODULE_6__["default"], 15811 updateActiveIndex: _updateActiveIndex_js__WEBPACK_IMPORTED_MODULE_7__["default"], 15812 updateClickedSlide: _updateClickedSlide_js__WEBPACK_IMPORTED_MODULE_8__["default"] 15813}); 15814 15815/***/ }), 15816
vendor: 2,613 bytes, lines 15817-15899
15817/***/ "./node_modules/swiper/core/update/updateActiveIndex.js": 15818/*!**************************************************************!*\ 15819 !*** ./node_modules/swiper/core/update/updateActiveIndex.js ***! 15820 \**************************************************************/ 15821/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15822 15823__webpack_require__.r(__webpack_exports__); 15824/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15825/* harmony export */ "default": function() { return /* binding */ updateActiveIndex; } 15826/* harmony export */ }); 15827function updateActiveIndex(newActiveIndex) { 15828 const swiper = this; 15829 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 15830 const { 15831 slidesGrid, 15832 snapGrid, 15833 params, 15834 activeIndex: previousIndex, 15835 realIndex: previousRealIndex, 15836 snapIndex: previousSnapIndex 15837 } = swiper; 15838 let activeIndex = newActiveIndex; 15839 let snapIndex; 15840 15841 if (typeof activeIndex === 'undefined') { 15842 for (let i = 0; i < slidesGrid.length; i += 1) { 15843 if (typeof slidesGrid[i + 1] !== 'undefined') { 15844 if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) { 15845 activeIndex = i; 15846 } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) { 15847 activeIndex = i + 1; 15848 } 15849 } else if (translate >= slidesGrid[i]) { 15850 activeIndex = i; 15851 } 15852 } // Normalize slideIndex 15853 15854 15855 if (params.normalizeSlideIndex) { 15856 if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0; 15857 } 15858 } 15859 15860 if (snapGrid.indexOf(translate) >= 0) { 15861 snapIndex = snapGrid.indexOf(translate); 15862 } else { 15863 const skip = Math.min(params.slidesPerGroupSkip, activeIndex); 15864 snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup); 15865 } 15866 15867 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 15868 15869 if (activeIndex === previousIndex) { 15870 if (snapIndex !== previousSnapIndex) { 15871 swiper.snapIndex = snapIndex; 15872 swiper.emit('snapIndexChange'); 15873 } 15874 15875 return; 15876 } // Get real index 15877 15878 15879 const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10); 15880 Object.assign(swiper, { 15881 snapIndex, 15882 realIndex, 15883 previousIndex, 15884 activeIndex 15885 }); 15886 swiper.emit('activeIndexChange'); 15887 swiper.emit('snapIndexChange'); 15888 15889 if (previousRealIndex !== realIndex) { 15890 swiper.emit('realIndexChange'); 15891 } 15892 15893 if (swiper.initialized || swiper.params.runCallbacksOnInit) { 15894 swiper.emit('slideChange'); 15895 } 15896} 15897 15898/***/ }), 15899
vendor: 2,334 bytes, lines 15900-15963
15900/***/ "./node_modules/swiper/core/update/updateAutoHeight.js": 15901/*!*************************************************************!*\ 15902 !*** ./node_modules/swiper/core/update/updateAutoHeight.js ***! 15903 \*************************************************************/ 15904/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15905 15906__webpack_require__.r(__webpack_exports__); 15907/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15908/* harmony export */ "default": function() { return /* binding */ updateAutoHeight; } 15909/* harmony export */ }); 15910/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 15911 15912function updateAutoHeight(speed) { 15913 const swiper = this; 15914 const activeSlides = []; 15915 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 15916 let newHeight = 0; 15917 let i; 15918 15919 if (typeof speed === 'number') { 15920 swiper.setTransition(speed); 15921 } else if (speed === true) { 15922 swiper.setTransition(swiper.params.speed); 15923 } 15924 15925 const getSlideByIndex = index => { 15926 if (isVirtual) { 15927 return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0]; 15928 } 15929 15930 return swiper.slides.eq(index)[0]; 15931 }; // Find slides currently in view 15932 15933 15934 if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) { 15935 if (swiper.params.centeredSlides) { 15936 (swiper.visibleSlides || (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])([])).each(slide => { 15937 activeSlides.push(slide); 15938 }); 15939 } else { 15940 for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) { 15941 const index = swiper.activeIndex + i; 15942 if (index > swiper.slides.length && !isVirtual) break; 15943 activeSlides.push(getSlideByIndex(index)); 15944 } 15945 } 15946 } else { 15947 activeSlides.push(getSlideByIndex(swiper.activeIndex)); 15948 } // Find new height from highest slide in view 15949 15950 15951 for (i = 0; i < activeSlides.length; i += 1) { 15952 if (typeof activeSlides[i] !== 'undefined') { 15953 const height = activeSlides[i].offsetHeight; 15954 newHeight = height > newHeight ? height : newHeight; 15955 } 15956 } // Update Height 15957 15958 15959 if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`); 15960} 15961 15962/***/ }), 15963
vendor: 1,792 bytes, lines 15964-16013
15964/***/ "./node_modules/swiper/core/update/updateClickedSlide.js": 15965/*!***************************************************************!*\ 15966 !*** ./node_modules/swiper/core/update/updateClickedSlide.js ***! 15967 \***************************************************************/ 15968/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 15969 15970__webpack_require__.r(__webpack_exports__); 15971/* harmony export */ __webpack_require__.d(__webpack_exports__, { 15972/* harmony export */ "default": function() { return /* binding */ updateClickedSlide; } 15973/* harmony export */ }); 15974/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 15975 15976function updateClickedSlide(e) { 15977 const swiper = this; 15978 const params = swiper.params; 15979 const slide = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(e).closest(`.${params.slideClass}`)[0]; 15980 let slideFound = false; 15981 let slideIndex; 15982 15983 if (slide) { 15984 for (let i = 0; i < swiper.slides.length; i += 1) { 15985 if (swiper.slides[i] === slide) { 15986 slideFound = true; 15987 slideIndex = i; 15988 break; 15989 } 15990 } 15991 } 15992 15993 if (slide && slideFound) { 15994 swiper.clickedSlide = slide; 15995 15996 if (swiper.virtual && swiper.params.virtual.enabled) { 15997 swiper.clickedIndex = parseInt((0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(slide).attr('data-swiper-slide-index'), 10); 15998 } else { 15999 swiper.clickedIndex = slideIndex; 16000 } 16001 } else { 16002 swiper.clickedSlide = undefined; 16003 swiper.clickedIndex = undefined; 16004 return; 16005 } 16006 16007 if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) { 16008 swiper.slideToClickedSlide(); 16009 } 16010} 16011 16012/***/ }), 16013
vendor: 1,798 bytes, lines 16014-16076
16014/***/ "./node_modules/swiper/core/update/updateProgress.js": 16015/*!***********************************************************!*\ 16016 !*** ./node_modules/swiper/core/update/updateProgress.js ***! 16017 \***********************************************************/ 16018/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 16019 16020__webpack_require__.r(__webpack_exports__); 16021/* harmony export */ __webpack_require__.d(__webpack_exports__, { 16022/* harmony export */ "default": function() { return /* binding */ updateProgress; } 16023/* harmony export */ }); 16024function updateProgress(translate) { 16025 const swiper = this; 16026 16027 if (typeof translate === 'undefined') { 16028 const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line 16029 16030 translate = swiper && swiper.translate && swiper.translate * multiplier || 0; 16031 } 16032 16033 const params = swiper.params; 16034 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 16035 let { 16036 progress, 16037 isBeginning, 16038 isEnd 16039 } = swiper; 16040 const wasBeginning = isBeginning; 16041 const wasEnd = isEnd; 16042 16043 if (translatesDiff === 0) { 16044 progress = 0; 16045 isBeginning = true; 16046 isEnd = true; 16047 } else { 16048 progress = (translate - swiper.minTranslate()) / translatesDiff; 16049 isBeginning = progress <= 0; 16050 isEnd = progress >= 1; 16051 } 16052 16053 Object.assign(swiper, { 16054 progress, 16055 isBeginning, 16056 isEnd 16057 }); 16058 if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate); 16059 16060 if (isBeginning && !wasBeginning) { 16061 swiper.emit('reachBeginning toEdge'); 16062 } 16063 16064 if (isEnd && !wasEnd) { 16065 swiper.emit('reachEnd toEdge'); 16066 } 16067 16068 if (wasBeginning && !isBeginning || wasEnd && !isEnd) { 16069 swiper.emit('fromEdge'); 16070 } 16071 16072 swiper.emit('progress', progress); 16073} 16074 16075/***/ }), 16076
vendor: 1,529 bytes, lines 16077-16122
16077/***/ "./node_modules/swiper/core/update/updateSize.js": 16078/*!*******************************************************!*\ 16079 !*** ./node_modules/swiper/core/update/updateSize.js ***! 16080 \*******************************************************/ 16081/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 16082 16083__webpack_require__.r(__webpack_exports__); 16084/* harmony export */ __webpack_require__.d(__webpack_exports__, { 16085/* harmony export */ "default": function() { return /* binding */ updateSize; } 16086/* harmony export */ }); 16087function updateSize() { 16088 const swiper = this; 16089 let width; 16090 let height; 16091 const $el = swiper.$el; 16092 16093 if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) { 16094 width = swiper.params.width; 16095 } else { 16096 width = $el[0].clientWidth; 16097 } 16098 16099 if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) { 16100 height = swiper.params.height; 16101 } else { 16102 height = $el[0].clientHeight; 16103 } 16104 16105 if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) { 16106 return; 16107 } // Subtract paddings 16108 16109 16110 width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10); 16111 height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('padding-bottom') || 0, 10); 16112 if (Number.isNaN(width)) width = 0; 16113 if (Number.isNaN(height)) height = 0; 16114 Object.assign(swiper, { 16115 width, 16116 height, 16117 size: swiper.isHorizontal() ? width : height 16118 }); 16119} 16120 16121/***/ }), 16122
vendor: 11,385 bytes, lines 16123-16456
16123/***/ "./node_modules/swiper/core/update/updateSlides.js": 16124/*!*********************************************************!*\ 16125 !*** ./node_modules/swiper/core/update/updateSlides.js ***! 16126 \*********************************************************/ 16127/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 16128 16129__webpack_require__.r(__webpack_exports__); 16130/* harmony export */ __webpack_require__.d(__webpack_exports__, { 16131/* harmony export */ "default": function() { return /* binding */ updateSlides; } 16132/* harmony export */ }); 16133/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 16134 16135function updateSlides() { 16136 const swiper = this; 16137 16138 function getDirectionLabel(property) { 16139 if (swiper.isHorizontal()) { 16140 return property; 16141 } // prettier-ignore 16142 16143 16144 return { 16145 'width': 'height', 16146 'margin-top': 'margin-left', 16147 'margin-bottom ': 'margin-right', 16148 'margin-left': 'margin-top', 16149 'margin-right': 'margin-bottom', 16150 'padding-left': 'padding-top', 16151 'padding-right': 'padding-bottom', 16152 'marginRight': 'marginBottom' 16153 }[property]; 16154 } 16155 16156 function getDirectionPropertyValue(node, label) { 16157 return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0); 16158 } 16159 16160 const params = swiper.params; 16161 const { 16162 $wrapperEl, 16163 size: swiperSize, 16164 rtlTranslate: rtl, 16165 wrongRTL 16166 } = swiper; 16167 const isVirtual = swiper.virtual && params.virtual.enabled; 16168 const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; 16169 const slides = $wrapperEl.children(`.${swiper.params.slideClass}`); 16170 const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; 16171 let snapGrid = []; 16172 const slidesGrid = []; 16173 const slidesSizesGrid = []; 16174 let offsetBefore = params.slidesOffsetBefore; 16175 16176 if (typeof offsetBefore === 'function') { 16177 offsetBefore = params.slidesOffsetBefore.call(swiper); 16178 } 16179 16180 let offsetAfter = params.slidesOffsetAfter; 16181 16182 if (typeof offsetAfter === 'function') { 16183 offsetAfter = params.slidesOffsetAfter.call(swiper); 16184 } 16185 16186 const previousSnapGridLength = swiper.snapGrid.length; 16187 const previousSlidesGridLength = swiper.slidesGrid.length; 16188 let spaceBetween = params.spaceBetween; 16189 let slidePosition = -offsetBefore; 16190 let prevSlideSize = 0; 16191 let index = 0; 16192 16193 if (typeof swiperSize === 'undefined') { 16194 return; 16195 } 16196 16197 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 16198 spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize; 16199 } 16200 16201 swiper.virtualSize = -spaceBetween; // reset margins 16202 16203 if (rtl) slides.css({ 16204 marginLeft: '', 16205 marginBottom: '', 16206 marginTop: '' 16207 });else slides.css({ 16208 marginRight: '', 16209 marginBottom: '', 16210 marginTop: '' 16211 }); // reset cssMode offsets 16212 16213 if (params.centeredSlides && params.cssMode) { 16214 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(swiper.wrapperEl, '--swiper-centered-offset-before', ''); 16215 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(swiper.wrapperEl, '--swiper-centered-offset-after', ''); 16216 } 16217 16218 const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid; 16219 16220 if (gridEnabled) { 16221 swiper.grid.initSlides(slidesLength); 16222 } // Calc slides 16223 16224 16225 let slideSize; 16226 const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => { 16227 return typeof params.breakpoints[key].slidesPerView !== 'undefined'; 16228 }).length > 0; 16229 16230 for (let i = 0; i < slidesLength; i += 1) { 16231 slideSize = 0; 16232 const slide = slides.eq(i); 16233 16234 if (gridEnabled) { 16235 swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel); 16236 } 16237 16238 if (slide.css('display') === 'none') continue; // eslint-disable-line 16239 16240 if (params.slidesPerView === 'auto') { 16241 if (shouldResetSlideSize) { 16242 slides[i].style[getDirectionLabel('width')] = ``; 16243 } 16244 16245 const slideStyles = getComputedStyle(slide[0]); 16246 const currentTransform = slide[0].style.transform; 16247 const currentWebKitTransform = slide[0].style.webkitTransform; 16248 16249 if (currentTransform) { 16250 slide[0].style.transform = 'none'; 16251 } 16252 16253 if (currentWebKitTransform) { 16254 slide[0].style.webkitTransform = 'none'; 16255 } 16256 16257 if (params.roundLengths) { 16258 slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true); 16259 } else { 16260 // eslint-disable-next-line 16261 const width = getDirectionPropertyValue(slideStyles, 'width'); 16262 const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left'); 16263 const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right'); 16264 const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left'); 16265 const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right'); 16266 const boxSizing = slideStyles.getPropertyValue('box-sizing'); 16267 16268 if (boxSizing && boxSizing === 'border-box') { 16269 slideSize = width + marginLeft + marginRight; 16270 } else { 16271 const { 16272 clientWidth, 16273 offsetWidth 16274 } = slide[0]; 16275 slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth); 16276 } 16277 } 16278 16279 if (currentTransform) { 16280 slide[0].style.transform = currentTransform; 16281 } 16282 16283 if (currentWebKitTransform) { 16284 slide[0].style.webkitTransform = currentWebKitTransform; 16285 } 16286 16287 if (params.roundLengths) slideSize = Math.floor(slideSize); 16288 } else { 16289 slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView; 16290 if (params.roundLengths) slideSize = Math.floor(slideSize); 16291 16292 if (slides[i]) { 16293 slides[i].style[getDirectionLabel('width')] = `${slideSize}px`; 16294 } 16295 } 16296 16297 if (slides[i]) { 16298 slides[i].swiperSlideSize = slideSize; 16299 } 16300 16301 slidesSizesGrid.push(slideSize); 16302 16303 if (params.centeredSlides) { 16304 slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween; 16305 if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 16306 if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween; 16307 if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; 16308 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 16309 if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition); 16310 slidesGrid.push(slidePosition); 16311 } else { 16312 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 16313 if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition); 16314 slidesGrid.push(slidePosition); 16315 slidePosition = slidePosition + slideSize + spaceBetween; 16316 } 16317 16318 swiper.virtualSize += slideSize + spaceBetween; 16319 prevSlideSize = slideSize; 16320 index += 1; 16321 } 16322 16323 swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; 16324 16325 if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) { 16326 $wrapperEl.css({ 16327 width: `${swiper.virtualSize + params.spaceBetween}px` 16328 }); 16329 } 16330 16331 if (params.setWrapperSize) { 16332 $wrapperEl.css({ 16333 [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px` 16334 }); 16335 } 16336 16337 if (gridEnabled) { 16338 swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel); 16339 } // Remove last grid elements depending on width 16340 16341 16342 if (!params.centeredSlides) { 16343 const newSlidesGrid = []; 16344 16345 for (let i = 0; i < snapGrid.length; i += 1) { 16346 let slidesGridItem = snapGrid[i]; 16347 if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); 16348 16349 if (snapGrid[i] <= swiper.virtualSize - swiperSize) { 16350 newSlidesGrid.push(slidesGridItem); 16351 } 16352 } 16353 16354 snapGrid = newSlidesGrid; 16355 16356 if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) { 16357 snapGrid.push(swiper.virtualSize - swiperSize); 16358 } 16359 } 16360 16361 if (snapGrid.length === 0) snapGrid = [0]; 16362 16363 if (params.spaceBetween !== 0) { 16364 const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight'); 16365 slides.filter((_, slideIndex) => { 16366 if (!params.cssMode) return true; 16367 16368 if (slideIndex === slides.length - 1) { 16369 return false; 16370 } 16371 16372 return true; 16373 }).css({ 16374 [key]: `${spaceBetween}px` 16375 }); 16376 } 16377 16378 if (params.centeredSlides && params.centeredSlidesBounds) { 16379 let allSlidesSize = 0; 16380 slidesSizesGrid.forEach(slideSizeValue => { 16381 allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); 16382 }); 16383 allSlidesSize -= params.spaceBetween; 16384 const maxSnap = allSlidesSize - swiperSize; 16385 snapGrid = snapGrid.map(snap => { 16386 if (snap < 0) return -offsetBefore; 16387 if (snap > maxSnap) return maxSnap + offsetAfter; 16388 return snap; 16389 }); 16390 } 16391 16392 if (params.centerInsufficientSlides) { 16393 let allSlidesSize = 0; 16394 slidesSizesGrid.forEach(slideSizeValue => { 16395 allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); 16396 }); 16397 allSlidesSize -= params.spaceBetween; 16398 16399 if (allSlidesSize < swiperSize) { 16400 const allSlidesOffset = (swiperSize - allSlidesSize) / 2; 16401 snapGrid.forEach((snap, snapIndex) => { 16402 snapGrid[snapIndex] = snap - allSlidesOffset; 16403 }); 16404 slidesGrid.forEach((snap, snapIndex) => { 16405 slidesGrid[snapIndex] = snap + allSlidesOffset; 16406 }); 16407 } 16408 } 16409 16410 Object.assign(swiper, { 16411 slides, 16412 snapGrid, 16413 slidesGrid, 16414 slidesSizesGrid 16415 }); 16416 16417 if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) { 16418 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`); 16419 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.setCSSProperty)(swiper.wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`); 16420 const addToSnapGrid = -swiper.snapGrid[0]; 16421 const addToSlidesGrid = -swiper.slidesGrid[0]; 16422 swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid); 16423 swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid); 16424 } 16425 16426 if (slidesLength !== previousSlidesLength) { 16427 swiper.emit('slidesLengthChange'); 16428 } 16429 16430 if (snapGrid.length !== previousSnapGridLength) { 16431 if (swiper.params.watchOverflow) swiper.checkOverflow(); 16432 swiper.emit('snapGridLengthChange'); 16433 } 16434 16435 if (slidesGrid.length !== previousSlidesGridLength) { 16436 swiper.emit('slidesGridLengthChange'); 16437 } 16438 16439 if (params.watchSlidesProgress) { 16440 swiper.updateSlidesOffset(); 16441 } 16442 16443 if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) { 16444 const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`; 16445 const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass); 16446 16447 if (slidesLength <= params.maxBackfaceHiddenSlides) { 16448 if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass); 16449 } else if (hasClassBackfaceClassAdded) { 16450 swiper.$el.removeClass(backFaceHiddenClass); 16451 } 16452 } 16453} 16454 16455/***/ }), 16456
vendor: 3,322 bytes, lines 16457-16533
16457/***/ "./node_modules/swiper/core/update/updateSlidesClasses.js": 16458/*!****************************************************************!*\ 16459 !*** ./node_modules/swiper/core/update/updateSlidesClasses.js ***! 16460 \****************************************************************/ 16461/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 16462 16463__webpack_require__.r(__webpack_exports__); 16464/* harmony export */ __webpack_require__.d(__webpack_exports__, { 16465/* harmony export */ "default": function() { return /* binding */ updateSlidesClasses; } 16466/* harmony export */ }); 16467function updateSlidesClasses() { 16468 const swiper = this; 16469 const { 16470 slides, 16471 params, 16472 $wrapperEl, 16473 activeIndex, 16474 realIndex 16475 } = swiper; 16476 const isVirtual = swiper.virtual && params.virtual.enabled; 16477 slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`); 16478 let activeSlide; 16479 16480 if (isVirtual) { 16481 activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index="${activeIndex}"]`); 16482 } else { 16483 activeSlide = slides.eq(activeIndex); 16484 } // Active classes 16485 16486 16487 activeSlide.addClass(params.slideActiveClass); 16488 16489 if (params.loop) { 16490 // Duplicate to all looped slides 16491 if (activeSlide.hasClass(params.slideDuplicateClass)) { 16492 $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${realIndex}"]`).addClass(params.slideDuplicateActiveClass); 16493 } else { 16494 $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${realIndex}"]`).addClass(params.slideDuplicateActiveClass); 16495 } 16496 } // Next Slide 16497 16498 16499 let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass); 16500 16501 if (params.loop && nextSlide.length === 0) { 16502 nextSlide = slides.eq(0); 16503 nextSlide.addClass(params.slideNextClass); 16504 } // Prev Slide 16505 16506 16507 let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass); 16508 16509 if (params.loop && prevSlide.length === 0) { 16510 prevSlide = slides.eq(-1); 16511 prevSlide.addClass(params.slidePrevClass); 16512 } 16513 16514 if (params.loop) { 16515 // Duplicate to all looped slides 16516 if (nextSlide.hasClass(params.slideDuplicateClass)) { 16517 $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`).addClass(params.slideDuplicateNextClass); 16518 } else { 16519 $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`).addClass(params.slideDuplicateNextClass); 16520 } 16521 16522 if (prevSlide.hasClass(params.slideDuplicateClass)) { 16523 $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`).addClass(params.slideDuplicatePrevClass); 16524 } else { 16525 $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`).addClass(params.slideDuplicatePrevClass); 16526 } 16527 } 16528 16529 swiper.emitSlidesClasses(); 16530} 16531 16532/***/ }), 16533
vendor: 849 bytes, lines 16534-16554
16534/***/ "./node_modules/swiper/core/update/updateSlidesOffset.js": 16535/*!***************************************************************!*\ 16536 !*** ./node_modules/swiper/core/update/updateSlidesOffset.js ***! 16537 \***************************************************************/ 16538/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 16539 16540__webpack_require__.r(__webpack_exports__); 16541/* harmony export */ __webpack_require__.d(__webpack_exports__, { 16542/* harmony export */ "default": function() { return /* binding */ updateSlidesOffset; } 16543/* harmony export */ }); 16544function updateSlidesOffset() { 16545 const swiper = this; 16546 const slides = swiper.slides; 16547 16548 for (let i = 0; i < slides.length; i += 1) { 16549 slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop; 16550 } 16551} 16552 16553/***/ }), 16554
vendor: 2,581 bytes, lines 16555-16612
16555/***/ "./node_modules/swiper/core/update/updateSlidesProgress.js": 16556/*!*****************************************************************!*\ 16557 !*** ./node_modules/swiper/core/update/updateSlidesProgress.js ***! 16558 \*****************************************************************/ 16559/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 16560 16561__webpack_require__.r(__webpack_exports__); 16562/* harmony export */ __webpack_require__.d(__webpack_exports__, { 16563/* harmony export */ "default": function() { return /* binding */ updateSlidesProgress; } 16564/* harmony export */ }); 16565/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 16566 16567function updateSlidesProgress(translate = this && this.translate || 0) { 16568 const swiper = this; 16569 const params = swiper.params; 16570 const { 16571 slides, 16572 rtlTranslate: rtl, 16573 snapGrid 16574 } = swiper; 16575 if (slides.length === 0) return; 16576 if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset(); 16577 let offsetCenter = -translate; 16578 if (rtl) offsetCenter = translate; // Visible Slides 16579 16580 slides.removeClass(params.slideVisibleClass); 16581 swiper.visibleSlidesIndexes = []; 16582 swiper.visibleSlides = []; 16583 16584 for (let i = 0; i < slides.length; i += 1) { 16585 const slide = slides[i]; 16586 let slideOffset = slide.swiperSlideOffset; 16587 16588 if (params.cssMode && params.centeredSlides) { 16589 slideOffset -= slides[0].swiperSlideOffset; 16590 } 16591 16592 const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween); 16593 const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween); 16594 const slideBefore = -(offsetCenter - slideOffset); 16595 const slideAfter = slideBefore + swiper.slidesSizesGrid[i]; 16596 const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size; 16597 16598 if (isVisible) { 16599 swiper.visibleSlides.push(slide); 16600 swiper.visibleSlidesIndexes.push(i); 16601 slides.eq(i).addClass(params.slideVisibleClass); 16602 } 16603 16604 slide.progress = rtl ? -slideProgress : slideProgress; 16605 slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress; 16606 } 16607 16608 swiper.visibleSlides = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(swiper.visibleSlides); 16609} 16610 16611/***/ }), 16612
vendor: 11,058 bytes, lines 16613-16978
16613/***/ "./node_modules/swiper/modules/a11y/a11y.js": 16614/*!**************************************************!*\ 16615 !*** ./node_modules/swiper/modules/a11y/a11y.js ***! 16616 \**************************************************/ 16617/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 16618 16619__webpack_require__.r(__webpack_exports__); 16620/* harmony export */ __webpack_require__.d(__webpack_exports__, { 16621/* harmony export */ "default": function() { return /* binding */ A11y; } 16622/* harmony export */ }); 16623/* 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"); 16624/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 16625 16626 16627function A11y({ 16628 swiper, 16629 extendParams, 16630 on 16631}) { 16632 extendParams({ 16633 a11y: { 16634 enabled: true, 16635 notificationClass: 'swiper-notification', 16636 prevSlideMessage: 'Previous slide', 16637 nextSlideMessage: 'Next slide', 16638 firstSlideMessage: 'This is the first slide', 16639 lastSlideMessage: 'This is the last slide', 16640 paginationBulletMessage: 'Go to slide {{index}}', 16641 slideLabelMessage: '{{index}} / {{slidesLength}}', 16642 containerMessage: null, 16643 containerRoleDescriptionMessage: null, 16644 itemRoleDescriptionMessage: null, 16645 slideRole: 'group', 16646 id: null 16647 } 16648 }); 16649 swiper.a11y = { 16650 clicked: false 16651 }; 16652 let liveRegion = null; 16653 16654 function notify(message) { 16655 const notification = liveRegion; 16656 if (notification.length === 0) return; 16657 notification.html(''); 16658 notification.html(message); 16659 } 16660 16661 function getRandomNumber(size = 16) { 16662 const randomChar = () => Math.round(16 * Math.random()).toString(16); 16663 16664 return 'x'.repeat(size).replace(/x/g, randomChar); 16665 } 16666 16667 function makeElFocusable($el) { 16668 $el.attr('tabIndex', '0'); 16669 } 16670 16671 function makeElNotFocusable($el) { 16672 $el.attr('tabIndex', '-1'); 16673 } 16674 16675 function addElRole($el, role) { 16676 $el.attr('role', role); 16677 } 16678 16679 function addElRoleDescription($el, description) { 16680 $el.attr('aria-roledescription', description); 16681 } 16682 16683 function addElControls($el, controls) { 16684 $el.attr('aria-controls', controls); 16685 } 16686 16687 function addElLabel($el, label) { 16688 $el.attr('aria-label', label); 16689 } 16690 16691 function addElId($el, id) { 16692 $el.attr('id', id); 16693 } 16694 16695 function addElLive($el, live) { 16696 $el.attr('aria-live', live); 16697 } 16698 16699 function disableEl($el) { 16700 $el.attr('aria-disabled', true); 16701 } 16702 16703 function enableEl($el) { 16704 $el.attr('aria-disabled', false); 16705 } 16706 16707 function onEnterOrSpaceKey(e) { 16708 if (e.keyCode !== 13 && e.keyCode !== 32) return; 16709 const params = swiper.params.a11y; 16710 const $targetEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(e.target); 16711 16712 if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) { 16713 if (!(swiper.isEnd && !swiper.params.loop)) { 16714 swiper.slideNext(); 16715 } 16716 16717 if (swiper.isEnd) { 16718 notify(params.lastSlideMessage); 16719 } else { 16720 notify(params.nextSlideMessage); 16721 } 16722 } 16723 16724 if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) { 16725 if (!(swiper.isBeginning && !swiper.params.loop)) { 16726 swiper.slidePrev(); 16727 } 16728 16729 if (swiper.isBeginning) { 16730 notify(params.firstSlideMessage); 16731 } else { 16732 notify(params.prevSlideMessage); 16733 } 16734 } 16735 16736 if (swiper.pagination && $targetEl.is((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__["default"])(swiper.params.pagination.bulletClass))) { 16737 $targetEl[0].click(); 16738 } 16739 } 16740 16741 function updateNavigation() { 16742 if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return; 16743 const { 16744 $nextEl, 16745 $prevEl 16746 } = swiper.navigation; 16747 16748 if ($prevEl && $prevEl.length > 0) { 16749 if (swiper.isBeginning) { 16750 disableEl($prevEl); 16751 makeElNotFocusable($prevEl); 16752 } else { 16753 enableEl($prevEl); 16754 makeElFocusable($prevEl); 16755 } 16756 } 16757 16758 if ($nextEl && $nextEl.length > 0) { 16759 if (swiper.isEnd) { 16760 disableEl($nextEl); 16761 makeElNotFocusable($nextEl); 16762 } else { 16763 enableEl($nextEl); 16764 makeElFocusable($nextEl); 16765 } 16766 } 16767 } 16768 16769 function hasPagination() { 16770 return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length; 16771 } 16772 16773 function hasClickablePagination() { 16774 return hasPagination() && swiper.params.pagination.clickable; 16775 } 16776 16777 function updatePagination() { 16778 const params = swiper.params.a11y; 16779 if (!hasPagination()) return; 16780 swiper.pagination.bullets.each(bulletEl => { 16781 const $bulletEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(bulletEl); 16782 16783 if (swiper.params.pagination.clickable) { 16784 makeElFocusable($bulletEl); 16785 16786 if (!swiper.params.pagination.renderBullet) { 16787 addElRole($bulletEl, 'button'); 16788 addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1)); 16789 } 16790 } 16791 16792 if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) { 16793 $bulletEl.attr('aria-current', 'true'); 16794 } else { 16795 $bulletEl.removeAttr('aria-current'); 16796 } 16797 }); 16798 } 16799 16800 const initNavEl = ($el, wrapperId, message) => { 16801 makeElFocusable($el); 16802 16803 if ($el[0].tagName !== 'BUTTON') { 16804 addElRole($el, 'button'); 16805 $el.on('keydown', onEnterOrSpaceKey); 16806 } 16807 16808 addElLabel($el, message); 16809 addElControls($el, wrapperId); 16810 }; 16811 16812 const handlePointerDown = () => { 16813 swiper.a11y.clicked = true; 16814 }; 16815 16816 const handlePointerUp = () => { 16817 requestAnimationFrame(() => { 16818 requestAnimationFrame(() => { 16819 if (!swiper.destroyed) { 16820 swiper.a11y.clicked = false; 16821 } 16822 }); 16823 }); 16824 }; 16825 16826 const handleFocus = e => { 16827 if (swiper.a11y.clicked) return; 16828 const slideEl = e.target.closest(`.${swiper.params.slideClass}`); 16829 if (!slideEl || !swiper.slides.includes(slideEl)) return; 16830 const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex; 16831 const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl); 16832 if (isActive || isVisible) return; 16833 if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return; 16834 16835 if (swiper.isHorizontal()) { 16836 swiper.el.scrollLeft = 0; 16837 } else { 16838 swiper.el.scrollTop = 0; 16839 } 16840 16841 swiper.slideTo(swiper.slides.indexOf(slideEl), 0); 16842 }; 16843 16844 const initSlides = () => { 16845 const params = swiper.params.a11y; 16846 16847 if (params.itemRoleDescriptionMessage) { 16848 addElRoleDescription((0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(swiper.slides), params.itemRoleDescriptionMessage); 16849 } 16850 16851 if (params.slideRole) { 16852 addElRole((0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(swiper.slides), params.slideRole); 16853 } 16854 16855 const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length; 16856 16857 if (params.slideLabelMessage) { 16858 swiper.slides.each((slideEl, index) => { 16859 const $slideEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(slideEl); 16860 const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('data-swiper-slide-index'), 10) : index; 16861 const ariaLabelMessage = params.slideLabelMessage.replace(/\{\{index\}\}/, slideIndex + 1).replace(/\{\{slidesLength\}\}/, slidesLength); 16862 addElLabel($slideEl, ariaLabelMessage); 16863 }); 16864 } 16865 }; 16866 16867 const init = () => { 16868 const params = swiper.params.a11y; 16869 swiper.$el.append(liveRegion); // Container 16870 16871 const $containerEl = swiper.$el; 16872 16873 if (params.containerRoleDescriptionMessage) { 16874 addElRoleDescription($containerEl, params.containerRoleDescriptionMessage); 16875 } 16876 16877 if (params.containerMessage) { 16878 addElLabel($containerEl, params.containerMessage); 16879 } // Wrapper 16880 16881 16882 const $wrapperEl = swiper.$wrapperEl; 16883 const wrapperId = params.id || $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`; 16884 const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite'; 16885 addElId($wrapperEl, wrapperId); 16886 addElLive($wrapperEl, live); // Slide 16887 16888 initSlides(); // Navigation 16889 16890 let $nextEl; 16891 let $prevEl; 16892 16893 if (swiper.navigation && swiper.navigation.$nextEl) { 16894 $nextEl = swiper.navigation.$nextEl; 16895 } 16896 16897 if (swiper.navigation && swiper.navigation.$prevEl) { 16898 $prevEl = swiper.navigation.$prevEl; 16899 } 16900 16901 if ($nextEl && $nextEl.length) { 16902 initNavEl($nextEl, wrapperId, params.nextSlideMessage); 16903 } 16904 16905 if ($prevEl && $prevEl.length) { 16906 initNavEl($prevEl, wrapperId, params.prevSlideMessage); 16907 } // Pagination 16908 16909 16910 if (hasClickablePagination()) { 16911 swiper.pagination.$el.on('keydown', (0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__["default"])(swiper.params.pagination.bulletClass), onEnterOrSpaceKey); 16912 } // Tab focus 16913 16914 16915 swiper.$el.on('focus', handleFocus, true); 16916 swiper.$el.on('pointerdown', handlePointerDown, true); 16917 swiper.$el.on('pointerup', handlePointerUp, true); 16918 }; 16919 16920 function destroy() { 16921 if (liveRegion && liveRegion.length > 0) liveRegion.remove(); 16922 let $nextEl; 16923 let $prevEl; 16924 16925 if (swiper.navigation && swiper.navigation.$nextEl) { 16926 $nextEl = swiper.navigation.$nextEl; 16927 } 16928 16929 if (swiper.navigation && swiper.navigation.$prevEl) { 16930 $prevEl = swiper.navigation.$prevEl; 16931 } 16932 16933 if ($nextEl) { 16934 $nextEl.off('keydown', onEnterOrSpaceKey); 16935 } 16936 16937 if ($prevEl) { 16938 $prevEl.off('keydown', onEnterOrSpaceKey); 16939 } // Pagination 16940 16941 16942 if (hasClickablePagination()) { 16943 swiper.pagination.$el.off('keydown', (0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_0__["default"])(swiper.params.pagination.bulletClass), onEnterOrSpaceKey); 16944 } // Tab focus 16945 16946 16947 swiper.$el.off('focus', handleFocus, true); 16948 swiper.$el.off('pointerdown', handlePointerDown, true); 16949 swiper.$el.off('pointerup', handlePointerUp, true); 16950 } 16951 16952 on('beforeInit', () => { 16953 liveRegion = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(`<span class="${swiper.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`); 16954 }); 16955 on('afterInit', () => { 16956 if (!swiper.params.a11y.enabled) return; 16957 init(); 16958 }); 16959 on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => { 16960 if (!swiper.params.a11y.enabled) return; 16961 initSlides(); 16962 }); 16963 on('fromEdge toEdge afterInit lock unlock', () => { 16964 if (!swiper.params.a11y.enabled) return; 16965 updateNavigation(); 16966 }); 16967 on('paginationUpdate', () => { 16968 if (!swiper.params.a11y.enabled) return; 16969 updatePagination(); 16970 }); 16971 on('destroy', () => { 16972 if (!swiper.params.a11y.enabled) return; 16973 destroy(); 16974 }); 16975} 16976 16977/***/ }), 16978
vendor: 6,959 bytes, lines 16979-17223
16979/***/ "./node_modules/swiper/modules/autoplay/autoplay.js": 16980/*!**********************************************************!*\ 16981 !*** ./node_modules/swiper/modules/autoplay/autoplay.js ***! 16982 \**********************************************************/ 16983/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 16984 16985__webpack_require__.r(__webpack_exports__); 16986/* harmony export */ __webpack_require__.d(__webpack_exports__, { 16987/* harmony export */ "default": function() { return /* binding */ Autoplay; } 16988/* harmony export */ }); 16989/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 16990/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 16991/* eslint no-underscore-dangle: "off" */ 16992 16993/* eslint no-use-before-define: "off" */ 16994 16995 16996function Autoplay({ 16997 swiper, 16998 extendParams, 16999 on, 17000 emit 17001}) { 17002 let timeout; 17003 swiper.autoplay = { 17004 running: false, 17005 paused: false 17006 }; 17007 extendParams({ 17008 autoplay: { 17009 enabled: false, 17010 delay: 3000, 17011 waitForTransition: true, 17012 disableOnInteraction: true, 17013 stopOnLastSlide: false, 17014 reverseDirection: false, 17015 pauseOnMouseEnter: false 17016 } 17017 }); 17018 17019 function run() { 17020 if (!swiper.size) { 17021 swiper.autoplay.running = false; 17022 swiper.autoplay.paused = false; 17023 return; 17024 } 17025 17026 const $activeSlideEl = swiper.slides.eq(swiper.activeIndex); 17027 let delay = swiper.params.autoplay.delay; 17028 17029 if ($activeSlideEl.attr('data-swiper-autoplay')) { 17030 delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay; 17031 } 17032 17033 clearTimeout(timeout); 17034 timeout = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.nextTick)(() => { 17035 let autoplayResult; 17036 17037 if (swiper.params.autoplay.reverseDirection) { 17038 if (swiper.params.loop) { 17039 swiper.loopFix(); 17040 autoplayResult = swiper.slidePrev(swiper.params.speed, true, true); 17041 emit('autoplay'); 17042 } else if (!swiper.isBeginning) { 17043 autoplayResult = swiper.slidePrev(swiper.params.speed, true, true); 17044 emit('autoplay'); 17045 } else if (!swiper.params.autoplay.stopOnLastSlide) { 17046 autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true); 17047 emit('autoplay'); 17048 } else { 17049 stop(); 17050 } 17051 } else if (swiper.params.loop) { 17052 swiper.loopFix(); 17053 autoplayResult = swiper.slideNext(swiper.params.speed, true, true); 17054 emit('autoplay'); 17055 } else if (!swiper.isEnd) { 17056 autoplayResult = swiper.slideNext(swiper.params.speed, true, true); 17057 emit('autoplay'); 17058 } else if (!swiper.params.autoplay.stopOnLastSlide) { 17059 autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true); 17060 emit('autoplay'); 17061 } else { 17062 stop(); 17063 } 17064 17065 if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) { 17066 run(); 17067 } 17068 }, delay); 17069 } 17070 17071 function start() { 17072 if (typeof timeout !== 'undefined') return false; 17073 if (swiper.autoplay.running) return false; 17074 swiper.autoplay.running = true; 17075 emit('autoplayStart'); 17076 run(); 17077 return true; 17078 } 17079 17080 function stop() { 17081 if (!swiper.autoplay.running) return false; 17082 if (typeof timeout === 'undefined') return false; 17083 17084 if (timeout) { 17085 clearTimeout(timeout); 17086 timeout = undefined; 17087 } 17088 17089 swiper.autoplay.running = false; 17090 emit('autoplayStop'); 17091 return true; 17092 } 17093 17094 function pause(speed) { 17095 if (!swiper.autoplay.running) return; 17096 if (swiper.autoplay.paused) return; 17097 if (timeout) clearTimeout(timeout); 17098 swiper.autoplay.paused = true; 17099 17100 if (speed === 0 || !swiper.params.autoplay.waitForTransition) { 17101 swiper.autoplay.paused = false; 17102 run(); 17103 } else { 17104 ['transitionend', 'webkitTransitionEnd'].forEach(event => { 17105 swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd); 17106 }); 17107 } 17108 } 17109 17110 function onVisibilityChange() { 17111 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 17112 17113 if (document.visibilityState === 'hidden' && swiper.autoplay.running) { 17114 pause(); 17115 } 17116 17117 if (document.visibilityState === 'visible' && swiper.autoplay.paused) { 17118 run(); 17119 swiper.autoplay.paused = false; 17120 } 17121 } 17122 17123 function onTransitionEnd(e) { 17124 if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return; 17125 if (e.target !== swiper.$wrapperEl[0]) return; 17126 ['transitionend', 'webkitTransitionEnd'].forEach(event => { 17127 swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd); 17128 }); 17129 swiper.autoplay.paused = false; 17130 17131 if (!swiper.autoplay.running) { 17132 stop(); 17133 } else { 17134 run(); 17135 } 17136 } 17137 17138 function onMouseEnter() { 17139 if (swiper.params.autoplay.disableOnInteraction) { 17140 stop(); 17141 } else { 17142 emit('autoplayPause'); 17143 pause(); 17144 } 17145 17146 ['transitionend', 'webkitTransitionEnd'].forEach(event => { 17147 swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd); 17148 }); 17149 } 17150 17151 function onMouseLeave() { 17152 if (swiper.params.autoplay.disableOnInteraction) { 17153 return; 17154 } 17155 17156 swiper.autoplay.paused = false; 17157 emit('autoplayResume'); 17158 run(); 17159 } 17160 17161 function attachMouseEvents() { 17162 if (swiper.params.autoplay.pauseOnMouseEnter) { 17163 swiper.$el.on('mouseenter', onMouseEnter); 17164 swiper.$el.on('mouseleave', onMouseLeave); 17165 } 17166 } 17167 17168 function detachMouseEvents() { 17169 swiper.$el.off('mouseenter', onMouseEnter); 17170 swiper.$el.off('mouseleave', onMouseLeave); 17171 } 17172 17173 on('init', () => { 17174 if (swiper.params.autoplay.enabled) { 17175 start(); 17176 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 17177 document.addEventListener('visibilitychange', onVisibilityChange); 17178 attachMouseEvents(); 17179 } 17180 }); 17181 on('beforeTransitionStart', (_s, speed, internal) => { 17182 if (swiper.autoplay.running) { 17183 if (internal || !swiper.params.autoplay.disableOnInteraction) { 17184 swiper.autoplay.pause(speed); 17185 } else { 17186 stop(); 17187 } 17188 } 17189 }); 17190 on('sliderFirstMove', () => { 17191 if (swiper.autoplay.running) { 17192 if (swiper.params.autoplay.disableOnInteraction) { 17193 stop(); 17194 } else { 17195 pause(); 17196 } 17197 } 17198 }); 17199 on('touchEnd', () => { 17200 if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) { 17201 run(); 17202 } 17203 }); 17204 on('destroy', () => { 17205 detachMouseEvents(); 17206 17207 if (swiper.autoplay.running) { 17208 stop(); 17209 } 17210 17211 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 17212 document.removeEventListener('visibilitychange', onVisibilityChange); 17213 }); 17214 Object.assign(swiper.autoplay, { 17215 pause, 17216 run, 17217 start, 17218 stop 17219 }); 17220} 17221 17222/***/ }), 17223
vendor: 6,408 bytes, lines 17224-17428
17224/***/ "./node_modules/swiper/modules/controller/controller.js": 17225/*!**************************************************************!*\ 17226 !*** ./node_modules/swiper/modules/controller/controller.js ***! 17227 \**************************************************************/ 17228/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 17229 17230__webpack_require__.r(__webpack_exports__); 17231/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17232/* harmony export */ "default": function() { return /* binding */ Controller; } 17233/* harmony export */ }); 17234/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 17235/* eslint no-bitwise: ["error", { "allow": [">>"] }] */ 17236 17237function Controller({ 17238 swiper, 17239 extendParams, 17240 on 17241}) { 17242 extendParams({ 17243 controller: { 17244 control: undefined, 17245 inverse: false, 17246 by: 'slide' // or 'container' 17247 17248 } 17249 }); 17250 swiper.controller = { 17251 control: undefined 17252 }; 17253 17254 function LinearSpline(x, y) { 17255 const binarySearch = function search() { 17256 let maxIndex; 17257 let minIndex; 17258 let guess; 17259 return (array, val) => { 17260 minIndex = -1; 17261 maxIndex = array.length; 17262 17263 while (maxIndex - minIndex > 1) { 17264 guess = maxIndex + minIndex >> 1; 17265 17266 if (array[guess] <= val) { 17267 minIndex = guess; 17268 } else { 17269 maxIndex = guess; 17270 } 17271 } 17272 17273 return maxIndex; 17274 }; 17275 }(); 17276 17277 this.x = x; 17278 this.y = y; 17279 this.lastIndex = x.length - 1; // Given an x value (x2), return the expected y2 value: 17280 // (x1,y1) is the known point before given value, 17281 // (x3,y3) is the known point after given value. 17282 17283 let i1; 17284 let i3; 17285 17286 this.interpolate = function interpolate(x2) { 17287 if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2): 17288 17289 i3 = binarySearch(this.x, x2); 17290 i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already: 17291 // y2 := ((x2âx1) à (y3ây1)) ÷ (x3âx1) + y1 17292 17293 return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1]; 17294 }; 17295 17296 return this; 17297 } // xxx: for now i will just save one spline function to to 17298 17299 17300 function getInterpolateFunction(c) { 17301 if (!swiper.controller.spline) { 17302 swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid); 17303 } 17304 } 17305 17306 function setTranslate(_t, byController) { 17307 const controlled = swiper.controller.control; 17308 let multiplier; 17309 let controlledTranslate; 17310 const Swiper = swiper.constructor; 17311 17312 function setControlledTranslate(c) { 17313 // this will create an Interpolate function based on the snapGrids 17314 // x is the Grid of the scrolled scroller and y will be the controlled scroller 17315 // it makes sense to create this only once and recall it for the interpolation 17316 // the function does a lot of value caching for performance 17317 const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate; 17318 17319 if (swiper.params.controller.by === 'slide') { 17320 getInterpolateFunction(c); // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid 17321 // but it did not work out 17322 17323 controlledTranslate = -swiper.controller.spline.interpolate(-translate); 17324 } 17325 17326 if (!controlledTranslate || swiper.params.controller.by === 'container') { 17327 multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate()); 17328 controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate(); 17329 } 17330 17331 if (swiper.params.controller.inverse) { 17332 controlledTranslate = c.maxTranslate() - controlledTranslate; 17333 } 17334 17335 c.updateProgress(controlledTranslate); 17336 c.setTranslate(controlledTranslate, swiper); 17337 c.updateActiveIndex(); 17338 c.updateSlidesClasses(); 17339 } 17340 17341 if (Array.isArray(controlled)) { 17342 for (let i = 0; i < controlled.length; i += 1) { 17343 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 17344 setControlledTranslate(controlled[i]); 17345 } 17346 } 17347 } else if (controlled instanceof Swiper && byController !== controlled) { 17348 setControlledTranslate(controlled); 17349 } 17350 } 17351 17352 function setTransition(duration, byController) { 17353 const Swiper = swiper.constructor; 17354 const controlled = swiper.controller.control; 17355 let i; 17356 17357 function setControlledTransition(c) { 17358 c.setTransition(duration, swiper); 17359 17360 if (duration !== 0) { 17361 c.transitionStart(); 17362 17363 if (c.params.autoHeight) { 17364 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.nextTick)(() => { 17365 c.updateAutoHeight(); 17366 }); 17367 } 17368 17369 c.$wrapperEl.transitionEnd(() => { 17370 if (!controlled) return; 17371 17372 if (c.params.loop && swiper.params.controller.by === 'slide') { 17373 c.loopFix(); 17374 } 17375 17376 c.transitionEnd(); 17377 }); 17378 } 17379 } 17380 17381 if (Array.isArray(controlled)) { 17382 for (i = 0; i < controlled.length; i += 1) { 17383 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 17384 setControlledTransition(controlled[i]); 17385 } 17386 } 17387 } else if (controlled instanceof Swiper && byController !== controlled) { 17388 setControlledTransition(controlled); 17389 } 17390 } 17391 17392 function removeSpline() { 17393 if (!swiper.controller.control) return; 17394 17395 if (swiper.controller.spline) { 17396 swiper.controller.spline = undefined; 17397 delete swiper.controller.spline; 17398 } 17399 } 17400 17401 on('beforeInit', () => { 17402 swiper.controller.control = swiper.params.controller.control; 17403 }); 17404 on('update', () => { 17405 removeSpline(); 17406 }); 17407 on('resize', () => { 17408 removeSpline(); 17409 }); 17410 on('observerUpdate', () => { 17411 removeSpline(); 17412 }); 17413 on('setTranslate', (_s, translate, byController) => { 17414 if (!swiper.controller.control) return; 17415 swiper.controller.setTranslate(translate, byController); 17416 }); 17417 on('setTransition', (_s, duration, byController) => { 17418 if (!swiper.controller.control) return; 17419 swiper.controller.setTransition(duration, byController); 17420 }); 17421 Object.assign(swiper.controller, { 17422 setTranslate, 17423 setTransition 17424 }); 17425} 17426 17427/***/ }), 17428
vendor: 5,594 bytes, lines 17429-17574
17429/***/ "./node_modules/swiper/modules/effect-cards/effect-cards.js": 17430/*!******************************************************************!*\ 17431 !*** ./node_modules/swiper/modules/effect-cards/effect-cards.js ***! 17432 \******************************************************************/ 17433/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 17434 17435__webpack_require__.r(__webpack_exports__); 17436/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17437/* harmony export */ "default": function() { return /* binding */ EffectCards; } 17438/* harmony export */ }); 17439/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-shadow.js */ "./node_modules/swiper/shared/create-shadow.js"); 17440/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 17441/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-target.js */ "./node_modules/swiper/shared/effect-target.js"); 17442/* 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"); 17443 17444 17445 17446 17447function EffectCards({ 17448 swiper, 17449 extendParams, 17450 on 17451}) { 17452 extendParams({ 17453 cardsEffect: { 17454 slideShadows: true, 17455 transformEl: null, 17456 rotate: true, 17457 perSlideRotate: 2, 17458 perSlideOffset: 8 17459 } 17460 }); 17461 17462 const setTranslate = () => { 17463 const { 17464 slides, 17465 activeIndex 17466 } = swiper; 17467 const params = swiper.params.cardsEffect; 17468 const { 17469 startTranslate, 17470 isTouched 17471 } = swiper.touchEventsData; 17472 const currentTranslate = swiper.translate; 17473 17474 for (let i = 0; i < slides.length; i += 1) { 17475 const $slideEl = slides.eq(i); 17476 const slideProgress = $slideEl[0].progress; 17477 const progress = Math.min(Math.max(slideProgress, -4), 4); 17478 let offset = $slideEl[0].swiperSlideOffset; 17479 17480 if (swiper.params.centeredSlides && !swiper.params.cssMode) { 17481 swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`); 17482 } 17483 17484 if (swiper.params.centeredSlides && swiper.params.cssMode) { 17485 offset -= slides[0].swiperSlideOffset; 17486 } 17487 17488 let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset; 17489 let tY = 0; 17490 const tZ = -100 * Math.abs(progress); 17491 let scale = 1; 17492 let rotate = -params.perSlideRotate * progress; 17493 let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75; 17494 const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i; 17495 const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate; 17496 const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate; 17497 17498 if (isSwipeToNext || isSwipeToPrev) { 17499 const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5; 17500 rotate += -28 * progress * subProgress; 17501 scale += -0.5 * subProgress; 17502 tXAdd += 96 * subProgress; 17503 tY = `${-25 * subProgress * Math.abs(progress)}%`; 17504 } 17505 17506 if (progress < 0) { 17507 // next 17508 tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`; 17509 } else if (progress > 0) { 17510 // prev 17511 tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`; 17512 } else { 17513 tX = `${tX}px`; 17514 } 17515 17516 if (!swiper.isHorizontal()) { 17517 const prevY = tY; 17518 tY = tX; 17519 tX = prevY; 17520 } 17521 17522 const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`; 17523 const transform = ` 17524 translate3d(${tX}, ${tY}, ${tZ}px) 17525 rotateZ(${params.rotate ? rotate : 0}deg) 17526 scale(${scaleString}) 17527 `; 17528 17529 if (params.slideShadows) { 17530 // Set shadows 17531 let $shadowEl = $slideEl.find('.swiper-slide-shadow'); 17532 17533 if ($shadowEl.length === 0) { 17534 $shadowEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params, $slideEl); 17535 } 17536 17537 if ($shadowEl.length) $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1); 17538 } 17539 17540 $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length; 17541 const $targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__["default"])(params, $slideEl); 17542 $targetEl.transform(transform); 17543 } 17544 }; 17545 17546 const setTransition = duration => { 17547 const { 17548 transformEl 17549 } = swiper.params.cardsEffect; 17550 const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides; 17551 $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration); 17552 (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__["default"])({ 17553 swiper, 17554 duration, 17555 transformEl 17556 }); 17557 }; 17558 17559 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ 17560 effect: 'cards', 17561 swiper, 17562 on, 17563 setTranslate, 17564 setTransition, 17565 perspective: () => true, 17566 overwriteParams: () => ({ 17567 watchSlidesProgress: true, 17568 virtualTranslate: !swiper.params.cssMode 17569 }) 17570 }); 17571} 17572 17573/***/ }), 17574
vendor: 5,449 bytes, lines 17575-17694
17575/***/ "./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js": 17576/*!**************************************************************************!*\ 17577 !*** ./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js ***! 17578 \**************************************************************************/ 17579/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 17580 17581__webpack_require__.r(__webpack_exports__); 17582/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17583/* harmony export */ "default": function() { return /* binding */ EffectCoverflow; } 17584/* harmony export */ }); 17585/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-shadow.js */ "./node_modules/swiper/shared/create-shadow.js"); 17586/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 17587/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-target.js */ "./node_modules/swiper/shared/effect-target.js"); 17588 17589 17590 17591function EffectCoverflow({ 17592 swiper, 17593 extendParams, 17594 on 17595}) { 17596 extendParams({ 17597 coverflowEffect: { 17598 rotate: 50, 17599 stretch: 0, 17600 depth: 100, 17601 scale: 1, 17602 modifier: 1, 17603 slideShadows: true, 17604 transformEl: null 17605 } 17606 }); 17607 17608 const setTranslate = () => { 17609 const { 17610 width: swiperWidth, 17611 height: swiperHeight, 17612 slides, 17613 slidesSizesGrid 17614 } = swiper; 17615 const params = swiper.params.coverflowEffect; 17616 const isHorizontal = swiper.isHorizontal(); 17617 const transform = swiper.translate; 17618 const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2; 17619 const rotate = isHorizontal ? params.rotate : -params.rotate; 17620 const translate = params.depth; // Each slide offset from center 17621 17622 for (let i = 0, length = slides.length; i < length; i += 1) { 17623 const $slideEl = slides.eq(i); 17624 const slideSize = slidesSizesGrid[i]; 17625 const slideOffset = $slideEl[0].swiperSlideOffset; 17626 const centerOffset = (center - slideOffset - slideSize / 2) / slideSize; 17627 const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier; 17628 let rotateY = isHorizontal ? rotate * offsetMultiplier : 0; 17629 let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; // var rotateZ = 0 17630 17631 let translateZ = -translate * Math.abs(offsetMultiplier); 17632 let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders 17633 17634 if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) { 17635 stretch = parseFloat(params.stretch) / 100 * slideSize; 17636 } 17637 17638 let translateY = isHorizontal ? 0 : stretch * offsetMultiplier; 17639 let translateX = isHorizontal ? stretch * offsetMultiplier : 0; 17640 let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); // Fix for ultra small values 17641 17642 if (Math.abs(translateX) < 0.001) translateX = 0; 17643 if (Math.abs(translateY) < 0.001) translateY = 0; 17644 if (Math.abs(translateZ) < 0.001) translateZ = 0; 17645 if (Math.abs(rotateY) < 0.001) rotateY = 0; 17646 if (Math.abs(rotateX) < 0.001) rotateX = 0; 17647 if (Math.abs(scale) < 0.001) scale = 0; 17648 const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`; 17649 const $targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__["default"])(params, $slideEl); 17650 $targetEl.transform(slideTransform); 17651 $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; 17652 17653 if (params.slideShadows) { 17654 // Set shadows 17655 let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 17656 let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 17657 17658 if ($shadowBeforeEl.length === 0) { 17659 $shadowBeforeEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params, $slideEl, isHorizontal ? 'left' : 'top'); 17660 } 17661 17662 if ($shadowAfterEl.length === 0) { 17663 $shadowAfterEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params, $slideEl, isHorizontal ? 'right' : 'bottom'); 17664 } 17665 17666 if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; 17667 if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0; 17668 } 17669 } 17670 }; 17671 17672 const setTransition = duration => { 17673 const { 17674 transformEl 17675 } = swiper.params.coverflowEffect; 17676 const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides; 17677 $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); 17678 }; 17679 17680 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ 17681 effect: 'coverflow', 17682 swiper, 17683 on, 17684 setTranslate, 17685 setTransition, 17686 perspective: () => true, 17687 overwriteParams: () => ({ 17688 watchSlidesProgress: true 17689 }) 17690 }); 17691} 17692 17693/***/ }), 17694
vendor: 6,175 bytes, lines 17695-17865
17695/***/ "./node_modules/swiper/modules/effect-creative/effect-creative.js": 17696/*!************************************************************************!*\ 17697 !*** ./node_modules/swiper/modules/effect-creative/effect-creative.js ***! 17698 \************************************************************************/ 17699/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 17700 17701__webpack_require__.r(__webpack_exports__); 17702/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17703/* harmony export */ "default": function() { return /* binding */ EffectCreative; } 17704/* harmony export */ }); 17705/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/create-shadow.js */ "./node_modules/swiper/shared/create-shadow.js"); 17706/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 17707/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-target.js */ "./node_modules/swiper/shared/effect-target.js"); 17708/* 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"); 17709 17710 17711 17712 17713function EffectCreative({ 17714 swiper, 17715 extendParams, 17716 on 17717}) { 17718 extendParams({ 17719 creativeEffect: { 17720 transformEl: null, 17721 limitProgress: 1, 17722 shadowPerProgress: false, 17723 progressMultiplier: 1, 17724 perspective: true, 17725 prev: { 17726 translate: [0, 0, 0], 17727 rotate: [0, 0, 0], 17728 opacity: 1, 17729 scale: 1 17730 }, 17731 next: { 17732 translate: [0, 0, 0], 17733 rotate: [0, 0, 0], 17734 opacity: 1, 17735 scale: 1 17736 } 17737 } 17738 }); 17739 17740 const getTranslateValue = value => { 17741 if (typeof value === 'string') return value; 17742 return `${value}px`; 17743 }; 17744 17745 const setTranslate = () => { 17746 const { 17747 slides, 17748 $wrapperEl, 17749 slidesSizesGrid 17750 } = swiper; 17751 const params = swiper.params.creativeEffect; 17752 const { 17753 progressMultiplier: multiplier 17754 } = params; 17755 const isCenteredSlides = swiper.params.centeredSlides; 17756 17757 if (isCenteredSlides) { 17758 const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0; 17759 $wrapperEl.transform(`translateX(calc(50% - ${margin}px))`); 17760 } 17761 17762 for (let i = 0; i < slides.length; i += 1) { 17763 const $slideEl = slides.eq(i); 17764 const slideProgress = $slideEl[0].progress; 17765 const progress = Math.min(Math.max($slideEl[0].progress, -params.limitProgress), params.limitProgress); 17766 let originalProgress = progress; 17767 17768 if (!isCenteredSlides) { 17769 originalProgress = Math.min(Math.max($slideEl[0].originalProgress, -params.limitProgress), params.limitProgress); 17770 } 17771 17772 const offset = $slideEl[0].swiperSlideOffset; 17773 const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0]; 17774 const r = [0, 0, 0]; 17775 let custom = false; 17776 17777 if (!swiper.isHorizontal()) { 17778 t[1] = t[0]; 17779 t[0] = 0; 17780 } 17781 17782 let data = { 17783 translate: [0, 0, 0], 17784 rotate: [0, 0, 0], 17785 scale: 1, 17786 opacity: 1 17787 }; 17788 17789 if (progress < 0) { 17790 data = params.next; 17791 custom = true; 17792 } else if (progress > 0) { 17793 data = params.prev; 17794 custom = true; 17795 } // set translate 17796 17797 17798 t.forEach((value, index) => { 17799 t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`; 17800 }); // set rotates 17801 17802 r.forEach((value, index) => { 17803 r[index] = data.rotate[index] * Math.abs(progress * multiplier); 17804 }); 17805 $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length; 17806 const translateString = t.join(', '); 17807 const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`; 17808 const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`; 17809 const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier; 17810 const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`; // Set shadows 17811 17812 if (custom && data.shadow || !custom) { 17813 let $shadowEl = $slideEl.children('.swiper-slide-shadow'); 17814 17815 if ($shadowEl.length === 0 && data.shadow) { 17816 $shadowEl = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params, $slideEl); 17817 } 17818 17819 if ($shadowEl.length) { 17820 const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress; 17821 $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1); 17822 } 17823 } 17824 17825 const $targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_2__["default"])(params, $slideEl); 17826 $targetEl.transform(transform).css({ 17827 opacity: opacityString 17828 }); 17829 17830 if (data.origin) { 17831 $targetEl.css('transform-origin', data.origin); 17832 } 17833 } 17834 }; 17835 17836 const setTransition = duration => { 17837 const { 17838 transformEl 17839 } = swiper.params.creativeEffect; 17840 const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides; 17841 $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration); 17842 (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_3__["default"])({ 17843 swiper, 17844 duration, 17845 transformEl, 17846 allSlides: true 17847 }); 17848 }; 17849 17850 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ 17851 effect: 'creative', 17852 swiper, 17853 on, 17854 setTranslate, 17855 setTransition, 17856 perspective: () => swiper.params.creativeEffect.perspective, 17857 overwriteParams: () => ({ 17858 watchSlidesProgress: true, 17859 virtualTranslate: !swiper.params.cssMode 17860 }) 17861 }); 17862} 17863 17864/***/ }), 17865
vendor: 7,392 bytes, lines 17866-18075
17866/***/ "./node_modules/swiper/modules/effect-cube/effect-cube.js": 17867/*!****************************************************************!*\ 17868 !*** ./node_modules/swiper/modules/effect-cube/effect-cube.js ***! 17869 \****************************************************************/ 17870/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 17871 17872__webpack_require__.r(__webpack_exports__); 17873/* harmony export */ __webpack_require__.d(__webpack_exports__, { 17874/* harmony export */ "default": function() { return /* binding */ EffectCube; } 17875/* harmony export */ }); 17876/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 17877/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 17878 17879 17880function EffectCube({ 17881 swiper, 17882 extendParams, 17883 on 17884}) { 17885 extendParams({ 17886 cubeEffect: { 17887 slideShadows: true, 17888 shadow: true, 17889 shadowOffset: 20, 17890 shadowScale: 0.94 17891 } 17892 }); 17893 17894 const createSlideShadows = ($slideEl, progress, isHorizontal) => { 17895 let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 17896 let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 17897 17898 if (shadowBefore.length === 0) { 17899 shadowBefore = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`); 17900 $slideEl.append(shadowBefore); 17901 } 17902 17903 if (shadowAfter.length === 0) { 17904 shadowAfter = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`); 17905 $slideEl.append(shadowAfter); 17906 } 17907 17908 if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); 17909 if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); 17910 }; 17911 17912 const recreateShadows = () => { 17913 // create new ones 17914 const isHorizontal = swiper.isHorizontal(); 17915 swiper.slides.each(slideEl => { 17916 const progress = Math.max(Math.min(slideEl.progress, 1), -1); 17917 createSlideShadows((0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(slideEl), progress, isHorizontal); 17918 }); 17919 }; 17920 17921 const setTranslate = () => { 17922 const { 17923 $el, 17924 $wrapperEl, 17925 slides, 17926 width: swiperWidth, 17927 height: swiperHeight, 17928 rtlTranslate: rtl, 17929 size: swiperSize, 17930 browser 17931 } = swiper; 17932 const params = swiper.params.cubeEffect; 17933 const isHorizontal = swiper.isHorizontal(); 17934 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 17935 let wrapperRotate = 0; 17936 let $cubeShadowEl; 17937 17938 if (params.shadow) { 17939 if (isHorizontal) { 17940 $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow'); 17941 17942 if ($cubeShadowEl.length === 0) { 17943 $cubeShadowEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div class="swiper-cube-shadow"></div>'); 17944 $wrapperEl.append($cubeShadowEl); 17945 } 17946 17947 $cubeShadowEl.css({ 17948 height: `${swiperWidth}px` 17949 }); 17950 } else { 17951 $cubeShadowEl = $el.find('.swiper-cube-shadow'); 17952 17953 if ($cubeShadowEl.length === 0) { 17954 $cubeShadowEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])('<div class="swiper-cube-shadow"></div>'); 17955 $el.append($cubeShadowEl); 17956 } 17957 } 17958 } 17959 17960 for (let i = 0; i < slides.length; i += 1) { 17961 const $slideEl = slides.eq(i); 17962 let slideIndex = i; 17963 17964 if (isVirtual) { 17965 slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10); 17966 } 17967 17968 let slideAngle = slideIndex * 90; 17969 let round = Math.floor(slideAngle / 360); 17970 17971 if (rtl) { 17972 slideAngle = -slideAngle; 17973 round = Math.floor(-slideAngle / 360); 17974 } 17975 17976 const progress = Math.max(Math.min($slideEl[0].progress, 1), -1); 17977 let tx = 0; 17978 let ty = 0; 17979 let tz = 0; 17980 17981 if (slideIndex % 4 === 0) { 17982 tx = -round * 4 * swiperSize; 17983 tz = 0; 17984 } else if ((slideIndex - 1) % 4 === 0) { 17985 tx = 0; 17986 tz = -round * 4 * swiperSize; 17987 } else if ((slideIndex - 2) % 4 === 0) { 17988 tx = swiperSize + round * 4 * swiperSize; 17989 tz = swiperSize; 17990 } else if ((slideIndex - 3) % 4 === 0) { 17991 tx = -swiperSize; 17992 tz = 3 * swiperSize + swiperSize * 4 * round; 17993 } 17994 17995 if (rtl) { 17996 tx = -tx; 17997 } 17998 17999 if (!isHorizontal) { 18000 ty = tx; 18001 tx = 0; 18002 } 18003 18004 const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`; 18005 18006 if (progress <= 1 && progress > -1) { 18007 wrapperRotate = slideIndex * 90 + progress * 90; 18008 if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90; 18009 } 18010 18011 $slideEl.transform(transform); 18012 18013 if (params.slideShadows) { 18014 createSlideShadows($slideEl, progress, isHorizontal); 18015 } 18016 } 18017 18018 $wrapperEl.css({ 18019 '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`, 18020 'transform-origin': `50% 50% -${swiperSize / 2}px` 18021 }); 18022 18023 if (params.shadow) { 18024 if (isHorizontal) { 18025 $cubeShadowEl.transform(`translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`); 18026 } else { 18027 const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90; 18028 const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2); 18029 const scale1 = params.shadowScale; 18030 const scale2 = params.shadowScale / multiplier; 18031 const offset = params.shadowOffset; 18032 $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`); 18033 } 18034 } 18035 18036 const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0; 18037 $wrapperEl.transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`); 18038 $wrapperEl[0].style.setProperty('--swiper-cube-translate-z', `${zFactor}px`); 18039 }; 18040 18041 const setTransition = duration => { 18042 const { 18043 $el, 18044 slides 18045 } = swiper; 18046 slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); 18047 18048 if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) { 18049 $el.find('.swiper-cube-shadow').transition(duration); 18050 } 18051 }; 18052 18053 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_1__["default"])({ 18054 effect: 'cube', 18055 swiper, 18056 on, 18057 setTranslate, 18058 setTransition, 18059 recreateShadows, 18060 getEffectParams: () => swiper.params.cubeEffect, 18061 perspective: () => true, 18062 overwriteParams: () => ({ 18063 slidesPerView: 1, 18064 slidesPerGroup: 1, 18065 watchSlidesProgress: true, 18066 resistanceRatio: 0, 18067 spaceBetween: 0, 18068 centeredSlides: false, 18069 virtualTranslate: true 18070 }) 18071 }); 18072} 18073 18074/***/ }), 18075
vendor: 2,981 bytes, lines 18076-18161
18076/***/ "./node_modules/swiper/modules/effect-fade/effect-fade.js": 18077/*!****************************************************************!*\ 18078 !*** ./node_modules/swiper/modules/effect-fade/effect-fade.js ***! 18079 \****************************************************************/ 18080/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 18081 18082__webpack_require__.r(__webpack_exports__); 18083/* harmony export */ __webpack_require__.d(__webpack_exports__, { 18084/* harmony export */ "default": function() { return /* binding */ EffectFade; } 18085/* harmony export */ }); 18086/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 18087/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/effect-target.js */ "./node_modules/swiper/shared/effect-target.js"); 18088/* 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"); 18089 18090 18091 18092function EffectFade({ 18093 swiper, 18094 extendParams, 18095 on 18096}) { 18097 extendParams({ 18098 fadeEffect: { 18099 crossFade: false, 18100 transformEl: null 18101 } 18102 }); 18103 18104 const setTranslate = () => { 18105 const { 18106 slides 18107 } = swiper; 18108 const params = swiper.params.fadeEffect; 18109 18110 for (let i = 0; i < slides.length; i += 1) { 18111 const $slideEl = swiper.slides.eq(i); 18112 const offset = $slideEl[0].swiperSlideOffset; 18113 let tx = -offset; 18114 if (!swiper.params.virtualTranslate) tx -= swiper.translate; 18115 let ty = 0; 18116 18117 if (!swiper.isHorizontal()) { 18118 ty = tx; 18119 tx = 0; 18120 } 18121 18122 const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0); 18123 const $targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params, $slideEl); 18124 $targetEl.css({ 18125 opacity: slideOpacity 18126 }).transform(`translate3d(${tx}px, ${ty}px, 0px)`); 18127 } 18128 }; 18129 18130 const setTransition = duration => { 18131 const { 18132 transformEl 18133 } = swiper.params.fadeEffect; 18134 const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides; 18135 $transitionElements.transition(duration); 18136 (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_2__["default"])({ 18137 swiper, 18138 duration, 18139 transformEl, 18140 allSlides: true 18141 }); 18142 }; 18143 18144 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_0__["default"])({ 18145 effect: 'fade', 18146 swiper, 18147 on, 18148 setTranslate, 18149 setTransition, 18150 overwriteParams: () => ({ 18151 slidesPerView: 1, 18152 slidesPerGroup: 1, 18153 watchSlidesProgress: true, 18154 spaceBetween: 0, 18155 virtualTranslate: !swiper.params.cssMode 18156 }) 18157 }); 18158} 18159 18160/***/ }), 18161
vendor: 5,354 bytes, lines 18162-18302
18162/***/ "./node_modules/swiper/modules/effect-flip/effect-flip.js": 18163/*!****************************************************************!*\ 18164 !*** ./node_modules/swiper/modules/effect-flip/effect-flip.js ***! 18165 \****************************************************************/ 18166/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 18167 18168__webpack_require__.r(__webpack_exports__); 18169/* harmony export */ __webpack_require__.d(__webpack_exports__, { 18170/* harmony export */ "default": function() { return /* binding */ EffectFlip; } 18171/* harmony export */ }); 18172/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 18173/* harmony import */ var _shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/create-shadow.js */ "./node_modules/swiper/shared/create-shadow.js"); 18174/* harmony import */ var _shared_effect_init_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/effect-init.js */ "./node_modules/swiper/shared/effect-init.js"); 18175/* harmony import */ var _shared_effect_target_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/effect-target.js */ "./node_modules/swiper/shared/effect-target.js"); 18176/* harmony import */ var _shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../shared/effect-virtual-transition-end.js */ "./node_modules/swiper/shared/effect-virtual-transition-end.js"); 18177 18178 18179 18180 18181 18182function EffectFlip({ 18183 swiper, 18184 extendParams, 18185 on 18186}) { 18187 extendParams({ 18188 flipEffect: { 18189 slideShadows: true, 18190 limitRotation: true, 18191 transformEl: null 18192 } 18193 }); 18194 18195 const createSlideShadows = ($slideEl, progress, params) => { 18196 let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 18197 let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 18198 18199 if (shadowBefore.length === 0) { 18200 shadowBefore = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top'); 18201 } 18202 18203 if (shadowAfter.length === 0) { 18204 shadowAfter = (0,_shared_create_shadow_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom'); 18205 } 18206 18207 if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); 18208 if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); 18209 }; 18210 18211 const recreateShadows = () => { 18212 // Set shadows 18213 const params = swiper.params.flipEffect; 18214 swiper.slides.each(slideEl => { 18215 const $slideEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(slideEl); 18216 let progress = $slideEl[0].progress; 18217 18218 if (swiper.params.flipEffect.limitRotation) { 18219 progress = Math.max(Math.min(slideEl.progress, 1), -1); 18220 } 18221 18222 createSlideShadows($slideEl, progress, params); 18223 }); 18224 }; 18225 18226 const setTranslate = () => { 18227 const { 18228 slides, 18229 rtlTranslate: rtl 18230 } = swiper; 18231 const params = swiper.params.flipEffect; 18232 18233 for (let i = 0; i < slides.length; i += 1) { 18234 const $slideEl = slides.eq(i); 18235 let progress = $slideEl[0].progress; 18236 18237 if (swiper.params.flipEffect.limitRotation) { 18238 progress = Math.max(Math.min($slideEl[0].progress, 1), -1); 18239 } 18240 18241 const offset = $slideEl[0].swiperSlideOffset; 18242 const rotate = -180 * progress; 18243 let rotateY = rotate; 18244 let rotateX = 0; 18245 let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset; 18246 let ty = 0; 18247 18248 if (!swiper.isHorizontal()) { 18249 ty = tx; 18250 tx = 0; 18251 rotateX = -rotateY; 18252 rotateY = 0; 18253 } else if (rtl) { 18254 rotateY = -rotateY; 18255 } 18256 18257 $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length; 18258 18259 if (params.slideShadows) { 18260 createSlideShadows($slideEl, progress, params); 18261 } 18262 18263 const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`; 18264 const $targetEl = (0,_shared_effect_target_js__WEBPACK_IMPORTED_MODULE_3__["default"])(params, $slideEl); 18265 $targetEl.transform(transform); 18266 } 18267 }; 18268 18269 const setTransition = duration => { 18270 const { 18271 transformEl 18272 } = swiper.params.flipEffect; 18273 const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides; 18274 $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration); 18275 (0,_shared_effect_virtual_transition_end_js__WEBPACK_IMPORTED_MODULE_4__["default"])({ 18276 swiper, 18277 duration, 18278 transformEl 18279 }); 18280 }; 18281 18282 (0,_shared_effect_init_js__WEBPACK_IMPORTED_MODULE_2__["default"])({ 18283 effect: 'flip', 18284 swiper, 18285 on, 18286 setTranslate, 18287 setTransition, 18288 recreateShadows, 18289 getEffectParams: () => swiper.params.flipEffect, 18290 perspective: () => true, 18291 overwriteParams: () => ({ 18292 slidesPerView: 1, 18293 slidesPerGroup: 1, 18294 watchSlidesProgress: true, 18295 spaceBetween: 0, 18296 virtualTranslate: !swiper.params.cssMode 18297 }) 18298 }); 18299} 18300 18301/***/ }), 18302
vendor: 8,965 bytes, lines 18303-18572
18303/***/ "./node_modules/swiper/modules/free-mode/free-mode.js": 18304/*!************************************************************!*\ 18305 !*** ./node_modules/swiper/modules/free-mode/free-mode.js ***! 18306 \************************************************************/ 18307/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 18308 18309__webpack_require__.r(__webpack_exports__); 18310/* harmony export */ __webpack_require__.d(__webpack_exports__, { 18311/* harmony export */ "default": function() { return /* binding */ freeMode; } 18312/* harmony export */ }); 18313/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 18314 18315function freeMode({ 18316 swiper, 18317 extendParams, 18318 emit, 18319 once 18320}) { 18321 extendParams({ 18322 freeMode: { 18323 enabled: false, 18324 momentum: true, 18325 momentumRatio: 1, 18326 momentumBounce: true, 18327 momentumBounceRatio: 1, 18328 momentumVelocityRatio: 1, 18329 sticky: false, 18330 minimumVelocity: 0.02 18331 } 18332 }); 18333 18334 function onTouchStart() { 18335 const translate = swiper.getTranslate(); 18336 swiper.setTranslate(translate); 18337 swiper.setTransition(0); 18338 swiper.touchEventsData.velocities.length = 0; 18339 swiper.freeMode.onTouchEnd({ 18340 currentPos: swiper.rtl ? swiper.translate : -swiper.translate 18341 }); 18342 } 18343 18344 function onTouchMove() { 18345 const { 18346 touchEventsData: data, 18347 touches 18348 } = swiper; // Velocity 18349 18350 if (data.velocities.length === 0) { 18351 data.velocities.push({ 18352 position: touches[swiper.isHorizontal() ? 'startX' : 'startY'], 18353 time: data.touchStartTime 18354 }); 18355 } 18356 18357 data.velocities.push({ 18358 position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'], 18359 time: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)() 18360 }); 18361 } 18362 18363 function onTouchEnd({ 18364 currentPos 18365 }) { 18366 const { 18367 params, 18368 $wrapperEl, 18369 rtlTranslate: rtl, 18370 snapGrid, 18371 touchEventsData: data 18372 } = swiper; // Time diff 18373 18374 const touchEndTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)(); 18375 const timeDiff = touchEndTime - data.touchStartTime; 18376 18377 if (currentPos < -swiper.minTranslate()) { 18378 swiper.slideTo(swiper.activeIndex); 18379 return; 18380 } 18381 18382 if (currentPos > -swiper.maxTranslate()) { 18383 if (swiper.slides.length < snapGrid.length) { 18384 swiper.slideTo(snapGrid.length - 1); 18385 } else { 18386 swiper.slideTo(swiper.slides.length - 1); 18387 } 18388 18389 return; 18390 } 18391 18392 if (params.freeMode.momentum) { 18393 if (data.velocities.length > 1) { 18394 const lastMoveEvent = data.velocities.pop(); 18395 const velocityEvent = data.velocities.pop(); 18396 const distance = lastMoveEvent.position - velocityEvent.position; 18397 const time = lastMoveEvent.time - velocityEvent.time; 18398 swiper.velocity = distance / time; 18399 swiper.velocity /= 2; 18400 18401 if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) { 18402 swiper.velocity = 0; 18403 } // this implies that the user stopped moving a finger then released. 18404 // There would be no events with distance zero, so the last event is stale. 18405 18406 18407 if (time > 150 || (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.now)() - lastMoveEvent.time > 300) { 18408 swiper.velocity = 0; 18409 } 18410 } else { 18411 swiper.velocity = 0; 18412 } 18413 18414 swiper.velocity *= params.freeMode.momentumVelocityRatio; 18415 data.velocities.length = 0; 18416 let momentumDuration = 1000 * params.freeMode.momentumRatio; 18417 const momentumDistance = swiper.velocity * momentumDuration; 18418 let newPosition = swiper.translate + momentumDistance; 18419 if (rtl) newPosition = -newPosition; 18420 let doBounce = false; 18421 let afterBouncePosition; 18422 const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio; 18423 let needsLoopFix; 18424 18425 if (newPosition < swiper.maxTranslate()) { 18426 if (params.freeMode.momentumBounce) { 18427 if (newPosition + swiper.maxTranslate() < -bounceAmount) { 18428 newPosition = swiper.maxTranslate() - bounceAmount; 18429 } 18430 18431 afterBouncePosition = swiper.maxTranslate(); 18432 doBounce = true; 18433 data.allowMomentumBounce = true; 18434 } else { 18435 newPosition = swiper.maxTranslate(); 18436 } 18437 18438 if (params.loop && params.centeredSlides) needsLoopFix = true; 18439 } else if (newPosition > swiper.minTranslate()) { 18440 if (params.freeMode.momentumBounce) { 18441 if (newPosition - swiper.minTranslate() > bounceAmount) { 18442 newPosition = swiper.minTranslate() + bounceAmount; 18443 } 18444 18445 afterBouncePosition = swiper.minTranslate(); 18446 doBounce = true; 18447 data.allowMomentumBounce = true; 18448 } else { 18449 newPosition = swiper.minTranslate(); 18450 } 18451 18452 if (params.loop && params.centeredSlides) needsLoopFix = true; 18453 } else if (params.freeMode.sticky) { 18454 let nextSlide; 18455 18456 for (let j = 0; j < snapGrid.length; j += 1) { 18457 if (snapGrid[j] > -newPosition) { 18458 nextSlide = j; 18459 break; 18460 } 18461 } 18462 18463 if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') { 18464 newPosition = snapGrid[nextSlide]; 18465 } else { 18466 newPosition = snapGrid[nextSlide - 1]; 18467 } 18468 18469 newPosition = -newPosition; 18470 } 18471 18472 if (needsLoopFix) { 18473 once('transitionEnd', () => { 18474 swiper.loopFix(); 18475 }); 18476 } // Fix duration 18477 18478 18479 if (swiper.velocity !== 0) { 18480 if (rtl) { 18481 momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity); 18482 } else { 18483 momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity); 18484 } 18485 18486 if (params.freeMode.sticky) { 18487 // If freeMode.sticky is active and the user ends a swipe with a slow-velocity 18488 // event, then durations can be 20+ seconds to slide one (or zero!) slides. 18489 // It's easy to see this when simulating touch with mouse events. To fix this, 18490 // limit single-slide swipes to the default slide duration. This also has the 18491 // nice side effect of matching slide speed if the user stopped moving before 18492 // lifting finger or mouse vs. moving slowly before lifting the finger/mouse. 18493 // For faster swipes, also apply limits (albeit higher ones). 18494 const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate); 18495 const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex]; 18496 18497 if (moveDistance < currentSlideSize) { 18498 momentumDuration = params.speed; 18499 } else if (moveDistance < 2 * currentSlideSize) { 18500 momentumDuration = params.speed * 1.5; 18501 } else { 18502 momentumDuration = params.speed * 2.5; 18503 } 18504 } 18505 } else if (params.freeMode.sticky) { 18506 swiper.slideToClosest(); 18507 return; 18508 } 18509 18510 if (params.freeMode.momentumBounce && doBounce) { 18511 swiper.updateProgress(afterBouncePosition); 18512 swiper.setTransition(momentumDuration); 18513 swiper.setTranslate(newPosition); 18514 swiper.transitionStart(true, swiper.swipeDirection); 18515 swiper.animating = true; 18516 $wrapperEl.transitionEnd(() => { 18517 if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return; 18518 emit('momentumBounce'); 18519 swiper.setTransition(params.speed); 18520 setTimeout(() => { 18521 swiper.setTranslate(afterBouncePosition); 18522 $wrapperEl.transitionEnd(() => { 18523 if (!swiper || swiper.destroyed) return; 18524 swiper.transitionEnd(); 18525 }); 18526 }, 0); 18527 }); 18528 } else if (swiper.velocity) { 18529 emit('_freeModeNoMomentumRelease'); 18530 swiper.updateProgress(newPosition); 18531 swiper.setTransition(momentumDuration); 18532 swiper.setTranslate(newPosition); 18533 swiper.transitionStart(true, swiper.swipeDirection); 18534 18535 if (!swiper.animating) { 18536 swiper.animating = true; 18537 $wrapperEl.transitionEnd(() => { 18538 if (!swiper || swiper.destroyed) return; 18539 swiper.transitionEnd(); 18540 }); 18541 } 18542 } else { 18543 swiper.updateProgress(newPosition); 18544 } 18545 18546 swiper.updateActiveIndex(); 18547 swiper.updateSlidesClasses(); 18548 } else if (params.freeMode.sticky) { 18549 swiper.slideToClosest(); 18550 return; 18551 } else if (params.freeMode) { 18552 emit('_freeModeNoMomentumRelease'); 18553 } 18554 18555 if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) { 18556 swiper.updateProgress(); 18557 swiper.updateActiveIndex(); 18558 swiper.updateSlidesClasses(); 18559 } 18560 } 18561 18562 Object.assign(swiper, { 18563 freeMode: { 18564 onTouchStart, 18565 onTouchMove, 18566 onTouchEnd 18567 } 18568 }); 18569} 18570 18571/***/ }), 18572
vendor: 3,818 bytes, lines 18573-18701
18573/***/ "./node_modules/swiper/modules/grid/grid.js": 18574/*!**************************************************!*\ 18575 !*** ./node_modules/swiper/modules/grid/grid.js ***! 18576 \**************************************************/ 18577/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 18578 18579__webpack_require__.r(__webpack_exports__); 18580/* harmony export */ __webpack_require__.d(__webpack_exports__, { 18581/* harmony export */ "default": function() { return /* binding */ Grid; } 18582/* harmony export */ }); 18583function Grid({ 18584 swiper, 18585 extendParams 18586}) { 18587 extendParams({ 18588 grid: { 18589 rows: 1, 18590 fill: 'column' 18591 } 18592 }); 18593 let slidesNumberEvenToRows; 18594 let slidesPerRow; 18595 let numFullColumns; 18596 18597 const initSlides = slidesLength => { 18598 const { 18599 slidesPerView 18600 } = swiper.params; 18601 const { 18602 rows, 18603 fill 18604 } = swiper.params.grid; 18605 slidesPerRow = slidesNumberEvenToRows / rows; 18606 numFullColumns = Math.floor(slidesLength / rows); 18607 18608 if (Math.floor(slidesLength / rows) === slidesLength / rows) { 18609 slidesNumberEvenToRows = slidesLength; 18610 } else { 18611 slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows; 18612 } 18613 18614 if (slidesPerView !== 'auto' && fill === 'row') { 18615 slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows); 18616 } 18617 }; 18618 18619 const updateSlide = (i, slide, slidesLength, getDirectionLabel) => { 18620 const { 18621 slidesPerGroup, 18622 spaceBetween 18623 } = swiper.params; 18624 const { 18625 rows, 18626 fill 18627 } = swiper.params.grid; // Set slides order 18628 18629 let newSlideOrderIndex; 18630 let column; 18631 let row; 18632 18633 if (fill === 'row' && slidesPerGroup > 1) { 18634 const groupIndex = Math.floor(i / (slidesPerGroup * rows)); 18635 const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex; 18636 const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup); 18637 row = Math.floor(slideIndexInGroup / columnsInGroup); 18638 column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup; 18639 newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows; 18640 slide.css({ 18641 '-webkit-order': newSlideOrderIndex, 18642 order: newSlideOrderIndex 18643 }); 18644 } else if (fill === 'column') { 18645 column = Math.floor(i / rows); 18646 row = i - column * rows; 18647 18648 if (column > numFullColumns || column === numFullColumns && row === rows - 1) { 18649 row += 1; 18650 18651 if (row >= rows) { 18652 row = 0; 18653 column += 1; 18654 } 18655 } 18656 } else { 18657 row = Math.floor(i / slidesPerRow); 18658 column = i - row * slidesPerRow; 18659 } 18660 18661 slide.css(getDirectionLabel('margin-top'), row !== 0 ? spaceBetween && `${spaceBetween}px` : ''); 18662 }; 18663 18664 const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => { 18665 const { 18666 spaceBetween, 18667 centeredSlides, 18668 roundLengths 18669 } = swiper.params; 18670 const { 18671 rows 18672 } = swiper.params.grid; 18673 swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows; 18674 swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween; 18675 swiper.$wrapperEl.css({ 18676 [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px` 18677 }); 18678 18679 if (centeredSlides) { 18680 snapGrid.splice(0, snapGrid.length); 18681 const newSlidesGrid = []; 18682 18683 for (let i = 0; i < snapGrid.length; i += 1) { 18684 let slidesGridItem = snapGrid[i]; 18685 if (roundLengths) slidesGridItem = Math.floor(slidesGridItem); 18686 if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem); 18687 } 18688 18689 snapGrid.push(...newSlidesGrid); 18690 } 18691 }; 18692 18693 swiper.grid = { 18694 initSlides, 18695 updateSlide, 18696 updateWrapperSize 18697 }; 18698} 18699 18700/***/ }), 18701
vendor: 3,802 bytes, lines 18702-18812
18702/***/ "./node_modules/swiper/modules/hash-navigation/hash-navigation.js": 18703/*!************************************************************************!*\ 18704 !*** ./node_modules/swiper/modules/hash-navigation/hash-navigation.js ***! 18705 \************************************************************************/ 18706/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 18707 18708__webpack_require__.r(__webpack_exports__); 18709/* harmony export */ __webpack_require__.d(__webpack_exports__, { 18710/* harmony export */ "default": function() { return /* binding */ HashNavigation; } 18711/* harmony export */ }); 18712/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 18713/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 18714 18715 18716function HashNavigation({ 18717 swiper, 18718 extendParams, 18719 emit, 18720 on 18721}) { 18722 let initialized = false; 18723 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 18724 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 18725 extendParams({ 18726 hashNavigation: { 18727 enabled: false, 18728 replaceState: false, 18729 watchState: false 18730 } 18731 }); 18732 18733 const onHashChange = () => { 18734 emit('hashChange'); 18735 const newHash = document.location.hash.replace('#', ''); 18736 const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash'); 18737 18738 if (newHash !== activeSlideHash) { 18739 const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash="${newHash}"]`).index(); 18740 if (typeof newIndex === 'undefined') return; 18741 swiper.slideTo(newIndex); 18742 } 18743 }; 18744 18745 const setHash = () => { 18746 if (!initialized || !swiper.params.hashNavigation.enabled) return; 18747 18748 if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) { 18749 window.history.replaceState(null, null, `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || ''); 18750 emit('hashSet'); 18751 } else { 18752 const slide = swiper.slides.eq(swiper.activeIndex); 18753 const hash = slide.attr('data-hash') || slide.attr('data-history'); 18754 document.location.hash = hash || ''; 18755 emit('hashSet'); 18756 } 18757 }; 18758 18759 const init = () => { 18760 if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return; 18761 initialized = true; 18762 const hash = document.location.hash.replace('#', ''); 18763 18764 if (hash) { 18765 const speed = 0; 18766 18767 for (let i = 0, length = swiper.slides.length; i < length; i += 1) { 18768 const slide = swiper.slides.eq(i); 18769 const slideHash = slide.attr('data-hash') || slide.attr('data-history'); 18770 18771 if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) { 18772 const index = slide.index(); 18773 swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true); 18774 } 18775 } 18776 } 18777 18778 if (swiper.params.hashNavigation.watchState) { 18779 (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(window).on('hashchange', onHashChange); 18780 } 18781 }; 18782 18783 const destroy = () => { 18784 if (swiper.params.hashNavigation.watchState) { 18785 (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(window).off('hashchange', onHashChange); 18786 } 18787 }; 18788 18789 on('init', () => { 18790 if (swiper.params.hashNavigation.enabled) { 18791 init(); 18792 } 18793 }); 18794 on('destroy', () => { 18795 if (swiper.params.hashNavigation.enabled) { 18796 destroy(); 18797 } 18798 }); 18799 on('transitionEnd _freeModeNoMomentumRelease', () => { 18800 if (initialized) { 18801 setHash(); 18802 } 18803 }); 18804 on('slideChange', () => { 18805 if (initialized && swiper.params.cssMode) { 18806 setHash(); 18807 } 18808 }); 18809} 18810 18811/***/ }), 18812
vendor: 4,819 bytes, lines 18813-18981
18813/***/ "./node_modules/swiper/modules/history/history.js": 18814/*!********************************************************!*\ 18815 !*** ./node_modules/swiper/modules/history/history.js ***! 18816 \********************************************************/ 18817/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 18818 18819__webpack_require__.r(__webpack_exports__); 18820/* harmony export */ __webpack_require__.d(__webpack_exports__, { 18821/* harmony export */ "default": function() { return /* binding */ History; } 18822/* harmony export */ }); 18823/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 18824 18825function History({ 18826 swiper, 18827 extendParams, 18828 on 18829}) { 18830 extendParams({ 18831 history: { 18832 enabled: false, 18833 root: '', 18834 replaceState: false, 18835 key: 'slides', 18836 keepQuery: false 18837 } 18838 }); 18839 let initialized = false; 18840 let paths = {}; 18841 18842 const slugify = text => { 18843 return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, ''); 18844 }; 18845 18846 const getPathValues = urlOverride => { 18847 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 18848 let location; 18849 18850 if (urlOverride) { 18851 location = new URL(urlOverride); 18852 } else { 18853 location = window.location; 18854 } 18855 18856 const pathArray = location.pathname.slice(1).split('/').filter(part => part !== ''); 18857 const total = pathArray.length; 18858 const key = pathArray[total - 2]; 18859 const value = pathArray[total - 1]; 18860 return { 18861 key, 18862 value 18863 }; 18864 }; 18865 18866 const setHistory = (key, index) => { 18867 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 18868 if (!initialized || !swiper.params.history.enabled) return; 18869 let location; 18870 18871 if (swiper.params.url) { 18872 location = new URL(swiper.params.url); 18873 } else { 18874 location = window.location; 18875 } 18876 18877 const slide = swiper.slides.eq(index); 18878 let value = slugify(slide.attr('data-history')); 18879 18880 if (swiper.params.history.root.length > 0) { 18881 let root = swiper.params.history.root; 18882 if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1); 18883 value = `${root}/${key}/${value}`; 18884 } else if (!location.pathname.includes(key)) { 18885 value = `${key}/${value}`; 18886 } 18887 18888 if (swiper.params.history.keepQuery) { 18889 value += location.search; 18890 } 18891 18892 const currentState = window.history.state; 18893 18894 if (currentState && currentState.value === value) { 18895 return; 18896 } 18897 18898 if (swiper.params.history.replaceState) { 18899 window.history.replaceState({ 18900 value 18901 }, null, value); 18902 } else { 18903 window.history.pushState({ 18904 value 18905 }, null, value); 18906 } 18907 }; 18908 18909 const scrollToSlide = (speed, value, runCallbacks) => { 18910 if (value) { 18911 for (let i = 0, length = swiper.slides.length; i < length; i += 1) { 18912 const slide = swiper.slides.eq(i); 18913 const slideHistory = slugify(slide.attr('data-history')); 18914 18915 if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) { 18916 const index = slide.index(); 18917 swiper.slideTo(index, speed, runCallbacks); 18918 } 18919 } 18920 } else { 18921 swiper.slideTo(0, speed, runCallbacks); 18922 } 18923 }; 18924 18925 const setHistoryPopState = () => { 18926 paths = getPathValues(swiper.params.url); 18927 scrollToSlide(swiper.params.speed, paths.value, false); 18928 }; 18929 18930 const init = () => { 18931 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 18932 if (!swiper.params.history) return; 18933 18934 if (!window.history || !window.history.pushState) { 18935 swiper.params.history.enabled = false; 18936 swiper.params.hashNavigation.enabled = true; 18937 return; 18938 } 18939 18940 initialized = true; 18941 paths = getPathValues(swiper.params.url); 18942 if (!paths.key && !paths.value) return; 18943 scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit); 18944 18945 if (!swiper.params.history.replaceState) { 18946 window.addEventListener('popstate', setHistoryPopState); 18947 } 18948 }; 18949 18950 const destroy = () => { 18951 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 18952 18953 if (!swiper.params.history.replaceState) { 18954 window.removeEventListener('popstate', setHistoryPopState); 18955 } 18956 }; 18957 18958 on('init', () => { 18959 if (swiper.params.history.enabled) { 18960 init(); 18961 } 18962 }); 18963 on('destroy', () => { 18964 if (swiper.params.history.enabled) { 18965 destroy(); 18966 } 18967 }); 18968 on('transitionEnd _freeModeNoMomentumRelease', () => { 18969 if (initialized) { 18970 setHistory(swiper.params.history.key, swiper.activeIndex); 18971 } 18972 }); 18973 on('slideChange', () => { 18974 if (initialized && swiper.params.cssMode) { 18975 setHistory(swiper.params.history.key, swiper.activeIndex); 18976 } 18977 }); 18978} 18979 18980/***/ }), 18981
vendor: 5,200 bytes, lines 18982-19127
18982/***/ "./node_modules/swiper/modules/keyboard/keyboard.js": 18983/*!**********************************************************!*\ 18984 !*** ./node_modules/swiper/modules/keyboard/keyboard.js ***! 18985 \**********************************************************/ 18986/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 18987 18988__webpack_require__.r(__webpack_exports__); 18989/* harmony export */ __webpack_require__.d(__webpack_exports__, { 18990/* harmony export */ "default": function() { return /* binding */ Keyboard; } 18991/* harmony export */ }); 18992/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 18993/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 18994/* eslint-disable consistent-return */ 18995 18996 18997function Keyboard({ 18998 swiper, 18999 extendParams, 19000 on, 19001 emit 19002}) { 19003 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 19004 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 19005 swiper.keyboard = { 19006 enabled: false 19007 }; 19008 extendParams({ 19009 keyboard: { 19010 enabled: false, 19011 onlyInViewport: true, 19012 pageUpDown: true 19013 } 19014 }); 19015 19016 function handle(event) { 19017 if (!swiper.enabled) return; 19018 const { 19019 rtlTranslate: rtl 19020 } = swiper; 19021 let e = event; 19022 if (e.originalEvent) e = e.originalEvent; // jquery fix 19023 19024 const kc = e.keyCode || e.charCode; 19025 const pageUpDown = swiper.params.keyboard.pageUpDown; 19026 const isPageUp = pageUpDown && kc === 33; 19027 const isPageDown = pageUpDown && kc === 34; 19028 const isArrowLeft = kc === 37; 19029 const isArrowRight = kc === 39; 19030 const isArrowUp = kc === 38; 19031 const isArrowDown = kc === 40; // Directions locks 19032 19033 if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) { 19034 return false; 19035 } 19036 19037 if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) { 19038 return false; 19039 } 19040 19041 if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { 19042 return undefined; 19043 } 19044 19045 if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) { 19046 return undefined; 19047 } 19048 19049 if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) { 19050 let inView = false; // Check that swiper should be inside of visible area of window 19051 19052 if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) { 19053 return undefined; 19054 } 19055 19056 const $el = swiper.$el; 19057 const swiperWidth = $el[0].clientWidth; 19058 const swiperHeight = $el[0].clientHeight; 19059 const windowWidth = window.innerWidth; 19060 const windowHeight = window.innerHeight; 19061 const swiperOffset = swiper.$el.offset(); 19062 if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft; 19063 const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]]; 19064 19065 for (let i = 0; i < swiperCoord.length; i += 1) { 19066 const point = swiperCoord[i]; 19067 19068 if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) { 19069 if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line 19070 19071 inView = true; 19072 } 19073 } 19074 19075 if (!inView) return undefined; 19076 } 19077 19078 if (swiper.isHorizontal()) { 19079 if (isPageUp || isPageDown || isArrowLeft || isArrowRight) { 19080 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 19081 } 19082 19083 if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext(); 19084 if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev(); 19085 } else { 19086 if (isPageUp || isPageDown || isArrowUp || isArrowDown) { 19087 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 19088 } 19089 19090 if (isPageDown || isArrowDown) swiper.slideNext(); 19091 if (isPageUp || isArrowUp) swiper.slidePrev(); 19092 } 19093 19094 emit('keyPress', kc); 19095 return undefined; 19096 } 19097 19098 function enable() { 19099 if (swiper.keyboard.enabled) return; 19100 (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(document).on('keydown', handle); 19101 swiper.keyboard.enabled = true; 19102 } 19103 19104 function disable() { 19105 if (!swiper.keyboard.enabled) return; 19106 (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(document).off('keydown', handle); 19107 swiper.keyboard.enabled = false; 19108 } 19109 19110 on('init', () => { 19111 if (swiper.params.keyboard.enabled) { 19112 enable(); 19113 } 19114 }); 19115 on('destroy', () => { 19116 if (swiper.keyboard.enabled) { 19117 disable(); 19118 } 19119 }); 19120 Object.assign(swiper.keyboard, { 19121 enable, 19122 disable 19123 }); 19124} 19125 19126/***/ }), 19127
vendor: 10,955 bytes, lines 19128-19429
19128/***/ "./node_modules/swiper/modules/lazy/lazy.js": 19129/*!**************************************************!*\ 19130 !*** ./node_modules/swiper/modules/lazy/lazy.js ***! 19131 \**************************************************/ 19132/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 19133 19134__webpack_require__.r(__webpack_exports__); 19135/* harmony export */ __webpack_require__.d(__webpack_exports__, { 19136/* harmony export */ "default": function() { return /* binding */ Lazy; } 19137/* harmony export */ }); 19138/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 19139/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 19140 19141 19142function Lazy({ 19143 swiper, 19144 extendParams, 19145 on, 19146 emit 19147}) { 19148 extendParams({ 19149 lazy: { 19150 checkInView: false, 19151 enabled: false, 19152 loadPrevNext: false, 19153 loadPrevNextAmount: 1, 19154 loadOnTransitionStart: false, 19155 scrollingElement: '', 19156 elementClass: 'swiper-lazy', 19157 loadingClass: 'swiper-lazy-loading', 19158 loadedClass: 'swiper-lazy-loaded', 19159 preloaderClass: 'swiper-lazy-preloader' 19160 } 19161 }); 19162 swiper.lazy = {}; 19163 let scrollHandlerAttached = false; 19164 let initialImageLoaded = false; 19165 19166 function loadInSlide(index, loadInDuplicate = true) { 19167 const params = swiper.params.lazy; 19168 if (typeof index === 'undefined') return; 19169 if (swiper.slides.length === 0) return; 19170 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 19171 const $slideEl = isVirtual ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index="${index}"]`) : swiper.slides.eq(index); 19172 const $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`); 19173 19174 if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) { 19175 $images.push($slideEl[0]); 19176 } 19177 19178 if ($images.length === 0) return; 19179 $images.each(imageEl => { 19180 const $imageEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(imageEl); 19181 $imageEl.addClass(params.loadingClass); 19182 const background = $imageEl.attr('data-background'); 19183 const src = $imageEl.attr('data-src'); 19184 const srcset = $imageEl.attr('data-srcset'); 19185 const sizes = $imageEl.attr('data-sizes'); 19186 const $pictureEl = $imageEl.parent('picture'); 19187 swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => { 19188 if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return; 19189 19190 if (background) { 19191 $imageEl.css('background-image', `url("${background}")`); 19192 $imageEl.removeAttr('data-background'); 19193 } else { 19194 if (srcset) { 19195 $imageEl.attr('srcset', srcset); 19196 $imageEl.removeAttr('data-srcset'); 19197 } 19198 19199 if (sizes) { 19200 $imageEl.attr('sizes', sizes); 19201 $imageEl.removeAttr('data-sizes'); 19202 } 19203 19204 if ($pictureEl.length) { 19205 $pictureEl.children('source').each(sourceEl => { 19206 const $source = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(sourceEl); 19207 19208 if ($source.attr('data-srcset')) { 19209 $source.attr('srcset', $source.attr('data-srcset')); 19210 $source.removeAttr('data-srcset'); 19211 } 19212 }); 19213 } 19214 19215 if (src) { 19216 $imageEl.attr('src', src); 19217 $imageEl.removeAttr('data-src'); 19218 } 19219 } 19220 19221 $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass); 19222 $slideEl.find(`.${params.preloaderClass}`).remove(); 19223 19224 if (swiper.params.loop && loadInDuplicate) { 19225 const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index'); 19226 19227 if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) { 19228 const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index="${slideOriginalIndex}"]:not(.${swiper.params.slideDuplicateClass})`); 19229 loadInSlide(originalSlide.index(), false); 19230 } else { 19231 const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index="${slideOriginalIndex}"]`); 19232 loadInSlide(duplicatedSlide.index(), false); 19233 } 19234 } 19235 19236 emit('lazyImageReady', $slideEl[0], $imageEl[0]); 19237 19238 if (swiper.params.autoHeight) { 19239 swiper.updateAutoHeight(); 19240 } 19241 }); 19242 emit('lazyImageLoad', $slideEl[0], $imageEl[0]); 19243 }); 19244 } 19245 19246 function load() { 19247 const { 19248 $wrapperEl, 19249 params: swiperParams, 19250 slides, 19251 activeIndex 19252 } = swiper; 19253 const isVirtual = swiper.virtual && swiperParams.virtual.enabled; 19254 const params = swiperParams.lazy; 19255 let slidesPerView = swiperParams.slidesPerView; 19256 19257 if (slidesPerView === 'auto') { 19258 slidesPerView = 0; 19259 } 19260 19261 function slideExist(index) { 19262 if (isVirtual) { 19263 if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index="${index}"]`).length) { 19264 return true; 19265 } 19266 } else if (slides[index]) return true; 19267 19268 return false; 19269 } 19270 19271 function slideIndex(slideEl) { 19272 if (isVirtual) { 19273 return (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(slideEl).attr('data-swiper-slide-index'); 19274 } 19275 19276 return (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(slideEl).index(); 19277 } 19278 19279 if (!initialImageLoaded) initialImageLoaded = true; 19280 19281 if (swiper.params.watchSlidesProgress) { 19282 $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each(slideEl => { 19283 const index = isVirtual ? (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(slideEl).attr('data-swiper-slide-index') : (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(slideEl).index(); 19284 loadInSlide(index); 19285 }); 19286 } else if (slidesPerView > 1) { 19287 for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) { 19288 if (slideExist(i)) loadInSlide(i); 19289 } 19290 } else { 19291 loadInSlide(activeIndex); 19292 } 19293 19294 if (params.loadPrevNext) { 19295 if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) { 19296 const amount = params.loadPrevNextAmount; 19297 const spv = Math.ceil(slidesPerView); 19298 const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length); 19299 const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides 19300 19301 for (let i = activeIndex + spv; i < maxIndex; i += 1) { 19302 if (slideExist(i)) loadInSlide(i); 19303 } // Prev Slides 19304 19305 19306 for (let i = minIndex; i < activeIndex; i += 1) { 19307 if (slideExist(i)) loadInSlide(i); 19308 } 19309 } else { 19310 const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`); 19311 if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide)); 19312 const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`); 19313 if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide)); 19314 } 19315 } 19316 } 19317 19318 function checkInViewOnLoad() { 19319 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 19320 if (!swiper || swiper.destroyed) return; 19321 const $scrollElement = swiper.params.lazy.scrollingElement ? (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(swiper.params.lazy.scrollingElement) : (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(window); 19322 const isWindow = $scrollElement[0] === window; 19323 const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth; 19324 const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight; 19325 const swiperOffset = swiper.$el.offset(); 19326 const { 19327 rtlTranslate: rtl 19328 } = swiper; 19329 let inView = false; 19330 if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft; 19331 const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]]; 19332 19333 for (let i = 0; i < swiperCoord.length; i += 1) { 19334 const point = swiperCoord[i]; 19335 19336 if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) { 19337 if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line 19338 19339 inView = true; 19340 } 19341 } 19342 19343 const passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? { 19344 passive: true, 19345 capture: false 19346 } : false; 19347 19348 if (inView) { 19349 load(); 19350 $scrollElement.off('scroll', checkInViewOnLoad, passiveListener); 19351 } else if (!scrollHandlerAttached) { 19352 scrollHandlerAttached = true; 19353 $scrollElement.on('scroll', checkInViewOnLoad, passiveListener); 19354 } 19355 } 19356 19357 on('beforeInit', () => { 19358 if (swiper.params.lazy.enabled && swiper.params.preloadImages) { 19359 swiper.params.preloadImages = false; 19360 } 19361 }); 19362 on('init', () => { 19363 if (swiper.params.lazy.enabled) { 19364 if (swiper.params.lazy.checkInView) { 19365 checkInViewOnLoad(); 19366 } else { 19367 load(); 19368 } 19369 } 19370 }); 19371 on('scroll', () => { 19372 if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.freeMode.sticky) { 19373 load(); 19374 } 19375 }); 19376 on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => { 19377 if (swiper.params.lazy.enabled) { 19378 if (swiper.params.lazy.checkInView) { 19379 checkInViewOnLoad(); 19380 } else { 19381 load(); 19382 } 19383 } 19384 }); 19385 on('transitionStart', () => { 19386 if (swiper.params.lazy.enabled) { 19387 if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded) { 19388 if (swiper.params.lazy.checkInView) { 19389 checkInViewOnLoad(); 19390 } else { 19391 load(); 19392 } 19393 } 19394 } 19395 }); 19396 on('transitionEnd', () => { 19397 if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) { 19398 if (swiper.params.lazy.checkInView) { 19399 checkInViewOnLoad(); 19400 } else { 19401 load(); 19402 } 19403 } 19404 }); 19405 on('slideChange', () => { 19406 const { 19407 lazy, 19408 cssMode, 19409 watchSlidesProgress, 19410 touchReleaseOnEdges, 19411 resistanceRatio 19412 } = swiper.params; 19413 19414 if (lazy.enabled && (cssMode || watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0))) { 19415 load(); 19416 } 19417 }); 19418 on('destroy', () => { 19419 if (!swiper.$el) return; 19420 swiper.$el.find(`.${swiper.params.lazy.loadingClass}`).removeClass(swiper.params.lazy.loadingClass); 19421 }); 19422 Object.assign(swiper.lazy, { 19423 load, 19424 loadInSlide 19425 }); 19426} 19427 19428/***/ }), 19429
vendor: 2,183 bytes, lines 19430-19463
19430/***/ "./node_modules/swiper/modules/manipulation/manipulation.js": 19431/*!******************************************************************!*\ 19432 !*** ./node_modules/swiper/modules/manipulation/manipulation.js ***! 19433 \******************************************************************/ 19434/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 19435 19436__webpack_require__.r(__webpack_exports__); 19437/* harmony export */ __webpack_require__.d(__webpack_exports__, { 19438/* harmony export */ "default": function() { return /* binding */ Manipulation; } 19439/* harmony export */ }); 19440/* harmony import */ var _methods_appendSlide_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./methods/appendSlide.js */ "./node_modules/swiper/modules/manipulation/methods/appendSlide.js"); 19441/* harmony import */ var _methods_prependSlide_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./methods/prependSlide.js */ "./node_modules/swiper/modules/manipulation/methods/prependSlide.js"); 19442/* harmony import */ var _methods_addSlide_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./methods/addSlide.js */ "./node_modules/swiper/modules/manipulation/methods/addSlide.js"); 19443/* harmony import */ var _methods_removeSlide_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./methods/removeSlide.js */ "./node_modules/swiper/modules/manipulation/methods/removeSlide.js"); 19444/* harmony import */ var _methods_removeAllSlides_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./methods/removeAllSlides.js */ "./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js"); 19445 19446 19447 19448 19449 19450function Manipulation({ 19451 swiper 19452}) { 19453 Object.assign(swiper, { 19454 appendSlide: _methods_appendSlide_js__WEBPACK_IMPORTED_MODULE_0__["default"].bind(swiper), 19455 prependSlide: _methods_prependSlide_js__WEBPACK_IMPORTED_MODULE_1__["default"].bind(swiper), 19456 addSlide: _methods_addSlide_js__WEBPACK_IMPORTED_MODULE_2__["default"].bind(swiper), 19457 removeSlide: _methods_removeSlide_js__WEBPACK_IMPORTED_MODULE_3__["default"].bind(swiper), 19458 removeAllSlides: _methods_removeAllSlides_js__WEBPACK_IMPORTED_MODULE_4__["default"].bind(swiper) 19459 }); 19460} 19461 19462/***/ }), 19463
vendor: 2,108 bytes, lines 19464-19540
19464/***/ "./node_modules/swiper/modules/manipulation/methods/addSlide.js": 19465/*!**********************************************************************!*\ 19466 !*** ./node_modules/swiper/modules/manipulation/methods/addSlide.js ***! 19467 \**********************************************************************/ 19468/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 19469 19470__webpack_require__.r(__webpack_exports__); 19471/* harmony export */ __webpack_require__.d(__webpack_exports__, { 19472/* harmony export */ "default": function() { return /* binding */ addSlide; } 19473/* harmony export */ }); 19474function addSlide(index, slides) { 19475 const swiper = this; 19476 const { 19477 $wrapperEl, 19478 params, 19479 activeIndex 19480 } = swiper; 19481 let activeIndexBuffer = activeIndex; 19482 19483 if (params.loop) { 19484 activeIndexBuffer -= swiper.loopedSlides; 19485 swiper.loopDestroy(); 19486 swiper.slides = $wrapperEl.children(`.${params.slideClass}`); 19487 } 19488 19489 const baseLength = swiper.slides.length; 19490 19491 if (index <= 0) { 19492 swiper.prependSlide(slides); 19493 return; 19494 } 19495 19496 if (index >= baseLength) { 19497 swiper.appendSlide(slides); 19498 return; 19499 } 19500 19501 let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer; 19502 const slidesBuffer = []; 19503 19504 for (let i = baseLength - 1; i >= index; i -= 1) { 19505 const currentSlide = swiper.slides.eq(i); 19506 currentSlide.remove(); 19507 slidesBuffer.unshift(currentSlide); 19508 } 19509 19510 if (typeof slides === 'object' && 'length' in slides) { 19511 for (let i = 0; i < slides.length; i += 1) { 19512 if (slides[i]) $wrapperEl.append(slides[i]); 19513 } 19514 19515 newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer; 19516 } else { 19517 $wrapperEl.append(slides); 19518 } 19519 19520 for (let i = 0; i < slidesBuffer.length; i += 1) { 19521 $wrapperEl.append(slidesBuffer[i]); 19522 } 19523 19524 if (params.loop) { 19525 swiper.loopCreate(); 19526 } 19527 19528 if (!params.observer) { 19529 swiper.update(); 19530 } 19531 19532 if (params.loop) { 19533 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 19534 } else { 19535 swiper.slideTo(newActiveIndex, 0, false); 19536 } 19537} 19538 19539/***/ }), 19540
vendor: 1,112 bytes, lines 19541-19580
19541/***/ "./node_modules/swiper/modules/manipulation/methods/appendSlide.js": 19542/*!*************************************************************************!*\ 19543 !*** ./node_modules/swiper/modules/manipulation/methods/appendSlide.js ***! 19544 \*************************************************************************/ 19545/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 19546 19547__webpack_require__.r(__webpack_exports__); 19548/* harmony export */ __webpack_require__.d(__webpack_exports__, { 19549/* harmony export */ "default": function() { return /* binding */ appendSlide; } 19550/* harmony export */ }); 19551function appendSlide(slides) { 19552 const swiper = this; 19553 const { 19554 $wrapperEl, 19555 params 19556 } = swiper; 19557 19558 if (params.loop) { 19559 swiper.loopDestroy(); 19560 } 19561 19562 if (typeof slides === 'object' && 'length' in slides) { 19563 for (let i = 0; i < slides.length; i += 1) { 19564 if (slides[i]) $wrapperEl.append(slides[i]); 19565 } 19566 } else { 19567 $wrapperEl.append(slides); 19568 } 19569 19570 if (params.loop) { 19571 swiper.loopCreate(); 19572 } 19573 19574 if (!params.observer) { 19575 swiper.update(); 19576 } 19577} 19578 19579/***/ }), 19580
vendor: 1,274 bytes, lines 19581-19627
19581/***/ "./node_modules/swiper/modules/manipulation/methods/prependSlide.js": 19582/*!**************************************************************************!*\ 19583 !*** ./node_modules/swiper/modules/manipulation/methods/prependSlide.js ***! 19584 \**************************************************************************/ 19585/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 19586 19587__webpack_require__.r(__webpack_exports__); 19588/* harmony export */ __webpack_require__.d(__webpack_exports__, { 19589/* harmony export */ "default": function() { return /* binding */ prependSlide; } 19590/* harmony export */ }); 19591function prependSlide(slides) { 19592 const swiper = this; 19593 const { 19594 params, 19595 $wrapperEl, 19596 activeIndex 19597 } = swiper; 19598 19599 if (params.loop) { 19600 swiper.loopDestroy(); 19601 } 19602 19603 let newActiveIndex = activeIndex + 1; 19604 19605 if (typeof slides === 'object' && 'length' in slides) { 19606 for (let i = 0; i < slides.length; i += 1) { 19607 if (slides[i]) $wrapperEl.prepend(slides[i]); 19608 } 19609 19610 newActiveIndex = activeIndex + slides.length; 19611 } else { 19612 $wrapperEl.prepend(slides); 19613 } 19614 19615 if (params.loop) { 19616 swiper.loopCreate(); 19617 } 19618 19619 if (!params.observer) { 19620 swiper.update(); 19621 } 19622 19623 swiper.slideTo(newActiveIndex, 0, false); 19624} 19625 19626/***/ }), 19627
vendor: 865 bytes, lines 19628-19650
19628/***/ "./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js": 19629/*!*****************************************************************************!*\ 19630 !*** ./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js ***! 19631 \*****************************************************************************/ 19632/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 19633 19634__webpack_require__.r(__webpack_exports__); 19635/* harmony export */ __webpack_require__.d(__webpack_exports__, { 19636/* harmony export */ "default": function() { return /* binding */ removeAllSlides; } 19637/* harmony export */ }); 19638function removeAllSlides() { 19639 const swiper = this; 19640 const slidesIndexes = []; 19641 19642 for (let i = 0; i < swiper.slides.length; i += 1) { 19643 slidesIndexes.push(i); 19644 } 19645 19646 swiper.removeSlide(slidesIndexes); 19647} 19648 19649/***/ }), 19650
vendor: 1,903 bytes, lines 19651-19710
19651/***/ "./node_modules/swiper/modules/manipulation/methods/removeSlide.js": 19652/*!*************************************************************************!*\ 19653 !*** ./node_modules/swiper/modules/manipulation/methods/removeSlide.js ***! 19654 \*************************************************************************/ 19655/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 19656 19657__webpack_require__.r(__webpack_exports__); 19658/* harmony export */ __webpack_require__.d(__webpack_exports__, { 19659/* harmony export */ "default": function() { return /* binding */ removeSlide; } 19660/* harmony export */ }); 19661function removeSlide(slidesIndexes) { 19662 const swiper = this; 19663 const { 19664 params, 19665 $wrapperEl, 19666 activeIndex 19667 } = swiper; 19668 let activeIndexBuffer = activeIndex; 19669 19670 if (params.loop) { 19671 activeIndexBuffer -= swiper.loopedSlides; 19672 swiper.loopDestroy(); 19673 swiper.slides = $wrapperEl.children(`.${params.slideClass}`); 19674 } 19675 19676 let newActiveIndex = activeIndexBuffer; 19677 let indexToRemove; 19678 19679 if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) { 19680 for (let i = 0; i < slidesIndexes.length; i += 1) { 19681 indexToRemove = slidesIndexes[i]; 19682 if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); 19683 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 19684 } 19685 19686 newActiveIndex = Math.max(newActiveIndex, 0); 19687 } else { 19688 indexToRemove = slidesIndexes; 19689 if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); 19690 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 19691 newActiveIndex = Math.max(newActiveIndex, 0); 19692 } 19693 19694 if (params.loop) { 19695 swiper.loopCreate(); 19696 } 19697 19698 if (!params.observer) { 19699 swiper.update(); 19700 } 19701 19702 if (params.loop) { 19703 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 19704 } else { 19705 swiper.slideTo(newActiveIndex, 0, false); 19706 } 19707} 19708 19709/***/ }), 19710
vendor: 15,588 bytes, lines 19711-20148
19711/***/ "./node_modules/swiper/modules/mousewheel/mousewheel.js": 19712/*!**************************************************************!*\ 19713 !*** ./node_modules/swiper/modules/mousewheel/mousewheel.js ***! 19714 \**************************************************************/ 19715/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 19716 19717__webpack_require__.r(__webpack_exports__); 19718/* harmony export */ __webpack_require__.d(__webpack_exports__, { 19719/* harmony export */ "default": function() { return /* binding */ Mousewheel; } 19720/* harmony export */ }); 19721/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 19722/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 19723/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 19724/* eslint-disable consistent-return */ 19725 19726 19727 19728function Mousewheel({ 19729 swiper, 19730 extendParams, 19731 on, 19732 emit 19733}) { 19734 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 19735 extendParams({ 19736 mousewheel: { 19737 enabled: false, 19738 releaseOnEdges: false, 19739 invert: false, 19740 forceToAxis: false, 19741 sensitivity: 1, 19742 eventsTarget: 'container', 19743 thresholdDelta: null, 19744 thresholdTime: null 19745 } 19746 }); 19747 swiper.mousewheel = { 19748 enabled: false 19749 }; 19750 let timeout; 19751 let lastScrollTime = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.now)(); 19752 let lastEventBeforeSnap; 19753 const recentWheelEvents = []; 19754 19755 function normalize(e) { 19756 // Reasonable defaults 19757 const PIXEL_STEP = 10; 19758 const LINE_HEIGHT = 40; 19759 const PAGE_HEIGHT = 800; 19760 let sX = 0; 19761 let sY = 0; // spinX, spinY 19762 19763 let pX = 0; 19764 let pY = 0; // pixelX, pixelY 19765 // Legacy 19766 19767 if ('detail' in e) { 19768 sY = e.detail; 19769 } 19770 19771 if ('wheelDelta' in e) { 19772 sY = -e.wheelDelta / 120; 19773 } 19774 19775 if ('wheelDeltaY' in e) { 19776 sY = -e.wheelDeltaY / 120; 19777 } 19778 19779 if ('wheelDeltaX' in e) { 19780 sX = -e.wheelDeltaX / 120; 19781 } // side scrolling on FF with DOMMouseScroll 19782 19783 19784 if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) { 19785 sX = sY; 19786 sY = 0; 19787 } 19788 19789 pX = sX * PIXEL_STEP; 19790 pY = sY * PIXEL_STEP; 19791 19792 if ('deltaY' in e) { 19793 pY = e.deltaY; 19794 } 19795 19796 if ('deltaX' in e) { 19797 pX = e.deltaX; 19798 } 19799 19800 if (e.shiftKey && !pX) { 19801 // if user scrolls with shift he wants horizontal scroll 19802 pX = pY; 19803 pY = 0; 19804 } 19805 19806 if ((pX || pY) && e.deltaMode) { 19807 if (e.deltaMode === 1) { 19808 // delta in LINE units 19809 pX *= LINE_HEIGHT; 19810 pY *= LINE_HEIGHT; 19811 } else { 19812 // delta in PAGE units 19813 pX *= PAGE_HEIGHT; 19814 pY *= PAGE_HEIGHT; 19815 } 19816 } // Fall-back if spin cannot be determined 19817 19818 19819 if (pX && !sX) { 19820 sX = pX < 1 ? -1 : 1; 19821 } 19822 19823 if (pY && !sY) { 19824 sY = pY < 1 ? -1 : 1; 19825 } 19826 19827 return { 19828 spinX: sX, 19829 spinY: sY, 19830 pixelX: pX, 19831 pixelY: pY 19832 }; 19833 } 19834 19835 function handleMouseEnter() { 19836 if (!swiper.enabled) return; 19837 swiper.mouseEntered = true; 19838 } 19839 19840 function handleMouseLeave() { 19841 if (!swiper.enabled) return; 19842 swiper.mouseEntered = false; 19843 } 19844 19845 function animateSlider(newEvent) { 19846 if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) { 19847 // Prevent if delta of wheel scroll delta is below configured threshold 19848 return false; 19849 } 19850 19851 if (swiper.params.mousewheel.thresholdTime && (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.now)() - lastScrollTime < swiper.params.mousewheel.thresholdTime) { 19852 // Prevent if time between scrolls is below configured threshold 19853 return false; 19854 } // If the movement is NOT big enough and 19855 // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider): 19856 // Don't go any further (avoid insignificant scroll movement). 19857 19858 19859 if (newEvent.delta >= 6 && (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.now)() - lastScrollTime < 60) { 19860 // Return false as a default 19861 return true; 19862 } // If user is scrolling towards the end: 19863 // If the slider hasn't hit the latest slide or 19864 // if the slider is a loop and 19865 // if the slider isn't moving right now: 19866 // Go to next slide and 19867 // emit a scroll event. 19868 // Else (the user is scrolling towards the beginning) and 19869 // if the slider hasn't hit the first slide or 19870 // if the slider is a loop and 19871 // if the slider isn't moving right now: 19872 // Go to prev slide and 19873 // emit a scroll event. 19874 19875 19876 if (newEvent.direction < 0) { 19877 if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) { 19878 swiper.slideNext(); 19879 emit('scroll', newEvent.raw); 19880 } 19881 } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) { 19882 swiper.slidePrev(); 19883 emit('scroll', newEvent.raw); 19884 } // If you got here is because an animation has been triggered so store the current time 19885 19886 19887 lastScrollTime = new window.Date().getTime(); // Return false as a default 19888 19889 return false; 19890 } 19891 19892 function releaseScroll(newEvent) { 19893 const params = swiper.params.mousewheel; 19894 19895 if (newEvent.direction < 0) { 19896 if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) { 19897 // Return true to animate scroll on edges 19898 return true; 19899 } 19900 } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) { 19901 // Return true to animate scroll on edges 19902 return true; 19903 } 19904 19905 return false; 19906 } 19907 19908 function handle(event) { 19909 let e = event; 19910 let disableParentSwiper = true; 19911 if (!swiper.enabled) return; 19912 const params = swiper.params.mousewheel; 19913 19914 if (swiper.params.cssMode) { 19915 e.preventDefault(); 19916 } 19917 19918 let target = swiper.$el; 19919 19920 if (swiper.params.mousewheel.eventsTarget !== 'container') { 19921 target = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(swiper.params.mousewheel.eventsTarget); 19922 } 19923 19924 if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true; 19925 if (e.originalEvent) e = e.originalEvent; // jquery fix 19926 19927 let delta = 0; 19928 const rtlFactor = swiper.rtlTranslate ? -1 : 1; 19929 const data = normalize(e); 19930 19931 if (params.forceToAxis) { 19932 if (swiper.isHorizontal()) { 19933 if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true; 19934 } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true; 19935 } else { 19936 delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY; 19937 } 19938 19939 if (delta === 0) return true; 19940 if (params.invert) delta = -delta; // Get the scroll positions 19941 19942 let positions = swiper.getTranslate() + delta * params.sensitivity; 19943 if (positions >= swiper.minTranslate()) positions = swiper.minTranslate(); 19944 if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // When loop is true: 19945 // the disableParentSwiper will be true. 19946 // When loop is false: 19947 // if the scroll positions is not on edge, 19948 // then the disableParentSwiper will be true. 19949 // if the scroll on edge positions, 19950 // then the disableParentSwiper will be false. 19951 19952 disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate()); 19953 if (disableParentSwiper && swiper.params.nested) e.stopPropagation(); 19954 19955 if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) { 19956 // Register the new event in a variable which stores the relevant data 19957 const newEvent = { 19958 time: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.now)(), 19959 delta: Math.abs(delta), 19960 direction: Math.sign(delta), 19961 raw: event 19962 }; // Keep the most recent events 19963 19964 if (recentWheelEvents.length >= 2) { 19965 recentWheelEvents.shift(); // only store the last N events 19966 } 19967 19968 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 19969 recentWheelEvents.push(newEvent); // If there is at least one previous recorded event: 19970 // If direction has changed or 19971 // if the scroll is quicker than the previous one: 19972 // Animate the slider. 19973 // Else (this is the first time the wheel is moved): 19974 // Animate the slider. 19975 19976 if (prevEvent) { 19977 if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) { 19978 animateSlider(newEvent); 19979 } 19980 } else { 19981 animateSlider(newEvent); 19982 } // If it's time to release the scroll: 19983 // Return now so you don't hit the preventDefault. 19984 19985 19986 if (releaseScroll(newEvent)) { 19987 return true; 19988 } 19989 } else { 19990 // Freemode or scrollContainer: 19991 // If we recently snapped after a momentum scroll, then ignore wheel events 19992 // to give time for the deceleration to finish. Stop ignoring after 500 msecs 19993 // or if it's a new scroll (larger delta or inverse sign as last event before 19994 // an end-of-momentum snap). 19995 const newEvent = { 19996 time: (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.now)(), 19997 delta: Math.abs(delta), 19998 direction: Math.sign(delta) 19999 }; 20000 const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction; 20001 20002 if (!ignoreWheelEvents) { 20003 lastEventBeforeSnap = undefined; 20004 20005 if (swiper.params.loop) { 20006 swiper.loopFix(); 20007 } 20008 20009 let position = swiper.getTranslate() + delta * params.sensitivity; 20010 const wasBeginning = swiper.isBeginning; 20011 const wasEnd = swiper.isEnd; 20012 if (position >= swiper.minTranslate()) position = swiper.minTranslate(); 20013 if (position <= swiper.maxTranslate()) position = swiper.maxTranslate(); 20014 swiper.setTransition(0); 20015 swiper.setTranslate(position); 20016 swiper.updateProgress(); 20017 swiper.updateActiveIndex(); 20018 swiper.updateSlidesClasses(); 20019 20020 if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) { 20021 swiper.updateSlidesClasses(); 20022 } 20023 20024 if (swiper.params.freeMode.sticky) { 20025 // When wheel scrolling starts with sticky (aka snap) enabled, then detect 20026 // the end of a momentum scroll by storing recent (N=15?) wheel events. 20027 // 1. do all N events have decreasing or same (absolute value) delta? 20028 // 2. did all N events arrive in the last M (M=500?) msecs? 20029 // 3. does the earliest event have an (absolute value) delta that's 20030 // at least P (P=1?) larger than the most recent event's delta? 20031 // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels? 20032 // If 1-4 are "yes" then we're near the end of a momentum scroll deceleration. 20033 // Snap immediately and ignore remaining wheel events in this scroll. 20034 // See comment above for "remaining wheel events in this scroll" determination. 20035 // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event. 20036 clearTimeout(timeout); 20037 timeout = undefined; 20038 20039 if (recentWheelEvents.length >= 15) { 20040 recentWheelEvents.shift(); // only store the last N events 20041 } 20042 20043 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 20044 const firstEvent = recentWheelEvents[0]; 20045 recentWheelEvents.push(newEvent); 20046 20047 if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) { 20048 // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log. 20049 recentWheelEvents.splice(0); 20050 } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) { 20051 // We're at the end of the deceleration of a momentum scroll, so there's no need 20052 // to wait for more events. Snap ASAP on the next tick. 20053 // Also, because there's some remaining momentum we'll bias the snap in the 20054 // direction of the ongoing scroll because it's better UX for the scroll to snap 20055 // in the same direction as the scroll instead of reversing to snap. Therefore, 20056 // if it's already scrolled more than 20% in the current direction, keep going. 20057 const snapToThreshold = delta > 0 ? 0.8 : 0.2; 20058 lastEventBeforeSnap = newEvent; 20059 recentWheelEvents.splice(0); 20060 timeout = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.nextTick)(() => { 20061 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 20062 }, 0); // no delay; move on next tick 20063 } 20064 20065 if (!timeout) { 20066 // if we get here, then we haven't detected the end of a momentum scroll, so 20067 // we'll consider a scroll "complete" when there haven't been any wheel events 20068 // for 500ms. 20069 timeout = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.nextTick)(() => { 20070 const snapToThreshold = 0.5; 20071 lastEventBeforeSnap = newEvent; 20072 recentWheelEvents.splice(0); 20073 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 20074 }, 500); 20075 } 20076 } // Emit event 20077 20078 20079 if (!ignoreWheelEvents) emit('scroll', e); // Stop autoplay 20080 20081 if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions 20082 20083 if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true; 20084 } 20085 } 20086 20087 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 20088 return false; 20089 } 20090 20091 function events(method) { 20092 let target = swiper.$el; 20093 20094 if (swiper.params.mousewheel.eventsTarget !== 'container') { 20095 target = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(swiper.params.mousewheel.eventsTarget); 20096 } 20097 20098 target[method]('mouseenter', handleMouseEnter); 20099 target[method]('mouseleave', handleMouseLeave); 20100 target[method]('wheel', handle); 20101 } 20102 20103 function enable() { 20104 if (swiper.params.cssMode) { 20105 swiper.wrapperEl.removeEventListener('wheel', handle); 20106 return true; 20107 } 20108 20109 if (swiper.mousewheel.enabled) return false; 20110 events('on'); 20111 swiper.mousewheel.enabled = true; 20112 return true; 20113 } 20114 20115 function disable() { 20116 if (swiper.params.cssMode) { 20117 swiper.wrapperEl.addEventListener(event, handle); 20118 return true; 20119 } 20120 20121 if (!swiper.mousewheel.enabled) return false; 20122 events('off'); 20123 swiper.mousewheel.enabled = false; 20124 return true; 20125 } 20126 20127 on('init', () => { 20128 if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) { 20129 disable(); 20130 } 20131 20132 if (swiper.params.mousewheel.enabled) enable(); 20133 }); 20134 on('destroy', () => { 20135 if (swiper.params.cssMode) { 20136 enable(); 20137 } 20138 20139 if (swiper.mousewheel.enabled) disable(); 20140 }); 20141 Object.assign(swiper.mousewheel, { 20142 enable, 20143 disable 20144 }); 20145} 20146 20147/***/ }), 20148
vendor: 6,305 bytes, lines 20149-20370
20149/***/ "./node_modules/swiper/modules/navigation/navigation.js": 20150/*!**************************************************************!*\ 20151 !*** ./node_modules/swiper/modules/navigation/navigation.js ***! 20152 \**************************************************************/ 20153/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 20154 20155__webpack_require__.r(__webpack_exports__); 20156/* harmony export */ __webpack_require__.d(__webpack_exports__, { 20157/* harmony export */ "default": function() { return /* binding */ Navigation; } 20158/* harmony export */ }); 20159/* 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"); 20160/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 20161 20162 20163function Navigation({ 20164 swiper, 20165 extendParams, 20166 on, 20167 emit 20168}) { 20169 extendParams({ 20170 navigation: { 20171 nextEl: null, 20172 prevEl: null, 20173 hideOnClick: false, 20174 disabledClass: 'swiper-button-disabled', 20175 hiddenClass: 'swiper-button-hidden', 20176 lockClass: 'swiper-button-lock', 20177 navigationDisabledClass: 'swiper-navigation-disabled' 20178 } 20179 }); 20180 swiper.navigation = { 20181 nextEl: null, 20182 $nextEl: null, 20183 prevEl: null, 20184 $prevEl: null 20185 }; 20186 20187 function getEl(el) { 20188 let $el; 20189 20190 if (el) { 20191 $el = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(el); 20192 20193 if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) { 20194 $el = swiper.$el.find(el); 20195 } 20196 } 20197 20198 return $el; 20199 } 20200 20201 function toggleEl($el, disabled) { 20202 const params = swiper.params.navigation; 20203 20204 if ($el && $el.length > 0) { 20205 $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass); 20206 if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled; 20207 20208 if (swiper.params.watchOverflow && swiper.enabled) { 20209 $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); 20210 } 20211 } 20212 } 20213 20214 function update() { 20215 // Update Navigation Buttons 20216 if (swiper.params.loop) return; 20217 const { 20218 $nextEl, 20219 $prevEl 20220 } = swiper.navigation; 20221 toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind); 20222 toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind); 20223 } 20224 20225 function onPrevClick(e) { 20226 e.preventDefault(); 20227 if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return; 20228 swiper.slidePrev(); 20229 emit('navigationPrev'); 20230 } 20231 20232 function onNextClick(e) { 20233 e.preventDefault(); 20234 if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return; 20235 swiper.slideNext(); 20236 emit('navigationNext'); 20237 } 20238 20239 function init() { 20240 const params = swiper.params.navigation; 20241 swiper.params.navigation = (0,_shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_0__["default"])(swiper, swiper.originalParams.navigation, swiper.params.navigation, { 20242 nextEl: 'swiper-button-next', 20243 prevEl: 'swiper-button-prev' 20244 }); 20245 if (!(params.nextEl || params.prevEl)) return; 20246 const $nextEl = getEl(params.nextEl); 20247 const $prevEl = getEl(params.prevEl); 20248 20249 if ($nextEl && $nextEl.length > 0) { 20250 $nextEl.on('click', onNextClick); 20251 } 20252 20253 if ($prevEl && $prevEl.length > 0) { 20254 $prevEl.on('click', onPrevClick); 20255 } 20256 20257 Object.assign(swiper.navigation, { 20258 $nextEl, 20259 nextEl: $nextEl && $nextEl[0], 20260 $prevEl, 20261 prevEl: $prevEl && $prevEl[0] 20262 }); 20263 20264 if (!swiper.enabled) { 20265 if ($nextEl) $nextEl.addClass(params.lockClass); 20266 if ($prevEl) $prevEl.addClass(params.lockClass); 20267 } 20268 } 20269 20270 function destroy() { 20271 const { 20272 $nextEl, 20273 $prevEl 20274 } = swiper.navigation; 20275 20276 if ($nextEl && $nextEl.length) { 20277 $nextEl.off('click', onNextClick); 20278 $nextEl.removeClass(swiper.params.navigation.disabledClass); 20279 } 20280 20281 if ($prevEl && $prevEl.length) { 20282 $prevEl.off('click', onPrevClick); 20283 $prevEl.removeClass(swiper.params.navigation.disabledClass); 20284 } 20285 } 20286 20287 on('init', () => { 20288 if (swiper.params.navigation.enabled === false) { 20289 // eslint-disable-next-line 20290 disable(); 20291 } else { 20292 init(); 20293 update(); 20294 } 20295 }); 20296 on('toEdge fromEdge lock unlock', () => { 20297 update(); 20298 }); 20299 on('destroy', () => { 20300 destroy(); 20301 }); 20302 on('enable disable', () => { 20303 const { 20304 $nextEl, 20305 $prevEl 20306 } = swiper.navigation; 20307 20308 if ($nextEl) { 20309 $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass); 20310 } 20311 20312 if ($prevEl) { 20313 $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass); 20314 } 20315 }); 20316 on('click', (_s, e) => { 20317 const { 20318 $nextEl, 20319 $prevEl 20320 } = swiper.navigation; 20321 const targetEl = e.target; 20322 20323 if (swiper.params.navigation.hideOnClick && !(0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetEl).is($prevEl) && !(0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(targetEl).is($nextEl)) { 20324 if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return; 20325 let isHidden; 20326 20327 if ($nextEl) { 20328 isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass); 20329 } else if ($prevEl) { 20330 isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass); 20331 } 20332 20333 if (isHidden === true) { 20334 emit('navigationShow'); 20335 } else { 20336 emit('navigationHide'); 20337 } 20338 20339 if ($nextEl) { 20340 $nextEl.toggleClass(swiper.params.navigation.hiddenClass); 20341 } 20342 20343 if ($prevEl) { 20344 $prevEl.toggleClass(swiper.params.navigation.hiddenClass); 20345 } 20346 } 20347 }); 20348 20349 const enable = () => { 20350 swiper.$el.removeClass(swiper.params.navigation.navigationDisabledClass); 20351 init(); 20352 update(); 20353 }; 20354 20355 const disable = () => { 20356 swiper.$el.addClass(swiper.params.navigation.navigationDisabledClass); 20357 destroy(); 20358 }; 20359 20360 Object.assign(swiper.navigation, { 20361 enable, 20362 disable, 20363 update, 20364 init, 20365 destroy 20366 }); 20367} 20368 20369/***/ }), 20370
vendor: 16,166 bytes, lines 20371-20827
20371/***/ "./node_modules/swiper/modules/pagination/pagination.js": 20372/*!**************************************************************!*\ 20373 !*** ./node_modules/swiper/modules/pagination/pagination.js ***! 20374 \**************************************************************/ 20375/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 20376 20377__webpack_require__.r(__webpack_exports__); 20378/* harmony export */ __webpack_require__.d(__webpack_exports__, { 20379/* harmony export */ "default": function() { return /* binding */ Pagination; } 20380/* harmony export */ }); 20381/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 20382/* harmony import */ var _shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/classes-to-selector.js */ "./node_modules/swiper/shared/classes-to-selector.js"); 20383/* 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"); 20384 20385 20386 20387function Pagination({ 20388 swiper, 20389 extendParams, 20390 on, 20391 emit 20392}) { 20393 const pfx = 'swiper-pagination'; 20394 extendParams({ 20395 pagination: { 20396 el: null, 20397 bulletElement: 'span', 20398 clickable: false, 20399 hideOnClick: false, 20400 renderBullet: null, 20401 renderProgressbar: null, 20402 renderFraction: null, 20403 renderCustom: null, 20404 progressbarOpposite: false, 20405 type: 'bullets', 20406 // 'bullets' or 'progressbar' or 'fraction' or 'custom' 20407 dynamicBullets: false, 20408 dynamicMainBullets: 1, 20409 formatFractionCurrent: number => number, 20410 formatFractionTotal: number => number, 20411 bulletClass: `${pfx}-bullet`, 20412 bulletActiveClass: `${pfx}-bullet-active`, 20413 modifierClass: `${pfx}-`, 20414 currentClass: `${pfx}-current`, 20415 totalClass: `${pfx}-total`, 20416 hiddenClass: `${pfx}-hidden`, 20417 progressbarFillClass: `${pfx}-progressbar-fill`, 20418 progressbarOppositeClass: `${pfx}-progressbar-opposite`, 20419 clickableClass: `${pfx}-clickable`, 20420 lockClass: `${pfx}-lock`, 20421 horizontalClass: `${pfx}-horizontal`, 20422 verticalClass: `${pfx}-vertical`, 20423 paginationDisabledClass: `${pfx}-disabled` 20424 } 20425 }); 20426 swiper.pagination = { 20427 el: null, 20428 $el: null, 20429 bullets: [] 20430 }; 20431 let bulletSize; 20432 let dynamicBulletIndex = 0; 20433 20434 function isPaginationDisabled() { 20435 return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0; 20436 } 20437 20438 function setSideBullets($bulletEl, position) { 20439 const { 20440 bulletActiveClass 20441 } = swiper.params.pagination; 20442 $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`); 20443 } 20444 20445 function update() { 20446 // Render || Update Pagination bullets/items 20447 const rtl = swiper.rtl; 20448 const params = swiper.params.pagination; 20449 if (isPaginationDisabled()) return; 20450 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 20451 const $el = swiper.pagination.$el; // Current/Total 20452 20453 let current; 20454 const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 20455 20456 if (swiper.params.loop) { 20457 current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup); 20458 20459 if (current > slidesLength - 1 - swiper.loopedSlides * 2) { 20460 current -= slidesLength - swiper.loopedSlides * 2; 20461 } 20462 20463 if (current > total - 1) current -= total; 20464 if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current; 20465 } else if (typeof swiper.snapIndex !== 'undefined') { 20466 current = swiper.snapIndex; 20467 } else { 20468 current = swiper.activeIndex || 0; 20469 } // Types 20470 20471 20472 if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) { 20473 const bullets = swiper.pagination.bullets; 20474 let firstIndex; 20475 let lastIndex; 20476 let midIndex; 20477 20478 if (params.dynamicBullets) { 20479 bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true); 20480 $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`); 20481 20482 if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) { 20483 dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0); 20484 20485 if (dynamicBulletIndex > params.dynamicMainBullets - 1) { 20486 dynamicBulletIndex = params.dynamicMainBullets - 1; 20487 } else if (dynamicBulletIndex < 0) { 20488 dynamicBulletIndex = 0; 20489 } 20490 } 20491 20492 firstIndex = Math.max(current - dynamicBulletIndex, 0); 20493 lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1); 20494 midIndex = (lastIndex + firstIndex) / 2; 20495 } 20496 20497 bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' ')); 20498 20499 if ($el.length > 1) { 20500 bullets.each(bullet => { 20501 const $bullet = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(bullet); 20502 const bulletIndex = $bullet.index(); 20503 20504 if (bulletIndex === current) { 20505 $bullet.addClass(params.bulletActiveClass); 20506 } 20507 20508 if (params.dynamicBullets) { 20509 if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) { 20510 $bullet.addClass(`${params.bulletActiveClass}-main`); 20511 } 20512 20513 if (bulletIndex === firstIndex) { 20514 setSideBullets($bullet, 'prev'); 20515 } 20516 20517 if (bulletIndex === lastIndex) { 20518 setSideBullets($bullet, 'next'); 20519 } 20520 } 20521 }); 20522 } else { 20523 const $bullet = bullets.eq(current); 20524 const bulletIndex = $bullet.index(); 20525 $bullet.addClass(params.bulletActiveClass); 20526 20527 if (params.dynamicBullets) { 20528 const $firstDisplayedBullet = bullets.eq(firstIndex); 20529 const $lastDisplayedBullet = bullets.eq(lastIndex); 20530 20531 for (let i = firstIndex; i <= lastIndex; i += 1) { 20532 bullets.eq(i).addClass(`${params.bulletActiveClass}-main`); 20533 } 20534 20535 if (swiper.params.loop) { 20536 if (bulletIndex >= bullets.length) { 20537 for (let i = params.dynamicMainBullets; i >= 0; i -= 1) { 20538 bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`); 20539 } 20540 20541 bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`); 20542 } else { 20543 setSideBullets($firstDisplayedBullet, 'prev'); 20544 setSideBullets($lastDisplayedBullet, 'next'); 20545 } 20546 } else { 20547 setSideBullets($firstDisplayedBullet, 'prev'); 20548 setSideBullets($lastDisplayedBullet, 'next'); 20549 } 20550 } 20551 } 20552 20553 if (params.dynamicBullets) { 20554 const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4); 20555 const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize; 20556 const offsetProp = rtl ? 'right' : 'left'; 20557 bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`); 20558 } 20559 } 20560 20561 if (params.type === 'fraction') { 20562 $el.find((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params.currentClass)).text(params.formatFractionCurrent(current + 1)); 20563 $el.find((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params.totalClass)).text(params.formatFractionTotal(total)); 20564 } 20565 20566 if (params.type === 'progressbar') { 20567 let progressbarDirection; 20568 20569 if (params.progressbarOpposite) { 20570 progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal'; 20571 } else { 20572 progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical'; 20573 } 20574 20575 const scale = (current + 1) / total; 20576 let scaleX = 1; 20577 let scaleY = 1; 20578 20579 if (progressbarDirection === 'horizontal') { 20580 scaleX = scale; 20581 } else { 20582 scaleY = scale; 20583 } 20584 20585 $el.find((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed); 20586 } 20587 20588 if (params.type === 'custom' && params.renderCustom) { 20589 $el.html(params.renderCustom(swiper, current + 1, total)); 20590 emit('paginationRender', $el[0]); 20591 } else { 20592 emit('paginationUpdate', $el[0]); 20593 } 20594 20595 if (swiper.params.watchOverflow && swiper.enabled) { 20596 $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); 20597 } 20598 } 20599 20600 function render() { 20601 // Render Container 20602 const params = swiper.params.pagination; 20603 if (isPaginationDisabled()) return; 20604 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 20605 const $el = swiper.pagination.$el; 20606 let paginationHTML = ''; 20607 20608 if (params.type === 'bullets') { 20609 let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 20610 20611 if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) { 20612 numberOfBullets = slidesLength; 20613 } 20614 20615 for (let i = 0; i < numberOfBullets; i += 1) { 20616 if (params.renderBullet) { 20617 paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass); 20618 } else { 20619 paginationHTML += `<${params.bulletElement} class="${params.bulletClass}"></${params.bulletElement}>`; 20620 } 20621 } 20622 20623 $el.html(paginationHTML); 20624 swiper.pagination.bullets = $el.find((0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params.bulletClass)); 20625 } 20626 20627 if (params.type === 'fraction') { 20628 if (params.renderFraction) { 20629 paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass); 20630 } else { 20631 paginationHTML = `<span class="${params.currentClass}"></span>` + ' / ' + `<span class="${params.totalClass}"></span>`; 20632 } 20633 20634 $el.html(paginationHTML); 20635 } 20636 20637 if (params.type === 'progressbar') { 20638 if (params.renderProgressbar) { 20639 paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass); 20640 } else { 20641 paginationHTML = `<span class="${params.progressbarFillClass}"></span>`; 20642 } 20643 20644 $el.html(paginationHTML); 20645 } 20646 20647 if (params.type !== 'custom') { 20648 emit('paginationRender', swiper.pagination.$el[0]); 20649 } 20650 } 20651 20652 function init() { 20653 swiper.params.pagination = (0,_shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_2__["default"])(swiper, swiper.originalParams.pagination, swiper.params.pagination, { 20654 el: 'swiper-pagination' 20655 }); 20656 const params = swiper.params.pagination; 20657 if (!params.el) return; 20658 let $el = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params.el); 20659 if ($el.length === 0) return; 20660 20661 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) { 20662 $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper 20663 20664 if ($el.length > 1) { 20665 $el = $el.filter(el => { 20666 if ((0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(el).parents('.swiper')[0] !== swiper.el) return false; 20667 return true; 20668 }); 20669 } 20670 } 20671 20672 if (params.type === 'bullets' && params.clickable) { 20673 $el.addClass(params.clickableClass); 20674 } 20675 20676 $el.addClass(params.modifierClass + params.type); 20677 $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 20678 20679 if (params.type === 'bullets' && params.dynamicBullets) { 20680 $el.addClass(`${params.modifierClass}${params.type}-dynamic`); 20681 dynamicBulletIndex = 0; 20682 20683 if (params.dynamicMainBullets < 1) { 20684 params.dynamicMainBullets = 1; 20685 } 20686 } 20687 20688 if (params.type === 'progressbar' && params.progressbarOpposite) { 20689 $el.addClass(params.progressbarOppositeClass); 20690 } 20691 20692 if (params.clickable) { 20693 $el.on('click', (0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params.bulletClass), function onClick(e) { 20694 e.preventDefault(); 20695 let index = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(this).index() * swiper.params.slidesPerGroup; 20696 if (swiper.params.loop) index += swiper.loopedSlides; 20697 swiper.slideTo(index); 20698 }); 20699 } 20700 20701 Object.assign(swiper.pagination, { 20702 $el, 20703 el: $el[0] 20704 }); 20705 20706 if (!swiper.enabled) { 20707 $el.addClass(params.lockClass); 20708 } 20709 } 20710 20711 function destroy() { 20712 const params = swiper.params.pagination; 20713 if (isPaginationDisabled()) return; 20714 const $el = swiper.pagination.$el; 20715 $el.removeClass(params.hiddenClass); 20716 $el.removeClass(params.modifierClass + params.type); 20717 $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 20718 if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass); 20719 20720 if (params.clickable) { 20721 $el.off('click', (0,_shared_classes_to_selector_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params.bulletClass)); 20722 } 20723 } 20724 20725 on('init', () => { 20726 if (swiper.params.pagination.enabled === false) { 20727 // eslint-disable-next-line 20728 disable(); 20729 } else { 20730 init(); 20731 render(); 20732 update(); 20733 } 20734 }); 20735 on('activeIndexChange', () => { 20736 if (swiper.params.loop) { 20737 update(); 20738 } else if (typeof swiper.snapIndex === 'undefined') { 20739 update(); 20740 } 20741 }); 20742 on('snapIndexChange', () => { 20743 if (!swiper.params.loop) { 20744 update(); 20745 } 20746 }); 20747 on('slidesLengthChange', () => { 20748 if (swiper.params.loop) { 20749 render(); 20750 update(); 20751 } 20752 }); 20753 on('snapGridLengthChange', () => { 20754 if (!swiper.params.loop) { 20755 render(); 20756 update(); 20757 } 20758 }); 20759 on('destroy', () => { 20760 destroy(); 20761 }); 20762 on('enable disable', () => { 20763 const { 20764 $el 20765 } = swiper.pagination; 20766 20767 if ($el) { 20768 $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass); 20769 } 20770 }); 20771 on('lock unlock', () => { 20772 update(); 20773 }); 20774 on('click', (_s, e) => { 20775 const targetEl = e.target; 20776 const { 20777 $el 20778 } = swiper.pagination; 20779 20780 if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el && $el.length > 0 && !(0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(targetEl).hasClass(swiper.params.pagination.bulletClass)) { 20781 if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return; 20782 const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass); 20783 20784 if (isHidden === true) { 20785 emit('paginationShow'); 20786 } else { 20787 emit('paginationHide'); 20788 } 20789 20790 $el.toggleClass(swiper.params.pagination.hiddenClass); 20791 } 20792 }); 20793 20794 const enable = () => { 20795 swiper.$el.removeClass(swiper.params.pagination.paginationDisabledClass); 20796 20797 if (swiper.pagination.$el) { 20798 swiper.pagination.$el.removeClass(swiper.params.pagination.paginationDisabledClass); 20799 } 20800 20801 init(); 20802 render(); 20803 update(); 20804 }; 20805 20806 const disable = () => { 20807 swiper.$el.addClass(swiper.params.pagination.paginationDisabledClass); 20808 20809 if (swiper.pagination.$el) { 20810 swiper.pagination.$el.addClass(swiper.params.pagination.paginationDisabledClass); 20811 } 20812 20813 destroy(); 20814 }; 20815 20816 Object.assign(swiper.pagination, { 20817 enable, 20818 disable, 20819 render, 20820 update, 20821 init, 20822 destroy 20823 }); 20824} 20825 20826/***/ }), 20827
vendor: 4,322 bytes, lines 20828-20955
20828/***/ "./node_modules/swiper/modules/parallax/parallax.js": 20829/*!**********************************************************!*\ 20830 !*** ./node_modules/swiper/modules/parallax/parallax.js ***! 20831 \**********************************************************/ 20832/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 20833 20834__webpack_require__.r(__webpack_exports__); 20835/* harmony export */ __webpack_require__.d(__webpack_exports__, { 20836/* harmony export */ "default": function() { return /* binding */ Parallax; } 20837/* harmony export */ }); 20838/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 20839 20840function Parallax({ 20841 swiper, 20842 extendParams, 20843 on 20844}) { 20845 extendParams({ 20846 parallax: { 20847 enabled: false 20848 } 20849 }); 20850 20851 const setTransform = (el, progress) => { 20852 const { 20853 rtl 20854 } = swiper; 20855 const $el = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(el); 20856 const rtlFactor = rtl ? -1 : 1; 20857 const p = $el.attr('data-swiper-parallax') || '0'; 20858 let x = $el.attr('data-swiper-parallax-x'); 20859 let y = $el.attr('data-swiper-parallax-y'); 20860 const scale = $el.attr('data-swiper-parallax-scale'); 20861 const opacity = $el.attr('data-swiper-parallax-opacity'); 20862 20863 if (x || y) { 20864 x = x || '0'; 20865 y = y || '0'; 20866 } else if (swiper.isHorizontal()) { 20867 x = p; 20868 y = '0'; 20869 } else { 20870 y = p; 20871 x = '0'; 20872 } 20873 20874 if (x.indexOf('%') >= 0) { 20875 x = `${parseInt(x, 10) * progress * rtlFactor}%`; 20876 } else { 20877 x = `${x * progress * rtlFactor}px`; 20878 } 20879 20880 if (y.indexOf('%') >= 0) { 20881 y = `${parseInt(y, 10) * progress}%`; 20882 } else { 20883 y = `${y * progress}px`; 20884 } 20885 20886 if (typeof opacity !== 'undefined' && opacity !== null) { 20887 const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress)); 20888 $el[0].style.opacity = currentOpacity; 20889 } 20890 20891 if (typeof scale === 'undefined' || scale === null) { 20892 $el.transform(`translate3d(${x}, ${y}, 0px)`); 20893 } else { 20894 const currentScale = scale - (scale - 1) * (1 - Math.abs(progress)); 20895 $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`); 20896 } 20897 }; 20898 20899 const setTranslate = () => { 20900 const { 20901 $el, 20902 slides, 20903 progress, 20904 snapGrid 20905 } = swiper; 20906 $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => { 20907 setTransform(el, progress); 20908 }); 20909 slides.each((slideEl, slideIndex) => { 20910 let slideProgress = slideEl.progress; 20911 20912 if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') { 20913 slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1); 20914 } 20915 20916 slideProgress = Math.min(Math.max(slideProgress, -1), 1); 20917 (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => { 20918 setTransform(el, slideProgress); 20919 }); 20920 }); 20921 }; 20922 20923 const setTransition = (duration = swiper.params.speed) => { 20924 const { 20925 $el 20926 } = swiper; 20927 $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => { 20928 const $parallaxEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(parallaxEl); 20929 let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration; 20930 if (duration === 0) parallaxDuration = 0; 20931 $parallaxEl.transition(parallaxDuration); 20932 }); 20933 }; 20934 20935 on('beforeInit', () => { 20936 if (!swiper.params.parallax.enabled) return; 20937 swiper.params.watchSlidesProgress = true; 20938 swiper.originalParams.watchSlidesProgress = true; 20939 }); 20940 on('init', () => { 20941 if (!swiper.params.parallax.enabled) return; 20942 setTranslate(); 20943 }); 20944 on('setTranslate', () => { 20945 if (!swiper.params.parallax.enabled) return; 20946 setTranslate(); 20947 }); 20948 on('setTransition', (_swiper, duration) => { 20949 if (!swiper.params.parallax.enabled) return; 20950 setTransition(duration); 20951 }); 20952} 20953 20954/***/ }), 20955
vendor: 11,772 bytes, lines 20956-21375
20956/***/ "./node_modules/swiper/modules/scrollbar/scrollbar.js": 20957/*!************************************************************!*\ 20958 !*** ./node_modules/swiper/modules/scrollbar/scrollbar.js ***! 20959 \************************************************************/ 20960/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 20961 20962__webpack_require__.r(__webpack_exports__); 20963/* harmony export */ __webpack_require__.d(__webpack_exports__, { 20964/* harmony export */ "default": function() { return /* binding */ Scrollbar; } 20965/* harmony export */ }); 20966/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 20967/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 20968/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 20969/* harmony import */ var _shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../shared/create-element-if-not-defined.js */ "./node_modules/swiper/shared/create-element-if-not-defined.js"); 20970 20971 20972 20973 20974function Scrollbar({ 20975 swiper, 20976 extendParams, 20977 on, 20978 emit 20979}) { 20980 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 20981 let isTouched = false; 20982 let timeout = null; 20983 let dragTimeout = null; 20984 let dragStartPos; 20985 let dragSize; 20986 let trackSize; 20987 let divider; 20988 extendParams({ 20989 scrollbar: { 20990 el: null, 20991 dragSize: 'auto', 20992 hide: false, 20993 draggable: false, 20994 snapOnRelease: true, 20995 lockClass: 'swiper-scrollbar-lock', 20996 dragClass: 'swiper-scrollbar-drag', 20997 scrollbarDisabledClass: 'swiper-scrollbar-disabled', 20998 horizontalClass: `swiper-scrollbar-horizontal`, 20999 verticalClass: `swiper-scrollbar-vertical` 21000 } 21001 }); 21002 swiper.scrollbar = { 21003 el: null, 21004 dragEl: null, 21005 $el: null, 21006 $dragEl: null 21007 }; 21008 21009 function setTranslate() { 21010 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 21011 const { 21012 scrollbar, 21013 rtlTranslate: rtl, 21014 progress 21015 } = swiper; 21016 const { 21017 $dragEl, 21018 $el 21019 } = scrollbar; 21020 const params = swiper.params.scrollbar; 21021 let newSize = dragSize; 21022 let newPos = (trackSize - dragSize) * progress; 21023 21024 if (rtl) { 21025 newPos = -newPos; 21026 21027 if (newPos > 0) { 21028 newSize = dragSize - newPos; 21029 newPos = 0; 21030 } else if (-newPos + dragSize > trackSize) { 21031 newSize = trackSize + newPos; 21032 } 21033 } else if (newPos < 0) { 21034 newSize = dragSize + newPos; 21035 newPos = 0; 21036 } else if (newPos + dragSize > trackSize) { 21037 newSize = trackSize - newPos; 21038 } 21039 21040 if (swiper.isHorizontal()) { 21041 $dragEl.transform(`translate3d(${newPos}px, 0, 0)`); 21042 $dragEl[0].style.width = `${newSize}px`; 21043 } else { 21044 $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`); 21045 $dragEl[0].style.height = `${newSize}px`; 21046 } 21047 21048 if (params.hide) { 21049 clearTimeout(timeout); 21050 $el[0].style.opacity = 1; 21051 timeout = setTimeout(() => { 21052 $el[0].style.opacity = 0; 21053 $el.transition(400); 21054 }, 1000); 21055 } 21056 } 21057 21058 function setTransition(duration) { 21059 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 21060 swiper.scrollbar.$dragEl.transition(duration); 21061 } 21062 21063 function updateSize() { 21064 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 21065 const { 21066 scrollbar 21067 } = swiper; 21068 const { 21069 $dragEl, 21070 $el 21071 } = scrollbar; 21072 $dragEl[0].style.width = ''; 21073 $dragEl[0].style.height = ''; 21074 trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight; 21075 divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0)); 21076 21077 if (swiper.params.scrollbar.dragSize === 'auto') { 21078 dragSize = trackSize * divider; 21079 } else { 21080 dragSize = parseInt(swiper.params.scrollbar.dragSize, 10); 21081 } 21082 21083 if (swiper.isHorizontal()) { 21084 $dragEl[0].style.width = `${dragSize}px`; 21085 } else { 21086 $dragEl[0].style.height = `${dragSize}px`; 21087 } 21088 21089 if (divider >= 1) { 21090 $el[0].style.display = 'none'; 21091 } else { 21092 $el[0].style.display = ''; 21093 } 21094 21095 if (swiper.params.scrollbar.hide) { 21096 $el[0].style.opacity = 0; 21097 } 21098 21099 if (swiper.params.watchOverflow && swiper.enabled) { 21100 scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass); 21101 } 21102 } 21103 21104 function getPointerPosition(e) { 21105 if (swiper.isHorizontal()) { 21106 return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX; 21107 } 21108 21109 return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY; 21110 } 21111 21112 function setDragPosition(e) { 21113 const { 21114 scrollbar, 21115 rtlTranslate: rtl 21116 } = swiper; 21117 const { 21118 $el 21119 } = scrollbar; 21120 let positionRatio; 21121 positionRatio = (getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize); 21122 positionRatio = Math.max(Math.min(positionRatio, 1), 0); 21123 21124 if (rtl) { 21125 positionRatio = 1 - positionRatio; 21126 } 21127 21128 const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio; 21129 swiper.updateProgress(position); 21130 swiper.setTranslate(position); 21131 swiper.updateActiveIndex(); 21132 swiper.updateSlidesClasses(); 21133 } 21134 21135 function onDragStart(e) { 21136 const params = swiper.params.scrollbar; 21137 const { 21138 scrollbar, 21139 $wrapperEl 21140 } = swiper; 21141 const { 21142 $el, 21143 $dragEl 21144 } = scrollbar; 21145 isTouched = true; 21146 dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null; 21147 e.preventDefault(); 21148 e.stopPropagation(); 21149 $wrapperEl.transition(100); 21150 $dragEl.transition(100); 21151 setDragPosition(e); 21152 clearTimeout(dragTimeout); 21153 $el.transition(0); 21154 21155 if (params.hide) { 21156 $el.css('opacity', 1); 21157 } 21158 21159 if (swiper.params.cssMode) { 21160 swiper.$wrapperEl.css('scroll-snap-type', 'none'); 21161 } 21162 21163 emit('scrollbarDragStart', e); 21164 } 21165 21166 function onDragMove(e) { 21167 const { 21168 scrollbar, 21169 $wrapperEl 21170 } = swiper; 21171 const { 21172 $el, 21173 $dragEl 21174 } = scrollbar; 21175 if (!isTouched) return; 21176 if (e.preventDefault) e.preventDefault();else e.returnValue = false; 21177 setDragPosition(e); 21178 $wrapperEl.transition(0); 21179 $el.transition(0); 21180 $dragEl.transition(0); 21181 emit('scrollbarDragMove', e); 21182 } 21183 21184 function onDragEnd(e) { 21185 const params = swiper.params.scrollbar; 21186 const { 21187 scrollbar, 21188 $wrapperEl 21189 } = swiper; 21190 const { 21191 $el 21192 } = scrollbar; 21193 if (!isTouched) return; 21194 isTouched = false; 21195 21196 if (swiper.params.cssMode) { 21197 swiper.$wrapperEl.css('scroll-snap-type', ''); 21198 $wrapperEl.transition(''); 21199 } 21200 21201 if (params.hide) { 21202 clearTimeout(dragTimeout); 21203 dragTimeout = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.nextTick)(() => { 21204 $el.css('opacity', 0); 21205 $el.transition(400); 21206 }, 1000); 21207 } 21208 21209 emit('scrollbarDragEnd', e); 21210 21211 if (params.snapOnRelease) { 21212 swiper.slideToClosest(); 21213 } 21214 } 21215 21216 function events(method) { 21217 const { 21218 scrollbar, 21219 touchEventsTouch, 21220 touchEventsDesktop, 21221 params, 21222 support 21223 } = swiper; 21224 const $el = scrollbar.$el; 21225 if (!$el) return; 21226 const target = $el[0]; 21227 const activeListener = support.passiveListener && params.passiveListeners ? { 21228 passive: false, 21229 capture: false 21230 } : false; 21231 const passiveListener = support.passiveListener && params.passiveListeners ? { 21232 passive: true, 21233 capture: false 21234 } : false; 21235 if (!target) return; 21236 const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener'; 21237 21238 if (!support.touch) { 21239 target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener); 21240 document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener); 21241 document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener); 21242 } else { 21243 target[eventMethod](touchEventsTouch.start, onDragStart, activeListener); 21244 target[eventMethod](touchEventsTouch.move, onDragMove, activeListener); 21245 target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener); 21246 } 21247 } 21248 21249 function enableDraggable() { 21250 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 21251 events('on'); 21252 } 21253 21254 function disableDraggable() { 21255 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 21256 events('off'); 21257 } 21258 21259 function init() { 21260 const { 21261 scrollbar, 21262 $el: $swiperEl 21263 } = swiper; 21264 swiper.params.scrollbar = (0,_shared_create_element_if_not_defined_js__WEBPACK_IMPORTED_MODULE_3__["default"])(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, { 21265 el: 'swiper-scrollbar' 21266 }); 21267 const params = swiper.params.scrollbar; 21268 if (!params.el) return; 21269 let $el = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(params.el); 21270 21271 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) { 21272 $el = $swiperEl.find(params.el); 21273 } 21274 21275 $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 21276 let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`); 21277 21278 if ($dragEl.length === 0) { 21279 $dragEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(`<div class="${swiper.params.scrollbar.dragClass}"></div>`); 21280 $el.append($dragEl); 21281 } 21282 21283 Object.assign(scrollbar, { 21284 $el, 21285 el: $el[0], 21286 $dragEl, 21287 dragEl: $dragEl[0] 21288 }); 21289 21290 if (params.draggable) { 21291 enableDraggable(); 21292 } 21293 21294 if ($el) { 21295 $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass); 21296 } 21297 } 21298 21299 function destroy() { 21300 const params = swiper.params.scrollbar; 21301 const $el = swiper.scrollbar.$el; 21302 21303 if ($el) { 21304 $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass); 21305 } 21306 21307 disableDraggable(); 21308 } 21309 21310 on('init', () => { 21311 if (swiper.params.scrollbar.enabled === false) { 21312 // eslint-disable-next-line 21313 disable(); 21314 } else { 21315 init(); 21316 updateSize(); 21317 setTranslate(); 21318 } 21319 }); 21320 on('update resize observerUpdate lock unlock', () => { 21321 updateSize(); 21322 }); 21323 on('setTranslate', () => { 21324 setTranslate(); 21325 }); 21326 on('setTransition', (_s, duration) => { 21327 setTransition(duration); 21328 }); 21329 on('enable disable', () => { 21330 const { 21331 $el 21332 } = swiper.scrollbar; 21333 21334 if ($el) { 21335 $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass); 21336 } 21337 }); 21338 on('destroy', () => { 21339 destroy(); 21340 }); 21341 21342 const enable = () => { 21343 swiper.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass); 21344 21345 if (swiper.scrollbar.$el) { 21346 swiper.scrollbar.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass); 21347 } 21348 21349 init(); 21350 updateSize(); 21351 setTranslate(); 21352 }; 21353 21354 const disable = () => { 21355 swiper.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass); 21356 21357 if (swiper.scrollbar.$el) { 21358 swiper.scrollbar.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass); 21359 } 21360 21361 destroy(); 21362 }; 21363 21364 Object.assign(swiper.scrollbar, { 21365 enable, 21366 disable, 21367 updateSize, 21368 setTranslate, 21369 init, 21370 destroy 21371 }); 21372} 21373 21374/***/ }), 21375
vendor: 8,515 bytes, lines 21376-21593
21376/***/ "./node_modules/swiper/modules/thumbs/thumbs.js": 21377/*!******************************************************!*\ 21378 !*** ./node_modules/swiper/modules/thumbs/thumbs.js ***! 21379 \******************************************************/ 21380/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 21381 21382__webpack_require__.r(__webpack_exports__); 21383/* harmony export */ __webpack_require__.d(__webpack_exports__, { 21384/* harmony export */ "default": function() { return /* binding */ Thumb; } 21385/* harmony export */ }); 21386/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 21387/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 21388 21389 21390function Thumb({ 21391 swiper, 21392 extendParams, 21393 on 21394}) { 21395 extendParams({ 21396 thumbs: { 21397 swiper: null, 21398 multipleActiveThumbs: true, 21399 autoScrollOffset: 0, 21400 slideThumbActiveClass: 'swiper-slide-thumb-active', 21401 thumbsContainerClass: 'swiper-thumbs' 21402 } 21403 }); 21404 let initialized = false; 21405 let swiperCreated = false; 21406 swiper.thumbs = { 21407 swiper: null 21408 }; 21409 21410 function onThumbClick() { 21411 const thumbsSwiper = swiper.thumbs.swiper; 21412 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 21413 const clickedIndex = thumbsSwiper.clickedIndex; 21414 const clickedSlide = thumbsSwiper.clickedSlide; 21415 if (clickedSlide && (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return; 21416 if (typeof clickedIndex === 'undefined' || clickedIndex === null) return; 21417 let slideToIndex; 21418 21419 if (thumbsSwiper.params.loop) { 21420 slideToIndex = parseInt((0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10); 21421 } else { 21422 slideToIndex = clickedIndex; 21423 } 21424 21425 if (swiper.params.loop) { 21426 let currentIndex = swiper.activeIndex; 21427 21428 if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) { 21429 swiper.loopFix(); // eslint-disable-next-line 21430 21431 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 21432 currentIndex = swiper.activeIndex; 21433 } 21434 21435 const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index(); 21436 const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index(); 21437 if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex; 21438 } 21439 21440 swiper.slideTo(slideToIndex); 21441 } 21442 21443 function init() { 21444 const { 21445 thumbs: thumbsParams 21446 } = swiper.params; 21447 if (initialized) return false; 21448 initialized = true; 21449 const SwiperClass = swiper.constructor; 21450 21451 if (thumbsParams.swiper instanceof SwiperClass) { 21452 swiper.thumbs.swiper = thumbsParams.swiper; 21453 Object.assign(swiper.thumbs.swiper.originalParams, { 21454 watchSlidesProgress: true, 21455 slideToClickedSlide: false 21456 }); 21457 Object.assign(swiper.thumbs.swiper.params, { 21458 watchSlidesProgress: true, 21459 slideToClickedSlide: false 21460 }); 21461 } else if ((0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_0__.isObject)(thumbsParams.swiper)) { 21462 const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper); 21463 Object.assign(thumbsSwiperParams, { 21464 watchSlidesProgress: true, 21465 slideToClickedSlide: false 21466 }); 21467 swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams); 21468 swiperCreated = true; 21469 } 21470 21471 swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass); 21472 swiper.thumbs.swiper.on('tap', onThumbClick); 21473 return true; 21474 } 21475 21476 function update(initial) { 21477 const thumbsSwiper = swiper.thumbs.swiper; 21478 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 21479 const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView; // Activate thumbs 21480 21481 let thumbsToActivate = 1; 21482 const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass; 21483 21484 if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) { 21485 thumbsToActivate = swiper.params.slidesPerView; 21486 } 21487 21488 if (!swiper.params.thumbs.multipleActiveThumbs) { 21489 thumbsToActivate = 1; 21490 } 21491 21492 thumbsToActivate = Math.floor(thumbsToActivate); 21493 thumbsSwiper.slides.removeClass(thumbActiveClass); 21494 21495 if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) { 21496 for (let i = 0; i < thumbsToActivate; i += 1) { 21497 thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index="${swiper.realIndex + i}"]`).addClass(thumbActiveClass); 21498 } 21499 } else { 21500 for (let i = 0; i < thumbsToActivate; i += 1) { 21501 thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass); 21502 } 21503 } 21504 21505 const autoScrollOffset = swiper.params.thumbs.autoScrollOffset; 21506 const useOffset = autoScrollOffset && !thumbsSwiper.params.loop; 21507 21508 if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) { 21509 let currentThumbsIndex = thumbsSwiper.activeIndex; 21510 let newThumbsIndex; 21511 let direction; 21512 21513 if (thumbsSwiper.params.loop) { 21514 if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) { 21515 thumbsSwiper.loopFix(); // eslint-disable-next-line 21516 21517 thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft; 21518 currentThumbsIndex = thumbsSwiper.activeIndex; 21519 } // Find actual thumbs index to slide to 21520 21521 21522 const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0).index(); 21523 const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0).index(); 21524 21525 if (typeof prevThumbsIndex === 'undefined') { 21526 newThumbsIndex = nextThumbsIndex; 21527 } else if (typeof nextThumbsIndex === 'undefined') { 21528 newThumbsIndex = prevThumbsIndex; 21529 } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) { 21530 newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex; 21531 } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) { 21532 newThumbsIndex = nextThumbsIndex; 21533 } else { 21534 newThumbsIndex = prevThumbsIndex; 21535 } 21536 21537 direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev'; 21538 } else { 21539 newThumbsIndex = swiper.realIndex; 21540 direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev'; 21541 } 21542 21543 if (useOffset) { 21544 newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset; 21545 } 21546 21547 if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) { 21548 if (thumbsSwiper.params.centeredSlides) { 21549 if (newThumbsIndex > currentThumbsIndex) { 21550 newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1; 21551 } else { 21552 newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1; 21553 } 21554 } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {// newThumbsIndex = newThumbsIndex - slidesPerView + 1; 21555 } 21556 21557 thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined); 21558 } 21559 } 21560 } 21561 21562 on('beforeInit', () => { 21563 const { 21564 thumbs 21565 } = swiper.params; 21566 if (!thumbs || !thumbs.swiper) return; 21567 init(); 21568 update(true); 21569 }); 21570 on('slideChange update resize observerUpdate', () => { 21571 update(); 21572 }); 21573 on('setTransition', (_s, duration) => { 21574 const thumbsSwiper = swiper.thumbs.swiper; 21575 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 21576 thumbsSwiper.setTransition(duration); 21577 }); 21578 on('beforeDestroy', () => { 21579 const thumbsSwiper = swiper.thumbs.swiper; 21580 if (!thumbsSwiper || thumbsSwiper.destroyed) return; 21581 21582 if (swiperCreated) { 21583 thumbsSwiper.destroy(); 21584 } 21585 }); 21586 Object.assign(swiper.thumbs, { 21587 init, 21588 update 21589 }); 21590} 21591 21592/***/ }), 21593
vendor: 9,075 bytes, lines 21594-21905
21594/***/ "./node_modules/swiper/modules/virtual/virtual.js": 21595/*!********************************************************!*\ 21596 !*** ./node_modules/swiper/modules/virtual/virtual.js ***! 21597 \********************************************************/ 21598/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 21599 21600__webpack_require__.r(__webpack_exports__); 21601/* harmony export */ __webpack_require__.d(__webpack_exports__, { 21602/* harmony export */ "default": function() { return /* binding */ Virtual; } 21603/* harmony export */ }); 21604/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 21605/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 21606 21607 21608function Virtual({ 21609 swiper, 21610 extendParams, 21611 on, 21612 emit 21613}) { 21614 extendParams({ 21615 virtual: { 21616 enabled: false, 21617 slides: [], 21618 cache: true, 21619 renderSlide: null, 21620 renderExternal: null, 21621 renderExternalUpdate: true, 21622 addSlidesBefore: 0, 21623 addSlidesAfter: 0 21624 } 21625 }); 21626 let cssModeTimeout; 21627 swiper.virtual = { 21628 cache: {}, 21629 from: undefined, 21630 to: undefined, 21631 slides: [], 21632 offset: 0, 21633 slidesGrid: [] 21634 }; 21635 21636 function renderSlide(slide, index) { 21637 const params = swiper.params.virtual; 21638 21639 if (params.cache && swiper.virtual.cache[index]) { 21640 return swiper.virtual.cache[index]; 21641 } 21642 21643 const $slideEl = params.renderSlide ? (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(params.renderSlide.call(swiper, slide, index)) : (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(`<div class="${swiper.params.slideClass}" data-swiper-slide-index="${index}">${slide}</div>`); 21644 if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index); 21645 if (params.cache) swiper.virtual.cache[index] = $slideEl; 21646 return $slideEl; 21647 } 21648 21649 function update(force) { 21650 const { 21651 slidesPerView, 21652 slidesPerGroup, 21653 centeredSlides 21654 } = swiper.params; 21655 const { 21656 addSlidesBefore, 21657 addSlidesAfter 21658 } = swiper.params.virtual; 21659 const { 21660 from: previousFrom, 21661 to: previousTo, 21662 slides, 21663 slidesGrid: previousSlidesGrid, 21664 offset: previousOffset 21665 } = swiper.virtual; 21666 21667 if (!swiper.params.cssMode) { 21668 swiper.updateActiveIndex(); 21669 } 21670 21671 const activeIndex = swiper.activeIndex || 0; 21672 let offsetProp; 21673 if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top'; 21674 let slidesAfter; 21675 let slidesBefore; 21676 21677 if (centeredSlides) { 21678 slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter; 21679 slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore; 21680 } else { 21681 slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter; 21682 slidesBefore = slidesPerGroup + addSlidesBefore; 21683 } 21684 21685 const from = Math.max((activeIndex || 0) - slidesBefore, 0); 21686 const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1); 21687 const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0); 21688 Object.assign(swiper.virtual, { 21689 from, 21690 to, 21691 offset, 21692 slidesGrid: swiper.slidesGrid 21693 }); 21694 21695 function onRendered() { 21696 swiper.updateSlides(); 21697 swiper.updateProgress(); 21698 swiper.updateSlidesClasses(); 21699 21700 if (swiper.lazy && swiper.params.lazy.enabled) { 21701 swiper.lazy.load(); 21702 } 21703 21704 emit('virtualUpdate'); 21705 } 21706 21707 if (previousFrom === from && previousTo === to && !force) { 21708 if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) { 21709 swiper.slides.css(offsetProp, `${offset}px`); 21710 } 21711 21712 swiper.updateProgress(); 21713 emit('virtualUpdate'); 21714 return; 21715 } 21716 21717 if (swiper.params.virtual.renderExternal) { 21718 swiper.params.virtual.renderExternal.call(swiper, { 21719 offset, 21720 from, 21721 to, 21722 slides: function getSlides() { 21723 const slidesToRender = []; 21724 21725 for (let i = from; i <= to; i += 1) { 21726 slidesToRender.push(slides[i]); 21727 } 21728 21729 return slidesToRender; 21730 }() 21731 }); 21732 21733 if (swiper.params.virtual.renderExternalUpdate) { 21734 onRendered(); 21735 } else { 21736 emit('virtualUpdate'); 21737 } 21738 21739 return; 21740 } 21741 21742 const prependIndexes = []; 21743 const appendIndexes = []; 21744 21745 if (force) { 21746 swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove(); 21747 } else { 21748 for (let i = previousFrom; i <= previousTo; i += 1) { 21749 if (i < from || i > to) { 21750 swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index="${i}"]`).remove(); 21751 } 21752 } 21753 } 21754 21755 for (let i = 0; i < slides.length; i += 1) { 21756 if (i >= from && i <= to) { 21757 if (typeof previousTo === 'undefined' || force) { 21758 appendIndexes.push(i); 21759 } else { 21760 if (i > previousTo) appendIndexes.push(i); 21761 if (i < previousFrom) prependIndexes.push(i); 21762 } 21763 } 21764 } 21765 21766 appendIndexes.forEach(index => { 21767 swiper.$wrapperEl.append(renderSlide(slides[index], index)); 21768 }); 21769 prependIndexes.sort((a, b) => b - a).forEach(index => { 21770 swiper.$wrapperEl.prepend(renderSlide(slides[index], index)); 21771 }); 21772 swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`); 21773 onRendered(); 21774 } 21775 21776 function appendSlide(slides) { 21777 if (typeof slides === 'object' && 'length' in slides) { 21778 for (let i = 0; i < slides.length; i += 1) { 21779 if (slides[i]) swiper.virtual.slides.push(slides[i]); 21780 } 21781 } else { 21782 swiper.virtual.slides.push(slides); 21783 } 21784 21785 update(true); 21786 } 21787 21788 function prependSlide(slides) { 21789 const activeIndex = swiper.activeIndex; 21790 let newActiveIndex = activeIndex + 1; 21791 let numberOfNewSlides = 1; 21792 21793 if (Array.isArray(slides)) { 21794 for (let i = 0; i < slides.length; i += 1) { 21795 if (slides[i]) swiper.virtual.slides.unshift(slides[i]); 21796 } 21797 21798 newActiveIndex = activeIndex + slides.length; 21799 numberOfNewSlides = slides.length; 21800 } else { 21801 swiper.virtual.slides.unshift(slides); 21802 } 21803 21804 if (swiper.params.virtual.cache) { 21805 const cache = swiper.virtual.cache; 21806 const newCache = {}; 21807 Object.keys(cache).forEach(cachedIndex => { 21808 const $cachedEl = cache[cachedIndex]; 21809 const cachedElIndex = $cachedEl.attr('data-swiper-slide-index'); 21810 21811 if (cachedElIndex) { 21812 $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides); 21813 } 21814 21815 newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl; 21816 }); 21817 swiper.virtual.cache = newCache; 21818 } 21819 21820 update(true); 21821 swiper.slideTo(newActiveIndex, 0); 21822 } 21823 21824 function removeSlide(slidesIndexes) { 21825 if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return; 21826 let activeIndex = swiper.activeIndex; 21827 21828 if (Array.isArray(slidesIndexes)) { 21829 for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) { 21830 swiper.virtual.slides.splice(slidesIndexes[i], 1); 21831 21832 if (swiper.params.virtual.cache) { 21833 delete swiper.virtual.cache[slidesIndexes[i]]; 21834 } 21835 21836 if (slidesIndexes[i] < activeIndex) activeIndex -= 1; 21837 activeIndex = Math.max(activeIndex, 0); 21838 } 21839 } else { 21840 swiper.virtual.slides.splice(slidesIndexes, 1); 21841 21842 if (swiper.params.virtual.cache) { 21843 delete swiper.virtual.cache[slidesIndexes]; 21844 } 21845 21846 if (slidesIndexes < activeIndex) activeIndex -= 1; 21847 activeIndex = Math.max(activeIndex, 0); 21848 } 21849 21850 update(true); 21851 swiper.slideTo(activeIndex, 0); 21852 } 21853 21854 function removeAllSlides() { 21855 swiper.virtual.slides = []; 21856 21857 if (swiper.params.virtual.cache) { 21858 swiper.virtual.cache = {}; 21859 } 21860 21861 update(true); 21862 swiper.slideTo(0, 0); 21863 } 21864 21865 on('beforeInit', () => { 21866 if (!swiper.params.virtual.enabled) return; 21867 swiper.virtual.slides = swiper.params.virtual.slides; 21868 swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`); 21869 swiper.params.watchSlidesProgress = true; 21870 swiper.originalParams.watchSlidesProgress = true; 21871 21872 if (!swiper.params.initialSlide) { 21873 update(); 21874 } 21875 }); 21876 on('setTranslate', () => { 21877 if (!swiper.params.virtual.enabled) return; 21878 21879 if (swiper.params.cssMode && !swiper._immediateVirtual) { 21880 clearTimeout(cssModeTimeout); 21881 cssModeTimeout = setTimeout(() => { 21882 update(); 21883 }, 100); 21884 } else { 21885 update(); 21886 } 21887 }); 21888 on('init update resize', () => { 21889 if (!swiper.params.virtual.enabled) return; 21890 21891 if (swiper.params.cssMode) { 21892 (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_1__.setCSSProperty)(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`); 21893 } 21894 }); 21895 Object.assign(swiper.virtual, { 21896 appendSlide, 21897 prependSlide, 21898 removeSlide, 21899 removeAllSlides, 21900 update 21901 }); 21902} 21903 21904/***/ }), 21905
vendor: 21,668 bytes, lines 21906-22533
21906/***/ "./node_modules/swiper/modules/zoom/zoom.js": 21907/*!**************************************************!*\ 21908 !*** ./node_modules/swiper/modules/zoom/zoom.js ***! 21909 \**************************************************/ 21910/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 21911 21912__webpack_require__.r(__webpack_exports__); 21913/* harmony export */ __webpack_require__.d(__webpack_exports__, { 21914/* harmony export */ "default": function() { return /* binding */ Zoom; } 21915/* harmony export */ }); 21916/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 21917/* harmony import */ var _shared_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../shared/dom.js */ "./node_modules/swiper/shared/dom.js"); 21918/* harmony import */ var _shared_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../shared/utils.js */ "./node_modules/swiper/shared/utils.js"); 21919 21920 21921 21922function Zoom({ 21923 swiper, 21924 extendParams, 21925 on, 21926 emit 21927}) { 21928 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 21929 extendParams({ 21930 zoom: { 21931 enabled: false, 21932 maxRatio: 3, 21933 minRatio: 1, 21934 toggle: true, 21935 containerClass: 'swiper-zoom-container', 21936 zoomedSlideClass: 'swiper-slide-zoomed' 21937 } 21938 }); 21939 swiper.zoom = { 21940 enabled: false 21941 }; 21942 let currentScale = 1; 21943 let isScaling = false; 21944 let gesturesEnabled; 21945 let fakeGestureTouched; 21946 let fakeGestureMoved; 21947 const gesture = { 21948 $slideEl: undefined, 21949 slideWidth: undefined, 21950 slideHeight: undefined, 21951 $imageEl: undefined, 21952 $imageWrapEl: undefined, 21953 maxRatio: 3 21954 }; 21955 const image = { 21956 isTouched: undefined, 21957 isMoved: undefined, 21958 currentX: undefined, 21959 currentY: undefined, 21960 minX: undefined, 21961 minY: undefined, 21962 maxX: undefined, 21963 maxY: undefined, 21964 width: undefined, 21965 height: undefined, 21966 startX: undefined, 21967 startY: undefined, 21968 touchesStart: {}, 21969 touchesCurrent: {} 21970 }; 21971 const velocity = { 21972 x: undefined, 21973 y: undefined, 21974 prevPositionX: undefined, 21975 prevPositionY: undefined, 21976 prevTime: undefined 21977 }; 21978 let scale = 1; 21979 Object.defineProperty(swiper.zoom, 'scale', { 21980 get() { 21981 return scale; 21982 }, 21983 21984 set(value) { 21985 if (scale !== value) { 21986 const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined; 21987 const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined; 21988 emit('zoomChange', value, imageEl, slideEl); 21989 } 21990 21991 scale = value; 21992 } 21993 21994 }); 21995 21996 function getDistanceBetweenTouches(e) { 21997 if (e.targetTouches.length < 2) return 1; 21998 const x1 = e.targetTouches[0].pageX; 21999 const y1 = e.targetTouches[0].pageY; 22000 const x2 = e.targetTouches[1].pageX; 22001 const y2 = e.targetTouches[1].pageY; 22002 const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2); 22003 return distance; 22004 } // Events 22005 22006 22007 function onGestureStart(e) { 22008 const support = swiper.support; 22009 const params = swiper.params.zoom; 22010 fakeGestureTouched = false; 22011 fakeGestureMoved = false; 22012 22013 if (!support.gestures) { 22014 if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) { 22015 return; 22016 } 22017 22018 fakeGestureTouched = true; 22019 gesture.scaleStart = getDistanceBetweenTouches(e); 22020 } 22021 22022 if (!gesture.$slideEl || !gesture.$slideEl.length) { 22023 gesture.$slideEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(e.target).closest(`.${swiper.params.slideClass}`); 22024 if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 22025 gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0); 22026 gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`); 22027 gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 22028 22029 if (gesture.$imageWrapEl.length === 0) { 22030 gesture.$imageEl = undefined; 22031 return; 22032 } 22033 } 22034 22035 if (gesture.$imageEl) { 22036 gesture.$imageEl.transition(0); 22037 } 22038 22039 isScaling = true; 22040 } 22041 22042 function onGestureChange(e) { 22043 const support = swiper.support; 22044 const params = swiper.params.zoom; 22045 const zoom = swiper.zoom; 22046 22047 if (!support.gestures) { 22048 if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) { 22049 return; 22050 } 22051 22052 fakeGestureMoved = true; 22053 gesture.scaleMove = getDistanceBetweenTouches(e); 22054 } 22055 22056 if (!gesture.$imageEl || gesture.$imageEl.length === 0) { 22057 if (e.type === 'gesturechange') onGestureStart(e); 22058 return; 22059 } 22060 22061 if (support.gestures) { 22062 zoom.scale = e.scale * currentScale; 22063 } else { 22064 zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale; 22065 } 22066 22067 if (zoom.scale > gesture.maxRatio) { 22068 zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5; 22069 } 22070 22071 if (zoom.scale < params.minRatio) { 22072 zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5; 22073 } 22074 22075 gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`); 22076 } 22077 22078 function onGestureEnd(e) { 22079 const device = swiper.device; 22080 const support = swiper.support; 22081 const params = swiper.params.zoom; 22082 const zoom = swiper.zoom; 22083 22084 if (!support.gestures) { 22085 if (!fakeGestureTouched || !fakeGestureMoved) { 22086 return; 22087 } 22088 22089 if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) { 22090 return; 22091 } 22092 22093 fakeGestureTouched = false; 22094 fakeGestureMoved = false; 22095 } 22096 22097 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 22098 zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio); 22099 gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`); 22100 currentScale = zoom.scale; 22101 isScaling = false; 22102 if (zoom.scale === 1) gesture.$slideEl = undefined; 22103 } 22104 22105 function onTouchStart(e) { 22106 const device = swiper.device; 22107 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 22108 if (image.isTouched) return; 22109 if (device.android && e.cancelable) e.preventDefault(); 22110 image.isTouched = true; 22111 image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; 22112 image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; 22113 } 22114 22115 function onTouchMove(e) { 22116 const zoom = swiper.zoom; 22117 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 22118 swiper.allowClick = false; 22119 if (!image.isTouched || !gesture.$slideEl) return; 22120 22121 if (!image.isMoved) { 22122 image.width = gesture.$imageEl[0].offsetWidth; 22123 image.height = gesture.$imageEl[0].offsetHeight; 22124 image.startX = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.getTranslate)(gesture.$imageWrapEl[0], 'x') || 0; 22125 image.startY = (0,_shared_utils_js__WEBPACK_IMPORTED_MODULE_2__.getTranslate)(gesture.$imageWrapEl[0], 'y') || 0; 22126 gesture.slideWidth = gesture.$slideEl[0].offsetWidth; 22127 gesture.slideHeight = gesture.$slideEl[0].offsetHeight; 22128 gesture.$imageWrapEl.transition(0); 22129 } // Define if we need image drag 22130 22131 22132 const scaledWidth = image.width * zoom.scale; 22133 const scaledHeight = image.height * zoom.scale; 22134 if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return; 22135 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 22136 image.maxX = -image.minX; 22137 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 22138 image.maxY = -image.minY; 22139 image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; 22140 image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; 22141 22142 if (!image.isMoved && !isScaling) { 22143 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)) { 22144 image.isTouched = false; 22145 return; 22146 } 22147 22148 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)) { 22149 image.isTouched = false; 22150 return; 22151 } 22152 } 22153 22154 if (e.cancelable) { 22155 e.preventDefault(); 22156 } 22157 22158 e.stopPropagation(); 22159 image.isMoved = true; 22160 image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX; 22161 image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY; 22162 22163 if (image.currentX < image.minX) { 22164 image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8; 22165 } 22166 22167 if (image.currentX > image.maxX) { 22168 image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8; 22169 } 22170 22171 if (image.currentY < image.minY) { 22172 image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8; 22173 } 22174 22175 if (image.currentY > image.maxY) { 22176 image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8; 22177 } // Velocity 22178 22179 22180 if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x; 22181 if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y; 22182 if (!velocity.prevTime) velocity.prevTime = Date.now(); 22183 velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2; 22184 velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2; 22185 if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0; 22186 if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0; 22187 velocity.prevPositionX = image.touchesCurrent.x; 22188 velocity.prevPositionY = image.touchesCurrent.y; 22189 velocity.prevTime = Date.now(); 22190 gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`); 22191 } 22192 22193 function onTouchEnd() { 22194 const zoom = swiper.zoom; 22195 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 22196 22197 if (!image.isTouched || !image.isMoved) { 22198 image.isTouched = false; 22199 image.isMoved = false; 22200 return; 22201 } 22202 22203 image.isTouched = false; 22204 image.isMoved = false; 22205 let momentumDurationX = 300; 22206 let momentumDurationY = 300; 22207 const momentumDistanceX = velocity.x * momentumDurationX; 22208 const newPositionX = image.currentX + momentumDistanceX; 22209 const momentumDistanceY = velocity.y * momentumDurationY; 22210 const newPositionY = image.currentY + momentumDistanceY; // Fix duration 22211 22212 if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); 22213 if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); 22214 const momentumDuration = Math.max(momentumDurationX, momentumDurationY); 22215 image.currentX = newPositionX; 22216 image.currentY = newPositionY; // Define if we need image drag 22217 22218 const scaledWidth = image.width * zoom.scale; 22219 const scaledHeight = image.height * zoom.scale; 22220 image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0); 22221 image.maxX = -image.minX; 22222 image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0); 22223 image.maxY = -image.minY; 22224 image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX); 22225 image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY); 22226 gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`); 22227 } 22228 22229 function onTransitionEnd() { 22230 const zoom = swiper.zoom; 22231 22232 if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) { 22233 if (gesture.$imageEl) { 22234 gesture.$imageEl.transform('translate3d(0,0,0) scale(1)'); 22235 } 22236 22237 if (gesture.$imageWrapEl) { 22238 gesture.$imageWrapEl.transform('translate3d(0,0,0)'); 22239 } 22240 22241 zoom.scale = 1; 22242 currentScale = 1; 22243 gesture.$slideEl = undefined; 22244 gesture.$imageEl = undefined; 22245 gesture.$imageWrapEl = undefined; 22246 } 22247 } 22248 22249 function zoomIn(e) { 22250 const zoom = swiper.zoom; 22251 const params = swiper.params.zoom; 22252 22253 if (!gesture.$slideEl) { 22254 if (e && e.target) { 22255 gesture.$slideEl = (0,_shared_dom_js__WEBPACK_IMPORTED_MODULE_1__["default"])(e.target).closest(`.${swiper.params.slideClass}`); 22256 } 22257 22258 if (!gesture.$slideEl) { 22259 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 22260 gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`); 22261 } else { 22262 gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 22263 } 22264 } 22265 22266 gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0); 22267 gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`); 22268 } 22269 22270 if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return; 22271 22272 if (swiper.params.cssMode) { 22273 swiper.wrapperEl.style.overflow = 'hidden'; 22274 swiper.wrapperEl.style.touchAction = 'none'; 22275 } 22276 22277 gesture.$slideEl.addClass(`${params.zoomedSlideClass}`); 22278 let touchX; 22279 let touchY; 22280 let offsetX; 22281 let offsetY; 22282 let diffX; 22283 let diffY; 22284 let translateX; 22285 let translateY; 22286 let imageWidth; 22287 let imageHeight; 22288 let scaledWidth; 22289 let scaledHeight; 22290 let translateMinX; 22291 let translateMinY; 22292 let translateMaxX; 22293 let translateMaxY; 22294 let slideWidth; 22295 let slideHeight; 22296 22297 if (typeof image.touchesStart.x === 'undefined' && e) { 22298 touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX; 22299 touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY; 22300 } else { 22301 touchX = image.touchesStart.x; 22302 touchY = image.touchesStart.y; 22303 } 22304 22305 zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 22306 currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 22307 22308 if (e) { 22309 slideWidth = gesture.$slideEl[0].offsetWidth; 22310 slideHeight = gesture.$slideEl[0].offsetHeight; 22311 offsetX = gesture.$slideEl.offset().left + window.scrollX; 22312 offsetY = gesture.$slideEl.offset().top + window.scrollY; 22313 diffX = offsetX + slideWidth / 2 - touchX; 22314 diffY = offsetY + slideHeight / 2 - touchY; 22315 imageWidth = gesture.$imageEl[0].offsetWidth; 22316 imageHeight = gesture.$imageEl[0].offsetHeight; 22317 scaledWidth = imageWidth * zoom.scale; 22318 scaledHeight = imageHeight * zoom.scale; 22319 translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0); 22320 translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0); 22321 translateMaxX = -translateMinX; 22322 translateMaxY = -translateMinY; 22323 translateX = diffX * zoom.scale; 22324 translateY = diffY * zoom.scale; 22325 22326 if (translateX < translateMinX) { 22327 translateX = translateMinX; 22328 } 22329 22330 if (translateX > translateMaxX) { 22331 translateX = translateMaxX; 22332 } 22333 22334 if (translateY < translateMinY) { 22335 translateY = translateMinY; 22336 } 22337 22338 if (translateY > translateMaxY) { 22339 translateY = translateMaxY; 22340 } 22341 } else { 22342 translateX = 0; 22343 translateY = 0; 22344 } 22345 22346 gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`); 22347 gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`); 22348 } 22349 22350 function zoomOut() { 22351 const zoom = swiper.zoom; 22352 const params = swiper.params.zoom; 22353 22354 if (!gesture.$slideEl) { 22355 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 22356 gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`); 22357 } else { 22358 gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 22359 } 22360 22361 gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0); 22362 gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`); 22363 } 22364 22365 if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return; 22366 22367 if (swiper.params.cssMode) { 22368 swiper.wrapperEl.style.overflow = ''; 22369 swiper.wrapperEl.style.touchAction = ''; 22370 } 22371 22372 zoom.scale = 1; 22373 currentScale = 1; 22374 gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)'); 22375 gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)'); 22376 gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`); 22377 gesture.$slideEl = undefined; 22378 } // Toggle Zoom 22379 22380 22381 function zoomToggle(e) { 22382 const zoom = swiper.zoom; 22383 22384 if (zoom.scale && zoom.scale !== 1) { 22385 // Zoom Out 22386 zoomOut(); 22387 } else { 22388 // Zoom In 22389 zoomIn(e); 22390 } 22391 } 22392 22393 function getListeners() { 22394 const support = swiper.support; 22395 const passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? { 22396 passive: true, 22397 capture: false 22398 } : false; 22399 const activeListenerWithCapture = support.passiveListener ? { 22400 passive: false, 22401 capture: true 22402 } : true; 22403 return { 22404 passiveListener, 22405 activeListenerWithCapture 22406 }; 22407 } 22408 22409 function getSlideSelector() { 22410 return `.${swiper.params.slideClass}`; 22411 } 22412 22413 function toggleGestures(method) { 22414 const { 22415 passiveListener 22416 } = getListeners(); 22417 const slideSelector = getSlideSelector(); 22418 swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener); 22419 swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener); 22420 swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener); 22421 } 22422 22423 function enableGestures() { 22424 if (gesturesEnabled) return; 22425 gesturesEnabled = true; 22426 toggleGestures('on'); 22427 } 22428 22429 function disableGestures() { 22430 if (!gesturesEnabled) return; 22431 gesturesEnabled = false; 22432 toggleGestures('off'); 22433 } // Attach/Detach Events 22434 22435 22436 function enable() { 22437 const zoom = swiper.zoom; 22438 if (zoom.enabled) return; 22439 zoom.enabled = true; 22440 const support = swiper.support; 22441 const { 22442 passiveListener, 22443 activeListenerWithCapture 22444 } = getListeners(); 22445 const slideSelector = getSlideSelector(); // Scale image 22446 22447 if (support.gestures) { 22448 swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener); 22449 swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener); 22450 } else if (swiper.touchEvents.start === 'touchstart') { 22451 swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener); 22452 swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture); 22453 swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener); 22454 22455 if (swiper.touchEvents.cancel) { 22456 swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener); 22457 } 22458 } // Move image 22459 22460 22461 swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture); 22462 } 22463 22464 function disable() { 22465 const zoom = swiper.zoom; 22466 if (!zoom.enabled) return; 22467 const support = swiper.support; 22468 zoom.enabled = false; 22469 const { 22470 passiveListener, 22471 activeListenerWithCapture 22472 } = getListeners(); 22473 const slideSelector = getSlideSelector(); // Scale image 22474 22475 if (support.gestures) { 22476 swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener); 22477 swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener); 22478 } else if (swiper.touchEvents.start === 'touchstart') { 22479 swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener); 22480 swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture); 22481 swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener); 22482 22483 if (swiper.touchEvents.cancel) { 22484 swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener); 22485 } 22486 } // Move image 22487 22488 22489 swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture); 22490 } 22491 22492 on('init', () => { 22493 if (swiper.params.zoom.enabled) { 22494 enable(); 22495 } 22496 }); 22497 on('destroy', () => { 22498 disable(); 22499 }); 22500 on('touchStart', (_s, e) => { 22501 if (!swiper.zoom.enabled) return; 22502 onTouchStart(e); 22503 }); 22504 on('touchEnd', (_s, e) => { 22505 if (!swiper.zoom.enabled) return; 22506 onTouchEnd(e); 22507 }); 22508 on('doubleTap', (_s, e) => { 22509 if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) { 22510 zoomToggle(e); 22511 } 22512 }); 22513 on('transitionEnd', () => { 22514 if (swiper.zoom.enabled && swiper.params.zoom.enabled) { 22515 onTransitionEnd(); 22516 } 22517 }); 22518 on('slideChange', () => { 22519 if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) { 22520 onTransitionEnd(); 22521 } 22522 }); 22523 Object.assign(swiper.zoom, { 22524 enable, 22525 disable, 22526 in: zoomIn, 22527 out: zoomOut, 22528 toggle: zoomToggle 22529 }); 22530} 22531 22532/***/ }), 22533
vendor: 741 bytes, lines 22534-22550
22534/***/ "./node_modules/swiper/shared/classes-to-selector.js": 22535/*!***********************************************************!*\ 22536 !*** ./node_modules/swiper/shared/classes-to-selector.js ***! 22537 \***********************************************************/ 22538/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22539 22540__webpack_require__.r(__webpack_exports__); 22541/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22542/* harmony export */ "default": function() { return /* binding */ classesToSelector; } 22543/* harmony export */ }); 22544function classesToSelector(classes = '') { 22545 return `.${classes.trim().replace(/([\.:!\/])/g, '\\$1') // eslint-disable-line 22546 .replace(/ /g, '.')}`; 22547} 22548 22549/***/ }), 22550
vendor: 1,435 bytes, lines 22551-22587
22551/***/ "./node_modules/swiper/shared/create-element-if-not-defined.js": 22552/*!*********************************************************************!*\ 22553 !*** ./node_modules/swiper/shared/create-element-if-not-defined.js ***! 22554 \*********************************************************************/ 22555/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22556 22557__webpack_require__.r(__webpack_exports__); 22558/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22559/* harmony export */ "default": function() { return /* binding */ createElementIfNotDefined; } 22560/* harmony export */ }); 22561/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 22562 22563function createElementIfNotDefined(swiper, originalParams, params, checkProps) { 22564 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 22565 22566 if (swiper.params.createElements) { 22567 Object.keys(checkProps).forEach(key => { 22568 if (!params[key] && params.auto === true) { 22569 let element = swiper.$el.children(`.${checkProps[key]}`)[0]; 22570 22571 if (!element) { 22572 element = document.createElement('div'); 22573 element.className = checkProps[key]; 22574 swiper.$el.append(element); 22575 } 22576 22577 params[key] = element; 22578 originalParams[key] = element; 22579 } 22580 }); 22581 } 22582 22583 return params; 22584} 22585 22586/***/ }), 22587
vendor: 1,209 bytes, lines 22588-22614
22588/***/ "./node_modules/swiper/shared/create-shadow.js": 22589/*!*****************************************************!*\ 22590 !*** ./node_modules/swiper/shared/create-shadow.js ***! 22591 \*****************************************************/ 22592/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22593 22594__webpack_require__.r(__webpack_exports__); 22595/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22596/* harmony export */ "default": function() { return /* binding */ createShadow; } 22597/* harmony export */ }); 22598/* harmony import */ var _dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom.js */ "./node_modules/swiper/shared/dom.js"); 22599 22600function createShadow(params, $slideEl, side) { 22601 const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`; 22602 const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl; 22603 let $shadowEl = $shadowContainer.children(`.${shadowClass}`); 22604 22605 if (!$shadowEl.length) { 22606 $shadowEl = (0,_dom_js__WEBPACK_IMPORTED_MODULE_0__["default"])(`<div class="swiper-slide-shadow${side ? `-${side}` : ''}"></div>`); 22607 $shadowContainer.append($shadowEl); 22608 } 22609 22610 return $shadowEl; 22611} 22612 22613/***/ }), 22614
vendor: 2,684 bytes, lines 22615-22671
22615/***/ "./node_modules/swiper/shared/dom.js": 22616/*!*******************************************!*\ 22617 !*** ./node_modules/swiper/shared/dom.js ***! 22618 \*******************************************/ 22619/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22620 22621__webpack_require__.r(__webpack_exports__); 22622/* harmony import */ var dom7__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dom7 */ "./node_modules/dom7/dom7.esm.js"); 22623 22624const Methods = { 22625 addClass: dom7__WEBPACK_IMPORTED_MODULE_0__.addClass, 22626 removeClass: dom7__WEBPACK_IMPORTED_MODULE_0__.removeClass, 22627 hasClass: dom7__WEBPACK_IMPORTED_MODULE_0__.hasClass, 22628 toggleClass: dom7__WEBPACK_IMPORTED_MODULE_0__.toggleClass, 22629 attr: dom7__WEBPACK_IMPORTED_MODULE_0__.attr, 22630 removeAttr: dom7__WEBPACK_IMPORTED_MODULE_0__.removeAttr, 22631 transform: dom7__WEBPACK_IMPORTED_MODULE_0__.transform, 22632 transition: dom7__WEBPACK_IMPORTED_MODULE_0__.transition, 22633 on: dom7__WEBPACK_IMPORTED_MODULE_0__.on, 22634 off: dom7__WEBPACK_IMPORTED_MODULE_0__.off, 22635 trigger: dom7__WEBPACK_IMPORTED_MODULE_0__.trigger, 22636 transitionEnd: dom7__WEBPACK_IMPORTED_MODULE_0__.transitionEnd, 22637 outerWidth: dom7__WEBPACK_IMPORTED_MODULE_0__.outerWidth, 22638 outerHeight: dom7__WEBPACK_IMPORTED_MODULE_0__.outerHeight, 22639 styles: dom7__WEBPACK_IMPORTED_MODULE_0__.styles, 22640 offset: dom7__WEBPACK_IMPORTED_MODULE_0__.offset, 22641 css: dom7__WEBPACK_IMPORTED_MODULE_0__.css, 22642 each: dom7__WEBPACK_IMPORTED_MODULE_0__.each, 22643 html: dom7__WEBPACK_IMPORTED_MODULE_0__.html, 22644 text: dom7__WEBPACK_IMPORTED_MODULE_0__.text, 22645 is: dom7__WEBPACK_IMPORTED_MODULE_0__.is, 22646 index: dom7__WEBPACK_IMPORTED_MODULE_0__.index, 22647 eq: dom7__WEBPACK_IMPORTED_MODULE_0__.eq, 22648 append: dom7__WEBPACK_IMPORTED_MODULE_0__.append, 22649 prepend: dom7__WEBPACK_IMPORTED_MODULE_0__.prepend, 22650 next: dom7__WEBPACK_IMPORTED_MODULE_0__.next, 22651 nextAll: dom7__WEBPACK_IMPORTED_MODULE_0__.nextAll, 22652 prev: dom7__WEBPACK_IMPORTED_MODULE_0__.prev, 22653 prevAll: dom7__WEBPACK_IMPORTED_MODULE_0__.prevAll, 22654 parent: dom7__WEBPACK_IMPORTED_MODULE_0__.parent, 22655 parents: dom7__WEBPACK_IMPORTED_MODULE_0__.parents, 22656 closest: dom7__WEBPACK_IMPORTED_MODULE_0__.closest, 22657 find: dom7__WEBPACK_IMPORTED_MODULE_0__.find, 22658 children: dom7__WEBPACK_IMPORTED_MODULE_0__.children, 22659 filter: dom7__WEBPACK_IMPORTED_MODULE_0__.filter, 22660 remove: dom7__WEBPACK_IMPORTED_MODULE_0__.remove 22661}; 22662Object.keys(Methods).forEach(methodName => { 22663 Object.defineProperty(dom7__WEBPACK_IMPORTED_MODULE_0__.$.fn, methodName, { 22664 value: Methods[methodName], 22665 writable: true 22666 }); 22667}); 22668/* harmony default export */ __webpack_exports__["default"] = (dom7__WEBPACK_IMPORTED_MODULE_0__.$); 22669 22670/***/ }), 22671
vendor: 2,340 bytes, lines 22672-22746
22672/***/ "./node_modules/swiper/shared/effect-init.js": 22673/*!***************************************************!*\ 22674 !*** ./node_modules/swiper/shared/effect-init.js ***! 22675 \***************************************************/ 22676/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22677 22678__webpack_require__.r(__webpack_exports__); 22679/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22680/* harmony export */ "default": function() { return /* binding */ effectInit; } 22681/* harmony export */ }); 22682function effectInit(params) { 22683 const { 22684 effect, 22685 swiper, 22686 on, 22687 setTranslate, 22688 setTransition, 22689 overwriteParams, 22690 perspective, 22691 recreateShadows, 22692 getEffectParams 22693 } = params; 22694 on('beforeInit', () => { 22695 if (swiper.params.effect !== effect) return; 22696 swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`); 22697 22698 if (perspective && perspective()) { 22699 swiper.classNames.push(`${swiper.params.containerModifierClass}3d`); 22700 } 22701 22702 const overwriteParamsResult = overwriteParams ? overwriteParams() : {}; 22703 Object.assign(swiper.params, overwriteParamsResult); 22704 Object.assign(swiper.originalParams, overwriteParamsResult); 22705 }); 22706 on('setTranslate', () => { 22707 if (swiper.params.effect !== effect) return; 22708 setTranslate(); 22709 }); 22710 on('setTransition', (_s, duration) => { 22711 if (swiper.params.effect !== effect) return; 22712 setTransition(duration); 22713 }); 22714 on('transitionEnd', () => { 22715 if (swiper.params.effect !== effect) return; 22716 22717 if (recreateShadows) { 22718 if (!getEffectParams || !getEffectParams().slideShadows) return; // remove shadows 22719 22720 swiper.slides.each(slideEl => { 22721 const $slideEl = swiper.$(slideEl); 22722 $slideEl.find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').remove(); 22723 }); // create new one 22724 22725 recreateShadows(); 22726 } 22727 }); 22728 let requireUpdateOnVirtual; 22729 on('virtualUpdate', () => { 22730 if (swiper.params.effect !== effect) return; 22731 22732 if (!swiper.slides.length) { 22733 requireUpdateOnVirtual = true; 22734 } 22735 22736 requestAnimationFrame(() => { 22737 if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) { 22738 setTranslate(); 22739 requireUpdateOnVirtual = false; 22740 } 22741 }); 22742 }); 22743} 22744 22745/***/ }), 22746
vendor: 818 bytes, lines 22747-22769
22747/***/ "./node_modules/swiper/shared/effect-target.js": 22748/*!*****************************************************!*\ 22749 !*** ./node_modules/swiper/shared/effect-target.js ***! 22750 \*****************************************************/ 22751/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22752 22753__webpack_require__.r(__webpack_exports__); 22754/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22755/* harmony export */ "default": function() { return /* binding */ effectTarget; } 22756/* harmony export */ }); 22757function effectTarget(effectParams, $slideEl) { 22758 if (effectParams.transformEl) { 22759 return $slideEl.find(effectParams.transformEl).css({ 22760 'backface-visibility': 'hidden', 22761 '-webkit-backface-visibility': 'hidden' 22762 }); 22763 } 22764 22765 return $slideEl; 22766} 22767 22768/***/ }), 22769
vendor: 1,535 bytes, lines 22770-22817
22770/***/ "./node_modules/swiper/shared/effect-virtual-transition-end.js": 22771/*!*********************************************************************!*\ 22772 !*** ./node_modules/swiper/shared/effect-virtual-transition-end.js ***! 22773 \*********************************************************************/ 22774/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22775 22776__webpack_require__.r(__webpack_exports__); 22777/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22778/* harmony export */ "default": function() { return /* binding */ effectVirtualTransitionEnd; } 22779/* harmony export */ }); 22780function effectVirtualTransitionEnd({ 22781 swiper, 22782 duration, 22783 transformEl, 22784 allSlides 22785}) { 22786 const { 22787 slides, 22788 activeIndex, 22789 $wrapperEl 22790 } = swiper; 22791 22792 if (swiper.params.virtualTranslate && duration !== 0) { 22793 let eventTriggered = false; 22794 let $transitionEndTarget; 22795 22796 if (allSlides) { 22797 $transitionEndTarget = transformEl ? slides.find(transformEl) : slides; 22798 } else { 22799 $transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex); 22800 } 22801 22802 $transitionEndTarget.transitionEnd(() => { 22803 if (eventTriggered) return; 22804 if (!swiper || swiper.destroyed) return; 22805 eventTriggered = true; 22806 swiper.animating = false; 22807 const triggerEvents = ['webkitTransitionEnd', 'transitionend']; 22808 22809 for (let i = 0; i < triggerEvents.length; i += 1) { 22810 $wrapperEl.trigger(triggerEvents[i]); 22811 } 22812 }); 22813 } 22814} 22815 22816/***/ }), 22817
vendor: 1,238 bytes, lines 22818-22857
22818/***/ "./node_modules/swiper/shared/get-browser.js": 22819/*!***************************************************!*\ 22820 !*** ./node_modules/swiper/shared/get-browser.js ***! 22821 \***************************************************/ 22822/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22823 22824__webpack_require__.r(__webpack_exports__); 22825/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22826/* harmony export */ getBrowser: function() { return /* binding */ getBrowser; } 22827/* harmony export */ }); 22828/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 22829 22830let browser; 22831 22832function calcBrowser() { 22833 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 22834 22835 function isSafari() { 22836 const ua = window.navigator.userAgent.toLowerCase(); 22837 return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0; 22838 } 22839 22840 return { 22841 isSafari: isSafari(), 22842 isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent) 22843 }; 22844} 22845 22846function getBrowser() { 22847 if (!browser) { 22848 browser = calcBrowser(); 22849 } 22850 22851 return browser; 22852} 22853 22854 22855 22856/***/ }), 22857
vendor: 2,411 bytes, lines 22858-22929
22858/***/ "./node_modules/swiper/shared/get-device.js": 22859/*!**************************************************!*\ 22860 !*** ./node_modules/swiper/shared/get-device.js ***! 22861 \**************************************************/ 22862/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22863 22864__webpack_require__.r(__webpack_exports__); 22865/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22866/* harmony export */ getDevice: function() { return /* binding */ getDevice; } 22867/* harmony export */ }); 22868/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 22869/* harmony import */ var _get_support_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./get-support.js */ "./node_modules/swiper/shared/get-support.js"); 22870 22871 22872let deviceCached; 22873 22874function calcDevice({ 22875 userAgent 22876} = {}) { 22877 const support = (0,_get_support_js__WEBPACK_IMPORTED_MODULE_1__.getSupport)(); 22878 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 22879 const platform = window.navigator.platform; 22880 const ua = userAgent || window.navigator.userAgent; 22881 const device = { 22882 ios: false, 22883 android: false 22884 }; 22885 const screenWidth = window.screen.width; 22886 const screenHeight = window.screen.height; 22887 const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line 22888 22889 let ipad = ua.match(/(iPad).*OS\s([\d_]+)/); 22890 const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); 22891 const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); 22892 const windows = platform === 'Win32'; 22893 let macos = platform === 'MacIntel'; // iPadOs 13 fix 22894 22895 const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810']; 22896 22897 if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) { 22898 ipad = ua.match(/(Version)\/([\d.]+)/); 22899 if (!ipad) ipad = [0, 1, '13_0_0']; 22900 macos = false; 22901 } // Android 22902 22903 22904 if (android && !windows) { 22905 device.os = 'android'; 22906 device.android = true; 22907 } 22908 22909 if (ipad || iphone || ipod) { 22910 device.os = 'ios'; 22911 device.ios = true; 22912 } // Export object 22913 22914 22915 return device; 22916} 22917 22918function getDevice(overrides = {}) { 22919 if (!deviceCached) { 22920 deviceCached = calcDevice(overrides); 22921 } 22922 22923 return deviceCached; 22924} 22925 22926 22927 22928/***/ }), 22929
vendor: 1,739 bytes, lines 22930-22984
22930/***/ "./node_modules/swiper/shared/get-support.js": 22931/*!***************************************************!*\ 22932 !*** ./node_modules/swiper/shared/get-support.js ***! 22933 \***************************************************/ 22934/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22935 22936__webpack_require__.r(__webpack_exports__); 22937/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22938/* harmony export */ getSupport: function() { return /* binding */ getSupport; } 22939/* harmony export */ }); 22940/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 22941 22942let support; 22943 22944function calcSupport() { 22945 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 22946 const document = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getDocument)(); 22947 return { 22948 smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style, 22949 touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch), 22950 passiveListener: function checkPassiveListener() { 22951 let supportsPassive = false; 22952 22953 try { 22954 const opts = Object.defineProperty({}, 'passive', { 22955 // eslint-disable-next-line 22956 get() { 22957 supportsPassive = true; 22958 } 22959 22960 }); 22961 window.addEventListener('testPassiveListener', null, opts); 22962 } catch (e) {// No support 22963 } 22964 22965 return supportsPassive; 22966 }(), 22967 gestures: function checkGestures() { 22968 return 'ongesturestart' in window; 22969 }() 22970 }; 22971} 22972 22973function getSupport() { 22974 if (!support) { 22975 support = calcSupport(); 22976 } 22977 22978 return support; 22979} 22980 22981 22982 22983/***/ }), 22984
vendor: 7,083 bytes, lines 22985-23203
22985/***/ "./node_modules/swiper/shared/utils.js": 22986/*!*********************************************!*\ 22987 !*** ./node_modules/swiper/shared/utils.js ***! 22988 \*********************************************/ 22989/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 22990 22991__webpack_require__.r(__webpack_exports__); 22992/* harmony export */ __webpack_require__.d(__webpack_exports__, { 22993/* harmony export */ animateCSSModeScroll: function() { return /* binding */ animateCSSModeScroll; }, 22994/* harmony export */ deleteProps: function() { return /* binding */ deleteProps; }, 22995/* harmony export */ extend: function() { return /* binding */ extend; }, 22996/* harmony export */ getComputedStyle: function() { return /* binding */ getComputedStyle; }, 22997/* harmony export */ getTranslate: function() { return /* binding */ getTranslate; }, 22998/* harmony export */ isObject: function() { return /* binding */ isObject; }, 22999/* harmony export */ nextTick: function() { return /* binding */ nextTick; }, 23000/* harmony export */ now: function() { return /* binding */ now; }, 23001/* harmony export */ setCSSProperty: function() { return /* binding */ setCSSProperty; } 23002/* harmony export */ }); 23003/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/ssr-window.esm.js"); 23004 23005 23006function deleteProps(obj) { 23007 const object = obj; 23008 Object.keys(object).forEach(key => { 23009 try { 23010 object[key] = null; 23011 } catch (e) {// no getter for object 23012 } 23013 23014 try { 23015 delete object[key]; 23016 } catch (e) {// something got wrong 23017 } 23018 }); 23019} 23020 23021function nextTick(callback, delay = 0) { 23022 return setTimeout(callback, delay); 23023} 23024 23025function now() { 23026 return Date.now(); 23027} 23028 23029function getComputedStyle(el) { 23030 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 23031 let style; 23032 23033 if (window.getComputedStyle) { 23034 style = window.getComputedStyle(el, null); 23035 } 23036 23037 if (!style && el.currentStyle) { 23038 style = el.currentStyle; 23039 } 23040 23041 if (!style) { 23042 style = el.style; 23043 } 23044 23045 return style; 23046} 23047 23048function getTranslate(el, axis = 'x') { 23049 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 23050 let matrix; 23051 let curTransform; 23052 let transformMatrix; 23053 const curStyle = getComputedStyle(el, null); 23054 23055 if (window.WebKitCSSMatrix) { 23056 curTransform = curStyle.transform || curStyle.webkitTransform; 23057 23058 if (curTransform.split(',').length > 6) { 23059 curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', '); 23060 } // Some old versions of Webkit choke when 'none' is passed; pass 23061 // empty string instead in this case 23062 23063 23064 transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); 23065 } else { 23066 transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); 23067 matrix = transformMatrix.toString().split(','); 23068 } 23069 23070 if (axis === 'x') { 23071 // Latest Chrome and webkits Fix 23072 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix 23073 else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers 23074 else curTransform = parseFloat(matrix[4]); 23075 } 23076 23077 if (axis === 'y') { 23078 // Latest Chrome and webkits Fix 23079 if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix 23080 else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers 23081 else curTransform = parseFloat(matrix[5]); 23082 } 23083 23084 return curTransform || 0; 23085} 23086 23087function isObject(o) { 23088 return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object'; 23089} 23090 23091function isNode(node) { 23092 // eslint-disable-next-line 23093 if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') { 23094 return node instanceof HTMLElement; 23095 } 23096 23097 return node && (node.nodeType === 1 || node.nodeType === 11); 23098} 23099 23100function extend(...args) { 23101 const to = Object(args[0]); 23102 const noExtend = ['__proto__', 'constructor', 'prototype']; 23103 23104 for (let i = 1; i < args.length; i += 1) { 23105 const nextSource = args[i]; 23106 23107 if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) { 23108 const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0); 23109 23110 for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { 23111 const nextKey = keysArray[nextIndex]; 23112 const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); 23113 23114 if (desc !== undefined && desc.enumerable) { 23115 if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 23116 if (nextSource[nextKey].__swiper__) { 23117 to[nextKey] = nextSource[nextKey]; 23118 } else { 23119 extend(to[nextKey], nextSource[nextKey]); 23120 } 23121 } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) { 23122 to[nextKey] = {}; 23123 23124 if (nextSource[nextKey].__swiper__) { 23125 to[nextKey] = nextSource[nextKey]; 23126 } else { 23127 extend(to[nextKey], nextSource[nextKey]); 23128 } 23129 } else { 23130 to[nextKey] = nextSource[nextKey]; 23131 } 23132 } 23133 } 23134 } 23135 } 23136 23137 return to; 23138} 23139 23140function setCSSProperty(el, varName, varValue) { 23141 el.style.setProperty(varName, varValue); 23142} 23143 23144function animateCSSModeScroll({ 23145 swiper, 23146 targetPosition, 23147 side 23148}) { 23149 const window = (0,ssr_window__WEBPACK_IMPORTED_MODULE_0__.getWindow)(); 23150 const startPosition = -swiper.translate; 23151 let startTime = null; 23152 let time; 23153 const duration = swiper.params.speed; 23154 swiper.wrapperEl.style.scrollSnapType = 'none'; 23155 window.cancelAnimationFrame(swiper.cssModeFrameID); 23156 const dir = targetPosition > startPosition ? 'next' : 'prev'; 23157 23158 const isOutOfBound = (current, target) => { 23159 return dir === 'next' && current >= target || dir === 'prev' && current <= target; 23160 }; 23161 23162 const animate = () => { 23163 time = new Date().getTime(); 23164 23165 if (startTime === null) { 23166 startTime = time; 23167 } 23168 23169 const progress = Math.max(Math.min((time - startTime) / duration, 1), 0); 23170 const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2; 23171 let currentPosition = startPosition + easeProgress * (targetPosition - startPosition); 23172 23173 if (isOutOfBound(currentPosition, targetPosition)) { 23174 currentPosition = targetPosition; 23175 } 23176 23177 swiper.wrapperEl.scrollTo({ 23178 [side]: currentPosition 23179 }); 23180 23181 if (isOutOfBound(currentPosition, targetPosition)) { 23182 swiper.wrapperEl.style.overflow = 'hidden'; 23183 swiper.wrapperEl.style.scrollSnapType = ''; 23184 setTimeout(() => { 23185 swiper.wrapperEl.style.overflow = ''; 23186 swiper.wrapperEl.scrollTo({ 23187 [side]: currentPosition 23188 }); 23189 }); 23190 window.cancelAnimationFrame(swiper.cssModeFrameID); 23191 return; 23192 } 23193 23194 swiper.cssModeFrameID = window.requestAnimationFrame(animate); 23195 }; 23196 23197 animate(); 23198} 23199 23200 23201 23202/***/ }), 23203
vendor: 9,712 bytes, lines 23204-23302
23204/***/ "./node_modules/swiper/swiper.esm.js": 23205/*!*******************************************!*\ 23206 !*** ./node_modules/swiper/swiper.esm.js ***! 23207 \*******************************************/ 23208/***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { 23209 23210__webpack_require__.r(__webpack_exports__); 23211/* harmony export */ __webpack_require__.d(__webpack_exports__, { 23212/* harmony export */ A11y: function() { return /* reexport safe */ _modules_a11y_a11y_js__WEBPACK_IMPORTED_MODULE_11__["default"]; }, 23213/* harmony export */ Autoplay: function() { return /* reexport safe */ _modules_autoplay_autoplay_js__WEBPACK_IMPORTED_MODULE_14__["default"]; }, 23214/* harmony export */ Controller: function() { return /* reexport safe */ _modules_controller_controller_js__WEBPACK_IMPORTED_MODULE_10__["default"]; }, 23215/* harmony export */ EffectCards: function() { return /* reexport safe */ _modules_effect_cards_effect_cards_js__WEBPACK_IMPORTED_MODULE_24__["default"]; }, 23216/* harmony export */ EffectCoverflow: function() { return /* reexport safe */ _modules_effect_coverflow_effect_coverflow_js__WEBPACK_IMPORTED_MODULE_22__["default"]; }, 23217/* harmony export */ EffectCreative: function() { return /* reexport safe */ _modules_effect_creative_effect_creative_js__WEBPACK_IMPORTED_MODULE_23__["default"]; }, 23218/* harmony export */ EffectCube: function() { return /* reexport safe */ _modules_effect_cube_effect_cube_js__WEBPACK_IMPORTED_MODULE_20__["default"]; }, 23219/* harmony export */ EffectFade: function() { return /* reexport safe */ _modules_effect_fade_effect_fade_js__WEBPACK_IMPORTED_MODULE_19__["default"]; }, 23220/* harmony export */ EffectFlip: function() { return /* reexport safe */ _modules_effect_flip_effect_flip_js__WEBPACK_IMPORTED_MODULE_21__["default"]; }, 23221/* harmony export */ FreeMode: function() { return /* reexport safe */ _modules_free_mode_free_mode_js__WEBPACK_IMPORTED_MODULE_16__["default"]; }, 23222/* harmony export */ Grid: function() { return /* reexport safe */ _modules_grid_grid_js__WEBPACK_IMPORTED_MODULE_17__["default"]; }, 23223/* harmony export */ HashNavigation: function() { return /* reexport safe */ _modules_hash_navigation_hash_navigation_js__WEBPACK_IMPORTED_MODULE_13__["default"]; }, 23224/* harmony export */ History: function() { return /* reexport safe */ _modules_history_history_js__WEBPACK_IMPORTED_MODULE_12__["default"]; }, 23225/* harmony export */ Keyboard: function() { return /* reexport safe */ _modules_keyboard_keyboard_js__WEBPACK_IMPORTED_MODULE_2__["default"]; }, 23226/* harmony export */ Lazy: function() { return /* reexport safe */ _modules_lazy_lazy_js__WEBPACK_IMPORTED_MODULE_9__["default"]; }, 23227/* harmony export */ Manipulation: function() { return /* reexport safe */ _modules_manipulation_manipulation_js__WEBPACK_IMPORTED_MODULE_18__["default"]; }, 23228/* harmony export */ Mousewheel: function() { return /* reexport safe */ _modules_mousewheel_mousewheel_js__WEBPACK_IMPORTED_MODULE_3__["default"]; }, 23229/* harmony export */ Navigation: function() { return /* reexport safe */ _modules_navigation_navigation_js__WEBPACK_IMPORTED_MODULE_4__["default"]; }, 23230/* harmony export */ Pagination: function() { return /* reexport safe */ _modules_pagination_pagination_js__WEBPACK_IMPORTED_MODULE_5__["default"]; }, 23231/* harmony export */ Parallax: function() { return /* reexport safe */ _modules_parallax_parallax_js__WEBPACK_IMPORTED_MODULE_7__["default"]; }, 23232/* harmony export */ Scrollbar: function() { return /* reexport safe */ _modules_scrollbar_scrollbar_js__WEBPACK_IMPORTED_MODULE_6__["default"]; }, 23233/* harmony export */ Swiper: function() { return /* reexport safe */ _core_core_js__WEBPACK_IMPORTED_MODULE_0__["default"]; }, 23234/* harmony export */ Thumbs: function() { return /* reexport safe */ _modules_thumbs_thumbs_js__WEBPACK_IMPORTED_MODULE_15__["default"]; }, 23235/* harmony export */ Virtual: function() { return /* reexport safe */ _modules_virtual_virtual_js__WEBPACK_IMPORTED_MODULE_1__["default"]; }, 23236/* harmony export */ Zoom: function() { return /* reexport safe */ _modules_zoom_zoom_js__WEBPACK_IMPORTED_MODULE_8__["default"]; }, 23237/* harmony export */ "default": function() { return /* reexport safe */ _core_core_js__WEBPACK_IMPORTED_MODULE_0__["default"]; } 23238/* harmony export */ }); 23239/* harmony import */ var _core_core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core/core.js */ "./node_modules/swiper/core/core.js"); 23240/* harmony import */ var _modules_virtual_virtual_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/virtual/virtual.js */ "./node_modules/swiper/modules/virtual/virtual.js"); 23241/* harmony import */ var _modules_keyboard_keyboard_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/keyboard/keyboard.js */ "./node_modules/swiper/modules/keyboard/keyboard.js"); 23242/* harmony import */ var _modules_mousewheel_mousewheel_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/mousewheel/mousewheel.js */ "./node_modules/swiper/modules/mousewheel/mousewheel.js"); 23243/* harmony import */ var _modules_navigation_navigation_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/navigation/navigation.js */ "./node_modules/swiper/modules/navigation/navigation.js"); 23244/* harmony import */ var _modules_pagination_pagination_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/pagination/pagination.js */ "./node_modules/swiper/modules/pagination/pagination.js"); 23245/* harmony import */ var _modules_scrollbar_scrollbar_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/scrollbar/scrollbar.js */ "./node_modules/swiper/modules/scrollbar/scrollbar.js"); 23246/* harmony import */ var _modules_parallax_parallax_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/parallax/parallax.js */ "./node_modules/swiper/modules/parallax/parallax.js"); 23247/* harmony import */ var _modules_zoom_zoom_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/zoom/zoom.js */ "./node_modules/swiper/modules/zoom/zoom.js"); 23248/* harmony import */ var _modules_lazy_lazy_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./modules/lazy/lazy.js */ "./node_modules/swiper/modules/lazy/lazy.js"); 23249/* harmony import */ var _modules_controller_controller_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/controller/controller.js */ "./node_modules/swiper/modules/controller/controller.js"); 23250/* harmony import */ var _modules_a11y_a11y_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/a11y/a11y.js */ "./node_modules/swiper/modules/a11y/a11y.js"); 23251/* harmony import */ var _modules_history_history_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modules/history/history.js */ "./node_modules/swiper/modules/history/history.js"); 23252/* harmony import */ var _modules_hash_navigation_hash_navigation_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./modules/hash-navigation/hash-navigation.js */ "./node_modules/swiper/modules/hash-navigation/hash-navigation.js"); 23253/* harmony import */ var _modules_autoplay_autoplay_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./modules/autoplay/autoplay.js */ "./node_modules/swiper/modules/autoplay/autoplay.js"); 23254/* harmony import */ var _modules_thumbs_thumbs_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./modules/thumbs/thumbs.js */ "./node_modules/swiper/modules/thumbs/thumbs.js"); 23255/* harmony import */ var _modules_free_mode_free_mode_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./modules/free-mode/free-mode.js */ "./node_modules/swiper/modules/free-mode/free-mode.js"); 23256/* harmony import */ var _modules_grid_grid_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./modules/grid/grid.js */ "./node_modules/swiper/modules/grid/grid.js"); 23257/* harmony import */ var _modules_manipulation_manipulation_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./modules/manipulation/manipulation.js */ "./node_modules/swiper/modules/manipulation/manipulation.js"); 23258/* harmony import */ var _modules_effect_fade_effect_fade_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./modules/effect-fade/effect-fade.js */ "./node_modules/swiper/modules/effect-fade/effect-fade.js"); 23259/* harmony import */ var _modules_effect_cube_effect_cube_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./modules/effect-cube/effect-cube.js */ "./node_modules/swiper/modules/effect-cube/effect-cube.js"); 23260/* harmony import */ var _modules_effect_flip_effect_flip_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./modules/effect-flip/effect-flip.js */ "./node_modules/swiper/modules/effect-flip/effect-flip.js"); 23261/* harmony import */ var _modules_effect_coverflow_effect_coverflow_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./modules/effect-coverflow/effect-coverflow.js */ "./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js"); 23262/* harmony import */ var _modules_effect_creative_effect_creative_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./modules/effect-creative/effect-creative.js */ "./node_modules/swiper/modules/effect-creative/effect-creative.js"); 23263/* harmony import */ var _modules_effect_cards_effect_cards_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./modules/effect-cards/effect-cards.js */ "./node_modules/swiper/modules/effect-cards/effect-cards.js"); 23264/** 23265 * Swiper 8.4.7 23266 * Most modern mobile touch slider and framework with hardware accelerated transitions 23267 * https://swiperjs.com 23268 * 23269 * Copyright 2014-2023 Vladimir Kharlampidi 23270 * 23271 * Released under the MIT License 23272 * 23273 * Released on: January 30, 2023 23274 */ 23275 23276 23277 23278 23279 23280 23281 23282 23283 23284 23285 23286 23287 23288 23289 23290 23291 23292 23293 23294 23295 23296 23297 23298 23299 23300 23301 23302/***/ })
vendor: 4,002 bytes, lines 23302-23390
23302 23303 23304/******/ }); 23305/************************************************************************/ 23306/******/ // The module cache 23307/******/ var __webpack_module_cache__ = {}; 23308/******/ 23309/******/ // The require function 23310/******/ function __webpack_require__(moduleId) { 23311/******/ // Check if module is in cache 23312/******/ var cachedModule = __webpack_module_cache__[moduleId]; 23313/******/ if (cachedModule !== undefined) { 23314/******/ return cachedModule.exports; 23315/******/ } 23316/******/ // Create a new module (and put it into the cache) 23317/******/ var module = __webpack_module_cache__[moduleId] = { 23318/******/ // no module.id needed 23319/******/ // no module.loaded needed 23320/******/ exports: {} 23321/******/ }; 23322/******/ 23323/******/ // Execute the module function 23324/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 23325/******/ 23326/******/ // Return the exports of the module 23327/******/ return module.exports; 23328/******/ } 23329/******/ 23330/************************************************************************/ 23331/******/ /* webpack/runtime/define property getters */ 23332/******/ !function() { 23333/******/ // define getter functions for harmony exports 23334/******/ __webpack_require__.d = function(exports, definition) { 23335/******/ for(var key in definition) { 23336/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 23337/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 23338/******/ } 23339/******/ } 23340/******/ }; 23341/******/ }(); 23342/******/ 23343/******/ /* webpack/runtime/hasOwnProperty shorthand */ 23344/******/ !function() { 23345/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } 23346/******/ }(); 23347/******/ 23348/******/ /* webpack/runtime/make namespace object */ 23349/******/ !function() { 23350/******/ // define __esModule on exports 23351/******/ __webpack_require__.r = function(exports) { 23352/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 23353/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 23354/******/ } 23355/******/ Object.defineProperty(exports, '__esModule', { value: true }); 23356/******/ }; 23357/******/ }(); 23358/******/ 23359/************************************************************************/ 23360var __webpack_exports__ = {}; 23361// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk. 23362!function() { 23363/*!********************************!*\ 23364 !*** ./src/assets/js/index.js ***! 23365 \********************************/ 23366__webpack_require__.r(__webpack_exports__); 23367/* harmony import */ var _utils_Gnav__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/Gnav */ "./src/assets/js/utils/Gnav.js"); 23368/* harmony import */ var _utils_ScrollAnim__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/ScrollAnim */ "./src/assets/js/utils/ScrollAnim.js"); 23369/* harmony import */ var _utils_Swiper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/Swiper */ "./src/assets/js/utils/Swiper.js"); 23370/* harmony import */ var _utils_TopMv__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/TopMv */ "./src/assets/js/utils/TopMv.js"); 23371/* harmony import */ var _utils_Parallax__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/Parallax */ "./src/assets/js/utils/Parallax.js"); 23372/* harmony import */ var _utils_Popup__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./utils/Popup */ "./src/assets/js/utils/Popup.js"); 23373 23374 23375 23376 23377 23378 23379window.addEventListener("DOMContentLoaded", () => { 23380 new _utils_Gnav__WEBPACK_IMPORTED_MODULE_0__["default"](); 23381 new _utils_ScrollAnim__WEBPACK_IMPORTED_MODULE_1__["default"](); 23382 new _utils_Swiper__WEBPACK_IMPORTED_MODULE_2__["default"](); 23383 new _utils_TopMv__WEBPACK_IMPORTED_MODULE_3__["default"](); 23384 new _utils_Parallax__WEBPACK_IMPORTED_MODULE_4__["default"](); 23385 new _utils_Popup__WEBPACK_IMPORTED_MODULE_5__["default"](); 23386}); 23387}(); 23388/******/ })() 23389; 23390//# sourceMappingURL=app.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.