{"version":3,"file":"Scripts/main.js","mappings":";qCAiBA,SAAWA,GACV,aAEA,IAAIC,EAAqB,SAAUC,GAClC,IACIC,EADAC,EAAIF,EAAQE,EAmMhB,GAhMAD,EAAgB,CACf,CACC,IACA,mNAED,CAAC,KAAM,aACP,CAAC,KAAM,yBACP,CAAC,KAAM,aACP,CAAC,KAAM,aACP,CAAC,KAAM,mBACP,CAAC,KAAM,aACP,CAAC,IAAK,6DACN,CACC,IACA,+EAED,CACC,IACA,2FAED,CAAC,KAAM,mBACP,CAAC,KAAM,mBACP,CACC,IACA,2LAED,CAAC,IAAK,2CACN,CACC,IACA,iGAED,CACC,IACA,2FAED,CACC,IACA,+HAED,CAAC,IAAK,qCACN,CACC,IACA,2FAED,CACC,IACA,mHAED,CAAC,KAAM,aACP,CAAC,KAAM,aACP,CAAC,IAAK,uDACN,CACC,IACA,uGAED,CAAC,KAAM,aACP,CAAC,KAAM,aACP,CACC,IACA,yQAED,CAAC,KAAM,aACP,CAAC,KAAM,aACP,CAAC,KAAM,aACP,CAAC,IAAK,mEACN,CAAC,IAAK,2CACN,CACC,IACA,6GAED,CACC,IACA,6GAED,CACC,IACA,iGAED,CAAC,KAAM,aACP,CACC,IACA,mNAED,CAAC,IAAK,uDACN,CAAC,KAAM,aACP,CAAC,IAAK,mEACN,CAAC,IAAK,qCACN,CACC,IACA,iGAED,CACC,IACA,2FAED,CACC,IACA,yNAED,CAAC,KAAM,aACP,CAAC,KAAM,yBACP,CAAC,KAAM,aACP,CAAC,KAAM,aACP,CAAC,KAAM,mBACP,CAAC,KAAM,aACP,CAAC,IAAK,6DACN,CACC,IACA,qFAED,CACC,IACA,2FAED,CAAC,KAAM,mBACP,CACC,IACA,iMAED,CAAC,IAAK,2CACN,CACC,IACA,iGAED,CACC,IACA,iGAED,CAAC,KAAM,aACP,CACC,IACA,+HAED,CAAC,IAAK,2CACN,CACC,IACA,2FAED,CACC,IACA,yHAED,CAAC,KAAM,aACP,CAAC,IAAK,uDACN,CACC,IACA,6GAED,CAAC,KAAM,aACP,CACC,IACA,yQAED,CAAC,KAAM,aACP,CAAC,KAAM,aACP,CAAC,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","sources":["webpack://opten.isolutions/./libs/gin-tonic/components/mixitup/lib/mixitup-multifilter.js","webpack://opten.isolutions/./app/components/case-slider/case-slider.ts","webpack://opten.isolutions/./app/components/clock/clock.ts","webpack://opten.isolutions/./app/components/cookie/cookie.ts","webpack://opten.isolutions/./app/components/filter/index.ts","webpack://opten.isolutions/./app/components/hamburger/hamburger.ts","webpack://opten.isolutions/./app/components/hero/hero.ts","webpack://opten.isolutions/./app/components/history/history.ts","webpack://opten.isolutions/./app/components/lets-talk/lets-talk-rte.ts","webpack://opten.isolutions/./app/components/lets-talk/lets-talk.ts","webpack://opten.isolutions/./app/components/lists/lists.ts","webpack://opten.isolutions/./app/components/lists/logo-list.ts","webpack://opten.isolutions/./app/components/load-more/index.ts","webpack://opten.isolutions/./app/components/modal/img-modal.ts","webpack://opten.isolutions/./app/components/modal/modal.ts","webpack://opten.isolutions/./app/components/multi-filter/index.ts","webpack://opten.isolutions/./app/components/nav/toggle-visibility.ts","webpack://opten.isolutions/./app/components/sliders/sliders.ts","webpack://opten.isolutions/./app/components/stacks/stacks.ts","webpack://opten.isolutions/./app/components/statement/statement.ts","webpack://opten.isolutions/./app/components/text/highlight.ts","webpack://opten.isolutions/./app/pages/team/team.ts","webpack://opten.isolutions/./libs/gin-tonic/components/collapse/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/collapse/index.ts","webpack://opten.isolutions/./libs/gin-tonic/components/counter/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/counter/index.ts","webpack://opten.isolutions/./libs/gin-tonic/components/drag-scroll/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/drag-scroll/index.ts","webpack://opten.isolutions/./libs/gin-tonic/components/gallery-slider/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/intersect/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/mixitup/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/mixitup/index.ts","webpack://opten.isolutions/./libs/gin-tonic/components/modal-gallery/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/modal-gallery/index.ts","webpack://opten.isolutions/./libs/gin-tonic/components/modal/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/modal/index.ts","webpack://opten.isolutions/./libs/gin-tonic/components/player/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/player/index.ts","webpack://opten.isolutions/./libs/gin-tonic/components/scroll-magic/box.ts","webpack://opten.isolutions/./libs/gin-tonic/components/scroll-magic/fade-in.ts","webpack://opten.isolutions/./libs/gin-tonic/components/scroll-magic/slide-horizontal.ts","webpack://opten.isolutions/./libs/gin-tonic/components/scroll-magic/zoom.ts","webpack://opten.isolutions/./libs/gin-tonic/components/select/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/select/index.ts","webpack://opten.isolutions/./libs/gin-tonic/components/sticky/index.ts","webpack://opten.isolutions/./libs/gin-tonic/components/swiper/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/swiper/index.ts","webpack://opten.isolutions/./libs/gin-tonic/components/tabs/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/tabs/index.ts","webpack://opten.isolutions/./libs/gin-tonic/components/tween-effect/component.ts","webpack://opten.isolutions/./libs/gin-tonic/components/tween-effect/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/common/download-file-url.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/common/empty-guid.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/common/format-css-unit/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/common/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/common/is-null-or-empty.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/common/merge-options/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/common/new-guid/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/common/throttleTimeout/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/compiler/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/clicked-inside-element-with-class/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/create-node/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/first-by-class/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/get-css/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/get-parent-or-self-with-class/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/get-parent-with-class/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/get-parents-or-self/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/get-parents/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/get-selector-element-from-element/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/get-selector-from-element/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/get-styles/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/get-trigger-elements-form-element/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/get-window-scroll-top/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/initialize-click-elements/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/is-ancestor-of-class/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/is-html-element/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/dom/safe-apply-css-value/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/events/event-dispatcher/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/events/event-listener-or-timeout/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/events/event-namespace-factory/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/http/fetch-html.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/keycodes/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/number/get-parsed-css-unit.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/number/parse-css-unit.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/overlay/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/overlay/overlay-implementation.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/overlay/overlay-options.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/overlay/overlay.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/overlay/position/connected-position-strategy.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/overlay/position/global-position-strategy.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/overlay/position/overlay-position-builder.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/overlay/scroll/base-scroll-strategy.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/overlay/scroll/reposition-scroll-strategy.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/transition/add-transition-end-listener/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/transition/get-transition-end-event-name/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/url/remove-query-string-from-path/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/viewport/calculate-overlay/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/viewport/is-element-clipped-by-scrolling/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/viewport/is-element-outside-window/index.ts","webpack://opten.isolutions/./libs/gin-tonic/helpers/viewport/is-element-scrolled-outside-view/index.ts","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/createClass.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/defineProperty.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/extends.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/inherits.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/interopRequireDefault.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/toPrimitive.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/toPropertyKey.js","webpack://opten.isolutions/./node_modules/@babel/runtime/helpers/typeof.js","webpack://opten.isolutions/./node_modules/animejs/lib/anime.es.js","webpack://opten.isolutions/./node_modules/micromodal/dist/micromodal.es.js","webpack://opten.isolutions/./node_modules/mixitup/dist/mixitup.js","webpack://opten.isolutions/./node_modules/ssr-window/ssr-window.esm.js","webpack://opten.isolutions/./node_modules/stickybits/dist/stickybits.es.js","webpack://opten.isolutions/./node_modules/swiper/core/breakpoints/getBreakpoint.js","webpack://opten.isolutions/./node_modules/swiper/core/breakpoints/index.js","webpack://opten.isolutions/./node_modules/swiper/core/breakpoints/setBreakpoint.js","webpack://opten.isolutions/./node_modules/swiper/core/check-overflow/index.js","webpack://opten.isolutions/./node_modules/swiper/core/classes/addClasses.js","webpack://opten.isolutions/./node_modules/swiper/core/classes/index.js","webpack://opten.isolutions/./node_modules/swiper/core/classes/removeClasses.js","webpack://opten.isolutions/./node_modules/swiper/core/core.js","webpack://opten.isolutions/./node_modules/swiper/core/defaults.js","webpack://opten.isolutions/./node_modules/swiper/core/events-emitter.js","webpack://opten.isolutions/./node_modules/swiper/core/events/index.js","webpack://opten.isolutions/./node_modules/swiper/core/events/onClick.js","webpack://opten.isolutions/./node_modules/swiper/core/events/onLoad.js","webpack://opten.isolutions/./node_modules/swiper/core/events/onResize.js","webpack://opten.isolutions/./node_modules/swiper/core/events/onScroll.js","webpack://opten.isolutions/./node_modules/swiper/core/events/onTouchEnd.js","webpack://opten.isolutions/./node_modules/swiper/core/events/onTouchMove.js","webpack://opten.isolutions/./node_modules/swiper/core/events/onTouchStart.js","webpack://opten.isolutions/./node_modules/swiper/core/grab-cursor/index.js","webpack://opten.isolutions/./node_modules/swiper/core/grab-cursor/setGrabCursor.js","webpack://opten.isolutions/./node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","webpack://opten.isolutions/./node_modules/swiper/core/loop/index.js","webpack://opten.isolutions/./node_modules/swiper/core/loop/loopCreate.js","webpack://opten.isolutions/./node_modules/swiper/core/loop/loopDestroy.js","webpack://opten.isolutions/./node_modules/swiper/core/loop/loopFix.js","webpack://opten.isolutions/./node_modules/swiper/core/moduleExtendParams.js","webpack://opten.isolutions/./node_modules/swiper/core/modules/observer/observer.js","webpack://opten.isolutions/./node_modules/swiper/core/modules/resize/resize.js","webpack://opten.isolutions/./node_modules/swiper/core/slide/index.js","webpack://opten.isolutions/./node_modules/swiper/core/slide/slideNext.js","webpack://opten.isolutions/./node_modules/swiper/core/slide/slidePrev.js","webpack://opten.isolutions/./node_modules/swiper/core/slide/slideReset.js","webpack://opten.isolutions/./node_modules/swiper/core/slide/slideTo.js","webpack://opten.isolutions/./node_modules/swiper/core/slide/slideToClickedSlide.js","webpack://opten.isolutions/./node_modules/swiper/core/slide/slideToClosest.js","webpack://opten.isolutions/./node_modules/swiper/core/slide/slideToLoop.js","webpack://opten.isolutions/./node_modules/swiper/core/transition/index.js","webpack://opten.isolutions/./node_modules/swiper/core/transition/setTransition.js","webpack://opten.isolutions/./node_modules/swiper/core/transition/transitionEmit.js","webpack://opten.isolutions/./node_modules/swiper/core/transition/transitionEnd.js","webpack://opten.isolutions/./node_modules/swiper/core/transition/transitionStart.js","webpack://opten.isolutions/./node_modules/swiper/core/translate/getTranslate.js","webpack://opten.isolutions/./node_modules/swiper/core/translate/index.js","webpack://opten.isolutions/./node_modules/swiper/core/translate/maxTranslate.js","webpack://opten.isolutions/./node_modules/swiper/core/translate/minTranslate.js","webpack://opten.isolutions/./node_modules/swiper/core/translate/setTranslate.js","webpack://opten.isolutions/./node_modules/swiper/core/translate/translateTo.js","webpack://opten.isolutions/./node_modules/swiper/core/update/index.js","webpack://opten.isolutions/./node_modules/swiper/core/update/updateActiveIndex.js","webpack://opten.isolutions/./node_modules/swiper/core/update/updateAutoHeight.js","webpack://opten.isolutions/./node_modules/swiper/core/update/updateClickedSlide.js","webpack://opten.isolutions/./node_modules/swiper/core/update/updateProgress.js","webpack://opten.isolutions/./node_modules/swiper/core/update/updateSize.js","webpack://opten.isolutions/./node_modules/swiper/core/update/updateSlides.js","webpack://opten.isolutions/./node_modules/swiper/core/update/updateSlidesClasses.js","webpack://opten.isolutions/./node_modules/swiper/core/update/updateSlidesOffset.js","webpack://opten.isolutions/./node_modules/swiper/core/update/updateSlidesProgress.js","webpack://opten.isolutions/./node_modules/swiper/modules/a11y/a11y.js","webpack://opten.isolutions/./node_modules/swiper/modules/autoplay/autoplay.js","webpack://opten.isolutions/./node_modules/swiper/modules/controller/controller.js","webpack://opten.isolutions/./node_modules/swiper/modules/effect-cards/effect-cards.js","webpack://opten.isolutions/./node_modules/swiper/modules/effect-coverflow/effect-coverflow.js","webpack://opten.isolutions/./node_modules/swiper/modules/effect-creative/effect-creative.js","webpack://opten.isolutions/./node_modules/swiper/modules/effect-cube/effect-cube.js","webpack://opten.isolutions/./node_modules/swiper/modules/effect-fade/effect-fade.js","webpack://opten.isolutions/./node_modules/swiper/modules/effect-flip/effect-flip.js","webpack://opten.isolutions/./node_modules/swiper/modules/free-mode/free-mode.js","webpack://opten.isolutions/./node_modules/swiper/modules/grid/grid.js","webpack://opten.isolutions/./node_modules/swiper/modules/hash-navigation/hash-navigation.js","webpack://opten.isolutions/./node_modules/swiper/modules/history/history.js","webpack://opten.isolutions/./node_modules/swiper/modules/keyboard/keyboard.js","webpack://opten.isolutions/./node_modules/swiper/modules/manipulation/manipulation.js","webpack://opten.isolutions/./node_modules/swiper/modules/manipulation/methods/addSlide.js","webpack://opten.isolutions/./node_modules/swiper/modules/manipulation/methods/appendSlide.js","webpack://opten.isolutions/./node_modules/swiper/modules/manipulation/methods/prependSlide.js","webpack://opten.isolutions/./node_modules/swiper/modules/manipulation/methods/removeAllSlides.js","webpack://opten.isolutions/./node_modules/swiper/modules/manipulation/methods/removeSlide.js","webpack://opten.isolutions/./node_modules/swiper/modules/mousewheel/mousewheel.js","webpack://opten.isolutions/./node_modules/swiper/modules/navigation/navigation.js","webpack://opten.isolutions/./node_modules/swiper/modules/pagination/pagination.js","webpack://opten.isolutions/./node_modules/swiper/modules/parallax/parallax.js","webpack://opten.isolutions/./node_modules/swiper/modules/scrollbar/scrollbar.js","webpack://opten.isolutions/./node_modules/swiper/modules/thumbs/thumbs.js","webpack://opten.isolutions/./node_modules/swiper/modules/virtual/virtual.js","webpack://opten.isolutions/./node_modules/swiper/modules/zoom/zoom.js","webpack://opten.isolutions/./node_modules/swiper/shared/classes-to-selector.js","webpack://opten.isolutions/./node_modules/swiper/shared/create-element-if-not-defined.js","webpack://opten.isolutions/./node_modules/swiper/shared/create-shadow.js","webpack://opten.isolutions/./node_modules/swiper/shared/effect-init.js","webpack://opten.isolutions/./node_modules/swiper/shared/effect-target.js","webpack://opten.isolutions/./node_modules/swiper/shared/effect-virtual-transition-end.js","webpack://opten.isolutions/./node_modules/swiper/shared/get-browser.js","webpack://opten.isolutions/./node_modules/swiper/shared/get-device.js","webpack://opten.isolutions/./node_modules/swiper/shared/get-support.js","webpack://opten.isolutions/./node_modules/swiper/shared/process-lazy-preloader.js","webpack://opten.isolutions/./node_modules/swiper/shared/utils.js","webpack://opten.isolutions/./node_modules/swiper/swiper.esm.js","webpack://opten.isolutions/webpack/bootstrap","webpack://opten.isolutions/webpack/runtime/make namespace object","webpack://opten.isolutions/./app/main.ts"],"sourcesContent":["/**!\n * MixItUp MultiFilter v3.3.6\n * A UI-builder for powerful multidimensional filtering\n * Build 293e0dda-087e-4a76-aadf-e3e8b311b81f\n *\n * Requires mixitup.js >= v^3.1.2\n *\n * @copyright Copyright 2014-2020 KunkaLabs Limited.\n * @author KunkaLabs Limited.\n * @link https://www.kunkalabs.com/mixitup-multifilter/\n *\n * @license Commercial use requires a commercial license.\n * https://www.kunkalabs.com/mixitup-multifilter/licenses/\n *\n * Non-commercial use permitted under same terms as license.\n * http://creativecommons.org/licenses/by-nc/3.0/\n */\n(function (window) {\n\t'use strict';\n\n\tvar mixitupMultifilter = function (mixitup) {\n\t\tvar h = mixitup.h;\n\t\tvar diacriticsMap;\n\n\t\tdiacriticsMap = [\n\t\t\t[\n\t\t\t\t'A',\n\t\t\t\t/[\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F]/g,\n\t\t\t],\n\t\t\t['AA', /[\\uA732]/g],\n\t\t\t['AE', /[\\u00C6\\u01FC\\u01E2]/g],\n\t\t\t['AO', /[\\uA734]/g],\n\t\t\t['AU', /[\\uA736]/g],\n\t\t\t['AV', /[\\uA738\\uA73A]/g],\n\t\t\t['AY', /[\\uA73C]/g],\n\t\t\t['B', /[\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181]/g],\n\t\t\t[\n\t\t\t\t'C',\n\t\t\t\t/[\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'D',\n\t\t\t\t/[\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779]/g,\n\t\t\t],\n\t\t\t['DZ', /[\\u01F1\\u01C4]/g],\n\t\t\t['Dz', /[\\u01F2\\u01C5]/g],\n\t\t\t[\n\t\t\t\t'E',\n\t\t\t\t/[\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E]/g,\n\t\t\t],\n\t\t\t['F', /[\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B]/g],\n\t\t\t[\n\t\t\t\t'G',\n\t\t\t\t/[\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'H',\n\t\t\t\t/[\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'I',\n\t\t\t\t/[\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197]/g,\n\t\t\t],\n\t\t\t['J', /[\\u004A\\u24BF\\uFF2A\\u0134\\u0248]/g],\n\t\t\t[\n\t\t\t\t'K',\n\t\t\t\t/[\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'L',\n\t\t\t\t/[\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780]/g,\n\t\t\t],\n\t\t\t['LJ', /[\\u01C7]/g],\n\t\t\t['Lj', /[\\u01C8]/g],\n\t\t\t['M', /[\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C]/g],\n\t\t\t[\n\t\t\t\t'N',\n\t\t\t\t/[\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4]/g,\n\t\t\t],\n\t\t\t['NJ', /[\\u01CA]/g],\n\t\t\t['Nj', /[\\u01CB]/g],\n\t\t\t[\n\t\t\t\t'O',\n\t\t\t\t/[\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C]/g,\n\t\t\t],\n\t\t\t['OI', /[\\u01A2]/g],\n\t\t\t['OO', /[\\uA74E]/g],\n\t\t\t['OU', /[\\u0222]/g],\n\t\t\t['P', /[\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754]/g],\n\t\t\t['Q', /[\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A]/g],\n\t\t\t[\n\t\t\t\t'R',\n\t\t\t\t/[\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'S',\n\t\t\t\t/[\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'T',\n\t\t\t\t/[\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786]/g,\n\t\t\t],\n\t\t\t['TZ', /[\\uA728]/g],\n\t\t\t[\n\t\t\t\t'U',\n\t\t\t\t/[\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244]/g,\n\t\t\t],\n\t\t\t['V', /[\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245]/g],\n\t\t\t['VY', /[\\uA760]/g],\n\t\t\t['W', /[\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72]/g],\n\t\t\t['X', /[\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C]/g],\n\t\t\t[\n\t\t\t\t'Y',\n\t\t\t\t/[\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'Z',\n\t\t\t\t/[\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'a',\n\t\t\t\t/[\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250]/g,\n\t\t\t],\n\t\t\t['aa', /[\\uA733]/g],\n\t\t\t['ae', /[\\u00E6\\u01FD\\u01E3]/g],\n\t\t\t['ao', /[\\uA735]/g],\n\t\t\t['au', /[\\uA737]/g],\n\t\t\t['av', /[\\uA739\\uA73B]/g],\n\t\t\t['ay', /[\\uA73D]/g],\n\t\t\t['b', /[\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253]/g],\n\t\t\t[\n\t\t\t\t'c',\n\t\t\t\t/[\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'd',\n\t\t\t\t/[\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A]/g,\n\t\t\t],\n\t\t\t['dz', /[\\u01F3\\u01C6]/g],\n\t\t\t[\n\t\t\t\t'e',\n\t\t\t\t/[\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD]/g,\n\t\t\t],\n\t\t\t['f', /[\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C]/g],\n\t\t\t[\n\t\t\t\t'g',\n\t\t\t\t/[\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'h',\n\t\t\t\t/[\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265]/g,\n\t\t\t],\n\t\t\t['hv', /[\\u0195]/g],\n\t\t\t[\n\t\t\t\t'i',\n\t\t\t\t/[\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131]/g,\n\t\t\t],\n\t\t\t['j', /[\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249]/g],\n\t\t\t[\n\t\t\t\t'k',\n\t\t\t\t/[\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'l',\n\t\t\t\t/[\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747]/g,\n\t\t\t],\n\t\t\t['lj', /[\\u01C9]/g],\n\t\t\t['m', /[\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F]/g],\n\t\t\t[\n\t\t\t\t'n',\n\t\t\t\t/[\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5]/g,\n\t\t\t],\n\t\t\t['nj', /[\\u01CC]/g],\n\t\t\t[\n\t\t\t\t'o',\n\t\t\t\t/[\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275]/g,\n\t\t\t],\n\t\t\t['oi', /[\\u01A3]/g],\n\t\t\t['ou', /[\\u0223]/g],\n\t\t\t['oo', /[\\uA74F]/g],\n\t\t\t['p', /[\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755]/g],\n\t\t\t['q', /[\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759]/g],\n\t\t\t[\n\t\t\t\t'r',\n\t\t\t\t/[\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t's',\n\t\t\t\t/[\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t't',\n\t\t\t\t/[\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787]/g,\n\t\t\t],\n\t\t\t['tz', /[\\uA729]/g],\n\t\t\t[\n\t\t\t\t'u',\n\t\t\t\t/[\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289]/g,\n\t\t\t],\n\t\t\t['v', /[\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C]/g],\n\t\t\t['vy', /[\\uA761]/g],\n\t\t\t[\n\t\t\t\t'w',\n\t\t\t\t/[\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73]/g,\n\t\t\t],\n\t\t\t['x', /[\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D]/g],\n\t\t\t[\n\t\t\t\t'y',\n\t\t\t\t/[\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF]/g,\n\t\t\t],\n\t\t\t[\n\t\t\t\t'z',\n\t\t\t\t/[\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763]/g,\n\t\t\t],\n\t\t];\n\n\t\tif (\n\t\t\t!mixitup.CORE_VERSION ||\n\t\t\t!h.compareVersions(\n\t\t\t\tmixitupMultifilter.REQUIRE_CORE_VERSION,\n\t\t\t\tmixitup.CORE_VERSION\n\t\t\t)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t'[MixItUp Multifilter] MixItUp Multifilter v' +\n\t\t\t\t\tmixitupMultifilter.EXTENSION_VERSION +\n\t\t\t\t\t' requires at least MixItUp v' +\n\t\t\t\t\tmixitupMultifilter.REQUIRE_CORE_VERSION\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * A group of optional callback functions to be invoked at various\n\t\t * points within the lifecycle of a mixer operation.\n\t\t *\n\t\t * @constructor\n\t\t * @memberof mixitup.Config\n\t\t * @name callbacks\n\t\t * @namespace\n\t\t * @public\n\t\t * @since 3.0.0\n\t\t */\n\n\t\tmixitup.ConfigCallbacks.registerAction(\n\t\t\t'afterConstruct',\n\t\t\t'multifilter',\n\t\t\tfunction () {\n\t\t\t\t/**\n\t\t\t\t * A callback function invoked whenever MultiFilter filter groups\n\t\t\t\t * are parsed. This occurs whenever the user interacts with filter\n\t\t\t\t * group UI, or when the `parseFilterGroups()` API method is called,\n\t\t\t\t * but before the resulting filter operation has been triggered.\n\t\t\t\t *\n\t\t\t\t * By default, this generates the appropriate compound selector and\n\t\t\t\t * filters the mixer using a `multimix()` API call internally. This\n\t\t\t\t * callback can be used to transform the multimix command object sent\n\t\t\t\t * to this API call.\n\t\t\t\t *\n\t\t\t\t * This is particularly useful when additional behavior such as sorting\n\t\t\t\t * or pagination must be taken into account when using the MultiFilter API.\n\t\t\t\t *\n\t\t\t\t * The callback receives the generated multimix command object, and must\n\t\t\t\t * also return a valid multimix command object.\n\t\t\t\t *\n\t\t\t\t * @example Example: Overriding the default filtering behavior with `onParseFilterGroups`\n\t\t\t\t * var mixer = mixitup(containerEl, {\n\t\t\t\t * callbacks: {\n\t\t\t\t * onParseFilterGroups: function(command) {\n\t\t\t\t * command.paginate = 3;\n\t\t\t\t * command.sort = 'default:desc';\n\t\t\t\t *\n\t\t\t\t * return command;\n\t\t\t\t * }\n\t\t\t\t * }\n\t\t\t\t * });\n\t\t\t\t *\n\t\t\t\t * @name onParseFilterGroups\n\t\t\t\t * @memberof mixitup.Config.callbacks\n\t\t\t\t * @instance\n\t\t\t\t * @type {function}\n\t\t\t\t * @default null\n\t\t\t\t */\n\n\t\t\t\tthis.onParseFilterGroups = null;\n\t\t\t}\n\t\t);\n\n\t\t/**\n\t\t * A group of properties defining the behavior of your multifilter UI.\n\t\t *\n\t\t * @constructor\n\t\t * @memberof mixitup.Config\n\t\t * @name multifilter\n\t\t * @namespace\n\t\t * @public\n\t\t * @since 3.0.0\n\t\t */\n\n\t\tmixitup.ConfigMultifilter = function () {\n\t\t\t/**\n\t\t\t * A boolean dictating whether or not to enable multifilter functionality.\n\t\t\t *\n\t\t\t * If `true`, MixItUp will query the DOM for any elements with a\n\t\t\t * `data-filter-group` attribute present on instantiation.\n\t\t\t *\n\t\t\t * @name enable\n\t\t\t * @memberof mixitup.Config.multifilter\n\t\t\t * @instance\n\t\t\t * @type {boolean}\n\t\t\t * @default false\n\t\t\t */\n\n\t\t\tthis.enable = false;\n\n\t\t\t/**\n\t\t\t * A string dictating the logic to use when concatenating selectors within\n\t\t\t * individual filter groups.\n\t\t\t *\n\t\t\t * If set to `'or'` (default), targets will be shown if they match any\n\t\t\t * active filter in the group.\n\t\t\t *\n\t\t\t * If set to `'and'`, targets will be shown only if they match\n\t\t\t * all active filters in the group.\n\t\t\t *\n\t\t\t * @name logicWithinGroup\n\t\t\t * @memberof mixitup.Config.multifilter\n\t\t\t * @instance\n\t\t\t * @type {string}\n\t\t\t * @default 'or'\n\t\t\t */\n\n\t\t\tthis.logicWithinGroup = 'or';\n\n\t\t\t/**\n\t\t\t * A string dictating the logic to use when concatenating each group's\n\t\t\t * selectors into one single selector.\n\t\t\t *\n\t\t\t * If set to `'and'` (default), targets will be shown only if they match\n\t\t\t * the combined active selectors of all groups.\n\t\t\t *\n\t\t\t * If set to `'or'`, targets will be shown if they match the active selectors\n\t\t\t * of any individual group.\n\t\t\t *\n\t\t\t * @name logicBetweenGroups\n\t\t\t * @memberof mixitup.Config.multifilter\n\t\t\t * @instance\n\t\t\t * @type {string}\n\t\t\t * @default 'and'\n\t\t\t */\n\n\t\t\tthis.logicBetweenGroups = 'and';\n\n\t\t\t/**\n\t\t\t * An integer dictating the minimum number of characters at which the value\n\t\t\t * of a text input will be included as a multifilter. This prevents short or\n\t\t\t * incomplete words with many potential matches from triggering\n\t\t\t * filter operations.\n\t\t\t *\n\t\t\t * @name minSearchLength\n\t\t\t * @memberof mixitup.Config.multifilter\n\t\t\t * @instance\n\t\t\t * @type {number}\n\t\t\t * @default 3\n\t\t\t */\n\n\t\t\tthis.minSearchLength = 3;\n\n\t\t\t/**\n\t\t\t * A string dictating when the parsing of filter groups should occur.\n\t\t\t *\n\t\t\t * If set to `'change'` (default), the mixer will be filtered whenever the\n\t\t\t * filtering UI is interacted with. The mode provides real-time filtering with\n\t\t\t * instant feedback.\n\t\t\t *\n\t\t\t * If set to `'submit'`, the mixer will only be filtered when a submit button is\n\t\t\t * clicked (if using a `
` element as a parent). This enables the user to firstly\n\t\t\t * make their selection, and then trigger filtering once they have\n\t\t\t * finished making their selection.\n\t\t\t *\n\t\t\t * Alternatively, the `mixer.parseFilterGroups()` method can be called via the API at any\n\t\t\t * time to trigger the parsing of filter groups and filter the mixer.\n\t\t\t *\n\t\t\t * @name parseOn\n\t\t\t * @memberof mixitup.Config.multifilter\n\t\t\t * @instance\n\t\t\t * @type {string}\n\t\t\t * @default 'change'\n\t\t\t */\n\n\t\t\tthis.parseOn = 'change';\n\n\t\t\t/**\n\t\t\t * An integer dictating the duration in ms that must elapse between keyup\n\t\t\t * events in order to trigger a change.\n\t\t\t *\n\t\t\t * Setting a comfortable delay of ~350ms prevents the mixer from being\n\t\t\t * thrashed while typing occurs.\n\t\t\t *\n\t\t\t * @name keyupThrottleDuration\n\t\t\t * @memberof mixitup.Config.multifilter\n\t\t\t * @instance\n\t\t\t * @type {number}\n\t\t\t * @default 350\n\t\t\t */\n\n\t\t\tthis.keyupThrottleDuration = 350;\n\n\t\t\th.seal(this);\n\t\t};\n\n\t\t/**\n\t\t * The MixItUp configuration object is extended with properties relating to\n\t\t * the MultiFilter extension.\n\t\t *\n\t\t * For the full list of configuration options, please refer to the MixItUp\n\t\t * core documentation.\n\t\t *\n\t\t * @constructor\n\t\t * @memberof mixitup\n\t\t * @name Config\n\t\t * @namespace\n\t\t * @public\n\t\t * @since 2.0.0\n\t\t */\n\n\t\tmixitup.Config.registerAction(\n\t\t\t'beforeConstruct',\n\t\t\t'multifilter',\n\t\t\tfunction () {\n\t\t\t\tthis.multifilter = new mixitup.ConfigMultifilter();\n\t\t\t}\n\t\t);\n\n\t\tmixitup.MultifilterFormEventTracker = function () {\n\t\t\tthis.form = null;\n\t\t\tthis.totalBound = 0;\n\t\t\tthis.totalHandled = 0;\n\n\t\t\th.seal(this);\n\t\t};\n\n\t\tmixitup.FilterGroupDom = function () {\n\t\t\tthis.el = null;\n\t\t\tthis.form = null;\n\n\t\t\th.seal(this);\n\t\t};\n\n\t\tmixitup.FilterGroup = function () {\n\t\t\tthis.name = '';\n\t\t\tthis.dom = new mixitup.FilterGroupDom();\n\t\t\tthis.activeSelectors = [];\n\t\t\tthis.activeFilters = [];\n\t\t\tthis.activeToggles = [];\n\t\t\tthis.handler = null;\n\t\t\tthis.mixer = null;\n\t\t\tthis.logic = 'or';\n\t\t\tthis.parseOn = 'change';\n\t\t\tthis.keyupTimeout = -1;\n\n\t\t\th.seal(this);\n\t\t};\n\n\t\th.extend(mixitup.FilterGroup.prototype, {\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * @param {HTMLELement} el\n\t\t\t * @param {mixitup.Mixer} mixer\n\t\t\t * @return {void}\n\t\t\t */\n\n\t\t\tinit: function (el, mixer) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tlogic = el.getAttribute('data-logic');\n\n\t\t\t\tself.dom.el = el;\n\n\t\t\t\tthis.name = self.dom.el.getAttribute('data-filter-group') || '';\n\n\t\t\t\tself.cacheDom();\n\n\t\t\t\tif (self.dom.form) {\n\t\t\t\t\tself.enableButtons();\n\t\t\t\t}\n\n\t\t\t\tself.mixer = mixer;\n\n\t\t\t\tif (\n\t\t\t\t\t(logic && logic.toLowerCase() === 'and') ||\n\t\t\t\t\tmixer.config.multifilter.logicWithinGroup === 'and'\n\t\t\t\t) {\n\t\t\t\t\t// override default group logic\n\n\t\t\t\t\tself.logic = 'and';\n\t\t\t\t}\n\n\t\t\t\tself.bindEvents();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * @return {void}\n\t\t\t */\n\n\t\t\tcacheDom: function () {\n\t\t\t\tvar self = this;\n\n\t\t\t\tself.dom.form = h.closestParent(self.dom.el, 'form', true);\n\t\t\t},\n\n\t\t\tenableButtons: function () {\n\t\t\t\tvar self = this,\n\t\t\t\t\tbuttons = self.dom.form.querySelectorAll(\n\t\t\t\t\t\t'button[type=\"submit\"]:disabled'\n\t\t\t\t\t),\n\t\t\t\t\tbutton = null,\n\t\t\t\t\ti = -1;\n\n\t\t\t\tfor (i = 0; (button = buttons[i]); i++) {\n\t\t\t\t\tif (button.disabled) {\n\t\t\t\t\t\tbutton.disabled = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * @return {void}\n\t\t\t */\n\n\t\t\tbindEvents: function () {\n\t\t\t\tvar self = this;\n\n\t\t\t\tself.handler = function (e) {\n\t\t\t\t\tswitch (e.type) {\n\t\t\t\t\t\tcase 'reset':\n\t\t\t\t\t\tcase 'submit':\n\t\t\t\t\t\t\tself.handleFormEvent(e);\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tself['handle' + h.pascalCase(e.type)](e);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\th.on(self.dom.el, 'click', self.handler);\n\t\t\t\th.on(self.dom.el, 'change', self.handler);\n\t\t\t\th.on(self.dom.el, 'keyup', self.handler);\n\n\t\t\t\tif (self.dom.form) {\n\t\t\t\t\th.on(self.dom.form, 'reset', self.handler);\n\t\t\t\t\th.on(self.dom.form, 'submit', self.handler);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * @return {void}\n\t\t\t */\n\n\t\t\tunbindEvents: function () {\n\t\t\t\tvar self = this;\n\n\t\t\t\th.off(self.dom.el, 'click', self.handler);\n\t\t\t\th.off(self.dom.el, 'change', self.handler);\n\t\t\t\th.off(self.dom.el, 'keyup', self.handler);\n\n\t\t\t\tif (self.dom.form) {\n\t\t\t\t\th.off(self.dom.form, 'reset', self.handler);\n\t\t\t\t\th.off(self.dom.form, 'submit', self.handler);\n\t\t\t\t}\n\n\t\t\t\tself.handler = null;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * @param {MouseEvent} e\n\t\t\t * @return {void}\n\t\t\t */\n\n\t\t\thandleClick: function (e) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tmixer = self.mixer,\n\t\t\t\t\treturnValue = null,\n\t\t\t\t\tcontrolEl = h.closestParent(\n\t\t\t\t\t\te.target,\n\t\t\t\t\t\t'[data-filter], [data-toggle]',\n\t\t\t\t\t\ttrue\n\t\t\t\t\t),\n\t\t\t\t\tcontrolSelector = '',\n\t\t\t\t\tindex = -1,\n\t\t\t\t\tselector = '';\n\n\t\t\t\tif (!controlEl) return;\n\n\t\t\t\tif (\n\t\t\t\t\t(controlSelector = self.mixer.config.selectors.control) &&\n\t\t\t\t\t!controlEl.matches(controlSelector)\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tif (!mixer.lastClicked) {\n\t\t\t\t\tmixer.lastClicked = controlEl;\n\t\t\t\t}\n\n\t\t\t\tif (typeof mixer.config.callbacks.onMixClick === 'function') {\n\t\t\t\t\treturnValue = mixer.config.callbacks.onMixClick.call(\n\t\t\t\t\t\tmixer.lastClicked,\n\t\t\t\t\t\tmixer.state,\n\t\t\t\t\t\te,\n\t\t\t\t\t\tself\n\t\t\t\t\t);\n\n\t\t\t\t\tif (returnValue === false) {\n\t\t\t\t\t\t// User has returned `false` from the callback, so do not handle click\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (controlEl.matches('[data-filter]')) {\n\t\t\t\t\tselector = controlEl.getAttribute('data-filter');\n\n\t\t\t\t\tself.activeToggles = [];\n\t\t\t\t\tself.activeSelectors = self.activeFilters = [selector];\n\t\t\t\t} else if (controlEl.matches('[data-toggle]')) {\n\t\t\t\t\tselector = controlEl.getAttribute('data-toggle');\n\n\t\t\t\t\tself.activeFilters = [];\n\n\t\t\t\t\tif ((index = self.activeToggles.indexOf(selector)) > -1) {\n\t\t\t\t\t\tself.activeToggles.splice(index, 1);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.activeToggles.push(selector);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (self.logic === 'and') {\n\t\t\t\t\t\t// Compress into single node\n\n\t\t\t\t\t\tself.activeSelectors = [self.activeToggles];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.activeSelectors = self.activeToggles;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tself.updateControls();\n\n\t\t\t\tif (self.mixer.config.multifilter.parseOn === 'change') {\n\t\t\t\t\tself.mixer.parseFilterGroups();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * @param {Event} e\n\t\t\t * @return {void}\n\t\t\t */\n\n\t\t\thandleChange: function (e) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tinput = e.target;\n\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tswitch (input.type) {\n\t\t\t\t\tcase 'text':\n\t\t\t\t\tcase 'search':\n\t\t\t\t\tcase 'email':\n\t\t\t\t\tcase 'select-one':\n\t\t\t\t\tcase 'radio':\n\t\t\t\t\t\tself.getSingleValue(input);\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'checkbox':\n\t\t\t\t\tcase 'select-multiple':\n\t\t\t\t\t\tself.getMultipleValues(input);\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif (self.mixer.config.multifilter.parseOn === 'change') {\n\t\t\t\t\tself.mixer.parseFilterGroups();\n\t\t\t\t}\n\t\t\t},\n\n\t\t\thandleKeyup: function (e) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tinput = e.target;\n\n\t\t\t\t// NB: Selects can fire keyup events (e.g. multiselect, textual search)\n\n\t\t\t\tif (['text', 'search', 'email'].indexOf(input.type) < 0) return;\n\n\t\t\t\tif (self.mixer.config.multifilter.parseOn !== 'change') {\n\t\t\t\t\tself.mixer.getSingleValue(input);\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(self.keyupTimeout);\n\n\t\t\t\tself.keyupTimeout = setTimeout(function () {\n\t\t\t\t\tself.getSingleValue(input);\n\t\t\t\t\tself.mixer.parseFilterGroups();\n\t\t\t\t}, self.mixer.config.multifilter.keyupThrottleDuration);\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * @param {Event} e\n\t\t\t * @return {void}\n\t\t\t */\n\n\t\t\thandleFormEvent: function (e) {\n\t\t\t\tvar self = this,\n\t\t\t\t\ttracker = null,\n\t\t\t\t\tgroup = null,\n\t\t\t\t\ti = -1;\n\n\t\t\t\tif (e.type === 'submit') {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\n\t\t\t\tif (e.type === 'reset') {\n\t\t\t\t\tself.activeFilters = self.activeToggles = self.activeSelectors = [];\n\n\t\t\t\t\tself.updateControls();\n\t\t\t\t}\n\n\t\t\t\tif (!self.mixer.multifilterFormEventTracker) {\n\t\t\t\t\ttracker = self.mixer.multifilterFormEventTracker =\n\t\t\t\t\t\tnew mixitup.MultifilterFormEventTracker();\n\n\t\t\t\t\ttracker.form = e.target;\n\n\t\t\t\t\tfor (i = 0; (group = self.mixer.filterGroups[i]); i++) {\n\t\t\t\t\t\tif (group.dom.form !== e.target) continue;\n\n\t\t\t\t\t\ttracker.totalBound++;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttracker = self.mixer.multifilterFormEventTracker;\n\t\t\t\t}\n\n\t\t\t\tif (e.target === tracker.form) {\n\t\t\t\t\ttracker.totalHandled++;\n\n\t\t\t\t\tif (tracker.totalHandled === tracker.totalBound) {\n\t\t\t\t\t\tself.mixer.multifilterFormEventTracker = null;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\te.type === 'submit' ||\n\t\t\t\t\t\t\tself.mixer.config.multifilter.parseOn === 'change'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tself.mixer.parseFilterGroups();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * @param {HTMLELement} input\n\t\t\t * @return {void}\n\t\t\t */\n\n\t\t\tgetSingleValue: function (input) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tdiacriticMap = null,\n\t\t\t\t\tattributeName = '',\n\t\t\t\t\tselector = '',\n\t\t\t\t\tvalue = '',\n\t\t\t\t\ti = -1;\n\n\t\t\t\tif (input.type.match(/text|search|email/g)) {\n\t\t\t\t\tattributeName = input.getAttribute('data-search-attribute');\n\n\t\t\t\t\tif (!attributeName) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'[MixItUp MultiFilter] A valid `data-search-attribute` must be present on text inputs'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tinput.value.length < self.mixer.config.multifilter.minSearchLength\n\t\t\t\t\t) {\n\t\t\t\t\t\tself.activeSelectors =\n\t\t\t\t\t\t\tself.activeFilters =\n\t\t\t\t\t\t\tself.activeToggles =\n\t\t\t\t\t\t\t\t[''];\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lowercase and trim\n\n\t\t\t\t\tvalue = input.value.toLowerCase().trim();\n\n\t\t\t\t\t// Replace diacritics\n\n\t\t\t\t\tfor (i = 0; (diacriticMap = diacriticsMap[i]); i++) {\n\t\t\t\t\t\tvalue = value.replace(diacriticMap[1], diacriticMap[0]);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Strip non-word characters\n\n\t\t\t\t\tvalue = value.replace(/\\W+/g, ' ');\n\n\t\t\t\t\tselector = '[' + attributeName + '*=\"' + value + '\"]';\n\t\t\t\t} else {\n\t\t\t\t\tselector = input.value;\n\t\t\t\t}\n\n\t\t\t\tif (typeof input.value === 'string') {\n\t\t\t\t\tself.activeSelectors =\n\t\t\t\t\t\tself.activeToggles =\n\t\t\t\t\t\tself.activeFilters =\n\t\t\t\t\t\t\tselector ? [selector] : [];\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * @param {HTMLELement} input\n\t\t\t * @return {void}\n\t\t\t */\n\n\t\t\tgetMultipleValues: function (input) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tactiveToggles = [],\n\t\t\t\t\tquery = '',\n\t\t\t\t\titem = null,\n\t\t\t\t\titems = null,\n\t\t\t\t\ti = -1;\n\n\t\t\t\tswitch (input.type) {\n\t\t\t\t\tcase 'checkbox':\n\t\t\t\t\t\tquery = 'input[type=\"checkbox\"]';\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'select-multiple':\n\t\t\t\t\t\tquery = 'option';\n\t\t\t\t}\n\n\t\t\t\titems = self.dom.el.querySelectorAll(query);\n\n\t\t\t\tfor (i = 0; (item = items[i]); i++) {\n\t\t\t\t\tif ((item.checked || item.selected) && item.value) {\n\t\t\t\t\t\tactiveToggles.push(item.value);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tself.activeFilters = [];\n\t\t\t\tself.activeToggles = activeToggles;\n\n\t\t\t\tif (self.logic === 'and') {\n\t\t\t\t\t// Compress into single node\n\n\t\t\t\t\tself.activeSelectors = [activeToggles];\n\t\t\t\t} else {\n\t\t\t\t\tself.activeSelectors = activeToggles;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * @param {Array.} [controlEls]\n\t\t\t * @return {void}\n\t\t\t */\n\n\t\t\tupdateControls: function (controlEls) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tcontrolEl = null,\n\t\t\t\t\tcontrolSelector = '',\n\t\t\t\t\tcontrolsSelector = '',\n\t\t\t\t\ttype = '',\n\t\t\t\t\ti = -1;\n\n\t\t\t\tcontrolSelector = self.mixer.config.selectors.control.trim();\n\n\t\t\t\tcontrolsSelector = [\n\t\t\t\t\t'[data-filter]' + controlSelector,\n\t\t\t\t\t'[data-toggle]' + controlSelector,\n\t\t\t\t].join(', ');\n\n\t\t\t\tcontrolEls =\n\t\t\t\t\tcontrolEls || self.dom.el.querySelectorAll(controlsSelector);\n\n\t\t\t\tfor (i = 0; (controlEl = controlEls[i]); i++) {\n\t\t\t\t\ttype = controlEl.getAttribute('data-toggle')\n\t\t\t\t\t\t? 'toggle'\n\t\t\t\t\t\t: 'filter';\n\n\t\t\t\t\tself.updateControl(controlEl, type);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private\n\t\t\t * @param {HTMLELement} controlEl\n\t\t\t * @param {string} type\n\t\t\t * @return {void}\n\t\t\t */\n\n\t\t\tupdateControl: function (controlEl, type) {\n\t\t\t\tvar self = this,\n\t\t\t\t\tselector = controlEl.getAttribute('data-' + type),\n\t\t\t\t\tactiveControls = self.activeToggles.concat(self.activeFilters),\n\t\t\t\t\tactiveClassName = '';\n\n\t\t\t\tactiveClassName = h.getClassname(\n\t\t\t\t\tself.mixer.config.classNames,\n\t\t\t\t\ttype,\n\t\t\t\t\tself.mixer.config.classNames.modifierActive\n\t\t\t\t);\n\n\t\t\t\tif (activeControls.indexOf(selector) > -1) {\n\t\t\t\t\th.addClass(controlEl, activeClassName);\n\t\t\t\t} else {\n\t\t\t\t\th.removeClass(controlEl, activeClassName);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @private\n\t\t\t */\n\n\t\t\tupdateUi: function () {\n\t\t\t\tvar self = this,\n\t\t\t\t\tcontrolEls = self.dom.el.querySelectorAll(\n\t\t\t\t\t\t'[data-filter], [data-toggle]'\n\t\t\t\t\t),\n\t\t\t\t\tinputEls = self.dom.el.querySelectorAll(\n\t\t\t\t\t\t'input[type=\"radio\"], input[type=\"checkbox\"], option'\n\t\t\t\t\t),\n\t\t\t\t\tactiveControls = self.activeToggles.concat(self.activeFilters),\n\t\t\t\t\tisActive = false,\n\t\t\t\t\tinputEl = null,\n\t\t\t\t\ti = -1;\n\n\t\t\t\tif (controlEls.length) {\n\t\t\t\t\tself.updateControls(controlEls, true);\n\t\t\t\t}\n\n\t\t\t\tfor (i = 0; (inputEl = inputEls[i]); i++) {\n\t\t\t\t\tisActive = activeControls.indexOf(inputEl.value) > -1;\n\n\t\t\t\t\tswitch (inputEl.tagName.toLowerCase()) {\n\t\t\t\t\t\tcase 'option':\n\t\t\t\t\t\t\tinputEl.selected = isActive;\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'input':\n\t\t\t\t\t\t\tinputEl.checked = isActive;\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\n\t\tmixitup.MixerDom.registerAction(\n\t\t\t'afterConstruct',\n\t\t\t'multifilter',\n\t\t\tfunction () {\n\t\t\t\tthis.filterGroups = [];\n\t\t\t}\n\t\t);\n\n\t\t/**\n\t\t * The `mixitup.Mixer` class is extended with API methods relating to\n\t\t * the MultiFilter extension.\n\t\t *\n\t\t * For the full list of API methods, please refer to the MixItUp\n\t\t * core documentation.\n\t\t *\n\t\t * @constructor\n\t\t * @namespace\n\t\t * @name Mixer\n\t\t * @memberof mixitup\n\t\t * @public\n\t\t * @since 3.0.0\n\t\t */\n\n\t\tmixitup.Mixer.registerAction('afterConstruct', 'multifilter', function () {\n\t\t\tthis.filterGroups = [];\n\t\t\tthis.filterGroupsHash = {};\n\t\t\tthis.multifilterFormEventTracker = null;\n\t\t});\n\n\t\tmixitup.Mixer.registerAction('afterCacheDom', 'multifilter', function () {\n\t\t\tvar self = this,\n\t\t\t\tparent = null;\n\n\t\t\tif (!self.config.multifilter.enable) return;\n\n\t\t\tswitch (self.config.controls.scope) {\n\t\t\t\tcase 'local':\n\t\t\t\t\tparent = self.dom.container;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'global':\n\t\t\t\t\tparent = self.dom.document;\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow new Error(mixitup.messages.ERROR_CONFIG_INVALID_CONTROLS_SCOPE);\n\t\t\t}\n\n\t\t\tself.dom.filterGroups = parent.querySelectorAll('[data-filter-group]');\n\t\t});\n\n\t\tmixitup.Mixer.registerAction(\n\t\t\t'beforeInitControls',\n\t\t\t'multifilter',\n\t\t\tfunction () {\n\t\t\t\tvar self = this;\n\n\t\t\t\tif (!self.config.multifilter.enable) return;\n\n\t\t\t\tself.config.controls.live = true; // force live controls if multifilter is enabled\n\t\t\t}\n\t\t);\n\n\t\tmixitup.Mixer.registerAction(\n\t\t\t'afterSanitizeConfig',\n\t\t\t'multifilter',\n\t\t\tfunction () {\n\t\t\t\tvar self = this;\n\n\t\t\t\tself.config.multifilter.logicBetweenGroups =\n\t\t\t\t\tself.config.multifilter.logicBetweenGroups.toLowerCase().trim();\n\t\t\t\tself.config.multifilter.logicWithinGroup =\n\t\t\t\t\tself.config.multifilter.logicWithinGroup.toLowerCase().trim();\n\t\t\t}\n\t\t);\n\n\t\tmixitup.Mixer.registerAction('afterAttach', 'multifilter', function () {\n\t\t\tvar self = this;\n\n\t\t\tif (self.dom.filterGroups.length) {\n\t\t\t\tself.indexFilterGroups();\n\t\t\t}\n\t\t});\n\n\t\tmixitup.Mixer.registerAction(\n\t\t\t'afterUpdateControls',\n\t\t\t'multifilter',\n\t\t\tfunction () {\n\t\t\t\tvar self = this,\n\t\t\t\t\tgroup = null,\n\t\t\t\t\ti = -1;\n\n\t\t\t\tfor (i = 0; (group = self.filterGroups[i]); i++) {\n\t\t\t\t\tgroup.updateControls();\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\n\t\tmixitup.Mixer.registerAction('beforeDestroy', 'multifilter', function () {\n\t\t\tvar self = this,\n\t\t\t\tgroup = null,\n\t\t\t\ti = -1;\n\n\t\t\tfor (i = 0; (group = self.filterGroups[i]); i++) {\n\t\t\t\tgroup.unbindEvents();\n\t\t\t}\n\t\t});\n\n\t\tmixitup.Mixer.extend(\n\t\t\t/** @lends mixitup.Mixer */\n\t\t\t{\n\t\t\t\t/**\n\t\t\t\t * @private\n\t\t\t\t * @return {void}\n\t\t\t\t */\n\n\t\t\t\tindexFilterGroups: function () {\n\t\t\t\t\tvar self = this,\n\t\t\t\t\t\tfilterGroup = null,\n\t\t\t\t\t\tel = null,\n\t\t\t\t\t\ti = -1;\n\n\t\t\t\t\tfor (i = 0; (el = self.dom.filterGroups[i]); i++) {\n\t\t\t\t\t\tfilterGroup = new mixitup.FilterGroup();\n\n\t\t\t\t\t\tfilterGroup.init(el, self);\n\n\t\t\t\t\t\tself.filterGroups.push(filterGroup);\n\n\t\t\t\t\t\tif (filterGroup.name) {\n\t\t\t\t\t\t\t// If present, also index by name\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\ttypeof self.filterGroupsHash[filterGroup.name] !== 'undefined'\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t'[MixItUp MultiFilter] A filter group with name \"' +\n\t\t\t\t\t\t\t\t\t\tfilterGroup.name +\n\t\t\t\t\t\t\t\t\t\t'\" already exists'\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tself.filterGroupsHash[filterGroup.name] = filterGroup;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * @private\n\t\t\t\t * @instance\n\t\t\t\t * @since 2.0.0\n\t\t\t\t * @param {Array<*>} args\n\t\t\t\t * @return {mixitup.UserInstruction}\n\t\t\t\t */\n\n\t\t\t\tparseParseFilterGroupsArgs: function (args) {\n\t\t\t\t\tvar self = this,\n\t\t\t\t\t\tinstruction = new mixitup.UserInstruction(),\n\t\t\t\t\t\targ = null,\n\t\t\t\t\t\ti = -1;\n\n\t\t\t\t\tinstruction.animate = self.config.animation.enable;\n\t\t\t\t\tinstruction.command = new mixitup.CommandFilter();\n\n\t\t\t\t\tfor (i = 0; i < args.length; i++) {\n\t\t\t\t\t\targ = args[i];\n\n\t\t\t\t\t\tif (typeof arg === 'boolean') {\n\t\t\t\t\t\t\tinstruction.animate = arg;\n\t\t\t\t\t\t} else if (typeof arg === 'function') {\n\t\t\t\t\t\t\tinstruction.callback = arg;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\th.freeze(instruction);\n\n\t\t\t\t\treturn instruction;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Recursively builds up paths between all possible permutations\n\t\t\t\t * of filter group nodes according to the defined logic.\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @return {Array.>}\n\t\t\t\t */\n\n\t\t\t\tgetFilterGroupPaths: function () {\n\t\t\t\t\tvar self = this,\n\t\t\t\t\t\tbuildPath = null,\n\t\t\t\t\t\tcrawl = null,\n\t\t\t\t\t\tnodes = null,\n\t\t\t\t\t\tmatrix = [],\n\t\t\t\t\t\tpaths = [],\n\t\t\t\t\t\ttrackers = [],\n\t\t\t\t\t\ti = -1;\n\n\t\t\t\t\tfor (i = 0; i < self.filterGroups.length; i++) {\n\t\t\t\t\t\t// Filter out groups without any active filters\n\n\t\t\t\t\t\tif ((nodes = self.filterGroups[i].activeSelectors).length) {\n\t\t\t\t\t\t\tmatrix.push(nodes);\n\n\t\t\t\t\t\t\t// Initialise tracker for each group\n\n\t\t\t\t\t\t\ttrackers.push(0);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tbuildPath = function () {\n\t\t\t\t\t\tvar node = null,\n\t\t\t\t\t\t\tpath = [],\n\t\t\t\t\t\t\ti = -1;\n\n\t\t\t\t\t\tfor (i = 0; i < matrix.length; i++) {\n\t\t\t\t\t\t\tnode = matrix[i][trackers[i]];\n\n\t\t\t\t\t\t\tif (Array.isArray(node)) {\n\t\t\t\t\t\t\t\t// AND logic within group\n\n\t\t\t\t\t\t\t\tnode = node.join('');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tpath.push(node);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tpath = h.clean(path);\n\n\t\t\t\t\t\tpaths.push(path);\n\t\t\t\t\t};\n\n\t\t\t\t\tcrawl = function (index) {\n\t\t\t\t\t\tindex = index || 0;\n\n\t\t\t\t\t\tvar nodes = matrix[index];\n\n\t\t\t\t\t\twhile (trackers[index] < nodes.length) {\n\t\t\t\t\t\t\tif (index < matrix.length - 1) {\n\t\t\t\t\t\t\t\t// If not last, recurse\n\n\t\t\t\t\t\t\t\tcrawl(index + 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Last, build selector\n\n\t\t\t\t\t\t\t\tbuildPath();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttrackers[index]++;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttrackers[index] = 0;\n\t\t\t\t\t};\n\n\t\t\t\t\tif (!matrix.length) return '';\n\n\t\t\t\t\tcrawl();\n\n\t\t\t\t\treturn paths;\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Builds up a selector string from a provided paths array.\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {Array.>} paths\n\t\t\t\t * @return {string}\n\t\t\t\t */\n\n\t\t\t\tbuildSelectorFromPaths: function (paths) {\n\t\t\t\t\tvar self = this,\n\t\t\t\t\t\tpath = null,\n\t\t\t\t\t\toutput = [],\n\t\t\t\t\t\tpathSelector = '',\n\t\t\t\t\t\tnodeDelineator = '',\n\t\t\t\t\t\ti = -1;\n\n\t\t\t\t\tif (!paths.length) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (self.config.multifilter.logicBetweenGroups === 'or') {\n\t\t\t\t\t\tnodeDelineator = ', ';\n\t\t\t\t\t}\n\n\t\t\t\t\tif (paths.length > 1) {\n\t\t\t\t\t\tfor (i = 0; i < paths.length; i++) {\n\t\t\t\t\t\t\tpath = paths[i];\n\n\t\t\t\t\t\t\tpathSelector = path.join(nodeDelineator);\n\n\t\t\t\t\t\t\tif (output.indexOf(pathSelector) < 0) {\n\t\t\t\t\t\t\t\toutput.push(pathSelector);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn output.join(', ');\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn paths[0].join(nodeDelineator);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Traverses the currently active filters in all groups, building up a\n\t\t\t\t * compound selector string as per the defined logic. A filter operation\n\t\t\t\t * is then called on the mixer using the resulting selector.\n\t\t\t\t *\n\t\t\t\t * This method can be used to programmatically trigger the parsing of\n\t\t\t\t * filter groups after manipulations to a group's active selector(s) by\n\t\t\t\t * the `.setFilterGroupSelectors()` API method.\n\t\t\t\t *\n\t\t\t\t * @example\n\t\t\t\t *\n\t\t\t\t * .parseFilterGroups([animate] [, callback])\n\t\t\t\t *\n\t\t\t\t * @example Example: Triggering parsing after programmatically changing the values of a filter group\n\t\t\t\t *\n\t\t\t\t * mixer.setFilterGroupSelectors('color', ['.green', '.blue']);\n\t\t\t\t *\n\t\t\t\t * mixer.parseFilterGroups();\n\t\t\t\t *\n\t\t\t\t * @public\n\t\t\t\t * @since 3.0.0\n\t\t\t\t * @param {boolean} [animate=true]\n\t\t\t\t * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n\t\t\t\t * @param {function} [callback=null]\n\t\t\t\t * An optional callback function to be invoked after the operation has completed.\n\t\t\t\t * @return {Promise.}\n\t\t\t\t * A promise resolving with the current state object.\n\t\t\t\t */\n\n\t\t\t\tparseFilterGroups: function () {\n\t\t\t\t\tvar self = this,\n\t\t\t\t\t\tinstruction = self.parseFilterArgs(arguments),\n\t\t\t\t\t\tpaths = self.getFilterGroupPaths(),\n\t\t\t\t\t\tselector = self.buildSelectorFromPaths(paths),\n\t\t\t\t\t\tcallback = null,\n\t\t\t\t\t\tcommand = {};\n\n\t\t\t\t\tif (selector === '') {\n\t\t\t\t\t\tselector = self.config.controls.toggleDefault;\n\t\t\t\t\t}\n\n\t\t\t\t\tinstruction.command.selector = selector;\n\n\t\t\t\t\tcommand.filter = instruction.command;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof (callback = self.config.callbacks.onParseFilterGroups) ===\n\t\t\t\t\t\t'function'\n\t\t\t\t\t) {\n\t\t\t\t\t\tcommand = callback(command);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn self.multimix(\n\t\t\t\t\t\tcommand,\n\t\t\t\t\t\tinstruction.animate,\n\t\t\t\t\t\tinstruction.callback\n\t\t\t\t\t);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Programmatically sets one or more active selectors for a specific filter\n\t\t\t\t * group and updates the group's UI.\n\t\t\t\t *\n\t\t\t\t * Because MixItUp has no way of knowing how to break down a provided\n\t\t\t\t * compound selector into its component groups, we can not use the\n\t\t\t\t * standard `.filter()` or `toggleOn()/toggleOff()` API methods when using\n\t\t\t\t * the MultiFilter extension. Instead, this method allows us to perform\n\t\t\t\t * multi-dimensional filtering via the API by setting the active selectors of\n\t\t\t\t * individual groups and then triggering the `.parseFilterGroups()` method.\n\t\t\t\t *\n\t\t\t\t * If setting multiple active selectors, do not pass a compound selector.\n\t\t\t\t * Instead, pass an array with each item containing a single selector\n\t\t\t\t * string as in example 2.\n\t\t\t\t *\n\t\t\t\t * @example\n\t\t\t\t *\n\t\t\t\t * .setFilterGroupSelectors(groupName, selectors)\n\t\t\t\t *\n\t\t\t\t * @example Example 1: Setting a single active selector for a \"color\" group\n\t\t\t\t *\n\t\t\t\t * mixer.setFilterGroupSelectors('color', '.green');\n\t\t\t\t *\n\t\t\t\t * mixer.parseFilterGroups();\n\t\t\t\t *\n\t\t\t\t * @example Example 2: Setting multiple active selectors for a \"size\" group\n\t\t\t\t *\n\t\t\t\t * mixer.setFilterGroupSelectors('size', ['.small', '.large']);\n\t\t\t\t *\n\t\t\t\t * mixer.parseFilterGroups();\n\t\t\t\t *\n\t\t\t\t * @public\n\t\t\t\t * @since 3.2.0\n\t\t\t\t * @param {string} groupName The name of the filter group as defined in the markup via the `data-filter-group` attribute.\n\t\t\t\t * @param {(string|Array.)} selectors A single selector string, or multiple selector strings as an array.\n\t\t\t\t * @return {void}\n\t\t\t\t */\n\n\t\t\t\tsetFilterGroupSelectors: function (groupName, selectors) {\n\t\t\t\t\tvar self = this,\n\t\t\t\t\t\tfilterGroup = null;\n\n\t\t\t\t\tselectors = Array.isArray(selectors) ? selectors : [selectors];\n\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof (filterGroup = self.filterGroupsHash[groupName]) ===\n\t\t\t\t\t\t'undefined'\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'[MixItUp MultiFilter] No filter group could be found with the name \"' +\n\t\t\t\t\t\t\t\tgroupName +\n\t\t\t\t\t\t\t\t'\"'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tfilterGroup.activeToggles = selectors.slice();\n\n\t\t\t\t\tif (filterGroup.logic === 'and') {\n\t\t\t\t\t\t// Compress into single node\n\n\t\t\t\t\t\tfilterGroup.activeSelectors = [filterGroup.activeToggles];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfilterGroup.activeSelectors = filterGroup.activeToggles;\n\t\t\t\t\t}\n\n\t\t\t\t\tfilterGroup.updateUi(filterGroup.activeToggles);\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Returns an array of active selectors for a specific filter group.\n\t\t\t\t *\n\t\t\t\t * @example\n\t\t\t\t *\n\t\t\t\t * .getFilterGroupSelectors(groupName)\n\t\t\t\t *\n\t\t\t\t * @example Example: Retrieving the active selectors for a \"size\" group\n\t\t\t\t *\n\t\t\t\t * mixer.getFilterGroupSelectors('size'); // ['.small', '.large']\n\t\t\t\t *\n\t\t\t\t * @public\n\t\t\t\t * @since 3.2.0\n\t\t\t\t * @param {string} groupName The name of the filter group as defined in the markup via the `data-filter-group` attribute.\n\t\t\t\t * @return {void}\n\t\t\t\t */\n\n\t\t\t\tgetFilterGroupSelectors: function (groupName) {\n\t\t\t\t\tvar self = this,\n\t\t\t\t\t\tfilterGroup = null;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof (filterGroup = self.filterGroupsHash[groupName]) ===\n\t\t\t\t\t\t'undefined'\n\t\t\t\t\t) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'[MixItUp MultiFilter] No filter group could be found with the name \"' +\n\t\t\t\t\t\t\t\tgroupName +\n\t\t\t\t\t\t\t\t'\"'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn filterGroup.activeSelectors.slice();\n\t\t\t\t},\n\t\t\t}\n\t\t);\n\n\t\tmixitup.Facade.registerAction(\n\t\t\t'afterConstruct',\n\t\t\t'multifilter',\n\t\t\tfunction (mixer) {\n\t\t\t\tthis.parseFilterGroups = mixer.parseFilterGroups.bind(mixer);\n\t\t\t\tthis.setFilterGroupSelectors =\n\t\t\t\t\tmixer.setFilterGroupSelectors.bind(mixer);\n\t\t\t\tthis.getFilterGroupSelectors =\n\t\t\t\t\tmixer.getFilterGroupSelectors.bind(mixer);\n\t\t\t}\n\t\t);\n\t};\n\n\tmixitupMultifilter.TYPE = 'mixitup-extension';\n\tmixitupMultifilter.NAME = 'mixitup-multifilter';\n\tmixitupMultifilter.EXTENSION_VERSION = '3.3.6';\n\tmixitupMultifilter.REQUIRE_CORE_VERSION = '^3.1.2';\n\n\tif (typeof exports === 'object' && typeof module === 'object') {\n\t\tmodule.exports = mixitupMultifilter;\n\t} else if (typeof define === 'function' && define.amd) {\n\t\tdefine(function () {\n\t\t\treturn mixitupMultifilter;\n\t\t});\n\t} else if (window.mixitup && typeof window.mixitup === 'function') {\n\t\tmixitupMultifilter(window.mixitup);\n\t} else {\n\t\tthrow new Error('[MixItUp MultiFilter] MixItUp core not found');\n\t}\n})(window);\n","import { A11y, Autoplay, default as Swiper, default as SwiperCore, EffectFade, Keyboard, Pagination } from 'swiper';\nimport 'swiper/css/bundle';\nimport { PaginationTypes } from '../../../libs/gin-tonic/components/swiper';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\nSwiperCore.use([Pagination, A11y, Autoplay, EffectFade, Keyboard]);\n\ndeclare let ScrollMagic: any;\ndeclare let TimelineMax: any;\ndeclare let TweenMax: any;\ndeclare let Linear: any;\n\nexport const ScrollMagicController = new ScrollMagic.Controller();\n\n@Component({className: 'js-case-slider'})\nexport class CaseSliderComponent {\n\tprivate duration = .3;\n\tprivate delay = .15;\n\tprivate autoplay = false;\n\tprivate autoplayDelay = 0;\n\n\tconstructor(private element: HTMLElement) {\n\t\tthis.initSwiper(element);\n\t\tthis.initPlayButton();\n\t}\n\n\tprivate initPlayButton() {\n\t\tconst triggers = this.element.querySelectorAll('.js-case-slider-play-btn');\n\t\ttriggers.forEach(trigger => {\n\t\t\ttrigger.addEventListener('click', () => {\n\t\t\t\tconst videoEl = trigger.parentElement.querySelector('[data-player-src]');\n\t\t\t\tvideoEl.click();\n\t\t\t})\n\t\t})\n\t}\n\n\tprivate initSwiper(element: HTMLElement) {\n\t\tconst autoplayDelay = (parseInt(this.element.getAttribute('data-swiper-autoplay')) || 0);\n\t\tif(autoplayDelay > 0) {\n\t\t\tthis.autoplay = true;\n\t\t\tthis.autoplayDelay = autoplayDelay * 1000;\n\t\t} else {\n\t\t\tthis.setInitial();\n\t\t}\n\n\t\tnew Swiper(element, {\n\t\t\tcssMode: false,\n\t\t\tspeed: 500,\n\t\t\tloop: true,\n\t\t\tkeyboard: true,\n\t\t\tallowTouchMove: false,\n\t\t\tsimulateTouch: false,\n\t\t\tautoplay: this.autoplay ? {\n\t\t\t\tdelay: this.autoplayDelay,\n\t\t\t\tdisableOnInteraction: true,\n\t\t\t} : false,\n\t\t\tpagination: {\n\t\t\t\tel: this.element.querySelector('.swiper-pagination'),\n\t\t\t\tclickable: true,\n\t\t\t\ttype: PaginationTypes.bullets,\n\t\t\t},\n\t\t\ton: {\n\t\t\t\ttransitionStart: (swiper) => {\n\t\t\t\t\tthis.getActiveSlideTween(swiper.slides[swiper.activeIndex]);\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tprivate setInitial() {\n\t\tnew ScrollMagic.Scene({\n\t\t\ttriggerElement: this.element,\n\t\t\ttriggerHook: .8,\n\t\t})\n\t\t\t.setTween([\n\t\t\t\tthis.getActiveSlideTween(this.element)],\n\t\t\t)\n\t\t\t.addTo(ScrollMagicController);\n\t}\n\n\tprivate getActiveSlideTween(slide) {\n\t\tconst tl = new TimelineMax();\n\t\tconst tweens = [];\n\n\t\tconst staggerTargets = slide.querySelectorAll('.js-case-slider-stagger');\n\t\tif(staggerTargets.length > 0) {\n\t\t\ttweens.push(TweenMax.fromTo(\n\t\t\t\tstaggerTargets,\n\t\t\t\tthis.duration,\n\t\t\t\t{\n\t\t\t\t\tcss: {translateY: 50, opacity: 0},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcss: {translateY: 0, opacity: 1},\n\t\t\t\t\tease: Linear.easeInOut,\n\t\t\t\t\tstagger: this.duration / 2,\n\t\t\t\t},\n\t\t\t));\n\t\t}\n\n\t\tconst opacityTargets = slide.querySelectorAll('.js-case-slider-opacity');\n\t\tif(opacityTargets.length > 0) {\n\t\t\ttweens.push(TweenMax.fromTo(\n\t\t\t\topacityTargets,\n\t\t\t\tthis.duration / 2,\n\t\t\t\t{\n\t\t\t\t\tcss: {opacity: 0},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcss: {opacity: 1},\n\t\t\t\t\tease: Linear.easeInOut,\n\t\t\t\t\tdelay: this.delay,\n\t\t\t\t},\n\t\t\t));\n\t\t}\n\n\t\tconst clipTargets = slide.querySelectorAll('.js-case-slider-clip');\n\t\tif(clipTargets.length > 0) {\n\t\t\ttweens.push(TweenMax.fromTo(\n\t\t\t\tclipTargets,\n\t\t\t\tthis.duration,\n\t\t\t\t{\n\t\t\t\t\tcss: {scale: .9, clipPath: 'polygon(10% 10%, 100% 10%, 100% 100%, 10% 100%)'},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tcss: {scale: 1, clipPath: 'polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)'},\n\t\t\t\t\tease: Linear.easeInOut,\n\n\t\t\t\t},\n\t\t\t));\n\t\t}\n\t\ttl.add(tweens);\n\t\ttl.delay(.35);\n\n\t\treturn tl;\n\t}\n}\n","import { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\ndeclare let TweenMax: any;\n\n@Component({ className: 'js-clock' })\nexport class ClockComponent {\n\tprivate digits;\n\n\tconstructor(private element: HTMLElement) {\n\t\tthis.digits = this.element.querySelectorAll('.js-digit');\n\t}\n\n\tpublic updateTimerDisplay = (newVal: string) => {\n\t\tconst arr = newVal.split('');\n\n\t\tthis.digits.forEach((digit, i) => {\n\t\t\tTweenMax.killTweensOf(digit);\n\t\t\tTweenMax.to(digit, 1, {\n\t\t\t\ty: - digit.querySelector('.js-digit-' + arr[i]).offsetTop\n\t\t\t});\n\t\t})\n\t}\n}\n","import { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\ndeclare const Cookiebot: any;\n\n@Component({ className: 'js-cookie-renew' })\nexport class CookieRenewComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tthis.element.addEventListener('click', (e) => {\n\t\t\te.preventDefault();\n\t\t\tCookiebot.renew();\n\t\t});\n\t}\n}\n","import { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\n\n@Component({ className: 'js-filter' })\nexport class FilterComponent {\n\tprivate selects: NodeListOf | null;\n\tprivate selectContainer: HTMLElement | null;\n\tprivate buttonsContainer: HTMLElement | null;\n\tprivate buttonGroup: HTMLElement | null;\n\tprivate buttons: HTMLElement[];\n\n\tprivate groupWidth: number;\n\n\tconstructor(private element: HTMLElement) {\n\t\tthis.selectContainer = this.element.querySelector('.js-filter-select-container');\n\t\tthis.selects = this.selectContainer?.querySelectorAll('.js-select');\n\t\tthis.buttonsContainer = this.element.querySelector('.js-filter-buttons');\n\t\tthis.buttonGroup = this.buttonsContainer?.querySelector('.js-filter-button-group');\n\n\t\tthis.groupWidth = this.buttonGroup?.getBoundingClientRect().width;\n\n\t\tthis.selects?.forEach(item => item.addEventListener('change', this.onChange));\n\n\t\tthis.buttons = [\n\t\t\t...this.buttonsContainer.querySelectorAll('[data-filter]'),\n\t\t\t...this.buttonsContainer.querySelectorAll('[data-toggle]'),\n\t\t\t...this.element.querySelectorAll('[type=\"reset\"]')\n\t\t];\n\n\t\tthis.buttons.forEach(button => button.addEventListener('click', this.onButtonClicked.bind(this)))\n\t}\n\n\tonChange = (e) => {\n\t\tconst filterButton = this.buttonsContainer.querySelector('[data-filter=\".' + e.currentTarget.value.toLowerCase() + '\"]');\n\t\tconst toggleButton = this.buttonsContainer.querySelector('[data-toggle=\".' + e.currentTarget.value.toLowerCase() + '\"]');\n\t\tconst button = filterButton != null ? filterButton : toggleButton;\n\t\tbutton?.click();\n\t}\n\n\tonButtonClicked = (e) => {\n\t\tif (e.target.type == 'reset') {\n\t\t\tthis.selects.forEach(select => {\n\t\t\t\tselect.selectedIndex = null;\n\t\t\t})\n\t\t} else {\n\t\t\tconst filterString = e.target.getAttribute('data-filter');\n\t\t\tconst toggleString = e.target.getAttribute('data-toggle');\n\t\t\tconst filter = (filterString != null ? filterString : toggleString)?.replace('.', '');\n\t\t\tthis.selects.forEach(select => {\n\t\t\t\tconst option = select.querySelector('option[value=\"' + filter + '\"]')\n\t\t\t\tif (option) {\n\t\t\t\t\toption.setAttribute('selected', 'true')\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n}\n","import { Component } from '../../../libs/gin-tonic/helpers/compiler';\nimport { getParentOrSelfWithClass } from '../../../libs/gin-tonic/helpers/dom/get-parent-or-self-with-class';\n\n@Component({ className: 'js-hamburger' })\nexport class HamburgerComponent {\n\tprivate toggleClass = 'is-active';\n\tprivate parentToggleClass = 'is-visible';\n\n\tconstructor(private element: HTMLElement) {\n\t\tconst hamburgerButton = this.element.getElementsByClassName('js-hamburger-toggler');\n\t\tconst parentElem = getParentOrSelfWithClass(this.element, 'js-magic-scroll-toggle-visibility');\n\n\t\tif (hamburgerButton && hamburgerButton.length) {\n\t\t\thamburgerButton[0].addEventListener('click', () => {\n\t\t\t\tthis.element.classList.toggle(this.toggleClass)\n\t\t\t\tif (parentElem != null) {\n\t\t\t\t\tparentElem.classList.toggle(this.parentToggleClass)\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n","import { A11y, Autoplay, Controller, default as SwiperCore, EffectCards, EffectCoverflow, EffectCreative, EffectCube, EffectFade, EffectFlip, Keyboard, Mousewheel, Navigation, Pagination, Parallax } from 'swiper';\nimport 'swiper/css/bundle';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\nSwiperCore.use([Navigation, Pagination, Parallax, A11y, EffectCreative, Controller, EffectCards, EffectCoverflow, EffectCube, EffectFade, EffectFlip, Mousewheel, Keyboard, Autoplay]);\n\n@Component({ className: 'js-hero' })\nexport class HeroComponent {\n\tprivate slideCount = 0;\n\tprivate bgSlides;\n\tprivate descSlides;\n\tprivate activeIndex = 0;\n\tprivate previousIndex = 0;\n\tprivate autoplay = false;\n\tprivate nextBtn;\n\tprivate prevBtn;\n\tprivate timer;\n\n\tconstructor(private element: HTMLElement) {\n\t\tthis.bgSlides = element.querySelector('.js-hero-bg').querySelectorAll('.swiper-slide');\n\t\tthis.descSlides = element.querySelector('.js-hero-desc').querySelectorAll('.swiper-slide');\n\t\tthis.slideCount = this.descSlides.length;\n\t\tthis.activeIndex = this.slideCount;\n\t\tthis.nextBtn = element.querySelector('.js-hero-next');\n\t\tthis.prevBtn = element.querySelector('.js-hero-prev');\n\n\t\tthis.nextBtn.addEventListener('click', this.slideToNext.bind(this, true))\n\t\tthis.prevBtn.addEventListener('click', this.slideToPrev.bind(this, true))\n\n\t\tconst autoplayDelay = (parseInt(this.element.getAttribute('data-swiper-autoplay')) || 0);\n\t\tif (autoplayDelay > 0) {\n\t\t\tthis.autoplay = true;\n\t\t\tthis.timer = setInterval(this.slideToNext.bind(this, false), autoplayDelay)\n\t\t}\n\n\t\tthis.slideToNext();\n\n\t\tsetTimeout(() => {\n\t\t\tthis.element.classList.remove('is-hidden');\n\t\t}, 100);\n\t}\n\n\tslideToNext(stopTimer = false) {\n\t\tif (stopTimer) {\n\t\t\tthis.autoplay = false;\n\t\t\tclearInterval(this.timer);\n\t\t}\n\n\t\tthis.previousIndex = this.activeIndex;\n\t\tthis.activeIndex++;\n\t\tif (this.activeIndex >= this.slideCount) {\n\t\t\tthis.activeIndex = 0;\n\t\t}\n\t\tthis.animateTransition(true);\n\t}\n\n\tslideToPrev(stopTimer = false) {\n\t\tif (stopTimer) {\n\t\t\tthis.autoplay = false;\n\t\t\tclearInterval(this.timer);\n\t\t}\n\n\t\tthis.previousIndex = this.activeIndex;\n\t\tthis.activeIndex--;\n\t\tif (this.activeIndex < 0) {\n\t\t\tthis.activeIndex = this.slideCount - 1;\n\t\t}\n\t\tthis.animateTransition(false);\n\t}\n\n\tanimateTransition(gotoNext = true) {\n\t\tthis.resetBg();\n\t\tthis.setBgActiveSlideState(gotoNext);\n\t\tthis.setBgPrevSlideState(gotoNext);\n\n\t\tthis.resetDesc();\n\t\tthis.setDescActiveSlideState(gotoNext);\n\t\tthis.setDescPrevSlideState(gotoNext);\n\t}\n\n\t// ------------------------------------------------------\n\n\tresetBg() {\n\t\tfor (let i = 0; i < this.slideCount; i++) {\n\t\t\tconst slide = this.bgSlides[i];\n\t\t\tslide.querySelector('.js-hero-bg')?.classList.remove('fade-in', 'fade-out');\n\t\t\tslide.querySelector('.js-hero-title')?.classList.remove('slide-out-upwards', 'slide-in-upwards', 'slide-out-downwards', 'slide-in-downwards',);\n\t\t\tslide.style.opacity = '0';\n\t\t\tslide.style.zIndex = '0';\n\t\t}\n\t}\n\n\tsetBgActiveSlideState(gotoNext = true) {\n\t\tconst activeSlide = this.bgSlides[this.activeIndex] as HTMLElement;\n\t\tif (activeSlide) {\n\t\t\tactiveSlide.querySelector('.js-hero-title')?.classList.add(gotoNext ? 'slide-in-upwards' : 'slide-in-downwards');\n\t\t\tif (gotoNext) {\n\t\t\t\tactiveSlide.querySelector('.js-hero-bg')?.classList.add('fade-in');\n\t\t\t}\n\n\t\t\tactiveSlide.style.opacity = '1';\n\t\t\tactiveSlide.style.zIndex = gotoNext ? '10' : '1';\n\t\t}\n\t}\n\n\tsetBgPrevSlideState(gotoNext = true) {\n\t\tconst prevSlide = this.bgSlides[this.previousIndex] as HTMLElement;\n\n\t\tif (prevSlide) {\n\t\t\tprevSlide.querySelector('.js-hero-title')?.classList.add(gotoNext ? 'slide-out-upwards' : 'slide-out-downwards');\n\t\t\tprevSlide.style.opacity = '1';\n\t\t\tif (!gotoNext) {\n\t\t\t\tprevSlide.querySelector('.js-hero-bg')?.classList.add('fade-out');\n\t\t\t\tprevSlide.style.zIndex = '10';\n\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tprevSlide.style.zIndex = '0';\n\t\t\t\t}, 500);\n\t\t\t}\n\t\t}\n\t}\n\n\t// ------------------------------------------------------\n\n\tresetDesc() {\n\t\tfor (let i = 0; i < this.slideCount; i++) {\n\t\t\tconst slide = this.descSlides[i];\n\t\t\tslide.querySelector('.js-hero-caption')?.classList.remove('show');\n\t\t\tslide.querySelector('.js-hero-img')?.classList.remove('flip-out', 'flip-in');\n\t\t\tslide.querySelector('.js-hero-count-down')?.classList.remove('is-animating');\n\t\t\tslide.classList.remove('crop-out-prev', 'crop-in-prev', 'crop-out-next', 'crop-in-next',);\n\t\t\tslide.style.opacity = '0';\n\t\t\tslide.style.zIndex = '0';\n\t\t}\n\t}\n\n\tsetDescActiveSlideState(gotoNext = true) {\n\t\tconst activeSlide = this.descSlides[this.activeIndex] as HTMLElement;\n\t\tif (activeSlide) {\n\t\t\tactiveSlide.querySelector('.js-hero-caption')?.classList.add('show');\n\t\t\tactiveSlide.querySelector('.js-hero-img')?.classList.add('flip-in');\n\n\t\t\tactiveSlide.classList.add(gotoNext ? 'crop-in-next' : 'crop-in-prev');\n\t\t\tactiveSlide.style.opacity = '1';\n\t\t\tactiveSlide.style.zIndex = gotoNext ? '10' : '1';\n\n\t\t\tif (this.autoplay) {\n\t\t\t\tactiveSlide.querySelector('.js-hero-count-down')?.classList.add('is-animating');\n\t\t\t}\n\t\t}\n\t}\n\n\tsetDescPrevSlideState(gotoNext = true) {\n\t\tconst prevSlide = this.descSlides[this.previousIndex] as HTMLElement;\n\n\t\tif (prevSlide) {\n\t\t\tprevSlide.querySelector('.js-hero-img')?.classList.add('flip-out');\n\t\t\tprevSlide.classList.add(gotoNext ? 'crop-out-next' : 'crop-out-prev');\n\t\t\tprevSlide.style.opacity = '1';\n\t\t}\n\t}\n\n\t// helper\n\tprivate parseToBoolOrInt(el: HTMLElement, attr: string) {\n\t\tconst val: string | null = el.getAttribute(attr);\n\t\tconst parsedNum = Number.parseInt(val || 'false');\n\t\treturn isNaN(parsedNum) ? val == 'true' : parsedNum\n\t}\n}\n","import { SwiperItem } from '../../../libs/gin-tonic/components/swiper';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\nimport { ClockComponent } from '../clock/clock';\n\n@Component({ className: 'js-history' })\nexport class HistoryComponent {\n\tstatic SLIDES_PER_VIEW = 3;\n\n\tconstructor(private element: HTMLElement) {\n\t\tconst vw = window.innerWidth;\n\t\tconst wrapperWidth = vw / 100 * 91.66666;\n\t\tconst clock = new ClockComponent(this.element.querySelector('.js-history-bg'));\n\n\t\tnew SwiperItem(this.element, {\n\t\t\tscale: false,\n\t\t\tspacing: 40,\n\t\t\tvertical: false,\n\t\t\tmousewheel: false,\n\t\t\tbreakpoints: {\n\t\t\t\t0: {\n\t\t\t\t\tslidesPerView: 1,\n\t\t\t\t\twidth: (vw - 40),\n\t\t\t\t\tspaceBetween: 20,\n\t\t\t\t},\n\t\t\t\t576: {\n\t\t\t\t\tslidesPerView: 2,\n\t\t\t\t\twidth: wrapperWidth\n\t\t\t\t},\n\t\t\t\t1200: {\n\t\t\t\t\tslidesPerView: 3,\n\t\t\t\t\twidth: wrapperWidth\n\t\t\t\t},\n\t\t\t},\n\t\t\tevents: {\n\t\t\t\ttransitionStart(swiper) {\n\t\t\t\t\tconst val = swiper.slides[swiper.activeIndex].getAttribute('data-history-bg');\n\t\t\t\t\tclock.updateTimerDisplay(val);\n\t\t\t\t},\n\t\t\t\tinit(swiper) {\n\t\t\t\t\tconst val = swiper.slides[swiper.activeIndex].getAttribute('data-history-bg');\n\t\t\t\t\tclock.updateTimerDisplay(val);\n\t\t\t\t},\n\t\t\t},\n\t\t\tinitialSlide: 0,\n\t\t\tpagination: {\n\t\t\t\tel: this.element.querySelector('.swiper-pagination'),\n\t\t\t\tclickable: true,\n\t\t\t\tbulletClass: 'c-history__swiper__bullet',\n\t\t\t\tbulletActiveClass: 'is-active',\n\t\t\t\trenderBullet: function (index, className) {\n\t\t\t\t\tconst label = this.slides[index]?.getAttribute('data-history-label');\n\t\t\t\t\treturn '' + (label ? '' + label + '' : '') + '';\n\t\t\t\t},\n\t\t\t},\n\t\t\tnavigation: {\n\t\t\t\tnextEl: '.swiper-next',\n\t\t\t\tprevEl: '.swiper-prev'\n\t\t\t}\n\t\t});\n\t}\n}\n","import MicroModal from 'micromodal';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\n@Component({className: 'c-rte'})\nexport class LetsTalkRTEComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tconst triggers = Array.from(this.element.querySelectorAll('[href=\\'#lets-talk\\']'));\n\t\ttriggers.forEach(trigger => {\n\t\t\ttrigger.addEventListener('click', (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tMicroModal.show('modal-lets-talk', {\n\t\t\t\t\tdisableFocus: false,\n\t\t\t\t\tawaitOpenAnimation: true,\n\t\t\t\t\tawaitCloseAnimation: true,\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t}\n}\n","import MicroModal from 'micromodal';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\n@Component({ className: 'js-lets-talk' })\nexport class LetsTalkComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tthis.element.addEventListener('click', () => MicroModal.show('modal-lets-talk', {\n\t\t\tdisableFocus: false,\n\t\t\tawaitOpenAnimation: true,\n\t\t\tawaitCloseAnimation: true,\n\t\t}));\n\t}\n}\n","import { SwiperItem } from '../../../libs/gin-tonic/components/swiper';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\n@Component({ className: 'js-lists' })\nexport class ListsComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tconst vw = window.innerWidth;\n\t\tconst count = this.element.getAttribute('data-list-item-count');\n\t\tconst maxSlidesPerView = parseInt(count || \"\");\n\t\tconst wrapperWidth = vw / 12 * (maxSlidesPerView >= 4 ? 10 : 8);\n\n\t\tnew SwiperItem(this.element, {\n\t\t\tvertical: false,\n\t\t\tspacing: 20,\n\t\t\tautoplay: 3000,\n\t\t\tmousewheelTarget: '.c-lists',\n\t\t\tbreakpoints: {\n\t\t\t\t0: {\n\t\t\t\t\tslidesPerView: 1,\n\t\t\t\t\twidth: (vw - 40),\n\t\t\t\t},\n\t\t\t\t992: {\n\t\t\t\t\tslidesPerView: Math.min(2, maxSlidesPerView),\n\t\t\t\t\tspaceBetween: vw / 12 * 2,\n\t\t\t\t\twidth: maxSlidesPerView >= 4 ? (wrapperWidth - (vw / 12 * 2)) : wrapperWidth\n\t\t\t\t},\n\t\t\t\t1400: {\n\t\t\t\t\tslidesPerView: Math.min(3, maxSlidesPerView),\n\t\t\t\t\tspaceBetween: vw / 12 * 1.3,\n\t\t\t\t\twidth: wrapperWidth\n\t\t\t\t},\n\t\t\t\t1600: {\n\t\t\t\t\tslidesPerView: Math.min(4, maxSlidesPerView),\n\t\t\t\t\tspaceBetween: vw / 12 * (Math.min(4, maxSlidesPerView) == 4 ? 1 : 1.3),\n\t\t\t\t\twidth: wrapperWidth\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n}\n","import { A11y, Autoplay, default as Swiper, default as SwiperCore } from 'swiper';\nimport 'swiper/css/bundle';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\nSwiperCore.use([A11y, Autoplay]);\n\n\n@Component({ className: 'js-logo-list' })\nexport class LogoListsComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tnew Swiper(this.element, {\n\t\t\tslidesPerView: 'auto',\n\t\t\tloop: true,\n\t\t\tspeed: 1000,\n\t\t\tspaceBetween: 100,\n\t\t\tdirection: 'horizontal',\n\t\t\tautoplay: {\n\t\t\t\tdelay: 2000,\n\t\t\t\tdisableOnInteraction: false\n\t\t\t}\n\t\t});\n\t}\n}\n","import mixitup from 'mixitup';\nimport mixitupMultifilter from '../../../libs/gin-tonic/components/mixitup/lib/mixitup-multifilter.js';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\n@Component({ className: 'js-load-more', observe: true })\nexport class LoadMoreComponent {\n\tprivate options = {\n\t\titemSelector: '.js-load-more-item',\n\t\ttriggerSelector: '.js-load-more-trigger',\n\t\tcardIncrease: 6,\n\t\thiddenClass: 'is-hidden',\n\t\tactiveFilterSelector: '.mixitup-control-active',\n\t\tresetSelector: '.js-multi-filter-reset',\n\t\tfilterSelector: '.js-mixitup-filter',\n\t\toptionContainerSelector: '.js-multi-filter-options-container',\n\t\tchipContainerSelector: '.js-filter-chip-container',\n\t};\n\n\tprivate allItems: Element[];\n\tprivate filteredItems: Element[];\n\tprivate optionContainers: Element[];\n\tprivate chipContainer: Element;\n\tprivate loadTrigger;\n\tprivate resetTrigger;\n\tprivate closeIcon: Element;\n\tprivate mixer: any;\n\tprivate activeHash: string;\n\tprivate servicesFilter: HTMLElement;\n\tprivate branchFilter: HTMLElement;\n\tprivate page = 1;\n\tprivate cardIncrease;\n\n\tconstructor(element: HTMLElement) {\n\t\tthis.activeHash = '';\n\t\tthis.servicesFilter = element.querySelector(\n\t\t\t\"[data-filter-group='services']\"\n\t\t);\n\t\tthis.branchFilter = element.querySelector(\"[data-filter-group='branches']\");\n\t\tthis.allItems = Array.from(\n\t\t\telement.querySelectorAll(this.options.itemSelector)\n\t\t);\n\t\tthis.loadTrigger = element.querySelector(this.options.triggerSelector);\n\t\tthis.cardIncrease = parseInt(\n\t\t\telement.getAttribute('data-load-more-increase') ||\n\t\t\t\tthis.options.cardIncrease + ''\n\t\t);\n\t\tthis.optionContainers = Array.from(\n\t\t\telement.querySelectorAll(this.options.optionContainerSelector)\n\t\t);\n\t\tthis.chipContainer = element.querySelector(\n\t\t\tthis.options.chipContainerSelector\n\t\t);\n\t\tthis.resetTrigger = element.querySelector(this.options.resetSelector);\n\n\t\tthis.filteredItems = this.allItems;\n\t\tthis.setVisibleItems();\n\t\tthis.setButtonState();\n\n\t\tthis.loadTrigger?.addEventListener('click', () => {\n\t\t\tthis.page += 1;\n\t\t\tthis.setVisibleItems();\n\t\t\tthis.setButtonState();\n\t\t});\n\n\t\t// create close icon\n\t\tthis.closeIcon = document.createElement('span');\n\t\tthis.closeIcon.classList.add('c-icon');\n\n\t\tconst useElem = document.createElementNS(\n\t\t\t'http://www.w3.org/2000/svg',\n\t\t\t'use'\n\t\t);\n\t\tuseElem.setAttributeNS(\n\t\t\t'http://www.w3.org/1999/xlink',\n\t\t\t'xlink:href',\n\t\t\t'/fonts/icons.svg#close'\n\t\t);\n\n\t\tconst svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\t\tsvg.setAttributeNS('http://www.w3.org/2000/svg', 'viewBox', '0 0 24 24');\n\t\tsvg.appendChild(useElem);\n\n\t\tthis.closeIcon.appendChild(svg);\n\n\t\tvar uiState = this.deserializeHash();\n\t\t\n\t\tmixitup.use(mixitupMultifilter);\n\t\tthis.mixer = mixitup(element, {\n\t\t\tmultifilter: {\n\t\t\t\tenable: true,\n\t\t\t},\n\t\t\tcontrols: {\n\t\t\t\tscope: 'local',\n\t\t\t},\n\t\t\tcallbacks: {\n\t\t\t\tonMixEnd: (e) => {\n\t\t\t\t\tthis.update(e);\n\t\t\t\t},\n\t\t\t\tonMixClick: (e) => {\n\t\t\t\t\tthis.hideItems(this.allItems);\n\t\t\t\t},\n\t\t\t},\n\t\t\tselectors: {\n\t\t\t\ttarget: this.options.itemSelector,\n\t\t\t\tcontrol: '[data-mixitup-control]',\n\t\t\t},\n\t\t\tanimation: {\n\t\t\t\tenable: false,\n\t\t\t},\n\t\t});\n\t\tif (uiState) {\t\t\t\n\t\t\tthis.syncMixerWithPreviousUiState(uiState);\n\t\t}\n\t}\n\n\tdeserializeHash() {\n\t\tvar hash = window.location.hash.replace(/^#/g, '');\n\t\tvar obj = null;\n\t\tvar groups = [];\n\n\t\tif (!hash) return obj;\n\n\t\tobj = {};\n\t\tgroups = hash.split('&');\n\n\t\tgroups.forEach(function (group) {\n\t\t\tvar pair = group.split('=');\n\t\t\tvar groupName = pair[0];\n\n\t\t\tobj[groupName] = pair[1].split(',');\n\t\t});\n\n\t\treturn obj;\n\t}\n\n\tserializeUiState(uiState) {\n\t\tvar output = '';\n\n\t\tfor (var key in uiState) {\n\t\t\tvar values = uiState[key];\n\n\t\t\tif (!values.length) continue;\n\n\t\t\toutput += key + '=';\n\t\t\toutput += values.join(',');\n\t\t\toutput += '&';\n\t\t}\n\n\t\toutput = output.replace(/&$/g, '');\n\n\t\treturn output;\n\t}\n\n\tgetUiState() {\t\t\n\t\tif (this.servicesFilter && this.branchFilter == null) {\n\t\t\treturn {\n\t\t\t\tservices: this.mixer\n\t\t\t\t\t.getFilterGroupSelectors('services')\n\t\t\t\t\t.map(this.getValueFromSelector),\n\t\t\t};\n\t\t} else if (this.servicesFilter == null && this.branchFilter) {\n\t\t\treturn {\n\t\t\t\tbranches: this.mixer\n\t\t\t\t\t.getFilterGroupSelectors('branches')\n\t\t\t\t\t.map(this.getValueFromSelector),\n\t\t\t};\n\t\t} else if (this.servicesFilter && this.branchFilter) {\n\t\t\treturn {\n\t\t\t\tservices: this.mixer\n\t\t\t\t\t.getFilterGroupSelectors('services')\n\t\t\t\t\t.map(this.getValueFromSelector),\n\t\t\t\tbranches: this.mixer\n\t\t\t\t\t.getFilterGroupSelectors('branches')\n\t\t\t\t\t.map(this.getValueFromSelector),\n\t\t\t};\n\t\t}\n\t}\n\n\tupdate(e) {\n\t\tif (this.servicesFilter || this.branchFilter) {\n\t\t\tthis.setHash(e);\n\t\t}\t\t\n\t\tthis.filteredItems = e.show;\n\t\tthis.hideItems(e.hide);\n\t\tthis.setVisibleItems();\n\t\tthis.setButtonState();\n\t\tthis.setBadgesState();\n\t\tthis.setResetState();\n\t}\n\tsetHash(state) {\n\t\tvar selector = state.activeFilter.selector;\n\t\tvar uiState = this.getUiState();\n\t\tvar newHash = '#' + this.serializeUiState(uiState);\n\t\tif (\n\t\t\tselector === this.options.itemSelector &&\n\t\t\twindow.location.href.indexOf('#') > -1\n\t\t) {\n\t\t\tthis.activeHash = '';\n\t\t\thistory.replaceState(null, document.title, window.location.pathname);\n\t\t} else if (\n\t\t\tnewHash !== window.location.hash &&\n\t\t\tselector !== this.options.itemSelector\n\t\t) {\n\t\t\tthis.activeHash = newHash;\n\t\t\thistory.replaceState(\n\t\t\t\tnull,\n\t\t\t\tdocument.title,\n\t\t\t\twindow.location.pathname + newHash\n\t\t\t);\n\t\t}\n\t}\n\n\tsyncMixerWithPreviousUiState(uiState) {\n\t\tif (this.servicesFilter) {\n\t\t\tvar services = uiState && uiState.services ? uiState.services : [];\n\n\t\t\tthis.mixer.setFilterGroupSelectors(\n\t\t\t\t'services',\n\t\t\t\tservices.map(this.getSelectorFromValue)\n\t\t\t);\n\t\t}\n\t\tif (this.branchFilter) {\n\t\t\tvar branches = uiState && uiState.branches ? uiState.branches : [];\n\n\t\t\tthis.mixer.setFilterGroupSelectors(\n\t\t\t\t'branches',\n\t\t\t\tbranches.map(this.getSelectorFromValue)\n\t\t\t);\n\t\t}\n\t\treturn this.mixer.parseFilterGroups();\n\t}\n\n\tgetValueFromSelector(selector) {\n\t\treturn selector.replace(/^./, '');\n\t}\n\n\tgetSelectorFromValue(value) {\n\t\treturn '.' + value;\n\t}\n\n\tsetBadgesState() {\n\t\tif (this.chipContainer != null) {\n\t\t\tthis.chipContainer.innerHTML = '';\n\n\t\t\tthis.optionContainers.forEach((options) => {\n\t\t\t\tconst filters = options.querySelectorAll(\n\t\t\t\t\tthis.options.activeFilterSelector\n\t\t\t\t);\n\t\t\t\tfilters.forEach((filter: HTMLElement) => {\n\t\t\t\t\tthis.chipContainer.appendChild(this.createChip(filter));\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t}\n\n\tcreateChip(filter: HTMLElement) {\n\t\tconst chip = document.createElement('a');\n\t\tchip.classList.add('c-filter__chips__item', 'c-text');\n\t\tchip.innerHTML = filter.innerHTML;\n\t\tchip.prepend(this.closeIcon.cloneNode(true));\n\t\tchip.addEventListener('click', () => {\n\t\t\tfilter.click();\n\t\t});\n\t\treturn chip;\n\t}\n\n\tsetVisibleItems(showAll = false) {\n\t\tconst maxVal = showAll\n\t\t\t? this.filteredItems.length\n\t\t\t: this.cardIncrease * this.page;\n\n\t\tconst visibleList = this.filteredItems.slice(0, maxVal);\n\t\tvisibleList.forEach((item) => {\n\t\t\titem.classList.remove(this.options.hiddenClass);\n\t\t});\n\n\t\tconst hiddenList = this.filteredItems.slice(maxVal);\n\t\thiddenList.forEach((item) => {\n\t\t\titem.classList.add(this.options.hiddenClass);\n\t\t});\n\t}\n\n\thideItems(list = []) {\n\t\tlist.forEach((item) => {\n\t\t\titem.classList.add(this.options.hiddenClass);\n\t\t});\n\t}\n\n\tsetResetState() {\n\t\tthis.resetTrigger?.classList.toggle(\n\t\t\t'd-none',\n\t\t\tthis.chipContainer?.childElementCount == 0\n\t\t);\n\t}\n\n\tsetButtonState() {\n\t\tthis.loadTrigger?.classList.toggle(\n\t\t\t'd-none',\n\t\t\tthis.filteredItems.length <= this.cardIncrease * this.page\n\t\t);\n\t}\n}\n","import MicroModal from 'micromodal';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\n@Component({ className: 'js-img-modal' })\nexport class ImgModalComponent {\n\tprivate modalContentSelector = \".js-img-modal-content\";\n\tprivate content;\n\n\tconstructor(private element: HTMLElement) {\n\t\telement.addEventListener('click', () => {\n\t\t\tif (window.innerWidth > 900) {\n\t\t\t\tMicroModal.show(element.getAttribute('data-trigger-for'), {\n\t\t\t\t\tonShow: this.openModal.bind(this),\n\t\t\t\t});\n\t\t\t}\n\t\t})\n\t}\n\n\topenModal(modal: Element) {\n\t\tthis.content = modal.querySelector(this.modalContentSelector) as HTMLElement;\n\t\tif (this.content) {\n\t\t\tconst img = this.element.querySelector('picture').cloneNode(true);\n\t\t\tthis.content.appendChild(img);\n\t\t}\n\n\t\tconst closeTriggers = Array.from(modal.getElementsByClassName('js-modal-close'));\n\t\tcloseTriggers.forEach(trigger => trigger.addEventListener('click', this.closeModal.bind(this)));\n\t}\n\n\tcloseModal() {\n\t\tif (this.content) {\n\t\t\tthis.content.innerHTML = '';\n\t\t}\n\n\t\tconst modalId = this.element.getAttribute('data-trigger-for');\n\t\tMicroModal.close(modalId);\n\t}\n}\n","import MicroModal from 'micromodal';\nimport { IFramePlayer } from '../../../libs/gin-tonic/components/player';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\n@Component({ className: 'js-player-modal' })\nexport class PlayerModalComponent {\n\tprivate player: IFramePlayer = undefined;\n\n\tconstructor(private element: HTMLElement) {\n\t\telement.addEventListener('click', () => {\n\t\t\tMicroModal.show(element.getAttribute('data-trigger-for'), {\n\t\t\t\tonShow: this.openModal.bind(this),\n\t\t\t});\n\t\t})\n\t}\n\n\topenModal(modal: Element) {\n\t\tconst playerElement = modal.querySelector('.js-player') as HTMLElement;\n\t\tlet src = this.element.getAttribute('data-player-src') || '';\n\t\tif (playerElement) {\n\t\t\tsrc = src.replace('&controls=0', '');\n\t\t\tplayerElement.querySelector('iframe')?.setAttribute('src', src)\n\t\t\tthis.player = new IFramePlayer(playerElement);\n\t\t\tthis.player.play();\n\t\t}\n\n\t\tconst closeTriggers = Array.from(modal.getElementsByClassName('js-modal-close'));\n\t\tcloseTriggers.forEach(trigger => trigger.addEventListener('click', this.closeModal.bind(this)));\n\t}\n\n\tcloseModal() {\n\t\tconst modalId = this.element.getAttribute('data-trigger-for');\n\t\tthis.player?.destroy()\n\t\tMicroModal.close(modalId);\n\t}\n}\n","import { Component } from '../../../libs/gin-tonic/helpers/compiler';\nimport { getParentWithClass } from '../../../libs/gin-tonic/helpers/dom/get-parent-with-class';\n\n@Component({ className: 'js-multi-filter' })\nexport class MultiFilterComponent {\n\tprivate overlay: HTMLElement;\n\tprivate button: HTMLElement;\n\tprivate optionsContainer: HTMLElement;\n\tprivate parentClass = \"js-multi-filter-parent\";\n\tprivate resetSelector = \".js-multi-filter-reset\";\n\tprivate activeOptionSelector = \".mixitup-control-active\";\n\n\tconstructor(private element: HTMLElement) {\n\t\tthis.overlay = document.querySelector('.js-multi-filter-overlay');\n\t\tthis.button = this.element.querySelector('.js-multi-filter-button');\n\t\tthis.optionsContainer = this.element.querySelector('.js-multi-filter-options-container');\n\t\tconst parent = getParentWithClass(this.element, this.parentClass);\n\t\tif (parent) {\n\t\t\tparent.querySelectorAll(this.resetSelector).forEach(btn => btn.addEventListener('click', () => setTimeout(this.setButtonState, 100)))\n\t\t}\n\n\t\t// this.optionsContainer.addEventListener('click', () => setTimeout(this.setButtonState, 100));\n\t\tthis.button?.addEventListener('click', this.open);\n\t\tthis.overlay?.addEventListener('click', this.close);\n\t}\n\n\tsetButtonState = () => {\n\t\tconsole.log(\"setState\");\n\t\tconst activeItems = this.optionsContainer.querySelectorAll(this.activeOptionSelector);\n\t\tthis.button.classList.toggle('is-active', activeItems.length > 0)\n\t}\n\n\topen = () => {\n\t\tconsole.log(\"open\");\n\t\t\n\t\tthis.overlay?.classList.add('is-showing');\n\t\tthis.button?.classList.add('is-open');\n\t\tthis.optionsContainer?.classList.add('is-visible');\n\t}\n\n\tclose = () => {\n\t\tconsole.log(\"close\");\n\t\tthis.overlay?.classList.remove('is-showing');\n\t\tthis.button?.classList.remove('is-open');\n\t\tthis.optionsContainer?.classList.remove('is-visible');\n\t}\n}\n","import { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\ndeclare let gsap: any;\ndeclare let Observer: any;\n\n@Component({ className: 'js-magic-scroll-toggle-visibility' })\nexport class MagicScrollToggleVisibilityComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tgsap.registerPlugin(Observer);\n\t\tthis.setTopStyle();\n\n\t\tObserver.create({\n\t\t\ttarget: window,\n\t\t\ttype: 'scroll',\n\t\t\ttolerance: 50,\n\t\t\tonUp: () => this.element.classList.remove('is-hidden'),\n\t\t\tonDown: () => {\n\t\t\t\tif (window.scrollY > 100) {\n\t\t\t\t\tconst isChildActive = this.element.querySelector('.js-hamburger.is-active');\n\t\t\t\t\tif (isChildActive == null) {\n\t\t\t\t\t\tthis.element.classList.add('is-hidden')\n\t\t\t\t\t}\n\t\t\t\t\tthis.element.classList.remove('is-top')\n\t\t\t\t}\n\t\t\t},\n\t\t\tonChange: () => this.setTopStyle()\n\t\t});\n\t}\n\n\tprivate setTopStyle() {\n\t\tthis.element.classList.toggle('is-top', window.scrollY < 100)\n\t}\n}\n","import { Mixit } from '../../../libs/gin-tonic/components/mixitup';\nimport { SwiperItem } from '../../../libs/gin-tonic/components/swiper';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\n@Component({ className: 'js-sliders' })\nexport class SlidersComponent {\n\tprivate mixitup;\n\tprivate swiperItem: SwiperItem;\n\tprivate navs: HTMLElement[];\n\n\tconstructor(private element: HTMLElement) {\n\t\tconst maxPerView = parseInt(\n\t\t\tthis.element.getAttribute('data-slider-max-per-view') || '3'\n\t\t);\n\t\tthis.mixitup = new Mixit(this.element, { animationDuration: 0 });\n\t\tthis.navs = Array.from(\n\t\t\tthis.element.querySelectorAll('.js-sliders-nav')\n\t\t);\n\n\t\tthis.swiperItem = new SwiperItem(this.element, {\n\t\t\tscale: false,\n\t\t\tspacing: 40,\n\t\t\tvertical: false,\n\t\t\tmousewheel: false,\n\t\t\tbreakpoints: {\n\t\t\t\t0: {\n\t\t\t\t\tslidesPerView: 1,\n\t\t\t\t},\n\t\t\t\t576: {\n\t\t\t\t\tslidesPerView: 2,\n\t\t\t\t},\n\t\t\t\t1200: {\n\t\t\t\t\tslidesPerView: 3,\n\t\t\t\t},\n\t\t\t\t1400: {\n\t\t\t\t\tslidesPerView: maxPerView,\n\t\t\t\t},\n\t\t\t},\n\t\t\tinitialSlide: 0,\n\t\t\tnavigation: {\n\t\t\t\tnextEl: '.swiper-next',\n\t\t\t\tprevEl: '.swiper-prev',\n\t\t\t},\n\t\t});\n\n\t\tif (this.navs.length) {\n\t\t\tthis.element.addEventListener('mixStart', (e: CustomEvent) => {\n\t\t\t\tthis.navs.forEach((i) => {\n\t\t\t\t\ti.classList.add('is-hidden');\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tthis.element.addEventListener('mixEnd', (e: CustomEvent) => {\n\t\t\t\tthis.swiperItem.slideTo(0);\n\t\t\t\tconst activeClass = e.detail?.state?.activeFilter?.selector?.replace(\n\t\t\t\t\t'.',\n\t\t\t\t\t''\n\t\t\t\t);\n\t\t\t\tconst ordering = e.detail?.state?.activeSort?.order;\n\t\t\t\tconst sortString = e.detail?.state?.activeSort?.sortString;\n\n\t\t\t\tthis.navs\n\t\t\t\t\t.find((i) => i.classList.contains(activeClass))\n\t\t\t\t\t.classList.remove('is-hidden');\n\n\t\t\t\tif (activeClass == 'event' && sortString != 'startdate:asc') {\n\t\t\t\t\tthis.mixitup.sort('startdate:asc');\n\t\t\t\t} else if (activeClass != 'event' && ordering == 'desc') {\n\t\t\t\t\tthis.mixitup.sort('default:asc');\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n","import { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\ndeclare let ScrollMagic: any;\ndeclare let TweenMax: any;\ndeclare let Linear: any;\n\nexport const ScrollMagicController = new ScrollMagic.Controller();\nconst ITEM_OFFSET = 30;\n\n@Component({ className: 'js-magic-scroll-stack' })\nexport class MagicScrollStackComponent {\n\tprivate items: NodeListOf | undefined[] = [];\n\tprivate containerHeight = 0;\n\tprivate scaler = 0;\n\n\tconstructor(private element: HTMLElement) {\n\t\tif (window.innerWidth > 576) {\n\t\t\tconst hook = Number.parseFloat(this.element.getAttribute('data-magic-hook') || '0.5');\n\t\t\tthis.items = this.element.querySelectorAll('.js-magic-scroll-stack-item') || [];\n\t\t\tthis.containerHeight = this.element.getBoundingClientRect().height;\n\t\t\tthis.scaler = 1 / this.items.length;\n\n\t\t\tthis.items.forEach((item, i) => {\n\t\t\t\tthis.setScene(hook, item, i)\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate setScene(hook: number, item: Element, i: number) {\n\t\tconst offset = this.getOffset(i) + (i * -1 * ITEM_OFFSET);\n\t\tconst duration = this.containerHeight - offset - this.items[this.items.length - 1].getBoundingClientRect().height;\n\n\t\t// set pin\n\t\tnew ScrollMagic.Scene({\n\t\t\ttriggerElement: this.element,\n\t\t\ttriggerHook: hook,\n\t\t\tduration: duration,\n\t\t\toffset: offset,\n\t\t})\n\t\t\t.setPin(item, { pushFollowers: this.items.length - 1 == i ? true : false })\n\t\t\t.addTo(ScrollMagicController)\n\t\t// .addIndicators({\n\t\t// \tname: \"stick \" + (i + 1),\n\t\t// \tcolorStart: 'red',\n\t\t// \tcolorEnd: 'red',\n\t\t// \tcolorTrigger: 'red',\n\t\t// })\n\n\t\t// scale down\n\t\tnew ScrollMagic.Scene({\n\t\t\ttriggerElement: item,\n\t\t\ttriggerHook: hook,\n\t\t\tduration: item.getBoundingClientRect().height,\n\t\t\toffset: (i * -1 * ITEM_OFFSET),\n\t\t})\n\t\t\t.setTween([\n\t\t\t\tTweenMax.fromTo(\n\t\t\t\t\titem,\n\t\t\t\t\t1,\n\t\t\t\t\t{\n\t\t\t\t\t\tcss: { scaleX: 1, scaleY: 1 }\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcss: { scaleX: this.scaler * (i + 1), scaleY: this.scaler * (i + 1) },\n\t\t\t\t\t\tease: Linear.easeNone,\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tTweenMax.fromTo(\n\t\t\t\t\titem.querySelectorAll('.js-magic-scroll-stack-slide-target'),\n\t\t\t\t\t1,\n\t\t\t\t\t{\n\t\t\t\t\t\tcss: { opacity: 1 }\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tcss: { opacity: this.items.length - 1 == i ? 1 : 0 },\n\t\t\t\t\t\tease: Linear.easeNone\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t])\n\t\t\t.addTo(ScrollMagicController)\n\t\t// .addIndicators({\n\t\t// \tname: \"zoom \" + (i + 1),\n\t\t// \tcolorStart: 'green',\n\t\t// \tcolorEnd: 'green',\n\t\t// \tcolorTrigger: 'green',\n\t\t// })\n\t}\n\n\tprivate getOffset(i) {\n\t\tlet offset = 0;\n\t\tfor (let j = 0; j < i; j++) {\n\t\t\toffset += this.items[j].getBoundingClientRect().height;\n\t\t}\n\t\treturn offset;\n\t}\n}\n","import { A11y, Autoplay, default as Swiper, default as SwiperCore, Navigation } from 'swiper';\nimport 'swiper/css/bundle';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\nSwiperCore.use([Navigation, Autoplay, A11y]);\n\ndeclare let TimelineMax: any;\ndeclare let TweenMax: any;\ndeclare let Linear: any;\n@Component({ className: 'js-statement' })\nexport class StatementComponent {\n\tprivate delay = 10000;\n\tprivate duration = .3;\n\n\tconstructor(private element: HTMLElement) {\n\t\tconst autoplay = this.element.getAttribute('data-statement-autoplay') === \"true\";\n\n\t\tnew Swiper(element, {\n\t\t\tcssMode: false,\n\t\t\tpreloadImages: true,\n\t\t\tlazy: true,\n\t\t\tspeed: 500,\n\t\t\tspaceBetween: 1,\n\t\t\tslidesPerView: 1,\n\t\t\tcenteredSlides: false,\n\t\t\troundLengths: true,\n\t\t\twatchOverflow: true,\n\t\t\tloop: true,\n\t\t\tdirection: 'horizontal',\n\t\t\twatchSlidesProgress: true,\n\t\t\tautoplay: autoplay ? {\n\t\t\t\tdelay: this.delay,\n\t\t\t\tdisableOnInteraction: true,\n\t\t\t} : false,\n\t\t\tinitialSlide: 0,\n\t\t\tslideToClickedSlide: false,\n\t\t\twrapperClass: 'js-statement-wrapper',\n\t\t\tsimulateTouch: false,\n\t\t\tpreventClicks: true,\n\t\t\tinit: true,\n\t\t\tnavigation: {\n\t\t\t\tnextEl: '.js-statement-next',\n\t\t\t\tprevEl: '.js-statement-prev',\n\t\t\t},\n\t\t\ton: {\n\t\t\t\ttransitionStart: this.setActiveSlideTween,\n\t\t\t\tafterInit: this.setActiveSlideTween,\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate setActiveSlideTween = (swiper: Swiper) => {\n\t\tthis.countdown(swiper);\n\t\tconst reloadBtn = this.element.querySelector('.js-statement-next');\n\t\tif (reloadBtn) {\n\t\t\treloadBtn.classList.remove('spin');\n\t\t\tsetTimeout(() => reloadBtn.classList.add('spin'), 1)\n\t\t}\n\n\t}\n\n\tcountdown = (swiper: Swiper) => {\n\t\tconst bar = swiper.slides[swiper.activeIndex].querySelector('.js-statement-countdown') as HTMLElement;\n\t\tlet id;\n\n\t\tif (swiper.autoplay.running) {\n\t\t\tlet count = 100;\n\t\t\tid = setInterval(function () {\n\t\t\t\tcount -= 1\n\t\t\t\tbar.style.width = count + '%'\n\t\t\t\tif (count <= 0) {\n\t\t\t\t\tclearInterval(id)\n\t\t\t\t}\n\t\t\t}, this.delay / 100);\n\t\t} else {\n\t\t\tclearInterval(id)\n\t\t\tbar.style.width = '0px'\n\t\t}\n\t}\n}\n","import { Component } from '../../../libs/gin-tonic/helpers/compiler';\n\ndeclare let ScrollMagic: any;\nexport const ScrollMagicController = new ScrollMagic.Controller();\n\n@Component({ className: 'c-text-highlight' })\nexport class HighlightComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tnew ScrollMagic.Scene({\n\t\t\ttriggerElement: this.element,\n\t\t\ttriggerHook: 0.6,\n\t\t})\n\t\t\t.setClassToggle(this.element, 'is-active')\n\t\t\t.addTo(ScrollMagicController)\n\t}\n}\n","import MicroModal from 'micromodal';\nimport { Component } from '../../../libs/gin-tonic/helpers/compiler';\nimport { getParentOrSelfWithClass } from '../../../libs/gin-tonic/helpers/dom/get-parent-or-self-with-class';\n\ndeclare let gsap: any;\ndeclare let Flip: any;\ndeclare let Linear: any;\n\n@Component({ className: 'js-team-modal' })\nexport class TeamComponent {\n\tprivate container = null;\n\tprivate newContainer;\n\tprivate modalId = 'modal-team';\n\n\tconstructor(private element: HTMLElement) {\n\t\tgsap.registerPlugin(Flip);\n\t\tthis.newContainer = this.element.querySelector(\n\t\t\t'.js-team-modal-img-container'\n\t\t);\n\t\tconst triggers = Array.from(\n\t\t\tdocument.querySelectorAll('.js-team-modal-trigger')\n\t\t) as HTMLElement[];\n\n\t\tif (triggers && triggers.length > 0) {\n\t\t\ttriggers.forEach((trigger) => {\n\t\t\t\ttrigger.addEventListener('click', (e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tMicroModal.show(this.modalId, {\n\t\t\t\t\t\tonShow: (modal) => this.open(modal, trigger),\n\t\t\t\t\t\tonClose: (modal) => this.close(modal),\n\t\t\t\t\t\topenClass: 'is-open',\n\t\t\t\t\t\tdisableFocus: false,\n\t\t\t\t\t\tawaitOpenAnimation: true,\n\t\t\t\t\t\tawaitCloseAnimation: true,\n\t\t\t\t\t});\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\t// add click event to closing elements as micromodal doesn't detect everything\n\t\tdocument\n\t\t\t.querySelector(`#${this.modalId}`)\n\t\t\t.querySelectorAll('[data-micromodal-close]')\n\t\t\t.forEach((element) => {\n\t\t\t\telement.addEventListener('click', (e) => {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tMicroModal.close(this.modalId);\n\t\t\t\t});\n\t\t\t});\n\n\t\tdocument\n\t\t\t.querySelector(`#${this.modalId}`)\n\t\t\t.querySelectorAll('[data-micromodal-overlay-close]')\n\t\t\t.forEach((element) => {\n\t\t\t\telement.addEventListener('click', (e) => {\n\t\t\t\t\tif (element === (e.target as HTMLElement)) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tMicroModal.close(this.modalId);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t}\n\n\topen(modal: HTMLElement, elem: HTMLElement) {\n\t\tconst trigger = getParentOrSelfWithClass(elem, 'js-team-modal-trigger');\n\t\t// ----- set Values -----\n\t\tconst nameEl = modal.querySelector('.js-team-modal-person-name');\n\t\tif (nameEl != null) {\n\t\t\tnameEl.textContent =\n\t\t\t\ttrigger.querySelector('.js-team-person-name')?.textContent || '';\n\t\t}\n\t\tconst diplomaEl = modal.querySelector('.js-team-modal-person-diploma');\n\t\tif (diplomaEl != null) {\n\t\t\tdiplomaEl.textContent = trigger.getAttribute('data-team-diploma');\n\t\t}\n\t\tconst positionEl = modal.querySelector('.js-team-modal-person-position');\n\t\tif (positionEl != null) {\n\t\t\tpositionEl.textContent =\n\t\t\t\ttrigger.querySelector('.js-team-person-position')?.textContent || '';\n\t\t}\n\n\t\t// linkedin\n\t\tconst linkedinEl = modal.querySelector(\n\t\t\t'.js-team-modal-person-linkedin'\n\t\t);\n\t\tif (linkedinEl != null) {\n\t\t\tconst linkedinVal = trigger.getAttribute('data-team-linkedin') || '';\n\t\t\tlinkedinEl.classList.toggle('is-hidden', linkedinVal == '');\n\t\t\tlinkedinEl.href = linkedinVal;\n\t\t}\n\n\t\t// mail\n\t\tconst mailEl = modal.querySelector(\n\t\t\t'.js-team-modal-person-mail'\n\t\t);\n\t\tif (mailEl != null) {\n\t\t\tconst mailVal = trigger.getAttribute('data-team-mail');\n\t\t\tconst icon = mailEl.querySelector('.c-icon');\n\t\t\tmailEl.classList.toggle('is-hidden', mailVal == '');\n\t\t\tmailEl.innerHTML = '';\n\t\t\tmailEl.append(icon);\n\t\t\tmailEl.append(mailVal);\n\t\t\tmailEl.href = 'mailto:' + mailVal;\n\t\t}\n\n\t\t// animate img\n\t\tconst img = trigger.querySelector('.js-team-person-img');\n\n\t\tif (img) {\n\t\t\tthis.container = img.parentNode;\n\t\t\tconst state = Flip.getState(img);\n\t\t\tthis.newContainer.appendChild(img);\n\n\t\t\tFlip.from(state, {\n\t\t\t\tduration: 0.5,\n\t\t\t\tease: Linear.easeInOut,\n\t\t\t\tscale: true,\n\t\t\t\tzIndex: 10,\n\t\t\t\tabsolute: true,\n\t\t\t\tnested: true,\n\t\t\t});\n\t\t}\n\n\t\t// animate Values\n\t\tgsap.fromTo(\n\t\t\tmodal.querySelector('.js-team-profile')?.children,\n\t\t\t{\n\t\t\t\ty: 50,\n\t\t\t\topacity: 0,\n\t\t\t},\n\t\t\t{\n\t\t\t\ty: 0,\n\t\t\t\topacity: 1,\n\t\t\t\tstagger: 0.1,\n\t\t\t}\n\t\t);\n\t}\n\n\tclose(modal: HTMLElement) {\n\t\t// linkedin\n\t\tconst linkedinEl = modal.querySelector(\n\t\t\t'.js-team-modal-person-linkedin'\n\t\t);\n\t\tif (linkedinEl != null) {\n\t\t\tlinkedinEl.classList.remove('is-hidden');\n\t\t\tlinkedinEl.href = '';\n\t\t}\n\n\t\t// mail\n\t\tconst mailEl = modal.querySelector(\n\t\t\t'.js-team-modal-person-mail'\n\t\t);\n\t\tif (mailEl != null) {\n\t\t\tconst icon = mailEl.querySelector('.c-icon');\n\t\t\tmailEl.classList.remove('is-hidden');\n\t\t\tmailEl.innerHTML = '';\n\t\t\tmailEl.href = '';\n\t\t\tmailEl.append(icon);\n\t\t}\n\n\t\tconst img = this.newContainer.querySelector('.js-team-person-img');\n\n\t\tif (img) {\n\t\t\tconst state = Flip.getState(img);\n\t\t\tthis.container.appendChild(img);\n\t\t\tthis.container = null;\n\n\t\t\tFlip.from(state, {\n\t\t\t\tduration: 0.5,\n\t\t\t\tease: Linear.easeInOut,\n\t\t\t\tscale: true,\n\t\t\t\tzIndex: 10,\n\t\t\t\tabsolute: true,\n\t\t\t\tnested: true,\n\t\t\t});\n\t\t}\n\t}\n}\n","import { Collapse } from '.';\nimport { Component } from '../../helpers/compiler';\n\n@Component({ className: 'js-collapse' })\nexport class CollapseComponent {\n\tconstructor(public element: HTMLElement) {\n\t\tconst closeSiblings = (element.getAttribute('data-collapse-close-siblings') === 'true');\n\n\t\tnew Collapse(element, { closeSiblings: closeSiblings });\n\t}\n}\n","import { mergeOptions } from '../../helpers/common/merge-options';\nimport { getSelectorElementFromElement } from '../../helpers/dom/get-selector-element-from-element';\nimport { getTriggerElementsFromElement } from '../../helpers/dom/get-trigger-elements-form-element';\nimport { EventDispatcher } from '../../helpers/events/event-dispatcher';\nimport { eventNamespaceFactory } from '../../helpers/events/event-namespace-factory';\nimport { addTransitionEndListener } from '../../helpers/transition/add-transition-end-listener';\n\nconst stringCollapse = 'Collapse';\n\ndeclare global {\n\tinterface Element {\n\t\t[stringCollapse]: Collapse | undefined;\n\t}\n}\n\nexport interface CollapseOptions {\n\tcomponentClass: string;\n\tactiveClass: string;\n\tactiveParentClass: string;\n\tshowClass: string;\n\tshowClassDesktop: string;\n\tdesktopWidth: number;\n\tcollapsingClass: string;\n\ttransitionDuration: number;\n\tanimateProp: 'height' | 'width' | false;\n\tisHideable: boolean;\n\tcloseSiblings: boolean;\n\tuseShowClassDesktop: boolean;\n\tdataParentSelector: string;\n\tdataTargetSelector: string;\n\tdataToggleSelector: string;\n}\n\nexport class Collapse {\n\tstatic options: CollapseOptions = {\n\t\tactiveClass: 'is-active',\n\t\tactiveParentClass: 'is-active',\n\t\tanimateProp: 'height',\n\t\tcollapsingClass: 'collapse--collapsing',\n\t\tcomponentClass: 'collapse',\n\t\tshowClass: 'collapse--show',\n\t\tshowClassDesktop: 'collapse--md-show',\n\t\tdesktopWidth: 1024,\n\t\ttransitionDuration: 600,\n\t\tisHideable: true,\n\t\tcloseSiblings: false,\n\t\tuseShowClassDesktop: false,\n\t\tdataParentSelector: 'data-parent',\n\t\tdataTargetSelector: 'data-target',\n\t\tdataToggleSelector: 'data-toggle'\n\t};\n\n\tprivate options: CollapseOptions;\n\tprivate parent: HTMLElement | null;\n\tprivate triggers: HTMLElement[];\n\tprivate target: Element | undefined;\n\tprivate isTransitioning = false;\n\tpublic showing = new EventDispatcher();\n\tpublic hiding = new EventDispatcher();\n\tpublic shown = new EventDispatcher();\n\tpublic hidden = new EventDispatcher();\n\tprivate eventNamespaceFn = eventNamespaceFactory('opten.collapse');\n\n\tconstructor(public element: HTMLElement, options?: Partial) {\n\t\tthis.options = mergeOptions(Collapse, options, element);\n\n\t\tthis.parent = getSelectorElementFromElement(\n\t\t\telement,\n\t\t\tthis.options.dataParentSelector,\n\t\t\tfalse\n\t\t);\n\n\t\tthis.triggers = getTriggerElementsFromElement(this.element, this.options.dataTargetSelector);\n\n\t\t// todo: why do we need that?\n\t\tconst toggles = Array.from(\n\t\t\tdocument.querySelectorAll(\n\t\t\t\t`[${this.options.dataToggleSelector}=\"collapse\"]`\n\t\t\t)\n\t\t);\n\t\tfor (const toggle of toggles) {\n\t\t\tconst target = getSelectorElementFromElement(\n\t\t\t\ttoggle,\n\t\t\t\tthis.options.dataTargetSelector\n\t\t\t);\n\t\t\tif (target !== null && target === this.element) {\n\t\t\t\tthis.target = target;\n\t\t\t\tthis.triggers.push(toggle as HTMLElement);\n\t\t\t}\n\t\t}\n\n\t\tif (!(stringCollapse in this.element)) {\n\t\t\t// prevent adding event handlers twice\n\t\t\tthis.triggers.forEach((trigger) =>\n\t\t\t\ttrigger.addEventListener('click', this.handleClick, false)\n\t\t\t);\n\t\t}\n\n\t\tif (this.parent) {\n\t\t\tArray.from(\n\t\t\t\tthis.parent.querySelectorAll(\n\t\t\t\t\t`[${this.options.dataToggleSelector}=\"collapse\"][${this.options.dataParentSelector}=\"#${this.parent.id}\"]`\n\t\t\t\t)\n\t\t\t).forEach((element) => {\n\t\t\t\tthis._addAriaAndCollapsedClass(\n\t\t\t\t\tgetSelectorElementFromElement(\n\t\t\t\t\t\telement,\n\t\t\t\t\t\tthis.options.dataTargetSelector\n\t\t\t\t\t),\n\t\t\t\t\t[element]\n\t\t\t\t);\n\t\t\t});\n\t\t} else {\n\t\t\tthis._addAriaAndCollapsedClass(this.element, this.triggers);\n\t\t}\n\n\t\tthis.element.classList.add(this.options.componentClass);\n\n\t\tthis.element[stringCollapse] = this;\n\t}\n\n\tstatic getInstance(\n\t\telement: HTMLElement,\n\t\toptions?: CollapseOptions,\n\t\tcreate = true\n\t) {\n\t\tlet data = element[stringCollapse] as Collapse;\n\n\t\tif (!data && create) {\n\t\t\tdata = new Collapse(element, options);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tisOpen() {\n\t\tif (\n\t\t\tthis.options.useShowClassDesktop &&\n\t\t\twindow.outerWidth >= this.options.desktopWidth &&\n\t\t\tthis.element.classList.contains(this.options.showClassDesktop)\n\t\t) {\n\t\t\tthis.element.classList.add(this.options.showClass);\n\t\t}\n\t\tthis.element.classList.remove(this.options.showClassDesktop);\n\t\treturn this.element.classList.contains(this.options.showClass);\n\t}\n\n\ttoggle() {\n\t\tif (this.isOpen()) {\n\t\t\tthis.hide();\n\t\t} else {\n\t\t\tthis.show();\n\t\t}\n\t}\n\n\tshow() {\n\t\tif (this.isTransitioning || this.isOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.closeSiblings && this.parent) {\n\t\t\tconst selector = `[${this.options.dataParentSelector}=\"#${this.parent.id}\"]`;\n\t\t\tconst actives = Array.from(\n\t\t\t\tthis.parent.querySelectorAll(\n\t\t\t\t\t`${selector}.${this.options.showClass}, ${selector}.${this.options.collapsingClass}`\n\t\t\t\t)\n\t\t\t).filter((active) => active !== this.target);\n\n\t\t\tif (actives && actives.length) {\n\t\t\t\tconst anyTransitioning = actives.filter((active) => {\n\t\t\t\t\tconst collapseInstance = active[stringCollapse] as Collapse;\n\t\t\t\t\treturn collapseInstance && collapseInstance.isTransitioning;\n\t\t\t\t});\n\n\t\t\t\tif (anyTransitioning.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tactives.forEach((active) =>\n\t\t\t\t\tCollapse.getInstance(active as HTMLElement).hide()\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis._handleShow(this.element, this.triggers);\n\t}\n\n\thide() {\n\t\tif (this.isTransitioning || !this.isOpen() || !this.options.isHideable) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._handleClose(this.element, this.triggers);\n\t}\n\n\tdestroy() {\n\t\tconst element = this.element;\n\n\t\tif (element[stringCollapse]) {\n\t\t\telement[stringCollapse] = undefined;\n\n\t\t\telement.classList.remove(this.options.componentClass);\n\t\t\telement.classList.remove(this.options.collapsingClass);\n\t\t\telement.classList.remove(this.options.showClass);\n\n\t\t\tif (this.options.animateProp) {\n\t\t\t\telement.style[this.options.animateProp] = '';\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate handleClick = (event: Event) => {\n\t\t// preventDefault only for elements (which change the URL) not inside the collapsible element\n\t\tconst trigger = event?.currentTarget as HTMLElement;\n\t\tif (trigger && trigger.tagName === 'A') {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tconst target = getSelectorElementFromElement(\n\t\t\ttrigger,\n\t\t\tthis.options.dataTargetSelector\n\t\t);\n\t\tlet data = target ? target[stringCollapse] as Collapse : null;\n\n\t\tif (!data) {\n\t\t\tdata = trigger[stringCollapse] as Collapse;\n\t\t}\n\n\t\tif (target) {\n\t\t\tCollapse.getInstance(target, data.options).toggle();\n\t\t}\n\t};\n\n\tprivate _handleShow(collapseElement: HTMLElement, triggers?: Element[]) {\n\n\t\tthis.showing.dispatch();\n\t\tthis.eventNamespaceFn(collapseElement, 'show');\n\n\t\tcollapseElement.classList.remove(this.options.componentClass);\n\t\tcollapseElement.classList.add(this.options.collapsingClass);\n\t\tif (this.options.animateProp) {\n\t\t\tcollapseElement.style[this.options.animateProp] =\n\t\t\t\tcollapseElement.scrollHeight + 'px';\n\t\t}\n\n\t\tif (triggers && triggers.length) {\n\t\t\ttriggers.forEach((trigger) => {\n\t\t\t\ttrigger.classList.add(this.options.activeClass);\n\t\t\t\ttrigger.setAttribute('aria-expanded', 'true');\n\t\t\t});\n\t\t}\n\n\t\tif (this.parent) {\n\t\t\tthis.parent.classList.add(this.options.activeClass);\n\t\t}\n\n\t\tthis.isTransitioning = true;\n\n\t\taddTransitionEndListener(\n\t\t\tcollapseElement,\n\t\t\t() => {\n\t\t\t\tcollapseElement.classList.remove(this.options.collapsingClass);\n\t\t\t\tcollapseElement.classList.add(this.options.componentClass);\n\t\t\t\tcollapseElement.classList.add(this.options.showClass);\n\n\t\t\t\tthis.isTransitioning = false;\n\t\t\t\tif (this.options.animateProp) {\n\t\t\t\t\tcollapseElement.style[this.options.animateProp] = '';\n\t\t\t\t}\n\n\t\t\t\tthis.shown.dispatch();\n\t\t\t\tthis.eventNamespaceFn(collapseElement, 'shown');\n\t\t\t},\n\t\t\tthis.options.transitionDuration\n\t\t);\n\t}\n\n\tprivate _handleClose(collapseElement: HTMLElement, triggers?: Element[]) {\n\t\tthis.hiding.dispatch();\n\t\tthis.eventNamespaceFn(collapseElement, 'hide');\n\n\t\tif (this.options.animateProp) {\n\t\t\tcollapseElement.style[this.options.animateProp] =\n\t\t\t\tcollapseElement.scrollHeight + 'px';\n\t\t}\n\n\t\tcollapseElement.classList.add(this.options.collapsingClass);\n\t\tcollapseElement.classList.remove(this.options.componentClass);\n\t\tcollapseElement.classList.remove(this.options.showClass);\n\t\t// force reflow to enable transition\n\t\tcollapseElement.offsetWidth; // eslint-disable-line\n\n\t\tif (triggers && triggers.length) {\n\t\t\ttriggers.forEach((trigger) => {\n\t\t\t\tconst target = getSelectorElementFromElement(\n\t\t\t\t\ttrigger,\n\t\t\t\t\tthis.options.dataTargetSelector\n\t\t\t\t);\n\n\t\t\t\tif (target !== null) {\n\t\t\t\t\tif (!target.classList.contains(this.options.showClass)) {\n\t\t\t\t\t\ttrigger.classList.remove(this.options.activeClass);\n\t\t\t\t\t\ttrigger.setAttribute('aria-expanded', 'false');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.parent) {\n\t\t\tconst selector = `[${this.options.dataParentSelector}=\"#${this.parent.id}\"]`;\n\t\t\tconst actives = Array.from(\n\t\t\t\tthis.parent.querySelectorAll(\n\t\t\t\t\t`${selector}.${this.options.showClass}, ${selector}.${this.options.collapsingClass}`\n\t\t\t\t)\n\t\t\t).filter((o) => o !== collapseElement);\n\n\t\t\tif (this.parent && actives.length === 0) {\n\t\t\t\tthis.parent.classList.remove(this.options.activeParentClass);\n\t\t\t}\n\t\t}\n\n\t\tthis.isTransitioning = true;\n\t\tif (this.options.animateProp) {\n\t\t\tcollapseElement.style[this.options.animateProp] = '';\n\t\t}\n\n\t\taddTransitionEndListener(\n\t\t\tcollapseElement,\n\t\t\t() => {\n\t\t\t\tthis.isTransitioning = false;\n\n\t\t\t\tcollapseElement.classList.remove(this.options.collapsingClass);\n\t\t\t\tcollapseElement.classList.add(this.options.componentClass);\n\n\t\t\t\tif (this.options.animateProp) {\n\t\t\t\t\tcollapseElement.style[this.options.animateProp] = '';\n\t\t\t\t}\n\n\t\t\t\tthis.hidden.dispatch();\n\t\t\t\tthis.eventNamespaceFn(collapseElement, 'hidden');\n\t\t\t},\n\t\t\tthis.options.transitionDuration\n\t\t);\n\t}\n\n\tprivate _addAriaAndCollapsedClass(\n\t\telement: Element | null,\n\t\ttriggers: Element[]\n\t) {\n\t\tif (element) {\n\t\t\tconst isOpen = element.classList.contains(this.options.showClass);\n\n\t\t\tif (triggers && triggers.length) {\n\t\t\t\ttriggers.forEach((trigger) => {\n\t\t\t\t\tisOpen\n\t\t\t\t\t\t? trigger.classList.add(this.options.activeClass)\n\t\t\t\t\t\t: trigger.classList.remove(this.options.activeClass);\n\n\t\t\t\t\ttrigger.setAttribute(\n\t\t\t\t\t\t'aria-expanded',\n\t\t\t\t\t\tisOpen.toString().toLowerCase()\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n","import { Counter } from '.';\nimport { Component } from '../../helpers/compiler';\n\n@Component({ className: 'js-counter' })\nexport class CounterComponent {\n\tconstructor(public element: HTMLElement) {\n\t\tnew Counter(element);\n\t}\n}\n","import anime from 'animejs/lib/anime.es.js';\nimport { mergeOptions } from '../../helpers/common/merge-options';\n\nexport interface CounterOptions {\n\tcounterClass: string;\n\tdataFromSelector: string;\n\tdataToSelector: string;\n\teasing: string;\n\tround: number;\n\tduration: number;\n}\n\nexport class Counter {\n\tstatic options: CounterOptions = {\n\t\tcounterClass: '.js-counter-item',\n\t\tdataFromSelector: 'data-from-count',\n\t\tdataToSelector: 'data-to-count',\n\t\teasing: 'easeInOutSine',\n\t\tround: 1,\n\t\tduration: 500,\n\t};\n\n\tprivate options: CounterOptions;\n\n\tconstructor(public element: HTMLElement, options?: Partial) {\n\t\tthis.options = mergeOptions(Counter, options, element);\n\t\tconst counters = document.querySelectorAll(this.options.counterClass);\n\n\t\tconst observerOptions = {\n\t\t\troot: null,\n\t\t\trootMargin: '0px',\n\t\t\tthreshold: 1\n\t\t}\n\n\t\tif (typeof IntersectionObserver != 'undefined') {\n\t\t\tconst observer = new IntersectionObserver(this.onIntersect, observerOptions);\n\t\t\tcounters.forEach((counter) => {\n\t\t\t\tobserver.observe(counter);\n\t\t\t});\n\t\t} else {\n\t\t\tcounters.forEach(counter => counter.innerHTML = counter.getAttribute('data-to-count') || '')\n\t\t}\n\t}\n\n\tonIntersect = (entries: IntersectionObserverEntry[]) => {\n\t\tentries.forEach(entry => {\n\t\t\tthis.triggerAnimation(entry.target);\n\t\t})\n\t}\n\n\ttriggerAnimation = (counter: Element) => {\n\t\tconst from = parseFloat(counter.getAttribute('data-from-count') || '0');\n\t\tconst to = parseFloat(counter.getAttribute('data-to-count') || '100');\n\n\t\tanime({\n\t\t\ttargets: counter,\n\t\t\tinnerHTML: [from, to],\n\t\t\teasing: this.options.easing,\n\t\t\tround: this.options.round,\n\t\t\tduration: this.options.duration,\n\t\t})\n\t}\n}\n","import { Component } from '../../helpers/compiler';\nimport { direction, DragScroll } from './index';\n\n@Component({ className: 'js-drag-scroll' })\nexport class DragScrollComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tconst attr = (direction)[this.element.getAttribute('data-drag-scroll-direction') as keyof typeof direction];\n\t\tnew DragScroll(element, { direction: attr || direction.both });\n\t}\n}","import { mergeOptions } from '../../helpers/common/merge-options';\nimport { getParentWithClass } from '../../helpers/dom/get-parent-with-class';\n\nexport enum direction {\n\t\"both\",\n\t\"vertical\",\n\t\"horizontal\",\n}\n\nexport interface DragScrollOptions {\n\tdirection: direction,\n\tblurEdges: boolean,\n\tedgeSelector: string,\n\toffset: number,\n}\n\n// https://htmldom.dev/make-a-draggable-element/\nexport class DragScroll {\n\tprivate x = 0;\n\tprivate y = 0;\n\tprivate edge;\n\n\tprivate options: DragScrollOptions;\n\tstatic options: DragScrollOptions = {\n\t\tdirection: direction.both,\n\t\tblurEdges: true,\n\t\tedgeSelector: 'js-tabs-edge',\n\t\toffset: 0\n\t};\n\n\tconstructor(private element: HTMLElement, options?: DragScrollOptions) {\n\t\tthis.options = mergeOptions(DragScroll, options, element);\n\t\tthis.element.addEventListener('mousedown', this.mouseDownHandler);\n\t\tthis.edge = getParentWithClass(this.element, this.options.edgeSelector);\n\t\tthis.setBlurEdges();\n\t}\n\n\tmouseDownHandler = (e: MouseEvent) => {\n\t\t// Get the current mouse position\n\t\tthis.x = e.clientX;\n\t\tthis.y = e.clientY;\n\n\t\tdocument.addEventListener('mousemove', this.mouseMoveHandler);\n\t\tdocument.addEventListener('mouseup', this.mouseUpHandler);\n\t};\n\n\tmouseMoveHandler = (e: MouseEvent) => {\n\t\t// How far the mouse has been moved\n\t\tconst dx = e.clientX - this.x;\n\t\tconst dy = e.clientY - this.y;\n\n\t\t// scroll\n\t\tswitch (this.options.direction) {\n\t\t\tcase direction.horizontal:\n\t\t\t\tthis.element.scrollLeft -= dx;\n\t\t\t\tbreak;\n\t\t\tcase direction.vertical:\n\t\t\t\tthis.element.scrollTop -= dy;\n\t\t\t\tbreak;\n\t\t\tcase direction.both:\n\t\t\tdefault:\n\t\t\t\tthis.element.scrollTop -= dy;\n\t\t\t\tthis.element.scrollLeft -= dx;\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Reassign the position of mouse\n\t\tthis.x = e.clientX;\n\t\tthis.y = e.clientY;\n\n\t\tthis.setBlurEdges();\n\t};\n\n\tmouseUpHandler = () => {\n\t\tdocument.removeEventListener('mousemove', this.mouseMoveHandler);\n\t\tdocument.removeEventListener('mouseup', this.mouseUpHandler);\n\t};\n\n\tsetBlurEdges = () => {\n\t\tif (this.options.blurEdges) {\n\t\t\tconst width = this.element.getBoundingClientRect().width;\n\t\t\tthis.edge.classList.toggle('blur-right-off', this.element.scrollWidth - this.element.scrollLeft <= (width + this.options.offset))\n\t\t\tthis.edge.classList.toggle('blur-left-off', this.element.scrollLeft <= this.options.offset)\n\t\t}\n\t}\n}\n","import { default as Swiper } from 'swiper';\nimport { Component } from '../../helpers/compiler';\nimport { getParentWithClass } from '../../helpers/dom/get-parent-with-class';\n\n@Component({ className: 'js-gallery-slider', observe: true })\nexport class GallerySliderComponent {\n private instance: any;\n private header: HTMLElement | undefined;\n private interleaveOffset = 0.5;\n\n constructor(private element: HTMLElement, isCalledFromExternal = false, index = 0) {\n const wallTrigger = getParentWithClass(element, 'js-the-wall-trigger')\n this.header = element.querySelector('.js-gallery-slider-header') as HTMLElement;\n\n if (wallTrigger === null || wallTrigger === undefined) {\n const isInModal = this.element.getAttribute('data-in-modal') === 'true';\n\n if (isInModal) {\n if (isCalledFromExternal) {\n this.init(true, index);\n this.slideChange();\n }\n } else {\n this.init(false, index);\n }\n }\n }\n\n init(isInModal: boolean, index: number) {\n const wrapper = this.element.querySelector('.js-gallery-slider__wrapper') as HTMLElement;\n const pagination = this.element.querySelector('.js-gallery-slider__pagination') as HTMLElement;\n const navigation = this.element.querySelector('.js-gallery-slider__navigation') as HTMLElement;\n\n if (wrapper) {\n let navigationInstance = null;\n if (navigation) {\n const paginationNextEl = navigation.querySelector('.js-gallery-slider__navigation__next') as HTMLElement;\n const paginationPrevEl = navigation.querySelector('.js-gallery-slider__navigation__prev') as HTMLElement;\n\n navigationInstance = new Swiper(navigation, {\n slidesPerView: isInModal ? 8 : 5,\n centerInsufficientSlides: false,\n spaceBetween: 10,\n autoHeight: false,\n initialSlide: index,\n keyboard: {\n enabled: true,\n onlyInViewport: false,\n },\n watchSlidesProgress: true,\n navigation: {\n nextEl: paginationNextEl,\n prevEl: paginationPrevEl\n },\n breakpoints: {\n 320: {\n slidesPerView: 5,\n spaceBetween: 10\n },\n 768: {\n slidesPerView: 6,\n spaceBetween: 15\n },\n 1024: {\n slidesPerView: isInModal ? 7 : 5,\n spaceBetween: isInModal ? 20 : 10\n },\n 1230: {\n slidesPerView: isInModal ? 8 : 5,\n spaceBetween: isInModal ? 20 : 10\n }\n }\n });\n }\n\n this.instance = new Swiper(wrapper, {\n initialSlide: index,\n watchSlidesProgress: true,\n speed: 1000,\n navigation: {\n nextEl: (this.element.querySelector('.js-gallery-slider__next') || this.element.querySelector('.swiper-button-next')) as HTMLElement,\n prevEl: (this.element.querySelector('.js-gallery-slider__prev') || this.element.querySelector('.swiper-button-prev')) as HTMLElement\n },\n keyboard: {\n enabled: true,\n onlyInViewport: false,\n },\n on: {\n slideChange: this.slideChange,\n progress: this.progress,\n touchStart: this.touchStart,\n setTransition: this.setTransition\n },\n thumbs: navigationInstance != null ? { swiper: navigationInstance } : {}\n });\n\n document.addEventListener('lazyloaded', () => this.instance.update());\n\n if (screen.orientation && screen.orientation != undefined) {\n screen.orientation.addEventListener('change', () => this.instance.update());\n }\n else {\n window.addEventListener('orientationchange', () => this.instance.update());\n }\n }\n }\n\n slideChange = () => {\n if (this.instance && this.instance.slides) {\n const previousItem = this.instance.slides[this.instance.previousIndex];\n const activeItem = this.instance.slides[this.instance.activeIndex];\n\n if (this.header) {\n this.header.innerHTML = activeItem.getAttribute('data-gallery-slide-title')\n }\n\n if (previousItem || activeItem) {\n this.startIFrame(activeItem);\n this.stopIFrame(previousItem);\n }\n }\n };\n\n progress = (swiper: Swiper) => {\n for (let i = 0; i < swiper.slides.length; i++) {\n const slide = swiper.slides[i];\n const slideProgress = slide.progress || 0;\n const innerOffset = swiper.width * this.interleaveOffset;\n const innerTranslate = slideProgress * innerOffset;\n const slideInner = slide.querySelector(\".js-gallery-slider-inner\") as HTMLElement;\n if (slideInner) {\n slideInner.style.transform = \"translate3d(\" + innerTranslate + \"px, 0, 0)\";\n }\n }\n }\n\n touchStart = (swiper: Swiper) => {\n for (let i = 0; i < swiper.slides.length; i++) {\n swiper.slides[i].style.transition = \"\";\n }\n }\n\n setTransition = (swiper: Swiper, speed: number) => {\n for (let i = 0; i < swiper.slides.length; i++) {\n const slide = swiper.slides[i] as HTMLElement;\n slide.style.transition = speed + \"ms\";\n const slideInner = slide.querySelector(\".js-gallery-slider-inner\") as HTMLElement;\n if (slideInner) {\n slideInner.style.transition = speed + \"ms\";\n }\n }\n }\n\n destroy() {\n this.stopAllIFrames(this.element);\n this.instance.destroy();\n }\n\n private stopIFrame(el: HTMLElement) {\n const iframe = this.findIFrame(el);\n if (iframe) {\n iframe.setAttribute('src', '');\n }\n }\n\n private stopAllIFrames(el: HTMLElement) {\n if (el.parentElement) {\n this.findAllIFrames(el)?.forEach(e => this.stopIFrame(e.parentElement!));\n }\n }\n\n private startIFrame(el: HTMLElement) {\n const iframe = this.findIFrame(el);\n if (iframe) {\n let src = iframe.getAttribute('data-src') || '';\n src = src.replace('autoplay=0', 'autoplay=1');\n iframe.setAttribute('src', src);\n }\n }\n\n private findIFrame(el: HTMLElement): Element | undefined {\n if (el) {\n return el.querySelector('iframe') as Element;\n }\n }\n\n private findAllIFrames(el: HTMLElement): Element[] | undefined {\n if (el) {\n return Array.from(el.querySelectorAll('iframe')) as HTMLElement[];\n }\n }\n}\n","import { Component } from \"../../helpers/compiler\";\n\n@Component({ className: 'js-intersect-item' })\nexport class IntersectComponent {\n\tthemes: HTMLElement[];\n\n\tconstructor(private element: HTMLElement) {\n\t\tthis.themes = Array.from(\n\t\t\tdocument.querySelectorAll('.js-intersect')\n\t\t) as HTMLElement[];\n\n\t\tthis.themes.forEach(theme => {\n\t\t\tconst observer = new IntersectionObserver(\n\t\t\t\tentries => {\n\t\t\t\t\tconst [{ isIntersecting }] = entries;\n\t\t\t\t\tconst intersectClass = theme.getAttribute('data-intersect-class') || '';\n\t\t\t\t\tif (intersectClass.length > 0) {\n\t\t\t\t\t\tif (isIntersecting) {\n\t\t\t\t\t\t\tthis.element.classList.add(intersectClass);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.element.classList.remove(intersectClass);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\trootMargin: '0px 0px -100%',\n\t\t\t\t\tthreshold: [0, 0.1]\n\t\t\t\t}\n\t\t\t);\n\t\t\tobserver.observe(theme);\n\t\t});\n\t}\n}\n","import { Mixit } from \".\";\nimport { Component } from \"../../helpers/compiler\";\n\n@Component({ className: 'js-mixitup' })\nexport class MixitComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tconst multifilter = element.getAttribute('data-mixitup-multifilter') === \"true\";\n\t\tnew Mixit(element, { multifilter: multifilter });\n\t}\n}","import mixitup from 'mixitup';\nimport { mergeOptions } from '../../helpers/common/merge-options';\nimport mixitupMultifilter from './lib/mixitup-multifilter.js';\n\nexport interface MixitupOptions {\n\titemSelector: string;\n\tresetSelector: string;\n\tfilterSelector: string;\n\tmultifilter: boolean;\n\tanimationDuration: number;\n}\n\nexport class Mixit {\n\tprotected options: MixitupOptions;\n\tprivate mixer;\n\n\tstatic options: MixitupOptions = {\n\t\titemSelector: '.js-mixitup-item',\n\t\tresetSelector: '.js-mixitup-filter',\n\t\tfilterSelector: '.js-mixitup-filter',\n\t\tmultifilter: true,\n\t\tanimationDuration: 600\n\t};\n\n\tconstructor(public element: HTMLElement, options?: Partial) {\n\t\tthis.options = mergeOptions(Mixit, options, element);\n\t\tmixitup.use(mixitupMultifilter);\n\n\t\tthis.mixer = mixitup(element, {\n\t\t\tmultifilter: {\n\t\t\t\tenable: this.options.multifilter\n\t\t\t},\n\t\t\tselectors: {\n\t\t\t\ttarget: this.options.itemSelector,\n\t\t\t\tcontrol: this.options.filterSelector,\n\t\t\t},\n\t\t\tanimation: {\n\t\t\t\teffects: 'scale',\n\t\t\t\tapplyPerspective: false,\n\t\t\t\tduration: this.options.animationDuration,\n\t\t\t},\n\t\t\tcontrols: {\n\t\t\t\tscope: 'local',\n\t\t\t},\n\t\t\tcallbacks: {\n\t\t\t\tonMixStart: (state: any, futureState: any) => {\n\t\t\t\t\tthis.element.dispatchEvent(new CustomEvent('mixStart', { detail: { state: state, futureState: futureState } }))\n\t\t\t\t},\n\t\t\t\tonMixEnd: (state: any, futureState: any) => {\n\t\t\t\t\tthis.element.dispatchEvent(new CustomEvent('mixEnd', { detail: { state: state, futureState: futureState } }))\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tpublic filter(filterString: string) {\n\t\tthis.mixer.filter(filterString)\n\t}\n\n\tpublic sort(sortString: string) {\n\t\tthis.mixer.sort(sortString)\n\t}\n}\n","import { ModalGallery } from \".\";\nimport { Component } from \"../../helpers/compiler\";\n\n@Component({ className: 'js-modal-gallery' })\nexport class ModalGalleryComponent {\n constructor(private element: HTMLElement) {\n new ModalGallery(element);\n }\n}","import MicroModal from 'micromodal';\nimport { getParentWithClass } from '../../helpers/dom/get-parent-with-class';\nimport { getWindowScrollTop } from '../../helpers/dom/get-window-scroll-top';\nimport { eventNamespaceFactory } from '../../helpers/events/event-namespace-factory';\nimport { GallerySliderComponent } from '../gallery-slider/component';\n\nexport class ModalGallery {\n\tprivate overlay: HTMLElement | null = null;\n\tsliderInstance: GallerySliderComponent | null = null;\n\twallAncestor: HTMLElement | null = null;\n\tprivate _eventNamespaceFn = eventNamespaceFactory('modal-the-wall');\n\n\tconstructor(private element: HTMLElement) {\n\t\tconst modal: HTMLElement | null = document.querySelector(this.element.getAttribute('href') || '');\n\t\tif (modal) {\n\t\t\tconst wallTrigger = getParentWithClass(element, 'js-the-wall-trigger');\n\t\t\tif (wallTrigger === null || wallTrigger === undefined) {\n\t\t\t\tthis.overlay = modal.querySelector('.js-modal-overlay');\n\t\t\t\tthis.element.addEventListener('click', $event => {\n\t\t\t\t\t$event.preventDefault();\n\t\t\t\t\tthis.open();\n\t\t\t\t});\n\t\t\t\tthis.wallAncestor = getParentWithClass(modal, 'js-the-wall');\n\n\t\t\t\tmodal.addEventListener(\n\t\t\t\t\t'close',\n\t\t\t\t\te => {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\te.stopImmediatePropagation();\n\t\t\t\t\t\tMicroModal.close(modal.id);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate open() {\n\t\tif (this.element.getAttribute('href') && window.innerWidth > 768) {\n\t\t\tconst scrollTopPosition = getWindowScrollTop();\n\t\t\tMicroModal.show(this.element?.getAttribute('href')?.replace('#', ''), {\n\t\t\t\tallowTouchMove: (el: Element) => el.tagName === 'INPUT',\n\t\t\t\tonShow: (modal: Element) => {\n\t\t\t\t\tconst slider = modal.querySelector('.js-gallery-slider');\n\t\t\t\t\tif (slider) {\n\t\t\t\t\t\tconst index = this.element?.parentElement?.getAttribute('data-index') || 0;\n\t\t\t\t\t\tthis.sliderInstance = new GallerySliderComponent(slider as HTMLElement, true, +index);\n\t\t\t\t\t}\n\t\t\t\t\t// disableBodyScroll(this.overlay);\n\t\t\t\t\tdocument.body.classList.add('modal--is-open');\n\t\t\t\t\tif (this.wallAncestor) {\n\t\t\t\t\t\tthis._eventNamespaceFn(this.wallAncestor, 'opened');\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tonClose: (modal: Element) => {\n\t\t\t\t\tif (this.wallAncestor) {\n\t\t\t\t\t\tthis._eventNamespaceFn(this.wallAncestor, 'closed');\n\t\t\t\t\t}\n\t\t\t\t\tif (this.sliderInstance) {\n\t\t\t\t\t\tthis.sliderInstance.destroy();\n\t\t\t\t\t}\n\t\t\t\t\t// enableBodyScroll(this.overlay);\n\t\t\t\t\twindow.scrollTo(0, scrollTopPosition);\n\n\t\t\t\t\tsetTimeout(() => document.body.classList.remove('modal--is-open'), 600);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n","import { Modal } from \".\";\nimport { Component } from \"../../helpers/compiler\";\n\n@Component({ className: 'js-modal' })\nexport class ModalComponent {\n constructor(private element: HTMLElement) {\n new Modal(this.element);\n }\n}","import MicroModal from 'micromodal';\n\nexport class Modal {\n\tconstructor(private element: HTMLElement) {\n\t\tMicroModal.init({\n\t\t\topenClass: 'is-open',\n\t\t\tdisableScroll: true,\n\t\t\tdisableFocus: false,\n\t\t\tawaitOpenAnimation: true,\n\t\t\tawaitCloseAnimation: true,\n\t\t});\n\t}\n}\n","import { IFramePlayer } from '.';\nimport { Component } from '../../helpers/compiler';\n\n@Component({ className: 'js-player' })\nexport class IFramePlayerComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tnew IFramePlayer(element);\n\t}\n}","import { mergeOptions } from '../../helpers/common/merge-options';\n\nexport interface IFramePlayerOptions {\n\tstartPlayerClassName: string;\n\tplayingClassName: string;\n}\n\nexport class IFramePlayer {\n\tprivate button: HTMLElement | null;\n\tprivate iframe: HTMLIFrameElement | null;\n\tprivate options: IFramePlayerOptions;\n\n\tstatic options: IFramePlayerOptions = {\n\t\tstartPlayerClassName: 'js-player-start',\n\t\tplayingClassName: 'is-playing',\n\t};\n\n\tconstructor(private element: HTMLElement, options?: IFramePlayerOptions) {\n\t\tthis.options = mergeOptions(IFramePlayer, options, element);\n\n\t\tthis.button = element.querySelector(\n\t\t\t`.${this.options.startPlayerClassName}`\n\t\t);\n\n\t\tthis.iframe = element.querySelector('iframe');\n\n\t\tif (this.button) {\n\t\t\tthis.button.addEventListener('click', () => this.play(), {\n\t\t\t\tonce: true,\n\t\t\t});\n\t\t}\n\t}\n\n\tplay() {\n\t\tif (this.iframe) {\n\t\t\tif (this.iframe.src.indexOf('autoplay') != -1) {\n\t\t\t\tthis.iframe.src = this.iframe.src.replace(\"autoplay=0\", \"autoplay=1\");\n\t\t\t} else {\n\t\t\t\tthis.iframe.src += this.iframe.src.indexOf('?') === -1 ? '?autoplay=1' : '&autoplay=1';\n\t\t\t}\n\t\t\tthis.element.classList.add(this.options.playingClassName);\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tthis.iframe?.setAttribute('src', '');\n\t}\n}\n","import { Component } from \"../../helpers/compiler\";\n\ndeclare let ScrollMagic: any;\ndeclare let TweenMax: any;\ndeclare let Linear: any;\nexport const ScrollMagicController = new ScrollMagic.Controller();\n\n@Component({ className: 'js-magic-scroll-box' })\nexport class MagicScrollBoxComponent {\n constructor(private element: HTMLElement) {\n const offset = Number.parseFloat(this.element.getAttribute('data-magic-offset') || '1000');\n const hook = Number.parseFloat(this.element.getAttribute('data-magic-hook') || '0.5');\n const box = this.element.querySelector('.js-magic-scroll-box-item') || this.element;\n const content = this.element.querySelector('.js-magic-scroll-box-content') || this.element;\n\n this.setScene(offset, hook, box, content)\n }\n\n private setScene(offset: number, hook: number, box: Element, content: Element) {\n const translationHeight = window.innerHeight * hook;\n\n // animate sliding box\n new ScrollMagic.Scene({\n triggerElement: this.element,\n triggerHook: hook,\n offset: offset * -1,\n duration: offset,\n })\n .setTween(\n TweenMax.fromTo(\n box,\n 1,\n {\n css: { translateY: offset * -1, top: translationHeight }\n },\n {\n css: { translateY: 0, top: 0 },\n ease: Linear.easeNone,\n }\n )\n )\n .setClassToggle(box, 'is-animating')\n .addTo(ScrollMagicController)\n // .addIndicators({\n // name: \"box pos\",\n // colorStart: 'green',\n // colorEnd: 'green',\n // colorTrigger: 'green',\n // })\n\n // fill background\n new ScrollMagic.Scene({\n triggerElement: this.element,\n triggerHook: hook,\n offset: 0,\n })\n .setTween([\n TweenMax.to(\n box,\n .5,\n {\n css: { width: '100%', height: '100%', right: 0 },\n ease: Linear.easeInOutQuad,\n }\n ),\n TweenMax.fromTo(\n content,\n .5,\n {\n css: { opacity: 0 }\n },\n {\n css: { opacity: 1 },\n ease: Linear.easeInOut,\n delay: .5\n }\n )\n ])\n .reverse(true)\n .addTo(ScrollMagicController)\n // .addIndicators({\n // name: \"box size\",\n // colorStart: 'green',\n // colorEnd: 'green',\n // colorTrigger: 'green',\n // })\n }\n}\n","import { Component } from \"../../helpers/compiler\";\n\ndeclare let ScrollMagic: any;\ndeclare let TweenMax: any;\ndeclare let Linear: any;\nexport const ScrollMagicController = new ScrollMagic.Controller();\n\n@Component({ className: 'js-magic-scroll-fade-in' })\nexport class MagicScrollFadeInComponent {\n constructor(private element: HTMLElement) {\n const hook = Number.parseFloat(this.element.getAttribute('data-magic-hook') || '0.9');\n const items = this.element.querySelectorAll('.js-magic-scroll-fade-in-item') || this.element;\n\n items.forEach(item => {\n this.setScene(hook, item);\n })\n }\n\n private setScene(hook: number, item: Element) {\n new ScrollMagic.Scene({\n triggerElement: item,\n triggerHook: hook,\n })\n .setTween(\n TweenMax.fromTo(\n item,\n 1,\n {\n css: { opacity: 0, yPercent: 20 }\n },\n {\n css: { opacity: 1, yPercent: 0 },\n ease: Linear.easeNone,\n }\n )\n )\n .addTo(ScrollMagicController)\n // .addIndicators({\n // name: \"fade in\",\n // colorStart: 'red',\n // colorEnd: 'red',\n // colorTrigger: 'red',\n // })\n }\n}\n","import { Component } from \"../../helpers/compiler\";\n\ndeclare let ScrollMagic: any;\ndeclare let TweenMax: any;\ndeclare let Linear: any;\nexport const ScrollMagicController = new ScrollMagic.Controller();\n\n@Component({ className: 'js-magic-scroll-slide-horizontal' })\nexport class MagicScrollSlideHorizontalComponent {\n private scenes: any[] = [];\n\n constructor(private element: HTMLElement) {\n const hook = Number.parseFloat(this.element.getAttribute('data-magic-hook') || '0.5');\n const from = Number.parseFloat(this.element.getAttribute('data-magic-from') || '50');\n const to = Number.parseFloat(this.element.getAttribute('data-magic-to') || '-50');\n const fill = this.element.getAttribute('data-magic-fill') == 'true';\n const item = this.element.querySelector('.js-magic-slide-horizontal-item') || this.element;\n\n while (fill && item.textContent && item.textContent?.length < 150) {\n item.textContent = item.textContent + ' - ' + item.textContent\n }\n\n this.setScene(from, to, hook, item)\n }\n\n private setScene(from: number, to: number, hook: number, item: Element) {\n this.scenes.push(\n new ScrollMagic.Scene({\n triggerElement: this.element,\n triggerHook: hook,\n duration: window.innerHeight * 1.2\n })\n .setTween(\n TweenMax.fromTo(\n item,\n 1,\n {\n css: { translateX: from + '%' }\n },\n {\n css: { translateX: to + '%' },\n ease: Linear.easeNone,\n }\n )\n )\n .addTo(ScrollMagicController)\n // .addIndicators({\n // name: \"horizontal\",\n // colorStart: 'red',\n // colorEnd: 'red',\n // colorTrigger: 'red',\n // })\n );\n }\n}\n","import { Component } from \"../../helpers/compiler\";\n\ndeclare let ScrollMagic: any;\ndeclare let TweenMax: any;\ndeclare let Linear: any;\nexport const ScrollMagicController = new ScrollMagic.Controller();\n\n@Component({ className: 'js-magic-scroll-zoom' })\nexport class MagicScrollZoomComponent {\n private scenes: any[] = [];\n\n constructor(private element: HTMLElement) {\n const hook = Number.parseFloat(this.element.getAttribute('data-magic-hook') || '0.5');\n const from = Number.parseFloat(this.element.getAttribute('data-magic-from') || '.3');\n const to = Number.parseFloat(this.element.getAttribute('data-magic-to') || '1');\n const item = this.element.querySelector('.js-magic-scroll-zoom-item') || this.element;\n\n this.setZoomScene(from, to, hook, item)\n }\n\n private setZoomScene(from: number, to: number, hook: number, item: Element) {\n new ScrollMagic.Scene({\n triggerElement: this.element,\n triggerHook: hook,\n })\n .setTween(TweenMax.set(item, { transformOrigin: \"50% 0%\" }))\n .setTween(\n TweenMax.fromTo(\n item,\n 1,\n {\n css: { scaleX: from, scaleY: from }\n },\n {\n css: { scaleX: to, scaleY: to },\n ease: Linear.easeNone,\n }\n )\n )\n .addTo(ScrollMagicController)\n // .addIndicators({\n // name: \"zoom\",\n // colorStart: 'red',\n // colorEnd: 'red',\n // colorTrigger: 'red',\n // })\n }\n}\n","import { Select } from '.';\nimport { Component } from '../../helpers/compiler';\n\n@Component({ className: 'js-select', observe: true })\nexport class SelectComponent {\n\tconstructor(private element: HTMLSelectElement) {\n\t\tnew Select(this.element);\n\t}\n}\n","import { mergeOptions } from '../../helpers/common/merge-options';\nimport { newGuid } from '../../helpers/common/new-guid';\nimport { createNode } from '../../helpers/dom/create-node';\nimport { getParsedCssUnit } from '../../helpers/number/get-parsed-css-unit';\nimport {\n\tConnectedPositionStrategy, Overlay, OverlayOptions,\n\tOverlayPositionBuilder\n} from '../../helpers/overlay';\nimport { RepositionScrollStrategy } from '../../helpers/overlay/scroll/reposition-scroll-strategy';\n\nexport interface SelectOptions {\n\tcomponentClassName: string;\n\tcomponentValueClassName: string;\n\tcomponentArrowClassName: string;\n\tpanelClassName: string;\n\toptionClassName: string;\n\tactiveClassName: string;\n\tselectedClassName: string;\n\tdisabledClassName: string;\n\ticonHtml?: string;\n}\n\nexport class Select {\n\tprivate overlayRef: Overlay | undefined;\n\tprivate position: ConnectedPositionStrategy | undefined;\n\tprivate select: HTMLElement;\n\tprivate selectedIndex: number;\n\tprivate activeIndex: number;\n\tprivate optionElements: HTMLElement[] = [];\n\tprivate triggerTextElement: HTMLSpanElement;\n\tprivate options: SelectOptions;\n\tprivate scrollTop = 0;\n\tprivate offsetY = 0;\n\tprivate panelOpen = false;\n\n\tstatic options: SelectOptions = {\n\t\tcomponentClassName: 'c-select',\n\t\tcomponentValueClassName: 'c-select__value',\n\t\tcomponentArrowClassName: 'c-select__arrow',\n\t\tpanelClassName: 'c-select__panel',\n\t\toptionClassName: 'c-select__option',\n\t\tactiveClassName: 'is-active',\n\t\tselectedClassName: 'is-selected',\n\t\tdisabledClassName: 'is-disabled',\n\t};\n\n\tconstructor(\n\t\tprivate element: HTMLSelectElement,\n\t\toptions?: Partial\n\t) {\n\t\tthis.options = mergeOptions(Select, options, element);\n\n\t\tthis.selectedIndex = this.element.selectedIndex || 0;\n\n\t\tconst selected =\n\t\t\tthis.element.querySelector('option[selected]');\n\n\t\tif (selected) {\n\t\t\tthis.selectedIndex = Array.from(\n\t\t\t\tselected.parentElement?.children || []\n\t\t\t).indexOf(selected);\n\t\t}\n\n\t\tthis.activeIndex = this.selectedIndex;\n\n\t\tthis.element.tabIndex = -1;\n\t\tthis.element.setAttribute('aria-hidden', 'true');\n\n\t\tthis.select = document.createElement('div');\n\t\tthis.select.id = newGuid();\n\t\tthis.element.setAttribute('data-select', this.select.id);\n\t\tthis.select.classList.add(this.options.componentClassName);\n\t\tthis.select.tabIndex = 0;\n\t\tthis.element.classList.forEach(\n\t\t\t(className) =>\n\t\t\t\t// we should never copy js classes, because afterwise we have an infinite loop on js-select if we add observe: true\n\t\t\t\tclassName.indexOf('js-') === -1 && this.select.classList.add(className)\n\t\t);\n\n\t\tthis.triggerTextElement = document.createElement('span');\n\t\tthis.triggerTextElement.classList.add(this.options.componentValueClassName);\n\t\tthis.triggerTextElement.textContent =\n\t\t\tthis.element.children[this.selectedIndex].textContent;\n\t\tthis.select.appendChild(this.triggerTextElement);\n\t\tthis.select.appendChild(this.triggerTextElement);\n\n\t\tconst triggerArrow = this.options.iconHtml\n\t\t\t? createNode(this.options.iconHtml)\n\t\t\t: document.createElement('span');\n\t\ttriggerArrow.classList.add(this.options.componentArrowClassName);\n\t\tthis.select.appendChild(triggerArrow);\n\n\t\tthis.element.insertAdjacentElement('afterend', this.select);\n\t\tthis.element.addEventListener('focus', () => {\n\t\t\tthis.select.focus();\n\t\t\tthis.open();\n\t\t});\n\n\t\tthis.select.addEventListener('click', (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\tthis.toggle();\n\t\t});\n\n\t\tthis.select.addEventListener('keydown', (event: KeyboardEvent) =>\n\t\t\tthis._handleKeydown(event)\n\t\t);\n\n\t\tthis.element.addEventListener('change', () => {\n\t\t\tthis.activeIndex = this.element.selectedIndex;\n\t\t\tthis.setSelectedValue(false);\n\t\t});\n\t}\n\n\topen(): void {\n\t\tif (!this.element.children.length || this.panelOpen) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.panelOpen = true;\n\n\t\tif (!this.overlayRef) {\n\t\t\tconst panel = document.createElement('div');\n\t\t\tpanel.classList.add(this.options.panelClassName);\n\n\t\t\tthis.optionElements = Array.from(\n\t\t\t\tthis.element.children as HTMLCollectionOf\n\t\t\t).map((option) => {\n\t\t\t\tconst optionElement = document.createElement('div');\n\t\t\t\toptionElement.classList.add(this.options.optionClassName);\n\t\t\t\tif (option.classList.length > 0) {\n\t\t\t\t\toptionElement.classList.add(...option.classList.value.split(' '));\n\t\t\t\t}\n\t\t\t\tif (option.disabled) {\n\t\t\t\t\toptionElement.classList.add(this.options.disabledClassName);\n\t\t\t\t}\n\t\t\t\toptionElement.classList.add(option.value);\n\t\t\t\toptionElement.textContent = option.text;\n\t\t\t\treturn optionElement;\n\t\t\t});\n\n\t\t\tthis.optionElements.forEach((optionElement) => {\n\t\t\t\tpanel.appendChild(optionElement);\n\t\t\t});\n\n\t\t\tthis.position = OverlayPositionBuilder.connectedTo(this.select)\n\t\t\t\t.withOffsetY(this.offsetY)\n\t\t\t\t.withFallbackPosition(\n\t\t\t\t\t{\n\t\t\t\t\t\toriginX: 'start',\n\t\t\t\t\t\toriginY: 'top',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\toverlayX: 'start',\n\t\t\t\t\t\toverlayY: 'top',\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t\t.withFallbackPosition(\n\t\t\t\t\t{\n\t\t\t\t\t\toriginX: 'start',\n\t\t\t\t\t\toriginY: 'bottom',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\toverlayX: 'start',\n\t\t\t\t\t\toverlayY: 'bottom',\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\tthis.overlayRef = new Overlay(\n\t\t\t\tpanel,\n\t\t\t\tnew OverlayOptions({\n\t\t\t\t\tscrollStrategy: new RepositionScrollStrategy(),\n\t\t\t\t\tpositionStrategy: this.position,\n\t\t\t\t\tbackdropClassName: 'c-overlay-transparent-backdrop',\n\t\t\t\t\thasBackdrop: true,\n\t\t\t\t})\n\t\t\t).create();\n\n\t\t\tthis.overlayRef.backdropClick.subscribe(() => this.close());\n\n\t\t\tthis.overlayRef.afterOpened.subscribe(() => {\n\t\t\t\tif (this.panelOpen) {\n\t\t\t\t\tthis.scrollTop = 0;\n\t\t\t\t} else {\n\t\t\t\t\tthis.position?.withOffsetX(0);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.overlayRef.afterClosed.subscribe(() => {\n\t\t\t\tthis.overlayRef?.dispose();\n\t\t\t\tthis.select.focus();\n\t\t\t});\n\n\t\t\tthis.overlayRef.onAttached.subscribe(() => {\n\t\t\t\tif (!this.overlayRef || !this.position) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tthis.overlayRef.portalElement.style.transformOrigin = 'top'; // set initial origin\n\t\t\t\tconst overlayRect =\n\t\t\t\t\tthis.overlayRef.overlayElement?.getBoundingClientRect();\n\t\t\t\tconst paddingWidth = Math.round(\n\t\t\t\t\tgetParsedCssUnit(this.element.children[0], 'padding-left') / 2\n\t\t\t\t);\n\t\t\t\tconst leftOverflow = 0 - (overlayRect?.left || 0);\n\t\t\t\tconst rightOverflow = (overlayRect?.right || 0) - window.innerWidth;\n\n\t\t\t\tlet offsetX = 0;\n\t\t\t\tif (leftOverflow > 0) {\n\t\t\t\t\toffsetX += leftOverflow + paddingWidth;\n\t\t\t\t} else if (rightOverflow > 0) {\n\t\t\t\t\toffsetX -= rightOverflow + paddingWidth;\n\t\t\t\t}\n\n\t\t\t\tthis.position.withOffsetX(offsetX);\n\t\t\t\tthis.overlayRef.updatePosition();\n\t\t\t\tthis.overlayRef.portalElement.scrollTop = this.scrollTop;\n\t\t\t});\n\n\t\t\tthis.overlayRef.onDetached.subscribe(() => (this.panelOpen = false));\n\n\t\t\tthis.optionElements.forEach((option, index) => {\n\t\t\t\toption.addEventListener('click', () => {\n\t\t\t\t\tthis.activeIndex = index;\n\t\t\t\t\tconst option = this.element.children[index] as HTMLOptionElement;\n\n\t\t\t\t\tif (option.disabled) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.setSelectedValue();\n\t\t\t\t\tthis.close();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\n\t\tthis.overlayRef.open();\n\t\tthis._calculateOverlayPosition();\n\t\tthis.setActiveValue();\n\t}\n\n\tclose(): void {\n\t\tif (!this.panelOpen) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.overlayRef?.close();\n\t\tthis.element.dispatchEvent(new Event('blur'));\n\t}\n\n\ttoggle(): void {\n\t\tthis.panelOpen ? this.close() : this.open();\n\t}\n\n\tprivate _handleKeydown(event: KeyboardEvent) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\n\t\tconst delta = event.code === 'ArrowUp' ? -1 : 1;\n\n\t\tswitch (event.code) {\n\t\t\tcase 'Space':\n\t\t\t\tthis.toggle();\n\t\t\t\tbreak;\n\t\t\tcase 'ArrowUp':\n\t\t\tcase 'ArrowDown':\n\t\t\t\tif (\n\t\t\t\t\tthis.activeIndex + delta >= 0 &&\n\t\t\t\t\tthis.activeIndex + delta < this.element.children.length\n\t\t\t\t) {\n\t\t\t\t\tfor (let i = 1; i <= this.element.children.length; i++) {\n\t\t\t\t\t\tconst index =\n\t\t\t\t\t\t\t(this.activeIndex + delta * i + this.element.children.length) %\n\t\t\t\t\t\t\tthis.element.children.length;\n\n\t\t\t\t\t\tif (!(this.element.children[index] as HTMLOptionElement).disabled) {\n\t\t\t\t\t\t\tthis.activeIndex = index;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.panelOpen) {\n\t\t\t\t\tthis.setActiveValue();\n\t\t\t\t} else {\n\t\t\t\t\tthis.setSelectedValue();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'Escape':\n\t\t\t\tthis.close();\n\t\t\t\tbreak;\n\t\t\tcase 'Enter':\n\t\t\t\tif (!this.panelOpen) {\n\t\t\t\t\tthis.open();\n\t\t\t\t} else {\n\t\t\t\t\tthis.setSelectedValue();\n\t\t\t\t\tthis.close();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tprivate setSelectedValue(shouldForwardEvent = true) {\n\t\tconst option = this.element.children[this.activeIndex] as HTMLOptionElement;\n\n\t\tif (this.select.getAttribute('data-value') !== option.value) {\n\t\t\tthis.triggerTextElement.textContent = option.text;\n\t\t\tthis.select.setAttribute('data-value', option.value);\n\t\t\tthis.element.value = option.value;\n\t\t\tthis.selectedIndex = this.activeIndex;\n\t\t\tthis.element.selectedIndex = this.selectedIndex;\n\n\t\t\tthis.setActiveValue();\n\n\t\t\tif (shouldForwardEvent) {\n\t\t\t\tthis.element.dispatchEvent(new Event('change'));\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate setActiveValue(): void {\n\t\tif (this.overlayRef) {\n\t\t\tconst itemHeight = this.optionElements[0]?.offsetHeight || 0;\n\t\t\tconst scrollOffset = this.activeIndex * itemHeight;\n\t\t\tconst maxHeight = getParsedCssUnit(\n\t\t\t\tthis.overlayRef.portalElement,\n\t\t\t\t'max-height'\n\t\t\t);\n\n\t\t\tif (scrollOffset < this.overlayRef.portalElement.scrollTop) {\n\t\t\t\tthis.overlayRef.portalElement.scrollTop = scrollOffset;\n\t\t\t} else if (\n\t\t\t\tscrollOffset + itemHeight >\n\t\t\t\tthis.overlayRef.portalElement.scrollTop + maxHeight\n\t\t\t) {\n\t\t\t\tthis.overlayRef.portalElement.scrollTop = Math.max(\n\t\t\t\t\t0,\n\t\t\t\t\tscrollOffset - maxHeight + itemHeight\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.optionElements?.forEach((option, index) => {\n\t\t\toption.classList.toggle(\n\t\t\t\tthis.options.selectedClassName,\n\t\t\t\tindex === this.selectedIndex\n\t\t\t);\n\t\t\toption.classList.toggle(\n\t\t\t\tthis.options.activeClassName,\n\t\t\t\tindex === this.activeIndex\n\t\t\t);\n\t\t});\n\t}\n\n\tprivate _calculateOverlayPosition() {\n\t\tif (!this.overlayRef) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst itemHeight = this.optionElements[0]?.offsetHeight || 0;\n\t\tconst maxHeight = getParsedCssUnit(\n\t\t\tthis.overlayRef.portalElement,\n\t\t\t'max-height'\n\t\t);\n\t\tconst items = this.element.children.length;\n\t\tconst panelHeight = Math.min(items * itemHeight, maxHeight);\n\t\tconst scrollContainerHeight = items * itemHeight;\n\t\tconst maxScroll = scrollContainerHeight - panelHeight;\n\t\tconst scrollBuffer = panelHeight / 2;\n\t\tconst optionOffsetFromScrollTop = itemHeight * this.selectedIndex;\n\t\tconst halfOptionHeight = itemHeight / 2;\n\t\tconst optimalScrollPosition =\n\t\t\toptionOffsetFromScrollTop - scrollBuffer + halfOptionHeight;\n\t\tthis.scrollTop = Math.min(Math.max(0, optimalScrollPosition), maxScroll);\n\t\tconst triggerRect = this.select.getBoundingClientRect();\n\t\tconst optionHeightAdjustment = (itemHeight - triggerRect.height) / 2;\n\t\tconst maxOptionsDisplayed = Math.floor(maxHeight / itemHeight);\n\t\tlet optionOffsetFromPanelTop: number;\n\n\t\tif (this.scrollTop === 0) {\n\t\t\toptionOffsetFromPanelTop = this.selectedIndex * itemHeight;\n\t\t} else if (this.scrollTop === maxScroll) {\n\t\t\tconst firstDisplayedIndex = items - maxOptionsDisplayed;\n\t\t\tconst selectedDisplayIndex = this.selectedIndex - firstDisplayedIndex;\n\t\t\tconst partialItemHeight =\n\t\t\t\titemHeight - ((items * itemHeight - maxHeight) % itemHeight);\n\n\t\t\toptionOffsetFromPanelTop =\n\t\t\t\tselectedDisplayIndex * itemHeight + partialItemHeight;\n\t\t} else {\n\t\t\toptionOffsetFromPanelTop = scrollBuffer - itemHeight / 2;\n\t\t}\n\n\t\tthis.offsetY = optionOffsetFromPanelTop * -1 - optionHeightAdjustment;\n\n\t\tconst viewportSize = {\n\t\t\twidth: window.innerWidth,\n\t\t\theight: window.innerHeight,\n\t\t};\n\t\tconst paddingWidth = Math.round(\n\t\t\tgetParsedCssUnit(this.optionElements[0], 'padding-left') / 2\n\t\t);\n\n\t\tconst topSpaceAvailable = triggerRect.top - paddingWidth;\n\t\tconst bottomSpaceAvailable =\n\t\t\tviewportSize.height - triggerRect.bottom - paddingWidth;\n\n\t\tconst panelHeightTop = Math.abs(this.offsetY);\n\t\tconst totalPanelHeight = Math.min(\n\t\t\tthis.element.children.length * itemHeight,\n\t\t\tmaxHeight\n\t\t);\n\t\tconst panelHeightBottom =\n\t\t\ttotalPanelHeight - panelHeightTop - triggerRect.height;\n\n\t\tconst originY =\n\t\t\tMath.abs(this.offsetY) - optionHeightAdjustment + itemHeight / 2;\n\t\tconst originBasedOnOption = `50% ${originY}px 0px`;\n\n\t\tif (panelHeightBottom > bottomSpaceAvailable) {\n\t\t\tconst distanceBelowViewport = Math.round(\n\t\t\t\tpanelHeightBottom - bottomSpaceAvailable\n\t\t\t);\n\n\t\t\tthis.scrollTop -= distanceBelowViewport;\n\t\t\tthis.offsetY -= distanceBelowViewport;\n\t\t\tthis.overlayRef.portalElement.style.transformOrigin = originBasedOnOption;\n\n\t\t\tif (triggerRect.top + this.scrollTop <= 0) {\n\t\t\t\tthis.scrollTop = 0;\n\t\t\t\tthis.offsetY = 0;\n\t\t\t\tthis.overlayRef.portalElement.style.transformOrigin = '50% bottom 0px';\n\t\t\t}\n\t\t} else if (panelHeightTop > topSpaceAvailable) {\n\t\t\tconst distanceAboveViewport = Math.round(\n\t\t\t\tpanelHeightTop - topSpaceAvailable\n\t\t\t);\n\n\t\t\tthis.scrollTop += distanceAboveViewport;\n\t\t\tthis.offsetY += distanceAboveViewport;\n\t\t\tthis.overlayRef.portalElement.style.transformOrigin = originBasedOnOption;\n\n\t\t\tif (triggerRect.top + this.scrollTop >= maxScroll) {\n\t\t\t\tthis.scrollTop = maxScroll;\n\t\t\t\tthis.offsetY = 0;\n\t\t\t\tthis.overlayRef.portalElement.style.transformOrigin = '50% top 0px';\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.overlayRef.portalElement.style.transformOrigin = originBasedOnOption;\n\t\t}\n\n\t\tthis.position?.withOffsetY(this.offsetY);\n\t}\n}\n","import stickybits from 'stickybits';\nimport { Component } from '../../helpers/compiler';\n\n@Component({ className: 'js-sticky' })\nexport class StickyComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tstickybits(this.element, {\n\t\t\tparentClass: 'js-sticky-parent',\n\t\t\tstickyChangeClass: 'is-sticky-change',\n\t\t\tstickyClass: 'is-sticky',\n\t\t\tstuckClass: 'is-stuck',\n\t\t\tuseStickyClasses: true,\n\t\t});\n\t}\n}\n","import { SwiperItem } from '.';\nimport { Component } from \"../../helpers/compiler\";\n\n@Component({ className: 'js-swiper' })\nexport class SwiperComponent {\n constructor(element: HTMLElement) {\n const perview = Number.parseFloat(element.getAttribute('data-swiper-perview') || '1');\n const scale = (element.getAttribute('data-swiper-scale') === 'true');\n const vertical = (element.getAttribute('data-swiper-vertical') === 'true');\n const loop = (element.getAttribute('data-swiper-loop') === 'true');\n const mousewheel = (element.getAttribute('data-swiper-mousewheel') === 'false');\n const mousewheelTarget = (element.getAttribute('data-swiper-mousewheel-target')) || 'container';\n const spacing = Number.parseFloat(element.getAttribute('data-swiper-spacing') || '0');\n const nextBtn = element.getAttribute('data-swiper-next-btn') || '.swiper-button-next';\n const prevBtn = element.getAttribute('data-swiper-prev-btn') || '.swiper-button-prev';\n const autoplay = this.parseToBoolOrInt(element, 'data-swiper-autoplay');\n\n new SwiperItem(element, {\n slidesPerView: perview,\n scale: scale,\n spacing: spacing,\n autoplay: autoplay,\n vertical: vertical,\n loop: loop,\n mousewheel: !mousewheel,\n mousewheelTarget: mousewheelTarget,\n navigation: {\n nextEl: nextBtn,\n prevEl: prevBtn\n }\n })\n }\n\n private parseToBoolOrInt(el: HTMLElement, attr: string) {\n const val: string | null = el.getAttribute(attr);\n const parsedNum = Number.parseInt(val || 'false');\n return isNaN(parsedNum) ? val == 'true' : parsedNum\n }\n}\n","import { A11y, Autoplay, default as Swiper, default as SwiperCore, EffectCards, EffectCoverflow, EffectCreative, EffectCube, EffectFade, EffectFlip, Keyboard, Mousewheel, Navigation, Pagination, Parallax, SwiperOptions } from 'swiper';\nimport 'swiper/css/bundle';\nimport { KeyboardOptions } from 'swiper/types/modules/keyboard';\nimport { NavigationOptions } from 'swiper/types/modules/navigation';\nimport { PaginationOptions } from 'swiper/types/modules/pagination';\nimport { mergeOptions } from '../../helpers/common/merge-options';\n\nSwiperCore.use([Navigation, Pagination, A11y, EffectCreative, EffectCards, EffectCoverflow, EffectCube, EffectFade, EffectFlip, Mousewheel, Keyboard, Autoplay, Parallax]);\n\nexport enum PaginationTypes {\n\tbullets = \"bullets\",\n\tfraction = \"fraction\",\n\tprogressbar = \"progressbar\",\n\tcustom = \"custom\",\n}\n\nexport interface CustomSwiperOptions {\n\tslidesPerView: number,\n\tinitialSlide: number,\n\tbreakpoints: SwiperOptions['breakpoints'],\n\tvertical: boolean,\n\tloop: boolean,\n\tcenteredSlides: boolean,\n\tscale: boolean,\n\tspacing: number,\n\tautoplay: number | boolean,\n\tpagination?: PaginationOptions,\n\teffect: string,\n\tevents?: any,\n\tmousewheel: boolean,\n\tmousewheelTarget?: string,\n\tkeyboard: boolean | KeyboardOptions,\n\tnavigation: NavigationOptions,\n\tpreventClicks: boolean;\n}\n\nexport class SwiperItem {\n\tstatic options: CustomSwiperOptions = {\n\t\tslidesPerView: 1,\n\t\tinitialSlide: 0,\n\t\tvertical: false,\n\t\tautoplay: false,\n\t\tloop: false,\n\t\tbreakpoints: undefined,\n\t\tcenteredSlides: false,\n\t\tscale: false,\n\t\tspacing: 0,\n\t\tevents: undefined,\n\t\tpagination: {\n\t\t\tel: '.swiper-pagination',\n\t\t\tclickable: true,\n\t\t\ttype: PaginationTypes.bullets,\n\t\t},\n\t\teffect: 'cards',\n\t\tkeyboard: true,\n\t\tmousewheel: true,\n\t\tmousewheelTarget: 'container',\n\t\tnavigation: {\n\t\t\tnextEl: '.swiper-button-next',\n\t\t\tprevEl: '.swiper-button-prev',\n\t\t},\n\t\tpreventClicks: true\n\t};\n\tprivate options: CustomSwiperOptions;\n\tprivate swiper: any;\n\n\tconstructor(element: HTMLElement, options?: Partial) {\n\t\tthis.options = mergeOptions(SwiperItem, options, element);\n\n\t\tif (typeof this.options.pagination?.el == 'string') {\n\t\t\tthis.options.pagination.el = element.querySelector(this.options.pagination.el)\n\t\t}\n\n\t\tthis.initSwiper(element);\n\t}\n\n\tprivate initSwiper(element: HTMLElement) {\n\t\tthis.swiper = new Swiper(element, {\n\t\t\tcssMode: false,\n\t\t\tpreloadImages: true,\n\t\t\tlazy: true,\n\t\t\tspeed: 500,\n\t\t\tautoplay: typeof this.options.autoplay == 'number' ? { delay: this.options.autoplay } : this.options.autoplay,\n\t\t\tslidesPerView: this.options.slidesPerView,\n\t\t\tcenteredSlides: this.options.centeredSlides,\n\t\t\troundLengths: true,\n\t\t\twatchOverflow: true,\n\t\t\tloop: this.options.loop,\n\t\t\tbreakpoints: this.options.breakpoints,\n\t\t\tdirection: this.options.vertical ? 'vertical' : 'horizontal',\n\t\t\tslideNextClass: this.options.scale ? 'swiper-slide-next c-swiper--scale' : 'swiper-slide-next',\n\t\t\tslidePrevClass: this.options.scale ? 'swiper-slide-prev c-swiper--scale' : 'swiper-slide-prev',\n\t\t\twatchSlidesProgress: true,\n\t\t\tspaceBetween: this.options.spacing,\n\t\t\tinitialSlide: this.options.initialSlide,\n\t\t\tslideToClickedSlide: false,\n\t\t\tkeyboard: this.options.keyboard,\n\t\t\tsimulateTouch: true,\n\t\t\tpreventClicks: this.options.preventClicks,\n\t\t\tparallax: true,\n\t\t\tinit: true,\n\t\t\ton: this.options.events,\n\t\t\tpagination: this.options.pagination,\n\t\t\tmousewheel: this.options.mousewheel ? {\n\t\t\t\treleaseOnEdges: true,\n\t\t\t\teventsTarget: this.options.mousewheelTarget\n\t\t\t} : this.options.mousewheel,\n\t\t\tnavigation: {\n\t\t\t\tnextEl: typeof this.options.navigation.nextEl === \"string\" ? element.querySelector(this.options.navigation.nextEl) : null,\n\t\t\t\tprevEl: typeof this.options.navigation.prevEl === \"string\" ? element.querySelector(this.options.navigation.prevEl) : null,\n\t\t\t},\n\t\t\tscrollbar: {\n\t\t\t\tel: '.swiper-scrollbar',\n\t\t\t},\n\t\t});\n\t}\n\n\tpublic slideTo(i: number) {\n\t\tthis.swiper.slideTo(i);\n\t}\n}\n","import { Component } from '../../helpers/compiler';\nimport { Tabs } from './index';\n\n@Component({ className: 'js-tabs', observe: true })\nexport class TabsComponent {\n\tconstructor(private element: HTMLElement) {\n\t\tnew Tabs(element);\n\t}\n}","import { isNullOrEmpty } from '../../helpers/common';\nimport { mergeOptions } from '../../helpers/common/merge-options';\nimport { fetchHtml } from '../../helpers/http/fetch-html';\nimport { removeQueryStringFromPath } from '../../helpers/url/remove-query-string-from-path';\n\ninterface TabElement {\n\tindex: number;\n\tnavigation: HTMLElement;\n\telement: HTMLElement;\n\tloaded: boolean;\n\ttarget: string;\n}\n\nexport interface TabsOptions {\n\tnavigationSelector: string;\n\twrapperSelector: string;\n\tcontentSelector: string;\n\tactiveClass: string;\n\tvisibleClass: string;\n\tloadingHtml: string;\n\tcontentIdentifierAttribute: string;\n\tnavigationToContentAttribute: string;\n\ttargetAttribute: string;\n\tupdateHistoryOnTabChange?: boolean;\n}\n\nexport class Tabs {\n\tstatic options: TabsOptions = {\n\t\tnavigationSelector: '.js-tab__link',\n\t\twrapperSelector: '.js-tab__wrapper',\n\t\tcontentSelector: '.js-tab__content',\n\t\tactiveClass: 'is-active',\n\t\tvisibleClass: 'is-visible',\n\t\tloadingHtml: `
\n\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t
\n\t\t\t\t\t
`,\n\t\tcontentIdentifierAttribute: 'data-tab',\n\t\tnavigationToContentAttribute: 'data-tab-action',\n\t\ttargetAttribute: 'data-target',\n\t\tupdateHistoryOnTabChange: false,\n\t};\n\n\tprivate wrapperElement: HTMLElement | null = null;\n\tprivate tabElements: TabElement[] = [];\n\tprivate visibleTabIndex: number | null = null;\n\tprivate options: TabsOptions;\n\n\tconstructor(public element: HTMLElement, options?: Partial) {\n\t\tthis.options = mergeOptions(Tabs, options, element);\n\n\t\tlet index = 0;\n\t\tthis.wrapperElement = this.element.querySelector(this.options.wrapperSelector);\n\n\t\tthis.element\n\t\t\t.querySelectorAll(this.options.navigationSelector)\n\t\t\t.forEach((navigation) => {\n\t\t\t\tconst name = navigation.getAttribute(\n\t\t\t\t\tthis.options.navigationToContentAttribute\n\t\t\t\t);\n\t\t\t\tconst element = this.element.querySelector(\n\t\t\t\t\t`${this.options.contentSelector}[${this.options.contentIdentifierAttribute}=\"${name}\"]`\n\t\t\t\t);\n\n\t\t\t\tif (!element) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst target = navigation.getAttribute(this.options.targetAttribute) || navigation.getAttribute('href') || '';\n\t\t\t\tconst loaded = navigation.classList.contains(this.options.activeClass) || isNullOrEmpty(target);\n\n\t\t\t\tthis.tabElements.push({\n\t\t\t\t\tindex: index++,\n\t\t\t\t\tnavigation,\n\t\t\t\t\telement,\n\t\t\t\t\tloaded,\n\t\t\t\t\ttarget,\n\t\t\t\t});\n\t\t\t});\n\n\t\tthis.tabElements.forEach((tabElement) => {\n\t\t\ttabElement.navigation.addEventListener('click', (event) => {\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.openTab(tabElement);\n\t\t\t});\n\t\t});\n\n\t\tconst activeTabElement = this.getActiveTab();\n\t\tif (activeTabElement) {\n\t\t\tthis.openTab(activeTabElement);\n\t\t}\n\t}\n\n\tprivate openTab(tab: TabElement): void {\n\t\tif (this.visibleTabIndex === tab.index) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst visibleTab = this.getTabByIndex(this.visibleTabIndex);\n\t\tvisibleTab?.navigation.classList.remove(this.options.activeClass);\n\t\tvisibleTab?.element.classList.remove(this.options.visibleClass);\n\t\ttab.navigation.classList.add(this.options.activeClass);\n\t\ttab.element.classList.add(this.options.visibleClass);\n\t\tthis.visibleTabIndex = tab.index;\n\t\tthis.updateHistory(tab);\n\t\tthis.loadContent(tab);\n\n\t\tif (this.wrapperElement) {\n\t\t\tthis.wrapperElement.style.height = (tab.element.getBoundingClientRect().height || 0) + 'px';\n\t\t}\n\t}\n\n\tprivate updateHistory(tab: TabElement) {\n\t\tif (this.options.updateHistoryOnTabChange) {\n\t\t\twindow.history.pushState(\n\t\t\t\t'',\n\t\t\t\ttab.navigation.title,\n\t\t\t\tremoveQueryStringFromPath(tab.target)\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate loadContent(tab: TabElement) {\n\t\tif (tab.loaded) {\n\t\t\treturn;\n\t\t}\n\t\ttab.element.innerHTML = this.options.loadingHtml;\n\t\tfetchHtml(tab.target).then((data) => {\n\t\t\tif (!isNullOrEmpty(data)) {\n\t\t\t\ttab.element.innerHTML = data;\n\t\t\t\ttab.loaded = true;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate getActiveTab() {\n\t\treturn this.tabElements.find((tabElement) =>\n\t\t\ttabElement.navigation.classList.contains(this.options.activeClass)\n\t\t);\n\t}\n\n\tprivate getTabByIndex(index: number | null) {\n\t\treturn this.tabElements.find((tabElement) => tabElement.index === index);\n\t}\n}\n","import { TweenEffect } from '.';\nimport { Component } from \"../../helpers/compiler\";\n\n@Component({ className: 'js-tween-effect' })\nexport class TweenEffectComponent {\n\n\tconstructor(private element: HTMLElement) {\n\t\tconst hook = parseFloat(element.getAttribute('data-tween-effect-hook') || '');\n\t\tconst offset = parseFloat(element.getAttribute('data-tween-effect-offset') || '');\n\t\tconst duration = parseFloat(element.getAttribute('data-tween-effect-duration') || '');\n\t\tconst delay = parseFloat(element.getAttribute('data-tween-effect-delay') || '');\n\t\tconst stagger = parseFloat(element.getAttribute('data-tween-effect-stagger') || '');\n\t\tconst individualScenes = element.getAttribute('data-tween-effect-individual-scenes') == 'true';\n\n\t\tnew TweenEffect(element, {\n\t\t\t...(isNaN(hook) ? undefined : { hook: hook }),\n\t\t\t...(isNaN(offset) ? undefined : { offset: offset }),\n\t\t\t...(isNaN(duration) ? undefined : { duration: duration }),\n\t\t\t...(isNaN(delay) ? undefined : { delay: delay }),\n\t\t\t...(isNaN(stagger) ? undefined : { stagger: stagger }),\n\t\t\t...({ individualScenes: individualScenes }),\n\t\t})\n\t}\n}\n","import { mergeOptions } from '../../helpers/common/merge-options';\n\ndeclare let ScrollMagic: any;\ndeclare let TweenMax: any;\ndeclare let Power2: any;\nexport const ScrollMagicController = new ScrollMagic.Controller();\n\nexport interface TweenEffectOptions {\n\thook: number;\n\toffset: number;\n\tdelay: number;\n\tduration: number;\n\tstagger: number;\n\tclipPercentage: number,\n\tindividualScenes: boolean;\n\teaseFunc: any;\n\ttargetPrefix: string;\n}\n\nexport class TweenEffect {\n\tstatic options: TweenEffectOptions = {\n\t\thook: .5,\n\t\toffset: 0,\n\t\tdelay: 0,\n\t\tduration: .6,\n\t\tstagger: 0,\n\t\tclipPercentage: 10,\n\t\tindividualScenes: false,\n\t\teaseFunc: Power2.easeInOut,\n\t\ttargetPrefix: 'js-tween-effect'\n\t}\n\n\tprivate options: TweenEffectOptions;\n\tstatic clipFull = 'polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%)';\n\n\tconstructor(private element: HTMLElement, options?: Partial) {\n\t\tthis.options = mergeOptions(TweenEffect, options, element);\n\n\t\tthis.initClipTop();\n\t\tthis.initClipTopX();\n\t\tthis.initClipTopLeft();\n\t\tthis.initClipTopRight();\n\t\tthis.initClipBottomLeft();\n\t\tthis.initClipBottomRight();\n\t\tthis.initScaleUp();\n\t\tthis.initFadeIn();\n\t\tthis.initFadeOut();\n\t\tthis.initSlideVertical();\n\t\tthis.initSlideHorizontal();\n\t}\n\n\tprivate initClipTopLeft() {\n\t\tconst targets = this.element.querySelectorAll('.' + this.options.targetPrefix + '-clip-tl');\n\t\tconst val = this.options.clipPercentage;\n\n\t\tif (targets.length > 0) {\n\t\t\tthis.createTween(targets, { clipPath: `polygon(${val}% ${val}%, 100% ${val}%, 100% 100%, ${val}% 100%)` }, { clipPath: TweenEffect.clipFull }, 'clip-tl');\n\t\t}\n\t}\n\n\tprivate initClipTop() {\n\t\tconst targets = this.element.querySelectorAll('.' + this.options.targetPrefix + '-clip-t');\n\t\tconst val = this.options.clipPercentage;\n\n\t\tif (targets.length > 0) {\n\t\t\tthis.createTween(targets, { clipPath: `polygon(0 ${val}%, 100% ${val}%, 100% 100%, 0% 100%)` }, { clipPath: TweenEffect.clipFull }, 'clip-t');\n\t\t}\n\t}\n\n\tprivate initClipTopX() {\n\t\tconst targets = this.element.querySelectorAll('.' + this.options.targetPrefix + '-clip-tx');\n\t\tconst val = this.options.clipPercentage;\n\n\t\tif (targets.length > 0) {\n\t\t\tthis.createTween(targets, { clipPath: `polygon(${val}% ${val}%, ${100 - val}% ${val}%, ${100 - val}% 100%, ${val}% 100%)` }, { clipPath: TweenEffect.clipFull }, 'clip-tx');\n\t\t}\n\t}\n\n\tprivate initClipTopRight() {\n\t\tconst targets = this.element.querySelectorAll('.' + this.options.targetPrefix + '-clip-tr');\n\t\tconst val = this.options.clipPercentage;\n\n\t\tif (targets.length > 0) {\n\t\t\tthis.createTween(targets, { clipPath: `polygon(0% ${val}%, ${100 - val}% ${val}%, ${100 - val}% 100%, 0% 100%)` }, { clipPath: TweenEffect.clipFull }, 'clip-tr');\n\t\t}\n\t}\n\n\tprivate initClipBottomLeft() {\n\t\tconst targets = this.element.querySelectorAll('.' + this.options.targetPrefix + '-clip-bl');\n\t\tconst val = this.options.clipPercentage;\n\n\t\tif (targets.length > 0) {\n\t\t\tthis.createTween(targets, { clipPath: `polygon(${val}% 0%, 100% 0%, 100% ${100 - val}%, ${val}% ${100 - val}%)` }, { clipPath: TweenEffect.clipFull }, 'clip-bl');\n\t\t}\n\t}\n\n\tprivate initClipBottomRight() {\n\t\tconst targets = this.element.querySelectorAll('.' + this.options.targetPrefix + '-clip-br');\n\t\tconst val = this.options.clipPercentage;\n\n\t\tif (targets.length > 0) {\n\t\t\tthis.createTween(targets, { clipPath: `polygon(0% 0%, ${100 - val}% 0%, ${100 - val}% ${100 - val}%, 0% ${100 - val}%)` }, { clipPath: TweenEffect.clipFull }, 'clip-br');\n\t\t}\n\t}\n\n\tprivate initScaleUp() {\n\t\tconst targets = this.element.querySelectorAll('.' + this.options.targetPrefix + '-scale-up');\n\n\t\tif (targets.length > 0) {\n\t\t\tthis.createTween(targets, { scale: 0.9 }, { scale: 1 }, 'scale');\n\t\t}\n\t}\n\n\tprivate initFadeIn() {\n\t\tconst targets = this.element.querySelectorAll('.' + this.options.targetPrefix + '-fade-in');\n\n\t\tif (targets.length > 0) {\n\t\t\tthis.createTween(targets, { opacity: 0 }, { opacity: 1 }, 'fade-in');\n\t\t}\n\t}\n\n\tprivate initFadeOut() {\n\t\tconst targets = this.element.querySelectorAll('.' + this.options.targetPrefix + '-fade-out');\n\n\t\tif (targets.length > 0) {\n\t\t\tthis.createTween(targets, { opacity: 1 }, { opacity: 0 }, 'fade-out');\n\t\t}\n\t}\n\n\tprivate initSlideHorizontal() {\n\t\tconst targets = this.element.querySelectorAll('.' + this.options.targetPrefix + '-h-slide');\n\n\t\tif (targets.length > 0) {\n\t\t\tconst val = parseFloat(this.element.getAttribute('data-tween-effect-h-slide') || '') || 50;\n\t\t\tthis.createTween(targets, { translateX: val }, { translateX: 0 }, 'h-slide');\n\t\t}\n\t}\n\n\tprivate initSlideVertical() {\n\t\tconst targets = this.element.querySelectorAll('.' + this.options.targetPrefix + '-v-slide');\n\n\t\tif (targets.length > 0) {\n\t\t\tconst val = parseFloat(this.element.getAttribute('data-tween-effect-v-slide') || '') || 50;\n\t\t\tthis.createTween(targets, { translateY: val }, { translateY: 0, opacity: 1 }, 'v-slide');\n\t\t}\n\t}\n\n\tprivate createTween(targets: NodeListOf, from: any, to: any, effect = '') {\n\t\tif (this.options.individualScenes) {\n\t\t\ttargets.forEach(item =>\n\t\t\t\tnew ScrollMagic.Scene({\n\t\t\t\t\ttriggerElement: item,\n\t\t\t\t\ttriggerHook: this.options.hook,\n\t\t\t\t\toffset: this.options.offset,\n\t\t\t\t})\n\t\t\t\t\t.setTween(TweenMax.fromTo(\n\t\t\t\t\t\titem,\n\t\t\t\t\t\tthis.options.duration,\n\t\t\t\t\t\t{ css: from },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcss: to,\n\t\t\t\t\t\t\tease: this.options.easeFunc,\n\t\t\t\t\t\t\tstagger: this.options.stagger,\n\t\t\t\t\t\t\tdelay: parseFloat(this.element.getAttribute('data-tween-effect-' + effect + '-delay') || '') || this.options.delay\n\t\t\t\t\t\t},\n\t\t\t\t\t))\n\t\t\t\t\t.addTo(ScrollMagicController)\n\t\t\t\t// .addIndicators({\n\t\t\t\t// \tname: effect,\n\t\t\t\t// })\n\t\t\t)\n\t\t} else {\n\t\t\tnew ScrollMagic.Scene({\n\t\t\t\ttriggerElement: this.element,\n\t\t\t\ttriggerHook: this.options.hook,\n\t\t\t\toffset: this.options.offset,\n\t\t\t})\n\t\t\t\t.setTween(\n\t\t\t\t\tTweenMax.fromTo(\n\t\t\t\t\t\ttargets,\n\t\t\t\t\t\tthis.options.duration,\n\t\t\t\t\t\t{ css: from },\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcss: to,\n\t\t\t\t\t\t\tease: this.options.easeFunc,\n\t\t\t\t\t\t\tstagger: this.options.stagger,\n\t\t\t\t\t\t\tdelay: parseFloat(this.element.getAttribute('data-tween-effect-' + effect + '-delay') || '') || this.options.delay\n\t\t\t\t\t\t},\n\t\t\t\t\t))\n\t\t\t\t.addTo(ScrollMagicController)\n\t\t\t// .addIndicators({\n\t\t\t// \tname: effect,\n\t\t\t// })\n\t\t}\n\t}\n}\n","export function downloadFileUrl(url: string, name?: string | null | undefined) {\n\tconst link = document.createElement('a');\n\tlink.href = url;\n\tif (name) {\n\t\tlink.download = name;\n\t}\n\tlink.click();\n}\n","export function emptyGuid(): string {\n\treturn '00000000-0000-0000-0000-000000000000';\n}\n","export function formatCssUnit(value: number | string) {\n\treturn typeof value === 'string' ? value : `${value}px`;\n}\n","export * from './download-file-url';\nexport * from './is-null-or-empty';\nexport * from './empty-guid';\n","import { emptyGuid } from './empty-guid';\n\nexport function isNullOrEmpty(\n\tvalue: string | null | undefined\n): value is null | undefined {\n\tif (value === undefined) {\n\t\treturn true;\n\t} else if (value === null) {\n\t\treturn true;\n\t} else if (value.length === 0) {\n\t\treturn true;\n\t} else if (value.trim() === emptyGuid()) {\n\t\treturn true;\n\t} else {\n\t\treturn value.trim() === '';\n\t}\n}\n","export function mergeOptions(\n\tclassType: { options: T },\n\toptions: Partial | undefined,\n\telement?: HTMLElement\n): T {\n\treturn {\n\t\t...classType.options,\n\t\t...options,\n\t\t...(element?.dataset\n\t\t\t? Object.keys(element.dataset).reduce((acc, key) => {\n\t\t\t\t\tlet val: string | number | boolean | undefined = element.dataset[key];\n\t\t\t\t\tif (val) {\n\t\t\t\t\t\tif (val === 'true') {\n\t\t\t\t\t\t\tval = true;\n\t\t\t\t\t\t} else if (val === 'false') {\n\t\t\t\t\t\t\tval = false;\n\t\t\t\t\t\t} else if (isNumeric(val)) {\n\t\t\t\t\t\t\tval = parseFloat(val);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tacc[key] = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn acc;\n\t\t\t }, {})\n\t\t\t: ({} as any)),\n\t};\n}\n\nfunction isNumeric(str: any) {\n\treturn !isNaN(str) && !isNaN(parseFloat(str));\n}\n","export function newGuid(): string {\n\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n\t\tconst r = (Math.random() * 16) | 0,\n\t\t\tv = c === 'x' ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n}\n","export function throttleTimeout(throttle: number, fn: () => void): void {\n\tif (throttle > 0) {\n\t\tsetTimeout(fn, throttle);\n\t} else {\n\t\tfn();\n\t}\n}\n","/* eslint-disable no-prototype-builtins */\nconst ANNOTATIONS = '__gt_compiler_annotations__';\nconst PROP_METADATA = '__gt_compiler_prop_metadata__';\nconst COMPONENT_CACHE = new Map();\n\ninterface ComponentConfig {\n\tclassName?: string;\n\tobserve?: boolean;\n}\n\nexport interface OnInit {\n\tonInit(): void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ComponentImplementation = any;\n\ntype ComponentType = new (\n\telement: HTMLElement\n) => T;\n\ninterface Query {\n\tdescendants: boolean;\n\tfirst: boolean;\n\tselector: ComponentType;\n}\n\ninterface PropDecoratorConfig {\n\tdescendants: boolean;\n\tfirst: boolean;\n}\n\ninterface ComponentMetadata {\n\ttype: ComponentType;\n\tmetadataName: string;\n\tclassName: string;\n\tobserve: boolean;\n\tqueries: Record;\n}\n\nexport const Component = makeDecorator('Component');\n\nexport const ComponentRef = makePropDecorator('ComponentRef', {\n\tfirst: true,\n\tdescendants: false,\n});\n\nexport const ComponentRefs = makePropDecorator('ComponentRefs', {\n\tfirst: false,\n\tdescendants: false,\n});\n\nexport const ChildRef = makePropDecorator('ChildRef', {\n\tfirst: true,\n\tdescendants: true,\n});\n\nexport const ChildrenRef = makePropDecorator('ChildrenRef', {\n\tfirst: false,\n\tdescendants: true,\n});\n\nexport function factory(componentTypes: ComponentType[]) {\n\treturn function FactoryFunction(\n\t\trootElement: HTMLElement | Document = document\n\t): void {\n\t\tconst metadatas = componentTypes.map((componentType) =>\n\t\t\tresolve(componentType)\n\t\t);\n\n\t\tmetadatas.forEach((metadata) => {\n\t\t\tcompileComponent(rootElement, metadata);\n\t\t});\n\n\t\taddMutationObserver(\n\t\t\tmetadatas.filter((m) => m.observe),\n\t\t\t(node, metadata) => compileComponent(node, metadata)\n\t\t);\n\t};\n}\n\nfunction addMutationObserver(\n\tmetadatas: ComponentMetadata[],\n\trun: (node: HTMLElement, metadata: ComponentMetadata) => void\n) {\n\tif (metadatas.length > 0) {\n\t\tnew MutationObserver((mutations) =>\n\t\t\tmutations.forEach((mutation) =>\n\t\t\t\tmetadatas.forEach((metadata) =>\n\t\t\t\t\tArray.from(mutation.addedNodes)\n\t\t\t\t\t\t.filter((node) => node instanceof HTMLElement)\n\t\t\t\t\t\t.forEach((node) => run(node as HTMLElement, metadata))\n\t\t\t\t)\n\t\t\t)\n\t\t).observe(document.body, {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t});\n\t}\n}\n\nfunction makeDecorator(name: string) {\n\tfunction DecoratorFactory(config: ComponentConfig) {\n\t\treturn (cls: ComponentImplementation) => {\n\t\t\tif (!cls.hasOwnProperty(ANNOTATIONS)) {\n\t\t\t\tObject.defineProperty(cls, ANNOTATIONS, { value: [] });\n\t\t\t}\n\n\t\t\tcls[ANNOTATIONS].push(config);\n\t\t\treturn cls;\n\t\t};\n\t}\n\n\tDecoratorFactory.prototype.metadataName = name;\n\treturn DecoratorFactory;\n}\n\nfunction throwComponentNotResolvable(componentType: ComponentType) {\n\tthrow new Error(\n\t\t`No @Component annotation for ${\n\t\t\tcomponentType ? componentType.name : componentType\n\t\t} found!`\n\t);\n}\n\nfunction compileComponent(\n\troot: HTMLElement | Document,\n\tmetadata: ComponentMetadata\n) {\n\tconst comps = Array.from(root.getElementsByClassName(metadata.className));\n\tif (\n\t\troot instanceof HTMLElement &&\n\t\troot.classList.contains(metadata.className)\n\t) {\n\t\tcomps.push(root);\n\t}\n\tconst initializedDatasetKey = `gtComponentInitialized${metadata.className.replace(/_|\\-/g, '')}`;\n\tcomps.forEach((node) => {\n\t\tif (Object.keys((node as HTMLElement).dataset).includes(initializedDatasetKey)) {\n\t\t\treturn;\n\t\t}\n\t\tconst constructor = new metadata.type((node as HTMLElement));\n\t\t(node as HTMLElement).dataset[initializedDatasetKey] = 'true';\n\n\t\tif (!COMPONENT_CACHE.has(node)) {\n\t\t\tCOMPONENT_CACHE.set(node, []);\n\t\t}\n\n\t\tCOMPONENT_CACHE.get(node)?.push(constructor);\n\n\t\tObject.keys(metadata.queries).forEach((propName) => {\n\t\t\tconst query = metadata.queries[propName];\n\n\t\t\tconst target = resolve(query.selector);\n\n\t\t\tif (!target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst targetNode = query.descendants ? node : document;\n\t\t\tconst nodes = targetNode.getElementsByClassName(\n\t\t\t\ttarget.className\n\t\t\t) as HTMLCollectionOf;\n\n\t\t\tconst cache = Array.from(nodes).map((e) =>\n\t\t\t\tgetComponentFromElement(e, query.selector)\n\t\t\t);\n\n\t\t\tconstructor[propName] = query.first ? cache[0] : cache;\n\t\t});\n\n\t\tif (typeof constructor.onInit === 'function') {\n\t\t\tconstructor.onInit();\n\t\t}\n\t});\n}\n\nexport function getComponentFromElement(\n\telement: HTMLElement,\n\tcomponentType: ComponentType\n) {\n\treturn COMPONENT_CACHE.get(element)?.find(\n\t\t(c) => c.constructor === componentType\n\t);\n}\n\nfunction makePropDecorator(name: string, config: PropDecoratorConfig) {\n\tfunction PropDecoratorFactory(componentClass: ComponentType) {\n\t\treturn function PropDecorator(\n\t\t\ttarget: ComponentImplementation,\n\t\t\tmetaName: string\n\t\t) {\n\t\t\tif (!target.constructor.hasOwnProperty(PROP_METADATA)) {\n\t\t\t\tObject.defineProperty(target.constructor, PROP_METADATA, {\n\t\t\t\t\tvalue: {},\n\t\t\t\t});\n\t\t\t}\n\t\t\tconst meta = target.constructor[PROP_METADATA];\n\n\t\t\tmeta[metaName] = (meta.hasOwnProperty(metaName) && meta[metaName]) || [];\n\t\t\tmeta[metaName].unshift({\n\t\t\t\tselector: componentClass,\n\t\t\t\tdescendants: config.descendants,\n\t\t\t\tfirst: config.first,\n\t\t\t});\n\t\t};\n\t}\n\n\tPropDecoratorFactory.prototype.metadataName = name;\n\treturn PropDecoratorFactory;\n}\n\nfunction annotations(ctor: ComponentType): ComponentConfig[] {\n\tif (ctor === null || typeof ctor !== 'function') {\n\t\treturn [];\n\t}\n\n\tconst ownAnnotations = ctor.hasOwnProperty(ANNOTATIONS)\n\t\t? ctor[ANNOTATIONS]\n\t\t: [];\n\n\treturn [\n\t\t...annotations(Object.getPrototypeOf(ctor.prototype)?.constructor),\n\t\t...ownAnnotations,\n\t];\n}\n\nfunction propMetadata(ctor: ComponentType): Record {\n\tif (ctor === null || typeof ctor !== 'function') {\n\t\treturn {};\n\t}\n\n\tconst propMetadataVal = {\n\t\t...propMetadata(Object.getPrototypeOf(ctor.prototype)?.constructor),\n\t};\n\n\tif (ctor.hasOwnProperty(PROP_METADATA)) {\n\t\tObject.keys(ctor[PROP_METADATA]).forEach((propName) => {\n\t\t\tconst ownMetadata = propMetadataVal.hasOwnProperty(propName)\n\t\t\t\t? propMetadataVal[propName]\n\t\t\t\t: [];\n\n\t\t\tpropMetadataVal[propName] = [\n\t\t\t\t...ownMetadata,\n\t\t\t\t...ctor[PROP_METADATA][propName],\n\t\t\t];\n\t\t});\n\t}\n\n\treturn propMetadataVal;\n}\n\nfunction resolve(type: ComponentType): ComponentMetadata {\n\tconst metadata = getMetadata(type);\n\tconst queries = getQueries(type);\n\n\treturn {\n\t\ttype,\n\t\tmetadataName: 'Component',\n\t\tclassName: metadata.className,\n\t\tobserve: metadata.observe,\n\t\tqueries,\n\t};\n}\n\nfunction getMetadata(type: ComponentType) {\n\tconst typeMetadata = annotations(type);\n\n\tif (!typeMetadata || typeMetadata.length === 0) {\n\t\tthrowComponentNotResolvable(type);\n\t}\n\n\treturn typeMetadata[typeMetadata.length - 1];\n}\n\nfunction getQueries(type: ComponentType) {\n\tconst propertyMetadata = propMetadata(type);\n\n\treturn Object.keys(propertyMetadata).reduce((queries, propName) => {\n\t\tconst propMetadata = propertyMetadata[propName];\n\n\t\treturn {\n\t\t\t...queries,\n\t\t\t[propName]: propMetadata[propMetadata.length - 1],\n\t\t};\n\t}, {} as Record);\n}\n","import { isAncestorOfClass } from '../is-ancestor-of-class';\n\nexport function clickedInsideElementWithClass(\n\tevent: MouseEvent,\n\tclassName: string\n) {\n\treturn isAncestorOfClass(event.target as Element, className, true);\n}\n","export function createNode(html: string): HTMLElement {\n\tlet element = document.createElement('div') as HTMLElement;\n\telement.innerHTML = html;\n\telement = element.firstElementChild as HTMLElement;\n\treturn element;\n}\n","export function firstByClass(elements: HTMLElement[], className: string) {\n\tfor (const parent of elements) {\n\t\tif (parent.classList.contains(className)) {\n\t\t\treturn parent;\n\t\t}\n\t}\n\n\treturn null;\n}\n","import { getStyles } from '../get-styles';\n\nexport function getCss(\n\telement: Element,\n\tname: string,\n\tcomputed?: CSSStyleDeclaration\n): string | undefined {\n\tcomputed = computed || getStyles(element);\n\n\tif (computed) {\n\t\treturn computed.getPropertyValue(name) || computed[name];\n\t}\n\n\treturn undefined;\n}\n","import { firstByClass } from '../first-by-class';\nimport { getParentsOrSelf } from '../get-parents-or-self';\n\nexport function getParentOrSelfWithClass(\n\telement: HTMLElement,\n\tclassName: string\n): HTMLElement {\n\treturn firstByClass(getParentsOrSelf(element), className);\n}\n","import { firstByClass } from '../first-by-class';\nimport { getParents } from '../get-parents';\n\nexport function getParentWithClass(\n\telement: HTMLElement,\n\tclassName: string\n): HTMLElement {\n\treturn firstByClass(getParents(element), className);\n}\n","import { isHTMLElement } from '../is-html-element';\n\nexport function getParentsOrSelf(element: HTMLElement): HTMLElement[] {\n\tconst parents: HTMLElement[] = [];\n\n\tif (element && isHTMLElement(element)) {\n\t\tparents.push(element);\n\n\t\tif (element.parentElement) {\n\t\t\tparents.push(...getParentsOrSelf(element.parentElement));\n\t\t}\n\t}\n\n\treturn parents;\n}\n","import { getParentsOrSelf } from '../get-parents-or-self';\n\nexport function getParents(element: HTMLElement) {\n\treturn getParentsOrSelf(element.parentElement);\n}\n","import { getSelectorFromElement } from '../get-selector-from-element';\n\nexport function getSelectorElementFromElement(\n\telement: Element,\n\tattribute = 'data-target',\n\tfallbackHref = true\n): HTMLElement | null {\n\tconst selector = getSelectorFromElement(element, attribute, fallbackHref);\n\n\tif (selector && selector.indexOf('#') === 0) {\n\t\treturn document.getElementById(selector.substr(1, selector.length - 1));\n\t}\n\n\treturn null;\n}\n","export function getSelectorFromElement(\n\telement: Element,\n\tattribute = 'data-target',\n\tfallbackHref = true\n): string {\n\tlet selector = element.getAttribute(attribute);\n\n\tif (!selector && fallbackHref) {\n\t\tselector = element.getAttribute('href') || '';\n\t\tselector = /^#.*/i.test(selector) ? selector : null;\n\t}\n\n\treturn selector;\n}\n","export function getStyles(element: Element) {\n\tlet view = element.ownerDocument.defaultView;\n\n\tif (!view || !view.opener) {\n\t\tview = window;\n\t}\n\n\treturn view.getComputedStyle(element);\n}\n","export function getTriggerElementsFromElement(\n\telement: Element,\n\ttargetAttribute = 'data-target'\n) {\n\treturn Array.from(\n\t\tdocument.querySelectorAll(\n\t\t\t`[href=\"#${element.id}\"], [${targetAttribute}=\"#${element.id}\"]`\n\t\t)\n\t);\n}\n","export function getWindowScrollTop() {\n\tconst root =\n\t\tdocument.documentElement || document.body.parentNode || document.body;\n\treturn window.pageYOffset !== undefined\n\t\t? window.pageYOffset\n\t\t: (root as HTMLElement).scrollTop;\n}\n","type EventListener = (event: Event, trigger?: HTMLElement | undefined) => void;\ntype ElementWithListener = {\n\telement: HTMLElement;\n\tlistener: EventListener;\n};\n\nexport function initializeOpenElements(\n\troot: ParentNode | undefined,\n\tid: string,\n\tlistener: EventListener\n): ElementWithListener[] {\n\treturn initializeClickElements(\n\t\troot,\n\t\t`[href=\"#${id}\"], [data-target=\"#${id}\"]`,\n\t\tlistener\n\t);\n}\n\nexport function initializeDismissElements(\n\troot: HTMLElement | undefined,\n\tlistener: EventListener\n): ElementWithListener[] {\n\treturn initializeClickElements(root, '[data-dismiss]', listener);\n}\n\nexport function initializeClickElements(\n\troot: ParentNode | undefined,\n\tquery: string,\n\tlistener: EventListener\n): ElementWithListener[] {\n\tif (!root) {\n\t\treturn [];\n\t}\n\n\tconst elementsWithListener = Array.from(\n\t\troot.querySelectorAll(query)\n\t).map((element) => ({\n\t\telement,\n\t\tlistener: (e: Event) => listener(e, element),\n\t}));\n\n\taddClickElements(elementsWithListener);\n\n\treturn elementsWithListener;\n}\n\nexport function addClickElements(elements: ElementWithListener[]): void {\n\telements.forEach(({ element, listener }) =>\n\t\telement.addEventListener('click', listener)\n\t);\n}\n\nexport function removeClickElements(elements: ElementWithListener[]): void {\n\telements.forEach(({ element, listener }) =>\n\t\telement.removeEventListener('click', listener)\n\t);\n}\n","import { hasClass } from '../has-class';\n\nexport function isAncestorOfClass(\n\telement: Element,\n\tclassName: string,\n\tincludeSelf: boolean\n): boolean {\n\tlet parent = element.parentElement;\n\tif (includeSelf && element.classList.contains(className)) {\n\t\treturn true;\n\t}\n\twhile (parent && parent.nodeType && parent.nodeType === 1) {\n\t\tif (parent.classList.contains(className)) {\n\t\t\treturn true;\n\t\t}\n\t\tparent = parent.parentElement;\n\t}\n\treturn false;\n}\n","export function isHTMLElement(o: unknown): o is HTMLElement {\n\treturn typeof HTMLElement === 'object'\n\t\t? o instanceof HTMLElement\n\t\t: !!o &&\n\t\t\t\ttypeof o === 'object' &&\n\t\t\t\to !== null &&\n\t\t\t\to instanceof Node &&\n\t\t\t\to.nodeType === 1 &&\n\t\t\t\ttypeof o.nodeName === 'string';\n}\n","import { formatCssUnit } from '../../common/format-css-unit';\n\nexport function safeApplyCssUnit(\n\telement: HTMLElement,\n\tprop: string,\n\tvalue: number | string | undefined\n) {\n\tif (value || value === 0) {\n\t\telement.style[prop] = formatCssUnit(value);\n\t}\n}\n","export type IEventHandler = (args: TArgs) => void;\n\nclass Subscription {\n\tisExecuted = false;\n\n\tconstructor(public handler: IEventHandler, public isOnce: boolean) {}\n\n\texecute(args: TArgs) {\n\t\tif (!this.isOnce || !this.isExecuted) {\n\t\t\tthis.isExecuted = true;\n\t\t\tthis.handler(args);\n\t\t}\n\t}\n}\n\nexport class EventDispatcher {\n\tprivate subscriptions: Subscription[] = [];\n\n\tdispatch(args: TArgs): void {\n\t\tfor (const sub of [...this.subscriptions]) {\n\t\t\tsub.execute(args);\n\t\t\tthis.cleanup(sub);\n\t\t}\n\t}\n\n\tforward(dispatcher: EventDispatcher): void {\n\t\tthis.subscribe((args) => dispatcher.dispatch(args));\n\t}\n\n\tsubscribe(fn: IEventHandler): EventDispatcher {\n\t\tif (fn) {\n\t\t\tthis.subscriptions.push(new Subscription(fn, false));\n\t\t}\n\t\treturn this;\n\t}\n\n\tone(fn: IEventHandler): EventDispatcher {\n\t\tif (fn) {\n\t\t\tthis.subscriptions.push(new Subscription(fn, true));\n\t\t}\n\t\treturn this;\n\t}\n\n\thas(fn: IEventHandler): boolean {\n\t\tif (!fn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.subscriptions.some((sub) => sub.handler === fn);\n\t}\n\n\tunsubscribe(fn: IEventHandler): EventDispatcher {\n\t\tif (!fn) {\n\t\t\treturn this;\n\t\t}\n\n\t\tfor (let i = 0; i < this.subscriptions.length; i++) {\n\t\t\tif (this.subscriptions[i].handler === fn) {\n\t\t\t\tthis.subscriptions.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tclear(): void {\n\t\tthis.subscriptions.splice(0, this.subscriptions.length);\n\t}\n\n\tprivate cleanup(sub: Subscription) {\n\t\tif (sub.isOnce && sub.isExecuted) {\n\t\t\tconst i = this.subscriptions.indexOf(sub);\n\t\t\tif (i > -1) {\n\t\t\t\tthis.subscriptions.splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n","export function eventListenerOrTimeout(\n\teventName: string | false,\n\telement: Element,\n\tcallback: () => void,\n\tfallbackDuration = 0,\n\tremove = true\n): void {\n\tif (eventName === false) {\n\t\tsetTimeout(() => {\n\t\t\tcallback();\n\t\t}, fallbackDuration);\n\t} else {\n\t\tlet called = false;\n\t\tconst listener = () => {\n\t\t\tcalled = true;\n\t\t\tif (remove) {\n\t\t\t\telement.removeEventListener(eventName, listener);\n\t\t\t}\n\t\t\tcallback();\n\t\t};\n\t\telement.addEventListener(eventName, listener);\n\t\tif (fallbackDuration) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (!called) {\n\t\t\t\t\telement.dispatchEvent(new CustomEvent(eventName));\n\t\t\t\t}\n\t\t\t}, fallbackDuration);\n\t\t}\n\t}\n}\n","export function eventNamespaceFactory(namespace: string) {\n\treturn (element: EventTarget, eventName: string): boolean =>\n\t\telement.dispatchEvent(new CustomEvent(eventName + '.' + namespace));\n}\n","export async function fetchHtml(input: RequestInfo): Promise {\n\tconst response = await fetch(input, {\n\t\tmethod: 'GET',\n\t});\n\tif (response.headers.get('content-type')?.includes('text/html')) {\n\t\treturn response.text();\n\t}\n\n\treturn new Promise((resolve, reject) =>\n\t\treject(Error('Response does not contain content-type text/html'))\n\t);\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nexport const KEYCODES = {\n\tDOWN: 40,\n\tENTER: 13,\n\tESCAPE: 27,\n\tSPACE: 32,\n\tUP: 38,\n};\n","import { getCss } from '../dom/get-css';\nimport { parseCssUnit } from './parse-css-unit';\n\nexport function getParsedCssUnit(\n\telement: Element,\n\tname: string,\n\tcomputed?: CSSStyleDeclaration\n): number {\n\treturn parseCssUnit(getCss(element, name, computed));\n}\n","export function parseCssUnit(unit: string | undefined): number {\n\tconst units = ['px', 'rem', 'em'];\n\n\tif (!unit || !units.filter((u) => unit.indexOf(u) !== -1).length) {\n\t\treturn 0;\n\t}\n\n\tlet parsed = unit.replace(',', '.');\n\tunits.forEach((u) => (parsed = parsed.replace(u, '')));\n\n\treturn Number(parsed);\n}\n","export * from './position/connected-position-strategy';\nexport * from './position/global-position-strategy';\nexport * from './position/overlay-position-builder';\nexport * from './position/position-strategy';\nexport * from './overlay-options';\nexport * from './overlay';\nexport * from './overlay-implementation';\nexport * from './scroll/reposition-scroll-strategy';\n\n","import { newGuid } from '../common/new-guid';\nimport {\n\tinitializeDismissElements,\n\tinitializeOpenElements,\n} from '../dom/initialize-click-elements';\nimport { EventDispatcher } from '../events/event-dispatcher';\nimport { Overlay } from './overlay';\nimport { OverlayOptions } from './overlay-options';\n\nexport abstract class OverlayImplementation {\n\tprotected overlay: Overlay | null | undefined;\n\tprivate portalElement: HTMLDivElement;\n\n\tbeforeOpen = new EventDispatcher();\n\tbeforeClose = new EventDispatcher();\n\tafterOpened = new EventDispatcher();\n\tafterClosed = new EventDispatcher();\n\n\tconstructor(protected element: HTMLElement) {\n\t\tthis.element.id = this.element.id || newGuid();\n\t\tthis.portalElement = document.createElement('div');\n\t\tinitializeOpenElements(document, this.element.id, (event, trigger) => {\n\t\t\tevent.preventDefault();\n\t\t\tthis.toggle(trigger);\n\t\t});\n\t}\n\n\topen(trigger?: HTMLElement): void {\n\t\tthis.createOverlay(trigger).open();\n\t\tinitializeDismissElements(this.overlay?.portalElement, (event) => {\n\t\t\tevent.preventDefault();\n\t\t\tthis.close();\n\t\t});\n\t}\n\n\tclose(): void {\n\t\tthis.overlay?.close();\n\t}\n\n\ttoggle(trigger?: HTMLElement): void {\n\t\tthis.overlay?.isOpen ? this.close() : this.open(trigger);\n\t}\n\n\tprivate createOverlay(trigger?: HTMLElement): Overlay {\n\t\tif (!this.overlay) {\n\t\t\tthis.initializePortal(this.portalElement);\n\n\t\t\tthis.overlay = new Overlay(\n\t\t\t\tthis.portalElement,\n\t\t\t\tnew OverlayOptions(this.getOverlayOptions(trigger))\n\t\t\t).create();\n\n\t\t\tthis.overlay.afterOpened.forward(this.afterOpened);\n\t\t\tthis.overlay.afterClosed.forward(this.afterClosed);\n\t\t\tthis.overlay.beforeOpen.forward(this.beforeOpen);\n\t\t\tthis.overlay.beforeClose.forward(this.beforeClose);\n\n\t\t\tthis.overlay.onDisposed.subscribe(() => {\n\t\t\t\tthis.overlay = null;\n\t\t\t});\n\t\t} else {\n\t\t\tthis.updatePortalElement(this.portalElement);\n\t\t}\n\t\t\n\t\treturn this.overlay;\n\t}\n\n\tabstract getOverlayOptions(trigger?: HTMLElement): OverlayOptions;\n\tabstract initializePortal(portal: HTMLElement): void;\n\tprotected updatePortalElement(portal: HTMLElement) { return; }\n}\n","import { PositionStrategy } from './position/position-strategy';\nimport { ScrollStrategy } from './scroll/scroll-strategy';\n\nexport class OverlayOptions {\n\tpositionStrategy?: PositionStrategy;\n\tscrollStrategy?: ScrollStrategy;\n\tclassName? = 'c-overlay';\n\tcontainerClassName? = 'c-overlay__container';\n\toverlayClassName?: string;\n\tbackdropClassName? = 'c-overlay-dark-backdrop';\n\tportalClassName?: string;\n\thasBackdrop? = true;\n\twidth?: number | string;\n\theight?: number | string;\n\tminWidth?: number | string;\n\tminHeight?: number | string;\n\tmaxWidth?: number | string;\n\tmaxHeight?: number | string;\n\ttransitionDuration? = 300;\n\tshowingClassName? = 'is-showing';\n\tbaseBackdropClassName? = `c-overlay__backdrop`;\n\thidingClassName? = 'is-fade-out';\n\tvisibleClassName? = 'is-visible';\n\tdisposeAfterClose? = false;\n\tdetachBackdropBeforeClose? = false;\n\tcloseOnBackdropClick? = false;\n\tcloseOnEscPressed? = true;\n\tcloseOnClick? = false;\n\n\tconstructor(options?: OverlayOptions) {\n\t\tif (options) {\n\t\t\tObject.keys(options)\n\t\t\t\t.filter((key) => options[key] !== undefined)\n\t\t\t\t.forEach((key) => (this[key] = options[key]));\n\t\t}\n\t\tthis.containerClassName = `${this.className}__container`;\n\t\tthis.baseBackdropClassName = `${this.className}__backdrop`;\n\t}\n}\n","import { newGuid } from '../common/new-guid';\nimport { clickedInsideElementWithClass } from '../dom/clicked-inside-element-with-class';\nimport { safeApplyCssUnit } from '../dom/safe-apply-css-value';\nimport { EventDispatcher } from '../events/event-dispatcher';\nimport { KEYCODES } from '../keycodes';\nimport { addTransitionEndListener } from '../transition/add-transition-end-listener';\nimport { OverlayOptions } from './overlay-options';\n\nexport class Overlay {\n\toverlayElement: HTMLElement | undefined;\n\tonAttached = new EventDispatcher();\n\tonDetached = new EventDispatcher();\n\tbeforeOpen = new EventDispatcher();\n\tbeforeClose = new EventDispatcher();\n\tafterOpened = new EventDispatcher();\n\tafterClosed = new EventDispatcher();\n\tonDisposed = new EventDispatcher();\n\tonKeyboardEvent = new EventDispatcher();\n\tbackdropClick = new EventDispatcher();\n\toptions: OverlayOptions;\n\tattached = false;\n\tisOpen = false;\n\n\tprivate uuid = newGuid();\n\tprivate overlayContainerElement: HTMLElement | undefined;\n\tprivate backdropElement: HTMLElement | null | undefined;\n\n\tconstructor(public portalElement: HTMLElement, options?: OverlayOptions) {\n\t\tthis.options = new OverlayOptions(options);\n\t\toptions?.scrollStrategy?.attach(this);\n\t\tif (this.options.portalClassName) {\n\t\t\tthis.portalElement.classList.add(this.options.portalClassName);\n\t\t}\n\n\t\tif (this.options.closeOnClick) {\n\t\t\tthis.portalElement.addEventListener('click', () =>\n\t\t\t\tthis.close()\n\t\t\t);\n\t\t}\n\t}\n\n\tcreate(): Overlay {\n\t\tconst overlayContainerElement = document.querySelector(\n\t\t\t`.${this.options.containerClassName}`\n\t\t);\n\n\t\tif (overlayContainerElement) {\n\t\t\tthis.overlayContainerElement = overlayContainerElement;\n\t\t} else {\n\t\t\tthis.overlayContainerElement = document.createElement('div');\n\t\t\tthis.overlayContainerElement.classList.add(\n\t\t\t\tthis.options.containerClassName || ''\n\t\t\t);\n\n\t\t\tdocument.body.insertBefore(\n\t\t\t\tthis.overlayContainerElement,\n\t\t\t\tdocument.body.lastElementChild\n\t\t\t);\n\t\t}\n\n\t\tthis.overlayElement = document.createElement('div');\n\t\tthis.overlayElement.id = `${this.options.className}-${this.uuid}`;\n\t\tif (this.options.className) {\n\t\t\tthis.overlayElement.classList.add(this.options.className);\n\t\t}\n\t\tif (this.options.overlayClassName) {\n\t\t\tthis.overlayElement.classList.add(this.options.overlayClassName);\n\t\t}\n\n\t\tthis.overlayContainerElement.appendChild(this.overlayElement);\n\n\t\treturn this;\n\t}\n\n\tdetachBackdrop() {\n\t\tif (!this.backdropElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst backdropToDetach = this.backdropElement;\n\n\t\tconst finishDetach = () => {\n\t\t\tbackdropToDetach?.parentNode?.removeChild(backdropToDetach);\n\n\t\t\tif (this.backdropElement === backdropToDetach) {\n\t\t\t\tthis.backdropElement = null;\n\t\t\t}\n\t\t};\n\n\t\tbackdropToDetach.classList.remove(this.options.showingClassName || '');\n\t\tbackdropToDetach.classList.remove(this.options.backdropClassName || '');\n\t\taddTransitionEndListener(backdropToDetach, finishDetach, 500);\n\t\tbackdropToDetach.style.pointerEvents = 'none';\n\t}\n\n\tupdatePosition() {\n\t\tthis.options.positionStrategy?.apply();\n\t}\n\n\tupdateSize(sizeConfig: OverlaySizeConfig) {\n\t\tthis.options = { ...this.options, ...sizeConfig };\n\t\tthis.updateElementSize();\n\t}\n\n\topen() {\n\t\tthis.attach();\n\t\tthis.updatePosition();\n\t\tthis.portalElement.classList.add(this.options.showingClassName || '');\n\n\t\tthis.beforeOpen.dispatch();\n\t\tthis.isOpen = true;\n\n\t\tconst finishOpen = () => {\n\t\t\tthis.portalElement.classList.remove(this.options.showingClassName || '');\n\t\t\tthis.portalElement.classList.add(this.options.visibleClassName || '');\n\t\t\tthis.afterOpened.dispatch();\n\t\t};\n\n\t\taddTransitionEndListener(\n\t\t\tthis.portalElement,\n\t\t\tfinishOpen,\n\t\t\tthis.options.transitionDuration\n\t\t);\n\t}\n\n\tclose() {\n\t\tthis.detach();\n\n\t\tthis.portalElement.classList.add(this.options.hidingClassName || '');\n\t\tthis.beforeClose.dispatch();\n\t\tif (this.options.detachBackdropBeforeClose) {\n\t\t\tthis.detachBackdrop();\n\t\t}\n\n\t\tconst finishClose = () => {\n\t\t\tthis.portalElement.classList.remove(this.options.hidingClassName || '');\n\t\t\tthis.portalElement.classList.remove(this.options.showingClassName || '');\n\t\t\tthis.portalElement.classList.remove(this.options.visibleClassName || '');\n\t\t\tthis.isOpen = false;\n\t\t\tthis.afterClosed.dispatch();\n\t\t\tif (this.options.disposeAfterClose) {\n\t\t\t\tthis.dispose();\n\t\t\t}\n\t\t};\n\n\t\taddTransitionEndListener(\n\t\t\tthis.portalElement,\n\t\t\tfinishClose,\n\t\t\tthis.options.transitionDuration\n\t\t);\n\t}\n\n\tdispose() {\n\t\tif (this.portalElement && this.portalElement.parentElement) {\n\t\t\tthis.portalElement.parentElement.removeChild(this.portalElement);\n\t\t}\n\n\t\tthis.options.positionStrategy?.dispose();\n\t\tthis.options.scrollStrategy?.disable();\n\t\tthis.detachBackdrop();\n\t\tdocument.body.removeEventListener('keydown', this.keydownListener, true);\n\t\tthis.onDisposed.dispatch();\n\t}\n\n\tprivate attach() {\n\t\tthis.options.positionStrategy?.attach(this);\n\t\tthis.options.scrollStrategy?.enable();\n\t\tthis.overlayElement?.appendChild(this.portalElement);\n\n\t\tthis.updateElementSize();\n\n\t\tif (this.overlayElement) {\n\t\t\tthis.overlayElement.style.pointerEvents = 'auto';\n\t\t}\n\n\t\tthis.attachBackdrop();\n\n\t\tthis.attached = true;\n\t\tdocument.body.addEventListener('keydown', this.keydownListener, true);\n\t\tthis.onAttached.dispatch();\n\t}\n\n\tprivate detach() {\n\t\tif (!this.attached) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.detachBackdrop();\n\t\tif (this.overlayElement) {\n\t\t\tthis.overlayElement.style.pointerEvents = 'none';\n\t\t}\n\t\tthis.options.positionStrategy?.detach();\n\t\tthis.options.scrollStrategy?.disable();\n\t\tdocument.body.removeEventListener('keydown', this.keydownListener, true);\n\t\tthis.onDetached.dispatch();\n\t}\n\n\tprivate attachBackdrop() {\n\t\tif (!this.options.hasBackdrop) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.backdropElement = document.createElement('div');\n\t\tthis.backdropElement.classList.add(\n\t\t\tthis.options.baseBackdropClassName || ''\n\t\t);\n\n\t\tthis.backdropElement.classList.add(this.options.backdropClassName || '');\n\t\tif (this.overlayElement) {\n\t\t\tthis.overlayElement.parentElement?.insertBefore(\n\t\t\t\tthis.backdropElement,\n\t\t\t\tthis.overlayElement\n\t\t\t);\n\t\t}\n\n\t\tthis.backdropElement.addEventListener('click', (event) =>\n\t\t\tthis.handleBackdropClick(event)\n\t\t);\n\n\t\trequestAnimationFrame(() => {\n\t\t\tthis.backdropElement?.classList.add(this.options.showingClassName || '');\n\t\t});\n\t}\n\n\tprivate updateElementSize() {\n\t\tif (!this.overlayElement) {\n\t\t\treturn;\n\t\t}\n\n\t\tsafeApplyCssUnit(this.overlayElement, 'width', this.options.width);\n\t\tsafeApplyCssUnit(this.overlayElement, 'height', this.options.height);\n\t\tsafeApplyCssUnit(this.overlayElement, 'minWidth', this.options.minWidth);\n\t\tsafeApplyCssUnit(this.overlayElement, 'minHeight', this.options.minHeight);\n\t\tsafeApplyCssUnit(this.overlayElement, 'maxWidth', this.options.maxWidth);\n\t\tsafeApplyCssUnit(this.overlayElement, 'maxHeight', this.options.maxHeight);\n\t}\n\n\tprivate handleBackdropClick(event: MouseEvent) {\n\t\tif (\n\t\t\tthis.options.className &&\n\t\t\t!clickedInsideElementWithClass(event, this.options.className)\n\t\t) {\n\t\t\tthis.backdropClick.dispatch(event);\n\t\t\tif (this.options.closeOnBackdropClick) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate keydownListener = (event: KeyboardEvent) => {\n\t\tthis.onKeyboardEvent.dispatch(event);\n\t\tif (this.options.closeOnEscPressed) {\n\t\t\tif (event.keyCode === KEYCODES.ESCAPE) {\n\t\t\t\tthis.close();\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport function overlay(element: HTMLElement, options?: OverlayOptions) {\n\treturn new Overlay(element, options).create();\n}\n\nexport interface OverlaySizeConfig {\n\twidth?: number | string;\n\theight?: number | string;\n\tminWidth?: number | string;\n\tminHeight?: number | string;\n\tmaxWidth?: number | string;\n\tmaxHeight?: number | string;\n}\n","import { EventDispatcher } from '../../events/event-dispatcher';\nimport {\n\tcalculateOverlayElementPosition,\n\tcalculateOverlayPoint,\n\tcalculatePosition,\n\tConnectionPositionPair,\n\tgetScrollVisibility,\n\tOriginConnectionPosition,\n\tOverlayConnectionPosition,\n\tOverlayPoint,\n\tScrollingVisibility,\n} from '../../viewport/calculate-overlay';\nimport { Overlay } from '../overlay';\nimport { PositionStrategy } from './position-strategy';\n\nexport interface ConnectedOverlayPositionChange {\n\tconnectionPair: ConnectionPositionPair;\n\tscrollableViewProperties?: ScrollingVisibility;\n}\n\nexport class ConnectedPositionStrategy implements PositionStrategy {\n\tonPositionChange = new EventDispatcher();\n\tprivate offsetX = 0;\n\tprivate offsetY = 0;\n\tprivate scrollables: HTMLElement[] = [];\n\tprivate preferredPositions: ConnectionPositionPair[] = [];\n\tprivate origin: HTMLElement;\n\tprivate pane: HTMLElement | undefined;\n\tprivate lastConnectedPosition: ConnectionPositionPair | undefined;\n\tprivate applied = false;\n\tprivate positionLocked = false;\n\tprivate portal: HTMLElement;\n\tprivate updateTransformOrigin = false;\n\n\tconstructor(private connectedTo: HTMLElement) {\n\t\tthis.origin = this.connectedTo;\n\t}\n\n\tget positions() {\n\t\treturn this.preferredPositions;\n\t}\n\n\tattach(overlayRef: Overlay): void {\n\t\tthis.pane = overlayRef.overlayElement;\n\t\tthis.portal = overlayRef.portalElement;\n\t\twindow.addEventListener('resize', this.handleResizeChange);\n\t}\n\n\tdetach() {\n\t\tthis.applied = false;\n\t\twindow.removeEventListener('resize', this.handleResizeChange);\n\t}\n\n\tdispose() {\n\t\tthis.detach();\n\t}\n\n\tapply() {\n\t\tlet overlayPoint: OverlayPoint;\n\t\tlet overlayPosition: ConnectionPositionPair;\n\t\tif (this.applied && this.positionLocked && this.lastConnectedPosition) {\n\t\t\toverlayPosition =\n\t\t\t\tthis.lastConnectedPosition || this.preferredPositions[0];\n\n\t\t\toverlayPoint = calculateOverlayPoint(\n\t\t\t\tthis.origin.getBoundingClientRect(),\n\t\t\t\tthis.pane.getBoundingClientRect(),\n\t\t\t\toverlayPosition,\n\t\t\t\tthis.offsetX,\n\t\t\t\tthis.offsetY\n\t\t\t);\n\t\t} else {\n\t\t\tthis.applied = true;\n\n\t\t\tconst { isFallback, position, point } = calculatePosition(\n\t\t\t\tthis.origin.getBoundingClientRect(),\n\t\t\t\tthis.pane.getBoundingClientRect(),\n\t\t\t\tthis.preferredPositions,\n\t\t\t\tthis.offsetX,\n\t\t\t\tthis.offsetY\n\t\t\t);\n\n\t\t\toverlayPosition = position;\n\t\t\toverlayPoint = point;\n\n\t\t\tif (!isFallback) {\n\t\t\t\tthis.lastConnectedPosition = position;\n\t\t\t}\n\t\t}\n\n\t\tconst { x, y, verticalStyleProperty, horizontalStyleProperty } =\n\t\t\tcalculateOverlayElementPosition(\n\t\t\t\tthis.pane.getBoundingClientRect(),\n\t\t\t\toverlayPoint,\n\t\t\t\toverlayPosition\n\t\t\t);\n\n\t\tthis.pane.style.top = '';\n\t\tthis.pane.style.bottom = '';\n\t\tthis.pane.style.left = '';\n\t\tthis.pane.style.right = '';\n\n\t\tthis.pane.style[verticalStyleProperty] = `${y}px`;\n\t\tthis.pane.style[horizontalStyleProperty] = `${x}px`;\n\n\t\tthis.onPositionChange.dispatch({\n\t\t\tconnectionPair: overlayPosition,\n\t\t\tscrollableViewProperties: getScrollVisibility(\n\t\t\t\tthis.pane,\n\t\t\t\tthis.origin,\n\t\t\t\tthis.scrollables\n\t\t\t),\n\t\t});\n\n\t\tif (this.updateTransformOrigin) {\n\t\t\tconst originX = overlayPosition.overlayX !== 'start' ? 'right' : 'left';\n\t\t\tconst originY = overlayPosition.overlayY === 'top' ? 'top' : 'bottom';\n\t\t\tthis.portal.style.transformOrigin = `${originX} ${originY}`;\n\t\t}\n\t}\n\n\twithScrollableContainers(scrollables: HTMLElement[]) {\n\t\tthis.scrollables = scrollables;\n\t\treturn this;\n\t}\n\n\twithFallbackPosition(\n\t\toriginPos: OriginConnectionPosition,\n\t\toverlayPos: OverlayConnectionPosition,\n\t\toffsetX?: number,\n\t\toffsetY?: number\n\t) {\n\t\tthis.preferredPositions.push(\n\t\t\tnew ConnectionPositionPair(originPos, overlayPos, offsetX, offsetY)\n\t\t);\n\t\treturn this;\n\t}\n\n\twithOffsetX(offset: number) {\n\t\tthis.offsetX = offset;\n\t\treturn this;\n\t}\n\n\twithOffsetY(offset: number) {\n\t\tthis.offsetY = offset;\n\t\treturn this;\n\t}\n\n\twithLockedPosition(isLocked: boolean) {\n\t\tthis.positionLocked = isLocked;\n\t\treturn this;\n\t}\n\n\twithPositions(positions: ConnectionPositionPair[]) {\n\t\tthis.preferredPositions = positions.slice();\n\t\treturn this;\n\t}\n\n\twithTransformOriginUpdate() {\n\t\tthis.updateTransformOrigin = true;\n\t}\n\n\tsetOrigin(origin: HTMLElement) {\n\t\tthis.origin = origin;\n\t\treturn this;\n\t}\n\n\tprivate handleResizeChange = () => {\n\t\tthis.apply();\n\t};\n}\n","import { PositionStrategy } from './position-strategy';\nimport { Overlay } from '../overlay';\n\nexport class GlobalPositionStrategy implements PositionStrategy {\n\tprivate overlayRef: Overlay;\n\tprivate cssPosition = 'static';\n\tprivate topOffset = '';\n\tprivate bottomOffset = '';\n\tprivate leftOffset = '';\n\tprivate rightOffset = '';\n\tprivate alignItems = '';\n\tprivate justifyContent = '';\n\tprivate width = '';\n\tprivate height = '';\n\tprivate wrapper: HTMLElement | undefined;\n\n\tdetach() {}\n\n\tattach(overlayRef: Overlay) {\n\t\tthis.overlayRef = overlayRef;\n\n\t\tif (this.width && !overlayRef.options.width) {\n\t\t\toverlayRef.updateSize({ width: this.width });\n\t\t}\n\n\t\tif (this.height && !overlayRef.options.height) {\n\t\t\toverlayRef.updateSize({ height: this.height });\n\t\t}\n\t}\n\n\ttop(value = '') {\n\t\tthis.bottomOffset = '';\n\t\tthis.topOffset = value;\n\t\tthis.alignItems = 'flex-start';\n\t\treturn this;\n\t}\n\n\tleft(value = '') {\n\t\tthis.rightOffset = '';\n\t\tthis.leftOffset = value;\n\t\tthis.justifyContent = 'flex-start';\n\t\treturn this;\n\t}\n\n\tbottom(value = '') {\n\t\tthis.topOffset = '';\n\t\tthis.bottomOffset = value;\n\t\tthis.alignItems = 'flex-end';\n\t\treturn this;\n\t}\n\n\tright(value = '') {\n\t\tthis.leftOffset = '';\n\t\tthis.rightOffset = value;\n\t\tthis.justifyContent = 'flex-end';\n\t\treturn this;\n\t}\n\n\tcenterHorizontally(offset = '') {\n\t\tthis.left(offset);\n\t\tthis.justifyContent = 'center';\n\t\treturn this;\n\t}\n\n\tcenterVertically(offset = '') {\n\t\tthis.top(offset);\n\t\tthis.alignItems = 'center';\n\t\treturn this;\n\t}\n\n\tapply() {\n\t\tif (!this.overlayRef.attached) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!this.wrapper && this.overlayRef.overlayElement.parentNode) {\n\t\t\tthis.wrapper = document.createElement('div');\n\t\t\tthis.wrapper.classList.add('c-overlay__global');\n\t\t\tthis.overlayRef.overlayElement.parentNode.insertBefore(\n\t\t\t\tthis.wrapper,\n\t\t\t\tthis.overlayRef.overlayElement\n\t\t\t);\n\t\t\tthis.wrapper.appendChild(this.overlayRef.overlayElement);\n\t\t}\n\n\t\tthis.overlayRef.overlayElement.style.position = this.cssPosition;\n\t\tthis.overlayRef.overlayElement.style.marginLeft =\n\t\t\tthis.overlayRef.options.width === '100%' ? '0' : this.leftOffset;\n\t\tthis.overlayRef.overlayElement.style.marginTop =\n\t\t\tthis.overlayRef.options.height === '100%' ? '0' : this.topOffset;\n\t\tthis.overlayRef.overlayElement.style.marginBottom = this.bottomOffset;\n\t\tthis.overlayRef.overlayElement.style.marginRight = this.rightOffset;\n\n\t\tthis.overlayRef.overlayElement.parentElement.style.justifyContent =\n\t\t\tthis.overlayRef.options.width === '100%'\n\t\t\t\t? 'flex-start'\n\t\t\t\t: this.justifyContent;\n\t\tthis.overlayRef.overlayElement.parentElement.style.alignItems =\n\t\t\tthis.overlayRef.options.height === '100%'\n\t\t\t\t? 'flex-start'\n\t\t\t\t: this.alignItems;\n\t}\n\n\tdispose() {\n\t\tthis.wrapper?.parentNode?.removeChild(this.wrapper);\n\t\tthis.wrapper = null;\n\t}\n}\n","import {\n\tOriginConnectionPosition,\n\tOverlayConnectionPosition,\n} from '../../viewport/calculate-overlay';\nimport { ConnectedPositionStrategy } from './connected-position-strategy';\nimport { GlobalPositionStrategy } from './global-position-strategy';\n\nexport class OverlayPositionBuilder {\n\tstatic global() {\n\t\treturn new GlobalPositionStrategy();\n\t}\n\n\tstatic connectedTo(\n\t\telementRef: HTMLElement\n\t) {\n\t\treturn new ConnectedPositionStrategy(elementRef);\n\t}\n}\n","import { Overlay } from '../overlay';\nimport { ScrollStrategy } from './scroll-strategy';\n\nexport abstract class BaseScrollStrategy implements ScrollStrategy {\n\tprotected overlayRef: Overlay;\n\tprotected applied = false;\n\n\tattach(overlayRef: Overlay) {\n\t\tthis.overlayRef = overlayRef;\n\t}\n\n\tenable() {\n\t\tif (!this.applied) {\n\t\t\tthis.handleEnable();\n\t\t\tthis.applied = true;\n\t\t}\n\t}\n\n\tdisable() {\n\t\tif (this.applied) {\n\t\t\tthis.handleDisable();\n\t\t\tthis.applied = false;\n\t\t}\n\t}\n\n\tabstract handleEnable(): void;\n\tabstract handleDisable(): void;\n}\n","import { throttleTimeout } from '../../common/throttleTimeout';\nimport { isElementOutsideWindow } from '../../viewport/is-element-outside-window';\nimport { BaseScrollStrategy } from './base-scroll-strategy';\n\nexport interface RepositionScrollStrategyConfig {\n\tscrollThrottle?: number;\n\tautoClose?: boolean;\n}\n\nexport class RepositionScrollStrategy extends BaseScrollStrategy {\n\tconstructor(private config?: RepositionScrollStrategyConfig) {\n\t\tsuper();\n\t}\n\n\thandleEnable() {\n\t\twindow.addEventListener('scroll', this.handleScroll);\n\t}\n\n\thandleDisable() {\n\t\twindow.removeEventListener('scroll', this.handleScroll);\n\t}\n\n\tprivate handleScroll = () => {\n\t\tconst autoClose = this.config ? this.config.autoClose : true;\n\n\t\tthrottleTimeout(this.config?.scrollThrottle || 0, () => {\n\t\t\tthis.overlayRef.updatePosition();\n\n\t\t\tif (autoClose) {\n\t\t\t\tif (isElementOutsideWindow(this.overlayRef.overlayElement)) {\n\t\t\t\t\tthis.disable();\n\t\t\t\t\tthis.overlayRef.close();\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n}\n","import { eventListenerOrTimeout } from '../../events/event-listener-or-timeout';\nimport { getTransitionEndEventName } from '../get-transition-end-event-name';\n\nconst transitionEndEventName = getTransitionEndEventName();\n\nexport function addTransitionEndListener(\n\telement: Element,\n\tcallback: () => void,\n\tfallbackDuration = 0,\n\tremove = true\n): void {\n\teventListenerOrTimeout(\n\t\ttransitionEndEventName,\n\t\telement,\n\t\tcallback,\n\t\tfallbackDuration,\n\t\tremove\n\t);\n}\n","export function getTransitionEndEventName(): string | false {\n\tconst element = document.createElement('_');\n\tconst transitions = {\n\t\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t\tWebkitTransition: 'webkitTransitionEnd',\n\t\ttransition: 'transitionend',\n\t};\n\n\tfor (const transition in transitions) {\n\t\tif (element.style[transition] !== undefined) {\n\t\t\treturn transitions[transition];\n\t\t}\n\t}\n\n\treturn false;\n}\n","export function removeQueryStringFromPath(url: string) {\n\treturn url.split('?')[0];\n}\n","import { isElementClippedByScrolling } from '../is-element-clipped-by-scrolling';\nimport { isElementScrolledOutsideView } from '../is-element-scrolled-outside-view';\n\nexport interface Point {\n\tx: number;\n\ty: number;\n}\n\nexport interface OverlayPoint extends Point {\n\tvisibleArea: number;\n\tfitsInViewport: boolean;\n}\n\nexport type HorizontalConnectionPos = 'start' | 'center' | 'end';\nexport type VerticalConnectionPos = 'top' | 'center' | 'bottom';\n\nexport interface OriginConnectionPosition {\n\toriginX: HorizontalConnectionPos;\n\toriginY: VerticalConnectionPos;\n}\n\nexport interface OverlayConnectionPosition {\n\toverlayX: HorizontalConnectionPos;\n\toverlayY: VerticalConnectionPos;\n}\n\nexport class ConnectionPositionPair {\n\toriginX: HorizontalConnectionPos;\n\toriginY: VerticalConnectionPos;\n\toverlayX: HorizontalConnectionPos;\n\toverlayY: VerticalConnectionPos;\n\n\tconstructor(\n\t\torigin: OriginConnectionPosition,\n\t\toverlay: OverlayConnectionPosition,\n\t\tpublic offsetX?: number,\n\t\tpublic offsetY?: number\n\t) {\n\t\tthis.originX = origin.originX;\n\t\tthis.originY = origin.originY;\n\t\tthis.overlayX = overlay.overlayX;\n\t\tthis.overlayY = overlay.overlayY;\n\t}\n}\n\nexport interface ScrollingVisibility {\n\tisOriginClipped: boolean;\n\tisOriginOutsideView: boolean;\n\tisOverlayClipped: boolean;\n\tisOverlayOutsideView: boolean;\n}\n\nexport function calculateOverlayElementPosition(\n\toverlayRect: ClientRect,\n\toverlayPoint: Point,\n\tpos: ConnectionPositionPair\n) {\n\tconst verticalStyleProperty = pos.overlayY === 'bottom' ? 'bottom' : 'top';\n\n\tconst y =\n\t\tverticalStyleProperty === 'top'\n\t\t\t? overlayPoint.y\n\t\t\t: document.documentElement.clientHeight -\n\t\t\t (overlayPoint.y + overlayRect.height);\n\n\tconst horizontalStyleProperty = pos.overlayX === 'end' ? 'right' : 'left';\n\n\tconst x =\n\t\thorizontalStyleProperty === 'left'\n\t\t\t? overlayPoint.x\n\t\t\t: document.documentElement.clientWidth -\n\t\t\t (overlayPoint.x + overlayRect.width);\n\n\treturn {\n\t\tverticalStyleProperty,\n\t\thorizontalStyleProperty,\n\t\tx,\n\t\ty,\n\t};\n}\n\nfunction getOriginConnectionPoint(\n\toriginRect: DOMRect,\n\tpos: ConnectionPositionPair\n): Point {\n\tconst originStartX = originRect.left;\n\tconst originEndX = originRect.right;\n\n\tlet x: number;\n\tif (pos.originX === 'center') {\n\t\tx = originStartX + originRect.width / 2;\n\t} else {\n\t\tx = pos.originX === 'start' ? originStartX : originEndX;\n\t}\n\n\tlet y: number;\n\tif (pos.originY === 'center') {\n\t\ty = originRect.top + originRect.height / 2;\n\t} else {\n\t\ty = pos.originY === 'top' ? originRect.top : originRect.bottom;\n\t}\n\n\treturn { x, y };\n}\n\nfunction getOverlayPoint(\n\toriginPoint: Point,\n\toverlayRect: ClientRect,\n\tpos: ConnectionPositionPair,\n\tbaseOffsetX: number,\n\tbaseOffsetY: number\n): OverlayPoint {\n\tconst viewportSize = {\n\t\twidth: window.innerWidth,\n\t\theight: window.innerHeight,\n\t};\n\n\tlet overlayStartX: number;\n\tif (pos.overlayX === 'center') {\n\t\toverlayStartX = -overlayRect.width / 2;\n\t} else if (pos.overlayX === 'start') {\n\t\toverlayStartX = 0;\n\t} else {\n\t\toverlayStartX = -overlayRect.width;\n\t}\n\n\tlet overlayStartY: number;\n\tif (pos.overlayY === 'center') {\n\t\toverlayStartY = -overlayRect.height / 2;\n\t} else {\n\t\toverlayStartY = pos.overlayY === 'top' ? 0 : -overlayRect.height;\n\t}\n\n\tconst offsetX = pos.offsetX === undefined ? baseOffsetX : pos.offsetX;\n\tconst offsetY = pos.offsetY === undefined ? baseOffsetY : pos.offsetY;\n\n\tconst x = originPoint.x + overlayStartX + offsetX;\n\tconst y = originPoint.y + overlayStartY + offsetY;\n\n\tconst leftOverflow = 0 - x;\n\tconst rightOverflow = x + overlayRect.width - viewportSize.width;\n\tconst topOverflow = 0 - y;\n\tconst bottomOverflow = y + overlayRect.height - viewportSize.height;\n\n\tconst visibleWidth = subtractOverflows(\n\t\toverlayRect.width,\n\t\tleftOverflow,\n\t\trightOverflow\n\t);\n\tconst visibleHeight = subtractOverflows(\n\t\toverlayRect.height,\n\t\ttopOverflow,\n\t\tbottomOverflow\n\t);\n\n\tconst visibleArea = visibleWidth * visibleHeight;\n\tconst fitsInViewport = overlayRect.width * overlayRect.height === visibleArea;\n\n\treturn { x, y, fitsInViewport, visibleArea };\n}\n\nfunction subtractOverflows(length: number, ...overflows: number[]): number {\n\treturn overflows.reduce((currentValue: number, currentOverflow: number) => {\n\t\treturn currentValue - Math.max(currentOverflow, 0);\n\t}, length);\n}\n\nexport function getScrollVisibility(\n\toverlay: HTMLElement,\n\torigin: HTMLElement,\n\tscrollables: HTMLElement[]\n): ScrollingVisibility {\n\tconst originBounds = origin.getBoundingClientRect();\n\tconst overlayBounds = overlay.getBoundingClientRect();\n\tconst scrollContainerBounds = scrollables.map((s) =>\n\t\ts.getBoundingClientRect()\n\t);\n\n\treturn {\n\t\tisOriginClipped: isElementClippedByScrolling(\n\t\t\toriginBounds,\n\t\t\tscrollContainerBounds\n\t\t),\n\t\tisOriginOutsideView: isElementScrolledOutsideView(\n\t\t\toriginBounds,\n\t\t\tscrollContainerBounds\n\t\t),\n\t\tisOverlayClipped: isElementClippedByScrolling(\n\t\t\toverlayBounds,\n\t\t\tscrollContainerBounds\n\t\t),\n\t\tisOverlayOutsideView: isElementScrolledOutsideView(\n\t\t\toverlayBounds,\n\t\t\tscrollContainerBounds\n\t\t),\n\t};\n}\n\nexport function calculateOverlayPoint(\n\toriginRect: DOMRect,\n\toverlayRect: DOMRect,\n\tpos: ConnectionPositionPair,\n\toffsetX: number,\n\toffsetY: number\n): OverlayPoint {\n\tconst originPoint = getOriginConnectionPoint(originRect, pos);\n\treturn getOverlayPoint(originPoint, overlayRect, pos, offsetX, offsetY);\n}\n\nexport function calculatePosition(\n\torigin: DOMRect,\n\toverlay: DOMRect,\n\tpreferredPositions: ConnectionPositionPair[],\n\toffsetX: number,\n\toffsetY: number\n) {\n\tlet fallbackPoint: OverlayPoint | undefined;\n\tlet fallbackPosition: ConnectionPositionPair | undefined;\n\n\tfor (const pos of preferredPositions) {\n\t\tconst overlayPoint = calculateOverlayPoint(\n\t\t\torigin,\n\t\t\toverlay,\n\t\t\tpos,\n\t\t\toffsetX,\n\t\t\toffsetY\n\t\t);\n\t\tif (overlayPoint.fitsInViewport) {\n\t\t\treturn {\n\t\t\t\tpoint: overlayPoint,\n\t\t\t\tposition: pos,\n\t\t\t\tisFallback: false,\n\t\t\t};\n\t\t} else if (\n\t\t\t!fallbackPoint ||\n\t\t\tfallbackPoint.visibleArea < overlayPoint.visibleArea\n\t\t) {\n\t\t\tfallbackPoint = overlayPoint;\n\t\t\tfallbackPosition = pos;\n\t\t}\n\t}\n\n\treturn {\n\t\tpoint: fallbackPoint,\n\t\tposition: fallbackPosition,\n\t\tisFallback: true,\n\t};\n}\n","/**\n * Gets whether an element is clipped by any of its scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is clipped\n * @docs-private\n */\nexport function isElementClippedByScrolling(\n\telement: DOMRect,\n\tscrollContainers: DOMRect[]\n) {\n\treturn scrollContainers.some((scrollContainerRect) => {\n\t\tconst clippedAbove = element.top < scrollContainerRect.top;\n\t\tconst clippedBelow = element.bottom > scrollContainerRect.bottom;\n\t\tconst clippedLeft = element.left < scrollContainerRect.left;\n\t\tconst clippedRight = element.right > scrollContainerRect.right;\n\n\t\treturn clippedAbove || clippedBelow || clippedLeft || clippedRight;\n\t});\n}\n","import { isElementScrolledOutsideView } from '../is-element-scrolled-outside-view';\n\nexport function isElementOutsideWindow(element: Element): boolean {\n\tconst overlayRect = element.getBoundingClientRect();\n\n\tconst parentRects = [\n\t\t{\n\t\t\twidth: window.innerWidth,\n\t\t\theight: window.innerHeight,\n\t\t\tbottom: window.innerHeight,\n\t\t\tright: window.innerWidth,\n\t\t\ttop: 0,\n\t\t\tleft: 0,\n\t\t},\n\t];\n\n\treturn isElementScrolledOutsideView(overlayRect, parentRects);\n}\n","/**\n * Gets whether an element is scrolled outside of view by any of its parent scrolling containers.\n * @param element Dimensions of the element (from getBoundingClientRect)\n * @param scrollContainers Dimensions of element's scrolling containers (from getBoundingClientRect)\n * @returns Whether the element is scrolled out of view\n * @docs-private\n */\nexport function isElementScrolledOutsideView(\n\telement: DOMRect,\n\tscrollContainers: DOMRect[]\n) {\n\treturn scrollContainers.some((containerBounds) => {\n\t\tconst outsideAbove = element.bottom < containerBounds.top;\n\t\tconst outsideBelow = element.top > containerBounds.bottom;\n\t\tconst outsideLeft = element.right < containerBounds.left;\n\t\tconst outsideRight = element.left > containerBounds.right;\n\n\t\treturn outsideAbove || outsideBelow || outsideLeft || outsideRight;\n\t});\n}\n","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _getPrototypeOf(o);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\nmodule.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nmodule.exports = _toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}\nmodule.exports = _toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(obj);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","/*\n * anime.js v3.2.1\n * (c) 2020 Julian Garnier\n * Released under the MIT license\n * animejs.com\n */\n\n// Defaults\n\nvar defaultInstanceSettings = {\n update: null,\n begin: null,\n loopBegin: null,\n changeBegin: null,\n change: null,\n changeComplete: null,\n loopComplete: null,\n complete: null,\n loop: 1,\n direction: 'normal',\n autoplay: true,\n timelineOffset: 0\n};\n\nvar defaultTweenSettings = {\n duration: 1000,\n delay: 0,\n endDelay: 0,\n easing: 'easeOutElastic(1, .5)',\n round: 0\n};\n\nvar validTransforms = ['translateX', 'translateY', 'translateZ', 'rotate', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'perspective', 'matrix', 'matrix3d'];\n\n// Caching\n\nvar cache = {\n CSS: {},\n springs: {}\n};\n\n// Utils\n\nfunction minMax(val, min, max) {\n return Math.min(Math.max(val, min), max);\n}\n\nfunction stringContains(str, text) {\n return str.indexOf(text) > -1;\n}\n\nfunction applyArguments(func, args) {\n return func.apply(null, args);\n}\n\nvar is = {\n arr: function (a) { return Array.isArray(a); },\n obj: function (a) { return stringContains(Object.prototype.toString.call(a), 'Object'); },\n pth: function (a) { return is.obj(a) && a.hasOwnProperty('totalLength'); },\n svg: function (a) { return a instanceof SVGElement; },\n inp: function (a) { return a instanceof HTMLInputElement; },\n dom: function (a) { return a.nodeType || is.svg(a); },\n str: function (a) { return typeof a === 'string'; },\n fnc: function (a) { return typeof a === 'function'; },\n und: function (a) { return typeof a === 'undefined'; },\n nil: function (a) { return is.und(a) || a === null; },\n hex: function (a) { return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a); },\n rgb: function (a) { return /^rgb/.test(a); },\n hsl: function (a) { return /^hsl/.test(a); },\n col: function (a) { return (is.hex(a) || is.rgb(a) || is.hsl(a)); },\n key: function (a) { return !defaultInstanceSettings.hasOwnProperty(a) && !defaultTweenSettings.hasOwnProperty(a) && a !== 'targets' && a !== 'keyframes'; },\n};\n\n// Easings\n\nfunction parseEasingParameters(string) {\n var match = /\\(([^)]+)\\)/.exec(string);\n return match ? match[1].split(',').map(function (p) { return parseFloat(p); }) : [];\n}\n\n// Spring solver inspired by Webkit Copyright © 2016 Apple Inc. All rights reserved. https://webkit.org/demos/spring/spring.js\n\nfunction spring(string, duration) {\n\n var params = parseEasingParameters(string);\n var mass = minMax(is.und(params[0]) ? 1 : params[0], .1, 100);\n var stiffness = minMax(is.und(params[1]) ? 100 : params[1], .1, 100);\n var damping = minMax(is.und(params[2]) ? 10 : params[2], .1, 100);\n var velocity = minMax(is.und(params[3]) ? 0 : params[3], .1, 100);\n var w0 = Math.sqrt(stiffness / mass);\n var zeta = damping / (2 * Math.sqrt(stiffness * mass));\n var wd = zeta < 1 ? w0 * Math.sqrt(1 - zeta * zeta) : 0;\n var a = 1;\n var b = zeta < 1 ? (zeta * w0 + -velocity) / wd : -velocity + w0;\n\n function solver(t) {\n var progress = duration ? (duration * t) / 1000 : t;\n if (zeta < 1) {\n progress = Math.exp(-progress * zeta * w0) * (a * Math.cos(wd * progress) + b * Math.sin(wd * progress));\n } else {\n progress = (a + b * progress) * Math.exp(-progress * w0);\n }\n if (t === 0 || t === 1) { return t; }\n return 1 - progress;\n }\n\n function getDuration() {\n var cached = cache.springs[string];\n if (cached) { return cached; }\n var frame = 1/6;\n var elapsed = 0;\n var rest = 0;\n while(true) {\n elapsed += frame;\n if (solver(elapsed) === 1) {\n rest++;\n if (rest >= 16) { break; }\n } else {\n rest = 0;\n }\n }\n var duration = elapsed * frame * 1000;\n cache.springs[string] = duration;\n return duration;\n }\n\n return duration ? solver : getDuration;\n\n}\n\n// Basic steps easing implementation https://developer.mozilla.org/fr/docs/Web/CSS/transition-timing-function\n\nfunction steps(steps) {\n if ( steps === void 0 ) steps = 10;\n\n return function (t) { return Math.ceil((minMax(t, 0.000001, 1)) * steps) * (1 / steps); };\n}\n\n// BezierEasing https://github.com/gre/bezier-easing\n\nvar bezier = (function () {\n\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n function A(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1 }\n function B(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1 }\n function C(aA1) { return 3.0 * aA1 }\n\n function calcBezier(aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT }\n function getSlope(aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1) }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) { aB = currentT; } else { aA = currentT; }\n } while (Math.abs(currentX) > 0.0000001 && ++i < 10);\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < 4; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) { return aGuessT; }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n function bezier(mX1, mY1, mX2, mY2) {\n\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { return; }\n var sampleValues = new Float32Array(kSplineTableSize);\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n }\n\n function getTForX(aX) {\n\n var intervalStart = 0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample;\n\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= 0.001) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n\n }\n\n return function (x) {\n if (mX1 === mY1 && mX2 === mY2) { return x; }\n if (x === 0 || x === 1) { return x; }\n return calcBezier(getTForX(x), mY1, mY2);\n }\n\n }\n\n return bezier;\n\n})();\n\nvar penner = (function () {\n\n // Based on jQuery UI's implemenation of easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\n var eases = { linear: function () { return function (t) { return t; }; } };\n\n var functionEasings = {\n Sine: function () { return function (t) { return 1 - Math.cos(t * Math.PI / 2); }; },\n Circ: function () { return function (t) { return 1 - Math.sqrt(1 - t * t); }; },\n Back: function () { return function (t) { return t * t * (3 * t - 2); }; },\n Bounce: function () { return function (t) {\n var pow2, b = 4;\n while (t < (( pow2 = Math.pow(2, --b)) - 1) / 11) {}\n return 1 / Math.pow(4, 3 - b) - 7.5625 * Math.pow(( pow2 * 3 - 2 ) / 22 - t, 2)\n }; },\n Elastic: function (amplitude, period) {\n if ( amplitude === void 0 ) amplitude = 1;\n if ( period === void 0 ) period = .5;\n\n var a = minMax(amplitude, 1, 10);\n var p = minMax(period, .1, 2);\n return function (t) {\n return (t === 0 || t === 1) ? t : \n -a * Math.pow(2, 10 * (t - 1)) * Math.sin((((t - 1) - (p / (Math.PI * 2) * Math.asin(1 / a))) * (Math.PI * 2)) / p);\n }\n }\n };\n\n var baseEasings = ['Quad', 'Cubic', 'Quart', 'Quint', 'Expo'];\n\n baseEasings.forEach(function (name, i) {\n functionEasings[name] = function () { return function (t) { return Math.pow(t, i + 2); }; };\n });\n\n Object.keys(functionEasings).forEach(function (name) {\n var easeIn = functionEasings[name];\n eases['easeIn' + name] = easeIn;\n eases['easeOut' + name] = function (a, b) { return function (t) { return 1 - easeIn(a, b)(1 - t); }; };\n eases['easeInOut' + name] = function (a, b) { return function (t) { return t < 0.5 ? easeIn(a, b)(t * 2) / 2 : \n 1 - easeIn(a, b)(t * -2 + 2) / 2; }; };\n eases['easeOutIn' + name] = function (a, b) { return function (t) { return t < 0.5 ? (1 - easeIn(a, b)(1 - t * 2)) / 2 : \n (easeIn(a, b)(t * 2 - 1) + 1) / 2; }; };\n });\n\n return eases;\n\n})();\n\nfunction parseEasings(easing, duration) {\n if (is.fnc(easing)) { return easing; }\n var name = easing.split('(')[0];\n var ease = penner[name];\n var args = parseEasingParameters(easing);\n switch (name) {\n case 'spring' : return spring(easing, duration);\n case 'cubicBezier' : return applyArguments(bezier, args);\n case 'steps' : return applyArguments(steps, args);\n default : return applyArguments(ease, args);\n }\n}\n\n// Strings\n\nfunction selectString(str) {\n try {\n var nodes = document.querySelectorAll(str);\n return nodes;\n } catch(e) {\n return;\n }\n}\n\n// Arrays\n\nfunction filterArray(arr, callback) {\n var len = arr.length;\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n var result = [];\n for (var i = 0; i < len; i++) {\n if (i in arr) {\n var val = arr[i];\n if (callback.call(thisArg, val, i, arr)) {\n result.push(val);\n }\n }\n }\n return result;\n}\n\nfunction flattenArray(arr) {\n return arr.reduce(function (a, b) { return a.concat(is.arr(b) ? flattenArray(b) : b); }, []);\n}\n\nfunction toArray(o) {\n if (is.arr(o)) { return o; }\n if (is.str(o)) { o = selectString(o) || o; }\n if (o instanceof NodeList || o instanceof HTMLCollection) { return [].slice.call(o); }\n return [o];\n}\n\nfunction arrayContains(arr, val) {\n return arr.some(function (a) { return a === val; });\n}\n\n// Objects\n\nfunction cloneObject(o) {\n var clone = {};\n for (var p in o) { clone[p] = o[p]; }\n return clone;\n}\n\nfunction replaceObjectProps(o1, o2) {\n var o = cloneObject(o1);\n for (var p in o1) { o[p] = o2.hasOwnProperty(p) ? o2[p] : o1[p]; }\n return o;\n}\n\nfunction mergeObjects(o1, o2) {\n var o = cloneObject(o1);\n for (var p in o2) { o[p] = is.und(o1[p]) ? o2[p] : o1[p]; }\n return o;\n}\n\n// Colors\n\nfunction rgbToRgba(rgbValue) {\n var rgb = /rgb\\((\\d+,\\s*[\\d]+,\\s*[\\d]+)\\)/g.exec(rgbValue);\n return rgb ? (\"rgba(\" + (rgb[1]) + \",1)\") : rgbValue;\n}\n\nfunction hexToRgba(hexValue) {\n var rgx = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n var hex = hexValue.replace(rgx, function (m, r, g, b) { return r + r + g + g + b + b; } );\n var rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n var r = parseInt(rgb[1], 16);\n var g = parseInt(rgb[2], 16);\n var b = parseInt(rgb[3], 16);\n return (\"rgba(\" + r + \",\" + g + \",\" + b + \",1)\");\n}\n\nfunction hslToRgba(hslValue) {\n var hsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.exec(hslValue) || /hsla\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*([\\d.]+)\\)/g.exec(hslValue);\n var h = parseInt(hsl[1], 10) / 360;\n var s = parseInt(hsl[2], 10) / 100;\n var l = parseInt(hsl[3], 10) / 100;\n var a = hsl[4] || 1;\n function hue2rgb(p, q, t) {\n if (t < 0) { t += 1; }\n if (t > 1) { t -= 1; }\n if (t < 1/6) { return p + (q - p) * 6 * t; }\n if (t < 1/2) { return q; }\n if (t < 2/3) { return p + (q - p) * (2/3 - t) * 6; }\n return p;\n }\n var r, g, b;\n if (s == 0) {\n r = g = b = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n return (\"rgba(\" + (r * 255) + \",\" + (g * 255) + \",\" + (b * 255) + \",\" + a + \")\");\n}\n\nfunction colorToRgb(val) {\n if (is.rgb(val)) { return rgbToRgba(val); }\n if (is.hex(val)) { return hexToRgba(val); }\n if (is.hsl(val)) { return hslToRgba(val); }\n}\n\n// Units\n\nfunction getUnit(val) {\n var split = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(val);\n if (split) { return split[1]; }\n}\n\nfunction getTransformUnit(propName) {\n if (stringContains(propName, 'translate') || propName === 'perspective') { return 'px'; }\n if (stringContains(propName, 'rotate') || stringContains(propName, 'skew')) { return 'deg'; }\n}\n\n// Values\n\nfunction getFunctionValue(val, animatable) {\n if (!is.fnc(val)) { return val; }\n return val(animatable.target, animatable.id, animatable.total);\n}\n\nfunction getAttribute(el, prop) {\n return el.getAttribute(prop);\n}\n\nfunction convertPxToUnit(el, value, unit) {\n var valueUnit = getUnit(value);\n if (arrayContains([unit, 'deg', 'rad', 'turn'], valueUnit)) { return value; }\n var cached = cache.CSS[value + unit];\n if (!is.und(cached)) { return cached; }\n var baseline = 100;\n var tempEl = document.createElement(el.tagName);\n var parentEl = (el.parentNode && (el.parentNode !== document)) ? el.parentNode : document.body;\n parentEl.appendChild(tempEl);\n tempEl.style.position = 'absolute';\n tempEl.style.width = baseline + unit;\n var factor = baseline / tempEl.offsetWidth;\n parentEl.removeChild(tempEl);\n var convertedUnit = factor * parseFloat(value);\n cache.CSS[value + unit] = convertedUnit;\n return convertedUnit;\n}\n\nfunction getCSSValue(el, prop, unit) {\n if (prop in el.style) {\n var uppercasePropName = prop.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n var value = el.style[prop] || getComputedStyle(el).getPropertyValue(uppercasePropName) || '0';\n return unit ? convertPxToUnit(el, value, unit) : value;\n }\n}\n\nfunction getAnimationType(el, prop) {\n if (is.dom(el) && !is.inp(el) && (!is.nil(getAttribute(el, prop)) || (is.svg(el) && el[prop]))) { return 'attribute'; }\n if (is.dom(el) && arrayContains(validTransforms, prop)) { return 'transform'; }\n if (is.dom(el) && (prop !== 'transform' && getCSSValue(el, prop))) { return 'css'; }\n if (el[prop] != null) { return 'object'; }\n}\n\nfunction getElementTransforms(el) {\n if (!is.dom(el)) { return; }\n var str = el.style.transform || '';\n var reg = /(\\w+)\\(([^)]*)\\)/g;\n var transforms = new Map();\n var m; while (m = reg.exec(str)) { transforms.set(m[1], m[2]); }\n return transforms;\n}\n\nfunction getTransformValue(el, propName, animatable, unit) {\n var defaultVal = stringContains(propName, 'scale') ? 1 : 0 + getTransformUnit(propName);\n var value = getElementTransforms(el).get(propName) || defaultVal;\n if (animatable) {\n animatable.transforms.list.set(propName, value);\n animatable.transforms['last'] = propName;\n }\n return unit ? convertPxToUnit(el, value, unit) : value;\n}\n\nfunction getOriginalTargetValue(target, propName, unit, animatable) {\n switch (getAnimationType(target, propName)) {\n case 'transform': return getTransformValue(target, propName, animatable, unit);\n case 'css': return getCSSValue(target, propName, unit);\n case 'attribute': return getAttribute(target, propName);\n default: return target[propName] || 0;\n }\n}\n\nfunction getRelativeValue(to, from) {\n var operator = /^(\\*=|\\+=|-=)/.exec(to);\n if (!operator) { return to; }\n var u = getUnit(to) || 0;\n var x = parseFloat(from);\n var y = parseFloat(to.replace(operator[0], ''));\n switch (operator[0][0]) {\n case '+': return x + y + u;\n case '-': return x - y + u;\n case '*': return x * y + u;\n }\n}\n\nfunction validateValue(val, unit) {\n if (is.col(val)) { return colorToRgb(val); }\n if (/\\s/g.test(val)) { return val; }\n var originalUnit = getUnit(val);\n var unitLess = originalUnit ? val.substr(0, val.length - originalUnit.length) : val;\n if (unit) { return unitLess + unit; }\n return unitLess;\n}\n\n// getTotalLength() equivalent for circle, rect, polyline, polygon and line shapes\n// adapted from https://gist.github.com/SebLambla/3e0550c496c236709744\n\nfunction getDistance(p1, p2) {\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\n\nfunction getCircleLength(el) {\n return Math.PI * 2 * getAttribute(el, 'r');\n}\n\nfunction getRectLength(el) {\n return (getAttribute(el, 'width') * 2) + (getAttribute(el, 'height') * 2);\n}\n\nfunction getLineLength(el) {\n return getDistance(\n {x: getAttribute(el, 'x1'), y: getAttribute(el, 'y1')}, \n {x: getAttribute(el, 'x2'), y: getAttribute(el, 'y2')}\n );\n}\n\nfunction getPolylineLength(el) {\n var points = el.points;\n var totalLength = 0;\n var previousPos;\n for (var i = 0 ; i < points.numberOfItems; i++) {\n var currentPos = points.getItem(i);\n if (i > 0) { totalLength += getDistance(previousPos, currentPos); }\n previousPos = currentPos;\n }\n return totalLength;\n}\n\nfunction getPolygonLength(el) {\n var points = el.points;\n return getPolylineLength(el) + getDistance(points.getItem(points.numberOfItems - 1), points.getItem(0));\n}\n\n// Path animation\n\nfunction getTotalLength(el) {\n if (el.getTotalLength) { return el.getTotalLength(); }\n switch(el.tagName.toLowerCase()) {\n case 'circle': return getCircleLength(el);\n case 'rect': return getRectLength(el);\n case 'line': return getLineLength(el);\n case 'polyline': return getPolylineLength(el);\n case 'polygon': return getPolygonLength(el);\n }\n}\n\nfunction setDashoffset(el) {\n var pathLength = getTotalLength(el);\n el.setAttribute('stroke-dasharray', pathLength);\n return pathLength;\n}\n\n// Motion path\n\nfunction getParentSvgEl(el) {\n var parentEl = el.parentNode;\n while (is.svg(parentEl)) {\n if (!is.svg(parentEl.parentNode)) { break; }\n parentEl = parentEl.parentNode;\n }\n return parentEl;\n}\n\nfunction getParentSvg(pathEl, svgData) {\n var svg = svgData || {};\n var parentSvgEl = svg.el || getParentSvgEl(pathEl);\n var rect = parentSvgEl.getBoundingClientRect();\n var viewBoxAttr = getAttribute(parentSvgEl, 'viewBox');\n var width = rect.width;\n var height = rect.height;\n var viewBox = svg.viewBox || (viewBoxAttr ? viewBoxAttr.split(' ') : [0, 0, width, height]);\n return {\n el: parentSvgEl,\n viewBox: viewBox,\n x: viewBox[0] / 1,\n y: viewBox[1] / 1,\n w: width,\n h: height,\n vW: viewBox[2],\n vH: viewBox[3]\n }\n}\n\nfunction getPath(path, percent) {\n var pathEl = is.str(path) ? selectString(path)[0] : path;\n var p = percent || 100;\n return function(property) {\n return {\n property: property,\n el: pathEl,\n svg: getParentSvg(pathEl),\n totalLength: getTotalLength(pathEl) * (p / 100)\n }\n }\n}\n\nfunction getPathProgress(path, progress, isPathTargetInsideSVG) {\n function point(offset) {\n if ( offset === void 0 ) offset = 0;\n\n var l = progress + offset >= 1 ? progress + offset : 0;\n return path.el.getPointAtLength(l);\n }\n var svg = getParentSvg(path.el, path.svg);\n var p = point();\n var p0 = point(-1);\n var p1 = point(+1);\n var scaleX = isPathTargetInsideSVG ? 1 : svg.w / svg.vW;\n var scaleY = isPathTargetInsideSVG ? 1 : svg.h / svg.vH;\n switch (path.property) {\n case 'x': return (p.x - svg.x) * scaleX;\n case 'y': return (p.y - svg.y) * scaleY;\n case 'angle': return Math.atan2(p1.y - p0.y, p1.x - p0.x) * 180 / Math.PI;\n }\n}\n\n// Decompose value\n\nfunction decomposeValue(val, unit) {\n // const rgx = /-?\\d*\\.?\\d+/g; // handles basic numbers\n // const rgx = /[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n var rgx = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n var value = validateValue((is.pth(val) ? val.totalLength : val), unit) + '';\n return {\n original: value,\n numbers: value.match(rgx) ? value.match(rgx).map(Number) : [0],\n strings: (is.str(val) || unit) ? value.split(rgx) : []\n }\n}\n\n// Animatables\n\nfunction parseTargets(targets) {\n var targetsArray = targets ? (flattenArray(is.arr(targets) ? targets.map(toArray) : toArray(targets))) : [];\n return filterArray(targetsArray, function (item, pos, self) { return self.indexOf(item) === pos; });\n}\n\nfunction getAnimatables(targets) {\n var parsed = parseTargets(targets);\n return parsed.map(function (t, i) {\n return {target: t, id: i, total: parsed.length, transforms: { list: getElementTransforms(t) } };\n });\n}\n\n// Properties\n\nfunction normalizePropertyTweens(prop, tweenSettings) {\n var settings = cloneObject(tweenSettings);\n // Override duration if easing is a spring\n if (/^spring/.test(settings.easing)) { settings.duration = spring(settings.easing); }\n if (is.arr(prop)) {\n var l = prop.length;\n var isFromTo = (l === 2 && !is.obj(prop[0]));\n if (!isFromTo) {\n // Duration divided by the number of tweens\n if (!is.fnc(tweenSettings.duration)) { settings.duration = tweenSettings.duration / l; }\n } else {\n // Transform [from, to] values shorthand to a valid tween value\n prop = {value: prop};\n }\n }\n var propArray = is.arr(prop) ? prop : [prop];\n return propArray.map(function (v, i) {\n var obj = (is.obj(v) && !is.pth(v)) ? v : {value: v};\n // Default delay value should only be applied to the first tween\n if (is.und(obj.delay)) { obj.delay = !i ? tweenSettings.delay : 0; }\n // Default endDelay value should only be applied to the last tween\n if (is.und(obj.endDelay)) { obj.endDelay = i === propArray.length - 1 ? tweenSettings.endDelay : 0; }\n return obj;\n }).map(function (k) { return mergeObjects(k, settings); });\n}\n\n\nfunction flattenKeyframes(keyframes) {\n var propertyNames = filterArray(flattenArray(keyframes.map(function (key) { return Object.keys(key); })), function (p) { return is.key(p); })\n .reduce(function (a,b) { if (a.indexOf(b) < 0) { a.push(b); } return a; }, []);\n var properties = {};\n var loop = function ( i ) {\n var propName = propertyNames[i];\n properties[propName] = keyframes.map(function (key) {\n var newKey = {};\n for (var p in key) {\n if (is.key(p)) {\n if (p == propName) { newKey.value = key[p]; }\n } else {\n newKey[p] = key[p];\n }\n }\n return newKey;\n });\n };\n\n for (var i = 0; i < propertyNames.length; i++) loop( i );\n return properties;\n}\n\nfunction getProperties(tweenSettings, params) {\n var properties = [];\n var keyframes = params.keyframes;\n if (keyframes) { params = mergeObjects(flattenKeyframes(keyframes), params); }\n for (var p in params) {\n if (is.key(p)) {\n properties.push({\n name: p,\n tweens: normalizePropertyTweens(params[p], tweenSettings)\n });\n }\n }\n return properties;\n}\n\n// Tweens\n\nfunction normalizeTweenValues(tween, animatable) {\n var t = {};\n for (var p in tween) {\n var value = getFunctionValue(tween[p], animatable);\n if (is.arr(value)) {\n value = value.map(function (v) { return getFunctionValue(v, animatable); });\n if (value.length === 1) { value = value[0]; }\n }\n t[p] = value;\n }\n t.duration = parseFloat(t.duration);\n t.delay = parseFloat(t.delay);\n return t;\n}\n\nfunction normalizeTweens(prop, animatable) {\n var previousTween;\n return prop.tweens.map(function (t) {\n var tween = normalizeTweenValues(t, animatable);\n var tweenValue = tween.value;\n var to = is.arr(tweenValue) ? tweenValue[1] : tweenValue;\n var toUnit = getUnit(to);\n var originalValue = getOriginalTargetValue(animatable.target, prop.name, toUnit, animatable);\n var previousValue = previousTween ? previousTween.to.original : originalValue;\n var from = is.arr(tweenValue) ? tweenValue[0] : previousValue;\n var fromUnit = getUnit(from) || getUnit(originalValue);\n var unit = toUnit || fromUnit;\n if (is.und(to)) { to = previousValue; }\n tween.from = decomposeValue(from, unit);\n tween.to = decomposeValue(getRelativeValue(to, from), unit);\n tween.start = previousTween ? previousTween.end : 0;\n tween.end = tween.start + tween.delay + tween.duration + tween.endDelay;\n tween.easing = parseEasings(tween.easing, tween.duration);\n tween.isPath = is.pth(tweenValue);\n tween.isPathTargetInsideSVG = tween.isPath && is.svg(animatable.target);\n tween.isColor = is.col(tween.from.original);\n if (tween.isColor) { tween.round = 1; }\n previousTween = tween;\n return tween;\n });\n}\n\n// Tween progress\n\nvar setProgressValue = {\n css: function (t, p, v) { return t.style[p] = v; },\n attribute: function (t, p, v) { return t.setAttribute(p, v); },\n object: function (t, p, v) { return t[p] = v; },\n transform: function (t, p, v, transforms, manual) {\n transforms.list.set(p, v);\n if (p === transforms.last || manual) {\n var str = '';\n transforms.list.forEach(function (value, prop) { str += prop + \"(\" + value + \") \"; });\n t.style.transform = str;\n }\n }\n};\n\n// Set Value helper\n\nfunction setTargetsValue(targets, properties) {\n var animatables = getAnimatables(targets);\n animatables.forEach(function (animatable) {\n for (var property in properties) {\n var value = getFunctionValue(properties[property], animatable);\n var target = animatable.target;\n var valueUnit = getUnit(value);\n var originalValue = getOriginalTargetValue(target, property, valueUnit, animatable);\n var unit = valueUnit || getUnit(originalValue);\n var to = getRelativeValue(validateValue(value, unit), originalValue);\n var animType = getAnimationType(target, property);\n setProgressValue[animType](target, property, to, animatable.transforms, true);\n }\n });\n}\n\n// Animations\n\nfunction createAnimation(animatable, prop) {\n var animType = getAnimationType(animatable.target, prop.name);\n if (animType) {\n var tweens = normalizeTweens(prop, animatable);\n var lastTween = tweens[tweens.length - 1];\n return {\n type: animType,\n property: prop.name,\n animatable: animatable,\n tweens: tweens,\n duration: lastTween.end,\n delay: tweens[0].delay,\n endDelay: lastTween.endDelay\n }\n }\n}\n\nfunction getAnimations(animatables, properties) {\n return filterArray(flattenArray(animatables.map(function (animatable) {\n return properties.map(function (prop) {\n return createAnimation(animatable, prop);\n });\n })), function (a) { return !is.und(a); });\n}\n\n// Create Instance\n\nfunction getInstanceTimings(animations, tweenSettings) {\n var animLength = animations.length;\n var getTlOffset = function (anim) { return anim.timelineOffset ? anim.timelineOffset : 0; };\n var timings = {};\n timings.duration = animLength ? Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration; })) : tweenSettings.duration;\n timings.delay = animLength ? Math.min.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.delay; })) : tweenSettings.delay;\n timings.endDelay = animLength ? timings.duration - Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration - anim.endDelay; })) : tweenSettings.endDelay;\n return timings;\n}\n\nvar instanceID = 0;\n\nfunction createNewInstance(params) {\n var instanceSettings = replaceObjectProps(defaultInstanceSettings, params);\n var tweenSettings = replaceObjectProps(defaultTweenSettings, params);\n var properties = getProperties(tweenSettings, params);\n var animatables = getAnimatables(params.targets);\n var animations = getAnimations(animatables, properties);\n var timings = getInstanceTimings(animations, tweenSettings);\n var id = instanceID;\n instanceID++;\n return mergeObjects(instanceSettings, {\n id: id,\n children: [],\n animatables: animatables,\n animations: animations,\n duration: timings.duration,\n delay: timings.delay,\n endDelay: timings.endDelay\n });\n}\n\n// Core\n\nvar activeInstances = [];\n\nvar engine = (function () {\n var raf;\n\n function play() {\n if (!raf && (!isDocumentHidden() || !anime.suspendWhenDocumentHidden) && activeInstances.length > 0) {\n raf = requestAnimationFrame(step);\n }\n }\n function step(t) {\n // memo on algorithm issue:\n // dangerous iteration over mutable `activeInstances`\n // (that collection may be updated from within callbacks of `tick`-ed animation instances)\n var activeInstancesLength = activeInstances.length;\n var i = 0;\n while (i < activeInstancesLength) {\n var activeInstance = activeInstances[i];\n if (!activeInstance.paused) {\n activeInstance.tick(t);\n i++;\n } else {\n activeInstances.splice(i, 1);\n activeInstancesLength--;\n }\n }\n raf = i > 0 ? requestAnimationFrame(step) : undefined;\n }\n\n function handleVisibilityChange() {\n if (!anime.suspendWhenDocumentHidden) { return; }\n\n if (isDocumentHidden()) {\n // suspend ticks\n raf = cancelAnimationFrame(raf);\n } else { // is back to active tab\n // first adjust animations to consider the time that ticks were suspended\n activeInstances.forEach(\n function (instance) { return instance ._onDocumentVisibility(); }\n );\n engine();\n }\n }\n if (typeof document !== 'undefined') {\n document.addEventListener('visibilitychange', handleVisibilityChange);\n }\n\n return play;\n})();\n\nfunction isDocumentHidden() {\n return !!document && document.hidden;\n}\n\n// Public Instance\n\nfunction anime(params) {\n if ( params === void 0 ) params = {};\n\n\n var startTime = 0, lastTime = 0, now = 0;\n var children, childrenLength = 0;\n var resolve = null;\n\n function makePromise(instance) {\n var promise = window.Promise && new Promise(function (_resolve) { return resolve = _resolve; });\n instance.finished = promise;\n return promise;\n }\n\n var instance = createNewInstance(params);\n var promise = makePromise(instance);\n\n function toggleInstanceDirection() {\n var direction = instance.direction;\n if (direction !== 'alternate') {\n instance.direction = direction !== 'normal' ? 'normal' : 'reverse';\n }\n instance.reversed = !instance.reversed;\n children.forEach(function (child) { return child.reversed = instance.reversed; });\n }\n\n function adjustTime(time) {\n return instance.reversed ? instance.duration - time : time;\n }\n\n function resetTime() {\n startTime = 0;\n lastTime = adjustTime(instance.currentTime) * (1 / anime.speed);\n }\n\n function seekChild(time, child) {\n if (child) { child.seek(time - child.timelineOffset); }\n }\n\n function syncInstanceChildren(time) {\n if (!instance.reversePlayback) {\n for (var i = 0; i < childrenLength; i++) { seekChild(time, children[i]); }\n } else {\n for (var i$1 = childrenLength; i$1--;) { seekChild(time, children[i$1]); }\n }\n }\n\n function setAnimationsProgress(insTime) {\n var i = 0;\n var animations = instance.animations;\n var animationsLength = animations.length;\n while (i < animationsLength) {\n var anim = animations[i];\n var animatable = anim.animatable;\n var tweens = anim.tweens;\n var tweenLength = tweens.length - 1;\n var tween = tweens[tweenLength];\n // Only check for keyframes if there is more than one tween\n if (tweenLength) { tween = filterArray(tweens, function (t) { return (insTime < t.end); })[0] || tween; }\n var elapsed = minMax(insTime - tween.start - tween.delay, 0, tween.duration) / tween.duration;\n var eased = isNaN(elapsed) ? 1 : tween.easing(elapsed);\n var strings = tween.to.strings;\n var round = tween.round;\n var numbers = [];\n var toNumbersLength = tween.to.numbers.length;\n var progress = (void 0);\n for (var n = 0; n < toNumbersLength; n++) {\n var value = (void 0);\n var toNumber = tween.to.numbers[n];\n var fromNumber = tween.from.numbers[n] || 0;\n if (!tween.isPath) {\n value = fromNumber + (eased * (toNumber - fromNumber));\n } else {\n value = getPathProgress(tween.value, eased * toNumber, tween.isPathTargetInsideSVG);\n }\n if (round) {\n if (!(tween.isColor && n > 2)) {\n value = Math.round(value * round) / round;\n }\n }\n numbers.push(value);\n }\n // Manual Array.reduce for better performances\n var stringsLength = strings.length;\n if (!stringsLength) {\n progress = numbers[0];\n } else {\n progress = strings[0];\n for (var s = 0; s < stringsLength; s++) {\n var a = strings[s];\n var b = strings[s + 1];\n var n$1 = numbers[s];\n if (!isNaN(n$1)) {\n if (!b) {\n progress += n$1 + ' ';\n } else {\n progress += n$1 + b;\n }\n }\n }\n }\n setProgressValue[anim.type](animatable.target, anim.property, progress, animatable.transforms);\n anim.currentValue = progress;\n i++;\n }\n }\n\n function setCallback(cb) {\n if (instance[cb] && !instance.passThrough) { instance[cb](instance); }\n }\n\n function countIteration() {\n if (instance.remaining && instance.remaining !== true) {\n instance.remaining--;\n }\n }\n\n function setInstanceProgress(engineTime) {\n var insDuration = instance.duration;\n var insDelay = instance.delay;\n var insEndDelay = insDuration - instance.endDelay;\n var insTime = adjustTime(engineTime);\n instance.progress = minMax((insTime / insDuration) * 100, 0, 100);\n instance.reversePlayback = insTime < instance.currentTime;\n if (children) { syncInstanceChildren(insTime); }\n if (!instance.began && instance.currentTime > 0) {\n instance.began = true;\n setCallback('begin');\n }\n if (!instance.loopBegan && instance.currentTime > 0) {\n instance.loopBegan = true;\n setCallback('loopBegin');\n }\n if (insTime <= insDelay && instance.currentTime !== 0) {\n setAnimationsProgress(0);\n }\n if ((insTime >= insEndDelay && instance.currentTime !== insDuration) || !insDuration) {\n setAnimationsProgress(insDuration);\n }\n if (insTime > insDelay && insTime < insEndDelay) {\n if (!instance.changeBegan) {\n instance.changeBegan = true;\n instance.changeCompleted = false;\n setCallback('changeBegin');\n }\n setCallback('change');\n setAnimationsProgress(insTime);\n } else {\n if (instance.changeBegan) {\n instance.changeCompleted = true;\n instance.changeBegan = false;\n setCallback('changeComplete');\n }\n }\n instance.currentTime = minMax(insTime, 0, insDuration);\n if (instance.began) { setCallback('update'); }\n if (engineTime >= insDuration) {\n lastTime = 0;\n countIteration();\n if (!instance.remaining) {\n instance.paused = true;\n if (!instance.completed) {\n instance.completed = true;\n setCallback('loopComplete');\n setCallback('complete');\n if (!instance.passThrough && 'Promise' in window) {\n resolve();\n promise = makePromise(instance);\n }\n }\n } else {\n startTime = now;\n setCallback('loopComplete');\n instance.loopBegan = false;\n if (instance.direction === 'alternate') {\n toggleInstanceDirection();\n }\n }\n }\n }\n\n instance.reset = function() {\n var direction = instance.direction;\n instance.passThrough = false;\n instance.currentTime = 0;\n instance.progress = 0;\n instance.paused = true;\n instance.began = false;\n instance.loopBegan = false;\n instance.changeBegan = false;\n instance.completed = false;\n instance.changeCompleted = false;\n instance.reversePlayback = false;\n instance.reversed = direction === 'reverse';\n instance.remaining = instance.loop;\n children = instance.children;\n childrenLength = children.length;\n for (var i = childrenLength; i--;) { instance.children[i].reset(); }\n if (instance.reversed && instance.loop !== true || (direction === 'alternate' && instance.loop === 1)) { instance.remaining++; }\n setAnimationsProgress(instance.reversed ? instance.duration : 0);\n };\n\n // internal method (for engine) to adjust animation timings before restoring engine ticks (rAF)\n instance._onDocumentVisibility = resetTime;\n\n // Set Value helper\n\n instance.set = function(targets, properties) {\n setTargetsValue(targets, properties);\n return instance;\n };\n\n instance.tick = function(t) {\n now = t;\n if (!startTime) { startTime = now; }\n setInstanceProgress((now + (lastTime - startTime)) * anime.speed);\n };\n\n instance.seek = function(time) {\n setInstanceProgress(adjustTime(time));\n };\n\n instance.pause = function() {\n instance.paused = true;\n resetTime();\n };\n\n instance.play = function() {\n if (!instance.paused) { return; }\n if (instance.completed) { instance.reset(); }\n instance.paused = false;\n activeInstances.push(instance);\n resetTime();\n engine();\n };\n\n instance.reverse = function() {\n toggleInstanceDirection();\n instance.completed = instance.reversed ? false : true;\n resetTime();\n };\n\n instance.restart = function() {\n instance.reset();\n instance.play();\n };\n\n instance.remove = function(targets) {\n var targetsArray = parseTargets(targets);\n removeTargetsFromInstance(targetsArray, instance);\n };\n\n instance.reset();\n\n if (instance.autoplay) { instance.play(); }\n\n return instance;\n\n}\n\n// Remove targets from animation\n\nfunction removeTargetsFromAnimations(targetsArray, animations) {\n for (var a = animations.length; a--;) {\n if (arrayContains(targetsArray, animations[a].animatable.target)) {\n animations.splice(a, 1);\n }\n }\n}\n\nfunction removeTargetsFromInstance(targetsArray, instance) {\n var animations = instance.animations;\n var children = instance.children;\n removeTargetsFromAnimations(targetsArray, animations);\n for (var c = children.length; c--;) {\n var child = children[c];\n var childAnimations = child.animations;\n removeTargetsFromAnimations(targetsArray, childAnimations);\n if (!childAnimations.length && !child.children.length) { children.splice(c, 1); }\n }\n if (!animations.length && !children.length) { instance.pause(); }\n}\n\nfunction removeTargetsFromActiveInstances(targets) {\n var targetsArray = parseTargets(targets);\n for (var i = activeInstances.length; i--;) {\n var instance = activeInstances[i];\n removeTargetsFromInstance(targetsArray, instance);\n }\n}\n\n// Stagger helpers\n\nfunction stagger(val, params) {\n if ( params === void 0 ) params = {};\n\n var direction = params.direction || 'normal';\n var easing = params.easing ? parseEasings(params.easing) : null;\n var grid = params.grid;\n var axis = params.axis;\n var fromIndex = params.from || 0;\n var fromFirst = fromIndex === 'first';\n var fromCenter = fromIndex === 'center';\n var fromLast = fromIndex === 'last';\n var isRange = is.arr(val);\n var val1 = isRange ? parseFloat(val[0]) : parseFloat(val);\n var val2 = isRange ? parseFloat(val[1]) : 0;\n var unit = getUnit(isRange ? val[1] : val) || 0;\n var start = params.start || 0 + (isRange ? val1 : 0);\n var values = [];\n var maxValue = 0;\n return function (el, i, t) {\n if (fromFirst) { fromIndex = 0; }\n if (fromCenter) { fromIndex = (t - 1) / 2; }\n if (fromLast) { fromIndex = t - 1; }\n if (!values.length) {\n for (var index = 0; index < t; index++) {\n if (!grid) {\n values.push(Math.abs(fromIndex - index));\n } else {\n var fromX = !fromCenter ? fromIndex%grid[0] : (grid[0]-1)/2;\n var fromY = !fromCenter ? Math.floor(fromIndex/grid[0]) : (grid[1]-1)/2;\n var toX = index%grid[0];\n var toY = Math.floor(index/grid[0]);\n var distanceX = fromX - toX;\n var distanceY = fromY - toY;\n var value = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n if (axis === 'x') { value = -distanceX; }\n if (axis === 'y') { value = -distanceY; }\n values.push(value);\n }\n maxValue = Math.max.apply(Math, values);\n }\n if (easing) { values = values.map(function (val) { return easing(val / maxValue) * maxValue; }); }\n if (direction === 'reverse') { values = values.map(function (val) { return axis ? (val < 0) ? val * -1 : -val : Math.abs(maxValue - val); }); }\n }\n var spacing = isRange ? (val2 - val1) / maxValue : val1;\n return start + (spacing * (Math.round(values[i] * 100) / 100)) + unit;\n }\n}\n\n// Timeline\n\nfunction timeline(params) {\n if ( params === void 0 ) params = {};\n\n var tl = anime(params);\n tl.duration = 0;\n tl.add = function(instanceParams, timelineOffset) {\n var tlIndex = activeInstances.indexOf(tl);\n var children = tl.children;\n if (tlIndex > -1) { activeInstances.splice(tlIndex, 1); }\n function passThrough(ins) { ins.passThrough = true; }\n for (var i = 0; i < children.length; i++) { passThrough(children[i]); }\n var insParams = mergeObjects(instanceParams, replaceObjectProps(defaultTweenSettings, params));\n insParams.targets = insParams.targets || params.targets;\n var tlDuration = tl.duration;\n insParams.autoplay = false;\n insParams.direction = tl.direction;\n insParams.timelineOffset = is.und(timelineOffset) ? tlDuration : getRelativeValue(timelineOffset, tlDuration);\n passThrough(tl);\n tl.seek(insParams.timelineOffset);\n var ins = anime(insParams);\n passThrough(ins);\n children.push(ins);\n var timings = getInstanceTimings(children, params);\n tl.delay = timings.delay;\n tl.endDelay = timings.endDelay;\n tl.duration = timings.duration;\n tl.seek(0);\n tl.reset();\n if (tl.autoplay) { tl.play(); }\n return tl;\n };\n return tl;\n}\n\nanime.version = '3.2.1';\nanime.speed = 1;\n// TODO:#review: naming, documentation\nanime.suspendWhenDocumentHidden = true;\nanime.running = activeInstances;\nanime.remove = removeTargetsFromActiveInstances;\nanime.get = getOriginalTargetValue;\nanime.set = setTargetsValue;\nanime.convertPx = convertPxToUnit;\nanime.path = getPath;\nanime.setDashoffset = setDashoffset;\nanime.stagger = stagger;\nanime.timeline = timeline;\nanime.easing = parseEasings;\nanime.penner = penner;\nanime.random = function (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; };\n\nexport default anime;\n","function e(e,t){for(var o=0;oe.length)&&(t=e.length);for(var o=0,n=new Array(t);o0&&this.registerTriggers.apply(this,t(a)),this.onClick=this.onClick.bind(this),this.onKeydown=this.onKeydown.bind(this)}var i,a,r;return i=o,(a=[{key:\"registerTriggers\",value:function(){for(var e=this,t=arguments.length,o=new Array(t),n=0;n0&&void 0!==arguments[0]?arguments[0]:null;if(this.activeElement=document.activeElement,this.modal.setAttribute(\"aria-hidden\",\"false\"),this.modal.classList.add(this.config.openClass),this.scrollBehaviour(\"disable\"),this.addEventListeners(),this.config.awaitOpenAnimation){var o=function t(){e.modal.removeEventListener(\"animationend\",t,!1),e.setFocusToFirstNode()};this.modal.addEventListener(\"animationend\",o,!1)}else this.setFocusToFirstNode();this.config.onShow(this.modal,this.activeElement,t)}},{key:\"closeModal\",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=this.modal;if(this.modal.setAttribute(\"aria-hidden\",\"true\"),this.removeEventListeners(),this.scrollBehaviour(\"enable\"),this.activeElement&&this.activeElement.focus&&this.activeElement.focus(),this.config.onClose(this.modal,this.activeElement,e),this.config.awaitCloseAnimation){var o=this.config.openClass;this.modal.addEventListener(\"animationend\",(function e(){t.classList.remove(o),t.removeEventListener(\"animationend\",e,!1)}),!1)}else t.classList.remove(this.config.openClass)}},{key:\"closeModalById\",value:function(e){this.modal=document.getElementById(e),this.modal&&this.closeModal()}},{key:\"scrollBehaviour\",value:function(e){if(this.config.disableScroll){var t=document.querySelector(\"body\");switch(e){case\"enable\":Object.assign(t.style,{overflow:\"\"});break;case\"disable\":Object.assign(t.style,{overflow:\"hidden\"})}}}},{key:\"addEventListeners\",value:function(){this.modal.addEventListener(\"touchstart\",this.onClick),this.modal.addEventListener(\"click\",this.onClick),document.addEventListener(\"keydown\",this.onKeydown)}},{key:\"removeEventListeners\",value:function(){this.modal.removeEventListener(\"touchstart\",this.onClick),this.modal.removeEventListener(\"click\",this.onClick),document.removeEventListener(\"keydown\",this.onKeydown)}},{key:\"onClick\",value:function(e){(e.target.hasAttribute(this.config.closeTrigger)||e.target.parentNode.hasAttribute(this.config.closeTrigger))&&(e.preventDefault(),e.stopPropagation(),this.closeModal(e))}},{key:\"onKeydown\",value:function(e){27===e.keyCode&&this.closeModal(e),9===e.keyCode&&this.retainFocus(e)}},{key:\"getFocusableNodes\",value:function(){var e=this.modal.querySelectorAll(n);return Array.apply(void 0,t(e))}},{key:\"setFocusToFirstNode\",value:function(){var e=this;if(!this.config.disableFocus){var t=this.getFocusableNodes();if(0!==t.length){var o=t.filter((function(t){return!t.hasAttribute(e.config.closeTrigger)}));o.length>0&&o[0].focus(),0===o.length&&t[0].focus()}}}},{key:\"retainFocus\",value:function(e){var t=this.getFocusableNodes();if(0!==t.length)if(t=t.filter((function(e){return null!==e.offsetParent})),this.modal.contains(document.activeElement)){var o=t.indexOf(document.activeElement);e.shiftKey&&0===o&&(t[t.length-1].focus(),e.preventDefault()),!e.shiftKey&&t.length>0&&o===t.length-1&&(t[0].focus(),e.preventDefault())}else t[0].focus()}}])&&e(i.prototype,a),r&&e(i,r),o}(),a=null,r=function(e){if(!document.getElementById(e))return console.warn(\"MicroModal: ❗Seems like you have missed %c'\".concat(e,\"'\"),\"background-color: #f8f9fa;color: #50596c;font-weight: bold;\",\"ID somewhere in your code. Refer example below to resolve it.\"),console.warn(\"%cExample:\",\"background-color: #f8f9fa;color: #50596c;font-weight: bold;\",'
')),!1},s=function(e,t){if(function(e){e.length<=0&&(console.warn(\"MicroModal: ❗Please specify at least one %c'micromodal-trigger'\",\"background-color: #f8f9fa;color: #50596c;font-weight: bold;\",\"data attribute.\"),console.warn(\"%cExample:\",\"background-color: #f8f9fa;color: #50596c;font-weight: bold;\",'
'))}(e),!t)return!0;for(var o in t)r(o);return!0},{init:function(e){var o=Object.assign({},{openTrigger:\"data-micromodal-trigger\"},e),n=t(document.querySelectorAll(\"[\".concat(o.openTrigger,\"]\"))),r=function(e,t){var o=[];return e.forEach((function(e){var n=e.attributes[t].value;void 0===o[n]&&(o[n]=[]),o[n].push(e)})),o}(n,o.openTrigger);if(!0!==o.debugMode||!1!==s(n,r))for(var l in r){var c=r[l];o.targetModal=l,o.triggers=t(c),a=new i(o)}},show:function(e,t){var o=t||{};o.targetModal=e,!0===o.debugMode&&!1===r(e)||(a&&a.removeEventListeners(),(a=new i(o)).showModal())},close:function(e){e?a.closeModalById(e):a.closeModal()}});\"undefined\"!=typeof window&&(window.MicroModal=l);export default l;\n","/**!\n * MixItUp v3.3.1\n * A high-performance, dependency-free library for animated filtering, sorting and more\n * Build 94e0fbf6-cd0b-4987-b3c0-14b59b67b8a0\n *\n * @copyright Copyright 2014-2018 KunkaLabs Limited.\n * @author KunkaLabs Limited.\n * @link https://www.kunkalabs.com/mixitup/\n *\n * @license Commercial use requires a commercial license.\n * https://www.kunkalabs.com/mixitup/licenses/\n *\n * Non-commercial use permitted under same terms as CC BY-NC 3.0 license.\n * http://creativecommons.org/licenses/by-nc/3.0/\n */\n\n(function(window) {\n 'use strict';\n\n var mixitup = null,\n h = null;\n\n (function() {\n var VENDORS = ['webkit', 'moz', 'o', 'ms'],\n canary = window.document.createElement('div'),\n i = -1;\n\n // window.requestAnimationFrame\n\n for (i = 0; i < VENDORS.length && !window.requestAnimationFrame; i++) {\n window.requestAnimationFrame = window[VENDORS[i] + 'RequestAnimationFrame'];\n }\n\n // Element.nextElementSibling\n\n if (typeof canary.nextElementSibling === 'undefined') {\n Object.defineProperty(window.Element.prototype, 'nextElementSibling', {\n get: function() {\n var el = this.nextSibling;\n\n while (el) {\n if (el.nodeType === 1) {\n return el;\n }\n\n el = el.nextSibling;\n }\n\n return null;\n }\n });\n }\n\n // Element.matches\n\n (function(ElementPrototype) {\n ElementPrototype.matches =\n ElementPrototype.matches ||\n ElementPrototype.machesSelector ||\n ElementPrototype.mozMatchesSelector ||\n ElementPrototype.msMatchesSelector ||\n ElementPrototype.oMatchesSelector ||\n ElementPrototype.webkitMatchesSelector ||\n function (selector) {\n return Array.prototype.indexOf.call(this.parentElement.querySelectorAll(selector), this) > -1;\n };\n })(window.Element.prototype);\n\n // Object.keys\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys\n\n if (!Object.keys) {\n Object.keys = (function() {\n var hasOwnProperty = Object.prototype.hasOwnProperty,\n hasDontEnumBug = false,\n dontEnums = [],\n dontEnumsLength = -1;\n\n hasDontEnumBug = !({\n toString: null\n })\n .propertyIsEnumerable('toString');\n\n dontEnums = [\n 'toString',\n 'toLocaleString',\n 'valueOf',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'constructor'\n ];\n\n dontEnumsLength = dontEnums.length;\n\n return function(obj) {\n var result = [],\n prop = '',\n i = -1;\n\n if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {\n throw new TypeError('Object.keys called on non-object');\n }\n\n for (prop in obj) {\n if (hasOwnProperty.call(obj, prop)) {\n result.push(prop);\n }\n }\n\n if (hasDontEnumBug) {\n for (i = 0; i < dontEnumsLength; i++) {\n if (hasOwnProperty.call(obj, dontEnums[i])) {\n result.push(dontEnums[i]);\n }\n }\n }\n\n return result;\n };\n }());\n }\n\n // Array.isArray\n // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray\n\n if (!Array.isArray) {\n Array.isArray = function(arg) {\n return Object.prototype.toString.call(arg) === '[object Array]';\n };\n }\n\n // Object.create\n // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/create\n\n if (typeof Object.create !== 'function') {\n Object.create = (function(undefined) {\n var Temp = function() {};\n\n return function (prototype, propertiesObject) {\n if (prototype !== Object(prototype) && prototype !== null) {\n throw TypeError('Argument must be an object, or null');\n }\n\n Temp.prototype = prototype || {};\n\n var result = new Temp();\n\n Temp.prototype = null;\n\n if (propertiesObject !== undefined) {\n Object.defineProperties(result, propertiesObject);\n }\n\n if (prototype === null) {\n /* jshint ignore:start */\n result.__proto__ = null;\n /* jshint ignore:end */\n }\n\n return result;\n };\n })();\n }\n\n // String.prototyoe.trim\n\n if (!String.prototype.trim) {\n String.prototype.trim = function() {\n return this.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n };\n }\n\n // Array.prototype.indexOf\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf\n\n if (!Array.prototype.indexOf) {\n Array.prototype.indexOf = function(searchElement) {\n var n, k, t, len;\n\n if (this === null) {\n throw new TypeError();\n }\n\n t = Object(this);\n\n len = t.length >>> 0;\n\n if (len === 0) {\n return -1;\n }\n\n n = 0;\n\n if (arguments.length > 1) {\n n = Number(arguments[1]);\n\n if (n !== n) {\n n = 0;\n } else if (n !== 0 && n !== Infinity && n !== -Infinity) {\n n = (n > 0 || -1) * Math.floor(Math.abs(n));\n }\n }\n\n if (n >= len) {\n return -1;\n }\n\n for (k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); k < len; k++) {\n if (k in t && t[k] === searchElement) {\n return k;\n }\n }\n\n return -1;\n };\n }\n\n // Function.prototype.bind\n // https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_objects/Function/bind\n\n if (!Function.prototype.bind) {\n Function.prototype.bind = function(oThis) {\n var aArgs, self, FNOP, fBound;\n\n if (typeof this !== 'function') {\n throw new TypeError();\n }\n\n aArgs = Array.prototype.slice.call(arguments, 1);\n\n self = this;\n\n FNOP = function() {};\n\n fBound = function() {\n return self.apply(this instanceof FNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments)));\n };\n\n if (this.prototype) {\n FNOP.prototype = this.prototype;\n }\n\n fBound.prototype = new FNOP();\n\n return fBound;\n };\n }\n\n // Element.prototype.dispatchEvent\n\n if (!window.Element.prototype.dispatchEvent) {\n window.Element.prototype.dispatchEvent = function(event) {\n try {\n return this.fireEvent('on' + event.type, event);\n } catch (err) {}\n };\n }\n })();\n\n /**\n * The `mixitup()` \"factory\" function creates and returns individual instances\n * of MixItUp, known as \"mixers\", on which API methods can be called.\n *\n * When loading MixItUp via a script tag, the factory function is accessed\n * via the global variable `mixitup`. When using a module loading\n * system (e.g. ES2015, CommonJS, RequireJS), the factory function is\n * exported into your module when you require the MixItUp library.\n *\n * @example\n * mixitup(container [,config] [,foreignDoc])\n *\n * @example Example 1: Creating a mixer instance with an element reference\n * var containerEl = document.querySelector('.container');\n *\n * var mixer = mixitup(containerEl);\n *\n * @example Example 2: Creating a mixer instance with a selector string\n * var mixer = mixitup('.container');\n *\n * @example Example 3: Passing a configuration object\n * var mixer = mixitup(containerEl, {\n * animation: {\n * effects: 'fade scale(0.5)'\n * }\n * });\n *\n * @example Example 4: Passing an iframe reference\n * var mixer = mixitup(containerEl, config, foreignDocument);\n *\n * @global\n * @namespace\n * @public\n * @kind function\n * @since 3.0.0\n * @param {(Element|string)} container\n * A DOM element or selector string representing the container(s) on which to instantiate MixItUp.\n * @param {object} [config]\n * An optional \"configuration object\" used to customize the behavior of the MixItUp instance.\n * @param {object} [foreignDoc]\n * An optional reference to a `document`, which can be used to control a MixItUp instance in an iframe.\n * @return {mixitup.Mixer}\n * A \"mixer\" object holding the MixItUp instance.\n */\n\n mixitup = function(container, config, foreignDoc) {\n var el = null,\n returnCollection = false,\n instance = null,\n facade = null,\n doc = null,\n output = null,\n instances = [],\n id = '',\n elements = [],\n i = -1;\n\n doc = foreignDoc || window.document;\n\n if (returnCollection = arguments[3]) {\n // A non-documented 4th paramater enabling control of multiple instances\n\n returnCollection = typeof returnCollection === 'boolean';\n }\n\n if (typeof container === 'string') {\n elements = doc.querySelectorAll(container);\n } else if (container && typeof container === 'object' && h.isElement(container, doc)) {\n elements = [container];\n } else if (container && typeof container === 'object' && container.length) {\n // Although not documented, the container may also be an array-like list of\n // elements such as a NodeList or jQuery collection, is returnCollection is true\n\n elements = container;\n } else {\n throw new Error(mixitup.messages.errorFactoryInvalidContainer());\n }\n\n if (elements.length < 1) {\n throw new Error(mixitup.messages.errorFactoryContainerNotFound());\n }\n\n for (i = 0; el = elements[i]; i++) {\n if (i > 0 && !returnCollection) break;\n\n if (!el.id) {\n id = 'MixItUp' + h.randomHex();\n\n el.id = id;\n } else {\n id = el.id;\n }\n\n if (mixitup.instances[id] instanceof mixitup.Mixer) {\n instance = mixitup.instances[id];\n\n if (!config || (config && config.debug && config.debug.showWarnings !== false)) {\n console.warn(mixitup.messages.warningFactoryPreexistingInstance());\n }\n } else {\n instance = new mixitup.Mixer();\n\n instance.attach(el, doc, id, config);\n\n mixitup.instances[id] = instance;\n }\n\n facade = new mixitup.Facade(instance);\n\n if (config && config.debug && config.debug.enable) {\n instances.push(instance);\n } else {\n instances.push(facade);\n }\n }\n\n if (returnCollection) {\n output = new mixitup.Collection(instances);\n } else {\n // Return the first instance regardless\n\n output = instances[0];\n }\n\n return output;\n };\n\n /**\n * The `.use()` static method is used to extend the functionality of mixitup with compatible\n * extensions and libraries in an environment with modular scoping e.g. ES2015, CommonJS, or RequireJS.\n *\n * You need only call the `.use()` function once per project, per extension, as module loaders\n * will cache a single reference to MixItUp inclusive of all changes made.\n *\n * @example\n * mixitup.use(extension)\n *\n * @example Example 1: Extending MixItUp with the Pagination Extension\n *\n * import mixitup from 'mixitup';\n * import mixitupPagination from 'mixitup-pagination';\n *\n * mixitup.use(mixitupPagination);\n *\n * // All mixers created by the factory function in all modules will now\n * // have pagination functionality\n *\n * var mixer = mixitup('.container');\n *\n * @public\n * @name use\n * @memberof mixitup\n * @kind function\n * @static\n * @since 3.0.0\n * @param {*} extension A reference to the extension or library to be used.\n * @return {void}\n */\n\n mixitup.use = function(extension) {\n mixitup.Base.prototype.callActions.call(mixitup, 'beforeUse', arguments);\n\n // Call the extension's factory function, passing\n // the mixitup factory as a paramater\n\n if (typeof extension === 'function' && extension.TYPE === 'mixitup-extension') {\n // Mixitup extension\n\n if (typeof mixitup.extensions[extension.NAME] === 'undefined') {\n extension(mixitup);\n\n mixitup.extensions[extension.NAME] = extension;\n }\n } else if (extension.fn && extension.fn.jquery) {\n // jQuery\n\n mixitup.libraries.$ = extension;\n }\n\n mixitup.Base.prototype.callActions.call(mixitup, 'afterUse', arguments);\n };\n\n mixitup.instances = {};\n mixitup.extensions = {};\n mixitup.libraries = {};\n\n /**\n * @private\n */\n\n h = {\n\n /**\n * @private\n * @param {HTMLElement} el\n * @param {string} cls\n * @return {boolean}\n */\n\n hasClass: function(el, cls) {\n return !!el.className.match(new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)'));\n },\n\n /**\n * @private\n * @param {HTMLElement} el\n * @param {string} cls\n * @return {void}\n */\n\n addClass: function(el, cls) {\n if (!this.hasClass(el, cls)) el.className += el.className ? ' ' + cls : cls;\n },\n\n /**\n * @private\n * @param {HTMLElement} el\n * @param {string} cls\n * @return {void}\n */\n\n removeClass: function(el, cls) {\n if (this.hasClass(el, cls)) {\n var reg = new RegExp('(\\\\s|^)' + cls + '(\\\\s|$)');\n\n el.className = el.className.replace(reg, ' ').trim();\n }\n },\n\n /**\n * Merges the properties of the source object onto the\n * target object. Alters the target object.\n *\n * @private\n * @param {object} destination\n * @param {object} source\n * @param {boolean} [deep=false]\n * @param {boolean} [handleErrors=false]\n * @return {void}\n */\n\n extend: function(destination, source, deep, handleErrors) {\n var sourceKeys = [],\n key = '',\n i = -1;\n\n deep = deep || false;\n handleErrors = handleErrors || false;\n\n try {\n if (Array.isArray(source)) {\n for (i = 0; i < source.length; i++) {\n sourceKeys.push(i);\n }\n } else if (source) {\n sourceKeys = Object.keys(source);\n }\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n\n if (!deep || typeof source[key] !== 'object' || this.isElement(source[key])) {\n // All non-object properties, or all properties if shallow extend\n\n destination[key] = source[key];\n } else if (Array.isArray(source[key])) {\n // Arrays\n\n if (!destination[key]) {\n destination[key] = [];\n }\n\n this.extend(destination[key], source[key], deep, handleErrors);\n } else {\n // Objects\n\n if (!destination[key]) {\n destination[key] = {};\n }\n\n this.extend(destination[key], source[key], deep, handleErrors);\n }\n }\n } catch(err) {\n if (handleErrors) {\n this.handleExtendError(err, destination);\n } else {\n throw err;\n }\n }\n\n return destination;\n },\n\n /**\n * @private\n * @param {Error} err\n * @param {object} destination\n * @return {void}\n */\n\n handleExtendError: function(err, destination) {\n var re = /property \"?(\\w*)\"?[,:] object/i,\n matches = null,\n erroneous = '',\n message = '',\n suggestion = '',\n probableMatch = '',\n key = '',\n mostMatchingChars = -1,\n i = -1;\n\n if (err instanceof TypeError && (matches = re.exec(err.message))) {\n erroneous = matches[1];\n\n for (key in destination) {\n i = 0;\n\n while (i < erroneous.length && erroneous.charAt(i) === key.charAt(i)) {\n i++;\n }\n\n if (i > mostMatchingChars) {\n mostMatchingChars = i;\n probableMatch = key;\n }\n }\n\n if (mostMatchingChars > 1) {\n suggestion = mixitup.messages.errorConfigInvalidPropertySuggestion({\n probableMatch: probableMatch\n });\n }\n\n message = mixitup.messages.errorConfigInvalidProperty({\n erroneous: erroneous,\n suggestion: suggestion\n });\n\n throw new TypeError(message);\n }\n\n throw err;\n },\n\n /**\n * @private\n * @param {string} str\n * @return {function}\n */\n\n template: function(str) {\n var re = /\\${([\\w]*)}/g,\n dynamics = {},\n matches = null;\n\n while ((matches = re.exec(str))) {\n dynamics[matches[1]] = new RegExp('\\\\${' + matches[1] + '}', 'g');\n }\n\n return function(data) {\n var key = '',\n output = str;\n\n data = data || {};\n\n for (key in dynamics) {\n output = output.replace(dynamics[key], typeof data[key] !== 'undefined' ? data[key] : '');\n }\n\n return output;\n };\n },\n\n /**\n * @private\n * @param {HTMLElement} el\n * @param {string} type\n * @param {function} fn\n * @param {boolean} useCapture\n * @return {void}\n */\n\n on: function(el, type, fn, useCapture) {\n if (!el) return;\n\n if (el.addEventListener) {\n el.addEventListener(type, fn, useCapture);\n } else if (el.attachEvent) {\n el['e' + type + fn] = fn;\n\n el[type + fn] = function() {\n el['e' + type + fn](window.event);\n };\n\n el.attachEvent('on' + type, el[type + fn]);\n }\n },\n\n /**\n * @private\n * @param {HTMLElement} el\n * @param {string} type\n * @param {function} fn\n * @return {void}\n */\n\n off: function(el, type, fn) {\n if (!el) return;\n\n if (el.removeEventListener) {\n el.removeEventListener(type, fn, false);\n } else if (el.detachEvent) {\n el.detachEvent('on' + type, el[type + fn]);\n el[type + fn] = null;\n }\n },\n\n /**\n * @private\n * @param {string} eventType\n * @param {object} detail\n * @param {Document} [doc]\n * @return {CustomEvent}\n */\n\n getCustomEvent: function(eventType, detail, doc) {\n var event = null;\n\n doc = doc || window.document;\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(eventType, {\n detail: detail,\n bubbles: true,\n cancelable: true\n });\n } else if (typeof doc.createEvent === 'function') {\n event = doc.createEvent('CustomEvent');\n event.initCustomEvent(eventType, true, true, detail);\n } else {\n event = doc.createEventObject(),\n event.type = eventType;\n\n event.returnValue = false;\n event.cancelBubble = false;\n event.detail = detail;\n }\n\n return event;\n },\n\n /**\n * @private\n * @param {Event} e\n * @return {Event}\n */\n\n getOriginalEvent: function(e) {\n if (e.touches && e.touches.length) {\n return e.touches[0];\n } else if (e.changedTouches && e.changedTouches.length) {\n return e.changedTouches[0];\n } else {\n return e;\n }\n },\n\n /**\n * @private\n * @param {HTMLElement} el\n * @param {string} selector\n * @return {Number}\n */\n\n index: function(el, selector) {\n var i = 0;\n\n while ((el = el.previousElementSibling) !== null) {\n if (!selector || el.matches(selector)) {\n ++i;\n }\n }\n\n return i;\n },\n\n /**\n * Converts a dash or snake-case string to camel case.\n *\n * @private\n * @param {string} str\n * @param {boolean} [isPascal]\n * @return {string}\n */\n\n camelCase: function(str) {\n return str.toLowerCase().replace(/([_-][a-z])/g, function($1) {\n return $1.toUpperCase().replace(/[_-]/, '');\n });\n },\n\n /**\n * Converts a dash or snake-case string to pascal case.\n *\n * @private\n * @param {string} str\n * @param {boolean} [isPascal]\n * @return {string}\n */\n\n pascalCase: function(str) {\n return (str = this.camelCase(str)).charAt(0).toUpperCase() + str.slice(1);\n },\n\n /**\n * Converts a camel or pascal-case string to dash case.\n *\n * @private\n * @param {string} str\n * @return {string}\n */\n\n dashCase: function(str) {\n return str.replace(/([A-Z])/g, '-$1').replace(/^-/, '').toLowerCase();\n },\n\n /**\n * @private\n * @param {HTMLElement} el\n * @param {HTMLHtmlElement} [doc]\n * @return {boolean}\n */\n\n isElement: function(el, doc) {\n doc = doc || window.document;\n\n if (\n window.HTMLElement &&\n el instanceof window.HTMLElement\n ) {\n return true;\n } else if (\n doc.defaultView &&\n doc.defaultView.HTMLElement &&\n el instanceof doc.defaultView.HTMLElement\n ) {\n return true;\n } else {\n return (\n el !== null &&\n el.nodeType === 1 &&\n typeof el.nodeName === 'string'\n );\n }\n },\n\n /**\n * @private\n * @param {string} htmlString\n * @param {HTMLHtmlElement} [doc]\n * @return {DocumentFragment}\n */\n\n createElement: function(htmlString, doc) {\n var frag = null,\n temp = null;\n\n doc = doc || window.document;\n\n frag = doc.createDocumentFragment();\n temp = doc.createElement('div');\n\n temp.innerHTML = htmlString.trim();\n\n while (temp.firstChild) {\n frag.appendChild(temp.firstChild);\n }\n\n return frag;\n },\n\n /**\n * @private\n * @param {Node} node\n * @return {void}\n */\n\n removeWhitespace: function(node) {\n var deleting;\n\n while (node && node.nodeName === '#text') {\n deleting = node;\n\n node = node.previousSibling;\n\n deleting.parentElement && deleting.parentElement.removeChild(deleting);\n }\n },\n\n /**\n * @private\n * @param {Array<*>} a\n * @param {Array<*>} b\n * @return {boolean}\n */\n\n isEqualArray: function(a, b) {\n var i = a.length;\n\n if (i !== b.length) return false;\n\n while (i--) {\n if (a[i] !== b[i]) return false;\n }\n\n return true;\n },\n\n /**\n * @private\n * @param {object} a\n * @param {object} b\n * @return {boolean}\n */\n\n deepEquals: function(a, b) {\n var key;\n\n if (typeof a === 'object' && a && typeof b === 'object' && b) {\n if (Object.keys(a).length !== Object.keys(b).length) return false;\n\n for (key in a) {\n if (!b.hasOwnProperty(key) || !this.deepEquals(a[key], b[key])) return false;\n }\n } else if (a !== b) {\n return false;\n }\n\n return true;\n },\n\n /**\n * @private\n * @param {Array<*>} oldArray\n * @return {Array<*>}\n */\n\n arrayShuffle: function(oldArray) {\n var newArray = oldArray.slice(),\n len = newArray.length,\n i = len,\n p = -1,\n t = [];\n\n while (i--) {\n p = ~~(Math.random() * len);\n t = newArray[i];\n\n newArray[i] = newArray[p];\n newArray[p] = t;\n }\n\n return newArray;\n },\n\n /**\n * @private\n * @param {object} list\n */\n\n arrayFromList: function(list) {\n var output, i;\n\n try {\n return Array.prototype.slice.call(list);\n } catch(err) {\n output = [];\n\n for (i = 0; i < list.length; i++) {\n output.push(list[i]);\n }\n\n return output;\n }\n },\n\n /**\n * @private\n * @param {function} func\n * @param {Number} wait\n * @param {boolean} immediate\n * @return {function}\n */\n\n debounce: function(func, wait, immediate) {\n var timeout;\n\n return function() {\n var self = this,\n args = arguments,\n callNow = immediate && !timeout,\n later = null;\n\n later = function() {\n timeout = null;\n\n if (!immediate) {\n func.apply(self, args);\n }\n };\n\n clearTimeout(timeout);\n\n timeout = setTimeout(later, wait);\n\n if (callNow) func.apply(self, args);\n };\n },\n\n /**\n * @private\n * @param {HTMLElement} element\n * @return {object}\n */\n\n position: function(element) {\n var xPosition = 0,\n yPosition = 0,\n offsetParent = element;\n\n while (element) {\n xPosition -= element.scrollLeft;\n yPosition -= element.scrollTop;\n\n if (element === offsetParent) {\n xPosition += element.offsetLeft;\n yPosition += element.offsetTop;\n\n offsetParent = element.offsetParent;\n }\n\n element = element.parentElement;\n }\n\n return {\n x: xPosition,\n y: yPosition\n };\n },\n\n /**\n * @private\n * @param {object} node1\n * @param {object} node2\n * @return {Number}\n */\n\n getHypotenuse: function(node1, node2) {\n var distanceX = node1.x - node2.x,\n distanceY = node1.y - node2.y;\n\n distanceX = distanceX < 0 ? distanceX * -1 : distanceX,\n distanceY = distanceY < 0 ? distanceY * -1 : distanceY;\n\n return Math.sqrt(Math.pow(distanceX, 2) + Math.pow(distanceY, 2));\n },\n\n /**\n * Calcuates the area of intersection between two rectangles and expresses it as\n * a ratio in comparison to the area of the first rectangle.\n *\n * @private\n * @param {Rect} box1\n * @param {Rect} box2\n * @return {number}\n */\n\n getIntersectionRatio: function(box1, box2) {\n var controlArea = box1.width * box1.height,\n intersectionX = -1,\n intersectionY = -1,\n intersectionArea = -1,\n ratio = -1;\n\n intersectionX =\n Math.max(0, Math.min(box1.left + box1.width, box2.left + box2.width) - Math.max(box1.left, box2.left));\n\n intersectionY =\n Math.max(0, Math.min(box1.top + box1.height, box2.top + box2.height) - Math.max(box1.top, box2.top));\n\n intersectionArea = intersectionY * intersectionX;\n\n ratio = intersectionArea / controlArea;\n\n return ratio;\n },\n\n /**\n * @private\n * @param {object} el\n * @param {string} selector\n * @param {boolean} [includeSelf]\n * @param {HTMLHtmlElement} [doc]\n * @return {Element|null}\n */\n\n closestParent: function(el, selector, includeSelf, doc) {\n var parent = el.parentNode;\n\n doc = doc || window.document;\n\n if (includeSelf && el.matches(selector)) {\n return el;\n }\n\n while (parent && parent != doc.body) {\n if (parent.matches && parent.matches(selector)) {\n return parent;\n } else if (parent.parentNode) {\n parent = parent.parentNode;\n } else {\n return null;\n }\n }\n\n return null;\n },\n\n /**\n * @private\n * @param {HTMLElement} el\n * @param {string} selector\n * @param {HTMLHtmlElement} [doc]\n * @return {NodeList}\n */\n\n children: function(el, selector, doc) {\n var children = [],\n tempId = '';\n\n doc = doc || window.doc;\n\n if (el) {\n if (!el.id) {\n tempId = 'Temp' + this.randomHexKey();\n\n el.id = tempId;\n }\n\n children = doc.querySelectorAll('#' + el.id + ' > ' + selector);\n\n if (tempId) {\n el.removeAttribute('id');\n }\n }\n\n return children;\n },\n\n /**\n * Creates a clone of a provided array, with any empty strings removed.\n *\n * @private\n * @param {Array<*>} originalArray\n * @return {Array<*>}\n */\n\n clean: function(originalArray) {\n var cleanArray = [],\n i = -1;\n\n for (i = 0; i < originalArray.length; i++) {\n if (originalArray[i] !== '') {\n cleanArray.push(originalArray[i]);\n }\n }\n\n return cleanArray;\n },\n\n /**\n * Abstracts an ES6 promise into a q-like deferred interface for storage and deferred resolution.\n *\n * @private\n * @param {object} libraries\n * @return {h.Deferred}\n */\n\n defer: function(libraries) {\n var deferred = null,\n promiseWrapper = null,\n $ = null;\n\n promiseWrapper = new this.Deferred();\n\n if (mixitup.features.has.promises) {\n // ES6 native promise or polyfill\n\n promiseWrapper.promise = new Promise(function(resolve, reject) {\n promiseWrapper.resolve = resolve;\n promiseWrapper.reject = reject;\n });\n } else if (($ = (window.jQuery || libraries.$)) && typeof $.Deferred === 'function') {\n // jQuery\n\n deferred = $.Deferred();\n\n promiseWrapper.promise = deferred.promise();\n promiseWrapper.resolve = deferred.resolve;\n promiseWrapper.reject = deferred.reject;\n } else if (window.console) {\n // No implementation\n\n console.warn(mixitup.messages.warningNoPromiseImplementation());\n }\n\n return promiseWrapper;\n },\n\n /**\n * @private\n * @param {Array} tasks\n * @param {object} libraries\n * @return {Promise}\n */\n\n all: function(tasks, libraries) {\n var $ = null;\n\n if (mixitup.features.has.promises) {\n return Promise.all(tasks);\n } else if (($ = (window.jQuery || libraries.$)) && typeof $.when === 'function') {\n return $.when.apply($, tasks)\n .done(function() {\n // jQuery when returns spread arguments rather than an array or resolutions\n\n return arguments;\n });\n }\n\n // No implementation\n\n if (window.console) {\n console.warn(mixitup.messages.warningNoPromiseImplementation());\n }\n\n return [];\n },\n\n /**\n * @private\n * @param {HTMLElement} el\n * @param {string} property\n * @param {Array} vendors\n * @return {string}\n */\n\n getPrefix: function(el, property, vendors) {\n var i = -1,\n prefix = '';\n\n if (h.dashCase(property) in el.style) return '';\n\n for (i = 0; prefix = vendors[i]; i++) {\n if (prefix + property in el.style) {\n return prefix.toLowerCase();\n }\n }\n\n return 'unsupported';\n },\n\n /**\n * @private\n * @return {string}\n */\n\n randomHex: function() {\n return ('00000' + (Math.random() * 16777216 << 0).toString(16)).substr(-6).toUpperCase();\n },\n\n /**\n * @private\n * @param {HTMLDocument} [doc]\n * @return {object}\n */\n\n getDocumentState: function(doc) {\n doc = typeof doc.body === 'object' ? doc : window.document;\n\n return {\n scrollTop: window.pageYOffset,\n scrollLeft: window.pageXOffset,\n docHeight: doc.documentElement.scrollHeight,\n docWidth: doc.documentElement.scrollWidth,\n viewportHeight: doc.documentElement.clientHeight,\n viewportWidth: doc.documentElement.clientWidth\n };\n },\n\n /**\n * @private\n * @param {object} obj\n * @param {function} fn\n * @return {function}\n */\n\n bind: function(obj, fn) {\n return function() {\n return fn.apply(obj, arguments);\n };\n },\n\n /**\n * @private\n * @param {HTMLElement} el\n * @return {boolean}\n */\n\n isVisible: function(el) {\n var styles = null;\n\n if (el.offsetParent) return true;\n\n styles = window.getComputedStyle(el);\n\n if (\n styles.position === 'fixed' &&\n styles.visibility !== 'hidden' &&\n styles.opacity !== '0'\n ) {\n // Fixed elements report no offsetParent,\n // but may still be invisible\n\n return true;\n }\n\n return false;\n },\n\n /**\n * @private\n * @param {object} obj\n */\n\n seal: function(obj) {\n if (typeof Object.seal === 'function') {\n Object.seal(obj);\n }\n },\n\n /**\n * @private\n * @param {object} obj\n */\n\n freeze: function(obj) {\n if (typeof Object.freeze === 'function') {\n Object.freeze(obj);\n }\n },\n\n /**\n * @private\n * @param {string} control\n * @param {string} specimen\n * @return {boolean}\n */\n\n compareVersions: function(control, specimen) {\n var controlParts = control.split('.'),\n specimenParts = specimen.split('.'),\n controlPart = -1,\n specimenPart = -1,\n i = -1;\n\n for (i = 0; i < controlParts.length; i++) {\n controlPart = parseInt(controlParts[i].replace(/[^\\d.]/g, ''));\n specimenPart = parseInt(specimenParts[i].replace(/[^\\d.]/g, '') || 0);\n\n if (specimenPart < controlPart) {\n return false;\n } else if (specimenPart > controlPart) {\n return true;\n }\n }\n\n return true;\n },\n\n /**\n * @private\n * @constructor\n */\n\n Deferred: function() {\n this.promise = null;\n this.resolve = null;\n this.reject = null;\n this.id = h.randomHex();\n },\n\n /**\n * @private\n * @param {object} obj\n * @return {boolean}\n */\n\n isEmptyObject: function(obj) {\n var key = '';\n\n if (typeof Object.keys === 'function') {\n return Object.keys(obj).length === 0;\n }\n\n for (key in obj) {\n if (obj.hasOwnProperty(key)) {\n return false;\n }\n }\n\n return true;\n },\n\n /**\n * @param {mixitup.Config.ClassNames} classNames\n * @param {string} elementName\n * @param {string} [modifier]\n * @return {string}\n */\n\n getClassname: function(classNames, elementName, modifier) {\n var classname = '';\n\n classname += classNames.block;\n\n if (classname.length) {\n classname += classNames.delineatorElement;\n }\n\n classname += classNames['element' + this.pascalCase(elementName)];\n\n if (!modifier) return classname;\n\n if (classname.length) {\n classname += classNames.delineatorModifier;\n }\n\n classname += modifier;\n\n return classname;\n },\n\n /**\n * Returns the value of a property on a given object via its string key.\n *\n * @param {object} obj\n * @param {string} stringKey\n * @return {*} value\n */\n\n getProperty: function(obj, stringKey) {\n var parts = stringKey.split('.'),\n returnCurrent = null,\n current = '',\n i = 0;\n\n if (!stringKey) {\n return obj;\n }\n\n returnCurrent = function(obj) {\n if (!obj) {\n return null;\n } else {\n return obj[current];\n }\n };\n\n while (i < parts.length) {\n current = parts[i];\n\n obj = returnCurrent(obj);\n\n i++;\n }\n\n if (typeof obj !== 'undefined') {\n return obj;\n } else {\n return null;\n }\n }\n };\n\n mixitup.h = h;\n\n /**\n * The Base class adds instance methods to all other extensible MixItUp classes,\n * enabling the calling of any registered hooks.\n *\n * @constructor\n * @namespace\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.Base = function() {};\n\n mixitup.Base.prototype = {\n constructor: mixitup.Base,\n\n /**\n * Calls any registered hooks for the provided action.\n *\n * @memberof mixitup.Base\n * @private\n * @instance\n * @since 2.0.0\n * @param {string} actionName\n * @param {Array<*>} args\n * @return {void}\n */\n\n callActions: function(actionName, args) {\n var self = this,\n hooks = self.constructor.actions[actionName],\n extensionName = '';\n\n if (!hooks || h.isEmptyObject(hooks)) return;\n\n for (extensionName in hooks) {\n hooks[extensionName].apply(self, args);\n }\n },\n\n /**\n * Calls any registered hooks for the provided filter.\n *\n * @memberof mixitup.Base\n * @private\n * @instance\n * @since 2.0.0\n * @param {string} filterName\n * @param {*} input\n * @param {Array<*>} args\n * @return {*}\n */\n\n callFilters: function(filterName, input, args) {\n var self = this,\n hooks = self.constructor.filters[filterName],\n output = input,\n extensionName = '';\n\n if (!hooks || h.isEmptyObject(hooks)) return output;\n\n args = args || [];\n\n for (extensionName in hooks) {\n args = h.arrayFromList(args);\n\n args.unshift(output);\n\n output = hooks[extensionName].apply(self, args);\n }\n\n return output;\n }\n };\n\n /**\n * The BaseStatic class holds a set of static methods which are then added to all other\n * extensible MixItUp classes as a means of integrating extensions via the addition of new\n * methods and/or actions and hooks.\n *\n * @constructor\n * @namespace\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.BaseStatic = function() {\n this.actions = {};\n this.filters = {};\n\n /**\n * Performs a shallow extend on the class's prototype, adding one or more new members to\n * the class in a single operation.\n *\n * @memberof mixitup.BaseStatic\n * @public\n * @static\n * @since 2.1.0\n * @param {object} extension\n * @return {void}\n */\n\n this.extend = function(extension) {\n h.extend(this.prototype, extension);\n };\n\n /**\n * Registers a function to be called on the action hook of the provided name.\n *\n * @memberof mixitup.BaseStatic\n * @public\n * @static\n * @since 2.1.0\n * @param {string} hookName\n * @param {string} extensionName\n * @param {function} func\n * @return {void}\n */\n\n this.registerAction = function(hookName, extensionName, func) {\n (this.actions[hookName] = this.actions[hookName] || {})[extensionName] = func;\n };\n\n /**\n * Registers a function to be called on the filter of the provided name.\n *\n * @memberof mixitup.BaseStatic\n * @public\n * @static\n * @since 2.1.0\n * @param {string} hookName\n * @param {string} extensionName\n * @param {function} func\n * @return {void}\n */\n\n this.registerFilter = function(hookName, extensionName, func) {\n (this.filters[hookName] = this.filters[hookName] || {})[extensionName] = func;\n };\n };\n\n /**\n * The `mixitup.Features` class performs all feature and CSS prefix detection\n * neccessary for MixItUp to function correctly, as well as storing various\n * string and array constants. All feature decection is on evaluation of the\n * library and stored in a singleton instance for use by other internal classes.\n *\n * @constructor\n * @namespace\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.Features = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.boxSizingPrefix = '';\n this.transformPrefix = '';\n this.transitionPrefix = '';\n\n this.boxSizingPrefix = '';\n this.transformProp = '';\n this.transformRule = '';\n this.transitionProp = '';\n this.perspectiveProp = '';\n this.perspectiveOriginProp = '';\n\n this.has = new mixitup.Has();\n\n this.canary = null;\n\n this.BOX_SIZING_PROP = 'boxSizing';\n this.TRANSITION_PROP = 'transition';\n this.TRANSFORM_PROP = 'transform';\n this.PERSPECTIVE_PROP = 'perspective';\n this.PERSPECTIVE_ORIGIN_PROP = 'perspectiveOrigin';\n this.VENDORS = ['Webkit', 'moz', 'O', 'ms'];\n\n this.TWEENABLE = [\n 'opacity',\n 'width', 'height',\n 'marginRight', 'marginBottom',\n 'x', 'y',\n 'scale',\n 'translateX', 'translateY', 'translateZ',\n 'rotateX', 'rotateY', 'rotateZ'\n ];\n\n this.callActions('afterConstruct');\n };\n\n mixitup.BaseStatic.call(mixitup.Features);\n\n mixitup.Features.prototype = Object.create(mixitup.Base.prototype);\n\n h.extend(mixitup.Features.prototype,\n /** @lends mixitup.Features */\n {\n constructor: mixitup.Features,\n\n /**\n * @private\n * @return {void}\n */\n\n init: function() {\n var self = this;\n\n self.callActions('beforeInit', arguments);\n\n self.canary = document.createElement('div');\n\n self.setPrefixes();\n self.runTests();\n\n self.callActions('beforeInit', arguments);\n },\n\n /**\n * @private\n * @return {void}\n */\n\n runTests: function() {\n var self = this;\n\n self.callActions('beforeRunTests', arguments);\n\n self.has.promises = typeof window.Promise === 'function';\n self.has.transitions = self.transitionPrefix !== 'unsupported';\n\n self.callActions('afterRunTests', arguments);\n\n h.freeze(self.has);\n },\n\n /**\n * @private\n * @return {void}\n */\n\n setPrefixes: function() {\n var self = this;\n\n self.callActions('beforeSetPrefixes', arguments);\n\n self.transitionPrefix = h.getPrefix(self.canary, 'Transition', self.VENDORS);\n self.transformPrefix = h.getPrefix(self.canary, 'Transform', self.VENDORS);\n self.boxSizingPrefix = h.getPrefix(self.canary, 'BoxSizing', self.VENDORS);\n\n self.boxSizingProp = self.boxSizingPrefix ?\n self.boxSizingPrefix + h.pascalCase(self.BOX_SIZING_PROP) : self.BOX_SIZING_PROP;\n\n self.transitionProp = self.transitionPrefix ?\n self.transitionPrefix + h.pascalCase(self.TRANSITION_PROP) : self.TRANSITION_PROP;\n\n self.transformProp = self.transformPrefix ?\n self.transformPrefix + h.pascalCase(self.TRANSFORM_PROP) : self.TRANSFORM_PROP;\n\n self.transformRule = self.transformPrefix ?\n '-' + self.transformPrefix + '-' + self.TRANSFORM_PROP : self.TRANSFORM_PROP;\n\n self.perspectiveProp = self.transformPrefix ?\n self.transformPrefix + h.pascalCase(self.PERSPECTIVE_PROP) : self.PERSPECTIVE_PROP;\n\n self.perspectiveOriginProp = self.transformPrefix ?\n self.transformPrefix + h.pascalCase(self.PERSPECTIVE_ORIGIN_PROP) :\n self.PERSPECTIVE_ORIGIN_PROP;\n\n self.callActions('afterSetPrefixes', arguments);\n }\n });\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.Has = function() {\n this.transitions = false;\n this.promises = false;\n\n h.seal(this);\n };\n\n // Assign a singleton instance to `mixitup.features` and initialise:\n\n mixitup.features = new mixitup.Features();\n\n mixitup.features.init();\n\n /**\n * A group of properties defining the mixer's animation and effects settings.\n *\n * @constructor\n * @memberof mixitup.Config\n * @name animation\n * @namespace\n * @public\n * @since 2.0.0\n */\n\n mixitup.ConfigAnimation = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * A boolean dictating whether or not animation should be enabled for the MixItUp instance.\n * If `false`, all operations will occur instantly and syncronously, although callback\n * functions and any returned promises will still be fulfilled.\n *\n * @example Example: Create a mixer with all animations disabled\n * var mixer = mixitup(containerEl, {\n * animation: {\n * enable: false\n * }\n * });\n *\n * @name enable\n * @memberof mixitup.Config.animation\n * @instance\n * @type {boolean}\n * @default true\n */\n\n this.enable = true;\n\n /**\n * A string of one or more space-seperated properties to which transitions will be\n * applied for all filtering animations.\n *\n * Properties can be listed any order or combination, although they will be applied in a specific\n * predefined order to produce consistent results.\n *\n * To learn more about available effects, experiment with our \n * sandbox demo and try out the \"Export config\" button in the Animation options drop down.\n *\n * @example Example: Apply \"fade\" and \"translateZ\" effects to all animations\n * // As targets are filtered in and out, they will fade between\n * // opacity 1 and 0 and transform between translateZ(-100px) and\n * // translateZ(0).\n *\n * var mixer = mixitup(containerEl, {\n * animation: {\n * effects: 'fade translateZ(-100px)'\n * }\n * });\n *\n * @name effects\n * @memberof mixitup.Config.animation\n * @instance\n * @type {string}\n * @default 'fade scale'\n */\n\n this.effects = 'fade scale';\n\n /**\n * A string of one or more space-seperated effects to be applied only to filter-in\n * animations, overriding `config.animation.effects` if set.\n *\n * @example Example: Apply downwards vertical translate to targets being filtered in\n *\n * var mixer = mixitup(containerEl, {\n * animation: {\n * effectsIn: 'fade translateY(-100%)'\n * }\n * });\n *\n * @name effectsIn\n * @memberof mixitup.Config.animation\n * @instance\n * @type {string}\n * @default ''\n */\n\n this.effectsIn = '';\n\n /**\n * A string of one or more space-seperated effects to be applied only to filter-out\n * animations, overriding `config.animation.effects` if set.\n *\n * @example Example: Apply upwards vertical translate to targets being filtered out\n *\n * var mixer = mixitup(containerEl, {\n * animation: {\n * effectsOut: 'fade translateY(-100%)'\n * }\n * });\n *\n * @name effectsOut\n * @memberof mixitup.Config.animation\n * @instance\n * @type {string}\n * @default ''\n */\n\n this.effectsOut = '';\n\n /**\n * An integer dictating the duration of all MixItUp animations in milliseconds, not\n * including any additional delay apllied via the `'stagger'` effect.\n *\n * @example Example: Apply an animation duration of 200ms to all mixitup animations\n *\n * var mixer = mixitup(containerEl, {\n * animation: {\n * duration: 200\n * }\n * });\n *\n * @name duration\n * @memberof mixitup.Config.animation\n * @instance\n * @type {number}\n * @default 600\n */\n\n this.duration = 600;\n\n /**\n * A valid CSS3 transition-timing function or shorthand. For a full list of accepted\n * values, visit easings.net.\n *\n * @example Example 1: Apply \"ease-in-out\" easing to all animations\n *\n * var mixer = mixitup(containerEl, {\n * animation: {\n * easing: 'ease-in-out'\n * }\n * });\n *\n * @example Example 2: Apply a custom \"cubic-bezier\" easing function to all animations\n * var mixer = mixitup(containerEl, {\n * animation: {\n * easing: 'cubic-bezier(0.645, 0.045, 0.355, 1)'\n * }\n * });\n *\n * @name easing\n * @memberof mixitup.Config.animation\n * @instance\n * @type {string}\n * @default 'ease'\n */\n\n this.easing = 'ease';\n\n /**\n * A boolean dictating whether or not to apply perspective to the MixItUp container\n * during animations. By default, perspective is always applied and creates the\n * illusion of three-dimensional space for effects such as `translateZ`, `rotateX`,\n * and `rotateY`.\n *\n * You may wish to disable this and define your own perspective settings via CSS.\n *\n * @example Example: Prevent perspective from being applied to any 3D transforms\n * var mixer = mixitup(containerEl, {\n * animation: {\n * applyPerspective: false\n * }\n * });\n *\n * @name applyPerspective\n * @memberof mixitup.Config.animation\n * @instance\n * @type {bolean}\n * @default true\n */\n\n this.applyPerspective = true;\n\n /**\n * The perspective distance value to be applied to the container during animations,\n * affecting any 3D-transform-based effects.\n *\n * @example Example: Set a perspective distance of 2000px\n * var mixer = mixitup(containerEl, {\n * animation: {\n * effects: 'rotateY(-25deg)',\n * perspectiveDistance: '2000px'\n * }\n * });\n *\n * @name perspectiveDistance\n * @memberof mixitup.Config.animation\n * @instance\n * @type {string}\n * @default '3000px'\n */\n\n this.perspectiveDistance = '3000px';\n\n /**\n * The perspective-origin value to be applied to the container during animations,\n * affecting any 3D-transform-based effects.\n *\n * @example Example: Set a perspective origin in the top-right of the container\n * var mixer = mixitup(containerEl, {\n * animation: {\n * effects: 'transateZ(-200px)',\n * perspectiveOrigin: '100% 0'\n * }\n * });\n *\n * @name perspectiveOrigin\n * @memberof mixitup.Config.animation\n * @instance\n * @type {string}\n * @default '50% 50%'\n */\n\n this.perspectiveOrigin = '50% 50%';\n\n /**\n * A boolean dictating whether or not to enable the queuing of operations.\n *\n * If `true` (default), and a control is clicked or an API call is made while another\n * operation is progress, the operation will go into the queue and will be automatically exectuted\n * when the previous operaitons is finished.\n *\n * If `false`, any requested operations will be ignored, and the `onMixBusy` callback and `mixBusy`\n * event will be fired. If `debug.showWarnings` is enabled, a console warning will also occur.\n *\n * @example Example: Disable queuing\n * var mixer = mixitup(containerEl, {\n * animation: {\n * queue: false\n * }\n * });\n *\n * @name queue\n * @memberof mixitup.Config.animation\n * @instance\n * @type {boolean}\n * @default true\n */\n\n this.queue = true;\n\n /**\n * An integer dictacting the maximum number of operations allowed in the queue at\n * any time, when queuing is enabled.\n *\n * @example Example: Allow a maximum of 5 operations in the queue at any time\n * var mixer = mixitup(containerEl, {\n * animation: {\n * queueLimit: 5\n * }\n * });\n *\n * @name queueLimit\n * @memberof mixitup.Config.animation\n * @instance\n * @type {number}\n * @default 3\n */\n\n this.queueLimit = 3;\n\n /**\n * A boolean dictating whether or not to transition the height and width of the\n * container as elements are filtered in and out. If disabled, the container height\n * will change abruptly.\n *\n * It may be desirable to disable this on mobile devices as the CSS `height` and\n * `width` properties do not receive GPU-acceleration and can therefore cause stuttering.\n *\n * @example Example 1: Disable the transitioning of the container height and/or width\n * var mixer = mixitup(containerEl, {\n * animation: {\n * animateResizeContainer: false\n * }\n * });\n *\n * @example Example 2: Disable the transitioning of the container height and/or width for mobile devices only\n * var mixer = mixitup(containerEl, {\n * animation: {\n * animateResizeContainer: myFeatureTests.isMobile ? false : true\n * }\n * });\n *\n * @name animateResizeContainer\n * @memberof mixitup.Config.animation\n * @instance\n * @type {boolean}\n * @default true\n */\n\n this.animateResizeContainer = true;\n\n /**\n * A boolean dictating whether or not to transition the height and width of target\n * elements as they change throughout the course of an animation.\n *\n * This is often a must for flex-box grid layouts where the size of target elements may change\n * depending on final their position in relation to their siblings, or for `.changeLayout()`\n * operations where the size of targets change between layouts.\n *\n * NB: This feature requires additional calculations and manipulation to non-hardware-accelerated\n * properties which may adversely affect performance on slower devices, and is therefore\n * disabled by default.\n *\n * @example Example: Enable the transitioning of target widths and heights\n * var mixer = mixitup(containerEl, {\n * animation: {\n * animateResizeTargets: true\n * }\n * });\n *\n * @name animateResizeTargets\n * @memberof mixitup.Config.animation\n * @instance\n * @type {boolean}\n * @default false\n */\n\n this.animateResizeTargets = false;\n\n /**\n * A custom function used to manipulate the order in which the stagger delay is\n * incremented when using the ‘stagger’ effect.\n *\n * When using the 'stagger' effect, the delay applied to each target element is incremented\n * based on its index. You may create a custom function to manipulate the order in which the\n * delay is incremented and create engaging non-linear stagger effects.\n *\n * The function receives the index of the target element as a parameter, and must\n * return an integer which serves as the multiplier for the stagger delay.\n *\n * @example Example 1: Stagger target elements by column in a 3-column grid\n * var mixer = mixitup(containerEl, {\n * animation: {\n * effects: 'fade stagger(100ms)',\n * staggerSequence: function(i) {\n * return i % 3;\n * }\n * }\n * });\n *\n * @example Example 2: Using an algorithm to produce a more complex sequence\n * var mixer = mixitup(containerEl, {\n * animation: {\n * effects: 'fade stagger(100ms)',\n * staggerSequence: function(i) {\n * return (2*i) - (5*((i/3) - ((1/3) * (i%3))));\n * }\n * }\n * });\n *\n * @name staggerSequence\n * @memberof mixitup.Config.animation\n * @instance\n * @type {function}\n * @default null\n */\n\n this.staggerSequence = null;\n\n /**\n * A boolean dictating whether or not to reverse the direction of `translate`\n * and `rotate` transforms for elements being filtered out.\n *\n * It can be used to create carousel-like animations where elements enter and exit\n * from opposite directions. If enabled, the effect `translateX(-100%)` for elements\n * being filtered in would become `translateX(100%)` for targets being filtered out.\n *\n * This functionality can also be achieved by providing seperate effects\n * strings for `config.animation.effectsIn` and `config.animation.effectsOut`.\n *\n * @example Example: Reverse the desired direction on any translate/rotate effect for targets being filtered out\n * // Elements being filtered in will be translated from '100%' to '0' while\n * // elements being filtered out will be translated from 0 to '-100%'\n *\n * var mixer = mixitup(containerEl, {\n * animation: {\n * effects: 'fade translateX(100%)',\n * reverseOut: true,\n * nudge: false // Disable nudging to create a carousel-like effect\n * }\n * });\n *\n * @name reverseOut\n * @memberof mixitup.Config.animation\n * @instance\n * @type {boolean}\n * @default false\n */\n\n this.reverseOut = false;\n\n /**\n * A boolean dictating whether or not to \"nudge\" the animation path of targets\n * when they are being filtered in and out simulatenously.\n *\n * This has been the default behavior of MixItUp since version 1, but it\n * may be desirable to disable this effect when filtering directly from\n * one exclusive set of targets to a different exclusive set of targets,\n * to create a carousel-like effect, or a generally more subtle animation.\n *\n * @example Example: Disable the \"nudging\" of targets being filtered in and out simulatenously\n *\n * var mixer = mixitup(containerEl, {\n * animation: {\n * nudge: false\n * }\n * });\n *\n * @name nudge\n * @memberof mixitup.Config.animation\n * @instance\n * @type {boolean}\n * @default true\n */\n\n this.nudge = true;\n\n /**\n * A boolean dictating whether or not to clamp the height of the container while MixItUp's\n * geometry tests are carried out before an operation.\n *\n * To prevent scroll-bar flicker, clamping is turned on by default. But in the case where the\n * height of the container might affect its vertical positioning in the viewport\n * (e.g. a vertically-centered container), this should be turned off to ensure accurate\n * test results and a smooth animation.\n *\n * @example Example: Disable container height-clamping\n *\n * var mixer = mixitup(containerEl, {\n * animation: {\n * clampHeight: false\n * }\n * });\n *\n * @name clampHeight\n * @memberof mixitup.Config.animation\n * @instance\n * @type {boolean}\n * @default true\n */\n\n this.clampHeight = true;\n\n /**\n * A boolean dictating whether or not to clamp the width of the container while MixItUp's\n * geometry tests are carried out before an operation.\n *\n * To prevent scroll-bar flicker, clamping is turned on by default. But in the case where the\n * width of the container might affect its horitzontal positioning in the viewport\n * (e.g. a horizontall-centered container), this should be turned off to ensure accurate\n * test results and a smooth animation.\n *\n * @example Example: Disable container width-clamping\n *\n * var mixer = mixitup(containerEl, {\n * animation: {\n * clampWidth: false\n * }\n * });\n *\n * @name clampWidth\n * @memberof mixitup.Config.animation\n * @instance\n * @type {boolean}\n * @default true\n */\n\n this.clampWidth = true;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigAnimation);\n\n mixitup.ConfigAnimation.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigAnimation.prototype.constructor = mixitup.ConfigAnimation;\n\n /**\n * A group of properties relating to the behavior of the Mixer.\n *\n * @constructor\n * @memberof mixitup.Config\n * @name behavior\n * @namespace\n * @public\n * @since 3.1.12\n */\n\n mixitup.ConfigBehavior = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * A boolean dictating whether to allow \"live\" sorting of the mixer.\n *\n * Because of the expensive nature of sorting, MixItUp makes use of several\n * internal optimizations to skip redundant sorting operations, such as when\n * the newly requested sort command is the same as the active one. The caveat\n * to this optimization is that \"live\" edits to the value of a target's sorting\n * attribute will be ignored when requesting a re-sort by the same attribute.\n *\n * By setting to `behavior.liveSort` to `true`, the mixer will always re-sort\n * regardless of whether or not the sorting attribute and order have changed.\n *\n * @example Example: Enabling `liveSort` to allow for re-sorting\n *\n * var mixer = mixitup(containerEl, {\n * behavior: {\n * liveSort: true\n * },\n * load: {\n * sort: 'edited:desc'\n * }\n * });\n *\n * var target = containerEl.children[3];\n *\n * console.log(target.getAttribute('data-edited')); // '2015-04-24'\n *\n * target.setAttribute('data-edited', '2017-08-10'); // Update the target's edited date\n *\n * mixer.sort('edited:desc')\n * .then(function(state) {\n * // The target is now at the top of the list\n *\n * console.log(state.targets[0] === target); // true\n * });\n *\n * @name liveSort\n * @memberof mixitup.Config.behavior\n * @instance\n * @type {boolean}\n * @default false\n */\n\n this.liveSort = false;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigBehavior);\n\n mixitup.ConfigBehavior.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigBehavior.prototype.constructor = mixitup.ConfigBehavior;\n\n /**\n * A group of optional callback functions to be invoked at various\n * points within the lifecycle of a mixer operation.\n *\n * Each function is analogous to an event of the same name triggered from the\n * container element, and is invoked immediately after it.\n *\n * All callback functions receive the current `state` object as their first\n * argument, as well as other more specific arguments described below.\n *\n * @constructor\n * @memberof mixitup.Config\n * @name callbacks\n * @namespace\n * @public\n * @since 2.0.0\n */\n\n mixitup.ConfigCallbacks = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * A callback function invoked immediately after any MixItUp operation is requested\n * and before animations have begun.\n *\n * A second `futureState` argument is passed to the function which represents the final\n * state of the mixer once the requested operation has completed.\n *\n * @example Example: Adding an `onMixStart` callback function\n * var mixer = mixitup(containerEl, {\n * callbacks: {\n * onMixStart: function(state, futureState) {\n * console.log('Starting operation...');\n * }\n * }\n * });\n *\n * @name onMixStart\n * @memberof mixitup.Config.callbacks\n * @instance\n * @type {function}\n * @default null\n */\n\n this.onMixStart = null;\n\n /**\n * A callback function invoked when a MixItUp operation is requested while another\n * operation is in progress, and the animation queue is full, or queueing\n * is disabled.\n *\n * @example Example: Adding an `onMixBusy` callback function\n * var mixer = mixitup(containerEl, {\n * callbacks: {\n * onMixBusy: function(state) {\n * console.log('Mixer busy');\n * }\n * }\n * });\n *\n * @name onMixBusy\n * @memberof mixitup.Config.callbacks\n * @instance\n * @type {function}\n * @default null\n */\n\n this.onMixBusy = null;\n\n /**\n * A callback function invoked after any MixItUp operation has completed, and the\n * state has been updated.\n *\n * @example Example: Adding an `onMixEnd` callback function\n * var mixer = mixitup(containerEl, {\n * callbacks: {\n * onMixEnd: function(state) {\n * console.log('Operation complete');\n * }\n * }\n * });\n *\n * @name onMixEnd\n * @memberof mixitup.Config.callbacks\n * @instance\n * @type {function}\n * @default null\n */\n\n this.onMixEnd = null;\n\n /**\n * A callback function invoked whenever an operation \"fails\", i.e. no targets\n * could be found matching the requested filter.\n *\n * @example Example: Adding an `onMixFail` callback function\n * var mixer = mixitup(containerEl, {\n * callbacks: {\n * onMixFail: function(state) {\n * console.log('No items could be found matching the requested filter');\n * }\n * }\n * });\n *\n * @name onMixFail\n * @memberof mixitup.Config.callbacks\n * @instance\n * @type {function}\n * @default null\n */\n\n this.onMixFail = null;\n\n /**\n * A callback function invoked whenever a MixItUp control is clicked, and before its\n * respective operation is requested.\n *\n * The clicked element is assigned to the `this` keyword within the function. The original\n * click event is passed to the function as the second argument, which can be useful if\n * using `` tags as controls where the default behavior needs to be prevented.\n *\n * Returning `false` from the callback will prevent the control click from triggering\n * an operation.\n *\n * @example Example 1: Adding an `onMixClick` callback function\n * var mixer = mixitup(containerEl, {\n * callbacks: {\n * onMixClick: function(state, originalEvent) {\n * console.log('The control \"' + this.innerText + '\" was clicked');\n * }\n * }\n * });\n *\n * @example Example 2: Using `onMixClick` to manipulate the original click event\n * var mixer = mixitup(containerEl, {\n * callbacks: {\n * onMixClick: function(state, originalEvent) {\n * // Prevent original click event from bubbling up:\n * originalEvent.stopPropagation();\n *\n * // Prevent default behavior of clicked element:\n * originalEvent.preventDefault();\n * }\n * }\n * });\n *\n * @example Example 3: Using `onMixClick` to conditionally cancel operations\n * var mixer = mixitup(containerEl, {\n * callbacks: {\n * onMixClick: function(state, originalEvent) {\n * // Perform some conditional check:\n *\n * if (myApp.isLoading) {\n * // By returning false, we can prevent the control click from triggering an operation.\n *\n * return false;\n * }\n * }\n * }\n * });\n *\n * @name onMixClick\n * @memberof mixitup.Config.callbacks\n * @instance\n * @type {function}\n * @default null\n */\n\n this.onMixClick = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigCallbacks);\n\n mixitup.ConfigCallbacks.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigCallbacks.prototype.constructor = mixitup.ConfigCallbacks;\n\n /**\n * A group of properties relating to clickable control elements.\n *\n * @constructor\n * @memberof mixitup.Config\n * @name controls\n * @namespace\n * @public\n * @since 2.0.0\n */\n\n mixitup.ConfigControls = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * A boolean dictating whether or not controls should be enabled for the mixer instance.\n *\n * If `true` (default behavior), MixItUp will search the DOM for any clickable elements with\n * `data-filter`, `data-sort` or `data-toggle` attributes, and bind them for click events.\n *\n * If `false`, no click handlers will be bound, and all functionality must therefore be performed\n * via the mixer's API methods.\n *\n * If you do not intend to use the default controls, setting this property to `false` will\n * marginally improve the startup time of your mixer instance, and will also prevent any other active\n * mixer instances in the DOM which are bound to controls from controlling the instance.\n *\n * @example Example: Disabling controls\n * var mixer = mixitup(containerEl, {\n * controls: {\n * enable: false\n * }\n * });\n *\n * // With the default controls disabled, we can only control\n * // the mixer via its API methods, e.g.:\n *\n * mixer.filter('.cat-1');\n *\n * @name enable\n * @memberof mixitup.Config.controls\n * @instance\n * @type {boolean}\n * @default true\n */\n\n this.enable = true;\n\n /**\n * A boolean dictating whether or not to use event delegation when binding click events\n * to the default controls.\n *\n * If `false` (default behavior), each control button in the DOM will be found and\n * individually bound when a mixer is instantiated, with their corresponding actions\n * cached for performance.\n *\n * If `true`, a single click handler will be applied to the `window` (or container element - see\n * `config.controls.scope`), and any click events triggered by elements with `data-filter`,\n * `data-sort` or `data-toggle` attributes present will be handled as they propagate upwards.\n *\n * If you require a user interface where control buttons may be added, removed, or changed during the\n * lifetime of a mixer, `controls.live` should be set to `true`. There is a marginal but unavoidable\n * performance deficit when using live controls, as the value of each control button must be read\n * from the DOM in real time once the click event has propagated.\n *\n * @example Example: Setting live controls\n * var mixer = mixitup(containerEl, {\n * controls: {\n * live: true\n * }\n * });\n *\n * // Control buttons can now be added, remove and changed without breaking\n * // the mixer's UI\n *\n * @name live\n * @memberof mixitup.Config.controls\n * @instance\n * @type {boolean}\n * @default true\n */\n\n this.live = false;\n\n /**\n * A string dictating the \"scope\" to use when binding or querying the default controls. The available\n * values are `'global'` or `'local'`.\n *\n * When set to `'global'` (default behavior), MixItUp will query the entire document for control buttons\n * to bind, or delegate click events from (see `config.controls.live`).\n *\n * When set to `'local'`, MixItUp will only query (or bind click events to) its own container element.\n * This may be desireable if you require multiple active mixer instances within the same document, with\n * controls that would otherwise intefere with each other if scoped globally.\n *\n * Conversely, if you wish to control multiple instances with a single UI, you would create one\n * set of controls and keep the controls scope of each mixer set to `global`.\n *\n * @example Example: Setting 'local' scoped controls\n * var mixerOne = mixitup(containerOne, {\n * controls: {\n * scope: 'local'\n * }\n * });\n *\n * var mixerTwo = mixitup(containerTwo, {\n * controls: {\n * scope: 'local'\n * }\n * });\n *\n * // Both mixers can now exist within the same document with\n * // isolated controls placed within their container elements.\n *\n * @name scope\n * @memberof mixitup.Config.controls\n * @instance\n * @type {string}\n * @default 'global'\n */\n\n this.scope = 'global'; // enum: ['local' ,'global']\n\n /**\n * A string dictating the type of logic to apply when concatenating the filter selectors of\n * active toggle buttons (i.e. any clickable element with a `data-toggle` attribute).\n *\n * If set to `'or'` (default behavior), selectors will be concatenated together as\n * a comma-seperated list. For example:\n *\n * `'.cat-1, .cat-2'` (shows any elements matching `'.cat-1'` OR `'.cat-2'`)\n *\n * If set to `'and'`, selectors will be directly concatenated together. For example:\n *\n * `'.cat-1.cat-2'` (shows any elements which match both `'.cat-1'` AND `'.cat-2'`)\n *\n * @example Example: Setting \"and\" toggle logic\n * var mixer = mixitup(containerEl, {\n * controls: {\n * toggleLogic: 'and'\n * }\n * });\n *\n * @name toggleLogic\n * @memberof mixitup.Config.controls\n * @instance\n * @type {string}\n * @default 'or'\n */\n\n this.toggleLogic = 'or'; // enum: ['or', 'and']\n\n /**\n * A string dictating the filter behavior when all toggles are inactive.\n *\n * When set to `'all'` (default behavior), *all* targets will be shown by default\n * when no toggles are active, or at the moment all active toggles are toggled off.\n *\n * When set to `'none'`, no targets will be shown by default when no toggles are\n * active, or at the moment all active toggles are toggled off.\n *\n * @example Example 1: Setting the default toggle behavior to `'all'`\n * var mixer = mixitup(containerEl, {\n * controls: {\n * toggleDefault: 'all'\n * }\n * });\n *\n * mixer.toggleOn('.cat-2')\n * .then(function() {\n * // Deactivate all active toggles\n *\n * return mixer.toggleOff('.cat-2')\n * })\n * .then(function(state) {\n * console.log(state.activeFilter.selector); // 'all'\n * console.log(state.totalShow); // 12\n * });\n *\n * @example Example 2: Setting the default toggle behavior to `'none'`\n * var mixer = mixitup(containerEl, {\n * controls: {\n * toggleDefault: 'none'\n * }\n * });\n *\n * mixer.toggleOn('.cat-2')\n * .then(function() {\n * // Deactivate all active toggles\n *\n * return mixer.toggleOff('.cat-2')\n * })\n * .then(function(state) {\n * console.log(state.activeFilter.selector); // 'none'\n * console.log(state.totalShow); // 0\n * });\n *\n * @name toggleDefault\n * @memberof mixitup.Config.controls\n * @instance\n * @type {string}\n * @default 'all'\n */\n\n this.toggleDefault = 'all'; // enum: ['all', 'none']\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigControls);\n\n mixitup.ConfigControls.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigControls.prototype.constructor = mixitup.ConfigControls;\n\n /**\n * A group of properties defining the output and structure of class names programmatically\n * added to controls and containers to reflect the state of the mixer.\n *\n * Most commonly, class names are added to controls by MixItUp to indicate that\n * the control is active so that it can be styled accordingly - `'mixitup-control-active'` by default.\n *\n * Using a \"BEM\" like structure, each classname is broken into the three parts:\n * a block namespace (`'mixitup'`), an element name (e.g. `'control'`), and an optional modifier\n * name (e.g. `'active'`) reflecting the state of the element.\n *\n * By default, each part of the classname is concatenated together using single hyphens as\n * delineators, but this can be easily customised to match the naming convention and style of\n * your project.\n *\n * @constructor\n * @memberof mixitup.Config\n * @name classNames\n * @namespace\n * @public\n * @since 3.0.0\n */\n\n mixitup.ConfigClassNames = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * The \"block\" portion, or top-level namespace added to the start of any class names created by MixItUp.\n *\n * @example Example 1: changing the `config.classNames.block` value\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * block: 'portfolio'\n * }\n * });\n *\n * // Active control output: \"portfolio-control-active\"\n *\n * @example Example 2: Removing `config.classNames.block`\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * block: ''\n * }\n * });\n *\n * // Active control output: \"control-active\"\n *\n * @name block\n * @memberof mixitup.Config.classNames\n * @instance\n * @type {string}\n * @default 'mixitup'\n */\n\n this.block = 'mixitup';\n\n /**\n * The \"element\" portion of the class name added to container.\n *\n * @name elementContainer\n * @memberof mixitup.Config.classNames\n * @instance\n * @type {string}\n * @default 'container'\n */\n\n this.elementContainer = 'container';\n\n /**\n * The \"element\" portion of the class name added to filter controls.\n *\n * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but\n * each type's element value can be individually overwritten to match the unique classNames of your controls as needed.\n *\n * @example Example 1: changing the `config.classNames.elementFilter` value\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * elementFilter: 'filter'\n * }\n * });\n *\n * // Active filter output: \"mixitup-filter-active\"\n *\n * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementFilter` values\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * block: 'portfolio',\n * elementFilter: 'filter'\n * }\n * });\n *\n * // Active filter output: \"portfolio-filter-active\"\n *\n * @name elementFilter\n * @memberof mixitup.Config.classNames\n * @instance\n * @type {string}\n * @default 'control'\n */\n\n this.elementFilter = 'control';\n\n /**\n * The \"element\" portion of the class name added to sort controls.\n *\n * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but\n * each type's element value can be individually overwritten to match the unique classNames of your controls as needed.\n *\n * @example Example 1: changing the `config.classNames.elementSort` value\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * elementSort: 'sort'\n * }\n * });\n *\n * // Active sort output: \"mixitup-sort-active\"\n *\n * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementSort` values\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * block: 'portfolio',\n * elementSort: 'sort'\n * }\n * });\n *\n * // Active sort output: \"portfolio-sort-active\"\n *\n * @name elementSort\n * @memberof mixitup.Config.classNames\n * @instance\n * @type {string}\n * @default 'control'\n */\n\n this.elementSort = 'control';\n\n /**\n * The \"element\" portion of the class name added to multimix controls.\n *\n * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but\n * each type's element value can be individually overwritten to match the unique classNames of your controls as needed.\n *\n * @example Example 1: changing the `config.classNames.elementMultimix` value\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * elementMultimix: 'multimix'\n * }\n * });\n *\n * // Active multimix output: \"mixitup-multimix-active\"\n *\n * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementMultimix` values\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * block: 'portfolio',\n * elementSort: 'multimix'\n * }\n * });\n *\n * // Active multimix output: \"portfolio-multimix-active\"\n *\n * @name elementMultimix\n * @memberof mixitup.Config.classNames\n * @instance\n * @type {string}\n * @default 'control'\n */\n\n this.elementMultimix = 'control';\n\n /**\n * The \"element\" portion of the class name added to toggle controls.\n *\n * By default, all filter, sort, multimix and toggle controls take the same element value of `'control'`, but\n * each type's element value can be individually overwritten to match the unique classNames of your controls as needed.\n *\n * @example Example 1: changing the `config.classNames.elementToggle` value\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * elementToggle: 'toggle'\n * }\n * });\n *\n * // Active toggle output: \"mixitup-toggle-active\"\n *\n * @example Example 2: changing the `config.classNames.block` and `config.classNames.elementToggle` values\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * block: 'portfolio',\n * elementToggle: 'toggle'\n * }\n * });\n *\n * // Active toggle output: \"portfolio-toggle-active\"\n *\n * @name elementToggle\n * @memberof mixitup.Config.classNames\n * @instance\n * @type {string}\n * @default 'control'\n */\n\n this.elementToggle = 'control';\n\n /**\n * The \"modifier\" portion of the class name added to active controls.\n * @name modifierActive\n * @memberof mixitup.Config.classNames\n * @instance\n * @type {string}\n * @default 'active'\n */\n\n this.modifierActive = 'active';\n\n /**\n * The \"modifier\" portion of the class name added to disabled controls.\n *\n * @name modifierDisabled\n * @memberof mixitup.Config.classNames\n * @instance\n * @type {string}\n * @default 'disabled'\n */\n\n this.modifierDisabled = 'disabled';\n\n /**\n * The \"modifier\" portion of the class name added to the container when in a \"failed\" state.\n *\n * @name modifierFailed\n * @memberof mixitup.Config.classNames\n * @instance\n * @type {string}\n * @default 'failed'\n */\n\n this.modifierFailed = 'failed';\n\n /**\n * The delineator used between the \"block\" and \"element\" portions of any class name added by MixItUp.\n *\n * If the block portion is ommited by setting it to an empty string, no delineator will be added.\n *\n * @example Example: changing the delineator to match BEM convention\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * delineatorElement: '__'\n * }\n * });\n *\n * // example active control output: \"mixitup__control-active\"\n *\n * @name delineatorElement\n * @memberof mixitup.Config.classNames\n * @instance\n * @type {string}\n * @default '-'\n */\n\n this.delineatorElement = '-';\n\n /**\n * The delineator used between the \"element\" and \"modifier\" portions of any class name added by MixItUp.\n *\n * If the element portion is ommited by setting it to an empty string, no delineator will be added.\n *\n * @example Example: changing both delineators to match BEM convention\n * var mixer = mixitup(containerEl, {\n * classNames: {\n * delineatorElement: '__'\n * delineatorModifier: '--'\n * }\n * });\n *\n * // Active control output: \"mixitup__control--active\"\n *\n * @name delineatorModifier\n * @memberof mixitup.Config.classNames\n * @instance\n * @type {string}\n * @default '-'\n */\n\n this.delineatorModifier = '-';\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigClassNames);\n\n mixitup.ConfigClassNames.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigClassNames.prototype.constructor = mixitup.ConfigClassNames;\n\n /**\n * A group of properties relating to MixItUp's dataset API.\n *\n * @constructor\n * @memberof mixitup.Config\n * @name data\n * @namespace\n * @public\n * @since 3.0.0\n */\n\n mixitup.ConfigData = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * A string specifying the name of the key containing your data model's unique\n * identifier (UID). To use the dataset API, a UID key must be specified and\n * be present and unique on all objects in the dataset you provide to MixItUp.\n *\n * For example, if your dataset is made up of MongoDB documents, the UID\n * key would be `'id'` or `'_id'`.\n *\n * @example Example: Setting the UID to `'id'`\n * var mixer = mixitup(containerEl, {\n * data: {\n * uidKey: 'id'\n * }\n * });\n *\n * @name uidKey\n * @memberof mixitup.Config.data\n * @instance\n * @type {string}\n * @default ''\n */\n\n this.uidKey = '';\n\n /**\n * A boolean dictating whether or not MixItUp should \"dirty check\" each object in\n * your dataset for changes whenever `.dataset()` is called, and re-render any targets\n * for which a change is found.\n *\n * Depending on the complexity of your data model, dirty checking can be expensive\n * and is therefore disabled by default.\n *\n * NB: For changes to be detected, a new immutable instance of the edited model must be\n * provided to mixitup, rather than manipulating properties on the existing instance.\n * If your changes are a result of a DB write and read, you will most likely be calling\n * `.dataset()` with a clean set of objects each time, so this will not be an issue.\n *\n * @example Example: Enabling dirty checking\n *\n * var myDataset = [\n * {\n * id: 0,\n * title: \"Blog Post Title 0\"\n * ...\n * },\n * {\n * id: 1,\n * title: \"Blog Post Title 1\"\n * ...\n * }\n * ];\n *\n * // Instantiate a mixer with a pre-loaded dataset, and a target renderer\n * // function defined\n *\n * var mixer = mixitup(containerEl, {\n * data: {\n * uidKey: 'id',\n * dirtyCheck: true\n * },\n * load: {\n * dataset: myDataset\n * },\n * render: {\n * target: function() { ... }\n * }\n * });\n *\n * // For illustration, we will clone and edit the second object in the dataset.\n * // NB: this would typically be done server-side in response to a DB update,\n * and then re-queried via an API.\n *\n * myDataset[1] = Object.assign({}, myDataset[1]);\n *\n * myDataset[1].title = 'Blog Post Title 11';\n *\n * mixer.dataset(myDataset)\n * .then(function() {\n * // the target with ID \"1\", will be re-rendered reflecting its new title\n * });\n *\n * @name dirtyCheck\n * @memberof mixitup.Config.data\n * @instance\n * @type {boolean}\n * @default false\n */\n\n this.dirtyCheck = false;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigData);\n\n mixitup.ConfigData.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigData.prototype.constructor = mixitup.ConfigData;\n\n /**\n * A group of properties allowing the toggling of various debug features.\n *\n * @constructor\n * @memberof mixitup.Config\n * @name debug\n * @namespace\n * @public\n * @since 3.0.0\n */\n\n mixitup.ConfigDebug = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * A boolean dictating whether or not the mixer instance returned by the\n * `mixitup()` factory function should expose private properties and methods.\n *\n * By default, mixer instances only expose their public API, but enabling\n * debug mode will give you access to various mixer internals which may aid\n * in debugging, or the authoring of extensions.\n *\n * @example Example: Enabling debug mode\n *\n * var mixer = mixitup(containerEl, {\n * debug: {\n * enable: true\n * }\n * });\n *\n * // Private properties and methods will now be visible on the mixer instance:\n *\n * console.log(mixer);\n *\n * @name enable\n * @memberof mixitup.Config.debug\n * @instance\n * @type {boolean}\n * @default false\n */\n\n this.enable = false;\n\n /**\n * A boolean dictating whether or not warnings should be shown when various\n * common gotchas occur.\n *\n * Warnings are intended to provide insights during development when something\n * occurs that is not a fatal, but may indicate an issue with your integration,\n * and are therefore turned on by default. However, you may wish to disable\n * them in production.\n *\n * @example Example 1: Disabling warnings\n *\n * var mixer = mixitup(containerEl, {\n * debug: {\n * showWarnings: false\n * }\n * });\n *\n * @example Example 2: Disabling warnings based on environment\n *\n * var showWarnings = myAppConfig.environment === 'development' ? true : false;\n *\n * var mixer = mixitup(containerEl, {\n * debug: {\n * showWarnings: showWarnings\n * }\n * });\n *\n * @name showWarnings\n * @memberof mixitup.Config.debug\n * @instance\n * @type {boolean}\n * @default true\n */\n\n this.showWarnings = true;\n\n /**\n * Used for server-side testing only.\n *\n * @private\n * @name fauxAsync\n * @memberof mixitup.Config.debug\n * @instance\n * @type {boolean}\n * @default false\n */\n\n this.fauxAsync = false;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigDebug);\n\n mixitup.ConfigDebug.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigDebug.prototype.constructor = mixitup.ConfigDebug;\n\n /**\n * A group of properties relating to the layout of the container.\n *\n * @constructor\n * @memberof mixitup.Config\n * @name layout\n * @namespace\n * @public\n * @since 3.0.0\n */\n\n mixitup.ConfigLayout = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * A boolean dictating whether or not mixitup should query all descendants\n * of the container for targets, or only immediate children.\n *\n * By default, mixitup will query all descendants matching the\n * `selectors.target` selector when indexing targets upon instantiation.\n * This allows for targets to be nested inside a sub-container which is\n * useful when ring-fencing targets from locally scoped controls in your\n * markup (see `controls.scope`).\n *\n * However, if you are building a more complex UI requiring the nesting\n * of mixers within mixers, you will most likely want to limit targets to\n * immediate children of the container by setting this property to `false`.\n *\n * @example Example: Restricting targets to immediate children\n *\n * var mixer = mixitup(containerEl, {\n * layout: {\n * allowNestedTargets: false\n * }\n * });\n *\n * @name allowNestedTargets\n * @memberof mixitup.Config.layout\n * @instance\n * @type {boolean}\n * @default true\n */\n\n this.allowNestedTargets = true;\n\n /**\n * A string specifying an optional class name to apply to the container when in\n * its default state.\n *\n * By changing this class name or adding a class name to the container via the\n * `.changeLayout()` API method, the CSS layout of the container can be changed,\n * and MixItUp will attemp to gracefully animate the container and its targets\n * between states.\n *\n * @example Example 1: Specifying a container class name\n *\n * var mixer = mixitup(containerEl, {\n * layout: {\n * containerClassName: 'grid'\n * }\n * });\n *\n * @example Example 2: Changing the default class name with `.changeLayout()`\n *\n * var mixer = mixitup(containerEl, {\n * layout: {\n * containerClassName: 'grid'\n * }\n * });\n *\n * mixer.changeLayout('list')\n * .then(function(state) {\n * console.log(state.activeContainerClass); // \"list\"\n * });\n *\n * @name containerClassName\n * @memberof mixitup.Config.layout\n * @instance\n * @type {string}\n * @default ''\n */\n\n this.containerClassName = '';\n\n /**\n * A reference to a non-target sibling element after which to insert targets\n * when there are no targets in the container.\n *\n * @example Example: Setting a `siblingBefore` reference element\n *\n * var addButton = containerEl.querySelector('button');\n *\n * var mixer = mixitup(containerEl, {\n * layout: {\n * siblingBefore: addButton\n * }\n * });\n *\n * @name siblingBefore\n * @memberof mixitup.Config.layout\n * @instance\n * @type {HTMLElement}\n * @default null\n */\n\n this.siblingBefore = null;\n\n /**\n * A reference to a non-target sibling element before which to insert targets\n * when there are no targets in the container.\n *\n * @example Example: Setting an `siblingAfter` reference element\n *\n * var gap = containerEl.querySelector('.gap');\n *\n * var mixer = mixitup(containerEl, {\n * layout: {\n * siblingAfter: gap\n * }\n * });\n *\n * @name siblingAfter\n * @memberof mixitup.Config.layout\n * @instance\n * @type {HTMLElement}\n * @default null\n */\n\n this.siblingAfter = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigLayout);\n\n mixitup.ConfigLayout.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigLayout.prototype.constructor = mixitup.ConfigLayout;\n\n /**\n * A group of properties defining the initial state of the mixer on load (instantiation).\n *\n * @constructor\n * @memberof mixitup.Config\n * @name load\n * @namespace\n * @public\n * @since 2.0.0\n */\n\n mixitup.ConfigLoad = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * A string defining any filtering to be statically applied to the mixer on load.\n * As per the `.filter()` API, this can be any valid selector string, or the\n * values `'all'` or `'none'`.\n *\n * @example Example 1: Defining an initial filter selector to be applied on load\n *\n * // The mixer will show only those targets matching '.category-a' on load.\n *\n * var mixer = mixitup(containerEl, {\n * load: {\n * filter: '.category-a'\n * }\n * });\n *\n * @example Example 2: Hiding all targets on load\n *\n * // The mixer will show hide all targets on load.\n *\n * var mixer = mixitup(containerEl, {\n * load: {\n * filter: 'none'\n * }\n * });\n *\n * @name filter\n * @memberof mixitup.Config.load\n * @instance\n * @type {string}\n * @default 'all'\n */\n\n this.filter = 'all';\n\n /**\n * A string defining any sorting to be statically applied to the mixer on load.\n * As per the `.sort()` API, this should be a valid \"sort string\" made up of\n * an attribute to sort by (or `'default'`) followed by an optional sorting\n * order, or the value `'random'`;\n *\n * @example Example: Defining sorting to be applied on load\n *\n * // The mixer will sort the container by the value of the `data-published-date`\n * // attribute, in descending order.\n *\n * var mixer = mixitup(containerEl, {\n * load: {\n * sort: 'published-date:desc'\n * }\n * });\n *\n * @name sort\n * @memberof mixitup.Config.load\n * @instance\n * @type {string}\n * @default 'default:asc'\n */\n\n this.sort = 'default:asc';\n\n /**\n * An array of objects representing the underlying data of any pre-rendered targets,\n * when using the `.dataset()` API.\n *\n * NB: If targets are pre-rendered when the mixer is instantiated, this must be set.\n *\n * @example Example: Defining the initial underyling dataset\n *\n * var myDataset = [\n * {\n * id: 0,\n * title: \"Blog Post Title 0\",\n * ...\n * },\n * {\n * id: 1,\n * title: \"Blog Post Title 1\",\n * ...\n * }\n * ];\n *\n * var mixer = mixitup(containerEl, {\n * data: {\n * uidKey: 'id'\n * },\n * load: {\n * dataset: myDataset\n * }\n * });\n *\n * @name dataset\n * @memberof mixitup.Config.load\n * @instance\n * @type {Array.}\n * @default null\n */\n\n this.dataset = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigLoad);\n\n mixitup.ConfigLoad.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigLoad.prototype.constructor = mixitup.ConfigLoad;\n\n /**\n * A group of properties defining the selectors used to query elements within a mixitup container.\n *\n * @constructor\n * @memberof mixitup.Config\n * @name selectors\n * @namespace\n * @public\n * @since 3.0.0\n */\n\n mixitup.ConfigSelectors = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * A selector string used to query and index target elements within the container.\n *\n * By default, the class selector `'.mix'` is used, but this can be changed to an\n * attribute or element selector to match the style of your project.\n *\n * @example Example 1: Changing the target selector\n *\n * var mixer = mixitup(containerEl, {\n * selectors: {\n * target: '.portfolio-item'\n * }\n * });\n *\n * @example Example 2: Using an attribute selector as a target selector\n *\n * // The mixer will search for any children with the attribute `data-ref=\"mix\"`\n *\n * var mixer = mixitup(containerEl, {\n * selectors: {\n * target: '[data-ref=\"mix\"]'\n * }\n * });\n *\n * @name target\n * @memberof mixitup.Config.selectors\n * @instance\n * @type {string}\n * @default '.mix'\n */\n\n this.target = '.mix';\n\n /**\n * A optional selector string used to add further specificity to the querying of control elements,\n * in addition to their mandatory data attribute (e.g. `data-filter`, `data-toggle`, `data-sort`).\n *\n * This can be used if other elements in your document must contain the above attributes\n * (e.g. for use in third-party scripts), and would otherwise interfere with MixItUp. Adding\n * an additional `control` selector of your choice allows MixItUp to restrict event handling\n * to only those elements matching the defined selector.\n *\n * @name control\n * @memberof mixitup.Config.selectors\n * @instance\n * @type {string}\n * @default ''\n *\n * @example Example 1: Adding a `selectors.control` selector\n *\n * var mixer = mixitup(containerEl, {\n * selectors: {\n * control: '.mixitup-control'\n * }\n * });\n *\n * // Will not be handled:\n * // \n *\n * // Will be handled:\n * // \n */\n\n this.control = '';\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigSelectors);\n\n mixitup.ConfigSelectors.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigSelectors.prototype.constructor = mixitup.ConfigSelectors;\n\n /**\n * A group of optional render functions for creating and updating elements.\n *\n * All render functions receive a data object, and should return a valid HTML string.\n *\n * @constructor\n * @memberof mixitup.Config\n * @name render\n * @namespace\n * @public\n * @since 3.0.0\n */\n\n mixitup.ConfigRender = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * A function returning an HTML string representing a target element, or a reference to a\n * single DOM element.\n *\n * The function is invoked as part of the `.dataset()` API, whenever a new item is added\n * to the dataset, or an item in the dataset changes (if `dataset.dirtyCheck` is enabled).\n *\n * The function receives the relevant dataset item as its first parameter.\n *\n * @example Example 1: Using string concatenation\n *\n * var mixer = mixitup(containerEl, {\n * render: {\n * target: function(item) {\n * return (\n * '<div class=\"mix\">' +\n * '<h2>' + item.title + '</h2>' +\n * '</div>'\n * );\n * }\n * }\n * });\n *\n * @example Example 2: Using an ES2015 template literal\n *\n * var mixer = mixitup(containerEl, {\n * render: {\n * target: function(item) {\n * return (\n * `<div class=\"mix\">\n * <h2>${item.title}</h2>\n * </div>`\n * );\n * }\n * }\n * });\n *\n * @example Example 3: Using a Handlebars template\n *\n * var targetTemplate = Handlebars.compile('<div class=\"mix\"><h2>{{title}}</h2></div>');\n *\n * var mixer = mixitup(containerEl, {\n * render: {\n * target: targetTemplate\n * }\n * });\n *\n * @example Example 4: Returning a DOM element\n *\n * var mixer = mixitup(containerEl, {\n * render: {\n * target: function(item) {\n * // Create a single element using your framework's built-in renderer\n *\n * var el = ...\n *\n * return el;\n * }\n * }\n * });\n *\n * @name target\n * @memberof mixitup.Config.render\n * @instance\n * @type {function}\n * @default 'null'\n */\n\n this.target = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigRender);\n\n mixitup.ConfigRender.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigRender.prototype.constructor = mixitup.ConfigRender;\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.ConfigTemplates = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ConfigTemplates);\n\n mixitup.ConfigTemplates.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ConfigTemplates.prototype.constructor = mixitup.ConfigTemplates;\n\n /**\n * `mixitup.Config` is an interface used for customising the functionality of a\n * mixer instance. It is organised into several semantically distinct sub-objects,\n * each one pertaining to a particular aspect of MixItUp functionality.\n *\n * An object literal containing any or all of the available properies,\n * known as the \"configuration object\", can be passed as the second parameter to\n * the `mixitup` factory function when creating a mixer instance to customise its\n * functionality as needed.\n *\n * If no configuration object is passed, the mixer instance will take on the default\n * configuration values detailed below.\n *\n * @example Example 1: Creating and passing the configuration object\n * // Create a configuration object with desired values\n *\n * var config = {\n * animation: {\n * enable: false\n * },\n * selectors: {\n * target: '.item'\n * }\n * };\n *\n * // Pass the configuration object to the mixitup factory function\n *\n * var mixer = mixitup(containerEl, config);\n *\n * @example Example 2: Passing the configuration object inline\n * // Typically, the configuration object is passed inline for brevity.\n *\n * var mixer = mixitup(containerEl, {\n * controls: {\n * live: true,\n * toggleLogic: 'and'\n * }\n * });\n *\n *\n * @constructor\n * @memberof mixitup\n * @namespace\n * @public\n * @since 2.0.0\n */\n\n mixitup.Config = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.animation = new mixitup.ConfigAnimation();\n this.behavior = new mixitup.ConfigBehavior();\n this.callbacks = new mixitup.ConfigCallbacks();\n this.controls = new mixitup.ConfigControls();\n this.classNames = new mixitup.ConfigClassNames();\n this.data = new mixitup.ConfigData();\n this.debug = new mixitup.ConfigDebug();\n this.layout = new mixitup.ConfigLayout();\n this.load = new mixitup.ConfigLoad();\n this.selectors = new mixitup.ConfigSelectors();\n this.render = new mixitup.ConfigRender();\n this.templates = new mixitup.ConfigTemplates();\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.Config);\n\n mixitup.Config.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.Config.prototype.constructor = mixitup.Config;\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.MixerDom = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.document = null;\n this.body = null;\n this.container = null;\n this.parent = null;\n this.targets = [];\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.MixerDom);\n\n mixitup.MixerDom.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.MixerDom.prototype.constructor = mixitup.MixerDom;\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.UiClassNames = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.base = '';\n this.active = '';\n this.disabled = '';\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.UiClassNames);\n\n mixitup.UiClassNames.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.UiClassNames.prototype.constructor = mixitup.UiClassNames;\n\n /**\n * An object into which all arbitrary arguments sent to '.dataset()' are mapped.\n *\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.CommandDataset = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.dataset = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.CommandDataset);\n\n mixitup.CommandDataset.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.CommandDataset.prototype.constructor = mixitup.CommandDataset;\n\n /**\n * An object into which all arbitrary arguments sent to '.multimix()' are mapped.\n *\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.CommandMultimix = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.filter = null;\n this.sort = null;\n this.insert = null;\n this.remove = null;\n this.changeLayout = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.CommandMultimix);\n\n mixitup.CommandMultimix.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.CommandMultimix.prototype.constructor = mixitup.CommandMultimix;\n\n /**\n * An object into which all arbitrary arguments sent to '.filter()' are mapped.\n *\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.CommandFilter = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.selector = '';\n this.collection = null;\n this.action = 'show'; // enum: ['show', 'hide']\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.CommandFilter);\n\n mixitup.CommandFilter.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.CommandFilter.prototype.constructor = mixitup.CommandFilter;\n\n /**\n * An object into which all arbitrary arguments sent to '.sort()' are mapped.\n *\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.CommandSort = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.sortString = '';\n this.attribute = '';\n this.order = 'asc';\n this.collection = null;\n this.next = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.CommandSort);\n\n mixitup.CommandSort.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.CommandSort.prototype.constructor = mixitup.CommandSort;\n\n /**\n * An object into which all arbitrary arguments sent to '.insert()' are mapped.\n *\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.CommandInsert = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.index = 0;\n this.collection = [];\n this.position = 'before'; // enum: ['before', 'after']\n this.sibling = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.CommandInsert);\n\n mixitup.CommandInsert.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.CommandInsert.prototype.constructor = mixitup.CommandInsert;\n\n /**\n * An object into which all arbitrary arguments sent to '.remove()' are mapped.\n *\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.CommandRemove = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.targets = [];\n this.collection = [];\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.CommandRemove);\n\n mixitup.CommandRemove.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.CommandRemove.prototype.constructor = mixitup.CommandRemove;\n\n /**\n * An object into which all arbitrary arguments sent to '.changeLayout()' are mapped.\n *\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.CommandChangeLayout = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.containerClassName = '';\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.CommandChangeLayout);\n\n mixitup.CommandChangeLayout.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.CommandChangeLayout.prototype.constructor = mixitup.CommandChangeLayout;\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n * @param {string} type\n * @param {string} selector\n * @param {boolean} [live]\n * @param {string} [parent]\n * An optional string representing the name of the mixer.dom property containing a reference to a parent element.\n */\n\n mixitup.ControlDefinition = function(type, selector, live, parent) {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.type = type;\n this.selector = selector;\n this.live = live || false;\n this.parent = parent || '';\n\n this.callActions('afterConstruct');\n\n h.freeze(this);\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.ControlDefinition);\n\n mixitup.ControlDefinition.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.ControlDefinition.prototype.constructor = mixitup.ControlDefinition;\n\n mixitup.controlDefinitions = [];\n\n mixitup.controlDefinitions.push(new mixitup.ControlDefinition('multimix', '[data-filter][data-sort]'));\n mixitup.controlDefinitions.push(new mixitup.ControlDefinition('filter', '[data-filter]'));\n mixitup.controlDefinitions.push(new mixitup.ControlDefinition('sort', '[data-sort]'));\n mixitup.controlDefinitions.push(new mixitup.ControlDefinition('toggle', '[data-toggle]'));\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.Control = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.el = null;\n this.selector = '';\n this.bound = [];\n this.pending = -1;\n this.type = '';\n this.status = 'inactive'; // enum: ['inactive', 'active', 'disabled', 'live']\n this.filter = '';\n this.sort = '';\n this.canDisable = false;\n this.handler = null;\n this.classNames = new mixitup.UiClassNames();\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.Control);\n\n mixitup.Control.prototype = Object.create(mixitup.Base.prototype);\n\n h.extend(mixitup.Control.prototype,\n /** @lends mixitup.Control */\n {\n constructor: mixitup.Control,\n\n /**\n * @private\n * @param {HTMLElement} el\n * @param {string} type\n * @param {string} selector\n */\n\n init: function(el, type, selector) {\n var self = this;\n\n this.callActions('beforeInit', arguments);\n\n self.el = el;\n self.type = type;\n self.selector = selector;\n\n if (self.selector) {\n self.status = 'live';\n } else {\n self.canDisable = typeof self.el.disable === 'boolean';\n\n switch (self.type) {\n case 'filter':\n self.filter = self.el.getAttribute('data-filter');\n\n break;\n case 'toggle':\n self.filter = self.el.getAttribute('data-toggle');\n\n break;\n case 'sort':\n self.sort = self.el.getAttribute('data-sort');\n\n break;\n case 'multimix':\n self.filter = self.el.getAttribute('data-filter');\n self.sort = self.el.getAttribute('data-sort');\n\n break;\n }\n }\n\n self.bindClick();\n\n mixitup.controls.push(self);\n\n this.callActions('afterInit', arguments);\n },\n\n /**\n * @private\n * @param {mixitup.Mixer} mixer\n * @return {boolean}\n */\n\n isBound: function(mixer) {\n var self = this,\n isBound = false;\n\n this.callActions('beforeIsBound', arguments);\n\n isBound = self.bound.indexOf(mixer) > -1;\n\n return self.callFilters('afterIsBound', isBound, arguments);\n },\n\n /**\n * @private\n * @param {mixitup.Mixer} mixer\n * @return {void}\n */\n\n addBinding: function(mixer) {\n var self = this;\n\n this.callActions('beforeAddBinding', arguments);\n\n if (!self.isBound()) {\n self.bound.push(mixer);\n }\n\n this.callActions('afterAddBinding', arguments);\n },\n\n /**\n * @private\n * @param {mixitup.Mixer} mixer\n * @return {void}\n */\n\n removeBinding: function(mixer) {\n var self = this,\n removeIndex = -1;\n\n this.callActions('beforeRemoveBinding', arguments);\n\n if ((removeIndex = self.bound.indexOf(mixer)) > -1) {\n self.bound.splice(removeIndex, 1);\n }\n\n if (self.bound.length < 1) {\n // No bindings exist, unbind event click handlers\n\n self.unbindClick();\n\n // Remove from `mixitup.controls` list\n\n removeIndex = mixitup.controls.indexOf(self);\n\n mixitup.controls.splice(removeIndex, 1);\n\n if (self.status === 'active') {\n self.renderStatus(self.el, 'inactive');\n }\n }\n\n this.callActions('afterRemoveBinding', arguments);\n },\n\n /**\n * @private\n * @return {void}\n */\n\n bindClick: function() {\n var self = this;\n\n this.callActions('beforeBindClick', arguments);\n\n self.handler = function(e) {\n self.handleClick(e);\n };\n\n h.on(self.el, 'click', self.handler);\n\n this.callActions('afterBindClick', arguments);\n },\n\n /**\n * @private\n * @return {void}\n */\n\n unbindClick: function() {\n var self = this;\n\n this.callActions('beforeUnbindClick', arguments);\n\n h.off(self.el, 'click', self.handler);\n\n self.handler = null;\n\n this.callActions('afterUnbindClick', arguments);\n },\n\n /**\n * @private\n * @param {MouseEvent} e\n * @return {void}\n */\n\n handleClick: function(e) {\n var self = this,\n button = null,\n mixer = null,\n isActive = false,\n returnValue = void(0),\n command = {},\n clone = null,\n commands = [],\n i = -1;\n\n this.callActions('beforeHandleClick', arguments);\n\n this.pending = 0;\n\n mixer = self.bound[0];\n\n if (!self.selector) {\n button = self.el;\n } else {\n button = h.closestParent(e.target, mixer.config.selectors.control + self.selector, true, mixer.dom.document);\n }\n\n if (!button) {\n self.callActions('afterHandleClick', arguments);\n\n return;\n }\n\n switch (self.type) {\n case 'filter':\n command.filter = self.filter || button.getAttribute('data-filter');\n\n break;\n case 'sort':\n command.sort = self.sort || button.getAttribute('data-sort');\n\n break;\n case 'multimix':\n command.filter = self.filter || button.getAttribute('data-filter');\n command.sort = self.sort || button.getAttribute('data-sort');\n\n break;\n case 'toggle':\n command.filter = self.filter || button.getAttribute('data-toggle');\n\n if (self.status === 'live') {\n isActive = h.hasClass(button, self.classNames.active);\n } else {\n isActive = self.status === 'active';\n }\n\n break;\n }\n\n for (i = 0; i < self.bound.length; i++) {\n // Create a clone of the command for each bound mixer instance\n\n clone = new mixitup.CommandMultimix();\n\n h.extend(clone, command);\n\n commands.push(clone);\n }\n\n commands = self.callFilters('commandsHandleClick', commands, arguments);\n\n self.pending = self.bound.length;\n\n for (i = 0; mixer = self.bound[i]; i++) {\n command = commands[i];\n\n if (!command) {\n // An extension may set a command null to indicate that the click should not be handled\n\n continue;\n }\n\n if (!mixer.lastClicked) {\n mixer.lastClicked = button;\n }\n\n mixitup.events.fire('mixClick', mixer.dom.container, {\n state: mixer.state,\n instance: mixer,\n originalEvent: e,\n control: mixer.lastClicked\n }, mixer.dom.document);\n\n if (typeof mixer.config.callbacks.onMixClick === 'function') {\n returnValue = mixer.config.callbacks.onMixClick.call(mixer.lastClicked, mixer.state, e, mixer);\n\n if (returnValue === false) {\n // User has returned `false` from the callback, so do not handle click\n\n continue;\n }\n }\n\n if (self.type === 'toggle') {\n isActive ? mixer.toggleOff(command.filter) : mixer.toggleOn(command.filter);\n } else {\n mixer.multimix(command);\n }\n }\n\n this.callActions('afterHandleClick', arguments);\n },\n\n /**\n * @param {object} command\n * @param {Array} toggleArray\n * @return {void}\n */\n\n update: function(command, toggleArray) {\n var self = this,\n actions = new mixitup.CommandMultimix();\n\n self.callActions('beforeUpdate', arguments);\n\n self.pending--;\n\n self.pending = Math.max(0, self.pending);\n\n if (self.pending > 0) return;\n\n if (self.status === 'live') {\n // Live control (status unknown)\n\n self.updateLive(command, toggleArray);\n } else {\n // Static control\n\n actions.sort = self.sort;\n actions.filter = self.filter;\n\n self.callFilters('actionsUpdate', actions, arguments);\n\n self.parseStatusChange(self.el, command, actions, toggleArray);\n }\n\n self.callActions('afterUpdate', arguments);\n },\n\n /**\n * @param {mixitup.CommandMultimix} command\n * @param {Array} toggleArray\n * @return {void}\n */\n\n updateLive: function(command, toggleArray) {\n var self = this,\n controlButtons = null,\n actions = null,\n button = null,\n i = -1;\n\n self.callActions('beforeUpdateLive', arguments);\n\n if (!self.el) return;\n\n controlButtons = self.el.querySelectorAll(self.selector);\n\n for (i = 0; button = controlButtons[i]; i++) {\n actions = new mixitup.CommandMultimix();\n\n switch (self.type) {\n case 'filter':\n actions.filter = button.getAttribute('data-filter');\n\n break;\n case 'sort':\n actions.sort = button.getAttribute('data-sort');\n\n break;\n case 'multimix':\n actions.filter = button.getAttribute('data-filter');\n actions.sort = button.getAttribute('data-sort');\n\n break;\n case 'toggle':\n actions.filter = button.getAttribute('data-toggle');\n\n break;\n }\n\n actions = self.callFilters('actionsUpdateLive', actions, arguments);\n\n self.parseStatusChange(button, command, actions, toggleArray);\n }\n\n self.callActions('afterUpdateLive', arguments);\n },\n\n /**\n * @param {HTMLElement} button\n * @param {mixitup.CommandMultimix} command\n * @param {mixitup.CommandMultimix} actions\n * @param {Array} toggleArray\n * @return {void}\n */\n\n parseStatusChange: function(button, command, actions, toggleArray) {\n var self = this,\n alias = '',\n toggle = '',\n i = -1;\n\n self.callActions('beforeParseStatusChange', arguments);\n\n switch (self.type) {\n case 'filter':\n if (command.filter === actions.filter) {\n self.renderStatus(button, 'active');\n } else {\n self.renderStatus(button, 'inactive');\n }\n\n break;\n case 'multimix':\n if (command.sort === actions.sort && command.filter === actions.filter) {\n self.renderStatus(button, 'active');\n } else {\n self.renderStatus(button, 'inactive');\n }\n\n break;\n case 'sort':\n if (command.sort.match(/:asc/g)) {\n alias = command.sort.replace(/:asc/g, '');\n }\n\n if (command.sort === actions.sort || alias === actions.sort) {\n self.renderStatus(button, 'active');\n } else {\n self.renderStatus(button, 'inactive');\n }\n\n break;\n case 'toggle':\n if (toggleArray.length < 1) self.renderStatus(button, 'inactive');\n\n if (command.filter === actions.filter) {\n self.renderStatus(button, 'active');\n }\n\n for (i = 0; i < toggleArray.length; i++) {\n toggle = toggleArray[i];\n\n if (toggle === actions.filter) {\n // Button matches one active toggle\n\n self.renderStatus(button, 'active');\n\n break;\n }\n\n self.renderStatus(button, 'inactive');\n }\n\n break;\n }\n\n self.callActions('afterParseStatusChange', arguments);\n },\n\n /**\n * @param {HTMLElement} button\n * @param {string} status\n * @return {void}\n */\n\n renderStatus: function(button, status) {\n var self = this;\n\n self.callActions('beforeRenderStatus', arguments);\n\n switch (status) {\n case 'active':\n h.addClass(button, self.classNames.active);\n h.removeClass(button, self.classNames.disabled);\n\n if (self.canDisable) self.el.disabled = false;\n\n break;\n case 'inactive':\n h.removeClass(button, self.classNames.active);\n h.removeClass(button, self.classNames.disabled);\n\n if (self.canDisable) self.el.disabled = false;\n\n break;\n case 'disabled':\n if (self.canDisable) self.el.disabled = true;\n\n h.addClass(button, self.classNames.disabled);\n h.removeClass(button, self.classNames.active);\n\n break;\n }\n\n if (self.status !== 'live') {\n // Update the control's status propery if not live\n\n self.status = status;\n }\n\n self.callActions('afterRenderStatus', arguments);\n }\n });\n\n mixitup.controls = [];\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.StyleData = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.x = 0;\n this.y = 0;\n this.top = 0;\n this.right = 0;\n this.bottom = 0;\n this.left = 0;\n this.width = 0;\n this.height = 0;\n this.marginRight = 0;\n this.marginBottom = 0;\n this.opacity = 0;\n this.scale = new mixitup.TransformData();\n this.translateX = new mixitup.TransformData();\n this.translateY = new mixitup.TransformData();\n this.translateZ = new mixitup.TransformData();\n this.rotateX = new mixitup.TransformData();\n this.rotateY = new mixitup.TransformData();\n this.rotateZ = new mixitup.TransformData();\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.StyleData);\n\n mixitup.StyleData.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.StyleData.prototype.constructor = mixitup.StyleData;\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.TransformData = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.value = 0;\n this.unit = '';\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.TransformData);\n\n mixitup.TransformData.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.TransformData.prototype.constructor = mixitup.TransformData;\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.TransformDefaults = function() {\n mixitup.StyleData.apply(this);\n\n this.callActions('beforeConstruct');\n\n this.scale.value = 0.01;\n this.scale.unit = '';\n\n this.translateX.value = 20;\n this.translateX.unit = 'px';\n\n this.translateY.value = 20;\n this.translateY.unit = 'px';\n\n this.translateZ.value = 20;\n this.translateZ.unit = 'px';\n\n this.rotateX.value = 90;\n this.rotateX.unit = 'deg';\n\n this.rotateY.value = 90;\n this.rotateY.unit = 'deg';\n\n this.rotateX.value = 90;\n this.rotateX.unit = 'deg';\n\n this.rotateZ.value = 180;\n this.rotateZ.unit = 'deg';\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.TransformDefaults);\n\n mixitup.TransformDefaults.prototype = Object.create(mixitup.StyleData.prototype);\n\n mixitup.TransformDefaults.prototype.constructor = mixitup.TransformDefaults;\n\n /**\n * @private\n * @static\n * @since 3.0.0\n * @type {mixitup.TransformDefaults}\n */\n\n mixitup.transformDefaults = new mixitup.TransformDefaults();\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.EventDetail = function() {\n this.state = null;\n this.futureState = null;\n this.instance = null;\n this.originalEvent = null;\n };\n\n /**\n * The `mixitup.Events` class contains all custom events dispatched by MixItUp at various\n * points within the lifecycle of a mixer operation.\n *\n * Each event is analogous to the callback function of the same name defined in\n * the `callbacks` configuration object, and is triggered immediately before it.\n *\n * Events are always triggered from the container element on which MixItUp is instantiated\n * upon.\n *\n * As with any event, registered event handlers receive the event object as a parameter\n * which includes a `detail` property containting references to the current `state`,\n * the `mixer` instance, and other event-specific properties described below.\n *\n * @constructor\n * @namespace\n * @memberof mixitup\n * @public\n * @since 3.0.0\n */\n\n mixitup.Events = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * A custom event triggered immediately after any MixItUp operation is requested\n * and before animations have begun.\n *\n * The `mixStart` event also exposes a `futureState` property via the\n * `event.detail` object, which represents the final state of the mixer once\n * the requested operation has completed.\n *\n * @name mixStart\n * @memberof mixitup.Events\n * @static\n * @type {CustomEvent}\n */\n\n this.mixStart = null;\n\n /**\n * A custom event triggered when a MixItUp operation is requested while another\n * operation is in progress, and the animation queue is full, or queueing\n * is disabled.\n *\n * @name mixBusy\n * @memberof mixitup.Events\n * @static\n * @type {CustomEvent}\n */\n\n this.mixBusy = null;\n\n /**\n * A custom event triggered after any MixItUp operation has completed, and the\n * state has been updated.\n *\n * @name mixEnd\n * @memberof mixitup.Events\n * @static\n * @type {CustomEvent}\n */\n\n this.mixEnd = null;\n\n /**\n * A custom event triggered whenever a filter operation \"fails\", i.e. no targets\n * could be found matching the requested filter.\n *\n * @name mixFail\n * @memberof mixitup.Events\n * @static\n * @type {CustomEvent}\n */\n\n this.mixFail = null;\n\n /**\n * A custom event triggered whenever a MixItUp control is clicked, and before its\n * respective operation is requested.\n *\n * This event also exposes an `originalEvent` property via the `event.detail`\n * object, which holds a reference to the original click event.\n *\n * @name mixClick\n * @memberof mixitup.Events\n * @static\n * @type {CustomEvent}\n */\n\n this.mixClick = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.Events);\n\n mixitup.Events.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.Events.prototype.constructor = mixitup.Events;\n\n /**\n * @private\n * @param {string} eventType\n * @param {Element} el\n * @param {object} detail\n * @param {Document} [doc]\n */\n\n mixitup.Events.prototype.fire = function(eventType, el, detail, doc) {\n var self = this,\n event = null,\n eventDetail = new mixitup.EventDetail();\n\n self.callActions('beforeFire', arguments);\n\n if (typeof self[eventType] === 'undefined') {\n throw new Error('Event type \"' + eventType + '\" not found.');\n }\n\n eventDetail.state = new mixitup.State();\n\n h.extend(eventDetail.state, detail.state);\n\n if (detail.futureState) {\n eventDetail.futureState = new mixitup.State();\n\n h.extend(eventDetail.futureState, detail.futureState);\n }\n\n eventDetail.instance = detail.instance;\n\n if (detail.originalEvent) {\n eventDetail.originalEvent = detail.originalEvent;\n }\n\n event = h.getCustomEvent(eventType, eventDetail, doc);\n\n self.callFilters('eventFire', event, arguments);\n\n el.dispatchEvent(event);\n };\n\n // Asign a singleton instance to `mixitup.events`:\n\n mixitup.events = new mixitup.Events();\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.QueueItem = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.args = [];\n this.instruction = null;\n this.triggerElement = null;\n this.deferred = null;\n this.isToggling = false;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.QueueItem);\n\n mixitup.QueueItem.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.QueueItem.prototype.constructor = mixitup.QueueItem;\n\n /**\n * The `mixitup.Mixer` class is used to hold discreet, user-configured\n * instances of MixItUp on a provided container element.\n *\n * Mixer instances are returned whenever the `mixitup()` factory function is called,\n * which expose a range of methods enabling API-based filtering, sorting,\n * insertion, removal and more.\n *\n * @constructor\n * @namespace\n * @memberof mixitup\n * @public\n * @since 3.0.0\n */\n\n mixitup.Mixer = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.config = new mixitup.Config();\n\n this.id = '';\n\n this.isBusy = false;\n this.isToggling = false;\n this.incPadding = true;\n\n this.controls = [];\n this.targets = [];\n this.origOrder = [];\n this.cache = {};\n\n this.toggleArray = [];\n\n this.targetsMoved = 0;\n this.targetsImmovable = 0;\n this.targetsBound = 0;\n this.targetsDone = 0;\n\n this.staggerDuration = 0;\n this.effectsIn = null;\n this.effectsOut = null;\n this.transformIn = [];\n this.transformOut = [];\n this.queue = [];\n\n this.state = null;\n this.lastOperation = null;\n this.lastClicked = null;\n this.userCallback = null;\n this.userDeferred = null;\n\n this.dom = new mixitup.MixerDom();\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.Mixer);\n\n mixitup.Mixer.prototype = Object.create(mixitup.Base.prototype);\n\n h.extend(mixitup.Mixer.prototype,\n /** @lends mixitup.Mixer */\n {\n constructor: mixitup.Mixer,\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {HTMLElement} container\n * @param {HTMLElement} document\n * @param {string} id\n * @param {object} [config]\n */\n\n attach: function(container, document, id, config) {\n var self = this,\n target = null,\n i = -1;\n\n self.callActions('beforeAttach', arguments);\n\n self.id = id;\n\n if (config) {\n h.extend(self.config, config, true, true);\n }\n\n self.sanitizeConfig();\n\n self.cacheDom(container, document);\n\n if (self.config.layout.containerClassName) {\n h.addClass(self.dom.container, self.config.layout.containerClassName);\n }\n\n if (!mixitup.features.has.transitions) {\n self.config.animation.enable = false;\n }\n\n if (typeof window.console === 'undefined') {\n self.config.debug.showWarnings = false;\n }\n\n if (self.config.data.uidKey) {\n // If the dataset API is in use, force disable controls\n\n self.config.controls.enable = false;\n }\n\n self.indexTargets();\n\n self.state = self.getInitialState();\n\n for (i = 0; target = self.lastOperation.toHide[i]; i++) {\n target.hide();\n }\n\n if (self.config.controls.enable) {\n self.initControls();\n\n self.buildToggleArray(null, self.state);\n\n self.updateControls({\n filter: self.state.activeFilter,\n sort: self.state.activeSort\n });\n }\n\n self.parseEffects();\n\n self.callActions('afterAttach', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @return {void}\n */\n\n sanitizeConfig: function() {\n var self = this;\n\n self.callActions('beforeSanitizeConfig', arguments);\n\n // Sanitize enum/string config options\n\n self.config.controls.scope = self.config.controls.scope.toLowerCase().trim();\n self.config.controls.toggleLogic = self.config.controls.toggleLogic.toLowerCase().trim();\n self.config.controls.toggleDefault = self.config.controls.toggleDefault.toLowerCase().trim();\n\n self.config.animation.effects = self.config.animation.effects.trim();\n\n self.callActions('afterSanitizeConfig', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @return {mixitup.State}\n */\n\n getInitialState: function() {\n var self = this,\n state = new mixitup.State(),\n operation = new mixitup.Operation();\n\n self.callActions('beforeGetInitialState', arguments);\n\n // Map initial values into a mock state object in order to construct an operation\n\n state.activeContainerClassName = self.config.layout.containerClassName;\n\n if (self.config.load.dataset) {\n // Dataset API\n\n if (!self.config.data.uidKey || typeof self.config.data.uidKey !== 'string') {\n throw new TypeError(mixitup.messages.errorConfigDataUidKeyNotSet());\n }\n\n operation.startDataset = operation.newDataset = state.activeDataset = self.config.load.dataset.slice();\n operation.startContainerClassName = operation.newContainerClassName = state.activeContainerClassName;\n operation.show = self.targets.slice();\n\n state = self.callFilters('stateGetInitialState', state, arguments);\n } else {\n // DOM API\n\n state.activeFilter = self.parseFilterArgs([self.config.load.filter]).command;\n state.activeSort = self.parseSortArgs([self.config.load.sort]).command;\n state.totalTargets = self.targets.length;\n\n state = self.callFilters('stateGetInitialState', state, arguments);\n\n if (\n state.activeSort.collection || state.activeSort.attribute ||\n state.activeSort.order === 'random' || state.activeSort.order === 'desc'\n ) {\n // Sorting on load\n\n operation.newSort = state.activeSort;\n\n self.sortOperation(operation);\n\n self.printSort(false, operation);\n\n self.targets = operation.newOrder;\n } else {\n operation.startOrder = operation.newOrder = self.targets;\n }\n\n operation.startFilter = operation.newFilter = state.activeFilter;\n operation.startSort = operation.newSort = state.activeSort;\n operation.startContainerClassName = operation.newContainerClassName = state.activeContainerClassName;\n\n if (operation.newFilter.selector === 'all') {\n operation.newFilter.selector = self.config.selectors.target;\n } else if (operation.newFilter.selector === 'none') {\n operation.newFilter.selector = '';\n }\n }\n\n operation = self.callFilters('operationGetInitialState', operation, [state]);\n\n self.lastOperation = operation;\n\n if (operation.newFilter) {\n self.filterOperation(operation);\n }\n\n state = self.buildState(operation);\n\n return state;\n },\n\n /**\n * Caches references of DOM elements neccessary for the mixer's functionality.\n *\n * @private\n * @instance\n * @since 3.0.0\n * @param {HTMLElement} el\n * @param {HTMLHtmlElement} document\n * @return {void}\n */\n\n cacheDom: function(el, document) {\n var self = this;\n\n self.callActions('beforeCacheDom', arguments);\n\n self.dom.document = document;\n self.dom.body = self.dom.document.querySelector('body');\n self.dom.container = el;\n self.dom.parent = el;\n\n self.callActions('afterCacheDom', arguments);\n },\n\n /**\n * Indexes all child elements of the mixer matching the `selectors.target`\n * selector, instantiating a mixitup.Target for each one.\n *\n * @private\n * @instance\n * @since 3.0.0\n * @return {void}\n */\n\n indexTargets: function() {\n var self = this,\n target = null,\n el = null,\n dataset = null,\n i = -1;\n\n self.callActions('beforeIndexTargets', arguments);\n\n self.dom.targets = self.config.layout.allowNestedTargets ?\n self.dom.container.querySelectorAll(self.config.selectors.target) :\n h.children(self.dom.container, self.config.selectors.target, self.dom.document);\n\n self.dom.targets = h.arrayFromList(self.dom.targets);\n\n self.targets = [];\n\n if ((dataset = self.config.load.dataset) && dataset.length !== self.dom.targets.length) {\n throw new Error(mixitup.messages.errorDatasetPrerenderedMismatch());\n }\n\n if (self.dom.targets.length) {\n for (i = 0; el = self.dom.targets[i]; i++) {\n target = new mixitup.Target();\n\n target.init(el, self, dataset ? dataset[i] : void(0));\n\n target.isInDom = true;\n\n self.targets.push(target);\n }\n\n self.dom.parent = self.dom.targets[0].parentElement === self.dom.container ?\n self.dom.container :\n self.dom.targets[0].parentElement;\n }\n\n self.origOrder = self.targets;\n\n self.callActions('afterIndexTargets', arguments);\n },\n\n initControls: function() {\n var self = this,\n definition = '',\n controlElements = null,\n el = null,\n parent = null,\n delagators = null,\n control = null,\n i = -1,\n j = -1;\n\n self.callActions('beforeInitControls', arguments);\n\n switch (self.config.controls.scope) {\n case 'local':\n parent = self.dom.container;\n\n break;\n case 'global':\n parent = self.dom.document;\n\n break;\n default:\n throw new Error(mixitup.messages.errorConfigInvalidControlsScope());\n }\n\n for (i = 0; definition = mixitup.controlDefinitions[i]; i++) {\n if (self.config.controls.live || definition.live) {\n if (definition.parent) {\n delagators = self.dom[definition.parent];\n\n if (!delagators || delagators.length < 0) continue;\n\n if (typeof delagators.length !== 'number') {\n delagators = [delagators];\n }\n } else {\n delagators = [parent];\n }\n\n for (j = 0; (el = delagators[j]); j++) {\n control = self.getControl(el, definition.type, definition.selector);\n\n self.controls.push(control);\n }\n } else {\n controlElements = parent.querySelectorAll(self.config.selectors.control + definition.selector);\n\n for (j = 0; (el = controlElements[j]); j++) {\n control = self.getControl(el, definition.type, '');\n\n if (!control) continue;\n\n self.controls.push(control);\n }\n }\n }\n\n self.callActions('afterInitControls', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {HTMLElement} el\n * @param {string} type\n * @param {string} selector\n * @return {mixitup.Control|null}\n */\n\n getControl: function(el, type, selector) {\n var self = this,\n control = null,\n i = -1;\n\n self.callActions('beforeGetControl', arguments);\n\n if (!selector) {\n // Static controls only\n\n for (i = 0; control = mixitup.controls[i]; i++) {\n if (control.el === el && control.isBound(self)) {\n // Control already bound to this mixer (as another type).\n\n // NB: This prevents duplicate controls from being registered where a selector\n // might collide, eg: \"[data-filter]\" and \"[data-filter][data-sort]\"\n\n return self.callFilters('controlGetControl', null, arguments);\n } else if (control.el === el && control.type === type && control.selector === selector) {\n // Another mixer is already using this control, add this mixer as a binding\n\n control.addBinding(self);\n\n return self.callFilters('controlGetControl', control, arguments);\n }\n }\n }\n\n // Create new control\n\n control = new mixitup.Control();\n\n control.init(el, type, selector);\n\n control.classNames.base = h.getClassname(self.config.classNames, type);\n control.classNames.active = h.getClassname(self.config.classNames, type, self.config.classNames.modifierActive);\n control.classNames.disabled = h.getClassname(self.config.classNames, type, self.config.classNames.modifierDisabled);\n\n // Add a reference to this mixer as a binding\n\n control.addBinding(self);\n\n return self.callFilters('controlGetControl', control, arguments);\n },\n\n /**\n * Creates a compound selector by joining the `toggleArray` value as per the\n * defined toggle logic.\n *\n * @private\n * @instance\n * @since 3.0.0\n * @return {string}\n */\n\n getToggleSelector: function() {\n var self = this,\n delineator = self.config.controls.toggleLogic === 'or' ? ', ' : '',\n toggleSelector = '';\n\n self.callActions('beforeGetToggleSelector', arguments);\n\n self.toggleArray = h.clean(self.toggleArray);\n\n toggleSelector = self.toggleArray.join(delineator);\n\n if (toggleSelector === '') {\n toggleSelector = self.config.controls.toggleDefault;\n }\n\n return self.callFilters('selectorGetToggleSelector', toggleSelector, arguments);\n },\n\n /**\n * Breaks compound selector strings in an array of discreet selectors,\n * as per the active `controls.toggleLogic` configuration option. Accepts\n * either a dynamic command object, or a state object.\n *\n * @private\n * @instance\n * @since 2.0.0\n * @param {object} [command]\n * @param {mixitup.State} [state]\n * @return {void}\n */\n\n buildToggleArray: function(command, state) {\n var self = this,\n activeFilterSelector = '';\n\n self.callActions('beforeBuildToggleArray', arguments);\n\n if (command && command.filter) {\n activeFilterSelector = command.filter.selector.replace(/\\s/g, '');\n } else if (state) {\n activeFilterSelector = state.activeFilter.selector.replace(/\\s/g, '');\n } else {\n return;\n }\n\n if (activeFilterSelector === self.config.selectors.target || activeFilterSelector === 'all') {\n activeFilterSelector = '';\n }\n\n if (self.config.controls.toggleLogic === 'or') {\n self.toggleArray = activeFilterSelector.split(',');\n } else {\n self.toggleArray = self.splitCompoundSelector(activeFilterSelector);\n }\n\n self.toggleArray = h.clean(self.toggleArray);\n\n self.callActions('afterBuildToggleArray', arguments);\n },\n\n /**\n * Takes a compound selector (e.g. `.cat-1.cat-2`, `[data-cat=\"1\"][data-cat=\"2\"]`)\n * and breaks into its individual selectors.\n *\n * @private\n * @instance\n * @since 3.0.0\n * @param {string} compoundSelector\n * @return {string[]}\n */\n\n splitCompoundSelector: function(compoundSelector) {\n // Break at a `.` or `[`, capturing the delineator\n\n var partials = compoundSelector.split(/([\\.\\[])/g),\n toggleArray = [],\n selector = '',\n i = -1;\n\n if (partials[0] === '') {\n partials.shift();\n }\n\n for (i = 0; i < partials.length; i++) {\n if (i % 2 === 0) {\n selector = '';\n }\n\n selector += partials[i];\n\n if (i % 2 !== 0) {\n toggleArray.push(selector);\n }\n }\n\n return toggleArray;\n },\n\n /**\n * Updates controls to their active/inactive state based on the command or\n * current state of the mixer.\n *\n * @private\n * @instance\n * @since 2.0.0\n * @param {object} command\n * @return {void}\n */\n\n updateControls: function(command) {\n var self = this,\n control = null,\n output = new mixitup.CommandMultimix(),\n i = -1;\n\n self.callActions('beforeUpdateControls', arguments);\n\n // Sanitise to defaults\n\n if (command.filter) {\n output.filter = command.filter.selector;\n } else {\n output.filter = self.state.activeFilter.selector;\n }\n\n if (command.sort) {\n output.sort = self.buildSortString(command.sort);\n } else {\n output.sort = self.buildSortString(self.state.activeSort);\n }\n\n if (output.filter === self.config.selectors.target) {\n output.filter = 'all';\n }\n\n if (output.filter === '') {\n output.filter = 'none';\n }\n\n h.freeze(output);\n\n for (i = 0; control = self.controls[i]; i++) {\n control.update(output, self.toggleArray);\n }\n\n self.callActions('afterUpdateControls', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {mixitup.CommandSort} command\n * @return {string}\n */\n\n buildSortString: function(command) {\n var self = this;\n var output = '';\n\n output += command.sortString;\n\n if (command.next) {\n output += ' ' + self.buildSortString(command.next);\n }\n\n return output;\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {object} command\n * @param {Operation} operation\n * @return {Promise.}\n */\n\n insertTargets: function(command, operation) {\n var self = this,\n nextSibling = null,\n insertionIndex = -1,\n frag = null,\n target = null,\n el = null,\n i = -1;\n\n self.callActions('beforeInsertTargets', arguments);\n\n if (typeof command.index === 'undefined') command.index = 0;\n\n nextSibling = self.getNextSibling(command.index, command.sibling, command.position);\n frag = self.dom.document.createDocumentFragment();\n\n if (nextSibling) {\n insertionIndex = h.index(nextSibling, self.config.selectors.target);\n } else {\n insertionIndex = self.targets.length;\n }\n\n if (command.collection) {\n for (i = 0; el = command.collection[i]; i++) {\n if (self.dom.targets.indexOf(el) > -1) {\n throw new Error(mixitup.messages.errorInsertPreexistingElement());\n }\n\n // Ensure elements are hidden when they are added to the DOM, so they can\n // be animated in gracefully\n\n el.style.display = 'none';\n\n frag.appendChild(el);\n frag.appendChild(self.dom.document.createTextNode(' '));\n\n if (!h.isElement(el, self.dom.document) || !el.matches(self.config.selectors.target)) continue;\n\n target = new mixitup.Target();\n\n target.init(el, self);\n\n target.isInDom = true;\n\n self.targets.splice(insertionIndex, 0, target);\n\n insertionIndex++;\n }\n\n self.dom.parent.insertBefore(frag, nextSibling);\n }\n\n // Since targets have been added, the original order must be updated\n\n operation.startOrder = self.origOrder = self.targets;\n\n self.callActions('afterInsertTargets', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {Number} [index]\n * @param {Element} [sibling]\n * @param {string} [position]\n * @return {Element}\n */\n\n getNextSibling: function(index, sibling, position) {\n var self = this,\n element = null;\n\n index = Math.max(index, 0);\n\n if (sibling && position === 'before') {\n // Explicit sibling\n\n element = sibling;\n } else if (sibling && position === 'after') {\n // Explicit sibling\n\n element = sibling.nextElementSibling || null;\n } else if (self.targets.length > 0 && typeof index !== 'undefined') {\n // Index and targets exist\n\n element = (index < self.targets.length || !self.targets.length) ?\n self.targets[index].dom.el :\n self.targets[self.targets.length - 1].dom.el.nextElementSibling;\n } else if (self.targets.length === 0 && self.dom.parent.children.length > 0) {\n // No targets but other siblings\n\n if (self.config.layout.siblingAfter) {\n element = self.config.layout.siblingAfter;\n } else if (self.config.layout.siblingBefore) {\n element = self.config.layout.siblingBefore.nextElementSibling;\n } else {\n self.dom.parent.children[0];\n }\n } else {\n element === null;\n }\n\n return self.callFilters('elementGetNextSibling', element, arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Operation} operation\n * @return {void}\n */\n\n filterOperation: function(operation) {\n var self = this,\n testResult = false,\n index = -1,\n action = '',\n target = null,\n i = -1;\n\n self.callActions('beforeFilterOperation', arguments);\n\n action = operation.newFilter.action;\n\n for (i = 0; target = operation.newOrder[i]; i++) {\n if (operation.newFilter.collection) {\n // show via collection\n\n testResult = operation.newFilter.collection.indexOf(target.dom.el) > -1;\n } else {\n // show via selector\n\n if (operation.newFilter.selector === '') {\n testResult = false;\n } else {\n testResult = target.dom.el.matches(operation.newFilter.selector);\n }\n }\n\n self.evaluateHideShow(testResult, target, action, operation);\n }\n\n if (operation.toRemove.length) {\n for (i = 0; target = operation.show[i]; i++) {\n if (operation.toRemove.indexOf(target) > -1) {\n // If any shown targets should be removed, move them into the toHide array\n\n operation.show.splice(i, 1);\n\n if ((index = operation.toShow.indexOf(target)) > -1) {\n operation.toShow.splice(index, 1);\n }\n\n operation.toHide.push(target);\n operation.hide.push(target);\n\n i--;\n }\n }\n }\n\n operation.matching = operation.show.slice();\n\n if (operation.show.length === 0 && operation.newFilter.selector !== '' && self.targets.length !== 0) {\n operation.hasFailed = true;\n }\n\n self.callActions('afterFilterOperation', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {boolean} testResult\n * @param {Element} target\n * @param {string} action\n * @param {Operation} operation\n * @return {void}\n */\n\n evaluateHideShow: function(testResult, target, action, operation) {\n var self = this,\n filteredTestResult = false,\n args = Array.prototype.slice.call(arguments, 1);\n\n filteredTestResult = self.callFilters('testResultEvaluateHideShow', testResult, args);\n\n self.callActions('beforeEvaluateHideShow', arguments);\n\n if (\n filteredTestResult === true && action === 'show' ||\n filteredTestResult === false && action === 'hide'\n ) {\n operation.show.push(target);\n\n !target.isShown && operation.toShow.push(target);\n } else {\n operation.hide.push(target);\n\n target.isShown && operation.toHide.push(target);\n }\n\n self.callActions('afterEvaluateHideShow', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Operation} operation\n * @return {void}\n */\n\n sortOperation: function(operation) {\n var self = this,\n newOrder = [],\n target = null,\n el = null,\n i = -1;\n\n self.callActions('beforeSortOperation', arguments);\n\n operation.startOrder = self.targets;\n\n if (operation.newSort.collection) {\n // Sort by collection\n\n newOrder = [];\n\n for (i = 0; (el = operation.newSort.collection[i]); i++) {\n if (self.dom.targets.indexOf(el) < 0) {\n throw new Error(mixitup.messages.errorSortNonExistentElement());\n }\n\n target = new mixitup.Target();\n\n target.init(el, self);\n\n target.isInDom = true;\n\n newOrder.push(target);\n }\n\n operation.newOrder = newOrder;\n } else if (operation.newSort.order === 'random') {\n // Sort random\n\n operation.newOrder = h.arrayShuffle(operation.startOrder);\n } else if (operation.newSort.attribute === '') {\n // Sort by default\n\n operation.newOrder = self.origOrder.slice();\n\n if (operation.newSort.order === 'desc') {\n operation.newOrder.reverse();\n }\n } else {\n // Sort by attribute\n\n operation.newOrder = operation.startOrder.slice();\n\n operation.newOrder.sort(function(a, b) {\n return self.compare(a, b, operation.newSort);\n });\n }\n\n if (h.isEqualArray(operation.newOrder, operation.startOrder)) {\n operation.willSort = false;\n }\n\n self.callActions('afterSortOperation', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {mixitup.Target} a\n * @param {mixitup.Target} b\n * @param {mixitup.CommandSort} command\n * @return {Number}\n */\n\n compare: function(a, b, command) {\n var self = this,\n order = command.order,\n attrA = self.getAttributeValue(a, command.attribute),\n attrB = self.getAttributeValue(b, command.attribute);\n\n if (isNaN(attrA * 1) || isNaN(attrB * 1)) {\n attrA = attrA.toLowerCase();\n attrB = attrB.toLowerCase();\n } else {\n attrA = attrA * 1;\n attrB = attrB * 1;\n }\n\n if (attrA < attrB) {\n return order === 'asc' ? -1 : 1;\n }\n\n if (attrA > attrB) {\n return order === 'asc' ? 1 : -1;\n }\n\n if (attrA === attrB && command.next) {\n return self.compare(a, b, command.next);\n }\n\n return 0;\n },\n\n /**\n * Reads the values of any data attributes present the provided target element\n * which match the current sort command.\n *\n * @private\n * @instance\n * @since 3.0.0\n * @param {mixitup.Target} target\n * @param {string} [attribute]\n * @return {(String|Number)}\n */\n\n getAttributeValue: function(target, attribute) {\n var self = this,\n value = '';\n\n value = target.dom.el.getAttribute('data-' + attribute);\n\n if (value === null) {\n if (self.config.debug.showWarnings) {\n // Encourage users to assign values to all targets to avoid erroneous sorting\n // when types are mixed\n\n console.warn(mixitup.messages.warningInconsistentSortingAttributes({\n attribute: 'data-' + attribute\n }));\n }\n }\n\n // If an attribute is not present, return 0 as a safety value\n\n return self.callFilters('valueGetAttributeValue', value || 0, arguments);\n },\n\n /**\n * Inserts elements into the DOM in the appropriate\n * order using a document fragment for minimal\n * DOM thrashing\n *\n * @private\n * @instance\n * @since 2.0.0\n * @param {boolean} isResetting\n * @param {Operation} operation\n * @return {void}\n */\n\n printSort: function(isResetting, operation) {\n var self = this,\n startOrder = isResetting ? operation.newOrder : operation.startOrder,\n newOrder = isResetting ? operation.startOrder : operation.newOrder,\n nextSibling = startOrder.length ? startOrder[startOrder.length - 1].dom.el.nextElementSibling : null,\n frag = window.document.createDocumentFragment(),\n whitespace = null,\n target = null,\n el = null,\n i = -1;\n\n self.callActions('beforePrintSort', arguments);\n\n // Empty the container\n\n for (i = 0; target = startOrder[i]; i++) {\n el = target.dom.el;\n\n if (el.style.position === 'absolute') continue;\n\n h.removeWhitespace(el.previousSibling);\n\n el.parentElement.removeChild(el);\n }\n\n whitespace = nextSibling ? nextSibling.previousSibling : self.dom.parent.lastChild;\n\n if (whitespace && whitespace.nodeName === '#text') {\n h.removeWhitespace(whitespace);\n }\n\n for (i = 0; target = newOrder[i]; i++) {\n // Add targets into a document fragment\n\n el = target.dom.el;\n\n if (h.isElement(frag.lastChild)) {\n frag.appendChild(window.document.createTextNode(' '));\n }\n\n frag.appendChild(el);\n }\n\n // Insert the document fragment into the container\n // before any other non-target elements\n\n if (self.dom.parent.firstChild && self.dom.parent.firstChild !== nextSibling) {\n frag.insertBefore(window.document.createTextNode(' '), frag.childNodes[0]);\n }\n\n if (nextSibling) {\n frag.appendChild(window.document.createTextNode(' '));\n\n self.dom.parent.insertBefore(frag, nextSibling);\n } else {\n self.dom.parent.appendChild(frag);\n }\n\n self.callActions('afterPrintSort', arguments);\n },\n\n /**\n * Parses user-defined sort strings (i.e. `default:asc`) into sort commands objects.\n *\n * @private\n * @instance\n * @since 3.0.0\n * @param {string} sortString\n * @param {mixitup.CommandSort} command\n * @return {mixitup.CommandSort}\n */\n\n parseSortString: function(sortString, command) {\n var self = this,\n rules = sortString.split(' '),\n current = command,\n rule = [],\n i = -1;\n\n // command.sortString = sortString;\n\n for (i = 0; i < rules.length; i++) {\n rule = rules[i].split(':');\n\n current.sortString = rules[i];\n current.attribute = h.dashCase(rule[0]);\n current.order = rule[1] || 'asc';\n\n switch (current.attribute) {\n case 'default':\n // treat \"default\" as sorting by no attribute\n\n current.attribute = '';\n\n break;\n case 'random':\n // treat \"random\" as an order not an attribute\n\n current.attribute = '';\n current.order = 'random';\n\n break;\n }\n\n if (!current.attribute || current.order === 'random') break;\n\n if (i < rules.length - 1) {\n // Embed reference to the next command\n\n current.next = new mixitup.CommandSort();\n\n h.freeze(current);\n\n current = current.next;\n }\n }\n\n return self.callFilters('commandsParseSort', command, arguments);\n },\n\n /**\n * Parses all effects out of the user-defined `animation.effects` string into\n * their respective properties and units.\n *\n * @private\n * @instance\n * @since 2.0.0\n * @return {void}\n */\n\n parseEffects: function() {\n var self = this,\n transformName = '',\n effectsIn = self.config.animation.effectsIn || self.config.animation.effects,\n effectsOut = self.config.animation.effectsOut || self.config.animation.effects;\n\n self.callActions('beforeParseEffects', arguments);\n\n self.effectsIn = new mixitup.StyleData();\n self.effectsOut = new mixitup.StyleData();\n self.transformIn = [];\n self.transformOut = [];\n\n self.effectsIn.opacity = self.effectsOut.opacity = 1;\n\n self.parseEffect('fade', effectsIn, self.effectsIn, self.transformIn);\n self.parseEffect('fade', effectsOut, self.effectsOut, self.transformOut, true);\n\n for (transformName in mixitup.transformDefaults) {\n if (!(mixitup.transformDefaults[transformName] instanceof mixitup.TransformData)) {\n continue;\n }\n\n self.parseEffect(transformName, effectsIn, self.effectsIn, self.transformIn);\n self.parseEffect(transformName, effectsOut, self.effectsOut, self.transformOut, true);\n }\n\n self.parseEffect('stagger', effectsIn, self.effectsIn, self.transformIn);\n self.parseEffect('stagger', effectsOut, self.effectsOut, self.transformOut, true);\n\n self.callActions('afterParseEffects', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {string} effectName\n * @param {string} effectString\n * @param {StyleData} effects\n * @param {String[]} transform\n * @param {boolean} [isOut]\n */\n\n parseEffect: function(effectName, effectString, effects, transform, isOut) {\n var self = this,\n re = /\\(([^)]+)\\)/,\n propIndex = -1,\n str = '',\n match = [],\n val = '',\n units = ['%', 'px', 'em', 'rem', 'vh', 'vw', 'deg'],\n unit = '',\n i = -1;\n\n self.callActions('beforeParseEffect', arguments);\n\n if (typeof effectString !== 'string') {\n throw new TypeError(mixitup.messages.errorConfigInvalidAnimationEffects());\n }\n\n if (effectString.indexOf(effectName) < 0) {\n // The effect is not present in the effects string\n\n if (effectName === 'stagger') {\n // Reset stagger to 0\n\n self.staggerDuration = 0;\n }\n\n return;\n }\n\n // The effect is present\n\n propIndex = effectString.indexOf(effectName + '(');\n\n if (propIndex > -1) {\n // The effect has a user defined value in parentheses\n\n // Extract from the first parenthesis to the end of string\n\n str = effectString.substring(propIndex);\n\n // Match any number of characters between \"(\" and \")\"\n\n match = re.exec(str);\n\n val = match[1];\n }\n\n switch (effectName) {\n case 'fade':\n effects.opacity = val ? parseFloat(val) : 0;\n\n break;\n case 'stagger':\n self.staggerDuration = val ? parseFloat(val) : 100;\n\n // TODO: Currently stagger must be applied globally, but\n // if seperate values are specified for in/out, this should\n // be respected\n\n break;\n default:\n // All other effects are transforms following the same structure\n\n if (isOut && self.config.animation.reverseOut && effectName !== 'scale') {\n effects[effectName].value =\n (val ? parseFloat(val) : mixitup.transformDefaults[effectName].value) * -1;\n } else {\n effects[effectName].value =\n (val ? parseFloat(val) : mixitup.transformDefaults[effectName].value);\n }\n\n if (val) {\n for (i = 0; unit = units[i]; i++) {\n if (val.indexOf(unit) > -1) {\n effects[effectName].unit = unit;\n\n break;\n }\n }\n } else {\n effects[effectName].unit = mixitup.transformDefaults[effectName].unit;\n }\n\n transform.push(\n effectName +\n '(' +\n effects[effectName].value +\n effects[effectName].unit +\n ')'\n );\n }\n\n self.callActions('afterParseEffect', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Operation} operation\n * @return {State}\n */\n\n buildState: function(operation) {\n var self = this,\n state = new mixitup.State(),\n target = null,\n i = -1;\n\n self.callActions('beforeBuildState', arguments);\n\n // Map target elements into state arrays.\n // the real target objects should never be exposed\n\n for (i = 0; target = self.targets[i]; i++) {\n if (!operation.toRemove.length || operation.toRemove.indexOf(target) < 0) {\n state.targets.push(target.dom.el);\n }\n }\n\n for (i = 0; target = operation.matching[i]; i++) {\n state.matching.push(target.dom.el);\n }\n\n for (i = 0; target = operation.show[i]; i++) {\n state.show.push(target.dom.el);\n }\n\n for (i = 0; target = operation.hide[i]; i++) {\n if (!operation.toRemove.length || operation.toRemove.indexOf(target) < 0) {\n state.hide.push(target.dom.el);\n }\n }\n\n state.id = self.id;\n state.container = self.dom.container;\n state.activeFilter = operation.newFilter;\n state.activeSort = operation.newSort;\n state.activeDataset = operation.newDataset;\n state.activeContainerClassName = operation.newContainerClassName;\n state.hasFailed = operation.hasFailed;\n state.totalTargets = self.targets.length;\n state.totalShow = operation.show.length;\n state.totalHide = operation.hide.length;\n state.totalMatching = operation.matching.length;\n state.triggerElement = operation.triggerElement;\n\n return self.callFilters('stateBuildState', state, arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {boolean} shouldAnimate\n * @param {Operation} operation\n * @return {void}\n */\n\n goMix: function(shouldAnimate, operation) {\n var self = this,\n deferred = null;\n\n self.callActions('beforeGoMix', arguments);\n\n // If the animation duration is set to 0ms,\n // or no effects specified,\n // or the container is hidden\n // then abort animation\n\n if (\n !self.config.animation.duration || !self.config.animation.effects || !h.isVisible(self.dom.container)\n ) {\n shouldAnimate = false;\n }\n\n if (\n !operation.toShow.length &&\n !operation.toHide.length &&\n !operation.willSort &&\n !operation.willChangeLayout\n ) {\n // If nothing to show or hide, and not sorting or\n // changing layout\n\n shouldAnimate = false;\n }\n\n if (\n !operation.startState.show.length &&\n !operation.show.length\n ) {\n // If nothing currently shown, nothing to show\n\n shouldAnimate = false;\n }\n\n mixitup.events.fire('mixStart', self.dom.container, {\n state: operation.startState,\n futureState: operation.newState,\n instance: self\n }, self.dom.document);\n\n if (typeof self.config.callbacks.onMixStart === 'function') {\n self.config.callbacks.onMixStart.call(\n self.dom.container,\n operation.startState,\n operation.newState,\n self\n );\n }\n\n h.removeClass(self.dom.container, h.getClassname(self.config.classNames, 'container', self.config.classNames.modifierFailed));\n\n if (!self.userDeferred) {\n // Queue empty, no pending operations\n\n deferred = self.userDeferred = h.defer(mixitup.libraries);\n } else {\n // Use existing deferred\n\n deferred = self.userDeferred;\n }\n\n self.isBusy = true;\n\n if (!shouldAnimate || !mixitup.features.has.transitions) {\n // Abort\n\n if (self.config.debug.fauxAsync) {\n setTimeout(function() {\n self.cleanUp(operation);\n }, self.config.animation.duration);\n } else {\n self.cleanUp(operation);\n }\n\n return self.callFilters('promiseGoMix', deferred.promise, arguments);\n }\n\n // If we should animate and the platform supports transitions, go for it\n\n if (window.pageYOffset !== operation.docState.scrollTop) {\n window.scrollTo(operation.docState.scrollLeft, operation.docState.scrollTop);\n }\n\n if (self.config.animation.applyPerspective) {\n self.dom.parent.style[mixitup.features.perspectiveProp] =\n self.config.animation.perspectiveDistance;\n\n self.dom.parent.style[mixitup.features.perspectiveOriginProp] =\n self.config.animation.perspectiveOrigin;\n }\n\n if (\n self.config.animation.animateResizeContainer &&\n operation.startHeight !== operation.newHeight &&\n operation.viewportDeltaY !== operation.startHeight - operation.newHeight\n ) {\n self.dom.parent.style.height = operation.startHeight + 'px';\n }\n\n if (\n self.config.animation.animateResizeContainer &&\n operation.startWidth !== operation.newWidth &&\n operation.viewportDeltaX !== operation.startWidth - operation.newWidth\n ) {\n self.dom.parent.style.width = operation.startWidth + 'px';\n }\n\n if (operation.startHeight === operation.newHeight) {\n self.dom.parent.style.height = operation.startHeight + 'px';\n }\n\n if (operation.startWidth === operation.newWidth) {\n self.dom.parent.style.width = operation.startWidth + 'px';\n }\n\n if (operation.startHeight === operation.newHeight && operation.startWidth === operation.newWidth) {\n self.dom.parent.style.overflow = 'hidden';\n }\n\n requestAnimationFrame(function() {\n self.moveTargets(operation);\n });\n\n return self.callFilters('promiseGoMix', deferred.promise, arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Operation} operation\n * @return {void}\n */\n\n getStartMixData: function(operation) {\n var self = this,\n parentStyle = window.getComputedStyle(self.dom.parent),\n parentRect = self.dom.parent.getBoundingClientRect(),\n target = null,\n data = {},\n i = -1,\n boxSizing = parentStyle[mixitup.features.boxSizingProp];\n\n self.incPadding = (boxSizing === 'border-box');\n\n self.callActions('beforeGetStartMixData', arguments);\n\n for (i = 0; target = operation.show[i]; i++) {\n data = target.getPosData();\n\n operation.showPosData[i] = {\n startPosData: data\n };\n }\n\n for (i = 0; target = operation.toHide[i]; i++) {\n data = target.getPosData();\n\n operation.toHidePosData[i] = {\n startPosData: data\n };\n }\n\n operation.startX = parentRect.left;\n operation.startY = parentRect.top;\n\n operation.startHeight = self.incPadding ?\n parentRect.height :\n parentRect.height -\n parseFloat(parentStyle.paddingTop) -\n parseFloat(parentStyle.paddingBottom) -\n parseFloat(parentStyle.borderTop) -\n parseFloat(parentStyle.borderBottom);\n\n operation.startWidth = self.incPadding ?\n parentRect.width :\n parentRect.width -\n parseFloat(parentStyle.paddingLeft) -\n parseFloat(parentStyle.paddingRight) -\n parseFloat(parentStyle.borderLeft) -\n parseFloat(parentStyle.borderRight);\n\n self.callActions('afterGetStartMixData', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Operation} operation\n * @return {void}\n */\n\n setInter: function(operation) {\n var self = this,\n target = null,\n i = -1;\n\n self.callActions('beforeSetInter', arguments);\n\n // Prevent scrollbar flicker on non-inertial scroll platforms by clamping height/width\n\n if (self.config.animation.clampHeight) {\n self.dom.parent.style.height = operation.startHeight + 'px';\n self.dom.parent.style.overflow = 'hidden';\n }\n\n if (self.config.animation.clampWidth) {\n self.dom.parent.style.width = operation.startWidth + 'px';\n self.dom.parent.style.overflow = 'hidden';\n }\n\n for (i = 0; target = operation.toShow[i]; i++) {\n target.show();\n }\n\n if (operation.willChangeLayout) {\n h.removeClass(self.dom.container, operation.startContainerClassName);\n h.addClass(self.dom.container, operation.newContainerClassName);\n }\n\n self.callActions('afterSetInter', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Operation} operation\n * @return {void}\n */\n\n getInterMixData: function(operation) {\n var self = this,\n target = null,\n i = -1;\n\n self.callActions('beforeGetInterMixData', arguments);\n\n for (i = 0; target = operation.show[i]; i++) {\n operation.showPosData[i].interPosData = target.getPosData();\n }\n\n for (i = 0; target = operation.toHide[i]; i++) {\n operation.toHidePosData[i].interPosData = target.getPosData();\n }\n\n self.callActions('afterGetInterMixData', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Operation} operation\n * @return {void}\n */\n\n setFinal: function(operation) {\n var self = this,\n target = null,\n i = -1;\n\n self.callActions('beforeSetFinal', arguments);\n\n operation.willSort && self.printSort(false, operation);\n\n for (i = 0; target = operation.toHide[i]; i++) {\n target.hide();\n }\n\n self.callActions('afterSetFinal', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Operation} operation\n * @return {void}\n */\n\n getFinalMixData: function(operation) {\n var self = this,\n parentStyle = null,\n parentRect = null,\n target = null,\n i = -1;\n\n self.callActions('beforeGetFinalMixData', arguments);\n\n for (i = 0; target = operation.show[i]; i++) {\n operation.showPosData[i].finalPosData = target.getPosData();\n }\n\n for (i = 0; target = operation.toHide[i]; i++) {\n operation.toHidePosData[i].finalPosData = target.getPosData();\n }\n\n // Remove clamping\n\n if (self.config.animation.clampHeight || self.config.animation.clampWidth) {\n self.dom.parent.style.height =\n self.dom.parent.style.width =\n self.dom.parent.style.overflow = '';\n }\n\n if (!self.incPadding) {\n parentStyle = window.getComputedStyle(self.dom.parent);\n }\n\n parentRect = self.dom.parent.getBoundingClientRect();\n\n operation.newX = parentRect.left;\n operation.newY = parentRect.top;\n\n operation.newHeight = self.incPadding ?\n parentRect.height :\n parentRect.height -\n parseFloat(parentStyle.paddingTop) -\n parseFloat(parentStyle.paddingBottom) -\n parseFloat(parentStyle.borderTop) -\n parseFloat(parentStyle.borderBottom);\n\n operation.newWidth = self.incPadding ?\n parentRect.width :\n parentRect.width -\n parseFloat(parentStyle.paddingLeft) -\n parseFloat(parentStyle.paddingRight) -\n parseFloat(parentStyle.borderLeft) -\n parseFloat(parentStyle.borderRight);\n\n operation.viewportDeltaX = operation.docState.viewportWidth - this.dom.document.documentElement.clientWidth;\n operation.viewportDeltaY = operation.docState.viewportHeight - this.dom.document.documentElement.clientHeight;\n\n if (operation.willSort) {\n self.printSort(true, operation);\n }\n\n for (i = 0; target = operation.toShow[i]; i++) {\n target.hide();\n }\n\n for (i = 0; target = operation.toHide[i]; i++) {\n target.show();\n }\n\n if (operation.willChangeLayout) {\n h.removeClass(self.dom.container, operation.newContainerClassName);\n h.addClass(self.dom.container, self.config.layout.containerClassName);\n }\n\n self.callActions('afterGetFinalMixData', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {Operation} operation\n */\n\n getTweenData: function(operation) {\n var self = this,\n target = null,\n posData = null,\n effectNames = Object.getOwnPropertyNames(self.effectsIn),\n effectName = '',\n effect = null,\n widthChange = -1,\n heightChange = -1,\n i = -1,\n j = -1;\n\n self.callActions('beforeGetTweenData', arguments);\n\n for (i = 0; target = operation.show[i]; i++) {\n posData = operation.showPosData[i];\n posData.posIn = new mixitup.StyleData();\n posData.posOut = new mixitup.StyleData();\n posData.tweenData = new mixitup.StyleData();\n\n // Process x and y\n\n if (target.isShown) {\n posData.posIn.x = posData.startPosData.x - posData.interPosData.x;\n posData.posIn.y = posData.startPosData.y - posData.interPosData.y;\n } else {\n posData.posIn.x = posData.posIn.y = 0;\n }\n\n posData.posOut.x = posData.finalPosData.x - posData.interPosData.x;\n posData.posOut.y = posData.finalPosData.y - posData.interPosData.y;\n\n // Process opacity\n\n posData.posIn.opacity = target.isShown ? 1 : self.effectsIn.opacity;\n posData.posOut.opacity = 1;\n posData.tweenData.opacity = posData.posOut.opacity - posData.posIn.opacity;\n\n // Adjust x and y if not nudging\n\n if (!target.isShown && !self.config.animation.nudge) {\n posData.posIn.x = posData.posOut.x;\n posData.posIn.y = posData.posOut.y;\n }\n\n posData.tweenData.x = posData.posOut.x - posData.posIn.x;\n posData.tweenData.y = posData.posOut.y - posData.posIn.y;\n\n // Process width, height, and margins\n\n if (self.config.animation.animateResizeTargets) {\n posData.posIn.width = posData.startPosData.width;\n posData.posIn.height = posData.startPosData.height;\n\n // \"||\" Prevents width/height change from including 0 width/height if hiding or showing\n\n widthChange = (posData.startPosData.width || posData.finalPosData.width) - posData.interPosData.width;\n\n posData.posIn.marginRight = posData.startPosData.marginRight - widthChange;\n\n heightChange = (posData.startPosData.height || posData.finalPosData.height) - posData.interPosData.height;\n\n posData.posIn.marginBottom = posData.startPosData.marginBottom - heightChange;\n\n posData.posOut.width = posData.finalPosData.width;\n posData.posOut.height = posData.finalPosData.height;\n\n widthChange = (posData.finalPosData.width || posData.startPosData.width) - posData.interPosData.width;\n\n posData.posOut.marginRight = posData.finalPosData.marginRight - widthChange;\n\n heightChange = (posData.finalPosData.height || posData.startPosData.height) - posData.interPosData.height;\n\n posData.posOut.marginBottom = posData.finalPosData.marginBottom - heightChange;\n\n posData.tweenData.width = posData.posOut.width - posData.posIn.width;\n posData.tweenData.height = posData.posOut.height - posData.posIn.height;\n posData.tweenData.marginRight = posData.posOut.marginRight - posData.posIn.marginRight;\n posData.tweenData.marginBottom = posData.posOut.marginBottom - posData.posIn.marginBottom;\n }\n\n // Process transforms\n\n for (j = 0; effectName = effectNames[j]; j++) {\n effect = self.effectsIn[effectName];\n\n if (!(effect instanceof mixitup.TransformData) || !effect.value) continue;\n\n posData.posIn[effectName].value = effect.value;\n posData.posOut[effectName].value = 0;\n\n posData.tweenData[effectName].value =\n posData.posOut[effectName].value - posData.posIn[effectName].value;\n\n posData.posIn[effectName].unit =\n posData.posOut[effectName].unit =\n posData.tweenData[effectName].unit =\n effect.unit;\n }\n }\n\n for (i = 0; target = operation.toHide[i]; i++) {\n posData = operation.toHidePosData[i];\n posData.posIn = new mixitup.StyleData();\n posData.posOut = new mixitup.StyleData();\n posData.tweenData = new mixitup.StyleData();\n\n // Process x and y\n\n posData.posIn.x = target.isShown ? posData.startPosData.x - posData.interPosData.x : 0;\n posData.posIn.y = target.isShown ? posData.startPosData.y - posData.interPosData.y : 0;\n posData.posOut.x = self.config.animation.nudge ? 0 : posData.posIn.x;\n posData.posOut.y = self.config.animation.nudge ? 0 : posData.posIn.y;\n posData.tweenData.x = posData.posOut.x - posData.posIn.x;\n posData.tweenData.y = posData.posOut.y - posData.posIn.y;\n\n // Process width, height, and margins\n\n if (self.config.animation.animateResizeTargets) {\n posData.posIn.width = posData.startPosData.width;\n posData.posIn.height = posData.startPosData.height;\n\n widthChange = posData.startPosData.width - posData.interPosData.width;\n\n posData.posIn.marginRight = posData.startPosData.marginRight - widthChange;\n\n heightChange = posData.startPosData.height - posData.interPosData.height;\n\n posData.posIn.marginBottom = posData.startPosData.marginBottom - heightChange;\n }\n\n // Process opacity\n\n posData.posIn.opacity = 1;\n posData.posOut.opacity = self.effectsOut.opacity;\n posData.tweenData.opacity = posData.posOut.opacity - posData.posIn.opacity;\n\n // Process transforms\n\n for (j = 0; effectName = effectNames[j]; j++) {\n effect = self.effectsOut[effectName];\n\n if (!(effect instanceof mixitup.TransformData) || !effect.value) continue;\n\n posData.posIn[effectName].value = 0;\n posData.posOut[effectName].value = effect.value;\n\n posData.tweenData[effectName].value =\n posData.posOut[effectName].value - posData.posIn[effectName].value;\n\n posData.posIn[effectName].unit =\n posData.posOut[effectName].unit =\n posData.tweenData[effectName].unit =\n effect.unit;\n }\n }\n\n self.callActions('afterGetTweenData', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {Operation} operation\n * @return {void}\n */\n\n moveTargets: function(operation) {\n var self = this,\n target = null,\n moveData = null,\n posData = null,\n statusChange = '',\n willTransition = false,\n staggerIndex = -1,\n i = -1,\n checkProgress = self.checkProgress.bind(self);\n\n self.callActions('beforeMoveTargets', arguments);\n\n // TODO: this is an extra loop in addition to the calcs\n // done in getOperation, could some of this be done there?\n\n for (i = 0; target = operation.show[i]; i++) {\n moveData = new mixitup.IMoveData();\n posData = operation.showPosData[i];\n\n statusChange = target.isShown ? 'none' : 'show';\n\n willTransition = self.willTransition(\n statusChange,\n operation.hasEffect,\n posData.posIn,\n posData.posOut\n );\n\n if (willTransition) {\n // Prevent non-transitioning targets from incrementing the staggerIndex\n\n staggerIndex++;\n }\n\n target.show();\n\n moveData.posIn = posData.posIn;\n moveData.posOut = posData.posOut;\n moveData.statusChange = statusChange;\n moveData.staggerIndex = staggerIndex;\n moveData.operation = operation;\n moveData.callback = willTransition ? checkProgress : null;\n\n target.move(moveData);\n }\n\n for (i = 0; target = operation.toHide[i]; i++) {\n posData = operation.toHidePosData[i];\n moveData = new mixitup.IMoveData();\n\n statusChange = 'hide';\n\n willTransition = self.willTransition(statusChange, posData.posIn, posData.posOut);\n\n moveData.posIn = posData.posIn;\n moveData.posOut = posData.posOut;\n moveData.statusChange = statusChange;\n moveData.staggerIndex = i;\n moveData.operation = operation;\n moveData.callback = willTransition ? checkProgress : null;\n\n target.move(moveData);\n }\n\n if (self.config.animation.animateResizeContainer) {\n self.dom.parent.style[mixitup.features.transitionProp] =\n 'height ' + self.config.animation.duration + 'ms ease, ' +\n 'width ' + self.config.animation.duration + 'ms ease ';\n\n requestAnimationFrame(function() {\n if (\n operation.startHeight !== operation.newHeight &&\n operation.viewportDeltaY !== operation.startHeight - operation.newHeight\n ) {\n self.dom.parent.style.height = operation.newHeight + 'px';\n }\n\n if (\n operation.startWidth !== operation.newWidth &&\n operation.viewportDeltaX !== operation.startWidth - operation.newWidth\n ) {\n self.dom.parent.style.width = operation.newWidth + 'px';\n }\n });\n }\n\n if (operation.willChangeLayout) {\n h.removeClass(self.dom.container, self.config.layout.ContainerClassName);\n h.addClass(self.dom.container, operation.newContainerClassName);\n }\n\n self.callActions('afterMoveTargets', arguments);\n },\n\n /**\n * @private\n * @instance\n * @return {boolean}\n */\n\n hasEffect: function() {\n var self = this,\n EFFECTABLES = [\n 'scale',\n 'translateX', 'translateY', 'translateZ',\n 'rotateX', 'rotateY', 'rotateZ'\n ],\n effectName = '',\n effect = null,\n result = false,\n value = -1,\n i = -1;\n\n if (self.effectsIn.opacity !== 1) {\n return self.callFilters('resultHasEffect', true, arguments);\n }\n\n for (i = 0; effectName = EFFECTABLES[i]; i++) {\n effect = self.effectsIn[effectName];\n value = (typeof effect && effect.value !== 'undefined') ?\n effect.value : effect;\n\n if (value !== 0) {\n result = true;\n\n break;\n }\n }\n\n return self.callFilters('resultHasEffect', result, arguments);\n },\n\n /**\n * Determines if a target element will transition in\n * some fasion and therefore requires binding of\n * transitionEnd\n *\n * @private\n * @instance\n * @since 3.0.0\n * @param {string} statusChange\n * @param {boolean} hasEffect\n * @param {StyleData} posIn\n * @param {StyleData} posOut\n * @return {boolean}\n */\n\n willTransition: function(statusChange, hasEffect, posIn, posOut) {\n var self = this,\n result = false;\n\n if (!h.isVisible(self.dom.container)) {\n // If the container is not visible, the transitionEnd\n // event will not occur and MixItUp will hang\n\n result = false;\n } else if (\n (statusChange !== 'none' && hasEffect) ||\n posIn.x !== posOut.x ||\n posIn.y !== posOut.y\n ) {\n // If opacity and/or translate will change\n\n result = true;\n } else if (self.config.animation.animateResizeTargets) {\n // Check if width, height or margins will change\n\n result = (\n posIn.width !== posOut.width ||\n posIn.height !== posOut.height ||\n posIn.marginRight !== posOut.marginRight ||\n posIn.marginTop !== posOut.marginTop\n );\n } else {\n result = false;\n }\n\n return self.callFilters('resultWillTransition', result, arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Operation} operation\n * @return {void}\n */\n\n checkProgress: function(operation) {\n var self = this;\n\n self.targetsDone++;\n\n if (self.targetsBound === self.targetsDone) {\n self.cleanUp(operation);\n }\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Operation} operation\n * @return {void}\n */\n\n cleanUp: function(operation) {\n var self = this,\n target = null,\n whitespaceBefore = null,\n whitespaceAfter = null,\n nextInQueue = null,\n i = -1;\n\n self.callActions('beforeCleanUp', arguments);\n\n self.targetsMoved =\n self.targetsImmovable =\n self.targetsBound =\n self.targetsDone = 0;\n\n for (i = 0; target = operation.show[i]; i++) {\n target.cleanUp();\n\n target.show();\n }\n\n for (i = 0; target = operation.toHide[i]; i++) {\n target.cleanUp();\n\n target.hide();\n }\n\n if (operation.willSort) {\n self.printSort(false, operation);\n }\n\n // Remove any styles applied to the parent container\n\n self.dom.parent.style[mixitup.features.transitionProp] =\n self.dom.parent.style.height =\n self.dom.parent.style.width =\n self.dom.parent.style.overflow =\n self.dom.parent.style[mixitup.features.perspectiveProp] =\n self.dom.parent.style[mixitup.features.perspectiveOriginProp] = '';\n\n if (operation.willChangeLayout) {\n h.removeClass(self.dom.container, operation.startContainerClassName);\n h.addClass(self.dom.container, operation.newContainerClassName);\n }\n\n if (operation.toRemove.length) {\n for (i = 0; target = self.targets[i]; i++) {\n if (operation.toRemove.indexOf(target) > -1) {\n if (\n (whitespaceBefore = target.dom.el.previousSibling) && whitespaceBefore.nodeName === '#text' &&\n (whitespaceAfter = target.dom.el.nextSibling) && whitespaceAfter.nodeName === '#text'\n ) {\n h.removeWhitespace(whitespaceBefore);\n }\n\n if (!operation.willSort) {\n // NB: Sorting will remove targets as a bi-product of `printSort()`\n\n self.dom.parent.removeChild(target.dom.el);\n }\n\n self.targets.splice(i, 1);\n\n target.isInDom = false;\n\n i--;\n }\n }\n\n // Since targets have been removed, the original order must be updated\n\n self.origOrder = self.targets;\n }\n\n if (operation.willSort) {\n self.targets = operation.newOrder;\n }\n\n self.state = operation.newState;\n self.lastOperation = operation;\n\n self.dom.targets = self.state.targets;\n\n // mixEnd\n\n mixitup.events.fire('mixEnd', self.dom.container, {\n state: self.state,\n instance: self\n }, self.dom.document);\n\n if (typeof self.config.callbacks.onMixEnd === 'function') {\n self.config.callbacks.onMixEnd.call(self.dom.container, self.state, self);\n }\n\n if (operation.hasFailed) {\n // mixFail\n\n mixitup.events.fire('mixFail', self.dom.container, {\n state: self.state,\n instance: self\n }, self.dom.document);\n\n if (typeof self.config.callbacks.onMixFail === 'function') {\n self.config.callbacks.onMixFail.call(self.dom.container, self.state, self);\n }\n\n h.addClass(self.dom.container, h.getClassname(self.config.classNames, 'container', self.config.classNames.modifierFailed));\n }\n\n // User-defined callback function\n\n if (typeof self.userCallback === 'function') {\n self.userCallback.call(self.dom.container, self.state, self);\n }\n\n if (typeof self.userDeferred.resolve === 'function') {\n self.userDeferred.resolve(self.state);\n }\n\n self.userCallback = null;\n self.userDeferred = null;\n self.lastClicked = null;\n self.isToggling = false;\n self.isBusy = false;\n\n if (self.queue.length) {\n self.callActions('beforeReadQueueCleanUp', arguments);\n\n nextInQueue = self.queue.shift();\n\n // Update non-public API properties stored in queue\n\n self.userDeferred = nextInQueue.deferred;\n self.isToggling = nextInQueue.isToggling;\n self.lastClicked = nextInQueue.triggerElement;\n\n if (nextInQueue.instruction.command instanceof mixitup.CommandMultimix) {\n self.multimix.apply(self, nextInQueue.args);\n } else {\n self.dataset.apply(self, nextInQueue.args);\n }\n }\n\n self.callActions('afterCleanUp', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Array<*>} args\n * @return {mixitup.UserInstruction}\n */\n\n parseMultimixArgs: function(args) {\n var self = this,\n instruction = new mixitup.UserInstruction(),\n arg = null,\n i = -1;\n\n instruction.animate = self.config.animation.enable;\n instruction.command = new mixitup.CommandMultimix();\n\n for (i = 0; i < args.length; i++) {\n arg = args[i];\n\n if (arg === null) continue;\n\n if (typeof arg === 'object') {\n h.extend(instruction.command, arg);\n } else if (typeof arg === 'boolean') {\n instruction.animate = arg;\n } else if (typeof arg === 'function') {\n instruction.callback = arg;\n }\n }\n\n // Coerce arbitrary command arguments into typed command objects\n\n if (instruction.command.insert && !(instruction.command.insert instanceof mixitup.CommandInsert)) {\n instruction.command.insert = self.parseInsertArgs([instruction.command.insert]).command;\n }\n\n if (instruction.command.remove && !(instruction.command.remove instanceof mixitup.CommandRemove)) {\n instruction.command.remove = self.parseRemoveArgs([instruction.command.remove]).command;\n }\n\n if (instruction.command.filter && !(instruction.command.filter instanceof mixitup.CommandFilter)) {\n instruction.command.filter = self.parseFilterArgs([instruction.command.filter]).command;\n }\n\n if (instruction.command.sort && !(instruction.command.sort instanceof mixitup.CommandSort)) {\n instruction.command.sort = self.parseSortArgs([instruction.command.sort]).command;\n }\n\n if (instruction.command.changeLayout && !(instruction.command.changeLayout instanceof mixitup.CommandChangeLayout)) {\n instruction.command.changeLayout = self.parseChangeLayoutArgs([instruction.command.changeLayout]).command;\n }\n\n instruction = self.callFilters('instructionParseMultimixArgs', instruction, arguments);\n\n h.freeze(instruction);\n\n return instruction;\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Array<*>} args\n * @return {mixitup.UserInstruction}\n */\n\n parseFilterArgs: function(args) {\n var self = this,\n instruction = new mixitup.UserInstruction(),\n arg = null,\n i = -1;\n\n instruction.animate = self.config.animation.enable;\n instruction.command = new mixitup.CommandFilter();\n\n for (i = 0; i < args.length; i++) {\n arg = args[i];\n\n if (typeof arg === 'string') {\n // Selector\n\n instruction.command.selector = arg;\n } else if (arg === null) {\n instruction.command.collection = [];\n } else if (typeof arg === 'object' && h.isElement(arg, self.dom.document)) {\n // Single element\n\n instruction.command.collection = [arg];\n } else if (typeof arg === 'object' && typeof arg.length !== 'undefined') {\n // Multiple elements in array, NodeList or jQuery collection\n\n instruction.command.collection = h.arrayFromList(arg);\n } else if (typeof arg === 'object') {\n // Filter command\n\n h.extend(instruction.command, arg);\n } else if (typeof arg === 'boolean') {\n instruction.animate = arg;\n } else if (typeof arg === 'function') {\n instruction.callback = arg;\n }\n }\n\n if (instruction.command.selector && instruction.command.collection) {\n throw new Error(mixitup.messages.errorFilterInvalidArguments());\n }\n\n instruction = self.callFilters('instructionParseFilterArgs', instruction, arguments);\n\n h.freeze(instruction);\n\n return instruction;\n },\n\n parseSortArgs: function(args) {\n var self = this,\n instruction = new mixitup.UserInstruction(),\n arg = null,\n sortString = '',\n i = -1;\n\n instruction.animate = self.config.animation.enable;\n instruction.command = new mixitup.CommandSort();\n\n for (i = 0; i < args.length; i++) {\n arg = args[i];\n\n if (arg === null) continue;\n\n switch (typeof arg) {\n case 'string':\n // Sort string\n\n sortString = arg;\n\n break;\n case 'object':\n // Array of element references\n\n if (arg.length) {\n instruction.command.collection = h.arrayFromList(arg);\n }\n\n break;\n case 'boolean':\n instruction.animate = arg;\n\n break;\n case 'function':\n instruction.callback = arg;\n\n break;\n }\n }\n\n if (sortString) {\n instruction.command = self.parseSortString(sortString, instruction.command);\n }\n\n instruction = self.callFilters('instructionParseSortArgs', instruction, arguments);\n\n h.freeze(instruction);\n\n return instruction;\n },\n\n /**\n * @private\n * @instance\n * @since 2.0.0\n * @param {Array<*>} args\n * @return {mixitup.UserInstruction}\n */\n\n parseInsertArgs: function(args) {\n var self = this,\n instruction = new mixitup.UserInstruction(),\n arg = null,\n i = -1;\n\n instruction.animate = self.config.animation.enable;\n instruction.command = new mixitup.CommandInsert();\n\n for (i = 0; i < args.length; i++) {\n arg = args[i];\n\n if (arg === null) continue;\n\n if (typeof arg === 'number') {\n // Insert index\n\n instruction.command.index = arg;\n } else if (typeof arg === 'string' && ['before', 'after'].indexOf(arg) > -1) {\n // 'before'/'after'\n\n instruction.command.position = arg;\n } else if (typeof arg === 'string') {\n // Markup\n\n instruction.command.collection =\n h.arrayFromList(h.createElement(arg).childNodes);\n } else if (typeof arg === 'object' && h.isElement(arg, self.dom.document)) {\n // Single element\n\n !instruction.command.collection.length ?\n (instruction.command.collection = [arg]) :\n (instruction.command.sibling = arg);\n } else if (typeof arg === 'object' && arg.length) {\n // Multiple elements in array or jQuery collection\n\n !instruction.command.collection.length ?\n (instruction.command.collection = arg) :\n instruction.command.sibling = arg[0];\n } else if (typeof arg === 'object' && arg.childNodes && arg.childNodes.length) {\n // Document fragment\n\n !instruction.command.collection.length ?\n instruction.command.collection = h.arrayFromList(arg.childNodes) :\n instruction.command.sibling = arg.childNodes[0];\n } else if (typeof arg === 'object') {\n // Insert command\n\n h.extend(instruction.command, arg);\n } else if (typeof arg === 'boolean') {\n instruction.animate = arg;\n } else if (typeof arg === 'function') {\n instruction.callback = arg;\n }\n }\n\n if (instruction.command.index && instruction.command.sibling) {\n throw new Error(mixitup.messages.errorInsertInvalidArguments());\n }\n\n if (!instruction.command.collection.length && self.config.debug.showWarnings) {\n console.warn(mixitup.messages.warningInsertNoElements());\n }\n\n instruction = self.callFilters('instructionParseInsertArgs', instruction, arguments);\n\n h.freeze(instruction);\n\n return instruction;\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {Array<*>} args\n * @return {mixitup.UserInstruction}\n */\n\n parseRemoveArgs: function(args) {\n var self = this,\n instruction = new mixitup.UserInstruction(),\n target = null,\n arg = null,\n i = -1;\n\n instruction.animate = self.config.animation.enable;\n instruction.command = new mixitup.CommandRemove();\n\n for (i = 0; i < args.length; i++) {\n arg = args[i];\n\n if (arg === null) continue;\n\n switch (typeof arg) {\n case 'number':\n if (self.targets[arg]) {\n instruction.command.targets[0] = self.targets[arg];\n }\n\n break;\n case 'string':\n instruction.command.collection = h.arrayFromList(self.dom.parent.querySelectorAll(arg));\n\n break;\n case 'object':\n if (arg && arg.length) {\n instruction.command.collection = arg;\n } else if (h.isElement(arg, self.dom.document)) {\n instruction.command.collection = [arg];\n } else {\n // Remove command\n\n h.extend(instruction.command, arg);\n }\n\n break;\n case 'boolean':\n instruction.animate = arg;\n\n break;\n case 'function':\n instruction.callback = arg;\n\n break;\n }\n }\n\n if (instruction.command.collection.length) {\n for (i = 0; target = self.targets[i]; i++) {\n if (instruction.command.collection.indexOf(target.dom.el) > -1) {\n instruction.command.targets.push(target);\n }\n }\n }\n\n if (!instruction.command.targets.length && self.config.debug.showWarnings) {\n console.warn(mixitup.messages.warningRemoveNoElements());\n }\n\n h.freeze(instruction);\n\n return instruction;\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {Array<*>} args\n * @return {mixitup.UserInstruction}\n */\n\n parseDatasetArgs: function(args) {\n var self = this,\n instruction = new mixitup.UserInstruction(),\n arg = null,\n i = -1;\n\n instruction.animate = self.config.animation.enable;\n instruction.command = new mixitup.CommandDataset();\n\n for (i = 0; i < args.length; i++) {\n arg = args[i];\n\n if (arg === null) continue;\n\n switch (typeof arg) {\n case 'object':\n if (Array.isArray(arg) || typeof arg.length === 'number') {\n instruction.command.dataset = arg;\n } else {\n // Change layout command\n\n h.extend(instruction.command, arg);\n }\n\n break;\n case 'boolean':\n instruction.animate = arg;\n\n break;\n case 'function':\n instruction.callback = arg;\n\n break;\n }\n }\n\n h.freeze(instruction);\n\n return instruction;\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {Array<*>} args\n * @return {mixitup.UserInstruction}\n */\n\n parseChangeLayoutArgs: function(args) {\n var self = this,\n instruction = new mixitup.UserInstruction(),\n arg = null,\n i = -1;\n\n instruction.animate = self.config.animation.enable;\n instruction.command = new mixitup.CommandChangeLayout();\n\n for (i = 0; i < args.length; i++) {\n arg = args[i];\n\n if (arg === null) continue;\n\n switch (typeof arg) {\n case 'string':\n instruction.command.containerClassName = arg;\n\n break;\n case 'object':\n // Change layout command\n\n h.extend(instruction.command, arg);\n\n break;\n case 'boolean':\n instruction.animate = arg;\n\n break;\n case 'function':\n instruction.callback = arg;\n\n break;\n }\n }\n\n h.freeze(instruction);\n\n return instruction;\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {mixitup.QueueItem} queueItem\n * @return {Promise.}\n */\n\n queueMix: function(queueItem) {\n var self = this,\n deferred = null,\n toggleSelector = '';\n\n self.callActions('beforeQueueMix', arguments);\n\n deferred = h.defer(mixitup.libraries);\n\n if (self.config.animation.queue && self.queue.length < self.config.animation.queueLimit) {\n queueItem.deferred = deferred;\n\n self.queue.push(queueItem);\n\n // Keep controls in sync with user interactions. Mixer will catch up as it drains the queue.\n\n if (self.config.controls.enable) {\n if (self.isToggling) {\n self.buildToggleArray(queueItem.instruction.command);\n\n toggleSelector = self.getToggleSelector();\n\n self.updateControls({\n filter: {\n selector: toggleSelector\n }\n });\n } else {\n self.updateControls(queueItem.instruction.command);\n }\n }\n } else {\n if (self.config.debug.showWarnings) {\n console.warn(mixitup.messages.warningMultimixInstanceQueueFull());\n }\n\n deferred.resolve(self.state);\n\n mixitup.events.fire('mixBusy', self.dom.container, {\n state: self.state,\n instance: self\n }, self.dom.document);\n\n if (typeof self.config.callbacks.onMixBusy === 'function') {\n self.config.callbacks.onMixBusy.call(self.dom.container, self.state, self);\n }\n }\n\n return self.callFilters('promiseQueueMix', deferred.promise, arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {Array.} newDataset\n * @return {Operation}\n */\n\n getDataOperation: function(newDataset) {\n var self = this,\n operation = new mixitup.Operation(),\n startDataset = [];\n\n operation = self.callFilters('operationUnmappedGetDataOperation', operation, arguments);\n\n if (self.dom.targets.length && !(startDataset = (self.state.activeDataset || [])).length) {\n throw new Error(mixitup.messages.errorDatasetNotSet());\n }\n\n operation.id = h.randomHex();\n operation.startState = self.state;\n operation.startDataset = startDataset;\n operation.newDataset = newDataset.slice();\n\n self.diffDatasets(operation);\n\n operation.startOrder = self.targets;\n operation.newOrder = operation.show;\n\n if (self.config.animation.enable) {\n self.getStartMixData(operation);\n self.setInter(operation);\n\n operation.docState = h.getDocumentState(self.dom.document);\n\n self.getInterMixData(operation);\n self.setFinal(operation);\n self.getFinalMixData(operation);\n\n self.parseEffects();\n\n operation.hasEffect = self.hasEffect();\n\n self.getTweenData(operation);\n }\n\n self.targets = operation.show.slice();\n\n operation.newState = self.buildState(operation);\n\n // NB: Targets to be removed must be included in `self.targets` for removal during clean up,\n // but are added after state is built so that state is accurate\n\n Array.prototype.push.apply(self.targets, operation.toRemove);\n\n operation = self.callFilters('operationMappedGetDataOperation', operation, arguments);\n\n return operation;\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {mixitup.Operation} operation\n * @return {void}\n */\n\n diffDatasets: function(operation) {\n var self = this,\n persistantStartIds = [],\n persistantNewIds = [],\n insertedTargets = [],\n data = null,\n target = null,\n el = null,\n frag = null,\n nextEl = null,\n uids = {},\n id = '',\n i = -1;\n\n self.callActions('beforeDiffDatasets', arguments);\n\n for (i = 0; data = operation.newDataset[i]; i++) {\n if (typeof (id = data[self.config.data.uidKey]) === 'undefined' || id.toString().length < 1) {\n throw new TypeError(mixitup.messages.errorDatasetInvalidUidKey({\n uidKey: self.config.data.uidKey\n }));\n }\n\n if (!uids[id]) {\n uids[id] = true;\n } else {\n throw new Error(mixitup.messages.errorDatasetDuplicateUid({\n uid: id\n }));\n }\n\n if ((target = self.cache[id]) instanceof mixitup.Target) {\n // Already in cache\n\n if (self.config.data.dirtyCheck && !h.deepEquals(data, target.data)) {\n // change detected\n\n el = target.render(data);\n\n target.data = data;\n\n if (el !== target.dom.el) {\n // Update target element reference\n\n if (target.isInDom) {\n target.unbindEvents();\n\n self.dom.parent.replaceChild(el, target.dom.el);\n }\n\n if (!target.isShown) {\n el.style.display = 'none';\n }\n\n target.dom.el = el;\n\n if (target.isInDom) {\n target.bindEvents();\n }\n }\n }\n\n el = target.dom.el;\n } else {\n // New target\n\n target = new mixitup.Target();\n\n target.init(null, self, data);\n\n target.hide();\n }\n\n if (!target.isInDom) {\n // Adding to DOM\n\n if (!frag) {\n // Open frag\n\n frag = self.dom.document.createDocumentFragment();\n }\n\n if (frag.lastElementChild) {\n frag.appendChild(self.dom.document.createTextNode(' '));\n }\n\n frag.appendChild(target.dom.el);\n\n target.isInDom = true;\n\n target.unbindEvents();\n target.bindEvents();\n target.hide();\n\n operation.toShow.push(target);\n\n insertedTargets.push(target);\n } else {\n // Already in DOM\n\n nextEl = target.dom.el.nextElementSibling;\n\n persistantNewIds.push(id);\n\n if (frag) {\n // Close and insert previously opened frag\n\n if (frag.lastElementChild) {\n frag.appendChild(self.dom.document.createTextNode(' '));\n }\n\n self.insertDatasetFrag(frag, target.dom.el, insertedTargets);\n\n frag = null;\n }\n }\n\n operation.show.push(target);\n }\n\n if (frag) {\n // Unclosed frag remaining\n\n nextEl = nextEl || self.config.layout.siblingAfter;\n\n if (nextEl) {\n frag.appendChild(self.dom.document.createTextNode(' '));\n }\n\n self.insertDatasetFrag(frag, nextEl, insertedTargets);\n }\n\n for (i = 0; data = operation.startDataset[i]; i++) {\n id = data[self.config.data.uidKey];\n\n target = self.cache[id];\n\n if (operation.show.indexOf(target) < 0) {\n // Previously shown but now absent\n\n operation.hide.push(target);\n operation.toHide.push(target);\n operation.toRemove.push(target);\n } else {\n persistantStartIds.push(id);\n }\n }\n\n if (!h.isEqualArray(persistantStartIds, persistantNewIds)) {\n operation.willSort = true;\n }\n\n self.callActions('afterDiffDatasets', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.1.5\n * @param {DocumentFragment} frag\n * @param {(HTMLElement|null)} nextEl\n * @param {Array.} targets\n * @return {void}\n */\n\n insertDatasetFrag: function(frag, nextEl, targets) {\n var self = this;\n var insertAt = nextEl ? h.arrayFromList(self.dom.parent.children).indexOf(nextEl) : self.targets.length;\n\n self.dom.parent.insertBefore(frag, nextEl);\n\n while (targets.length) {\n self.targets.splice(insertAt, 0, targets.shift());\n\n insertAt++;\n }\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {mixitup.CommandSort} sortCommandA\n * @param {mixitup.CommandSort} sortCommandB\n * @return {boolean}\n */\n\n willSort: function(sortCommandA, sortCommandB) {\n var self = this,\n result = false;\n\n if (\n self.config.behavior.liveSort ||\n sortCommandA.order === 'random' ||\n sortCommandA.attribute !== sortCommandB.attribute ||\n sortCommandA.order !== sortCommandB.order ||\n sortCommandA.collection !== sortCommandB.collection ||\n (sortCommandA.next === null && sortCommandB.next) ||\n (sortCommandA.next && sortCommandB.next === null)\n ) {\n result = true;\n } else if (sortCommandA.next && sortCommandB.next) {\n result = self.willSort(sortCommandA.next, sortCommandB.next);\n } else {\n result = false;\n }\n\n return self.callFilters('resultWillSort', result, arguments);\n },\n\n /**\n * A shorthand method for `.filter('all')`. Shows all targets in the container.\n *\n * @example\n *\n * .show()\n *\n * @example Example: Showing all targets\n *\n * mixer.show()\n * .then(function(state) {\n * console.log(state.totalShow === state.totalTargets); // true\n * });\n *\n * @public\n * @instance\n * @since 3.0.0\n * @return {Promise.}\n */\n\n show: function() {\n var self = this;\n\n return self.filter('all');\n },\n\n /**\n * A shorthand method for `.filter('none')`. Hides all targets in the container.\n *\n * @example\n *\n * .hide()\n *\n * @example Example: Hiding all targets\n *\n * mixer.hide()\n * .then(function(state) {\n * console.log(state.totalShow === 0); // true\n * console.log(state.totalHide === state.totalTargets); // true\n * });\n *\n * @public\n * @instance\n * @since 3.0.0\n * @return {Promise.}\n */\n\n hide: function() {\n var self = this;\n\n return self.filter('none');\n },\n\n /**\n * Returns a boolean indicating whether or not a MixItUp operation is\n * currently in progress.\n *\n * @example\n *\n * .isMixing()\n *\n * @example Example: Checking the status of a mixer\n *\n * mixer.sort('random', function() {\n * console.log(mixer.isMixing()) // false\n * });\n *\n * console.log(mixer.isMixing()) // true\n *\n * @public\n * @instance\n * @since 2.0.0\n * @return {boolean}\n */\n\n isMixing: function() {\n var self = this;\n\n return self.isBusy;\n },\n\n /**\n * Filters all targets in the container by a provided selector string, or the values `'all'`\n * or `'none'`. Only targets matching the selector will be shown.\n *\n * @example\n *\n * .filter(selector [, animate] [, callback])\n *\n * @example Example 1: Filtering targets by a class selector\n *\n * mixer.filter('.category-a')\n * .then(function(state) {\n * console.log(state.totalShow === containerEl.querySelectorAll('.category-a').length); // true\n * });\n *\n * @example Example 2: Filtering targets by an attribute selector\n *\n * mixer.filter('[data-category~=\"a\"]')\n * .then(function(state) {\n * console.log(state.totalShow === containerEl.querySelectorAll('[data-category~=\"a\"]').length); // true\n * });\n *\n * @example Example 3: Filtering targets by a compound selector\n *\n * // Show only those targets with the classes 'category-a' AND 'category-b'\n *\n * mixer.filter('.category-a.category-c')\n * .then(function(state) {\n * console.log(state.totalShow === containerEl.querySelectorAll('.category-a.category-c').length); // true\n * });\n *\n * @example Example 4: Filtering via an element collection\n *\n * var collection = Array.from(container.querySelectorAll('.mix'));\n *\n * console.log(collection.length); // 34\n *\n * // Filter the collection manually using Array.prototype.filter\n *\n * var filtered = collection.filter(function(target) {\n * return parseInt(target.getAttribute('data-price')) > 10;\n * });\n *\n * console.log(filtered.length); // 22\n *\n * // Pass the filtered collection to MixItUp\n *\n * mixer.filter(filtered)\n * .then(function(state) {\n * console.log(state.activeFilter.collection.length === 22); // true\n * });\n *\n * @public\n * @instance\n * @since 2.0.0\n * @param {(string|HTMLElement|Array.)} selector\n * Any valid CSS selector (i.e. `'.category-a'`), or the values `'all'` or `'none'`. The filter method also accepts a reference to single target element or a collection of target elements to show.\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n filter: function() {\n var self = this,\n instruction = self.parseFilterArgs(arguments);\n\n return self.multimix({\n filter: instruction.command\n }, instruction.animate, instruction.callback);\n },\n\n /**\n * Adds an additional selector to the currently active filter selector, concatenating\n * as per the logic defined in `controls.toggleLogic`.\n *\n * @example\n *\n * .toggleOn(selector [, animate] [, callback])\n *\n * @example Example: Toggling on a filter selector\n *\n * console.log(mixer.getState().activeFilter.selector); // '.category-a'\n *\n * mixer.toggleOn('.category-b')\n * .then(function(state) {\n * console.log(state.activeFilter.selector); // '.category-a, .category-b'\n * });\n *\n * @public\n * @instance\n * @since 3.0.0\n * @param {string} selector\n * Any valid CSS selector (i.e. `'.category-a'`)\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n toggleOn: function() {\n var self = this,\n instruction = self.parseFilterArgs(arguments),\n selector = instruction.command.selector,\n toggleSelector = '';\n\n self.isToggling = true;\n\n if (self.toggleArray.indexOf(selector) < 0) {\n self.toggleArray.push(selector);\n }\n\n toggleSelector = self.getToggleSelector();\n\n return self.multimix({\n filter: toggleSelector\n }, instruction.animate, instruction.callback);\n },\n\n /**\n * Removes a selector from the active filter selector.\n *\n * @example\n *\n * .toggleOff(selector [, animate] [, callback])\n *\n * @example Example: Toggling off a filter selector\n *\n * console.log(mixer.getState().activeFilter.selector); // '.category-a, .category-b'\n *\n * mixer.toggleOff('.category-b')\n * .then(function(state) {\n * console.log(state.activeFilter.selector); // '.category-a'\n * });\n *\n * @public\n * @instance\n * @since 3.0.0\n * @param {string} selector\n * Any valid CSS selector (i.e. `'.category-a'`)\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n toggleOff: function() {\n var self = this,\n instruction = self.parseFilterArgs(arguments),\n selector = instruction.command.selector,\n selectorIndex = self.toggleArray.indexOf(selector),\n toggleSelector = '';\n\n self.isToggling = true;\n\n if (selectorIndex > -1) {\n self.toggleArray.splice(selectorIndex, 1);\n }\n\n toggleSelector = self.getToggleSelector();\n\n return self.multimix({\n filter: toggleSelector\n }, instruction.animate, instruction.callback);\n },\n\n /**\n * Sorts all targets in the container according to a provided sort string.\n *\n * @example\n *\n * .sort(sortString [, animate] [, callback])\n *\n * @example Example 1: Sorting by the default DOM order\n *\n * // Reverse the default order of the targets\n *\n * mixer.sort('default:desc')\n * .then(function(state) {\n * console.log(state.activeSort.attribute === 'default'); // true\n * console.log(state.activeSort.order === 'desc'); // true\n * });\n *\n * @example Example 2: Sorting by a custom data-attribute\n *\n * // Sort the targets by the value of a `data-published-date` attribute\n *\n * mixer.sort('published-date:asc')\n * .then(function(state) {\n * console.log(state.activeSort.attribute === 'published-date'); // true\n * console.log(state.activeSort.order === 'asc'); // true\n * });\n *\n * @example Example 3: Sorting by multiple attributes\n *\n * // Sort the targets by the value of a `data-published-date` attribute, then by `data-title`\n *\n * mixer.sort('published-date:desc data-title:asc')\n * .then(function(state) {\n * console.log(state.activeSort.attribute === 'published-date'); // true\n * console.log(state.activeSort.order === 'desc'); // true\n *\n * console.log(state.activeSort.next.attribute === 'title'); // true\n * console.log(state.activeSort.next.order === 'asc'); // true\n * });\n *\n * @example Example 4: Sorting by random\n *\n * mixer.sort('random')\n * .then(function(state) {\n * console.log(state.activeSort.order === 'random') // true\n * });\n *\n * @example Example 5: Sorting via an element collection\n *\n * var collection = Array.from(container.querySelectorAll('.mix'));\n *\n * // Swap the position of two elements in the collection:\n *\n * var temp = collection[1];\n *\n * collection[1] = collection[0];\n * collection[0] = temp;\n *\n * // Pass the sorted collection to MixItUp\n *\n * mixer.sort(collection)\n * .then(function(state) {\n * console.log(state.targets[0] === collection[0]); // true\n * });\n *\n * @public\n * @instance\n * @since 2.0.0\n * @param {(string|Array.)} sortString\n * A valid sort string (e.g. `'default'`, `'published-date:asc'`, or `'random'`). The sort method also accepts an array of all target elements in a user-defined order.\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n sort: function() {\n var self = this,\n instruction = self.parseSortArgs(arguments);\n\n return self.multimix({\n sort: instruction.command\n }, instruction.animate, instruction.callback);\n },\n\n /**\n * Changes the layout of the container by adding, removing or updating a\n * layout-specific class name. If `animation.animateResizetargets` is\n * enabled, MixItUp will attempt to gracefully animate the width, height,\n * and position of targets between layout states.\n *\n * @example\n *\n * .changeLayout(containerClassName [, animate] [, callback])\n *\n * @example Example 1: Adding a new class name to the container\n *\n * mixer.changeLayout('container-list')\n * .then(function(state) {\n * console.log(state.activeContainerClass === 'container-list'); // true\n * });\n *\n * @example Example 2: Removing a previously added class name from the container\n *\n * mixer.changeLayout('')\n * .then(function(state) {\n * console.log(state.activeContainerClass === ''); // true\n * });\n *\n * @public\n * @instance\n * @since 2.0.0\n * @param {string} containerClassName\n * A layout-specific class name to add to the container.\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n changeLayout: function() {\n var self = this,\n instruction = self.parseChangeLayoutArgs(arguments);\n\n return self.multimix({\n changeLayout: instruction.command\n }, instruction.animate, instruction.callback);\n },\n\n /**\n * Updates the contents and order of the container to reflect the provided dataset,\n * if the dataset API is in use.\n *\n * The dataset API is designed for use in API-driven JavaScript applications, and\n * can be used instead of DOM-based methods such as `.filter()`, `.sort()`,\n * `.insert()`, etc. When used, insertion, removal, sorting and pagination can be\n * achieved purely via changes to your data model, without the uglyness of having\n * to interact with or query the DOM directly.\n *\n * @example\n *\n * .dataset(dataset [, animate] [, callback])\n *\n * @example Example 1: Rendering a dataset\n *\n * var myDataset = [\n * {id: 1, ...},\n * {id: 2, ...},\n * {id: 3, ...}\n * ];\n *\n * mixer.dataset(myDataset)\n * .then(function(state) {\n * console.log(state.totalShow === 3); // true\n * });\n *\n * @example Example 2: Sorting a dataset\n *\n * // Create a new dataset in reverse order\n *\n * var newDataset = myDataset.slice().reverse();\n *\n * mixer.dataset(newDataset)\n * .then(function(state) {\n * console.log(state.activeDataset[0] === myDataset[2]); // true\n * });\n *\n * @example Example 3: Removing an item from the dataset\n *\n * console.log(myDataset.length); // 3\n *\n * // Create a new dataset with the last item removed.\n *\n * var newDataset = myDataset.slice().pop();\n *\n * mixer.dataset(newDataset)\n * .then(function(state) {\n * console.log(state.totalShow === 2); // true\n * });\n *\n * @public\n * @instance\n * @since 3.0.0\n * @param {Array.} dataset\n * An array of objects, each one representing the underlying data model of a target to be rendered.\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n dataset: function() {\n var self = this,\n instruction = self.parseDatasetArgs(arguments),\n operation = null,\n queueItem = null,\n animate = false;\n\n self.callActions('beforeDataset', arguments);\n\n if (!self.isBusy) {\n if (instruction.callback) self.userCallback = instruction.callback;\n\n animate = (instruction.animate ^ self.config.animation.enable) ? instruction.animate : self.config.animation.enable;\n\n operation = self.getDataOperation(instruction.command.dataset);\n\n return self.goMix(animate, operation);\n } else {\n queueItem = new mixitup.QueueItem();\n\n queueItem.args = arguments;\n queueItem.instruction = instruction;\n\n return self.queueMix(queueItem);\n }\n },\n\n /**\n * Performs simultaneous `filter`, `sort`, `insert`, `remove` and `changeLayout`\n * operations as requested.\n *\n * @example\n *\n * .multimix(multimixCommand [, animate] [, callback])\n *\n * @example Example 1: Performing simultaneous filtering and sorting\n *\n * mixer.multimix({\n * filter: '.category-b',\n * sort: 'published-date:desc'\n * })\n * .then(function(state) {\n * console.log(state.activeFilter.selector === '.category-b'); // true\n * console.log(state.activeSort.attribute === 'published-date'); // true\n * });\n *\n * @example Example 2: Performing simultaneous sorting, insertion, and removal\n *\n * console.log(mixer.getState().totalShow); // 6\n *\n * // NB: When inserting via `multimix()`, an object should be provided as the value\n * // for the `insert` portion of the command, allowing for a collection of elements\n * // and an insertion index to be specified.\n *\n * mixer.multimix({\n * sort: 'published-date:desc', // Sort the container, including any new elements\n * insert: {\n * collection: [newElementReferenceA, newElementReferenceB], // Add 2 new elements at index 5\n * index: 5\n * },\n * remove: existingElementReference // Remove 1 existing element\n * })\n * .then(function(state) {\n * console.log(state.activeSort.attribute === 'published-date'); // true\n * console.log(state.totalShow === 7); // true\n * });\n *\n * @public\n * @instance\n * @since 2.0.0\n * @param {object} multimixCommand\n * An object containing one or more things to do\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n multimix: function() {\n var self = this,\n operation = null,\n animate = false,\n queueItem = null,\n instruction = self.parseMultimixArgs(arguments);\n\n self.callActions('beforeMultimix', arguments);\n\n if (!self.isBusy) {\n operation = self.getOperation(instruction.command);\n\n if (self.config.controls.enable) {\n // Update controls for API calls\n\n if (instruction.command.filter && !self.isToggling) {\n // As we are not toggling, reset the toggle array\n // so new filter overrides existing toggles\n\n self.toggleArray.length = 0;\n self.buildToggleArray(operation.command);\n }\n\n if (self.queue.length < 1) {\n self.updateControls(operation.command);\n }\n }\n\n if (instruction.callback) self.userCallback = instruction.callback;\n\n // Always allow the instruction to override the instance setting\n\n animate = (instruction.animate ^ self.config.animation.enable) ?\n instruction.animate :\n self.config.animation.enable;\n\n self.callFilters('operationMultimix', operation, arguments);\n\n return self.goMix(animate, operation);\n } else {\n queueItem = new mixitup.QueueItem();\n\n queueItem.args = arguments;\n queueItem.instruction = instruction;\n queueItem.triggerElement = self.lastClicked;\n queueItem.isToggling = self.isToggling;\n\n return self.queueMix(queueItem);\n }\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {object} multimixCommand\n * @param {boolean} [isPreFetch]\n * An optional boolean indicating that the operation is being pre-fetched for execution at a later time.\n * @return {Operation|null}\n */\n\n getOperation: function(multimixCommand) {\n var self = this,\n sortCommand = multimixCommand.sort,\n filterCommand = multimixCommand.filter,\n changeLayoutCommand = multimixCommand.changeLayout,\n removeCommand = multimixCommand.remove,\n insertCommand = multimixCommand.insert,\n operation = new mixitup.Operation();\n\n operation = self.callFilters('operationUnmappedGetOperation', operation, arguments);\n\n operation.id = h.randomHex();\n operation.command = multimixCommand;\n operation.startState = self.state;\n operation.triggerElement = self.lastClicked;\n\n if (self.isBusy) {\n if (self.config.debug.showWarnings) {\n console.warn(mixitup.messages.warningGetOperationInstanceBusy());\n }\n\n return null;\n }\n\n if (insertCommand) {\n self.insertTargets(insertCommand, operation);\n }\n\n if (removeCommand) {\n operation.toRemove = removeCommand.targets;\n }\n\n operation.startSort = operation.newSort = operation.startState.activeSort;\n operation.startOrder = operation.newOrder = self.targets;\n\n if (sortCommand) {\n operation.startSort = operation.startState.activeSort;\n operation.newSort = sortCommand;\n\n operation.willSort = self.willSort(sortCommand, operation.startState.activeSort);\n\n if (operation.willSort) {\n self.sortOperation(operation);\n }\n }\n\n operation.startFilter = operation.startState.activeFilter;\n\n if (filterCommand) {\n operation.newFilter = filterCommand;\n } else {\n operation.newFilter = h.extend(new mixitup.CommandFilter(), operation.startFilter);\n }\n\n if (operation.newFilter.selector === 'all') {\n operation.newFilter.selector = self.config.selectors.target;\n } else if (operation.newFilter.selector === 'none') {\n operation.newFilter.selector = '';\n }\n\n self.filterOperation(operation);\n\n operation.startContainerClassName = operation.startState.activeContainerClassName;\n\n if (changeLayoutCommand) {\n operation.newContainerClassName = changeLayoutCommand.containerClassName;\n\n if (operation.newContainerClassName !== operation.startContainerClassName) {\n operation.willChangeLayout = true;\n }\n } else {\n operation.newContainerClassName = operation.startContainerClassName;\n }\n\n if (self.config.animation.enable) {\n // Populate the operation's position data\n\n self.getStartMixData(operation);\n self.setInter(operation);\n\n operation.docState = h.getDocumentState(self.dom.document);\n\n self.getInterMixData(operation);\n self.setFinal(operation);\n self.getFinalMixData(operation);\n\n self.parseEffects();\n\n operation.hasEffect = self.hasEffect();\n\n self.getTweenData(operation);\n }\n\n if (operation.willSort) {\n self.targets = operation.newOrder;\n }\n\n operation.newState = self.buildState(operation);\n\n return self.callFilters('operationMappedGetOperation', operation, arguments);\n },\n\n /**\n * Renders a previously created operation at a specific point in its path, as\n * determined by a multiplier between 0 and 1.\n *\n * @example\n * .tween(operation, multiplier)\n *\n * @private\n * @instance\n * @since 3.0.0\n * @param {mixitup.Operation} operation\n * An operation object created via the `getOperation` method\n *\n * @param {Float} multiplier\n * Any number between 0 and 1 representing the percentage complete of the operation\n * @return {void}\n */\n\n tween: function(operation, multiplier) {\n var target = null,\n posData = null,\n toHideIndex = -1,\n i = -1;\n\n multiplier = Math.min(multiplier, 1);\n multiplier = Math.max(multiplier, 0);\n\n for (i = 0; target = operation.show[i]; i++) {\n posData = operation.showPosData[i];\n\n target.applyTween(posData, multiplier);\n }\n\n for (i = 0; target = operation.hide[i]; i++) {\n if (target.isShown) {\n target.hide();\n }\n\n if ((toHideIndex = operation.toHide.indexOf(target)) > -1) {\n posData = operation.toHidePosData[toHideIndex];\n\n if (!target.isShown) {\n target.show();\n }\n\n target.applyTween(posData, multiplier);\n }\n }\n },\n\n /**\n * Inserts one or more new target elements into the container at a specified\n * index.\n *\n * To be indexed as targets, new elements must match the `selectors.target`\n * selector (`'.mix'` by default).\n *\n * @example\n *\n * .insert(newElements [, index] [, animate], [, callback])\n *\n * @example Example 1: Inserting a single element via reference\n *\n * console.log(mixer.getState().totalShow); // 0\n *\n * // Create a new element\n *\n * var newElement = document.createElement('div');\n * newElement.classList.add('mix');\n *\n * mixer.insert(newElement)\n * .then(function(state) {\n * console.log(state.totalShow === 1); // true\n * });\n *\n * @example Example 2: Inserting a single element via HTML string\n *\n * console.log(mixer.getState().totalShow); // 1\n *\n * // Create a new element via reference\n *\n * var newElementHtml = '<div class=\"mix\"></div>';\n *\n * // Create and insert the new element at index 1\n *\n * mixer.insert(newElementHtml, 1)\n * .then(function(state) {\n * console.log(state.totalShow === 2); // true\n * console.log(state.show[1].outerHTML === newElementHtml); // true\n * });\n *\n * @example Example 3: Inserting multiple elements via reference\n *\n * console.log(mixer.getState().totalShow); // 2\n *\n * // Create an array of new elements to insert.\n *\n * var newElement1 = document.createElement('div');\n * var newElement2 = document.createElement('div');\n *\n * newElement1.classList.add('mix');\n * newElement2.classList.add('mix');\n *\n * var newElementsCollection = [newElement1, newElement2];\n *\n * // Insert the new elements starting at index 1\n *\n * mixer.insert(newElementsCollection, 1)\n * .then(function(state) {\n * console.log(state.totalShow === 4); // true\n * console.log(state.show[1] === newElement1); // true\n * console.log(state.show[2] === newElement2); // true\n * });\n *\n * @example Example 4: Inserting a jQuery collection object containing one or more elements\n *\n * console.log(mixer.getState().totalShow); // 4\n *\n * var $newElement = $('<div class=\"mix\"></div>');\n *\n * // Insert the new elements starting at index 3\n *\n * mixer.insert($newElement, 3)\n * .then(function(state) {\n * console.log(state.totalShow === 5); // true\n * console.log(state.show[3] === $newElement[0]); // true\n * });\n *\n * @public\n * @instance\n * @since 2.0.0\n * @param {(HTMLElement|Array.|string)} newElements\n * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element.\n * @param {number} index=0\n * The index at which to insert the new element(s). `0` by default.\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n insert: function() {\n var self = this,\n args = self.parseInsertArgs(arguments);\n\n return self.multimix({\n insert: args.command\n }, args.animate, args.callback);\n },\n\n /**\n * Inserts one or more new elements before a provided reference element.\n *\n * @example\n *\n * .insertBefore(newElements, referenceElement [, animate] [, callback])\n *\n * @example Example: Inserting a new element before a reference element\n *\n * // An existing reference element is chosen at index 2\n *\n * var referenceElement = mixer.getState().show[2];\n *\n * // Create a new element\n *\n * var newElement = document.createElement('div');\n * newElement.classList.add('mix');\n *\n * mixer.insertBefore(newElement, referenceElement)\n * .then(function(state) {\n * // The new element is inserted into the container at index 2, before the reference element\n *\n * console.log(state.show[2] === newElement); // true\n *\n * // The reference element is now at index 3\n *\n * console.log(state.show[3] === referenceElement); // true\n * });\n *\n * @public\n * @instance\n * @since 3.0.0\n * @param {(HTMLElement|Array.|string)} newElements\n * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element.\n * @param {HTMLElement} referenceElement\n * A reference to an existing element in the container to insert new elements before.\n *@param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n insertBefore: function() {\n var self = this,\n args = self.parseInsertArgs(arguments);\n\n return self.insert(args.command.collection, 'before', args.command.sibling, args.animate, args.callback);\n },\n\n /**\n * Inserts one or more new elements after a provided reference element.\n *\n * @example\n *\n * .insertAfter(newElements, referenceElement [, animate] [, callback])\n *\n * @example Example: Inserting a new element after a reference element\n *\n * // An existing reference element is chosen at index 2\n *\n * var referenceElement = mixer.getState().show[2];\n *\n * // Create a new element\n *\n * var newElement = document.createElement('div');\n * newElement.classList.add('mix');\n *\n * mixer.insertAfter(newElement, referenceElement)\n * .then(function(state) {\n * // The new element is inserted into the container at index 3, after the reference element\n *\n * console.log(state.show[3] === newElement); // true\n * });\n *\n * @public\n * @instance\n * @since 3.0.0\n * @param {(HTMLElement|Array.|string)} newElements\n * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element.\n * @param {HTMLElement} referenceElement\n * A reference to an existing element in the container to insert new elements after.\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n insertAfter: function() {\n var self = this,\n args = self.parseInsertArgs(arguments);\n\n return self.insert(args.command.collection, 'after', args.command.sibling, args.animate, args.callback);\n },\n\n /**\n * Inserts one or more new elements into the container before all existing targets.\n *\n * @example\n *\n * .prepend(newElements [,animate] [,callback])\n *\n * @example Example: Prepending a new element\n *\n * // Create a new element\n *\n * var newElement = document.createElement('div');\n * newElement.classList.add('mix');\n *\n * // Insert the element into the container\n *\n * mixer.prepend(newElement)\n * .then(function(state) {\n * console.log(state.show[0] === newElement); // true\n * });\n *\n * @public\n * @instance\n * @since 3.0.0\n * @param {(HTMLElement|Array.|string)} newElements\n * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element.\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n prepend: function() {\n var self = this,\n args = self.parseInsertArgs(arguments);\n\n return self.insert(0, args.command.collection, args.animate, args.callback);\n },\n\n /**\n * Inserts one or more new elements into the container after all existing targets.\n *\n * @example\n *\n * .append(newElements [,animate] [,callback])\n *\n * @example Example: Appending a new element\n *\n * // Create a new element\n *\n * var newElement = document.createElement('div');\n * newElement.classList.add('mix');\n *\n * // Insert the element into the container\n *\n * mixer.append(newElement)\n * .then(function(state) {\n * console.log(state.show[state.show.length - 1] === newElement); // true\n * });\n *\n * @public\n * @instance\n * @since 3.0.0\n * @param {(HTMLElement|Array.|string)} newElements\n * A reference to a single element to insert, an array-like collection of elements, or an HTML string representing a single element.\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n append: function() {\n var self = this,\n args = self.parseInsertArgs(arguments);\n\n return self.insert(self.state.totalTargets, args.command.collection, args.animate, args.callback);\n },\n\n /**\n * Removes one or more existing target elements from the container.\n *\n * @example\n *\n * .remove(elements [, animate] [, callback])\n *\n * @example Example 1: Removing an element by reference\n *\n * var elementToRemove = containerEl.firstElementChild;\n *\n * mixer.remove(elementToRemove)\n * .then(function(state) {\n * console.log(state.targets.indexOf(elementToRemove) === -1); // true\n * });\n *\n * @example Example 2: Removing a collection of elements by reference\n *\n * var elementsToRemove = containerEl.querySelectorAll('.category-a');\n *\n * console.log(elementsToRemove.length) // 3\n *\n * mixer.remove(elementsToRemove)\n * .then(function() {\n * console.log(containerEl.querySelectorAll('.category-a').length); // 0\n * });\n *\n * @example Example 3: Removing one or more elements by selector\n *\n * mixer.remove('.category-a')\n * .then(function() {\n * console.log(containerEl.querySelectorAll('.category-a').length); // 0\n * });\n *\n * @example Example 4: Removing an element by index\n *\n * console.log(mixer.getState.totalShow); // 4\n *\n * // Remove the element at index 3\n *\n * mixer.remove(3)\n * .then(function(state) {\n * console.log(state.totalShow); // 3\n * console.log(state.show[3]); // undefined\n * });\n *\n *\n * @public\n * @instance\n * @since 3.0.0\n * @param {(HTMLElement|Array.|string|number)} elements\n * A reference to a single element to remove, an array-like collection of elements, a selector string, or the index of an element to remove.\n * @param {boolean} [animate=true]\n * An optional boolean dictating whether the operation should animate, or occur syncronously with no animation. `true` by default.\n * @param {function} [callback=null]\n * An optional callback function to be invoked after the operation has completed.\n * @return {Promise.}\n * A promise resolving with the current state object.\n */\n\n remove: function() {\n var self = this,\n args = self.parseRemoveArgs(arguments);\n\n return self.multimix({\n remove: args.command\n }, args.animate, args.callback);\n },\n\n /**\n * Retrieves the the value of any property or sub-object within the current\n * mixitup configuration, or the whole configuration object.\n *\n * @example\n *\n * .getConfig([stringKey])\n *\n * @example Example 1: retrieve the entire configuration object\n *\n * var config = mixer.getConfig(); // Config { ... }\n *\n * @example Example 2: retrieve a named sub-object of configuration object\n *\n * var animation = mixer.getConfig('animation'); // ConfigAnimation { ... }\n *\n * @example Example 3: retrieve a value of configuration object via a dot-notation string key\n *\n * var effects = mixer.getConfig('animation.effects'); // 'fade scale'\n *\n * @public\n * @instance\n * @since 2.0.0\n * @param {string} [stringKey] A \"dot-notation\" string key\n * @return {*}\n */\n\n getConfig: function(stringKey) {\n var self = this,\n value = null;\n\n if (!stringKey) {\n value = self.config;\n } else {\n value = h.getProperty(self.config, stringKey);\n }\n\n return self.callFilters('valueGetConfig', value, arguments);\n },\n\n /**\n * Updates the configuration of the mixer, after it has been instantiated.\n *\n * See the Configuration Object documentation for a full list of avilable\n * configuration options.\n *\n * @example\n *\n * .configure(config)\n *\n * @example Example 1: Updating animation options\n *\n * mixer.configure({\n * animation: {\n * effects: 'fade translateX(-100%)',\n * duration: 300\n * }\n * });\n *\n * @example Example 2: Removing a callback after it has been set\n *\n * var mixer;\n *\n * function handleMixEndOnce() {\n * // Do something ..\n *\n * // Then nullify the callback\n *\n * mixer.configure({\n * callbacks: {\n * onMixEnd: null\n * }\n * });\n * };\n *\n * // Instantiate a mixer with a callback defined\n *\n * mixer = mixitup(containerEl, {\n * callbacks: {\n * onMixEnd: handleMixEndOnce\n * }\n * });\n *\n * @public\n * @instance\n * @since 3.0.0\n * @param {object} config\n * An object containing one of more configuration options.\n * @return {void}\n */\n\n configure: function(config) {\n var self = this;\n\n self.callActions('beforeConfigure', arguments);\n\n h.extend(self.config, config, true, true);\n\n self.callActions('afterConfigure', arguments);\n },\n\n /**\n * Returns an object containing information about the current state of the\n * mixer. See the State Object documentation for more information.\n *\n * NB: State objects are immutable and should therefore be regenerated\n * after any operation.\n *\n * @example\n *\n * .getState();\n *\n * @example Example: Retrieving a state object\n *\n * var state = mixer.getState();\n *\n * console.log(state.totalShow + 'targets are currently shown');\n *\n * @public\n * @instance\n * @since 2.0.0\n * @return {mixitup.State} An object reflecting the current state of the mixer.\n */\n\n getState: function() {\n var self = this,\n state = null;\n\n state = new mixitup.State();\n\n h.extend(state, self.state);\n\n h.freeze(state);\n\n return self.callFilters('stateGetState', state, arguments);\n },\n\n /**\n * Forces the re-indexing all targets within the container.\n *\n * This should only be used if some other piece of code in your application\n * has manipulated the contents of your container, which should be avoided.\n *\n * If you need to add or remove target elements from the container, use\n * the built-in `.insert()` or `.remove()` methods, and MixItUp will keep\n * itself up to date.\n *\n * @example\n *\n * .forceRefresh()\n *\n * @example Example: Force refreshing the mixer after external DOM manipulation\n *\n * console.log(mixer.getState().totalShow); // 3\n *\n * // An element is removed from the container via some external DOM manipulation code:\n *\n * containerEl.removeChild(containerEl.firstElementChild);\n *\n * // The mixer does not know that the number of targets has changed:\n *\n * console.log(mixer.getState().totalShow); // 3\n *\n * mixer.forceRefresh();\n *\n * // After forceRefresh, the mixer is in sync again:\n *\n * console.log(mixer.getState().totalShow); // 2\n *\n * @public\n * @instance\n * @since 2.1.2\n * @return {void}\n */\n\n forceRefresh: function() {\n var self = this;\n\n self.indexTargets();\n },\n\n /**\n * Forces the re-rendering of all targets when using the Dataset API.\n *\n * By default, targets are only re-rendered when `data.dirtyCheck` is\n * enabled, and an item's data has changed when `dataset()` is called.\n *\n * The `forceRender()` method allows for the re-rendering of all targets\n * in response to some arbitrary event, such as the changing of the target\n * render function.\n *\n * Targets are rendered against their existing data.\n *\n * @example\n *\n * .forceRender()\n *\n * @example Example: Force render targets after changing the target render function\n *\n * console.log(container.innerHTML); // ... <span class=\"mix\">Foo</span> ...\n *\n * mixer.configure({\n * render: {\n * target: (item) => `<a href=\"/${item.slug}/\" class=\"mix\">${item.title}</a>`\n * }\n * });\n *\n * mixer.forceRender();\n *\n * console.log(container.innerHTML); // ... <a href=\"/foo/\" class=\"mix\">Foo</a> ...\n *\n * @public\n * @instance\n * @since 3.2.1\n * @return {void}\n */\n\n forceRender: function() {\n var self = this,\n target = null,\n el = null,\n id = '';\n\n for (id in self.cache) {\n target = self.cache[id];\n\n el = target.render(target.data);\n\n if (el !== target.dom.el) {\n // Update target element reference\n\n if (target.isInDom) {\n target.unbindEvents();\n\n self.dom.parent.replaceChild(el, target.dom.el);\n }\n\n if (!target.isShown) {\n el.style.display = 'none';\n }\n\n target.dom.el = el;\n\n if (target.isInDom) {\n target.bindEvents();\n }\n }\n }\n\n self.state = self.buildState(self.lastOperation);\n },\n\n /**\n * Removes mixitup functionality from the container, unbinds all control\n * event handlers, and deletes the mixer instance from MixItUp's internal\n * cache.\n *\n * This should be performed whenever a mixer's container is removed from\n * the DOM, such as during a page change in a single page application,\n * or React's `componentWillUnmount()`.\n *\n * @example\n *\n * .destroy([cleanUp])\n *\n * @example Example: Destroying the mixer before removing its container element\n *\n * mixer.destroy();\n *\n * containerEl.parentElement.removeChild(containerEl);\n *\n * @public\n * @instance\n * @since 2.0.0\n * @param {boolean} [cleanUp=false]\n * An optional boolean dictating whether or not to clean up any inline `display: none;` styling applied to hidden targets.\n * @return {void}\n */\n\n destroy: function(cleanUp) {\n var self = this,\n control = null,\n target = null,\n i = 0;\n\n self.callActions('beforeDestroy', arguments);\n\n for (i = 0; control = self.controls[i]; i++) {\n control.removeBinding(self);\n }\n\n for (i = 0; target = self.targets[i]; i++) {\n if (cleanUp) {\n target.show();\n }\n\n target.unbindEvents();\n }\n\n if (self.dom.container.id.match(/^MixItUp/)) {\n self.dom.container.removeAttribute('id');\n }\n\n delete mixitup.instances[self.id];\n\n self.callActions('afterDestroy', arguments);\n }\n });\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.IMoveData = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.posIn = null;\n this.posOut = null;\n this.operation = null;\n this.callback = null;\n this.statusChange = '';\n this.duration = -1;\n this.staggerIndex = -1;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.IMoveData);\n\n mixitup.IMoveData.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.IMoveData.prototype.constructor = mixitup.IMoveData;\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.TargetDom = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.el = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.TargetDom);\n\n mixitup.TargetDom.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.TargetDom.prototype.constructor = mixitup.TargetDom;\n\n /**\n * @constructor\n * @namespace\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.Target = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.id = '';\n this.sortString = '';\n this.mixer = null;\n this.callback = null;\n this.isShown = false;\n this.isBound = false;\n this.isExcluded = false;\n this.isInDom = false;\n this.handler = null;\n this.operation = null;\n this.data = null;\n this.dom = new mixitup.TargetDom();\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.Target);\n\n mixitup.Target.prototype = Object.create(mixitup.Base.prototype);\n\n h.extend(mixitup.Target.prototype, {\n constructor: mixitup.Target,\n\n /**\n * Initialises a newly instantiated Target.\n *\n * @private\n * @instance\n * @since 3.0.0\n * @param {(Element|null)} el\n * @param {object} mixer\n * @param {object} [data]\n * @return {void}\n */\n\n init: function(el, mixer, data) {\n var self = this,\n id = '';\n\n self.callActions('beforeInit', arguments);\n\n self.mixer = mixer;\n\n if (!el) {\n // If no element is provided, render it\n\n el = self.render(data);\n }\n\n self.cacheDom(el);\n\n self.bindEvents();\n\n if (self.dom.el.style.display !== 'none') {\n self.isShown = true;\n }\n\n if (data && mixer.config.data.uidKey) {\n if (typeof (id = data[mixer.config.data.uidKey]) === 'undefined' || id.toString().length < 1) {\n throw new TypeError(mixitup.messages.errorDatasetInvalidUidKey({\n uidKey: mixer.config.data.uidKey\n }));\n }\n\n self.id = id;\n self.data = data;\n\n mixer.cache[id] = self;\n }\n\n self.callActions('afterInit', arguments);\n },\n\n /**\n * Renders the target element using a user-defined renderer function.\n *\n * @private\n * @instance\n * @since 3.1.4\n * @param {object} data\n * @return {void}\n */\n\n render: function(data) {\n var self = this,\n render = null,\n el = null,\n temp = null,\n output = '';\n\n self.callActions('beforeRender', arguments);\n\n render = self.callFilters('renderRender', self.mixer.config.render.target, arguments);\n\n if (typeof render !== 'function') {\n throw new TypeError(mixitup.messages.errorDatasetRendererNotSet());\n }\n\n output = render(data);\n\n if (output && typeof output === 'object' && h.isElement(output)) {\n el = output;\n } else if (typeof output === 'string') {\n temp = document.createElement('div');\n temp.innerHTML = output;\n\n el = temp.firstElementChild;\n }\n\n return self.callFilters('elRender', el, arguments);\n },\n\n /**\n * Caches references of DOM elements neccessary for the target's functionality.\n *\n * @private\n * @instance\n * @since 3.0.0\n * @param {Element} el\n * @return {void}\n */\n\n cacheDom: function(el) {\n var self = this;\n\n self.callActions('beforeCacheDom', arguments);\n\n self.dom.el = el;\n\n self.callActions('afterCacheDom', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {string} attributeName\n * @return {void}\n */\n\n getSortString: function(attributeName) {\n var self = this,\n value = self.dom.el.getAttribute('data-' + attributeName) || '';\n\n self.callActions('beforeGetSortString', arguments);\n\n value = isNaN(value * 1) ?\n value.toLowerCase() :\n value * 1;\n\n self.sortString = value;\n\n self.callActions('afterGetSortString', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @return {void}\n */\n\n show: function() {\n var self = this;\n\n self.callActions('beforeShow', arguments);\n\n if (!self.isShown) {\n self.dom.el.style.display = '';\n\n self.isShown = true;\n }\n\n self.callActions('afterShow', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @return {void}\n */\n\n hide: function() {\n var self = this;\n\n self.callActions('beforeHide', arguments);\n\n if (self.isShown) {\n self.dom.el.style.display = 'none';\n\n self.isShown = false;\n }\n\n self.callActions('afterHide', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {mixitup.IMoveData} moveData\n * @return {void}\n */\n\n move: function(moveData) {\n var self = this;\n\n self.callActions('beforeMove', arguments);\n\n if (!self.isExcluded) {\n self.mixer.targetsMoved++;\n }\n\n self.applyStylesIn(moveData);\n\n requestAnimationFrame(function() {\n self.applyStylesOut(moveData);\n });\n\n self.callActions('afterMove', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {object} posData\n * @param {number} multiplier\n * @return {void}\n */\n\n applyTween: function(posData, multiplier) {\n var self = this,\n propertyName = '',\n tweenData = null,\n posIn = posData.posIn,\n currentTransformValues = [],\n currentValues = new mixitup.StyleData(),\n i = -1;\n\n self.callActions('beforeApplyTween', arguments);\n\n currentValues.x = posIn.x;\n currentValues.y = posIn.y;\n\n if (multiplier === 0) {\n self.hide();\n } else if (!self.isShown) {\n self.show();\n }\n\n for (i = 0; propertyName = mixitup.features.TWEENABLE[i]; i++) {\n tweenData = posData.tweenData[propertyName];\n\n if (propertyName === 'x') {\n if (!tweenData) continue;\n\n currentValues.x = posIn.x + (tweenData * multiplier);\n } else if (propertyName === 'y') {\n if (!tweenData) continue;\n\n currentValues.y = posIn.y + (tweenData * multiplier);\n } else if (tweenData instanceof mixitup.TransformData) {\n if (!tweenData.value) continue;\n\n currentValues[propertyName].value =\n posIn[propertyName].value + (tweenData.value * multiplier);\n\n currentValues[propertyName].unit = tweenData.unit;\n\n currentTransformValues.push(\n propertyName + '(' + currentValues[propertyName].value + tweenData.unit + ')'\n );\n } else {\n if (!tweenData) continue;\n\n currentValues[propertyName] = posIn[propertyName] + (tweenData * multiplier);\n\n self.dom.el.style[propertyName] = currentValues[propertyName];\n }\n }\n\n if (currentValues.x || currentValues.y) {\n currentTransformValues.unshift('translate(' + currentValues.x + 'px, ' + currentValues.y + 'px)');\n }\n\n if (currentTransformValues.length) {\n self.dom.el.style[mixitup.features.transformProp] = currentTransformValues.join(' ');\n }\n\n self.callActions('afterApplyTween', arguments);\n },\n\n /**\n * Applies the initial styling to a target element before any transition\n * is applied.\n *\n * @private\n * @instance\n * @param {mixitup.IMoveData} moveData\n * @return {void}\n */\n\n applyStylesIn: function(moveData) {\n var self = this,\n posIn = moveData.posIn,\n isFading = self.mixer.effectsIn.opacity !== 1,\n transformValues = [];\n\n self.callActions('beforeApplyStylesIn', arguments);\n\n transformValues.push('translate(' + posIn.x + 'px, ' + posIn.y + 'px)');\n\n if (self.mixer.config.animation.animateResizeTargets) {\n if (moveData.statusChange !== 'show') {\n // Don't apply posIn width or height or showing, as will be 0\n\n self.dom.el.style.width = posIn.width + 'px';\n self.dom.el.style.height = posIn.height + 'px';\n }\n\n self.dom.el.style.marginRight = posIn.marginRight + 'px';\n self.dom.el.style.marginBottom = posIn.marginBottom + 'px';\n }\n\n isFading && (self.dom.el.style.opacity = posIn.opacity);\n\n if (moveData.statusChange === 'show') {\n transformValues = transformValues.concat(self.mixer.transformIn);\n }\n\n self.dom.el.style[mixitup.features.transformProp] = transformValues.join(' ');\n\n self.callActions('afterApplyStylesIn', arguments);\n },\n\n /**\n * Applies a transition followed by the final styles for the element to\n * transition towards.\n *\n * @private\n * @instance\n * @param {mixitup.IMoveData} moveData\n * @return {void}\n */\n\n applyStylesOut: function(moveData) {\n var self = this,\n transitionRules = [],\n transformValues = [],\n isResizing = self.mixer.config.animation.animateResizeTargets,\n isFading = typeof self.mixer.effectsIn.opacity !== 'undefined';\n\n self.callActions('beforeApplyStylesOut', arguments);\n\n // Build the transition rules\n\n transitionRules.push(self.writeTransitionRule(\n mixitup.features.transformRule,\n moveData.staggerIndex\n ));\n\n if (moveData.statusChange !== 'none') {\n transitionRules.push(self.writeTransitionRule(\n 'opacity',\n moveData.staggerIndex,\n moveData.duration\n ));\n }\n\n if (isResizing) {\n transitionRules.push(self.writeTransitionRule(\n 'width',\n moveData.staggerIndex,\n moveData.duration\n ));\n\n transitionRules.push(self.writeTransitionRule(\n 'height',\n moveData.staggerIndex,\n moveData.duration\n ));\n\n transitionRules.push(self.writeTransitionRule(\n 'margin',\n moveData.staggerIndex,\n moveData.duration\n ));\n }\n\n // If no callback was provided, the element will\n // not transition in any way so tag it as \"immovable\"\n\n if (!moveData.callback) {\n self.mixer.targetsImmovable++;\n\n if (self.mixer.targetsMoved === self.mixer.targetsImmovable) {\n // If the total targets moved is equal to the\n // number of immovable targets, the operation\n // should be considered finished\n\n self.mixer.cleanUp(moveData.operation);\n }\n\n return;\n }\n\n // If the target will transition in some fasion,\n // assign a callback function\n\n self.operation = moveData.operation;\n self.callback = moveData.callback;\n\n // As long as the target is not excluded, increment\n // the total number of targets bound\n\n !self.isExcluded && self.mixer.targetsBound++;\n\n // Tag the target as bound to differentiate from transitionEnd\n // events that may come from stylesheet driven effects\n\n self.isBound = true;\n\n // Apply the transition\n\n self.applyTransition(transitionRules);\n\n // Apply width, height and margin negation\n\n if (isResizing && moveData.posOut.width > 0 && moveData.posOut.height > 0) {\n self.dom.el.style.width = moveData.posOut.width + 'px';\n self.dom.el.style.height = moveData.posOut.height + 'px';\n self.dom.el.style.marginRight = moveData.posOut.marginRight + 'px';\n self.dom.el.style.marginBottom = moveData.posOut.marginBottom + 'px';\n }\n\n if (!self.mixer.config.animation.nudge && moveData.statusChange === 'hide') {\n // If we're not nudging, the translation should be\n // applied before any other transforms to prevent\n // lateral movement\n\n transformValues.push('translate(' + moveData.posOut.x + 'px, ' + moveData.posOut.y + 'px)');\n }\n\n // Apply fade\n\n switch (moveData.statusChange) {\n case 'hide':\n isFading && (self.dom.el.style.opacity = self.mixer.effectsOut.opacity);\n\n transformValues = transformValues.concat(self.mixer.transformOut);\n\n break;\n case 'show':\n isFading && (self.dom.el.style.opacity = 1);\n }\n\n if (\n self.mixer.config.animation.nudge ||\n (!self.mixer.config.animation.nudge && moveData.statusChange !== 'hide')\n ) {\n // Opposite of above - apply translate after\n // other transform\n\n transformValues.push('translate(' + moveData.posOut.x + 'px, ' + moveData.posOut.y + 'px)');\n }\n\n // Apply transforms\n\n self.dom.el.style[mixitup.features.transformProp] = transformValues.join(' ');\n\n self.callActions('afterApplyStylesOut', arguments);\n },\n\n /**\n * Combines the name of a CSS property with the appropriate duration and delay\n * values to created a valid transition rule.\n *\n * @private\n * @instance\n * @since 3.0.0\n * @param {string} property\n * @param {number} staggerIndex\n * @param {number} duration\n * @return {string}\n */\n\n writeTransitionRule: function(property, staggerIndex, duration) {\n var self = this,\n delay = self.getDelay(staggerIndex),\n rule = '';\n\n rule = property + ' ' +\n (duration > 0 ? duration : self.mixer.config.animation.duration) + 'ms ' +\n delay + 'ms ' +\n (property === 'opacity' ? 'linear' : self.mixer.config.animation.easing);\n\n return self.callFilters('ruleWriteTransitionRule', rule, arguments);\n },\n\n /**\n * Calculates the transition delay for each target element based on its index, if\n * staggering is applied. If defined, A custom `animation.staggerSeqeuence`\n * function can be used to manipulate the order of indices to produce custom\n * stagger effects (e.g. for use in a grid with irregular row lengths).\n *\n * @private\n * @instance\n * @since 2.0.0\n * @param {number} index\n * @return {number}\n */\n\n getDelay: function(index) {\n var self = this,\n delay = -1;\n\n if (typeof self.mixer.config.animation.staggerSequence === 'function') {\n index = self.mixer.config.animation.staggerSequence.call(self, index, self.state);\n }\n\n delay = !!self.mixer.staggerDuration ? index * self.mixer.staggerDuration : 0;\n\n return self.callFilters('delayGetDelay', delay, arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {string[]} rules\n * @return {void}\n */\n\n applyTransition: function(rules) {\n var self = this,\n transitionString = rules.join(', ');\n\n self.callActions('beforeApplyTransition', arguments);\n\n self.dom.el.style[mixitup.features.transitionProp] = transitionString;\n\n self.callActions('afterApplyTransition', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {Event} e\n * @return {void}\n */\n\n handleTransitionEnd: function(e) {\n var self = this,\n propName = e.propertyName,\n canResize = self.mixer.config.animation.animateResizeTargets;\n\n self.callActions('beforeHandleTransitionEnd', arguments);\n\n if (\n self.isBound &&\n e.target.matches(self.mixer.config.selectors.target) &&\n (\n propName.indexOf('transform') > -1 ||\n propName.indexOf('opacity') > -1 ||\n canResize && propName.indexOf('height') > -1 ||\n canResize && propName.indexOf('width') > -1 ||\n canResize && propName.indexOf('margin') > -1\n )\n ) {\n self.callback.call(self, self.operation);\n\n self.isBound = false;\n self.callback = null;\n self.operation = null;\n }\n\n self.callActions('afterHandleTransitionEnd', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {Event} e\n * @return {void}\n */\n\n eventBus: function(e) {\n var self = this;\n\n self.callActions('beforeEventBus', arguments);\n\n switch (e.type) {\n case 'webkitTransitionEnd':\n case 'transitionend':\n self.handleTransitionEnd(e);\n }\n\n self.callActions('afterEventBus', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @return {void}\n */\n\n unbindEvents: function() {\n var self = this;\n\n self.callActions('beforeUnbindEvents', arguments);\n\n h.off(self.dom.el, 'webkitTransitionEnd', self.handler);\n h.off(self.dom.el, 'transitionend', self.handler);\n\n self.callActions('afterUnbindEvents', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @return {void}\n */\n\n bindEvents: function() {\n var self = this,\n transitionEndEvent = '';\n\n self.callActions('beforeBindEvents', arguments);\n\n transitionEndEvent = mixitup.features.transitionPrefix === 'webkit' ? 'webkitTransitionEnd' : 'transitionend';\n\n self.handler = function(e) {\n return self.eventBus(e);\n };\n\n h.on(self.dom.el, transitionEndEvent, self.handler);\n\n self.callActions('afterBindEvents', arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @param {boolean} [getBox]\n * @return {PosData}\n */\n\n getPosData: function(getBox) {\n var self = this,\n styles = {},\n rect = null,\n posData = new mixitup.StyleData();\n\n self.callActions('beforeGetPosData', arguments);\n\n posData.x = self.dom.el.offsetLeft;\n posData.y = self.dom.el.offsetTop;\n\n if (self.mixer.config.animation.animateResizeTargets || getBox) {\n rect = self.dom.el.getBoundingClientRect();\n\n posData.top = rect.top;\n posData.right = rect.right;\n posData.bottom = rect.bottom;\n posData.left = rect.left;\n\n posData.width = rect.width;\n posData.height = rect.height;\n }\n\n if (self.mixer.config.animation.animateResizeTargets) {\n styles = window.getComputedStyle(self.dom.el);\n\n posData.marginBottom = parseFloat(styles.marginBottom);\n posData.marginRight = parseFloat(styles.marginRight);\n }\n\n return self.callFilters('posDataGetPosData', posData, arguments);\n },\n\n /**\n * @private\n * @instance\n * @since 3.0.0\n * @return {void}\n */\n\n cleanUp: function() {\n var self = this;\n\n self.callActions('beforeCleanUp', arguments);\n\n self.dom.el.style[mixitup.features.transformProp] = '';\n self.dom.el.style[mixitup.features.transitionProp] = '';\n self.dom.el.style.opacity = '';\n\n if (self.mixer.config.animation.animateResizeTargets) {\n self.dom.el.style.width = '';\n self.dom.el.style.height = '';\n self.dom.el.style.marginRight = '';\n self.dom.el.style.marginBottom = '';\n }\n\n self.callActions('afterCleanUp', arguments);\n }\n });\n\n /**\n * A jQuery-collection-like wrapper around one or more `mixitup.Mixer` instances\n * allowing simultaneous control of said instances similar to the MixItUp 2 API.\n *\n * @example\n * new mixitup.Collection(instances)\n *\n * @constructor\n * @namespace\n * @memberof mixitup\n * @private\n * @since 3.0.0\n * @param {mixitup.Mixer[]} instances\n */\n\n mixitup.Collection = function(instances) {\n var instance = null,\n i = -1;\n\n this.callActions('beforeConstruct');\n\n for (i = 0; instance = instances[i]; i++) {\n this[i] = instance;\n }\n\n this.length = instances.length;\n\n this.callActions('afterConstruct');\n\n h.freeze(this);\n };\n\n mixitup.BaseStatic.call(mixitup.Collection);\n\n mixitup.Collection.prototype = Object.create(mixitup.Base.prototype);\n\n h.extend(mixitup.Collection.prototype,\n /** @lends mixitup.Collection */\n {\n constructor: mixitup.Collection,\n\n /**\n * Calls a method on all instances in the collection by passing the method\n * name as a string followed by any applicable parameters to be curried into\n * to the method.\n *\n * @example\n * .mixitup(methodName[,arg1][,arg2..]);\n *\n * @example\n * var collection = new Collection([mixer1, mixer2]);\n *\n * return collection.mixitup('filter', '.category-a')\n * .then(function(states) {\n * state.forEach(function(state) {\n * console.log(state.activeFilter.selector); // .category-a\n * });\n * });\n *\n * @public\n * @instance\n * @since 3.0.0\n * @param {string} methodName\n * @return {Promise>}\n */\n\n mixitup: function(methodName) {\n var self = this,\n instance = null,\n args = Array.prototype.slice.call(arguments),\n tasks = [],\n i = -1;\n\n this.callActions('beforeMixitup');\n\n args.shift();\n\n for (i = 0; instance = self[i]; i++) {\n tasks.push(instance[methodName].apply(instance, args));\n }\n\n return self.callFilters('promiseMixitup', h.all(tasks, mixitup.libraries), arguments);\n }\n });\n\n /**\n * `mixitup.Operation` objects contain all data neccessary to describe the full\n * lifecycle of any MixItUp operation. They can be used to compute and store an\n * operation for use at a later time (e.g. programmatic tweening).\n *\n * @constructor\n * @namespace\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.Operation = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.id = '';\n\n this.args = [];\n this.command = null;\n this.showPosData = [];\n this.toHidePosData = [];\n\n this.startState = null;\n this.newState = null;\n this.docState = null;\n\n this.willSort = false;\n this.willChangeLayout = false;\n this.hasEffect = false;\n this.hasFailed = false;\n\n this.triggerElement = null;\n\n this.show = [];\n this.hide = [];\n this.matching = [];\n this.toShow = [];\n this.toHide = [];\n this.toMove = [];\n this.toRemove = [];\n this.startOrder = [];\n this.newOrder = [];\n this.startSort = null;\n this.newSort = null;\n this.startFilter = null;\n this.newFilter = null;\n this.startDataset = null;\n this.newDataset = null;\n this.viewportDeltaX = 0;\n this.viewportDeltaY = 0;\n this.startX = 0;\n this.startY = 0;\n this.startHeight = 0;\n this.startWidth = 0;\n this.newX = 0;\n this.newY = 0;\n this.newHeight = 0;\n this.newWidth = 0;\n this.startContainerClassName = '';\n this.startDisplay = '';\n this.newContainerClassName = '';\n this.newDisplay = '';\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.Operation);\n\n mixitup.Operation.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.Operation.prototype.constructor = mixitup.Operation;\n\n /**\n * `mixitup.State` objects expose various pieces of data detailing the state of\n * a MixItUp instance. They are provided at the start and end of any operation via\n * callbacks and events, with the most recent state stored between operations\n * for retrieval at any time via the API.\n *\n * @constructor\n * @namespace\n * @memberof mixitup\n * @public\n * @since 3.0.0\n */\n\n mixitup.State = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /**\n * The ID of the mixer instance.\n *\n * @name id\n * @memberof mixitup.State\n * @instance\n * @type {string}\n * @default ''\n */\n\n this.id = '';\n\n /**\n * The currently active filter command as set by a control click or API call.\n *\n * @name activeFilter\n * @memberof mixitup.State\n * @instance\n * @type {mixitup.CommandFilter}\n * @default null\n */\n\n this.activeFilter = null;\n\n /**\n * The currently active sort command as set by a control click or API call.\n *\n * @name activeSort\n * @memberof mixitup.State\n * @instance\n * @type {mixitup.CommandSort}\n * @default null\n */\n\n this.activeSort = null;\n\n /**\n * The current layout-specific container class name, if applied.\n *\n * @name activeContainerClassName\n * @memberof mixitup.State\n * @instance\n * @type {string}\n * @default ''\n */\n\n this.activeContainerClassName = '';\n\n /**\n * A reference to the container element that the mixer is instantiated on.\n *\n * @name container\n * @memberof mixitup.State\n * @instance\n * @type {Element}\n * @default null\n */\n\n this.container = null;\n\n /**\n * An array of all target elements indexed by the mixer.\n *\n * @name targets\n * @memberof mixitup.State\n * @instance\n * @type {Array.}\n * @default []\n */\n\n this.targets = [];\n\n /**\n * An array of all target elements not matching the current filter.\n *\n * @name hide\n * @memberof mixitup.State\n * @instance\n * @type {Array.}\n * @default []\n */\n\n this.hide = [];\n\n /**\n * An array of all target elements matching the current filter and any additional\n * limits applied such as pagination.\n *\n * @name show\n * @memberof mixitup.State\n * @instance\n * @type {Array.}\n * @default []\n */\n\n this.show = [];\n\n /**\n * An array of all target elements matching the current filter irrespective of\n * any additional limits applied such as pagination.\n *\n * @name matching\n * @memberof mixitup.State\n * @instance\n * @type {Array.}\n * @default []\n */\n\n this.matching = [];\n\n /**\n * An integer representing the total number of target elements indexed by the\n * mixer. Equivalent to `state.targets.length`.\n *\n * @name totalTargets\n * @memberof mixitup.State\n * @instance\n * @type {number}\n * @default -1\n */\n\n this.totalTargets = -1;\n\n /**\n * An integer representing the total number of target elements matching the\n * current filter and any additional limits applied such as pagination.\n * Equivalent to `state.show.length`.\n *\n * @name totalShow\n * @memberof mixitup.State\n * @instance\n * @type {number}\n * @default -1\n */\n\n this.totalShow = -1;\n\n /**\n * An integer representing the total number of target elements not matching\n * the current filter. Equivalent to `state.hide.length`.\n *\n * @name totalHide\n * @memberof mixitup.State\n * @instance\n * @type {number}\n * @default -1\n */\n\n this.totalHide = -1;\n\n /**\n * An integer representing the total number of target elements matching the\n * current filter irrespective of any other limits applied such as pagination.\n * Equivalent to `state.matching.length`.\n *\n * @name totalMatching\n * @memberof mixitup.State\n * @instance\n * @type {number}\n * @default -1\n */\n\n this.totalMatching = -1;\n\n /**\n * A boolean indicating whether the last operation \"failed\", i.e. no targets\n * could be found matching the filter.\n *\n * @name hasFailed\n * @memberof mixitup.State\n * @instance\n * @type {boolean}\n * @default false\n */\n\n this.hasFailed = false;\n\n /**\n * The DOM element that was clicked if the last operation was triggered by the\n * clicking of a control and not an API call.\n *\n * @name triggerElement\n * @memberof mixitup.State\n * @instance\n * @type {Element|null}\n * @default null\n */\n\n this.triggerElement = null;\n\n /**\n * The currently active dataset underlying the rendered targets, if the\n * dataset API is in use.\n *\n * @name activeDataset\n * @memberof mixitup.State\n * @instance\n * @type {Array.}\n * @default null\n */\n\n this.activeDataset = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.State);\n\n mixitup.State.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.State.prototype.constructor = mixitup.State;\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.UserInstruction = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n this.command = {};\n this.animate = false;\n this.callback = null;\n\n this.callActions('afterConstruct');\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.UserInstruction);\n\n mixitup.UserInstruction.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.UserInstruction.prototype.constructor = mixitup.UserInstruction;\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n */\n\n mixitup.Messages = function() {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct');\n\n /* Errors\n ----------------------------------------------------------------------------- */\n\n this.ERROR_FACTORY_INVALID_CONTAINER =\n '[MixItUp] An invalid selector or element reference was passed to the mixitup factory function';\n\n this.ERROR_FACTORY_CONTAINER_NOT_FOUND =\n '[MixItUp] The provided selector yielded no container element';\n\n this.ERROR_CONFIG_INVALID_ANIMATION_EFFECTS =\n '[MixItUp] Invalid value for `animation.effects`';\n\n this.ERROR_CONFIG_INVALID_CONTROLS_SCOPE =\n '[MixItUp] Invalid value for `controls.scope`';\n\n this.ERROR_CONFIG_INVALID_PROPERTY =\n '[MixitUp] Invalid configuration object property \"${erroneous}\"${suggestion}';\n\n this.ERROR_CONFIG_INVALID_PROPERTY_SUGGESTION =\n '. Did you mean \"${probableMatch}\"?';\n\n this.ERROR_CONFIG_DATA_UID_KEY_NOT_SET =\n '[MixItUp] To use the dataset API, a UID key must be specified using `data.uidKey`';\n\n this.ERROR_DATASET_INVALID_UID_KEY =\n '[MixItUp] The specified UID key \"${uidKey}\" is not present on one or more dataset items';\n\n this.ERROR_DATASET_DUPLICATE_UID =\n '[MixItUp] The UID \"${uid}\" was found on two or more dataset items. UIDs must be unique.';\n\n this.ERROR_INSERT_INVALID_ARGUMENTS =\n '[MixItUp] Please provider either an index or a sibling and position to insert, not both';\n\n this.ERROR_INSERT_PREEXISTING_ELEMENT =\n '[MixItUp] An element to be inserted already exists in the container';\n\n this.ERROR_FILTER_INVALID_ARGUMENTS =\n '[MixItUp] Please provide either a selector or collection `.filter()`, not both';\n\n this.ERROR_DATASET_NOT_SET =\n '[MixItUp] To use the dataset API with pre-rendered targets, a starting dataset must be set using `load.dataset`';\n\n this.ERROR_DATASET_PRERENDERED_MISMATCH =\n '[MixItUp] `load.dataset` does not match pre-rendered targets';\n\n this.ERROR_DATASET_RENDERER_NOT_SET =\n '[MixItUp] To insert an element via the dataset API, a target renderer function must be provided to `render.target`';\n\n this.ERROR_SORT_NON_EXISTENT_ELEMENT =\n '[MixItUp] An element to be sorted does not already exist in the container';\n\n /* Warnings\n ----------------------------------------------------------------------------- */\n\n this.WARNING_FACTORY_PREEXISTING_INSTANCE =\n '[MixItUp] WARNING: This element already has an active MixItUp instance. The provided configuration object will be ignored.' +\n ' If you wish to perform additional methods on this instance, please create a reference.';\n\n this.WARNING_INSERT_NO_ELEMENTS =\n '[MixItUp] WARNING: No valid elements were passed to `.insert()`';\n\n this.WARNING_REMOVE_NO_ELEMENTS =\n '[MixItUp] WARNING: No valid elements were passed to `.remove()`';\n\n this.WARNING_MULTIMIX_INSTANCE_QUEUE_FULL =\n '[MixItUp] WARNING: An operation was requested but the MixItUp instance was busy. The operation was rejected because the ' +\n 'queue is full or queuing is disabled.';\n\n this.WARNING_GET_OPERATION_INSTANCE_BUSY =\n '[MixItUp] WARNING: Operations can be be created while the MixItUp instance is busy.';\n\n this.WARNING_NO_PROMISE_IMPLEMENTATION =\n '[MixItUp] WARNING: No Promise implementations could be found. If you wish to use promises with MixItUp please install' +\n ' an ES6 Promise polyfill.';\n\n this.WARNING_INCONSISTENT_SORTING_ATTRIBUTES =\n '[MixItUp] WARNING: The requested sorting data attribute \"${attribute}\" was not present on one or more target elements' +\n ' which may product unexpected sort output';\n\n this.callActions('afterConstruct');\n\n this.compileTemplates();\n\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.Messages);\n\n mixitup.Messages.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.Messages.prototype.constructor = mixitup.Messages;\n\n /**\n * @return {void}\n */\n\n mixitup.Messages.prototype.compileTemplates = function() {\n var errorKey = '';\n var errorMessage = '';\n\n for (errorKey in this) {\n if (typeof (errorMessage = this[errorKey]) !== 'string') continue;\n\n this[h.camelCase(errorKey)] = h.template(errorMessage);\n }\n };\n\n mixitup.messages = new mixitup.Messages();\n\n /**\n * @constructor\n * @memberof mixitup\n * @private\n * @since 3.0.0\n * @param {mixitup.Mixer} mixer\n */\n\n mixitup.Facade = function Mixer(mixer) {\n mixitup.Base.call(this);\n\n this.callActions('beforeConstruct', arguments);\n\n this.configure = mixer.configure.bind(mixer);\n this.show = mixer.show.bind(mixer);\n this.hide = mixer.hide.bind(mixer);\n this.filter = mixer.filter.bind(mixer);\n this.toggleOn = mixer.toggleOn.bind(mixer);\n this.toggleOff = mixer.toggleOff.bind(mixer);\n this.sort = mixer.sort.bind(mixer);\n this.changeLayout = mixer.changeLayout.bind(mixer);\n this.multimix = mixer.multimix.bind(mixer);\n this.dataset = mixer.dataset.bind(mixer);\n this.tween = mixer.tween.bind(mixer);\n this.insert = mixer.insert.bind(mixer);\n this.insertBefore = mixer.insertBefore.bind(mixer);\n this.insertAfter = mixer.insertAfter.bind(mixer);\n this.prepend = mixer.prepend.bind(mixer);\n this.append = mixer.append.bind(mixer);\n this.remove = mixer.remove.bind(mixer);\n this.destroy = mixer.destroy.bind(mixer);\n this.forceRefresh = mixer.forceRefresh.bind(mixer);\n this.forceRender = mixer.forceRender.bind(mixer);\n this.isMixing = mixer.isMixing.bind(mixer);\n this.getOperation = mixer.getOperation.bind(mixer);\n this.getConfig = mixer.getConfig.bind(mixer);\n this.getState = mixer.getState.bind(mixer);\n\n this.callActions('afterConstruct', arguments);\n\n h.freeze(this);\n h.seal(this);\n };\n\n mixitup.BaseStatic.call(mixitup.Facade);\n\n mixitup.Facade.prototype = Object.create(mixitup.Base.prototype);\n\n mixitup.Facade.prototype.constructor = mixitup.Facade;\n\n if (typeof exports === 'object' && typeof module === 'object') {\n module.exports = mixitup;\n } else if (typeof define === 'function' && define.amd) {\n define(function() {\n return mixitup;\n });\n } else if (typeof window.mixitup === 'undefined' || typeof window.mixitup !== 'function') {\n window.mixitup = mixitup;\n }\n mixitup.BaseStatic.call(mixitup.constructor);\n\n mixitup.NAME = 'mixitup';\n mixitup.CORE_VERSION = '3.3.1';\n})(window);","/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n stickybits - Stickybits is a lightweight alternative to `position: sticky` polyfills\n @version v3.7.11\n @link https://github.com/yowainwright/stickybits#readme\n @author Jeff Wainwright (https://jeffry.in)\n @license MIT\n**/\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\n/*\n STICKYBITS 💉\n --------\n > a lightweight alternative to `position: sticky` polyfills 🍬\n --------\n - each method is documented above it our view the readme\n - Stickybits does not manage polymorphic functionality (position like properties)\n * polymorphic functionality: (in the context of describing Stickybits)\n means making things like `position: sticky` be loosely supported with position fixed.\n It also means that features like `useStickyClasses` takes on styles like `position: fixed`.\n --------\n defaults 🔌\n --------\n - version = `package.json` version\n - userAgent = viewer browser agent\n - target = DOM element selector\n - noStyles = boolean\n - offset = number\n - parentClass = 'string'\n - scrollEl = window || DOM element selector || DOM element\n - stickyClass = 'string'\n - stuckClass = 'string'\n - useStickyClasses = boolean\n - useFixed = boolean\n - useGetBoundingClientRect = boolean\n - verticalPosition = 'string'\n - applyStyle = function\n --------\n props🔌\n --------\n - p = props {object}\n --------\n instance note\n --------\n - stickybits parent methods return this\n - stickybits instance methods return an instance item\n --------\n nomenclature\n --------\n - target => el => e\n - props => o || p\n - instance => item => it\n --------\n methods\n --------\n - .definePosition = defines sticky or fixed\n - .addInstance = an array of objects for each Stickybits Target\n - .getClosestParent = gets the parent for non-window scroll\n - .getTopPosition = gets the element top pixel position from the viewport\n - .computeScrollOffsets = computes scroll position\n - .toggleClasses = older browser toggler\n - .manageState = manages sticky state\n - .removeInstance = removes an instance\n - .cleanup = removes all Stickybits instances and cleans up dom from stickybits\n*/\nvar Stickybits = /*#__PURE__*/function () {\n function Stickybits(target, obj) {\n var _this = this;\n\n var o = typeof obj !== 'undefined' ? obj : {};\n this.version = '3.7.11';\n this.userAgent = window.navigator.userAgent || 'no `userAgent` provided by the browser';\n this.props = {\n customStickyChangeNumber: o.customStickyChangeNumber || null,\n noStyles: o.noStyles || false,\n stickyBitStickyOffset: o.stickyBitStickyOffset || 0,\n parentClass: o.parentClass || 'js-stickybit-parent',\n scrollEl: typeof o.scrollEl === 'string' ? document.querySelector(o.scrollEl) : o.scrollEl || window,\n stickyClass: o.stickyClass || 'js-is-sticky',\n stuckClass: o.stuckClass || 'js-is-stuck',\n stickyChangeClass: o.stickyChangeClass || 'js-is-sticky--change',\n useStickyClasses: o.useStickyClasses || false,\n useFixed: o.useFixed || false,\n useGetBoundingClientRect: o.useGetBoundingClientRect || false,\n verticalPosition: o.verticalPosition || 'top',\n applyStyle: o.applyStyle || function (item, style) {\n return _this.applyStyle(item, style);\n }\n };\n /*\n define positionVal after the setting of props, because definePosition looks at the props.useFixed\n ----\n - uses a computed (`.definePosition()`)\n - defined the position\n */\n\n this.props.positionVal = this.definePosition() || 'fixed';\n this.instances = [];\n var _this$props = this.props,\n positionVal = _this$props.positionVal,\n verticalPosition = _this$props.verticalPosition,\n noStyles = _this$props.noStyles,\n stickyBitStickyOffset = _this$props.stickyBitStickyOffset;\n var verticalPositionStyle = verticalPosition === 'top' && !noStyles ? stickyBitStickyOffset + \"px\" : '';\n var positionStyle = positionVal !== 'fixed' ? positionVal : '';\n this.els = typeof target === 'string' ? document.querySelectorAll(target) : target;\n if (!('length' in this.els)) this.els = [this.els];\n\n for (var i = 0; i < this.els.length; i++) {\n var _styles;\n\n var el = this.els[i];\n var instance = this.addInstance(el, this.props); // set vertical position\n\n this.props.applyStyle({\n styles: (_styles = {}, _styles[verticalPosition] = verticalPositionStyle, _styles.position = positionStyle, _styles),\n classes: {}\n }, instance);\n this.manageState(instance); // instances are an array of objects\n\n this.instances.push(instance);\n }\n }\n /*\n setStickyPosition ✔️\n --------\n — most basic thing stickybits does\n => checks to see if position sticky is supported\n => defined the position to be used\n => stickybits works accordingly\n */\n\n\n var _proto = Stickybits.prototype;\n\n _proto.definePosition = function definePosition() {\n var stickyProp;\n\n if (this.props.useFixed) {\n stickyProp = 'fixed';\n } else {\n var prefix = ['', '-o-', '-webkit-', '-moz-', '-ms-'];\n var test = document.head.style;\n\n for (var i = 0; i < prefix.length; i += 1) {\n test.position = prefix[i] + \"sticky\";\n }\n\n stickyProp = test.position ? test.position : 'fixed';\n test.position = '';\n }\n\n return stickyProp;\n }\n /*\n addInstance ✔️\n --------\n — manages instances of items\n - takes in an el and props\n - returns an item object\n ---\n - target = el\n - o = {object} = props\n - scrollEl = 'string' | object\n - verticalPosition = number\n - off = boolean\n - parentClass = 'string'\n - stickyClass = 'string'\n - stuckClass = 'string'\n ---\n - defined later\n - parent = dom element\n - state = 'string'\n - offset = number\n - stickyStart = number\n - stickyStop = number\n - returns an instance object\n */\n ;\n\n _proto.addInstance = function addInstance(el, props) {\n var _this2 = this;\n\n var item = {\n el: el,\n parent: el.parentNode,\n props: props\n };\n\n if (props.positionVal === 'fixed' || props.useStickyClasses) {\n this.isWin = this.props.scrollEl === window;\n var se = this.isWin ? window : this.getClosestParent(item.el, item.props.scrollEl);\n this.computeScrollOffsets(item);\n this.toggleClasses(item.parent, '', props.parentClass);\n item.state = 'default';\n item.stateChange = 'default';\n\n item.stateContainer = function () {\n return _this2.manageState(item);\n };\n\n se.addEventListener('scroll', item.stateContainer);\n }\n\n return item;\n }\n /*\n --------\n getParent 👨‍\n --------\n - a helper function that gets the target element's parent selected el\n - only used for non `window` scroll elements\n - supports older browsers\n */\n ;\n\n _proto.getClosestParent = function getClosestParent(el, match) {\n // p = parent element\n var p = match;\n var e = el;\n if (e.parentElement === p) return p; // traverse up the dom tree until we get to the parent\n\n while (e.parentElement !== p) {\n e = e.parentElement;\n } // return parent element\n\n\n return p;\n }\n /*\n --------\n getTopPosition\n --------\n - a helper function that gets the topPosition of a Stickybit element\n - from the top level of the DOM\n */\n ;\n\n _proto.getTopPosition = function getTopPosition(el) {\n if (this.props.useGetBoundingClientRect) {\n return el.getBoundingClientRect().top + (this.props.scrollEl.pageYOffset || document.documentElement.scrollTop);\n }\n\n var topPosition = 0;\n\n do {\n topPosition = el.offsetTop + topPosition;\n } while (el = el.offsetParent);\n\n return topPosition;\n }\n /*\n computeScrollOffsets 📊\n ---\n computeScrollOffsets for Stickybits\n - defines\n - offset\n - start\n - stop\n */\n ;\n\n _proto.computeScrollOffsets = function computeScrollOffsets(item) {\n var it = item;\n var p = it.props;\n var el = it.el;\n var parent = it.parent;\n var isCustom = !this.isWin && p.positionVal === 'fixed';\n var isTop = p.verticalPosition !== 'bottom';\n var scrollElOffset = isCustom ? this.getTopPosition(p.scrollEl) : 0;\n var stickyStart = isCustom ? this.getTopPosition(parent) - scrollElOffset : this.getTopPosition(parent);\n var stickyChangeOffset = p.customStickyChangeNumber !== null ? p.customStickyChangeNumber : el.offsetHeight;\n var parentBottom = stickyStart + parent.offsetHeight;\n it.offset = !isCustom ? scrollElOffset + p.stickyBitStickyOffset : 0;\n it.stickyStart = isTop ? stickyStart - it.offset : 0;\n it.stickyChange = it.stickyStart + stickyChangeOffset;\n it.stickyStop = isTop ? parentBottom - (el.offsetHeight + it.offset) : parentBottom - window.innerHeight;\n }\n /*\n toggleClasses ⚖️\n ---\n toggles classes (for older browser support)\n r = removed class\n a = added class\n */\n ;\n\n _proto.toggleClasses = function toggleClasses(el, r, a) {\n var e = el;\n var cArray = e.className.split(' ');\n if (a && cArray.indexOf(a) === -1) cArray.push(a);\n var rItem = cArray.indexOf(r);\n if (rItem !== -1) cArray.splice(rItem, 1);\n e.className = cArray.join(' ');\n }\n /*\n manageState 📝\n ---\n - defines the state\n - normal\n - sticky\n - stuck\n */\n ;\n\n _proto.manageState = function manageState(item) {\n var _this3 = this;\n\n // cache object\n var it = item;\n var p = it.props;\n var state = it.state;\n var stateChange = it.stateChange;\n var start = it.stickyStart;\n var change = it.stickyChange;\n var stop = it.stickyStop; // cache props\n\n var pv = p.positionVal;\n var se = p.scrollEl;\n var sticky = p.stickyClass;\n var stickyChange = p.stickyChangeClass;\n var stuck = p.stuckClass;\n var vp = p.verticalPosition;\n var isTop = vp !== 'bottom';\n var aS = p.applyStyle;\n var ns = p.noStyles;\n /*\n requestAnimationFrame\n ---\n - use rAF\n - or stub rAF\n */\n\n var rAFStub = function rAFDummy(f) {\n f();\n };\n\n var rAF = !this.isWin ? rAFStub : window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || rAFStub;\n /*\n define scroll vars\n ---\n - scroll\n - notSticky\n - isSticky\n - isStuck\n */\n\n var scroll = this.isWin ? window.scrollY || window.pageYOffset : se.scrollTop;\n var notSticky = scroll > start && scroll < stop && (state === 'default' || state === 'stuck');\n var isSticky = isTop && scroll <= start && (state === 'sticky' || state === 'stuck');\n var isStuck = scroll >= stop && state === 'sticky';\n /*\n Unnamed arrow functions within this block\n ---\n - help wanted or discussion\n - view test.stickybits.js\n - `stickybits .manageState `position: fixed` interface` for more awareness 👀\n */\n\n if (notSticky) {\n it.state = 'sticky';\n } else if (isSticky) {\n it.state = 'default';\n } else if (isStuck) {\n it.state = 'stuck';\n }\n\n var isStickyChange = scroll >= change && scroll <= stop;\n var isNotStickyChange = scroll < change / 2 || scroll > stop;\n\n if (isNotStickyChange) {\n it.stateChange = 'default';\n } else if (isStickyChange) {\n it.stateChange = 'sticky';\n } // Only apply new styles if the state has changed\n\n\n if (state === it.state && stateChange === it.stateChange) return;\n rAF(function () {\n var _styles2, _classes, _styles3, _extends2, _classes2, _style$classes;\n\n var stateStyles = {\n sticky: {\n styles: (_styles2 = {\n position: pv,\n top: '',\n bottom: ''\n }, _styles2[vp] = p.stickyBitStickyOffset + \"px\", _styles2),\n classes: (_classes = {}, _classes[sticky] = true, _classes)\n },\n default: {\n styles: (_styles3 = {}, _styles3[vp] = '', _styles3),\n classes: {}\n },\n stuck: {\n styles: _extends((_extends2 = {}, _extends2[vp] = '', _extends2), pv === 'fixed' && !ns || !_this3.isWin ? {\n position: 'absolute',\n top: '',\n bottom: '0'\n } : {}),\n classes: (_classes2 = {}, _classes2[stuck] = true, _classes2)\n }\n };\n\n if (pv === 'fixed') {\n stateStyles.default.styles.position = '';\n }\n\n var style = stateStyles[it.state];\n style.classes = (_style$classes = {}, _style$classes[stuck] = !!style.classes[stuck], _style$classes[sticky] = !!style.classes[sticky], _style$classes[stickyChange] = isStickyChange, _style$classes);\n aS(style, item);\n });\n }\n /*\n applyStyle\n ---\n - apply the given styles and classes to the element\n */\n ;\n\n _proto.applyStyle = function applyStyle(_ref, item) {\n var styles = _ref.styles,\n classes = _ref.classes;\n // cache object\n var it = item;\n var e = it.el;\n var p = it.props;\n var stl = e.style; // cache props\n\n var ns = p.noStyles;\n var cArray = e.className.split(' '); // Disable due to bug with old versions of eslint-scope and for ... in\n // https://github.com/eslint/eslint/issues/12117\n // eslint-disable-next-line no-unused-vars\n\n for (var cls in classes) {\n var addClass = classes[cls];\n\n if (addClass) {\n if (cArray.indexOf(cls) === -1) cArray.push(cls);\n } else {\n var idx = cArray.indexOf(cls);\n if (idx !== -1) cArray.splice(idx, 1);\n }\n }\n\n e.className = cArray.join(' ');\n\n if (styles['position']) {\n stl['position'] = styles['position'];\n }\n\n if (ns) return; // eslint-disable-next-line no-unused-vars\n\n for (var key in styles) {\n stl[key] = styles[key];\n }\n };\n\n _proto.update = function update(updatedProps) {\n var _this4 = this;\n\n if (updatedProps === void 0) {\n updatedProps = null;\n }\n\n this.instances.forEach(function (instance) {\n _this4.computeScrollOffsets(instance);\n\n if (updatedProps) {\n // eslint-disable-next-line no-unused-vars\n for (var updatedProp in updatedProps) {\n instance.props[updatedProp] = updatedProps[updatedProp];\n }\n }\n });\n return this;\n }\n /*\n removes an instance 👋\n --------\n - cleanup instance\n */\n ;\n\n _proto.removeInstance = function removeInstance(instance) {\n var _styles4, _classes3;\n\n var e = instance.el;\n var p = instance.props;\n this.applyStyle({\n styles: (_styles4 = {\n position: ''\n }, _styles4[p.verticalPosition] = '', _styles4),\n classes: (_classes3 = {}, _classes3[p.stickyClass] = '', _classes3[p.stuckClass] = '', _classes3)\n }, instance);\n this.toggleClasses(e.parentNode, p.parentClass);\n }\n /*\n cleanup 🛁\n --------\n - cleans up each instance\n - clears instance\n */\n ;\n\n _proto.cleanup = function cleanup() {\n for (var i = 0; i < this.instances.length; i += 1) {\n var instance = this.instances[i];\n\n if (instance.stateContainer) {\n instance.props.scrollEl.removeEventListener('scroll', instance.stateContainer);\n }\n\n this.removeInstance(instance);\n }\n\n this.manageState = false;\n this.instances = [];\n };\n\n return Stickybits;\n}();\n/*\n export\n --------\n exports StickBits to be used 🏁\n*/\n\n\nfunction stickybits(target, o) {\n return new Stickybits(target, o);\n}\n\nexport default stickybits;\n","import { getWindow } from 'ssr-window';\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || base === 'container' && !containerEl) return undefined;\n let breakpoint = false;\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n const points = Object.keys(breakpoints).map(point => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return {\n value,\n point\n };\n }\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\n};","import { extend } from '../../shared/utils.js';\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n realIndex,\n initialized,\n params,\n el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n const wasEnabled = params.enabled;\n if (wasMultiRow && !isMultiRow) {\n el.classList.remove(`${params.containerModifierClass}grid`, `${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n el.classList.add(`${params.containerModifierClass}grid`);\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n el.classList.add(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n const isEnabled = swiper.params.enabled;\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev\n });\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate(realIndex);\n swiper.updateSlides();\n }\n swiper.emit('breakpoint', breakpointParams);\n}","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge = swiper.slidesGrid[lastSlideIndex] + swiper.slidesSizesGrid[lastSlideIndex] + slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\nexport default {\n checkOverflow\n};","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach(item => {\n if (typeof item === 'object') {\n Object.keys(item).forEach(classNames => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n el,\n device\n } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'free-mode': swiper.params.freeMode && params.freeMode.enabled\n }, {\n 'autoheight': params.autoHeight\n }, {\n 'rtl': rtl\n }, {\n 'grid': params.grid && params.grid.rows > 1\n }, {\n 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column'\n }, {\n 'android': device.android\n }, {\n 'ios': device.ios\n }, {\n 'css-mode': params.cssMode\n }, {\n 'centered': params.cssMode && params.centeredSlides\n }, {\n 'watch-progress': params.watchSlidesProgress\n }], params.containerModifierClass);\n classNames.push(...suffixes);\n el.classList.add(...classNames);\n swiper.emitContainerClasses();\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","export default function removeClasses() {\n const swiper = this;\n const {\n el,\n classNames\n } = swiper;\n el.classList.remove(...classNames);\n swiper.emitContainerClasses();\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { extend, deleteProps, createElement, elementChildren, elementStyle, elementIndex } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\nimport eventsEmitter from './events-emitter.js';\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\nimport { processLazyPreloader, preload } from '../shared/process-lazy-preloader.js';\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes\n};\nconst extendedDefaults = {};\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (args.length === 1 && args[0].constructor && Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object') {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n const document = getDocument();\n if (params.el && typeof params.el === 'string' && document.querySelectorAll(params.el).length > 1) {\n const swipers = [];\n document.querySelectorAll(params.el).forEach(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({\n userAgent: params.userAgent\n });\n swiper.browser = getBrowser();\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\n params,\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper)\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach(eventName => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n // Classes\n classNames: [],\n // Slides\n slides: [],\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n //\n isBeginning: true,\n isEnd: false,\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n cssOverflowAdjustment() {\n // Returns 0 unless `translate` is > 2**23\n // Should be subtracted from css values to prevent overflow\n return Math.trunc(this.translate / 2 ** 23) * 2 ** 23;\n },\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: 0,\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n startMoving: undefined,\n evCache: []\n },\n // Clicks\n allowClick: true,\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0\n },\n // Images\n imagesToLoad: [],\n imagesLoaded: 0\n });\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n getSlideIndex(slideEl) {\n const {\n slidesEl,\n params\n } = this;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n const firstSlideIndex = elementIndex(slides[0]);\n return elementIndex(slideEl) - firstSlideIndex;\n }\n getSlideIndexByData(index) {\n return this.getSlideIndex(this.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') * 1 === index)[0]);\n }\n recalcSlides() {\n const swiper = this;\n const {\n slidesEl,\n params\n } = swiper;\n swiper.slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n }\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter(className => {\n return className.indexOf('swiper') === 0 || className.indexOf(swiper.params.containerModifierClass) === 0;\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n return slideEl.className.split(' ').filter(className => {\n return className.indexOf('swiper-slide') === 0 || className.indexOf(swiper.params.slideClass) === 0;\n }).join(' ');\n }\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.forEach(slideEl => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({\n slideEl,\n classNames\n });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const {\n params,\n slides,\n slidesGrid,\n slidesSizesGrid,\n size: swiperSize,\n activeIndex\n } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n }\n });\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {\n const slides = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides : swiper.slides;\n translated = swiper.slideTo(slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}${currentDirection}`);\n swiper.el.classList.add(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.forEach(slideEl => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n return swiper;\n }\n changeLanguageDirection(direction) {\n const swiper = this;\n if (swiper.rtl && direction === 'rtl' || !swiper.rtl && direction === 'ltr') return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.el.classList.add(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.el.classList.remove(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n mount(element) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n let el = element || swiper.params.el;\n if (typeof el === 'string') {\n el = document.querySelector(el);\n }\n if (!el) {\n return false;\n }\n el.swiper = swiper;\n if (el.shadowEl) {\n swiper.isElement = true;\n }\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = el.shadowRoot.querySelector(getWrapperSelector());\n // Children needs to return slot items\n return res;\n }\n return elementChildren(el, getWrapperSelector())[0];\n };\n // Find Wrapper\n let wrapperEl = getWrapper();\n if (!wrapperEl && swiper.params.createElements) {\n wrapperEl = createElement('div', swiper.params.wrapperClass);\n el.append(wrapperEl);\n elementChildren(el, `.${swiper.params.slideClass}`).forEach(slideEl => {\n wrapperEl.append(slideEl);\n });\n }\n Object.assign(swiper, {\n el,\n wrapperEl,\n slidesEl: swiper.isElement ? el : wrapperEl,\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || elementStyle(el, 'direction') === 'rtl'),\n wrongRTL: elementStyle(wrapperEl, 'display') === '-webkit-box'\n });\n return true;\n }\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.slideTo(swiper.params.initialSlide + swiper.virtual.slidesBefore, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Attach events\n swiper.attachEvents();\n [...swiper.el.querySelectorAll('[loading=\"lazy\"]')].forEach(imageEl => {\n if (imageEl.complete) {\n processLazyPreloader(swiper, imageEl);\n } else {\n imageEl.addEventListener('load', e => {\n processLazyPreloader(swiper, e.target);\n });\n }\n });\n preload(swiper);\n\n // Init Flag\n swiper.initialized = true;\n preload(swiper);\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n el,\n wrapperEl,\n slides\n } = swiper;\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n el.removeAttribute('style');\n wrapperEl.removeAttribute('style');\n if (slides && slides.length) {\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n slideEl.removeAttribute('style');\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n }\n }\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n if (deleteInstance !== false) {\n swiper.el.swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n return null;\n }\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n static get extendedDefaults() {\n return extendedDefaults;\n }\n static get defaults() {\n return defaults;\n }\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\nObject.keys(prototypes).forEach(prototypeGroup => {\n Object.keys(prototypes[prototypeGroup]).forEach(protoMethod => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\nSwiper.use([Resize, Observer]);\nexport default Swiper;","export default {\n init: true,\n direction: 'horizontal',\n oneWayMovement: false,\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n // Overrides\n width: null,\n height: null,\n //\n preventInteractionOnTransition: false,\n // ssr\n userAgent: null,\n url: null,\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n // Autoheight\n autoHeight: false,\n // Set wrapper width\n setWrapperSize: false,\n // Virtual Translate\n virtualTranslate: false,\n // Effects\n effect: 'slide',\n // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0,\n // in px\n slidesOffsetAfter: 0,\n // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n // Round length\n roundLengths: false,\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 5,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n // Unique Navigation Elements\n uniqueNavElements: true,\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n // Progress\n watchSlidesProgress: false,\n // Cursor\n grabCursor: false,\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n // loop\n loop: false,\n loopedSlides: null,\n loopPreventsSliding: true,\n // rewind\n rewind: false,\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null,\n // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n // Passive Listeners\n passiveListeners: true,\n maxBackfaceHiddenSlides: 10,\n // NS\n containerModifierClass: 'swiper-',\n // NEW\n slideClass: 'swiper-slide',\n slideActiveClass: 'swiper-slide-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideNextClass: 'swiper-slide-next',\n slidePrevClass: 'swiper-slide-prev',\n wrapperClass: 'swiper-wrapper',\n lazyPreloaderClass: 'swiper-lazy-preloader',\n lazyPreloadPrevNext: 0,\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\n};","/* eslint-disable no-underscore-dangle */\n\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach(event => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach(event => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (eventHandler === handler || eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n eventsArray.forEach(event => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach(eventHandler => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach(eventHandler => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n }\n};","import { getDocument } from 'ssr-window';\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\nimport onLoad from './onLoad.js';\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n el,\n wrapperEl,\n device\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n el[domMethod]('pointerdown', swiper.onTouchStart, {\n passive: false\n });\n document[domMethod]('pointermove', swiper.onTouchMove, {\n passive: false,\n capture\n });\n document[domMethod]('pointerup', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointercancel', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerout', swiper.onTouchEnd, {\n passive: true\n });\n document[domMethod]('pointerleave', swiper.onTouchEnd, {\n passive: true\n });\n\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](device.ios || device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n\n // Images loader\n el[domMethod]('load', swiper.onLoad, {\n capture: true\n });\n};\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n swiper.onClick = onClick.bind(swiper);\n swiper.onLoad = onLoad.bind(swiper);\n if (!dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n events(swiper, 'on');\n}\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\nexport default {\n attachEvents,\n detachEvents\n};","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}","import { processLazyPreloader } from '../../shared/process-lazy-preloader.js';\nexport default function onLoad(e) {\n const swiper = this;\n processLazyPreloader(swiper, e.target);\n if (swiper.params.cssMode || swiper.params.slidesPerView !== 'auto' && !swiper.params.autoHeight) {\n return;\n }\n swiper.update();\n}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n const isVirtualLoop = isVirtual && params.loop;\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides && !isVirtualLoop) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n if (swiper.params.loop && !isVirtual) {\n swiper.slideToLoop(swiper.realIndex, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n }\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n clearTimeout(swiper.autoplay.resizeTimeout);\n swiper.autoplay.resizeTimeout = setTimeout(() => {\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.resume();\n }\n }, 500);\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onScroll() {\n const swiper = this;\n const {\n wrapperEl,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n swiper.emit('setTranslate', swiper.translate, false);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === event.pointerId);\n if (pointerIndex >= 0) {\n data.evCache.splice(pointerIndex, 1);\n }\n if (['pointercancel', 'pointerout', 'pointerleave'].includes(event.type)) {\n const proceed = event.type === 'pointercancel' && (swiper.browser.isSafari || swiper.browser.isWebView);\n if (!proceed) {\n return;\n }\n }\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || e.composedPath && e.composedPath();\n swiper.updateClickedSlide(pathTree && pathTree[0] || e.target);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n if (params.cssMode) {\n return;\n }\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (let i = 0; i < slidesGrid.length; i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio) swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (rewindLastIndex !== null && ratio < 0 && Math.abs(ratio) > params.longSwipesRatio) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}","import { getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n const pointerIndex = data.evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) data.evCache[pointerIndex] = e;\n const targetTouch = data.evCache.length > 1 ? data.evCache[0] : e;\n const pageX = targetTouch.pageX;\n const pageY = targetTouch.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!e.target.matches(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n prevX: swiper.touches.currentX,\n prevY: swiper.touches.currentY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {\n return;\n }\n }\n if (document.activeElement) {\n if (e.target === document.activeElement && e.target.matches(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n touches.currentX = pageX;\n touches.currentY = pageY;\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold) return;\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;\n data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling || swiper.zoom && swiper.params.zoom && swiper.params.zoom.enabled && data.evCache.length > 1) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n let diff = swiper.isHorizontal() ? diffX : diffY;\n let touchesDiff = swiper.isHorizontal() ? touches.currentX - touches.previousX : touches.currentY - touches.previousY;\n if (params.oneWayMovement) {\n diff = Math.abs(diff) * (rtl ? 1 : -1);\n touchesDiff = Math.abs(touchesDiff) * (rtl ? 1 : -1);\n }\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) {\n diff = -diff;\n touchesDiff = -touchesDiff;\n }\n const prevTouchesDirection = swiper.touchesDirection;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n swiper.touchesDirection = touchesDiff > 0 ? 'prev' : 'next';\n const isLoop = swiper.params.loop && !params.cssMode;\n if (!data.isMoved) {\n if (isLoop) {\n swiper.loopFix({\n direction: swiper.swipeDirection\n });\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n let loopFixed;\n if (data.isMoved && prevTouchesDirection !== swiper.touchesDirection && isLoop && Math.abs(diff) >= 1) {\n // need another loop fix\n swiper.loopFix({\n direction: swiper.swipeDirection,\n setTranslate: true\n });\n loopFixed = true;\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0) {\n if (isLoop && !loopFixed && data.currentTranslate > (params.centeredSlides ? swiper.minTranslate() - swiper.size / 2 : swiper.minTranslate())) {\n swiper.loopFix({\n direction: 'prev',\n setTranslate: true,\n activeSlideIndex: 0\n });\n }\n if (data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n }\n }\n } else if (diff < 0) {\n if (isLoop && !loopFixed && data.currentTranslate < (params.centeredSlides ? swiper.maxTranslate() + swiper.size / 2 : swiper.maxTranslate())) {\n swiper.loopFix({\n direction: 'next',\n setTranslate: true,\n activeSlideIndex: swiper.slides.length - (params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10)))\n });\n }\n if (data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) {\n data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n }\n }\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}","import { getWindow, getDocument } from 'ssr-window';\nimport { now } from '../../shared/utils.js';\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n data.evCache.push(event);\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n if (!params.simulateTouch && event.pointerType === 'mouse') return;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let targetEl = e.target;\n if (params.touchEventsTarget === 'wrapper') {\n if (!swiper.wrapperEl.contains(targetEl)) return;\n }\n if ('which' in e && e.which === 3) return;\n if ('button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n targetEl = eventPath[0];\n }\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, targetEl) : targetEl.closest(noSwipingSelector))) {\n swiper.allowClick = true;\n return;\n }\n if (params.swipeHandler) {\n if (!targetEl.closest(params.swipeHandler)) return;\n }\n touches.currentX = e.pageX;\n touches.currentY = e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined\n });\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n let preventDefault = true;\n if (targetEl.matches(data.focusableElements)) {\n preventDefault = false;\n if (targetEl.nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (document.activeElement && document.activeElement.matches(data.focusableElements) && document.activeElement !== targetEl) {\n document.activeElement.blur();\n }\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !targetEl.isContentEditable) {\n e.preventDefault();\n }\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (!swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","export default function unsetGrabCursor() {\n const swiper = this;\n if (swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n if (swiper.isElement) {\n swiper.__preventObserver__ = true;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n if (swiper.isElement) {\n requestAnimationFrame(() => {\n swiper.__preventObserver__ = false;\n });\n }\n}","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\nexport default {\n loopCreate,\n loopFix,\n loopDestroy\n};","import { elementChildren } from '../../shared/utils.js';\nexport default function loopCreate(slideRealIndex) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n const slides = elementChildren(slidesEl, `.${params.slideClass}, swiper-slide`);\n slides.forEach((el, index) => {\n el.setAttribute('data-swiper-slide-index', index);\n });\n swiper.loopFix({\n slideRealIndex,\n direction: params.centeredSlides ? undefined : 'next'\n });\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (!params.loop || swiper.virtual && swiper.params.virtual.enabled) return;\n swiper.recalcSlides();\n const newSlidesOrder = [];\n swiper.slides.forEach(slideEl => {\n const index = typeof slideEl.swiperSlideIndex === 'undefined' ? slideEl.getAttribute('data-swiper-slide-index') * 1 : slideEl.swiperSlideIndex;\n newSlidesOrder[index] = slideEl;\n });\n swiper.slides.forEach(slideEl => {\n slideEl.removeAttribute('data-swiper-slide-index');\n });\n newSlidesOrder.forEach(slideEl => {\n slidesEl.append(slideEl);\n });\n swiper.recalcSlides();\n swiper.slideTo(swiper.realIndex, 0);\n}","export default function loopFix({\n slideRealIndex,\n slideTo = true,\n direction,\n setTranslate,\n activeSlideIndex,\n byController,\n byMousewheel\n} = {}) {\n const swiper = this;\n if (!swiper.params.loop) return;\n swiper.emit('beforeLoopFix');\n const {\n slides,\n allowSlidePrev,\n allowSlideNext,\n slidesEl,\n params\n } = swiper;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n if (swiper.virtual && params.virtual.enabled) {\n if (slideTo) {\n if (!params.centeredSlides && swiper.snapIndex === 0) {\n swiper.slideTo(swiper.virtual.slides.length, 0, false, true);\n } else if (params.centeredSlides && swiper.snapIndex < params.slidesPerView) {\n swiper.slideTo(swiper.virtual.slides.length + swiper.snapIndex, 0, false, true);\n } else if (swiper.snapIndex === swiper.snapGrid.length - 1) {\n swiper.slideTo(swiper.virtual.slidesBefore, 0, false, true);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n return;\n }\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(parseFloat(params.slidesPerView, 10));\n let loopedSlides = params.loopedSlides || slidesPerView;\n if (loopedSlides % params.slidesPerGroup !== 0) {\n loopedSlides += params.slidesPerGroup - loopedSlides % params.slidesPerGroup;\n }\n swiper.loopedSlides = loopedSlides;\n const prependSlidesIndexes = [];\n const appendSlidesIndexes = [];\n let activeIndex = swiper.activeIndex;\n if (typeof activeSlideIndex === 'undefined') {\n activeSlideIndex = swiper.getSlideIndex(swiper.slides.filter(el => el.classList.contains(params.slideActiveClass))[0]);\n } else {\n activeIndex = activeSlideIndex;\n }\n const isNext = direction === 'next' || !direction;\n const isPrev = direction === 'prev' || !direction;\n let slidesPrepended = 0;\n let slidesAppended = 0;\n // prepend last slides before start\n if (activeSlideIndex < loopedSlides) {\n slidesPrepended = Math.max(loopedSlides - activeSlideIndex, params.slidesPerGroup);\n for (let i = 0; i < loopedSlides - activeSlideIndex; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n prependSlidesIndexes.push(slides.length - index - 1);\n }\n } else if (activeSlideIndex /* + slidesPerView */ > swiper.slides.length - loopedSlides * 2) {\n slidesAppended = Math.max(activeSlideIndex - (swiper.slides.length - loopedSlides * 2), params.slidesPerGroup);\n for (let i = 0; i < slidesAppended; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlidesIndexes.push(index);\n }\n }\n if (isPrev) {\n prependSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.prepend(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n if (isNext) {\n appendSlidesIndexes.forEach(index => {\n swiper.slides[index].swiperLoopMoveDOM = true;\n slidesEl.append(swiper.slides[index]);\n swiper.slides[index].swiperLoopMoveDOM = false;\n });\n }\n swiper.recalcSlides();\n if (params.slidesPerView === 'auto') {\n swiper.updateSlides();\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (slideTo) {\n if (prependSlidesIndexes.length > 0 && isPrev) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex + slidesPrepended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex + slidesPrepended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n if (setTranslate) {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n } else if (appendSlidesIndexes.length > 0 && isNext) {\n if (typeof slideRealIndex === 'undefined') {\n const currentSlideTranslate = swiper.slidesGrid[activeIndex];\n const newSlideTranslate = swiper.slidesGrid[activeIndex - slidesAppended];\n const diff = newSlideTranslate - currentSlideTranslate;\n if (byMousewheel) {\n swiper.setTranslate(swiper.translate - diff);\n } else {\n swiper.slideTo(activeIndex - slidesAppended, 0, false, true);\n if (setTranslate) {\n swiper.touches[swiper.isHorizontal() ? 'startX' : 'startY'] += diff;\n }\n }\n } else {\n swiper.slideToLoop(slideRealIndex, 0, false, true);\n }\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n if (swiper.controller && swiper.controller.control && !byController) {\n const loopParams = {\n slideRealIndex,\n slideTo: false,\n direction,\n setTranslate,\n activeSlideIndex,\n byController: true\n };\n if (Array.isArray(swiper.controller.control)) {\n swiper.controller.control.forEach(c => {\n if (!c.destroyed && c.params.loop) c.loopFix(loopParams);\n });\n } else if (swiper.controller.control instanceof swiper.constructor && swiper.controller.control.params.loop) {\n swiper.controller.control.loopFix(loopParams);\n }\n }\n swiper.emit('loopFix');\n}","import { extend } from '../shared/utils.js';\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","import { getWindow } from 'ssr-window';\nimport { elementParents } from '../../../shared/utils.js';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc(mutations => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (swiper.__preventObserver__) return;\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData\n });\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = elementParents(swiper.el);\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.el, {\n childList: swiper.params.observeSlideChildren\n });\n\n // Observe wrapper\n attach(swiper.wrapperEl, {\n attributes: false\n });\n };\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","import { getWindow } from 'ssr-window';\nexport default function Resize({\n swiper,\n on,\n emit\n}) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver(entries => {\n animationFrame = window.requestAnimationFrame(() => {\n const {\n width,\n height\n } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({\n contentBoxSize,\n contentRect,\n target\n }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect ? contentRect.width : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect ? contentRect.height : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide\n};","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n enabled,\n params,\n animating\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'next'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n params,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled,\n animating\n } = swiper;\n if (!enabled) return swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n if (params.loop) {\n if (animating && !isVirtual && params.loopPreventsSliding) return false;\n swiper.loopFix({\n direction: 'prev'\n });\n // eslint-disable-next-line\n swiper._clientLeft = swiper.wrapperEl.clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex = swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual ? swiper.virtual.slides.length - 1 : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) {\n if (typeof index === 'string') {\n index = parseInt(index, 10);\n }\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n const translate = -snapGrid[snapIndex];\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) {\n slideIndex = i;\n } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) {\n return false;\n }\n }\n }\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';\n\n // Update Index\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n if (isVirtual && !swiper._cssModeVirtualInitialSet && swiper.params.initialSlide > 0) {\n swiper._cssModeVirtualInitialSet = true;\n requestAnimationFrame(() => {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n });\n } else {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n }\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._immediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: t,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n return true;\n }\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n }\n return true;\n}","import { elementChildren, nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n const slideSelector = swiper.isElement ? `swiper-slide` : `.${params.slideClass}`;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt(swiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = swiper.getSlideIndex(elementChildren(slidesEl, `${slideSelector}[data-swiper-slide-index=\"${realIndex}\"]`)[0]);\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n const indexAsNumber = parseInt(index, 10);\n index = indexAsNumber;\n }\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n // eslint-disable-next-line\n newIndex = newIndex + swiper.virtual.slidesBefore;\n } else {\n newIndex = swiper.getSlideIndexByData(newIndex);\n }\n }\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\n};","export default function setTransition(duration, byController) {\n const swiper = this;\n if (!swiper.params.cssMode) {\n swiper.wrapperEl.style.transitionDuration = `${duration}ms`;\n }\n swiper.emit('setTransition', duration, byController);\n}","export default function transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step\n}) {\n const {\n activeIndex,\n previousIndex\n } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n swiper.emit(`transition${step}`);\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'End'\n });\n}","import transitionEmit from './transitionEmit.js';\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\n });\n}","import { getTranslate } from '../../shared/utils.js';\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n const {\n params,\n rtlTranslate: rtl,\n translate,\n wrapperEl\n } = swiper;\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n let currentTranslate = getTranslate(wrapperEl, axis);\n currentTranslate += swiper.cssOverflowAdjustment();\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo\n};","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n if (swiper.isHorizontal()) {\n x -= swiper.cssOverflowAdjustment();\n } else {\n y -= swiper.cssOverflowAdjustment();\n }\n wrapperEl.style.transform = `translate3d(${x}px, ${y}px, ${z}px)`;\n }\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n swiper.emit('setTranslate', swiper.translate, byController);\n}","import { animateCSSModeScroll } from '../../shared/utils.js';\nexport default function translateTo(translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) {\n const swiper = this;\n const {\n params,\n wrapperEl\n } = swiper;\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({\n swiper,\n targetPosition: -newTranslate,\n side: isH ? 'left' : 'top'\n });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n return true;\n }\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.wrapperEl.removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.wrapperEl.addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n return true;\n}","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide\n};","import { preload } from '../../shared/process-lazy-preloader.js';\nexport function getActiveIndexByTranslate(swiper) {\n const {\n slidesGrid,\n params\n } = swiper;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n let activeIndex;\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n return activeIndex;\n}\nexport default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n const getVirtualRealIndex = aIndex => {\n let realIndex = aIndex - swiper.virtual.slidesBefore;\n if (realIndex < 0) {\n realIndex = swiper.virtual.slides.length + realIndex;\n }\n if (realIndex >= swiper.virtual.slides.length) {\n realIndex -= swiper.virtual.slides.length;\n }\n return realIndex;\n };\n if (typeof activeIndex === 'undefined') {\n activeIndex = getActiveIndexByTranslate(swiper);\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n if (swiper.params.loop && swiper.virtual && swiper.params.virtual.enabled) {\n swiper.realIndex = getVirtualRealIndex(activeIndex);\n }\n return;\n }\n // Get real index\n let realIndex;\n if (swiper.virtual && params.virtual.enabled && params.loop) {\n realIndex = getVirtualRealIndex(activeIndex);\n } else if (swiper.slides[activeIndex]) {\n realIndex = parseInt(swiper.slides[activeIndex].getAttribute('data-swiper-slide-index') || activeIndex, 10);\n } else {\n realIndex = activeIndex;\n }\n Object.assign(swiper, {\n previousSnapIndex,\n snapIndex,\n previousRealIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n if (swiper.initialized) {\n preload(swiper);\n }\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","export default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides[swiper.getSlideIndexByData(index)];\n }\n return swiper.slides[index];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || []).forEach(slide => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.wrapperEl.style.height = `${newHeight}px`;\n}","export default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = e.closest(`.${params.slideClass}, swiper-slide`);\n let slideFound = false;\n let slideIndex;\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt(slide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\n}","export default function updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd,\n progressLoop\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n const isBeginningRounded = Math.abs(translate - swiper.minTranslate()) < 1;\n const isEndRounded = Math.abs(translate - swiper.maxTranslate()) < 1;\n isBeginning = isBeginningRounded || progress <= 0;\n isEnd = isEndRounded || progress >= 1;\n if (isBeginningRounded) progress = 0;\n if (isEndRounded) progress = 1;\n }\n if (params.loop) {\n const firstSlideIndex = swiper.getSlideIndexByData(0);\n const lastSlideIndex = swiper.getSlideIndexByData(swiper.slides.length - 1);\n const firstSlideTranslate = swiper.slidesGrid[firstSlideIndex];\n const lastSlideTranslate = swiper.slidesGrid[lastSlideIndex];\n const translateMax = swiper.slidesGrid[swiper.slidesGrid.length - 1];\n const translateAbs = Math.abs(translate);\n if (translateAbs >= firstSlideTranslate) {\n progressLoop = (translateAbs - firstSlideTranslate) / translateMax;\n } else {\n progressLoop = (translateAbs + translateMax - lastSlideTranslate) / translateMax;\n }\n if (progressLoop > 1) progressLoop -= 1;\n }\n Object.assign(swiper, {\n progress,\n progressLoop,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n swiper.emit('progress', progress);\n}","import { elementStyle } from '../../shared/utils.js';\nexport default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const el = swiper.el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = el.clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = el.clientHeight;\n }\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n }\n\n // Subtract paddings\n width = width - parseInt(elementStyle(el, 'padding-left') || 0, 10) - parseInt(elementStyle(el, 'padding-right') || 0, 10);\n height = height - parseInt(elementStyle(el, 'padding-top') || 0, 10) - parseInt(elementStyle(el, 'padding-bottom') || 0, 10);\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height\n });\n}","import { elementChildren, elementOuterSize, elementStyle, setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom'\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n const params = swiper.params;\n const {\n wrapperEl,\n slidesEl,\n size: swiperSize,\n rtlTranslate: rtl,\n wrongRTL\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = elementChildren(slidesEl, `.${swiper.params.slideClass}, swiper-slide`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n slides.forEach(slideEl => {\n if (rtl) {\n slideEl.style.marginLeft = '';\n } else {\n slideEl.style.marginRight = '';\n }\n slideEl.style.marginBottom = '';\n slideEl.style.marginTop = '';\n });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', '');\n }\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n const shouldResetSlideSize = params.slidesPerView === 'auto' && params.breakpoints && Object.keys(params.breakpoints).filter(key => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n let slide;\n if (slides[i]) slide = slides[i];\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slides[i] && elementStyle(slide, 'display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide);\n const currentTransform = slide.style.transform;\n const currentWebKitTransform = slide.style.webkitTransform;\n if (currentTransform) {\n slide.style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? elementOuterSize(slide, 'width', true) : elementOuterSize(slide, 'height', true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide;\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide.style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide.style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n wrapperEl.style.width = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (params.setWrapperSize) {\n wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n }\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (isVirtual && params.loop) {\n const size = slidesSizesGrid[0] + spaceBetween;\n if (params.slidesPerGroup > 1) {\n const groups = Math.ceil((swiper.virtual.slidesBefore + swiper.virtual.slidesAfter) / params.slidesPerGroup);\n const groupSize = size * params.slidesPerGroup;\n for (let i = 0; i < groups; i += 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + groupSize);\n }\n }\n for (let i = 0; i < swiper.virtual.slidesBefore + swiper.virtual.slidesAfter; i += 1) {\n if (params.slidesPerGroup === 1) {\n snapGrid.push(snapGrid[snapGrid.length - 1] + size);\n }\n slidesGrid.push(slidesGrid[slidesGrid.length - 1] + size);\n swiper.virtualSize += size;\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n if (spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode || params.loop) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n }).forEach(slideEl => {\n slideEl.style[key] = `${spaceBetween}px`;\n });\n }\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map(snap => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (spaceBetween || 0);\n });\n allSlidesSize -= spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(wrapperEl, '--swiper-centered-offset-after', `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`);\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map(v => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map(v => v + addToSlidesGrid);\n }\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.el.classList.contains(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.el.classList.add(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.el.classList.remove(backFaceHiddenClass);\n }\n }\n}","import { elementChildren, elementNextAll, elementPrevAll } from '../../shared/utils.js';\nexport default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n slidesEl,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const getFilteredSlide = selector => {\n return elementChildren(slidesEl, `.${params.slideClass}${selector}, swiper-slide${selector}`)[0];\n };\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideActiveClass, params.slideNextClass, params.slidePrevClass);\n });\n let activeSlide;\n if (isVirtual) {\n if (params.loop) {\n let slideIndex = activeIndex - swiper.virtual.slidesBefore;\n if (slideIndex < 0) slideIndex = swiper.virtual.slides.length + slideIndex;\n if (slideIndex >= swiper.virtual.slides.length) slideIndex -= swiper.virtual.slides.length;\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${slideIndex}\"]`);\n } else {\n activeSlide = getFilteredSlide(`[data-swiper-slide-index=\"${activeIndex}\"]`);\n }\n } else {\n activeSlide = slides[activeIndex];\n }\n if (activeSlide) {\n // Active classes\n activeSlide.classList.add(params.slideActiveClass);\n\n // Next Slide\n let nextSlide = elementNextAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !nextSlide) {\n nextSlide = slides[0];\n }\n if (nextSlide) {\n nextSlide.classList.add(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = elementPrevAll(activeSlide, `.${params.slideClass}, swiper-slide`)[0];\n if (params.loop && !prevSlide === 0) {\n prevSlide = slides[slides.length - 1];\n }\n if (prevSlide) {\n prevSlide.classList.add(params.slidePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n // eslint-disable-next-line\n const minusOffset = swiper.isElement ? swiper.isHorizontal() ? swiper.wrapperEl.offsetLeft : swiper.wrapperEl.offsetTop : 0;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = (swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop) - minusOffset - swiper.cssOverflowAdjustment();\n }\n}","export default function updateSlidesProgress(translate = this && this.translate || 0) {\n const swiper = this;\n const params = swiper.params;\n const {\n slides,\n rtlTranslate: rtl,\n snapGrid\n } = swiper;\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.forEach(slideEl => {\n slideEl.classList.remove(params.slideVisibleClass);\n });\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n let spaceBetween = params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides[i].classList.add(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport { createElement, elementIndex } from '../../shared/utils.js';\nexport default function A11y({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null\n }\n });\n swiper.a11y = {\n clicked: false\n };\n let liveRegion = null;\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.innerHTML = '';\n notification.innerHTML = message;\n }\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n function makeElFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '0');\n });\n }\n function makeElNotFocusable(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('tabIndex', '-1');\n });\n }\n function addElRole(el, role) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('role', role);\n });\n }\n function addElRoleDescription(el, description) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-roledescription', description);\n });\n }\n function addElControls(el, controls) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-controls', controls);\n });\n }\n function addElLabel(el, label) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-label', label);\n });\n }\n function addElId(el, id) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('id', id);\n });\n }\n function addElLive(el, live) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-live', live);\n });\n }\n function disableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', true);\n });\n }\n function enableEl(el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.setAttribute('aria-disabled', false);\n });\n }\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const targetEl = e.target;\n if (swiper.pagination && swiper.pagination.el && (targetEl === swiper.pagination.el || swiper.pagination.el.contains(e.target))) {\n if (!e.target.matches(classesToSelector(swiper.params.pagination.bulletClass))) return;\n }\n if (swiper.navigation && swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n if (swiper.pagination && targetEl.matches(classesToSelector(swiper.params.pagination.bulletClass))) {\n targetEl.click();\n }\n }\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (prevEl) {\n if (swiper.isBeginning) {\n disableEl(prevEl);\n makeElNotFocusable(prevEl);\n } else {\n enableEl(prevEl);\n makeElFocusable(prevEl);\n }\n }\n if (nextEl) {\n if (swiper.isEnd) {\n disableEl(nextEl);\n makeElNotFocusable(nextEl);\n } else {\n enableEl(nextEl);\n makeElFocusable(nextEl);\n }\n }\n }\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.forEach(bulletEl => {\n if (swiper.params.pagination.clickable) {\n makeElFocusable(bulletEl);\n if (!swiper.params.pagination.renderBullet) {\n addElRole(bulletEl, 'button');\n addElLabel(bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, elementIndex(bulletEl) + 1));\n }\n }\n if (bulletEl.matches(classesToSelector(swiper.params.pagination.bulletActiveClass))) {\n bulletEl.setAttribute('aria-current', 'true');\n } else {\n bulletEl.removeAttribute('aria-current');\n }\n });\n }\n const initNavEl = (el, wrapperId, message) => {\n makeElFocusable(el);\n if (el.tagName !== 'BUTTON') {\n addElRole(el, 'button');\n el.addEventListener('keydown', onEnterOrSpaceKey);\n }\n addElLabel(el, message);\n addElControls(el, wrapperId);\n };\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n const handlePointerUp = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!swiper.destroyed) {\n swiper.a11y.clicked = false;\n }\n });\n });\n };\n const handleFocus = e => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible = swiper.params.watchSlidesProgress && swiper.visibleSlides && swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n const initSlides = () => {\n const params = swiper.params.a11y;\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription(swiper.slides, params.itemRoleDescriptionMessage);\n }\n if (params.slideRole) {\n addElRole(swiper.slides, params.slideRole);\n }\n const slidesLength = swiper.slides.length;\n if (params.slideLabelMessage) {\n swiper.slides.forEach((slideEl, index) => {\n const slideIndex = swiper.params.loop ? parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10) : index;\n const ariaLabelMessage = params.slideLabelMessage.replace(/\\{\\{index\\}\\}/, slideIndex + 1).replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel(slideEl, ariaLabelMessage);\n });\n }\n };\n const init = () => {\n const params = swiper.params.a11y;\n if (swiper.isElement) {\n swiper.el.shadowEl.append(liveRegion);\n } else {\n swiper.el.append(liveRegion);\n }\n\n // Container\n const containerEl = swiper.el;\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription(containerEl, params.containerRoleDescriptionMessage);\n }\n if (params.containerMessage) {\n addElLabel(containerEl, params.containerMessage);\n }\n\n // Wrapper\n const wrapperEl = swiper.wrapperEl;\n const wrapperId = params.id || wrapperEl.getAttribute('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId(wrapperEl, wrapperId);\n addElLive(wrapperEl, live);\n\n // Slide\n initSlides();\n\n // Navigation\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => initNavEl(el, wrapperId, params.nextSlideMessage));\n }\n if (prevEl) {\n prevEl.forEach(el => initNavEl(el, wrapperId, params.prevSlideMessage));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\n paginationEl.forEach(el => {\n el.addEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.addEventListener('focus', handleFocus, true);\n swiper.el.addEventListener('pointerdown', handlePointerDown, true);\n swiper.el.addEventListener('pointerup', handlePointerUp, true);\n };\n function destroy() {\n if (liveRegion) liveRegion.remove();\n let {\n nextEl,\n prevEl\n } = swiper.navigation ? swiper.navigation : {};\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n if (nextEl) {\n nextEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n if (prevEl) {\n prevEl.forEach(el => el.removeEventListener('keydown', onEnterOrSpaceKey));\n }\n\n // Pagination\n if (hasClickablePagination()) {\n const paginationEl = Array.isArray(swiper.pagination.el) ? swiper.pagination.el : [swiper.pagination.el];\n paginationEl.forEach(el => {\n el.removeEventListener('keydown', onEnterOrSpaceKey);\n });\n }\n\n // Tab focus\n swiper.el.removeEventListener('focus', handleFocus, true);\n swiper.el.removeEventListener('pointerdown', handlePointerDown, true);\n swiper.el.removeEventListener('pointerup', handlePointerUp, true);\n }\n on('beforeInit', () => {\n liveRegion = createElement('span', swiper.params.a11y.notificationClass);\n liveRegion.setAttribute('aria-live', 'assertive');\n liveRegion.setAttribute('aria-atomic', 'true');\n });\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n if (!swiper.params.a11y.enabled) return;\n initSlides();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}","/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nexport default function Autoplay({\n swiper,\n extendParams,\n on,\n emit,\n params\n}) {\n swiper.autoplay = {\n running: false,\n paused: false,\n timeLeft: 0\n };\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false\n }\n });\n let timeout;\n let raf;\n let autoplayDelayTotal = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayDelayCurrent = params && params.autoplay ? params.autoplay.delay : 3000;\n let autoplayTimeLeft;\n let autoplayStartTime = new Date().getTime;\n let wasPaused;\n let isTouched;\n let pausedByTouch;\n let touchStartTimeout;\n let slideChanged;\n let pausedByInteraction;\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.wrapperEl) return;\n if (e.target !== swiper.wrapperEl) return;\n swiper.wrapperEl.removeEventListener('transitionend', onTransitionEnd);\n resume();\n }\n const calcTimeLeft = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.autoplay.paused) {\n wasPaused = true;\n } else if (wasPaused) {\n autoplayDelayCurrent = autoplayTimeLeft;\n wasPaused = false;\n }\n const timeLeft = swiper.autoplay.paused ? autoplayTimeLeft : autoplayStartTime + autoplayDelayCurrent - new Date().getTime();\n swiper.autoplay.timeLeft = timeLeft;\n emit('autoplayTimeLeft', timeLeft, timeLeft / autoplayDelayTotal);\n raf = requestAnimationFrame(() => {\n calcTimeLeft();\n });\n };\n const getSlideDelay = () => {\n let activeSlideEl;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n activeSlideEl = swiper.slides.filter(slideEl => slideEl.classList.contains('swiper-slide-active'))[0];\n } else {\n activeSlideEl = swiper.slides[swiper.activeIndex];\n }\n if (!activeSlideEl) return undefined;\n const currentSlideDelay = parseInt(activeSlideEl.getAttribute('data-swiper-autoplay'), 10);\n return currentSlideDelay;\n };\n const run = delayForce => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n cancelAnimationFrame(raf);\n calcTimeLeft();\n let delay = typeof delayForce === 'undefined' ? swiper.params.autoplay.delay : delayForce;\n autoplayDelayTotal = swiper.params.autoplay.delay;\n autoplayDelayCurrent = swiper.params.autoplay.delay;\n const currentSlideDelay = getSlideDelay();\n if (!Number.isNaN(currentSlideDelay) && currentSlideDelay > 0 && typeof delayForce === 'undefined') {\n delay = currentSlideDelay;\n autoplayDelayTotal = currentSlideDelay;\n autoplayDelayCurrent = currentSlideDelay;\n }\n autoplayTimeLeft = delay;\n const speed = swiper.params.speed;\n const proceed = () => {\n if (!swiper || swiper.destroyed) return;\n if (swiper.params.autoplay.reverseDirection) {\n if (!swiper.isBeginning || swiper.params.loop || swiper.params.rewind) {\n swiper.slidePrev(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(swiper.slides.length - 1, speed, true, true);\n emit('autoplay');\n }\n } else {\n if (!swiper.isEnd || swiper.params.loop || swiper.params.rewind) {\n swiper.slideNext(speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n swiper.slideTo(0, speed, true, true);\n emit('autoplay');\n }\n }\n if (swiper.params.cssMode) {\n autoplayStartTime = new Date().getTime();\n requestAnimationFrame(() => {\n run();\n });\n }\n };\n if (delay > 0) {\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n proceed();\n }, delay);\n } else {\n requestAnimationFrame(() => {\n proceed();\n });\n }\n\n // eslint-disable-next-line\n return delay;\n };\n const start = () => {\n swiper.autoplay.running = true;\n run();\n emit('autoplayStart');\n };\n const stop = () => {\n swiper.autoplay.running = false;\n clearTimeout(timeout);\n cancelAnimationFrame(raf);\n emit('autoplayStop');\n };\n const pause = (internal, reset) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n clearTimeout(timeout);\n if (!internal) {\n pausedByInteraction = true;\n }\n const proceed = () => {\n emit('autoplayPause');\n if (swiper.params.autoplay.waitForTransition) {\n swiper.wrapperEl.addEventListener('transitionend', onTransitionEnd);\n } else {\n resume();\n }\n };\n swiper.autoplay.paused = true;\n if (reset) {\n if (slideChanged) {\n autoplayTimeLeft = swiper.params.autoplay.delay;\n }\n slideChanged = false;\n proceed();\n return;\n }\n const delay = autoplayTimeLeft || swiper.params.autoplay.delay;\n autoplayTimeLeft = delay - (new Date().getTime() - autoplayStartTime);\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop) return;\n if (autoplayTimeLeft < 0) autoplayTimeLeft = 0;\n proceed();\n };\n const resume = () => {\n if (swiper.isEnd && autoplayTimeLeft < 0 && !swiper.params.loop || swiper.destroyed || !swiper.autoplay.running) return;\n autoplayStartTime = new Date().getTime();\n if (pausedByInteraction) {\n pausedByInteraction = false;\n run(autoplayTimeLeft);\n } else {\n run();\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n };\n const onVisibilityChange = () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n const document = getDocument();\n if (document.visibilityState === 'hidden') {\n pausedByInteraction = true;\n pause(true);\n }\n if (document.visibilityState === 'visible') {\n resume();\n }\n };\n const onPointerEnter = e => {\n if (e.pointerType !== 'mouse') return;\n pausedByInteraction = true;\n pause(true);\n };\n const onPointerLeave = e => {\n if (e.pointerType !== 'mouse') return;\n if (swiper.autoplay.paused) {\n resume();\n }\n };\n const attachMouseEvents = () => {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.el.addEventListener('pointerenter', onPointerEnter);\n swiper.el.addEventListener('pointerleave', onPointerLeave);\n }\n };\n const detachMouseEvents = () => {\n swiper.el.removeEventListener('pointerenter', onPointerEnter);\n swiper.el.removeEventListener('pointerleave', onPointerLeave);\n };\n const attachDocumentEvents = () => {\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n };\n const detachDocumentEvents = () => {\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n attachMouseEvents();\n attachDocumentEvents();\n autoplayStartTime = new Date().getTime();\n start();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n detachDocumentEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n pause(true, true);\n } else {\n stop();\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n return;\n }\n isTouched = true;\n pausedByTouch = false;\n pausedByInteraction = false;\n touchStartTimeout = setTimeout(() => {\n pausedByInteraction = true;\n pausedByTouch = true;\n pause(true);\n }, 200);\n });\n on('touchEnd', () => {\n if (swiper.destroyed || !swiper.autoplay.running || !isTouched) return;\n clearTimeout(touchStartTimeout);\n clearTimeout(timeout);\n if (swiper.params.autoplay.disableOnInteraction) {\n pausedByTouch = false;\n isTouched = false;\n return;\n }\n if (pausedByTouch && swiper.params.cssMode) resume();\n pausedByTouch = false;\n isTouched = false;\n });\n on('slideChange', () => {\n if (swiper.destroyed || !swiper.autoplay.running) return;\n slideChanged = true;\n });\n Object.assign(swiper.autoplay, {\n start,\n stop,\n pause,\n resume\n });\n}","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { elementTransitionEnd, nextTick } from '../../shared/utils.js';\nexport default function Controller({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide' // or 'container'\n }\n });\n\n swiper.controller = {\n control: undefined\n };\n function LinearSpline(x, y) {\n const binarySearch = function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n }();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n let i1;\n let i3;\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n return this;\n }\n function getInterpolateFunction(c) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n function setControlledTranslate(c) {\n if (c.destroyed) return;\n\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n if (Number.isNaN(multiplier) || !Number.isFinite(multiplier)) {\n multiplier = 1;\n }\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n function setControlledTransition(c) {\n if (c.destroyed) return;\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n elementTransitionEnd(c.wrapperEl, () => {\n if (!controlled) return;\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n function removeSpline() {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n on('beforeInit', () => {\n if (typeof window !== 'undefined' && (\n // eslint-disable-line\n typeof swiper.params.controller.control === 'string' || swiper.params.controller.control instanceof HTMLElement)) {\n const controlElement = document.querySelector(swiper.params.controller.control);\n if (controlElement && controlElement.swiper) {\n swiper.controller.control = controlElement.swiper;\n } else if (controlElement) {\n const onControllerSwiper = e => {\n swiper.controller.control = e.detail[0];\n swiper.update();\n controlElement.removeEventListener('init', onControllerSwiper);\n };\n controlElement.addEventListener('init', onControllerSwiper);\n }\n return;\n }\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control || swiper.controller.control.destroyed) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nimport { getSlideTransformEl } from '../../shared/utils.js';\nexport default function EffectCards({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n cardsEffect: {\n slideShadows: true,\n rotate: true,\n perSlideRotate: 2,\n perSlideOffset: 8\n }\n });\n const setTranslate = () => {\n const {\n slides,\n activeIndex\n } = swiper;\n const params = swiper.params.cardsEffect;\n const {\n startTranslate,\n isTouched\n } = swiper.touchEventsData;\n const currentTranslate = swiper.translate;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = slideEl.swiperSlideOffset;\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.wrapperEl.style.transform = `translateX(${swiper.minTranslate()}px)`;\n }\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -params.perSlideRotate * progress;\n let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\n const slideIndex = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n const isSwipeToNext = (slideIndex === activeIndex || slideIndex === activeIndex - 1) && progress > 0 && progress < 1 && (isTouched || swiper.params.cssMode) && currentTranslate < startTranslate;\n const isSwipeToPrev = (slideIndex === activeIndex || slideIndex === activeIndex + 1) && progress < 0 && progress > -1 && (isTouched || swiper.params.cssMode) && currentTranslate > startTranslate;\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n if (progress < 0) {\n // next\n tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n const scaleString = progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${params.rotate ? rotate : 0}deg)\n scale(${scaleString})\n `;\n if (params.slideShadows) {\n // Set shadows\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl) {\n shadowEl = createShadow(params, slideEl);\n }\n if (shadowEl) shadowEl.style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements\n });\n };\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport { getSlideTransformEl } from '../../shared/utils.js';\nexport default function EffectCoverflow({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true\n }\n });\n const setTranslate = () => {\n const {\n width: swiperWidth,\n height: swiperHeight,\n slides,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth;\n // Each slide offset from center\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const slideEl = slides[i];\n const slideSize = slidesSizesGrid[i];\n const slideOffset = slideEl.swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier = typeof params.modifier === 'function' ? params.modifier(centerOffset) : centerOffset * params.modifier;\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch;\n // Allow percentage to make a relative stretch for responsive sliders\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = slideTransform;\n slideEl.style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n if (params.slideShadows) {\n // Set shadows\n let shadowBeforeEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfterEl = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBeforeEl) {\n shadowBeforeEl = createShadow(params, slideEl, isHorizontal ? 'left' : 'top');\n }\n if (!shadowAfterEl) {\n shadowAfterEl = createShadow(params, slideEl, isHorizontal ? 'right' : 'bottom');\n }\n if (shadowBeforeEl) shadowBeforeEl.style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if (shadowAfterEl) shadowAfterEl.style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n };\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true\n })\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nimport { getSlideTransformEl } from '../../shared/utils.js';\nexport default function EffectCreative({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n creativeEffect: {\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1\n }\n }\n });\n const getTranslateValue = value => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n const setTranslate = () => {\n const {\n slides,\n wrapperEl,\n slidesSizesGrid\n } = swiper;\n const params = swiper.params.creativeEffect;\n const {\n progressMultiplier: multiplier\n } = params;\n const isCenteredSlides = swiper.params.centeredSlides;\n if (isCenteredSlides) {\n const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n wrapperEl.style.transform = `translateX(calc(50% - ${margin}px))`;\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n const slideProgress = slideEl.progress;\n const progress = Math.min(Math.max(slideEl.progress, -params.limitProgress), params.limitProgress);\n let originalProgress = progress;\n if (!isCenteredSlides) {\n originalProgress = Math.min(Math.max(slideEl.originalProgress, -params.limitProgress), params.limitProgress);\n }\n const offset = slideEl.swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1\n };\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n }\n // set translate\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n });\n // set rotates\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n slideEl.style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString = originalProgress < 0 ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})` : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n const opacityString = originalProgress < 0 ? 1 + (1 - data.opacity) * originalProgress * multiplier : 1 - (1 - data.opacity) * originalProgress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\n\n // Set shadows\n if (custom && data.shadow || !custom) {\n let shadowEl = slideEl.querySelector('.swiper-slide-shadow');\n if (!shadowEl && data.shadow) {\n shadowEl = createShadow(params, slideEl);\n }\n if (shadowEl) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n shadowEl.style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n targetEl.style.opacity = opacityString;\n if (data.origin) {\n targetEl.style.transformOrigin = data.origin;\n }\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides: true\n });\n };\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","import effectInit from '../../shared/effect-init.js';\nimport { createElement } from '../../shared/utils.js';\nexport default function EffectCube({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94\n }\n });\n const createSlideShadows = (slideEl, progress, isHorizontal) => {\n let shadowBefore = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) {\n shadowBefore = createElement('div', `swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}`);\n slideEl.append(shadowBefore);\n }\n if (!shadowAfter) {\n shadowAfter = createElement('div', `swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}`);\n slideEl.append(shadowAfter);\n }\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = () => {\n // create new ones\n const isHorizontal = swiper.isHorizontal();\n swiper.slides.forEach(slideEl => {\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows(slideEl, progress, isHorizontal);\n });\n };\n const setTranslate = () => {\n const {\n el,\n wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n cubeShadowEl = swiper.slidesEl.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n swiper.slidesEl.append(cubeShadowEl);\n }\n cubeShadowEl.style.height = `${swiperWidth}px`;\n } else {\n cubeShadowEl = el.querySelector('.swiper-cube-shadow');\n if (!cubeShadowEl) {\n cubeShadowEl = createElement('div', 'swiper-cube-shadow');\n el.append(cubeShadowEl);\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n let slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt(slideEl.getAttribute('data-swiper-slide-index'), 10);\n }\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n if (rtl) {\n tx = -tx;\n }\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n slideEl.style.transform = transform;\n if (params.slideShadows) {\n createSlideShadows(slideEl, progress, isHorizontal);\n }\n }\n wrapperEl.style.transformOrigin = `50% 50% -${swiperSize / 2}px`;\n wrapperEl.style['-webkit-transform-origin'] = `50% 50% -${swiperSize / 2}px`;\n if (params.shadow) {\n if (isHorizontal) {\n cubeShadowEl.style.transform = `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`;\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n cubeShadowEl.style.transform = `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`;\n }\n }\n const zFactor = (browser.isSafari || browser.isWebView) && browser.needPerspectiveFix ? -swiperSize / 2 : 0;\n wrapperEl.style.transform = `translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`;\n wrapperEl.style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n };\n const setTransition = duration => {\n const {\n el,\n slides\n } = swiper;\n slides.forEach(slideEl => {\n slideEl.style.transitionDuration = `${duration}ms`;\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(subEl => {\n subEl.style.transitionDuration = `${duration}ms`;\n });\n });\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n const shadowEl = el.querySelector('.swiper-cube-shadow');\n if (shadowEl) shadowEl.style.transitionDuration = `${duration}ms`;\n }\n };\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.cubeEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true\n })\n });\n}","import effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nimport { getSlideTransformEl } from '../../shared/utils.js';\nexport default function EffectFade({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n fadeEffect: {\n crossFade: false\n }\n });\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.fadeEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = swiper.slides[i];\n const offset = slideEl.swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs(slideEl.progress), 0) : 1 + Math.min(Math.max(slideEl.progress, -1), 0);\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.opacity = slideOpacity;\n targetEl.style.transform = `translate3d(${tx}px, ${ty}px, 0px)`;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides: true\n });\n };\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\nimport { getSlideTransformEl } from '../../shared/utils.js';\nexport default function EffectFlip({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true\n }\n });\n const createSlideShadows = (slideEl, progress, params) => {\n let shadowBefore = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-left') : slideEl.querySelector('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? slideEl.querySelector('.swiper-slide-shadow-right') : slideEl.querySelector('.swiper-slide-shadow-bottom');\n if (!shadowBefore) {\n shadowBefore = createShadow(params, slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n if (!shadowAfter) {\n shadowAfter = createShadow(params, slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n if (shadowBefore) shadowBefore.style.opacity = Math.max(-progress, 0);\n if (shadowAfter) shadowAfter.style.opacity = Math.max(progress, 0);\n };\n const recreateShadows = () => {\n // Set shadows\n const params = swiper.params.flipEffect;\n swiper.slides.forEach(slideEl => {\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n createSlideShadows(slideEl, progress, params);\n });\n };\n const setTranslate = () => {\n const {\n slides,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.flipEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const slideEl = slides[i];\n let progress = slideEl.progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n const offset = slideEl.swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n slideEl.style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n if (params.slideShadows) {\n createSlideShadows(slideEl, progress, params);\n }\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const targetEl = effectTarget(params, slideEl);\n targetEl.style.transform = transform;\n }\n };\n const setTransition = duration => {\n const transformElements = swiper.slides.map(slideEl => getSlideTransformEl(slideEl));\n transformElements.forEach(el => {\n el.style.transitionDuration = `${duration}ms`;\n el.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => {\n shadowEl.style.transitionDuration = `${duration}ms`;\n });\n });\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements\n });\n };\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.flipEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode\n })\n });\n}","import { elementTransitionEnd, now } from '../../shared/utils.js';\nexport default function freeMode({\n swiper,\n extendParams,\n emit,\n once\n}) {\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02\n }\n });\n function onTouchStart() {\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({\n currentPos: swiper.rtl ? swiper.translate : -swiper.translate\n });\n }\n function onTouchMove() {\n const {\n touchEventsData: data,\n touches\n } = swiper;\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n function onTouchEnd({\n currentPos\n }) {\n const {\n params,\n wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper;\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n elementTransitionEnd(wrapperEl, () => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd\n }\n });\n}","export default function Grid({\n swiper,\n extendParams\n}) {\n extendParams({\n grid: {\n rows: 1,\n fill: 'column'\n }\n });\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n const getSpaceBetween = () => {\n let spaceBetween = swiper.params.spaceBetween;\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiper.size;\n } else if (typeof spaceBetween === 'string') {\n spaceBetween = parseFloat(spaceBetween);\n }\n return spaceBetween;\n };\n const initSlides = slidesLength => {\n const {\n slidesPerView\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid;\n slidesPerRow = slidesNumberEvenToRows / rows;\n numFullColumns = Math.floor(slidesLength / rows);\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n };\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const {\n slidesPerGroup\n } = swiper.params;\n const spaceBetween = getSpaceBetween();\n const {\n rows,\n fill\n } = swiper.params.grid;\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup = groupIndex === 0 ? slidesPerGroup : Math.min(Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows), slidesPerGroup);\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n newSlideOrderIndex = column + row * slidesNumberEvenToRows / rows;\n slide.style.order = newSlideOrderIndex;\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide.style[getDirectionLabel('margin-top')] = row !== 0 ? spaceBetween && `${spaceBetween}px` : '';\n };\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const {\n centeredSlides,\n roundLengths\n } = swiper.params;\n const spaceBetween = getSpaceBetween();\n const {\n rows\n } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.wrapperEl.style[getDirectionLabel('width')] = `${swiper.virtualSize + spaceBetween}px`;\n if (centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid.splice(0, snapGrid.length);\n snapGrid.push(...newSlidesGrid);\n }\n };\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize\n };\n}","import { getWindow, getDocument } from 'ssr-window';\nimport { elementChildren } from '../../shared/utils.js';\nexport default function HashNavigation({\n swiper,\n extendParams,\n emit,\n on\n}) {\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n getSlideIndex(_s, hash) {\n if (swiper.virtual && swiper.params.virtual.enabled) {\n const slideWithHash = swiper.slides.filter(slideEl => slideEl.getAttribute('data-hash') === hash)[0];\n if (!slideWithHash) return 0;\n const index = parseInt(slideWithHash.getAttribute('data-swiper-slide-index'), 10);\n return index;\n }\n return swiper.getSlideIndex(elementChildren(swiper.slidesEl, `.${swiper.params.slideClass}[data-hash=\"${hash}\"], swiper-slide[data-hash=\"${hash}\"]`)[0]);\n }\n }\n });\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideEl = swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`);\n const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') : '';\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.params.hashNavigation.getSlideIndex(swiper, newHash);\n if (typeof newIndex === 'undefined' || Number.isNaN(newIndex)) return;\n swiper.slideTo(newIndex);\n }\n };\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n const activeSlideEl = swiper.slidesEl.querySelector(`[data-swiper-slide-index=\"${swiper.activeIndex}\"]`);\n const activeSlideHash = activeSlideEl ? activeSlideEl.getAttribute('data-hash') || activeSlideEl.getAttribute('data-history') : '';\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${activeSlideHash}` || '');\n emit('hashSet');\n } else {\n document.location.hash = activeSlideHash || '';\n emit('hashSet');\n }\n };\n const init = () => {\n if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n if (hash) {\n const speed = 0;\n const index = swiper.params.hashNavigation.getSlideIndex(swiper, hash);\n swiper.slideTo(index || 0, speed, swiper.params.runCallbacksOnInit, true);\n }\n if (swiper.params.hashNavigation.watchState) {\n window.addEventListener('hashchange', onHashChange);\n }\n };\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n window.removeEventListener('hashchange', onHashChange);\n }\n };\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n}","import { getWindow } from 'ssr-window';\nexport default function History({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides',\n keepQuery: false\n }\n });\n let initialized = false;\n let paths = {};\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n const pathArray = location.pathname.slice(1).split('/').filter(part => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return {\n key,\n value\n };\n };\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n const slide = swiper.slides[index];\n let value = slugify(slide.getAttribute('data-history'));\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key ? `${key}/` : ''}${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key ? `${key}/` : ''}${value}`;\n }\n if (swiper.params.history.keepQuery) {\n value += location.search;\n }\n const currentState = window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n window.history.replaceState({\n value\n }, null, value);\n } else {\n window.history.pushState({\n value\n }, null, value);\n }\n };\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides[i];\n const slideHistory = slugify(slide.getAttribute('data-history'));\n if (slideHistory === value) {\n const index = swiper.getSlideIndex(slide);\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, paths.value, false);\n };\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) {\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n return;\n }\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n const destroy = () => {\n const window = getWindow();\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n}","/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport { elementOffset, elementParents } from '../../shared/utils.js';\nexport default function Keyboard({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true\n }\n });\n function handle(event) {\n if (!swiper.enabled) return;\n const {\n rtlTranslate: rtl\n } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (elementParents(swiper.el, `.${swiper.params.slideClass}, swiper-slide`).length > 0 && elementParents(swiper.el, `.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n const el = swiper.el;\n const swiperWidth = el.clientWidth;\n const swiperHeight = el.clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = elementOffset(el);\n if (rtl) swiperOffset.left -= el.scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiperWidth, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiperHeight], [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight]];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if ((isPageDown || isArrowRight) && !rtl || (isPageUp || isArrowLeft) && rtl) swiper.slideNext();\n if ((isPageUp || isArrowLeft) && !rtl || (isPageDown || isArrowRight) && rtl) swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n document.addEventListener('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n document.removeEventListener('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n Object.assign(swiper.keyboard, {\n enable,\n disable\n });\n}","import appendSlide from './methods/appendSlide.js';\nimport prependSlide from './methods/prependSlide.js';\nimport addSlide from './methods/addSlide.js';\nimport removeSlide from './methods/removeSlide.js';\nimport removeAllSlides from './methods/removeAllSlides.js';\nexport default function Manipulation({\n swiper\n}) {\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper)\n });\n}","export default function addSlide(index, slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.recalcSlides();\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides[i];\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) slidesEl.append(slides[i]);\n }\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n slidesEl.append(slides);\n }\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n slidesEl.append(slidesBuffer[i]);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}","export default function appendSlide(slides) {\n const swiper = this;\n const {\n params,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n const appendElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n tempDOM.innerHTML = slideEl;\n slidesEl.append(tempDOM.children[0]);\n tempDOM.innerHTML = '';\n } else {\n slidesEl.append(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) appendElement(slides[i]);\n }\n } else {\n appendElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n}","export default function prependSlide(slides) {\n const swiper = this;\n const {\n params,\n activeIndex,\n slidesEl\n } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndex + 1;\n const prependElement = slideEl => {\n if (typeof slideEl === 'string') {\n const tempDOM = document.createElement('div');\n tempDOM.innerHTML = slideEl;\n slidesEl.prepend(tempDOM.children[0]);\n tempDOM.innerHTML = '';\n } else {\n slidesEl.prepend(slideEl);\n }\n };\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) prependElement(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n prependElement(slides);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}","export default function removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}","export default function removeSlide(slidesIndexes) {\n const swiper = this;\n const {\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides[indexToRemove].remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n swiper.recalcSlides();\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer || swiper.isElement) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}","/* eslint-disable consistent-return */\nimport { getWindow } from 'ssr-window';\nimport { now, nextTick } from '../../shared/utils.js';\nexport default function Mousewheel({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n noMousewheelClass: 'swiper-no-mousewheel'\n }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (swiper.params.mousewheel.thresholdDelta && newEvent.delta < swiper.params.mousewheel.thresholdDelta) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n if (swiper.params.mousewheel.thresholdTime && now() - lastScrollTime < swiper.params.mousewheel.thresholdTime) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n\n // Ignore event if the target or its parents have the swiper-no-mousewheel class\n if (event.target.closest(`.${swiper.params.mousewheel.noMousewheelClass}`)) return;\n const params = swiper.params.mousewheel;\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n const targetElContainsTarget = targetEl && targetEl.contains(e.target);\n if (!swiper.mouseEntered && !targetElContainsTarget && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;else return true;\n } else {\n delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n if (delta === 0) return true;\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta)\n };\n const ignoreWheelEvents = lastEventBeforeSnap && newEvent.time < lastEventBeforeSnap.time + 500 && newEvent.delta <= lastEventBeforeSnap.delta && newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\n }\n if (swiper.params.loop) {\n swiper.loopFix({\n direction: newEvent.direction < 0 ? 'next' : 'prev',\n byMousewheel: true\n });\n }\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n\n const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (recentWheelEvents.length >= 15 && newEvent.time - firstEvent.time < 500 && firstEvent.delta - newEvent.delta >= 1 && newEvent.delta <= 6) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n function events(method) {\n let targetEl = swiper.el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n targetEl = document.querySelector(swiper.params.mousewheel.eventsTarget);\n }\n targetEl[method]('mouseenter', handleMouseEnter);\n targetEl[method]('mouseleave', handleMouseLeave);\n targetEl[method]('wheel', handle);\n }\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('addEventListener');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('removeEventListener');\n swiper.mousewheel.enabled = false;\n return true;\n }\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Navigation({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled'\n }\n });\n swiper.navigation = {\n nextEl: null,\n prevEl: null\n };\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function getEl(el) {\n let res;\n if (el && typeof el === 'string' && swiper.isElement) {\n res = swiper.el.shadowRoot.querySelector(el);\n if (res) return res;\n }\n if (el) {\n if (typeof el === 'string') res = [...document.querySelectorAll(el)];\n if (swiper.params.uniqueNavElements && typeof el === 'string' && res.length > 1 && swiper.el.querySelectorAll(el).length === 1) {\n res = swiper.el.querySelector(el);\n }\n }\n if (el && !res) return el;\n // if (Array.isArray(res) && res.length === 1) res = res[0];\n return res;\n }\n function toggleEl(el, disabled) {\n const params = swiper.params.navigation;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (subEl) {\n subEl.classList[disabled ? 'add' : 'remove'](...params.disabledClass.split(' '));\n if (subEl.tagName === 'BUTTON') subEl.disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n }\n });\n }\n function update() {\n // Update Navigation Buttons\n const {\n nextEl,\n prevEl\n } = swiper.navigation;\n if (swiper.params.loop) {\n toggleEl(prevEl, false);\n toggleEl(nextEl, false);\n return;\n }\n toggleEl(prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl(nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n swiper.params.navigation = createElementIfNotDefined(swiper, swiper.originalParams.navigation, swiper.params.navigation, {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev'\n });\n if (!(params.nextEl || params.prevEl)) return;\n let nextEl = getEl(params.nextEl);\n let prevEl = getEl(params.prevEl);\n Object.assign(swiper.navigation, {\n nextEl,\n prevEl\n });\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const initButton = (el, dir) => {\n if (el) {\n el.addEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n }\n if (!swiper.enabled && el) {\n el.classList.add(...params.lockClass.split(' '));\n }\n };\n nextEl.forEach(el => initButton(el, 'next'));\n prevEl.forEach(el => initButton(el, 'prev'));\n }\n function destroy() {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const destroyButton = (el, dir) => {\n el.removeEventListener('click', dir === 'next' ? onNextClick : onPrevClick);\n el.classList.remove(...swiper.params.navigation.disabledClass.split(' '));\n };\n nextEl.forEach(el => destroyButton(el, 'next'));\n prevEl.forEach(el => destroyButton(el, 'prev'));\n }\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.navigation.lockClass));\n });\n on('click', (_s, e) => {\n let {\n nextEl,\n prevEl\n } = swiper.navigation;\n nextEl = makeElementsArray(nextEl);\n prevEl = makeElementsArray(prevEl);\n const targetEl = e.target;\n if (swiper.params.navigation.hideOnClick && !prevEl.includes(targetEl) && !nextEl.includes(targetEl)) {\n if (swiper.pagination && swiper.params.pagination && swiper.params.pagination.clickable && (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))) return;\n let isHidden;\n if (nextEl.length) {\n isHidden = nextEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n } else if (prevEl.length) {\n isHidden = prevEl[0].classList.contains(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n [...nextEl, ...prevEl].filter(el => !!el).forEach(el => el.classList.toggle(swiper.params.navigation.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(...swiper.params.navigation.navigationDisabledClass.split(' '));\n init();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(...swiper.params.navigation.navigationDisabledClass.split(' '));\n destroy();\n };\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport { elementIndex, elementOuterSize, elementParents } from '../../shared/utils.js';\nexport default function Pagination({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets',\n // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: number => number,\n formatFractionTotal: number => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`\n }\n });\n swiper.pagination = {\n el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n const makeElementsArray = el => {\n if (!Array.isArray(el)) el = [el].filter(e => !!e);\n return el;\n };\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || Array.isArray(swiper.pagination.el) && swiper.pagination.el.length === 0;\n }\n function setSideBullets(bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n if (!bulletEl) return;\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}`);\n bulletEl = bulletEl[`${position === 'prev' ? 'previous' : 'next'}ElementSibling`];\n if (bulletEl) {\n bulletEl.classList.add(`${bulletActiveClass}-${position}-${position}`);\n }\n }\n }\n function onBulletClick(e) {\n const bulletEl = e.target.closest(classesToSelector(swiper.params.pagination.bulletClass));\n if (!bulletEl) {\n return;\n }\n e.preventDefault();\n const index = elementIndex(bulletEl) * swiper.params.slidesPerGroup;\n if (swiper.params.loop) {\n if (swiper.realIndex === index) return;\n const newSlideIndex = swiper.getSlideIndexByData(index);\n const currentSlideIndex = swiper.getSlideIndexByData(swiper.realIndex);\n if (newSlideIndex > swiper.slides.length - swiper.loopedSlides) {\n swiper.loopFix({\n direction: newSlideIndex > currentSlideIndex ? 'next' : 'prev',\n activeSlideIndex: newSlideIndex,\n slideTo: false\n });\n }\n swiper.slideToLoop(index);\n } else {\n swiper.slideTo(index);\n }\n }\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n // Current/Total\n let current;\n let previousIndex;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const total = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.loop) {\n previousIndex = swiper.previousRealIndex || 0;\n current = swiper.params.slidesPerGroup > 1 ? Math.floor(swiper.realIndex / swiper.params.slidesPerGroup) : swiper.realIndex;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n previousIndex = swiper.previousSnapIndex;\n } else {\n previousIndex = swiper.previousIndex || 0;\n current = swiper.activeIndex || 0;\n }\n // Types\n if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = elementOuterSize(bullets[0], swiper.isHorizontal() ? 'width' : 'height', true);\n el.forEach(subEl => {\n subEl.style[swiper.isHorizontal() ? 'width' : 'height'] = `${bulletSize * (params.dynamicMainBullets + 4)}px`;\n });\n if (params.dynamicMainBullets > 1 && previousIndex !== undefined) {\n dynamicBulletIndex += current - (previousIndex || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.forEach(bulletEl => {\n const classesToRemove = [...['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`)].map(s => typeof s === 'string' && s.includes(' ') ? s.split(' ') : s).flat();\n bulletEl.classList.remove(...classesToRemove);\n });\n if (el.length > 1) {\n bullets.forEach(bullet => {\n const bulletIndex = elementIndex(bullet);\n if (bulletIndex === current) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n bullet.classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n if (bulletIndex === firstIndex) {\n setSideBullets(bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets(bullet, 'next');\n }\n }\n });\n } else {\n const bullet = bullets[current];\n if (bullet) {\n bullet.classList.add(...params.bulletActiveClass.split(' '));\n }\n if (params.dynamicBullets) {\n const firstDisplayedBullet = bullets[firstIndex];\n const lastDisplayedBullet = bullets[lastIndex];\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n if (bullets[i]) {\n bullets[i].classList.add(...`${params.bulletActiveClass}-main`.split(' '));\n }\n }\n setSideBullets(firstDisplayedBullet, 'prev');\n setSideBullets(lastDisplayedBullet, 'next');\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset = (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.forEach(bullet => {\n bullet.style[swiper.isHorizontal() ? offsetProp : 'top'] = `${bulletsOffset}px`;\n });\n }\n }\n el.forEach((subEl, subElIndex) => {\n if (params.type === 'fraction') {\n subEl.querySelectorAll(classesToSelector(params.currentClass)).forEach(fractionEl => {\n fractionEl.textContent = params.formatFractionCurrent(current + 1);\n });\n subEl.querySelectorAll(classesToSelector(params.totalClass)).forEach(totalEl => {\n totalEl.textContent = params.formatFractionTotal(total);\n });\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n subEl.querySelectorAll(classesToSelector(params.progressbarFillClass)).forEach(progressEl => {\n progressEl.style.transform = `translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`;\n progressEl.style.transitionDuration = `${swiper.params.speed}ms`;\n });\n }\n if (params.type === 'custom' && params.renderCustom) {\n subEl.innerHTML = params.renderCustom(swiper, current + 1, total);\n if (subElIndex === 0) emit('paginationRender', subEl);\n } else {\n if (subElIndex === 0) emit('paginationRender', subEl);\n emit('paginationUpdate', subEl);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n subEl.classList[swiper.isLocked ? 'add' : 'remove'](params.lockClass);\n }\n });\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n let el = swiper.pagination.el;\n el = makeElementsArray(el);\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil(slidesLength / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML = `` + ' / ' + ``;\n }\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n }\n swiper.pagination.bullets = [];\n el.forEach(subEl => {\n if (params.type !== 'custom') {\n subEl.innerHTML = paginationHTML || '';\n }\n if (params.type === 'bullets') {\n swiper.pagination.bullets.push(...subEl.querySelectorAll(classesToSelector(params.bulletClass)));\n }\n });\n if (params.type !== 'custom') {\n emit('paginationRender', el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(swiper, swiper.originalParams.pagination, swiper.params.pagination, {\n el: 'swiper-pagination'\n });\n const params = swiper.params.pagination;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.shadowRoot.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = [...document.querySelectorAll(params.el)];\n }\n if (!el) {\n el = params.el;\n }\n if (!el || el.length === 0) return;\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && Array.isArray(el) && el.length > 1) {\n el = [...swiper.el.querySelectorAll(params.el)];\n // check if it belongs to another nested Swiper\n if (el.length > 1) {\n el = el.filter(subEl => {\n if (elementParents(subEl, '.swiper')[0] !== swiper.el) return false;\n return true;\n })[0];\n }\n }\n if (Array.isArray(el) && el.length === 1) el = el[0];\n Object.assign(swiper.pagination, {\n el\n });\n el = makeElementsArray(el);\n el.forEach(subEl => {\n if (params.type === 'bullets' && params.clickable) {\n subEl.classList.add(params.clickableClass);\n }\n subEl.classList.add(params.modifierClass + params.type);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.type === 'bullets' && params.dynamicBullets) {\n subEl.classList.add(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n subEl.classList.add(params.progressbarOppositeClass);\n }\n if (params.clickable) {\n subEl.addEventListener('click', onBulletClick);\n }\n if (!swiper.enabled) {\n subEl.classList.add(params.lockClass);\n }\n });\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n let el = swiper.pagination.el;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.hiddenClass);\n subEl.classList.remove(params.modifierClass + params.type);\n subEl.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (params.clickable) {\n subEl.removeEventListener('click', onBulletClick);\n }\n });\n }\n if (swiper.pagination.bullets) swiper.pagination.bullets.forEach(subEl => subEl.classList.remove(...params.bulletActiveClass.split(' ')));\n }\n on('changeDirection', () => {\n if (!swiper.pagination || !swiper.pagination.el) return;\n const params = swiper.params.pagination;\n let {\n el\n } = swiper.pagination;\n el = makeElementsArray(el);\n el.forEach(subEl => {\n subEl.classList.remove(params.horizontalClass, params.verticalClass);\n subEl.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n });\n });\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n update();\n });\n on('snapGridLengthChange', () => {\n render();\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.pagination.lockClass));\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n let {\n el\n } = swiper.pagination;\n if (!Array.isArray(el)) el = [el].filter(element => !!element);\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && el && el.length > 0 && !targetEl.classList.contains(swiper.params.pagination.bulletClass)) {\n if (swiper.navigation && (swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl || swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl)) return;\n const isHidden = el[0].classList.contains(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n el.forEach(subEl => subEl.classList.toggle(swiper.params.pagination.hiddenClass));\n }\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.remove(swiper.params.pagination.paginationDisabledClass));\n }\n init();\n render();\n update();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.pagination.paginationDisabledClass);\n let {\n el\n } = swiper.pagination;\n if (el) {\n el = makeElementsArray(el);\n el.forEach(subEl => subEl.classList.add(swiper.params.pagination.paginationDisabledClass));\n }\n destroy();\n };\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}","import { elementChildren } from '../../shared/utils.js';\nexport default function Parallax({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n parallax: {\n enabled: false\n }\n });\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const rtlFactor = rtl ? -1 : 1;\n const p = el.getAttribute('data-swiper-parallax') || '0';\n let x = el.getAttribute('data-swiper-parallax-x');\n let y = el.getAttribute('data-swiper-parallax-y');\n const scale = el.getAttribute('data-swiper-parallax-scale');\n const opacity = el.getAttribute('data-swiper-parallax-opacity');\n const rotate = el.getAttribute('data-swiper-parallax-rotate');\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n el.style.opacity = currentOpacity;\n }\n let transform = `translate3d(${x}, ${y}, 0px)`;\n if (typeof scale !== 'undefined' && scale !== null) {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n transform += ` scale(${currentScale})`;\n }\n if (rotate && typeof rotate !== 'undefined' && rotate !== null) {\n const currentRotate = rotate * progress * -1;\n transform += ` rotate(${currentRotate}deg)`;\n }\n el.style.transform = transform;\n };\n const setTranslate = () => {\n const {\n el,\n slides,\n progress,\n snapGrid\n } = swiper;\n elementChildren(el, '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').forEach(subEl => {\n setTransform(subEl, progress);\n });\n slides.forEach((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n slideEl.querySelectorAll('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale], [data-swiper-parallax-rotate]').forEach(subEl => {\n setTransform(subEl, slideProgress);\n });\n });\n };\n const setTransition = (duration = swiper.params.speed) => {\n const {\n el\n } = swiper;\n el.querySelectorAll('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').forEach(parallaxEl => {\n let parallaxDuration = parseInt(parallaxEl.getAttribute('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n parallaxEl.style.transitionDuration = `${parallaxDuration}ms`;\n });\n };\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}","import { getDocument } from 'ssr-window';\nimport { createElement, elementOffset, nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nexport default function Scrollbar({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const document = getDocument();\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`\n }\n });\n swiper.scrollbar = {\n el: null,\n dragEl: null\n };\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n const progress = swiper.params.loop ? swiper.progressLoop : swiper.progress;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n dragEl.style.transform = `translate3d(${newPos}px, 0, 0)`;\n dragEl.style.width = `${newSize}px`;\n } else {\n dragEl.style.transform = `translate3d(0px, ${newPos}px, 0)`;\n dragEl.style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n el.style.opacity = 1;\n timeout = setTimeout(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.dragEl.style.transitionDuration = `${duration}ms`;\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar\n } = swiper;\n const {\n dragEl,\n el\n } = scrollbar;\n dragEl.style.width = '';\n dragEl.style.height = '';\n trackSize = swiper.isHorizontal() ? el.offsetWidth : el.offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n if (swiper.isHorizontal()) {\n dragEl.style.width = `${dragSize}px`;\n } else {\n dragEl.style.height = `${dragSize}px`;\n }\n if (divider >= 1) {\n el.style.display = 'none';\n } else {\n el.style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n el.style.opacity = 0;\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.el.classList[swiper.isLocked ? 'add' : 'remove'](swiper.params.scrollbar.lockClass);\n }\n }\n function getPointerPosition(e) {\n return swiper.isHorizontal() ? e.clientX : e.clientY;\n }\n function setDragPosition(e) {\n const {\n scrollbar,\n rtlTranslate: rtl\n } = swiper;\n const {\n el\n } = scrollbar;\n let positionRatio;\n positionRatio = (getPointerPosition(e) - elementOffset(el)[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n const position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n isTouched = true;\n dragStartPos = e.target === dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n wrapperEl.style.transitionDuration = '100ms';\n dragEl.style.transitionDuration = '100ms';\n setDragPosition(e);\n clearTimeout(dragTimeout);\n el.style.transitionDuration = '0ms';\n if (params.hide) {\n el.style.opacity = 1;\n }\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = 'none';\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el,\n dragEl\n } = scrollbar;\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n setDragPosition(e);\n wrapperEl.style.transitionDuration = '0ms';\n el.style.transitionDuration = '0ms';\n dragEl.style.transitionDuration = '0ms';\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const {\n scrollbar,\n wrapperEl\n } = swiper;\n const {\n el\n } = scrollbar;\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style['scroll-snap-type'] = '';\n wrapperEl.style.transitionDuration = '';\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n el.style.opacity = 0;\n el.style.transitionDuration = '400ms';\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n function events(method) {\n const {\n scrollbar,\n params\n } = swiper;\n const el = scrollbar.el;\n if (!el) return;\n const target = el;\n const activeListener = params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n target[eventMethod]('pointerdown', onDragStart, activeListener);\n document[eventMethod]('pointermove', onDragMove, activeListener);\n document[eventMethod]('pointerup', onDragEnd, passiveListener);\n }\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n function init() {\n const {\n scrollbar,\n el: swiperEl\n } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(swiper, swiper.originalParams.scrollbar, swiper.params.scrollbar, {\n el: 'swiper-scrollbar'\n });\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n let el;\n if (typeof params.el === 'string' && swiper.isElement) {\n el = swiper.el.shadowRoot.querySelector(params.el);\n }\n if (!el && typeof params.el === 'string') {\n el = document.querySelectorAll(params.el);\n } else if (!el) {\n el = params.el;\n }\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && el.length > 1 && swiperEl.querySelectorAll(params.el).length === 1) {\n el = swiperEl.querySelector(params.el);\n }\n if (el.length > 0) el = el[0];\n el.classList.add(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let dragEl;\n if (el) {\n dragEl = el.querySelector(`.${swiper.params.scrollbar.dragClass}`);\n if (!dragEl) {\n dragEl = createElement('div', swiper.params.scrollbar.dragClass);\n el.append(dragEl);\n }\n }\n Object.assign(scrollbar, {\n el,\n dragEl\n });\n if (params.draggable) {\n enableDraggable();\n }\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\n }\n }\n function destroy() {\n const params = swiper.params.scrollbar;\n const el = swiper.scrollbar.el;\n if (el) {\n el.classList.remove(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n }\n disableDraggable();\n }\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const {\n el\n } = swiper.scrollbar;\n if (el) {\n el.classList[swiper.enabled ? 'remove' : 'add'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n const enable = () => {\n swiper.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.remove(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n init();\n updateSize();\n setTranslate();\n };\n const disable = () => {\n swiper.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.el) {\n swiper.scrollbar.el.classList.add(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n destroy();\n };\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport { elementChildren, isObject } from '../../shared/utils.js';\nexport default function Thumb({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs'\n }\n });\n let initialized = false;\n let swiperCreated = false;\n swiper.thumbs = {\n swiper: null\n };\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && clickedSlide.classList.contains(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt(thumbsSwiper.clickedSlide.getAttribute('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n swiper.slideToLoop(slideToIndex);\n } else {\n swiper.slideTo(slideToIndex);\n }\n }\n function init() {\n const {\n thumbs: thumbsParams\n } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper.update();\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n swiper.thumbs.swiper.el.classList.add(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.forEach(slideEl => slideEl.classList.remove(thumbActiveClass));\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n elementChildren(thumbsSwiper.slidesEl, `[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).forEach(slideEl => {\n slideEl.classList.add(thumbActiveClass);\n });\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n if (thumbsSwiper.slides[swiper.realIndex + i]) {\n thumbsSwiper.slides[swiper.realIndex + i].classList.add(thumbActiveClass);\n }\n }\n }\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n const currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n const newThumbsSlide = thumbsSwiper.slides.filter(slideEl => slideEl.getAttribute('data-swiper-slide-index') === `${swiper.realIndex}`)[0];\n newThumbsIndex = thumbsSwiper.slides.indexOf(newThumbsSlide);\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (newThumbsIndex > currentThumbsIndex && thumbsSwiper.params.slidesPerGroup === 1) {\n // newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n if (typeof thumbs.swiper === 'string' || thumbs.swiper instanceof HTMLElement) {\n const document = getDocument();\n const getThumbsElementAndInit = () => {\n const thumbsElement = typeof thumbs.swiper === 'string' ? document.querySelector(thumbs.swiper) : thumbs.swiper;\n if (thumbsElement && thumbsElement.swiper) {\n thumbs.swiper = thumbsElement.swiper;\n init();\n update(true);\n } else if (thumbsElement) {\n const onThumbsSwiper = e => {\n thumbs.swiper = e.detail[0];\n thumbsElement.removeEventListener('init', onThumbsSwiper);\n init();\n update(true);\n thumbs.swiper.update();\n swiper.update();\n };\n thumbsElement.addEventListener('init', onThumbsSwiper);\n }\n return thumbsElement;\n };\n const watchForThumbsToAppear = () => {\n if (swiper.destroyed) return;\n const thumbsElement = getThumbsElementAndInit();\n if (!thumbsElement) {\n requestAnimationFrame(watchForThumbsToAppear);\n }\n };\n requestAnimationFrame(watchForThumbsToAppear);\n } else {\n init();\n update(true);\n }\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}","import { getDocument } from 'ssr-window';\nimport { createElement, elementChildren, setCSSProperty } from '../../shared/utils.js';\nexport default function Virtual({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0\n }\n });\n let cssModeTimeout;\n const document = getDocument();\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n const tempDOM = document.createElement('div');\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n // eslint-disable-next-line\n let slideEl;\n if (params.renderSlide) {\n slideEl = params.renderSlide.call(swiper, slide, index);\n if (typeof slideEl === 'string') {\n tempDOM.innerHTML = slideEl;\n slideEl = tempDOM.children[0];\n }\n } else if (swiper.isElement) {\n slideEl = createElement('swiper-slide');\n } else {\n slideEl = createElement('div', swiper.params.slideClass);\n }\n slideEl.setAttribute('data-swiper-slide-index', index);\n if (!params.renderSlide) {\n slideEl.innerHTML = slide;\n }\n if (params.cache) swiper.virtual.cache[index] = slideEl;\n return slideEl;\n }\n function update(force) {\n const {\n slidesPerView,\n slidesPerGroup,\n centeredSlides,\n loop: isLoop\n } = swiper.params;\n const {\n addSlidesBefore,\n addSlidesAfter\n } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset\n } = swiper.virtual;\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n const activeIndex = swiper.activeIndex || 0;\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = (isLoop ? slidesPerView : slidesPerGroup) + addSlidesBefore;\n }\n let from = activeIndex - slidesBefore;\n let to = activeIndex + slidesAfter;\n if (!isLoop) {\n from = Math.max(from, 0);\n to = Math.min(to, slides.length - 1);\n }\n let offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n if (isLoop && activeIndex >= slidesBefore) {\n from -= slidesBefore;\n if (!centeredSlides) offset += swiper.slidesGrid[0];\n } else if (isLoop && activeIndex < slidesBefore) {\n from = -slidesBefore;\n if (centeredSlides) offset += swiper.slidesGrid[0];\n }\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid,\n slidesBefore,\n slidesAfter\n });\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n emit('virtualUpdate');\n }\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.forEach(slideEl => {\n slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n });\n }\n swiper.updateProgress();\n emit('virtualUpdate');\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: function getSlides() {\n const slidesToRender = [];\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n }()\n });\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n } else {\n emit('virtualUpdate');\n }\n return;\n }\n const prependIndexes = [];\n const appendIndexes = [];\n const getSlideIndex = index => {\n let slideIndex = index;\n if (index < 0) {\n slideIndex = slides.length + index;\n } else if (slideIndex >= slides.length) {\n // eslint-disable-next-line\n slideIndex = slideIndex - slides.length;\n }\n return slideIndex;\n };\n if (force) {\n swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}, swiper-slide`).forEach(slideEl => {\n slideEl.remove();\n });\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n const slideIndex = getSlideIndex(i);\n swiper.slidesEl.querySelectorAll(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${slideIndex}\"], swiper-slide[data-swiper-slide-index=\"${slideIndex}\"]`).forEach(slideEl => {\n slideEl.remove();\n });\n }\n }\n }\n const loopFrom = isLoop ? -slides.length : 0;\n const loopTo = isLoop ? slides.length * 2 : slides.length;\n for (let i = loopFrom; i < loopTo; i += 1) {\n if (i >= from && i <= to) {\n const slideIndex = getSlideIndex(i);\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(slideIndex);\n } else {\n if (i > previousTo) appendIndexes.push(slideIndex);\n if (i < previousFrom) prependIndexes.push(slideIndex);\n }\n }\n }\n appendIndexes.forEach(index => {\n swiper.slidesEl.append(renderSlide(slides[index], index));\n });\n if (isLoop) {\n for (let i = prependIndexes.length - 1; i >= 0; i -= 1) {\n const index = prependIndexes[i];\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n }\n } else {\n prependIndexes.sort((a, b) => b - a);\n prependIndexes.forEach(index => {\n swiper.slidesEl.prepend(renderSlide(slides[index], index));\n });\n }\n elementChildren(swiper.slidesEl, '.swiper-slide, swiper-slide').forEach(slideEl => {\n slideEl.style[offsetProp] = `${offset - Math.abs(swiper.cssOverflowAdjustment())}px`;\n });\n onRendered();\n }\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n update(true);\n }\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach(cachedIndex => {\n const cachedEl = cache[cachedIndex];\n const cachedElIndex = cachedEl.getAttribute('data-swiper-slide-index');\n if (cachedElIndex) {\n cachedEl.setAttribute('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n }\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n function removeAllSlides() {\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n update(true);\n swiper.slideTo(0, 0);\n }\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n let domSlidesAssigned;\n if (typeof swiper.passedParams.virtual.slides === 'undefined') {\n const slides = [...swiper.slidesEl.children].filter(el => el.matches(`.${swiper.params.slideClass}, swiper-slide`));\n if (slides && slides.length) {\n swiper.virtual.slides = [...slides];\n domSlidesAssigned = true;\n slides.forEach((slideEl, slideIndex) => {\n slideEl.setAttribute('data-swiper-slide-index', slideIndex);\n swiper.virtual.cache[slideIndex] = slideEl;\n slideEl.remove();\n });\n }\n }\n if (!domSlidesAssigned) {\n swiper.virtual.slides = swiper.params.virtual.slides;\n }\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n if (!swiper.params.initialSlide) {\n update();\n }\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update\n });\n}","import { getWindow } from 'ssr-window';\nimport { elementChildren, elementOffset, elementParents, getTranslate } from '../../shared/utils.js';\nexport default function Zoom({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed'\n }\n });\n swiper.zoom = {\n enabled: false\n };\n let currentScale = 1;\n let isScaling = false;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const evCache = [];\n const gesture = {\n originX: 0,\n originY: 0,\n slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n imageEl: undefined,\n imageWrapEl: undefined,\n maxRatio: 3\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {}\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined\n };\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.imageEl;\n const slideEl = gesture.slideEl;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n }\n });\n function getDistanceBetweenTouches() {\n if (evCache.length < 2) return 1;\n const x1 = evCache[0].pageX;\n const y1 = evCache[0].pageY;\n const x2 = evCache[1].pageX;\n const y2 = evCache[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n }\n function getScaleOrigin() {\n if (evCache.length < 2) return {\n x: null,\n y: null\n };\n const box = gesture.imageEl.getBoundingClientRect();\n return [(evCache[0].pageX + (evCache[1].pageX - evCache[0].pageX) / 2 - box.x) / currentScale, (evCache[0].pageY + (evCache[1].pageY - evCache[0].pageY) / 2 - box.y) / currentScale];\n }\n function getSlideSelector() {\n return swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n }\n function eventWithinSlide(e) {\n const slideSelector = getSlideSelector();\n if (e.target.matches(slideSelector)) return true;\n if (swiper.slides.filter(slideEl => slideEl.contains(e.target)).length > 0) return true;\n return false;\n }\n function eventWithinZoomContainer(e) {\n const selector = `.${swiper.params.zoom.containerClass}`;\n if (e.target.matches(selector)) return true;\n if ([...swiper.el.querySelectorAll(selector)].filter(containerEl => containerEl.contains(e.target)).length > 0) return true;\n return false;\n }\n\n // Events\n function onGestureStart(e) {\n if (e.pointerType === 'mouse') {\n evCache.splice(0, evCache.length);\n }\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n evCache.push(e);\n if (evCache.length < 2) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches();\n if (!gesture.slideEl) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n if (!gesture.slideEl) gesture.slideEl = swiper.slides[swiper.activeIndex];\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n if (!gesture.imageWrapEl) {\n gesture.imageEl = undefined;\n return;\n }\n gesture.maxRatio = gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n }\n if (gesture.imageEl) {\n const [originX, originY] = getScaleOrigin();\n gesture.originX = originX;\n gesture.originY = originY;\n gesture.imageEl.style.transitionDuration = '0ms';\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n if (!eventWithinSlide(e)) return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache[pointerIndex] = e;\n if (evCache.length < 2) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches();\n if (!gesture.imageEl) {\n return;\n }\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function onGestureEnd(e) {\n if (!eventWithinSlide(e)) return;\n if (e.pointerType === 'mouse' && e.type === 'pointerout') return;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n const pointerIndex = evCache.findIndex(cachedEv => cachedEv.pointerId === e.pointerId);\n if (pointerIndex >= 0) evCache.splice(pointerIndex, 1);\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!gesture.imageEl) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.imageEl.style.transitionDuration = `${swiper.params.speed}ms`;\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale > 1 && gesture.slideEl) {\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n } else if (zoom.scale <= 1 && gesture.slideEl) {\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n }\n if (zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n gesture.slideEl = undefined;\n }\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.imageEl) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n const event = evCache.length > 0 ? evCache[0] : e;\n image.touchesStart.x = event.pageX;\n image.touchesStart.y = event.pageY;\n }\n function onTouchMove(e) {\n if (!eventWithinSlide(e) || !eventWithinZoomContainer(e)) return;\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !gesture.slideEl) return;\n if (!image.isMoved) {\n image.width = gesture.imageEl.offsetWidth;\n image.height = gesture.imageEl.offsetHeight;\n image.startX = getTranslate(gesture.imageWrapEl, 'x') || 0;\n image.startY = getTranslate(gesture.imageWrapEl, 'y') || 0;\n gesture.slideWidth = gesture.slideEl.offsetWidth;\n gesture.slideHeight = gesture.slideEl.offsetHeight;\n gesture.imageWrapEl.style.transitionDuration = '0ms';\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.touchesCurrent.x = evCache.length > 0 ? evCache[0].pageX : e.pageX;\n image.touchesCurrent.y = evCache.length > 0 ? evCache[0].pageY : e.pageY;\n const touchesDiff = Math.max(Math.abs(image.touchesCurrent.x - image.touchesStart.x), Math.abs(image.touchesCurrent.y - image.touchesStart.y));\n if (touchesDiff > 5) {\n swiper.allowClick = false;\n }\n if (!image.isMoved && !isScaling) {\n 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)) {\n image.isTouched = false;\n return;\n }\n 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)) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n image.isMoved = true;\n const scaleRatio = (zoom.scale - currentScale) / (gesture.maxRatio - swiper.params.zoom.minRatio);\n const {\n originX,\n originY\n } = gesture;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX + scaleRatio * (image.width - originX * 2);\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY + scaleRatio * (image.height - originY * 2);\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.imageEl) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n gesture.imageWrapEl.style.transitionDuration = `${momentumDuration}ms`;\n gesture.imageWrapEl.style.transform = `translate3d(${image.currentX}px, ${image.currentY}px,0)`;\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.slideEl && swiper.activeIndex !== swiper.slides.indexOf(gesture.slideEl)) {\n if (gesture.imageEl) {\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n }\n if (gesture.imageWrapEl) {\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n }\n gesture.slideEl.classList.remove(`${swiper.params.zoom.zoomedSlideClass}`);\n zoom.scale = 1;\n currentScale = 1;\n gesture.slideEl = undefined;\n gesture.imageEl = undefined;\n gesture.imageWrapEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n }\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (e && e.target) {\n gesture.slideEl = e.target.closest(`.${swiper.params.slideClass}, swiper-slide`);\n }\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n gesture.slideEl.classList.add(`${params.zoomedSlideClass}`);\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.pageX;\n touchY = e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n const forceZoomRatio = typeof e === 'number' ? e : null;\n if (currentScale === 1 && forceZoomRatio) {\n touchX = undefined;\n touchY = undefined;\n }\n zoom.scale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n currentScale = forceZoomRatio || gesture.imageWrapEl.getAttribute('data-swiper-zoom') || params.maxRatio;\n if (e && !(currentScale === 1 && forceZoomRatio)) {\n slideWidth = gesture.slideEl.offsetWidth;\n slideHeight = gesture.slideEl.offsetHeight;\n offsetX = elementOffset(gesture.slideEl).left + window.scrollX;\n offsetY = elementOffset(gesture.slideEl).top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.imageEl.offsetWidth;\n imageHeight = gesture.imageEl.offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n if (forceZoomRatio && zoom.scale === 1) {\n gesture.originX = 0;\n gesture.originY = 0;\n }\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = `translate3d(${translateX}px, ${translateY}px,0)`;\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = `translate3d(0,0,0) scale(${zoom.scale})`;\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n if (!gesture.slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.slideEl = elementChildren(swiper.slidesEl, `.${swiper.params.slideActiveClass}`)[0];\n } else {\n gesture.slideEl = swiper.slides[swiper.activeIndex];\n }\n let imageEl = gesture.slideEl.querySelector(`.${params.containerClass}`);\n if (imageEl) {\n imageEl = imageEl.querySelectorAll('picture, img, svg, canvas, .swiper-zoom-target')[0];\n }\n gesture.imageEl = imageEl;\n if (imageEl) {\n gesture.imageWrapEl = elementParents(gesture.imageEl, `.${params.containerClass}`)[0];\n } else {\n gesture.imageWrapEl = undefined;\n }\n }\n if (!gesture.imageEl || !gesture.imageWrapEl) return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.imageWrapEl.style.transitionDuration = '300ms';\n gesture.imageWrapEl.style.transform = 'translate3d(0,0,0)';\n gesture.imageEl.style.transitionDuration = '300ms';\n gesture.imageEl.style.transform = 'translate3d(0,0,0) scale(1)';\n gesture.slideEl.classList.remove(`${params.zoomedSlideClass}`);\n gesture.slideEl = undefined;\n gesture.originX = 0;\n gesture.originY = 0;\n }\n\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n function getListeners() {\n const passiveListener = swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = swiper.params.passiveListeners ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.addEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.addEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.addEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.addEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n\n // Scale image\n swiper.wrapperEl.removeEventListener('pointerdown', onGestureStart, passiveListener);\n swiper.wrapperEl.removeEventListener('pointermove', onGestureChange, activeListenerWithCapture);\n ['pointerup', 'pointercancel', 'pointerout'].forEach(eventName => {\n swiper.wrapperEl.removeEventListener(eventName, onGestureEnd, passiveListener);\n });\n\n // Move image\n swiper.wrapperEl.removeEventListener('pointermove', onTouchMove, activeListenerWithCapture);\n }\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd(e);\n });\n on('doubleTap', (_s, e) => {\n if (!swiper.animating && swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle\n });\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!+\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import { createElement, elementChildren } from './utils.js';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = elementChildren(swiper.el, `.${checkProps[key]}`)[0];\n if (!element) {\n element = createElement('div', checkProps[key]);\n element.className = checkProps[key];\n swiper.el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}","import { createElement, getSlideTransformEl } from './utils.js';\nexport default function createShadow(params, slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const shadowContainer = getSlideTransformEl(slideEl);\n let shadowEl = shadowContainer.querySelector(`.${shadowClass}`);\n if (!shadowEl) {\n shadowEl = createElement('div', `swiper-slide-shadow${side ? `-${side}` : ''}`);\n shadowContainer.append(shadowEl);\n }\n return shadowEl;\n}","export default function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective,\n recreateShadows,\n getEffectParams\n } = params;\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n on('transitionEnd', () => {\n if (swiper.params.effect !== effect) return;\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return;\n // remove shadows\n swiper.slides.forEach(slideEl => {\n slideEl.querySelectorAll('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').forEach(shadowEl => shadowEl.remove());\n });\n // create new one\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n}","import { getSlideTransformEl } from './utils.js';\nexport default function effectTarget(effectParams, slideEl) {\n const transformEl = getSlideTransformEl(slideEl);\n if (transformEl !== slideEl) {\n transformEl.style.backfaceVisibility = 'hidden';\n transformEl.style['-webkit-backface-visibility'] = 'hidden';\n }\n return transformEl;\n}","import { elementTransitionEnd } from './utils.js';\nexport default function effectVirtualTransitionEnd({\n swiper,\n duration,\n transformElements,\n allSlides\n}) {\n const {\n activeIndex\n } = swiper;\n const getSlide = el => {\n if (!el.parentElement) {\n // assume shadow root\n const slide = swiper.slides.filter(slideEl => slideEl.shadowEl && slideEl.shadowEl === el.parentNode)[0];\n return slide;\n }\n return el.parentElement;\n };\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let transitionEndTarget;\n if (allSlides) {\n transitionEndTarget = transformElements;\n } else {\n transitionEndTarget = transformElements.filter(transformEl => {\n const el = transformEl.classList.contains('swiper-slide-transform') ? getSlide(transformEl) : transformEl;\n return swiper.getSlideIndex(el) === activeIndex;\n });\n }\n transitionEndTarget.forEach(el => {\n elementTransitionEnd(el, () => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const evt = new window.CustomEvent('transitionend', {\n bubbles: true,\n cancelable: true\n });\n swiper.wrapperEl.dispatchEvent(evt);\n });\n });\n }\n}","import { getWindow } from 'ssr-window';\nlet browser;\nfunction calcBrowser() {\n const window = getWindow();\n let needPerspectiveFix = false;\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n if (isSafari()) {\n const ua = String(window.navigator.userAgent);\n if (ua.includes('Version/')) {\n const [major, minor] = ua.split('Version/')[1].split(' ')[0].split('.').map(num => Number(num));\n needPerspectiveFix = major < 16 || major === 16 && minor < 2;\n }\n }\n return {\n isSafari: needPerspectiveFix || isSafari(),\n needPerspectiveFix,\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\nexport { getBrowser };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\nfunction calcDevice({\n userAgent\n} = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n const device = {\n ios: false,\n android: false\n };\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\nexport { getDevice };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && document.documentElement.style && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch)\n };\n}\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\nexport { getSupport };","export const processLazyPreloader = (swiper, imageEl) => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n const slideSelector = () => swiper.isElement ? `swiper-slide` : `.${swiper.params.slideClass}`;\n const slideEl = imageEl.closest(slideSelector());\n if (slideEl) {\n const lazyEl = slideEl.querySelector(`.${swiper.params.lazyPreloaderClass}`);\n if (lazyEl) lazyEl.remove();\n }\n};\nconst unlazy = (swiper, index) => {\n if (!swiper.slides[index]) return;\n const imageEl = swiper.slides[index].querySelector('[loading=\"lazy\"]');\n if (imageEl) imageEl.removeAttribute('loading');\n};\nexport const preload = swiper => {\n if (!swiper || swiper.destroyed || !swiper.params) return;\n let amount = swiper.params.lazyPreloadPrevNext;\n const len = swiper.slides.length;\n if (!len || !amount || amount < 0) return;\n amount = Math.min(amount, len);\n const slidesPerView = swiper.params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : Math.ceil(swiper.params.slidesPerView);\n const activeIndex = swiper.activeIndex;\n const slideIndexLastInView = activeIndex + slidesPerView - 1;\n if (swiper.params.rewind) {\n for (let i = activeIndex - amount; i <= slideIndexLastInView + amount; i += 1) {\n const realIndex = (i % len + len) % len;\n if (realIndex !== activeIndex && realIndex > slideIndexLastInView) unlazy(swiper, realIndex);\n }\n } else {\n for (let i = Math.max(slideIndexLastInView - amount, 0); i <= Math.min(slideIndexLastInView + amount, len - 1); i += 1) {\n if (i !== activeIndex && i > slideIndexLastInView) unlazy(swiper, i);\n }\n }\n};","import { getWindow, getDocument } from 'ssr-window';\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n const curStyle = getComputedStyle(el, null);\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\nfunction animateCSSModeScroll({\n swiper,\n targetPosition,\n side\n}) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\nfunction getSlideTransformEl(slideEl) {\n return slideEl.querySelector('.swiper-slide-transform') || slideEl.shadowEl && slideEl.shadowEl.querySelector('.swiper-slide-transform') || slideEl;\n}\nfunction findElementsInElements(elements = [], selector = '') {\n const found = [];\n elements.forEach(el => {\n found.push(...el.querySelectorAll(selector));\n });\n return found;\n}\nfunction elementChildren(element, selector = '') {\n return [...element.children].filter(el => el.matches(selector));\n}\nfunction createElement(tag, classes = []) {\n const el = document.createElement(tag);\n el.classList.add(...(Array.isArray(classes) ? classes : [classes]));\n return el;\n}\nfunction elementOffset(el) {\n const window = getWindow();\n const document = getDocument();\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n}\nfunction elementPrevAll(el, selector) {\n const prevEls = [];\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n if (selector) {\n if (prev.matches(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n el = prev;\n }\n return prevEls;\n}\nfunction elementNextAll(el, selector) {\n const nextEls = [];\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n if (selector) {\n if (next.matches(selector)) nextEls.push(next);\n } else nextEls.push(next);\n el = next;\n }\n return nextEls;\n}\nfunction elementStyle(el, prop) {\n const window = getWindow();\n return window.getComputedStyle(el, null).getPropertyValue(prop);\n}\nfunction elementIndex(el) {\n let child = el;\n let i;\n if (child) {\n i = 0;\n // eslint-disable-next-line\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n return i;\n }\n return undefined;\n}\nfunction elementParents(el, selector) {\n const parents = []; // eslint-disable-line\n let parent = el.parentElement; // eslint-disable-line\n while (parent) {\n if (selector) {\n if (parent.matches(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n parent = parent.parentElement;\n }\n return parents;\n}\nfunction elementTransitionEnd(el, callback) {\n function fireCallBack(e) {\n if (e.target !== el) return;\n callback.call(el, e);\n el.removeEventListener('transitionend', fireCallBack);\n }\n if (callback) {\n el.addEventListener('transitionend', fireCallBack);\n }\n}\nfunction elementOuterSize(el, size, includeMargins) {\n const window = getWindow();\n if (includeMargins) {\n return el[size === 'width' ? 'offsetWidth' : 'offsetHeight'] + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-right' : 'margin-top')) + parseFloat(window.getComputedStyle(el, null).getPropertyValue(size === 'width' ? 'margin-left' : 'margin-bottom'));\n }\n return el.offsetWidth;\n}\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty, getSlideTransformEl,\n// dom\nfindElementsInElements, createElement, elementChildren, elementOffset, elementPrevAll, elementNextAll, elementStyle, elementIndex, elementParents, elementTransitionEnd, elementOuterSize };","/**\n * Swiper 9.3.2\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * https://swiperjs.com\n *\n * Copyright 2014-2023 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: May 15, 2023\n */\n\nexport { default as Swiper, default } from './core/core.js';\nexport { default as Virtual } from './modules/virtual/virtual.js';\nexport { default as Keyboard } from './modules/keyboard/keyboard.js';\nexport { default as Mousewheel } from './modules/mousewheel/mousewheel.js';\nexport { default as Navigation } from './modules/navigation/navigation.js';\nexport { default as Pagination } from './modules/pagination/pagination.js';\nexport { default as Scrollbar } from './modules/scrollbar/scrollbar.js';\nexport { default as Parallax } from './modules/parallax/parallax.js';\nexport { default as Zoom } from './modules/zoom/zoom.js';\nexport { default as Controller } from './modules/controller/controller.js';\nexport { default as A11y } from './modules/a11y/a11y.js';\nexport { default as History } from './modules/history/history.js';\nexport { default as HashNavigation } from './modules/hash-navigation/hash-navigation.js';\nexport { default as Autoplay } from './modules/autoplay/autoplay.js';\nexport { default as Thumbs } from './modules/thumbs/thumbs.js';\nexport { default as FreeMode } from './modules/free-mode/free-mode.js';\nexport { default as Grid } from './modules/grid/grid.js';\nexport { default as Manipulation } from './modules/manipulation/manipulation.js';\nexport { default as EffectFade } from './modules/effect-fade/effect-fade.js';\nexport { default as EffectCube } from './modules/effect-cube/effect-cube.js';\nexport { default as EffectFlip } from './modules/effect-flip/effect-flip.js';\nexport { default as EffectCoverflow } from './modules/effect-coverflow/effect-coverflow.js';\nexport { default as EffectCreative } from './modules/effect-creative/effect-creative.js';\nexport { default as EffectCards } from './modules/effect-cards/effect-cards.js';","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import './../libs/gin-tonic/app/storybook.scss';\nimport { DragScrollComponent } from './../libs/gin-tonic/components/drag-scroll/component';\nimport { HistoryComponent } from './components/history/history';\nimport { MultiFilterComponent } from './components/multi-filter/index';\nimport './main.scss';\n\nimport { factory } from './../libs/gin-tonic/helpers/compiler';\n\nimport { CounterComponent } from '../libs/gin-tonic/components/counter/component';\nimport { GallerySliderComponent } from '../libs/gin-tonic/components/gallery-slider/component';\nimport { IntersectComponent } from '../libs/gin-tonic/components/intersect/component';\nimport { MixitComponent } from '../libs/gin-tonic/components/mixitup/component';\nimport { ModalGalleryComponent } from '../libs/gin-tonic/components/modal-gallery/component';\nimport { ModalComponent } from '../libs/gin-tonic/components/modal/component';\nimport { IFramePlayerComponent } from '../libs/gin-tonic/components/player/component';\nimport { MagicScrollFadeInComponent } from '../libs/gin-tonic/components/scroll-magic/fade-in';\nimport { MagicScrollSlideHorizontalComponent } from '../libs/gin-tonic/components/scroll-magic/slide-horizontal';\nimport { MagicScrollZoomComponent } from '../libs/gin-tonic/components/scroll-magic/zoom';\nimport { SelectComponent } from '../libs/gin-tonic/components/select/component';\nimport { StickyComponent } from '../libs/gin-tonic/components/sticky';\nimport { SwiperComponent } from '../libs/gin-tonic/components/swiper/component';\nimport { TabsComponent } from '../libs/gin-tonic/components/tabs/component';\nimport { CollapseComponent } from './../libs/gin-tonic/components/collapse/component';\nimport { MagicScrollBoxComponent } from './../libs/gin-tonic/components/scroll-magic/box';\nimport { TweenEffectComponent } from './../libs/gin-tonic/components/tween-effect/component';\nimport { CaseSliderComponent } from './components/case-slider/case-slider';\nimport { ClockComponent } from './components/clock/clock';\nimport { CookieRenewComponent } from './components/cookie/cookie';\nimport { FilterComponent } from './components/filter';\nimport { HamburgerComponent } from './components/hamburger/hamburger';\nimport { HeroComponent } from './components/hero/hero';\nimport { LetsTalkComponent } from './components/lets-talk/lets-talk';\nimport { LetsTalkRTEComponent } from './components/lets-talk/lets-talk-rte';\nimport { ListsComponent } from './components/lists/lists';\nimport { LogoListsComponent } from './components/lists/logo-list';\nimport { LoadMoreComponent } from './components/load-more';\nimport { ImgModalComponent } from './components/modal/img-modal';\nimport { PlayerModalComponent } from './components/modal/modal';\nimport { MagicScrollToggleVisibilityComponent } from './components/nav/toggle-visibility';\nimport { SlidersComponent } from './components/sliders/sliders';\nimport { MagicScrollStackComponent } from './components/stacks/stacks';\nimport { StatementComponent } from './components/statement/statement';\nimport { HighlightComponent } from './components/text/highlight';\nimport { TeamComponent } from './pages/team/team';\n\nexport function loadComponents(...components: any[]): void {\n\tfactory(components)(document.body);\n}\n\nloadComponents(\n\tCaseSliderComponent,\n\tClockComponent,\n\tCollapseComponent,\n\tCounterComponent,\n\tCookieRenewComponent,\n\tDragScrollComponent,\n\tFilterComponent,\n\tTweenEffectComponent,\n\tHamburgerComponent,\n\tHeroComponent,\n\tHighlightComponent,\n\tHistoryComponent,\n\tIntersectComponent,\n\tImgModalComponent,\n\tListsComponent,\n\tLetsTalkComponent,\n\tLetsTalkRTEComponent,\n\tLogoListsComponent,\n\tLoadMoreComponent,\n\tMagicScrollBoxComponent,\n\tMagicScrollFadeInComponent,\n\tMagicScrollSlideHorizontalComponent,\n\tMagicScrollStackComponent,\n\tMagicScrollZoomComponent,\n\tMagicScrollToggleVisibilityComponent,\n\tMixitComponent,\n\tModalGalleryComponent,\n\tMultiFilterComponent,\n\tIFramePlayerComponent,\n\tPlayerModalComponent,\n\tModalComponent,\n\tGallerySliderComponent,\n\tSelectComponent,\n\tSlidersComponent,\n\tStatementComponent,\n\tStickyComponent,\n\tSwiperComponent,\n\tTabsComponent,\n\tTeamComponent\n);\n"],"names":["window","mixitupMultifilter","mixitup","diacriticsMap","h","CORE_VERSION","compareVersions","REQUIRE_CORE_VERSION","Error","EXTENSION_VERSION","ConfigCallbacks","registerAction","this","onParseFilterGroups","ConfigMultifilter","enable","logicWithinGroup","logicBetweenGroups","minSearchLength","parseOn","keyupThrottleDuration","seal","Config","multifilter","MultifilterFormEventTracker","form","totalBound","totalHandled","FilterGroupDom","el","FilterGroup","name","dom","activeSelectors","activeFilters","activeToggles","handler","mixer","logic","keyupTimeout","extend","prototype","init","self","getAttribute","cacheDom","enableButtons","toLowerCase","config","bindEvents","closestParent","buttons","querySelectorAll","button","i","disabled","e","type","handleFormEvent","pascalCase","on","unbindEvents","off","handleClick","controlSelector","controlEl","target","index","selector","selectors","control","matches","stopPropagation","lastClicked","callbacks","onMixClick","call","state","indexOf","splice","push","updateControls","parseFilterGroups","handleChange","input","getSingleValue","getMultipleValues","handleKeyup","clearTimeout","setTimeout","tracker","group","preventDefault","multifilterFormEventTracker","filterGroups","diacriticMap","attributeName","value","match","length","trim","replace","items","query","item","checked","selected","controlEls","controlsSelector","join","updateControl","activeClassName","activeControls","concat","getClassname","classNames","modifierActive","addClass","removeClass","updateUi","inputEls","isActive","inputEl","tagName","MixerDom","Mixer","filterGroupsHash","parent","controls","scope","container","document","messages","ERROR_CONFIG_INVALID_CONTROLS_SCOPE","live","indexFilterGroups","filterGroup","parseParseFilterGroupsArgs","args","instruction","UserInstruction","arg","animate","animation","command","CommandFilter","callback","freeze","getFilterGroupPaths","buildPath","crawl","nodes","matrix","paths","trackers","node","path","Array","isArray","clean","buildSelectorFromPaths","output","pathSelector","nodeDelineator","parseFilterArgs","arguments","toggleDefault","filter","multimix","setFilterGroupSelectors","groupName","slice","getFilterGroupSelectors","Facade","bind","TYPE","NAME","module","exports","_swiper","obj","nodeInterop","__esModule","default","cache","_getRequireWildcardCache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","hasOwnProperty","desc","set","_interopRequireWildcard","require","_class","_swiper2","_compiler","WeakMap","cacheBabelInterop","cacheNodeInterop","SwiperCore","use","Pagination","A11y","Autoplay","EffectFade","Keyboard","ScrollMagicController","ScrollMagic","Controller","CaseSliderComponent","Component","className","_dec","element","_classCallCheck2","duration","delay","autoplay","autoplayDelay","initSwiper","initPlayButton","_createClass2","forEach","trigger","addEventListener","parentElement","querySelector","click","parseInt","setInitial","Swiper","cssMode","speed","loop","keyboard","allowTouchMove","simulateTouch","disableOnInteraction","pagination","clickable","PaginationTypes","bullets","transitionStart","swiper","getActiveSlideTween","slides","activeIndex","Scene","triggerElement","triggerHook","setTween","addTo","slide","tl","TimelineMax","tweens","staggerTargets","TweenMax","fromTo","css","translateY","opacity","ease","Linear","easeInOut","stagger","opacityTargets","clipTargets","scale","clipPath","add","ClockComponent","updateTimerDisplay","newVal","arr","split","digits","digit","killTweensOf","to","y","offsetTop","CookieRenewComponent","Cookiebot","renew","FilterComponent","onChange","filterButton","buttonsContainer","currentTarget","toggleButton","onButtonClicked","selects","select","selectedIndex","filterString","toggleString","option","setAttribute","selectContainer","buttonGroup","groupWidth","getBoundingClientRect","width","_getParentOrSelfWithClass","HamburgerComponent","toggleClass","parentToggleClass","hamburgerButton","getElementsByClassName","parentElem","getParentOrSelfWithClass","classList","toggle","Navigation","Parallax","EffectCreative","EffectCards","EffectCoverflow","EffectCube","EffectFlip","Mousewheel","HeroComponent","slideCount","previousIndex","bgSlides","descSlides","nextBtn","prevBtn","slideToNext","slideToPrev","timer","setInterval","remove","undefined","clearInterval","animateTransition","gotoNext","resetBg","setBgActiveSlideState","setBgPrevSlideState","resetDesc","setDescActiveSlideState","setDescPrevSlideState","style","zIndex","activeSlide","prevSlide","attr","val","parsedNum","Number","isNaN","_class2","_clock","HistoryComponent","vw","innerWidth","wrapperWidth","clock","SwiperItem","spacing","vertical","mousewheel","breakpoints","slidesPerView","spaceBetween","events","initialSlide","bulletClass","bulletActiveClass","renderBullet","label","navigation","nextEl","prevEl","SLIDES_PER_VIEW","_micromodal","_interopRequireDefault","LetsTalkRTEComponent","from","MicroModal","show","disableFocus","awaitOpenAnimation","awaitCloseAnimation","LetsTalkComponent","ListsComponent","count","maxSlidesPerView","mousewheelTarget","Math","min","LogoListsComponent","direction","_mixitup","_mixitupMultifilter","LoadMoreComponent","observe","options","itemSelector","triggerSelector","cardIncrease","hiddenClass","activeFilterSelector","resetSelector","filterSelector","optionContainerSelector","chipContainerSelector","page","activeHash","servicesFilter","branchFilter","allItems","loadTrigger","optionContainers","chipContainer","resetTrigger","filteredItems","setVisibleItems","setButtonState","closeIcon","createElement","useElem","createElementNS","setAttributeNS","svg","appendChild","uiState","deserializeHash","onMixEnd","update","hideItems","syncMixerWithPreviousUiState","hash","location","pair","values","services","map","getValueFromSelector","branches","setHash","hide","setBadgesState","setResetState","activeFilter","getUiState","newHash","serializeUiState","href","history","replaceState","title","pathname","getSelectorFromValue","innerHTML","createChip","chip","prepend","cloneNode","maxVal","childElementCount","ImgModalComponent","modalContentSelector","onShow","openModal","modal","content","img","closeModal","modalId","close","_player","PlayerModalComponent","player","playerElement","src","IFramePlayer","play","destroy","_getParentWithClass","MultiFilterComponent","parentClass","activeOptionSelector","console","log","activeItems","optionsContainer","open","overlay","getParentWithClass","btn","MagicScrollToggleVisibilityComponent","gsap","registerPlugin","Observer","setTopStyle","create","tolerance","onUp","onDown","scrollY","SlidersComponent","maxPerView","Mixit","animationDuration","navs","swiperItem","slideTo","activeClass","detail","ordering","activeSort","order","sortString","find","contains","sort","MagicScrollStackComponent","containerHeight","scaler","hook","parseFloat","height","setScene","offset","getOffset","setPin","pushFollowers","scaleX","scaleY","easeNone","j","StatementComponent","setActiveSlideTween","countdown","reloadBtn","bar","id","running","preloadImages","lazy","centeredSlides","roundLengths","watchOverflow","watchSlidesProgress","slideToClickedSlide","wrapperClass","preventClicks","afterInit","HighlightComponent","setClassToggle","TeamComponent","Flip","newContainer","triggers","onClose","openClass","elem","nameEl","textContent","diplomaEl","positionEl","linkedinEl","linkedinVal","mailEl","mailVal","icon","append","parentNode","getState","absolute","nested","children","_","CollapseComponent","closeSiblings","Collapse","_mergeOptions","_getSelectorElementFromElement","_getTriggerElementsFormElement","_eventDispatcher","_eventNamespaceFactory","_addTransitionEndListener","stringCollapse","isTransitioning","showing","EventDispatcher","hiding","shown","hidden","eventNamespaceFn","eventNamespaceFactory","event","getSelectorElementFromElement","dataTargetSelector","data","getInstance","mergeOptions","dataParentSelector","getTriggerElementsFromElement","toggles","dataToggleSelector","_addAriaAndCollapsedClass","componentClass","useShowClassDesktop","outerWidth","desktopWidth","showClassDesktop","showClass","isOpen","actives","collapsingClass","active","collapseInstance","_handleShow","isHideable","_handleClose","animateProp","collapseElement","dispatch","scrollHeight","addTransitionEndListener","transitionDuration","offsetWidth","o","activeParentClass","toString","CounterComponent","Counter","_animeEs","onIntersect","entries","entry","triggerAnimation","counter","anime","targets","easing","round","counters","counterClass","observerOptions","root","rootMargin","threshold","IntersectionObserver","observer","dataFromSelector","dataToSelector","_index","DragScrollComponent","DragScroll","both","x","mouseDownHandler","clientX","clientY","mouseMoveHandler","mouseUpHandler","dx","dy","horizontal","scrollLeft","scrollTop","setBlurEdges","removeEventListener","blurEdges","edge","scrollWidth","edgeSelector","GallerySliderComponent","isCalledFromExternal","interleaveOffset","slideChange","instance","previousItem","activeItem","header","startIFrame","stopIFrame","progress","innerTranslate","slideInner","transform","touchStart","transition","setTransition","wallTrigger","isInModal","wrapper","navigationInstance","paginationNextEl","paginationPrevEl","centerInsufficientSlides","autoHeight","enabled","onlyInViewport","thumbs","screen","orientation","stopAllIFrames","iframe","findIFrame","findAllIFrames","IntersectComponent","themes","theme","isIntersecting","intersectClass","MixitComponent","effects","applyPerspective","onMixStart","futureState","dispatchEvent","CustomEvent","ModalGalleryComponent","ModalGallery","_getWindowScrollTop","_component","sliderInstance","wallAncestor","_eventNamespaceFn","$event","stopImmediatePropagation","scrollTopPosition","getWindowScrollTop","slider","body","scrollTo","ModalComponent","Modal","disableScroll","IFramePlayerComponent","startPlayerClassName","once","playingClassName","MagicScrollBoxComponent","box","translationHeight","innerHeight","top","right","easeInOutQuad","reverse","MagicScrollFadeInComponent","yPercent","MagicScrollSlideHorizontalComponent","scenes","fill","translateX","MagicScrollZoomComponent","setZoomScene","transformOrigin","SelectComponent","Select","_newGuid","_createNode","_getParsedCssUnit","_overlay","_repositionScrollStrategy","optionElements","offsetY","panelOpen","tabIndex","newGuid","componentClassName","triggerTextElement","componentValueClassName","triggerArrow","iconHtml","createNode","componentArrowClassName","insertAdjacentElement","focus","_handleKeydown","setSelectedValue","overlayRef","panel","panelClassName","optionElement","optionClassName","disabledClassName","text","position","OverlayPositionBuilder","connectedTo","withOffsetY","withFallbackPosition","originX","originY","overlayX","overlayY","Overlay","OverlayOptions","scrollStrategy","RepositionScrollStrategy","positionStrategy","backdropClassName","hasBackdrop","backdropClick","subscribe","afterOpened","withOffsetX","afterClosed","dispose","onAttached","portalElement","overlayRect","overlayElement","paddingWidth","getParsedCssUnit","leftOverflow","left","rightOverflow","offsetX","updatePosition","onDetached","_calculateOverlayPosition","setActiveValue","Event","delta","code","shouldForwardEvent","itemHeight","offsetHeight","scrollOffset","maxHeight","max","selectedClassName","panelHeight","maxScroll","scrollBuffer","optimalScrollPosition","triggerRect","optionHeightAdjustment","maxOptionsDisplayed","floor","optionOffsetFromPanelTop","firstDisplayedIndex","viewportSize","topSpaceAvailable","bottomSpaceAvailable","bottom","panelHeightTop","abs","panelHeightBottom","originBasedOnOption","distanceBelowViewport","distanceAboveViewport","_stickybits","StickyComponent","stickybits","stickyChangeClass","stickyClass","stuckClass","useStickyClasses","SwiperComponent","perview","parseToBoolOrInt","slideNextClass","slidePrevClass","parallax","releaseOnEdges","eventsTarget","scrollbar","effect","TabsComponent","Tabs","_common","_fetchHtml","_removeQueryStringFromPath","wrapperElement","tabElements","visibleTabIndex","wrapperSelector","navigationSelector","navigationToContentAttribute","contentSelector","contentIdentifierAttribute","targetAttribute","loaded","isNullOrEmpty","tabElement","openTab","activeTabElement","getActiveTab","tab","visibleTab","getTabByIndex","visibleClass","updateHistory","loadContent","updateHistoryOnTabChange","pushState","removeQueryStringFromPath","loadingHtml","fetchHtml","then","ownKeys","object","enumerableOnly","keys","getOwnPropertySymbols","symbols","sym","enumerable","apply","_objectSpread","source","_defineProperty2","getOwnPropertyDescriptors","defineProperties","TweenEffectComponent","individualScenes","TweenEffect","initClipTop","initClipTopX","initClipTopLeft","initClipTopRight","initClipBottomLeft","initClipBottomRight","initScaleUp","initFadeIn","initFadeOut","initSlideVertical","initSlideHorizontal","targetPrefix","clipPercentage","createTween","clipFull","easeFunc","Power2","url","link","download","_downloadFileUrl","_isNullOrEmpty","_emptyGuid","emptyGuid","classType","dataset","reduce","acc","str","c","r","random","throttle","fn","componentTypes","rootElement","metadatas","componentType","resolve","metadata","compileComponent","run","MutationObserver","mutations","mutation","addedNodes","HTMLElement","childList","subtree","addMutationObserver","m","ANNOTATIONS","PROP_METADATA","COMPONENT_CACHE","Map","DecoratorFactory","cls","metadataName","makeDecorator","ComponentRef","makePropDecorator","first","descendants","ComponentRefs","ChildRef","ChildrenRef","comps","initializedDatasetKey","includes","constructor","queries","propName","getComponentFromElement","onInit","PropDecoratorFactory","metaName","meta","unshift","annotations","ctor","ownAnnotations","getPrototypeOf","propMetadata","propMetadataVal","ownMetadata","typeMetadata","throwComponentNotResolvable","getMetadata","propertyMetadata","getQueries","isAncestorOfClass","_isAncestorOfClass","html","firstElementChild","elements","computed","getStyles","getPropertyValue","_getStyles","firstByClass","getParentsOrSelf","_firstByClass","_getParentsOrSelf","getParents","_getParents","parents","isHTMLElement","_isHtmlElement","attribute","fallbackHref","getSelectorFromElement","getElementById","substr","_getSelectorFromElement","test","view","ownerDocument","defaultView","opener","getComputedStyle","documentElement","pageYOffset","initializeClickElements","listener","elementsWithListener","addClickElements","_ref","_ref2","includeSelf","nodeType","Node","nodeName","prop","formatCssUnit","_formatCssUnit","Subscription","isOnce","isExecuted","subscriptions","sub","execute","cleanup","dispatcher","some","eventName","fallbackDuration","called","namespace","async","response","fetch","method","headers","Promise","reject","DOWN","ENTER","ESCAPE","SPACE","UP","parseCssUnit","getCss","_getCss","_parseCssUnit","unit","units","u","parsed","_connectedPositionStrategy","_globalPositionStrategy","_overlayPositionBuilder","_positionStrategy","_overlayOptions","_overlayImplementation","_initializeClickElements","OverlayImplementation","beforeOpen","beforeClose","initializeOpenElements","createOverlay","initializeDismissElements","updatePortalElement","initializePortal","getOverlayOptions","forward","onDisposed","portal","containerClassName","showingClassName","baseBackdropClassName","hidingClassName","visibleClassName","disposeAfterClose","detachBackdropBeforeClose","closeOnBackdropClick","closeOnEscPressed","closeOnClick","_clickedInsideElementWithClass","_safeApplyCssValue","_keycodes","onKeyboardEvent","attached","uuid","keydownListener","keyCode","KEYCODES","attach","portalClassName","overlayContainerElement","insertBefore","lastElementChild","overlayClassName","backdropElement","backdropToDetach","finishDetach","removeChild","pointerEvents","sizeConfig","updateElementSize","finishOpen","detach","detachBackdrop","finishClose","disable","attachBackdrop","handleBackdropClick","requestAnimationFrame","safeApplyCssUnit","minWidth","minHeight","maxWidth","clickedInsideElementWithClass","_calculateOverlay","ConnectedPositionStrategy","onPositionChange","scrollables","preferredPositions","applied","positionLocked","updateTransformOrigin","handleResizeChange","origin","pane","overlayPoint","overlayPosition","lastConnectedPosition","calculateOverlayPoint","isFallback","point","calculatePosition","verticalStyleProperty","horizontalStyleProperty","calculateOverlayElementPosition","connectionPair","scrollableViewProperties","getScrollVisibility","originPos","overlayPos","ConnectionPositionPair","isLocked","positions","GlobalPositionStrategy","cssPosition","topOffset","bottomOffset","leftOffset","rightOffset","alignItems","justifyContent","updateSize","marginLeft","marginTop","marginBottom","marginRight","elementRef","BaseScrollStrategy","handleEnable","handleDisable","_throttleTimeout","_isElementOutsideWindow","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","valueOf","_isNativeReflectConstruct","result","Super","_getPrototypeOf2","NewTarget","_possibleConstructorReturn2","_BaseScrollStrategy","_inherits2","_super","_this","handleScroll","autoClose","throttleTimeout","scrollThrottle","isElementOutsideWindow","eventListenerOrTimeout","transitionEndEventName","_eventListenerOrTimeout","getTransitionEndEventName","transitions","WebkitTransition","pos","clientHeight","clientWidth","fallbackPoint","fallbackPosition","fitsInViewport","visibleArea","originBounds","overlayBounds","scrollContainerBounds","s","isOriginClipped","isElementClippedByScrolling","isOriginOutsideView","isElementScrolledOutsideView","isOverlayClipped","isOverlayOutsideView","_isElementClippedByScrolling","_isElementScrolledOutsideView","subtractOverflows","_len","overflows","_key","currentValue","currentOverflow","originRect","originPoint","originStartX","originEndX","getOriginConnectionPoint","baseOffsetX","baseOffsetY","overlayStartX","overlayStartY","topOverflow","bottomOverflow","getOverlayPoint","scrollContainers","scrollContainerRect","clippedAbove","clippedBelow","clippedLeft","clippedRight","parentRects","containerBounds","outsideAbove","outsideBelow","outsideLeft","outsideRight","ReferenceError","Constructor","TypeError","toPropertyKey","_defineProperties","props","descriptor","configurable","writable","protoProps","staticProps","_extends","assign","_getPrototypeOf","setPrototypeOf","__proto__","subClass","superClass","_typeof","assertThisInitialized","_setPrototypeOf","p","hint","prim","Symbol","toPrimitive","res","String","iterator","defaultInstanceSettings","begin","loopBegin","changeBegin","change","changeComplete","loopComplete","complete","timelineOffset","defaultTweenSettings","endDelay","validTransforms","CSS","springs","minMax","stringContains","applyArguments","func","is","a","pth","SVGElement","inp","HTMLInputElement","fnc","und","nil","hex","rgb","hsl","col","parseEasingParameters","string","exec","spring","params","mass","stiffness","damping","velocity","w0","sqrt","zeta","wd","b","solver","t","exp","cos","sin","cached","frame","elapsed","rest","steps","ceil","eases","functionEasings","bezier","kSampleStepSize","A","aA1","aA2","B","C","calcBezier","aT","getSlope","mX1","mY1","mX2","mY2","sampleValues","Float32Array","getTForX","aX","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","binarySubdivide","penner","linear","Sine","PI","Circ","Back","Bounce","pow2","pow","Elastic","amplitude","period","asin","easeIn","parseEasings","selectString","filterArray","len","thisArg","flattenArray","toArray","NodeList","HTMLCollection","arrayContains","cloneObject","clone","replaceObjectProps","o1","o2","mergeObjects","colorToRgb","rgbValue","hexValue","g","hexToRgba","hslValue","l","hue2rgb","q","hslToRgba","getUnit","getFunctionValue","animatable","total","convertPxToUnit","tempEl","parentEl","factor","convertedUnit","getCSSValue","uppercasePropName","getAnimationType","getElementTransforms","reg","transforms","getTransformValue","defaultVal","getTransformUnit","list","getOriginalTargetValue","getRelativeValue","operator","validateValue","originalUnit","unitLess","getDistance","p1","p2","getPolylineLength","previousPos","points","totalLength","numberOfItems","currentPos","getItem","getTotalLength","getCircleLength","getRectLength","getLineLength","getPolygonLength","getParentSvg","pathEl","svgData","parentSvgEl","getParentSvgEl","rect","viewBoxAttr","viewBox","w","vW","vH","getPathProgress","isPathTargetInsideSVG","getPointAtLength","p0","property","atan2","decomposeValue","rgx","original","numbers","strings","parseTargets","getAnimatables","normalizePropertyTweens","tweenSettings","settings","propArray","v","k","getProperties","properties","keyframes","propertyNames","newKey","flattenKeyframes","normalizeTweens","previousTween","tween","normalizeTweenValues","tweenValue","toUnit","originalValue","previousValue","fromUnit","start","end","isPath","isColor","setProgressValue","manual","last","setTargetsValue","valueUnit","animType","getAnimations","animatables","lastTween","createAnimation","getInstanceTimings","animations","animLength","getTlOffset","anim","timings","instanceID","activeInstances","engine","raf","step","activeInstancesLength","activeInstance","paused","tick","suspendWhenDocumentHidden","isDocumentHidden","cancelAnimationFrame","_onDocumentVisibility","startTime","lastTime","now","childrenLength","makePromise","promise","_resolve","finished","instanceSettings","createNewInstance","toggleInstanceDirection","reversed","child","adjustTime","time","resetTime","currentTime","seekChild","seek","setAnimationsProgress","insTime","animationsLength","tweenLength","eased","toNumbersLength","n","toNumber","fromNumber","stringsLength","n$1","setCallback","cb","passThrough","setInstanceProgress","engineTime","insDuration","insDelay","insEndDelay","reversePlayback","i$1","syncInstanceChildren","began","loopBegan","changeBegan","changeCompleted","remaining","completed","reset","pause","restart","removeTargetsFromInstance","removeTargetsFromAnimations","targetsArray","childAnimations","version","convertPx","percent","setDashoffset","pathLength","grid","axis","fromIndex","fromFirst","fromCenter","fromLast","isRange","val1","val2","maxValue","fromX","fromY","distanceX","distanceY","timeline","instanceParams","tlIndex","ins","insParams","tlDuration","_default","targetModal","d","openTrigger","f","closeTrigger","E","M","debugMode","registerTriggers","onClick","onKeydown","showModal","activeElement","scrollBehaviour","addEventListeners","setFocusToFirstNode","removeEventListeners","_extends2","overflow","hasAttribute","retainFocus","getFocusableNodes","offsetParent","shiftKey","warn","attributes","closeModalById","ElementPrototype","hasDontEnumBug","dontEnums","dontEnumsLength","Temp","VENDORS","canary","nextElementSibling","Element","nextSibling","machesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","propertyIsEnumerable","propertiesObject","searchElement","Infinity","Function","oThis","aArgs","FNOP","fBound","fireEvent","err","foreignDoc","returnCollection","facade","doc","instances","isElement","errorFactoryInvalidContainer","errorFactoryContainerNotFound","randomHex","debug","showWarnings","warningFactoryPreexistingInstance","Collection","extension","Base","callActions","extensions","jquery","libraries","$","hasClass","RegExp","destination","deep","handleErrors","sourceKeys","handleExtendError","erroneous","message","suggestion","probableMatch","mostMatchingChars","charAt","errorConfigInvalidPropertySuggestion","errorConfigInvalidProperty","template","re","dynamics","useCapture","attachEvent","detachEvent","getCustomEvent","eventType","bubbles","cancelable","createEvent","initCustomEvent","createEventObject","returnValue","cancelBubble","getOriginalEvent","touches","changedTouches","previousElementSibling","camelCase","$1","toUpperCase","dashCase","htmlString","frag","temp","createDocumentFragment","firstChild","removeWhitespace","deleting","previousSibling","isEqualArray","deepEquals","arrayShuffle","oldArray","newArray","arrayFromList","debounce","wait","immediate","timeout","later","callNow","xPosition","yPosition","offsetLeft","getHypotenuse","node1","node2","getIntersectionRatio","box1","box2","intersectionX","controlArea","tempId","randomHexKey","removeAttribute","originalArray","cleanArray","defer","deferred","promiseWrapper","Deferred","features","promises","jQuery","warningNoPromiseImplementation","all","tasks","when","done","getPrefix","vendors","prefix","getDocumentState","pageXOffset","docHeight","docWidth","viewportHeight","viewportWidth","isVisible","styles","visibility","specimen","controlParts","specimenParts","controlPart","specimenPart","isEmptyObject","elementName","modifier","classname","block","delineatorElement","delineatorModifier","getProperty","stringKey","returnCurrent","parts","current","actionName","hooks","actions","extensionName","callFilters","filterName","filters","BaseStatic","hookName","registerFilter","Features","boxSizingPrefix","transformPrefix","transitionPrefix","transformProp","transformRule","transitionProp","perspectiveProp","perspectiveOriginProp","Has","BOX_SIZING_PROP","TRANSITION_PROP","TRANSFORM_PROP","PERSPECTIVE_PROP","PERSPECTIVE_ORIGIN_PROP","TWEENABLE","setPrefixes","runTests","boxSizingProp","ConfigAnimation","effectsIn","effectsOut","perspectiveDistance","perspectiveOrigin","queue","queueLimit","animateResizeContainer","animateResizeTargets","staggerSequence","reverseOut","nudge","clampHeight","clampWidth","ConfigBehavior","liveSort","onMixBusy","onMixFail","ConfigControls","toggleLogic","ConfigClassNames","elementContainer","elementFilter","elementSort","elementMultimix","elementToggle","modifierDisabled","modifierFailed","ConfigData","uidKey","dirtyCheck","ConfigDebug","fauxAsync","ConfigLayout","allowNestedTargets","siblingBefore","siblingAfter","ConfigLoad","ConfigSelectors","ConfigRender","ConfigTemplates","behavior","layout","load","render","templates","UiClassNames","base","CommandDataset","CommandMultimix","insert","changeLayout","collection","action","CommandSort","next","CommandInsert","sibling","CommandRemove","CommandChangeLayout","ControlDefinition","controlDefinitions","Control","bound","pending","status","canDisable","bindClick","isBound","addBinding","removeBinding","removeIndex","unbindClick","renderStatus","commands","fire","originalEvent","toggleOff","toggleOn","toggleArray","updateLive","parseStatusChange","controlButtons","alias","StyleData","TransformData","translateZ","rotateX","rotateY","rotateZ","TransformDefaults","transformDefaults","EventDetail","Events","mixStart","mixBusy","mixEnd","mixFail","mixClick","eventDetail","State","QueueItem","isToggling","isBusy","incPadding","origOrder","targetsMoved","targetsImmovable","targetsBound","targetsDone","staggerDuration","transformIn","transformOut","lastOperation","userCallback","userDeferred","sanitizeConfig","indexTargets","getInitialState","toHide","initControls","buildToggleArray","parseEffects","operation","Operation","activeContainerClassName","errorConfigDataUidKeyNotSet","startDataset","newDataset","activeDataset","startContainerClassName","newContainerClassName","parseSortArgs","totalTargets","newSort","sortOperation","printSort","newOrder","startOrder","startFilter","newFilter","startSort","filterOperation","buildState","errorDatasetPrerenderedMismatch","Target","isInDom","definition","controlElements","delagators","errorConfigInvalidControlsScope","getControl","getToggleSelector","delineator","toggleSelector","splitCompoundSelector","compoundSelector","partials","shift","buildSortString","insertTargets","insertionIndex","getNextSibling","errorInsertPreexistingElement","display","createTextNode","testResult","evaluateHideShow","toRemove","toShow","matching","hasFailed","filteredTestResult","isShown","errorSortNonExistentElement","compare","willSort","attrA","getAttributeValue","attrB","warningInconsistentSortingAttributes","isResetting","whitespace","lastChild","childNodes","parseSortString","rules","rule","transformName","parseEffect","effectName","effectString","isOut","propIndex","errorConfigInvalidAnimationEffects","substring","totalShow","totalHide","totalMatching","goMix","shouldAnimate","willChangeLayout","startState","newState","docState","startHeight","newHeight","viewportDeltaY","startWidth","newWidth","viewportDeltaX","moveTargets","cleanUp","getStartMixData","parentStyle","parentRect","boxSizing","getPosData","showPosData","startPosData","toHidePosData","startX","startY","paddingTop","paddingBottom","borderTop","borderBottom","paddingLeft","paddingRight","borderLeft","borderRight","setInter","getInterMixData","interPosData","setFinal","getFinalMixData","finalPosData","newX","newY","getTweenData","posData","effectNames","getOwnPropertyNames","widthChange","heightChange","posIn","posOut","tweenData","moveData","statusChange","willTransition","staggerIndex","checkProgress","IMoveData","hasEffect","move","ContainerClassName","EFFECTABLES","whitespaceBefore","whitespaceAfter","nextInQueue","parseMultimixArgs","parseInsertArgs","parseRemoveArgs","parseChangeLayoutArgs","errorFilterInvalidArguments","errorInsertInvalidArguments","warningInsertNoElements","warningRemoveNoElements","parseDatasetArgs","queueMix","queueItem","warningMultimixInstanceQueueFull","getDataOperation","errorDatasetNotSet","diffDatasets","persistantStartIds","persistantNewIds","insertedTargets","uids","errorDatasetInvalidUidKey","errorDatasetDuplicateUid","uid","replaceChild","insertDatasetFrag","insertAt","sortCommandA","sortCommandB","isMixing","selectorIndex","getOperation","multimixCommand","sortCommand","filterCommand","changeLayoutCommand","removeCommand","insertCommand","warningGetOperationInstanceBusy","multiplier","toHideIndex","applyTween","insertAfter","getConfig","configure","forceRefresh","forceRender","TargetDom","isExcluded","errorDatasetRendererNotSet","getSortString","applyStylesIn","applyStylesOut","propertyName","currentTransformValues","currentValues","isFading","transformValues","transitionRules","isResizing","writeTransitionRule","applyTransition","getDelay","transitionString","handleTransitionEnd","canResize","eventBus","transitionEndEvent","getBox","methodName","toMove","startDisplay","newDisplay","Messages","ERROR_FACTORY_INVALID_CONTAINER","ERROR_FACTORY_CONTAINER_NOT_FOUND","ERROR_CONFIG_INVALID_ANIMATION_EFFECTS","ERROR_CONFIG_INVALID_PROPERTY","ERROR_CONFIG_INVALID_PROPERTY_SUGGESTION","ERROR_CONFIG_DATA_UID_KEY_NOT_SET","ERROR_DATASET_INVALID_UID_KEY","ERROR_DATASET_DUPLICATE_UID","ERROR_INSERT_INVALID_ARGUMENTS","ERROR_INSERT_PREEXISTING_ELEMENT","ERROR_FILTER_INVALID_ARGUMENTS","ERROR_DATASET_NOT_SET","ERROR_DATASET_PRERENDERED_MISMATCH","ERROR_DATASET_RENDERER_NOT_SET","ERROR_SORT_NON_EXISTENT_ELEMENT","WARNING_FACTORY_PREEXISTING_INSTANCE","WARNING_INSERT_NO_ELEMENTS","WARNING_REMOVE_NO_ELEMENTS","WARNING_MULTIMIX_INSTANCE_QUEUE_FULL","WARNING_GET_OPERATION_INSTANCE_BUSY","WARNING_NO_PROMISE_IMPLEMENTATION","WARNING_INCONSISTENT_SORTING_ATTRIBUTES","compileTemplates","errorKey","errorMessage","isObject","ssrDocument","win","ssrWindow","blur","initEvent","getElementsByTagName","importNode","host","hostname","protocol","search","navigator","userAgent","go","back","Image","Date","matchMedia","Stickybits","customStickyChangeNumber","noStyles","stickyBitStickyOffset","scrollEl","useFixed","useGetBoundingClientRect","verticalPosition","applyStyle","positionVal","definePosition","_this$props","verticalPositionStyle","positionStyle","els","_styles","addInstance","classes","manageState","_proto","stickyProp","head","_this2","isWin","se","getClosestParent","computeScrollOffsets","toggleClasses","stateChange","stateContainer","getTopPosition","topPosition","it","isCustom","isTop","scrollElOffset","stickyStart","stickyChangeOffset","parentBottom","stickyChange","stickyStop","cArray","rItem","_this3","stop","pv","sticky","stuck","vp","aS","ns","rAFStub","rAF","mozRequestAnimationFrame","webkitRequestAnimationFrame","msRequestAnimationFrame","scroll","isSticky","isStuck","isStickyChange","_styles2","_classes","_styles3","_classes2","_style$classes","stateStyles","stl","idx","updatedProps","_this4","updatedProp","removeInstance","_styles4","_classes3","containerEl","breakpoint","getWindow","currentHeight","minRatio","_ssrWindow","_setBreakpoint","_getBreakpoint","setBreakpoint","getBreakpoint","realIndex","initialized","breakpointsBase","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isGridEnabled","isMultiRow","wasEnabled","containerModifierClass","emitContainerClasses","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","changeDirection","isEnabled","allowSlideNext","allowSlidePrev","emit","loopDestroy","loopCreate","updateSlides","_utils","rows","checkOverflow","wasLocked","slidesOffsetBefore","lastSlideIndex","lastSlideRightEdge","slidesGrid","slidesSizesGrid","size","snapGrid","isEnd","rtl","device","suffixes","resultClasses","prepareClasses","freeMode","android","ios","_addClasses","_removeClasses","addClasses","removeClasses","_getSupport","_getDevice","_getBrowser","_resize","_observer","_eventsEmitter","_index2","_index3","_index4","_index5","_index6","_index7","_index8","_index9","_index10","_defaults","_moduleExtendParams","_processLazyPreloader","prototypes","eventsEmitter","translate","grabCursor","extendedDefaults","getDocument","swipers","newParams","__swiper__","support","getSupport","getDevice","browser","getBrowser","eventsListeners","eventsAnyListeners","modules","__modules__","allModulesParams","mod","extendParams","moduleExtendParams","swiperParams","defaults","passedParams","onAny","isHorizontal","isVertical","isBeginning","previousTranslate","animating","cssOverflowAdjustment","trunc","touchEventsData","isTouched","isMoved","allowTouchCallbacks","touchStartTime","isScrolling","currentTranslate","startTranslate","allowThresholdMove","focusableElements","lastClickTime","clickTimeout","velocities","allowMomentumBounce","startMoving","evCache","allowClick","currentY","diff","imagesToLoad","imagesLoaded","slideEl","slidesEl","elementChildren","slideClass","firstSlideIndex","elementIndex","getSlideIndex","setGrabCursor","unsetGrabCursor","minTranslate","maxTranslate","translateTo","updateActiveIndex","updateSlidesClasses","_emitClasses","destroyed","updates","getSlideClasses","exact","swiperSize","spv","breakLoop","slideSize","swiperSlideSize","setTranslate","translateValue","rtlTranslate","newTranslate","translated","imageEl","processLazyPreloader","updateProgress","updateAutoHeight","virtual","newDirection","needUpdate","currentDirection","dir","mounted","shadowEl","getWrapperSelector","wrapperEl","getWrapper","shadowRoot","createElements","elementStyle","wrongRTL","mount","slidesBefore","runCallbacksOnInit","attachEvents","preload","deleteInstance","cleanStyles","detachEvents","slideVisibleClass","slideActiveClass","deleteProps","newDefaults","installModule","prototypeGroup","protoMethod","Resize","oneWayMovement","touchEventsTarget","updateOnWindowResize","resizeObserver","preventInteractionOnTransition","edgeSwipeDetection","edgeSwipeThreshold","setWrapperSize","virtualTranslate","slidesPerGroup","slidesPerGroupSkip","slidesPerGroupAuto","centeredSlidesBounds","slidesOffsetAfter","normalizeSlideIndex","touchRatio","touchAngle","shortSwipes","longSwipes","longSwipesRatio","longSwipesMs","followFinger","touchMoveStopPropagation","touchStartPreventDefault","touchStartForcePreventDefault","touchReleaseOnEdges","uniqueNavElements","resistance","resistanceRatio","preventClicksPropagation","loopedSlides","loopPreventsSliding","rewind","swipeHandler","noSwiping","noSwipingClass","noSwipingSelector","passiveListeners","maxBackfaceHiddenSlides","lazyPreloaderClass","lazyPreloadPrevNext","priority","onceHandler","__emitterProxy","offAny","eventHandler","context","_len2","_key2","_onTouchStart","_onTouchMove","_onTouchEnd","_onResize","_onClick","_onScroll","_onLoad","dummyEventAttached","dummyEventListener","capture","domMethod","swiperMethod","onTouchStart","passive","onTouchMove","onTouchEnd","onScroll","onResize","onLoad","isVirtual","isVirtualLoop","slideToLoop","resizeTimeout","resume","newProgress","translatesDiff","pointerIndex","findIndex","cachedEv","pointerId","isSafari","isWebView","pointerType","touchEndTime","timeDiff","pathTree","composedPath","updateClickedSlide","nextTick","swipeDirection","stopIndex","groupSize","increment","rewindFirstIndex","rewindLastIndex","ratio","targetTouch","pageX","pageY","preventedByNestedSwiper","prevX","prevY","targetTouches","diffX","diffY","zoom","touchesDiff","previousX","previousY","prevTouchesDirection","touchesDirection","isLoop","loopFix","getTranslate","evt","loopFixed","disableParentSwiper","activeSlideIndex","slidesPerViewDynamic","targetEl","which","swipingClassHasValue","eventPath","isTargetShadow","__closestFrom","assignedSlot","found","closest","getRootNode","closestElement","iOSEdgeSwipeDetection","iOSEdgeSwipeThreshold","shouldPreventDefault","isContentEditable","_setGrabCursor","_unsetGrabCursor","moving","__preventObserver__","cursor","_loopCreate","_loopFix","_loopDestroy","slideRealIndex","recalcSlides","newSlidesOrder","swiperSlideIndex","byController","byMousewheel","snapIndex","prependSlidesIndexes","appendSlidesIndexes","isNext","isPrev","slidesPrepended","slidesAppended","swiperLoopMoveDOM","updateSlidesOffset","currentSlideTranslate","controller","loopParams","moduleParamName","moduleParams","auto","observers","WebkitMutationObserver","observerUpdate","characterData","observeParents","observeSlideChildren","containerParents","elementParents","disconnect","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","contentBoxSize","contentRect","inlineSize","blockSize","unobserve","_slideTo","_slideToLoop","_slideNext","_slidePrev","_slideReset","_slideToClosest","_slideToClickedSlide","slideNext","slidePrev","slideReset","slideToClosest","runCallbacks","internal","perGroup","_clientLeft","clientLeft","normalize","normalizedTranslate","normalizedSnapGrid","prevSnap","prevSnapIndex","snap","prevIndex","lastIndex","initial","slideIndex","skip","normalizedGrid","normalizedGridNext","transitionEnd","isH","scrollSnapType","_immediateVirtual","_cssModeVirtualInitialSet","smoothScroll","animateCSSModeScroll","targetPosition","side","onSlideToWrapperTransitionEnd","slideToIndex","clickedIndex","slideSelector","clickedSlide","currentSnap","newIndex","getSlideIndexByData","_setTransition","_transitionStart","_transitionEnd","transitionEmit","_transitionEmit","_getTranslate","_setTranslate","_minTranslate","_maxTranslate","_translateTo","translateBounds","onTranslateToWrapperTransitionEnd","_updateSize","_updateSlides","_updateAutoHeight","_updateSlidesOffset","_updateSlidesProgress","_updateProgress","_updateSlidesClasses","_updateActiveIndex","_updateClickedSlide","updateSlidesProgress","newActiveIndex","previousRealIndex","previousSnapIndex","getVirtualRealIndex","aIndex","getActiveIndexByTranslate","activeSlides","getSlideByIndex","visibleSlides","slideFound","progressLoop","wasBeginning","wasEnd","isBeginningRounded","isEndRounded","firstSlideTranslate","lastSlideTranslate","translateMax","translateAbs","getDirectionLabel","getDirectionPropertyValue","previousSlidesLength","slidesLength","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","slidePosition","prevSlideSize","virtualSize","setCSSProperty","gridEnabled","initSlides","shouldResetSlideSize","updateSlide","slideStyles","currentTransform","currentWebKitTransform","webkitTransform","elementOuterSize","updateWrapperSize","newSlidesGrid","slidesGridItem","groups","slidesAfter","allSlidesSize","slideSizeValue","maxSnap","allSlidesOffset","addToSnapGrid","addToSlidesGrid","backFaceHiddenClass","hasClassBackfaceClassAdded","getFilteredSlide","nextSlide","elementNextAll","elementPrevAll","emitSlidesClasses","minusOffset","swiperSlideOffset","offsetCenter","visibleSlidesIndexes","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","originalProgress","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","clicked","liveRegion","notify","notification","makeElementsArray","makeElFocusable","subEl","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","classesToSelector","hasPagination","hasClickablePagination","initNavEl","wrapperId","addElControls","handlePointerDown","handlePointerUp","handleFocus","sourceCapabilities","firesTouchEvents","repeat","randomChar","getRandomNumber","addElLive","updateNavigation","bulletEl","updatePagination","_classesToSelector","timeLeft","waitForTransition","stopOnLastSlide","reverseDirection","pauseOnMouseEnter","autoplayTimeLeft","wasPaused","pausedByTouch","touchStartTimeout","slideChanged","pausedByInteraction","autoplayDelayTotal","autoplayDelayCurrent","autoplayStartTime","getTime","onTransitionEnd","calcTimeLeft","delayForce","currentSlideDelay","getSlideDelay","activeSlideEl","proceed","onVisibilityChange","visibilityState","onPointerEnter","onPointerLeave","_s","LinearSpline","binarySearch","maxIndex","minIndex","guess","array","i1","i3","interpolate","x2","removeSpline","spline","inverse","by","controlElement","onControllerSwiper","_t","controlled","controlledTranslate","setControlledTranslate","getInterpolateFunction","isFinite","setControlledTransition","elementTransitionEnd","cardsEffect","slideShadows","rotate","perSlideRotate","perSlideOffset","effectInit","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","scaleString","createShadow","effectTarget","transformElements","getSlideTransformEl","effectVirtualTransitionEnd","perspective","overwriteParams","_createShadow","_effectInit","_effectTarget","_effectVirtualTransitionEnd","coverflowEffect","stretch","depth","swiperWidth","swiperHeight","center","centerOffset","offsetMultiplier","slideTransform","shadowBeforeEl","shadowAfterEl","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","prev","getTranslateValue","isCenteredSlides","margin","custom","translateString","rotateString","opacityString","shadow","shadowOpacity","allSlides","cubeEffect","shadowOffset","shadowScale","createSlideShadows","shadowBefore","shadowAfter","cubeShadowEl","wrapperRotate","slideAngle","tx","ty","tz","shadowAngle","scale1","scale2","zFactor","needPerspectiveFix","setProperty","recreateShadows","getEffectParams","fadeEffect","crossFade","slideOpacity","flipEffect","limitRotation","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","lastMoveEvent","pop","velocityEvent","distance","momentumDuration","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","needsLoopFix","moveDistance","currentSlideSize","slidesNumberEvenToRows","slidesPerRow","numFullColumns","getSpaceBetween","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","hashNavigation","watchState","slideWithHash","onHashChange","activeSlideHash","keepQuery","slugify","getPathValues","urlOverride","URL","pathArray","part","setHistory","currentState","scrollToSlide","setHistoryPopState","handle","kc","charCode","pageUpDown","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","altKey","ctrlKey","metaKey","inView","windowWidth","windowHeight","swiperOffset","elementOffset","swiperCoord","appendSlide","prependSlide","addSlide","removeSlide","removeAllSlides","_appendSlide","_prependSlide","_addSlide","_removeSlide","_removeAllSlides","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","appendElement","tempDOM","prependElement","slidesIndexes","indexToRemove","invert","forceToAxis","sensitivity","thresholdDelta","thresholdTime","noMousewheelClass","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","raw","targetElContainsTarget","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","sign","ignoreWheelEvents","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","releaseScroll","hideOnClick","disabledClass","lockClass","navigationDisabledClass","getEl","toggleEl","onPrevClick","onNextClick","createElementIfNotDefined","initButton","destroyButton","isHidden","_createElementIfNotDefined","pfx","bulletSize","bulletElement","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","dynamicBulletIndex","isPaginationDisabled","setSideBullets","onBulletClick","newSlideIndex","currentSlideIndex","firstIndex","midIndex","classesToRemove","suffix","flat","bullet","bulletIndex","firstDisplayedBullet","lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","offsetProp","subElIndex","fractionEl","totalEl","progressbarDirection","progressEl","paginationHTML","numberOfBullets","setTransform","currentOpacity","parallaxEl","parallaxDuration","dragStartPos","dragSize","trackSize","divider","dragTimeout","dragEl","newSize","newPos","getPointerPosition","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","passiveListener","eventMethod","swiperEl","dragClass","draggable","scrollbarDisabledClass","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","useOffset","currentThumbsIndex","newThumbsIndex","newThumbsSlide","getThumbsElementAndInit","thumbsElement","onThumbsSwiper","watchForThumbsToAppear","cssModeTimeout","renderSlide","renderExternal","renderExternalUpdate","addSlidesBefore","addSlidesAfter","force","previousFrom","previousTo","previousSlidesGrid","previousOffset","onRendered","slidesToRender","prependIndexes","appendIndexes","loopFrom","loopTo","domSlidesAssigned","numberOfNewSlides","newCache","cachedIndex","cachedEl","cachedElIndex","maxRatio","containerClass","zoomedSlideClass","fakeGestureTouched","fakeGestureMoved","currentScale","isScaling","gesture","slideWidth","slideHeight","imageWrapEl","image","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","y2","eventWithinSlide","onGestureStart","scaleStart","getScaleOrigin","onGestureChange","scaleMove","onGestureEnd","eventWithinZoomContainer","scaledWidth","scaledHeight","scaleRatio","zoomIn","touchX","touchY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","touchAction","forceZoomRatio","scrollX","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","in","out","checkProps","shadowClass","shadowContainer","requireUpdateOnVirtual","overwriteParamsResult","effectParams","transformEl","backfaceVisibility","transitionEndTarget","eventTriggered","getSlide","ua","major","minor","num","calcBrowser","overrides","deviceCached","platform","screenWidth","screenHeight","ipad","ipod","iphone","windows","macos","iPadScreens","touch","os","calcDevice","DocumentTouch","calcSupport","lazyEl","unlazy","amount","slideIndexLastInView","startPosition","cssModeFrameID","isOutOfBound","easeProgress","currentPosition","tag","nextEls","clientTop","includeMargins","prevEls","fireCallBack","noExtend","nextSource","isNode","keysArray","nextIndex","nextKey","curTransform","transformMatrix","curStyle","WebKitCSSMatrix","MozTransform","OTransform","MsTransform","msTransform","m41","m42","varName","varValue","currentStyle","_core","_virtual","_keyboard","_mousewheel","_navigation","_pagination","_scrollbar","_parallax","_zoom","_controller","_a11y","_history","_hashNavigation","_autoplay","_thumbs","_freeMode","_grid","_manipulation","_effectFade","_effectCube","_effectFlip","_effectCoverflow","_effectCreative","_effectCards","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","toStringTag","_component2","_component3","_component4","_component5","_component6","_component7","_component8","_fadeIn","_slideHorizontal","_component9","_sticky","_component10","_component11","_component12","_box","_component13","_caseSlider","_cookie","_filter","_hamburger","_hero","_letsTalk","_letsTalkRte","_lists","_logoList","_loadMore","_imgModal","_modal","_toggleVisibility","_sliders","_stacks","_statement","_highlight","_team","loadComponents","components","factory"],"sourceRoot":""}