@xwadex/fesd 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/20240328-video4-setting.png +0 -0
  2. package/CHANGELOG.md +41 -0
  3. package/README.md +25 -0
  4. package/dist/assets/fesd-bundle.css +9 -0
  5. package/dist/assets/fesd-bundle.js +9800 -0
  6. package/dist/assets/fesd-bundle.js.map +1 -0
  7. package/index.html +25 -0
  8. package/package.json +23 -0
  9. package/prepros.config +883 -0
  10. package/src/fesd/anchor4/anchor4.js +179 -0
  11. package/src/fesd/aost4/_aost4.sass +64 -0
  12. package/src/fesd/aost4/aost4.js +138 -0
  13. package/src/fesd/article4/article4.js +280 -0
  14. package/src/fesd/article4/article4.md +1 -0
  15. package/src/fesd/category-slider/_category-slider.sass +33 -0
  16. package/src/fesd/category-slider/category-slider.js +332 -0
  17. package/src/fesd/collapse4/collapse4.js +159 -0
  18. package/src/fesd/detect4/detect4.js +70 -0
  19. package/src/fesd/dropdown4/_dropdown4.sass +185 -0
  20. package/src/fesd/dropdown4/cityData.js +830 -0
  21. package/src/fesd/dropdown4/dropdown4.js +647 -0
  22. package/src/fesd/image-preview/_image-preview.sass +26 -0
  23. package/src/fesd/image-preview/image-preview.js +209 -0
  24. package/src/fesd/image-validate/_image-validate.sass +21 -0
  25. package/src/fesd/image-validate/image-validate.js +84 -0
  26. package/src/fesd/marquee4/_marquee4.sass +45 -0
  27. package/src/fesd/marquee4/marquee4.js +371 -0
  28. package/src/fesd/modal4/_modal4.sass +134 -0
  29. package/src/fesd/modal4/modal4.js +236 -0
  30. package/src/fesd/modal4/modernModal.js +182 -0
  31. package/src/fesd/multipurpose4/_multipurpose4.sass +282 -0
  32. package/src/fesd/multipurpose4/multipurpose4.js +562 -0
  33. package/src/fesd/ripple4/_ripple4.sass +44 -0
  34. package/src/fesd/ripple4/ripple4.js +138 -0
  35. package/src/fesd/share4/share4.js +191 -0
  36. package/src/fesd/shared/shared.js +59 -0
  37. package/src/fesd/shared/utils.js +98 -0
  38. package/src/fesd/tab4/_tab4.sass +25 -0
  39. package/src/fesd/tab4/tab4.js +473 -0
  40. package/src/fesd/video4/README.md +3 -0
  41. package/src/fesd/video4/_video4.sass +117 -0
  42. package/src/fesd/video4/video4.js +237 -0
  43. package/src/fesd/video4/videoPlayer.js +195 -0
  44. package/src/fesd.js +53 -0
  45. package/src/fesd.sass +29 -0
  46. package/src/fesdDB.js +282 -0
  47. package/vite.config.js +37 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fesd-bundle.js","sources":["../../src/fesdDB.js","../../src/fesd/detect4/detect4.js","../../src/fesd/shared/utils.js","../../src/fesd/shared/shared.js","../../src/fesd/anchor4/anchor4.js","../../node_modules/.pnpm/overlayscrollbars@2.4.4/node_modules/overlayscrollbars/overlayscrollbars.mjs","../../src/fesd/modal4/modernModal.js","../../src/fesd/modal4/modal4.js","../../src/fesd/aost4/aost4.js","../../node_modules/.pnpm/ssr-window@4.0.2/node_modules/ssr-window/ssr-window.esm.js","../../node_modules/.pnpm/dom7@4.0.6/node_modules/dom7/dom7.esm.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/shared/dom.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/shared/utils.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/shared/get-support.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/shared/get-device.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/shared/get-browser.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/modules/resize/resize.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/modules/observer/observer.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/events-emitter.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/update/updateSize.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/update/updateSlides.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/update/updateAutoHeight.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/update/updateSlidesOffset.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/update/updateSlidesProgress.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/update/updateProgress.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/update/updateSlidesClasses.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/update/updateActiveIndex.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/update/updateClickedSlide.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/update/index.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/translate/getTranslate.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/translate/setTranslate.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/translate/minTranslate.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/translate/maxTranslate.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/translate/translateTo.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/translate/index.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/transition/setTransition.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/transition/transitionEmit.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/transition/transitionStart.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/transition/transitionEnd.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/transition/index.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/slide/slideTo.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/slide/slideToLoop.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/slide/slideNext.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/slide/slidePrev.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/slide/slideReset.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/slide/slideToClosest.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/slide/slideToClickedSlide.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/slide/index.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/loop/loopCreate.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/loop/loopFix.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/loop/loopDestroy.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/loop/index.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/grab-cursor/setGrabCursor.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/grab-cursor/unsetGrabCursor.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/grab-cursor/index.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/events/onTouchStart.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/events/onTouchMove.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/events/onTouchEnd.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/events/onResize.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/events/onClick.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/events/onScroll.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/events/index.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/breakpoints/setBreakpoint.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/breakpoints/getBreakpoint.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/breakpoints/index.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/classes/addClasses.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/classes/removeClasses.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/classes/index.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/images/loadImage.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/images/preloadImages.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/images/index.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/check-overflow/index.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/defaults.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/moduleExtendParams.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/core/core.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/virtual/virtual.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/keyboard/keyboard.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/mousewheel/mousewheel.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/shared/create-element-if-not-defined.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/navigation/navigation.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/shared/classes-to-selector.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/pagination/pagination.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/scrollbar/scrollbar.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/parallax/parallax.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/zoom/zoom.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/lazy/lazy.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/controller/controller.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/a11y/a11y.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/history/history.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/hash-navigation/hash-navigation.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/autoplay/autoplay.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/thumbs/thumbs.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/free-mode/free-mode.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/grid/grid.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/manipulation/methods/appendSlide.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/manipulation/methods/prependSlide.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/manipulation/methods/addSlide.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/manipulation/methods/removeSlide.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/manipulation/methods/removeAllSlides.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/manipulation/manipulation.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/shared/effect-init.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/shared/effect-target.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/shared/effect-virtual-transition-end.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/effect-fade/effect-fade.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/effect-cube/effect-cube.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/shared/create-shadow.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/effect-flip/effect-flip.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/effect-coverflow/effect-coverflow.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/effect-creative/effect-creative.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/modules/effect-cards/effect-cards.js","../../node_modules/.pnpm/swiper@8.4.7/node_modules/swiper/swiper-bundle.esm.js","../../src/fesd/article4/article4.js","../../src/fesd/video4/videoPlayer.js","../../src/fesd/video4/video4.js","../../src/fesd/share4/share4.js","../../src/fesd/dropdown4/cityData.js","../../src/fesd/dropdown4/dropdown4.js","../../src/fesd/marquee4/marquee4.js","../../src/fesd/multipurpose4/multipurpose4.js","../../src/fesd/tab4/tab4.js","../../src/fesd/collapse4/collapse4.js","../../src/fesd/ripple4/ripple4.js","../../src/fesd/image-validate/image-validate.js","../../src/fesd/image-preview/image-preview.js"],"sourcesContent":["const FESD_DB = {\n library: {},\n // 紀錄使用的瀏覽器及裝置資訊\n is: {},\n // 各套件設定 (Beta.)\n video4: {\n SETTINGS: {\n videoId: null,\n videoType: null,\n videoAutoplay: 'off',\n videoMode: 'onBox',\n videoButton: '.playButton',\n videoCover: 'on',\n videoLayoutNo: 0,\n videoTarget: 'video-template',\n videoTargetRoute: 'https://cdn.wdd.idv.tw/fesd/video4_lightbox.html',\n videoVimeoHash: null,\n },\n ATTRS: {\n id: 'video-id',\n type: 'video-type',\n autoplay: 'video-autoplay',\n hash: 'vimeo-hash',\n },\n EVENTS: {\n init: null,\n afterInit: null,\n beforeDestroy: null,\n afterUpdate: null,\n },\n // video4 target 內放置結構 index 對應 videoLayoutNo\n LAYOUT: ['<div class=\"playButton\"></div><div class=\"overlay\"></div>'],\n // videoPlayer customElements 內結構\n TEMPLATE() {\n return `<div class=\"player-container\"><div class=\"player-wrapper\"></div></div>`;\n },\n },\n share4: {\n SETTINGS: {\n success: null,\n text: null,\n className: null,\n duration: 1500,\n },\n },\n modal4: {\n SETTINGS: {\n target: null,\n route: null,\n action: 'toggle',\n container: 'body',\n },\n ATTRS: {\n id: 'data-modal-id',\n close: 'data-modal-close',\n destroy: 'data-modal-destroy',\n },\n EVENTS: {\n init: null,\n success: null,\n error: null,\n complete: null,\n open: null,\n close: null,\n destroy: null,\n update: null,\n },\n TEMPLATE(type) {\n return `\n <div class=\"modal-scroller\">\n <div class=\"modal-wrapper\" ${type === 'destroy' ? 'data-modal-destroy' : 'data-modal-close'}>\n <div class=\"modal-content\" stop-propagation>\n </div>\n </div>\n `;\n },\n },\n marquee4: {\n SETTINGS: {\n direction: 'left', // 方向 - top || right || bottom || left\n behavior: 'normal', // 模式 - normal || alternate || endStop\n duration: 50000, // 持續時間(毫秒) - Number\n durationBreakpoints: {}, // 持續時間斷點 - Object\n autoplay: 300, // 自動撥放延遲時間(毫秒) - Number || false\n pauseOnMouseenter: false, // 滑鼠移入暫停 - Boolean\n continual: true, // 連續不間斷 - Boolean\n gap: 30, // 跑馬燈內容之間的距離 - Number\n },\n },\n dropdown4: {\n SETTINGS: {\n scrollbar: {\n 'scrollbar-track-color': 'transparent',\n 'scrollbar-thumb-color': 'rgba(0,0,0,.4)',\n 'scrollbar-thumb-hover-color': 'rgba(0,0,0,.55)',\n 'scrollbar-radius': '10px',\n },\n },\n TEMPLATE(filter, filterPlaceholder) {\n return `\n <div class=\"select-wrapper\">\n <div class=\"select-display\"></div>\n <i class=\"dropdown-icon\"></i>\n <div class=\"dropdown\">\n ${\n filter\n ? `<div class=\"filter-bar\">\n <input class=\"filter-input\" type=\"text\" placeholder=\"${filterPlaceholder}\" disabled>\n </div>`\n : ''\n }\n <div class=\"dropdown-scroller\">\n <ul class=\"dropdown-list\"></ul>\n </div>\n </div>\n </div>\n `;\n },\n },\n article4: {\n SETTINGS: {\n basic_rwd: 900,\n },\n },\n aost4: {\n SETTINGS: {\n scroller: window,\n class: 'aost-show',\n delay: 0,\n start: 80,\n end: 0,\n mirror: false,\n repeat: false, // false | true | 'up' | 'down'\n direction: 'vertical', // 'vertical' | 'horizontal'\n breakpoints: {\n 1160: 'data-aost-offset-1160',\n 1024: 'data-aost-offset-1024',\n 600: 'data-aost-offset-600',\n },\n },\n EVENTS: {\n init: null,\n enter: null,\n leave: null,\n },\n },\n anchor4: {\n SETTINGS: {\n target: null,\n container: null,\n spacer: null,\n gap: 0,\n speed: 800,\n delay: 0,\n direction: 'vertical',\n easing: 'easeInOutCirc',\n },\n EVENTS: {\n afterInit: null,\n beforeDestroy: null,\n afterUpdate: null,\n beforeScroll: null,\n afterScroll: null,\n },\n },\n multipurpose4: {\n SETTINGS: {\n type: 'drag',\n drag: {\n center: true,\n draggable: true,\n navigation: true,\n selected: false,\n },\n collapse: {\n selected: false,\n placeholder: '類別',\n },\n dropdown: {\n target: 'dropdown-el',\n placeholder: '',\n value: '',\n },\n breakpoint: {},\n },\n TEMPLATE: {\n drag() {\n return `<div class=\"drag-container\">\n <ul class=\"wrapper\">\n </ul>\n </div>`;\n },\n collapse(collapse) {\n return `<div class=\"drag-container\">\n <ul class=\"wrapper\">\n </ul>\n <div class=\"collapse-placeholder\">${collapse.placeholder}</div>\n </div>\n <div class=\"collapse-container\">\n <ul class=\"wrapper\">\n </ul>\n </div>`;\n },\n dropdown(dropdown) {\n return `<dropdown-el${dropdown.placeholder ? ` d4-placeholder=\"${dropdown.placeholder}\"` : ''}${dropdown.value ? ` d4-value=\"${dropdown.value}\"` : ''}></dropdown-el>`;\n },\n },\n },\n tab4: {\n SETTINGS: {\n // 樣式 normal / process\n type: 'normal',\n // 進場方式 fade / slide\n display: 'fade',\n // 預設頁面\n defaultPage: '',\n // 滑動扣除高度\n anchorGap: 0,\n tabGroup: 'true',\n // 動畫設定\n transition: {\n duration: 500,\n timing: 'ease',\n delay: 0,\n },\n // 步驟狀態綁定\n stepOutput: '.step-show',\n },\n },\n collapse4: {\n SETTINGS: {\n collapseClass: 'collapse',\n block: '[collapse-block]',\n target: '[collapse-target]',\n single: true,\n defaultOpen: false,\n targetStopPropagation: false,\n defaultActiveMark: 'collapse-active',\n transition: {\n property: 'height',\n duration: '400ms',\n function: 'ease',\n delay: '0s',\n },\n // expand\n breakpoints: {\n 320: {},\n },\n },\n // ATTRS: {\n // wrapper: 'collapse-wrapper',\n // block: 'collapse-block',\n // target: 'collapse-target',\n // },\n EVENTS: {\n init: null,\n afterInit: null,\n destroy: null,\n beforeDestroy: null,\n update: null,\n afterUpdate: null,\n },\n },\n ripple4: {\n SETTINGS: {\n // 是否要加 hover 效果?\n hover: true,\n // 使用 hover 時是否要啟用點擊 ripple 效果?\n click: false,\n // ripple's 的顏色\n color: '#fff',\n // ripple's 透明度\n opacity: '1',\n // ripple 毫秒\n duration: 600,\n // hover 毫秒 ?\n speed: 600,\n },\n },\n};\n\nexport default FESD_DB;\n","const Detect4 = {};\nDetect4.init = function () {\n const userAgent = navigator.userAgent;\n\n // isBrowser4\n fesdDB.library.browser = {\n // Firefox 1.0+\n isFirefox: typeof InstallTrigger !== 'undefined',\n // Opera 8.0+\n isOpera: (!!window.opr && !!opr.addons) || !!window.opera || userAgent.indexOf(' OPR/') >= 0,\n // Internet Explorer 6-11\n isIE: /*@cc_on!@*/ false || !!document.documentMode,\n // Edge 20+\n isEdge: !(false || !!document.documentMode) && !!window.StyleMedia,\n // Edge (based on chromium) detection\n isEdgeChromium: /\\sedg\\//i.test(userAgent) || /edg([ea]|ios)/i.test(userAgent),\n // Safari 3.0+ \"[object HTMLElementConstructor]\"\n isSafari: !/chrome|crios|crmo/i.test(userAgent) && /safari/i.test(userAgent),\n // Chrome 1 - 79\n isChrome: (!!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime)) || /chrome|crios|crmo/i.test(userAgent),\n };\n\n // isMobile4\n fesdDB.library.mobile = {\n // Android\n isAndroid: userAgent.indexOf('Android') > -1 || userAgent.indexOf('Adr') > -1,\n // iOS | ipad\n isiOS: userAgent.indexOf('Mac') > -1 && 'ontouchend' in document,\n };\n\n // isOs4\n fesdDB.library.os = {\n // window\n isWindows: userAgent.indexOf('Win') > -1,\n // macos\n isMacOS: userAgent.indexOf('Mac') > -1,\n // UNIX\n isUNIX: userAgent.indexOf('X11') > -1,\n // Linux\n isLinux: userAgent.indexOf('Linux') > -1,\n };\n\n // **eric - 以下待優化\n const isBrowser4 = () => {\n const { browser } = fesdDB.library;\n return Object.keys(browser).find(key => {\n if (browser[key]) return browser[key];\n });\n };\n\n const isMobile4 = () => {\n const { mobile } = fesdDB.library;\n return Object.keys(mobile).some(key => {\n if (mobile[key]) return mobile[key];\n });\n };\n\n const isOs4 = () => {\n const { os } = fesdDB.library;\n return Object.keys(os).find(key => {\n if (os[key]) return os[key];\n });\n };\n\n fesdDB.is.isBrowser4 = isBrowser4();\n fesdDB.is.isMobile4 = isMobile4();\n fesdDB.is.isOs4 = isOs4();\n};\n\nexport default Detect4;\n","\n// insertAdjacentHTML 語意化\nexport const insert = {\n before: 'beforebegin',\n after: 'afterend',\n append: 'beforeend',\n prepend: 'afterbegin'\n}\n\n// check value is string and not empty\nexport const isString = (value) => {\n return typeof value === 'string' && value !== '';\n};\n\n// check value is number and not NaN\nexport const isNumber = (value) => {\n return typeof value === 'number' && !isNaN(value);\n};\n\n// check is HTML element\nexport const isElement = (value) => {\n return value instanceof HTMLElement;\n};\n\n// check is Node List\nexport const isNodeList = (value) => {\n return value instanceof NodeList;\n};\n\n// check element is exist\nexport const isElementExist = (value) => {\n return getElement(value) !== null;\n};\n\n// check value is a function\nexport const isFunction = (value) => {\n return typeof value === 'function';\n};\n\n// if value is an element then return value, if not then query value\nexport const getElement = (value) => {\n return isElement(value) ? value : document.querySelector(value);\n};\n\n// if value is an element then return value, if not then query value\nexport const getAllElements = (value) => {\n return isNodeList(value) ? value : document.querySelectorAll(value);\n};\n\n// create a unique id\nexport const createUid = () => {\n return Math.random().toString(36).substr(2, 9);\n};\n\n// parse string to HTML element\nexport const toHTMLElement = (str) => {\n const dom = document.createElement('div');\n dom.innerHTML = str;\n return dom.childNodes;\n};\n\n// parse json to object\nexport const jsonParse = (json) => {\n try {\n JSON.parse(json);\n } catch (e) {\n return json;\n }\n return JSON.parse(json);\n};\n\n// get element transform X\nexport const getTransformX = (target) => {\n const transform = getComputedStyle(target).transform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) return parseFloat(mat[1].split(', ')[12]);\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[4]) : 0;\n};\n\n// get element transform Y\nexport const getTransformY = (target) => {\n const transform = getComputedStyle(target).transform;\n let mat = transform.match(/^matrix3d\\((.+)\\)$/);\n if (mat) return parseFloat(mat[1].split(', ')[13]);\n mat = transform.match(/^matrix\\((.+)\\)$/);\n return mat ? parseFloat(mat[1].split(', ')[5]) : 0;\n};\n\n// warn\nexport const warn = (target, msg) => {\n console.warn(`[${target} warn]: ${msg}`);\n};\n\n// error\nexport const error = (target, msg) => {\n console.error(`[${target} error]: ${msg}`);\n};\n","import {\n isFunction\n} from './utils'\n\nexport default {\n on(events, handler) {\n if (!isFunction(handler)) return this;\n\n const { __events__ } = this\n\n events.split(' ').forEach(evt => {\n if (!__events__[evt]) __events__[evt] = []\n __events__[evt].push(handler)\n })\n\n return this\n },\n\n off(events, handler) {\n const { __events__ } = this\n\n events.split(' ').forEach(evt => {\n if (typeof handler === 'undefined') __events__[evt] = []\n else if (__events__[evt]) {\n __events__[evt].forEach((evtHandler, index) => {\n if (evtHandler === handler) __events__[evt].splice(index, 1)\n })\n }\n })\n\n return this\n },\n\n once(events, handler) {\n if (!isFunction(handler)) return this;\n\n const onceHandler = (...args) => {\n this.off(events, onceHandler)\n handler.apply(this, args)\n }\n\n return this.on(events, onceHandler)\n },\n\n emit(...args) {\n const { __events__ } = this\n\n const event = args[0]\n const data = args.slice(1, args.length)\n\n if (!__events__[event]) return this\n\n __events__[event].forEach(handler => {\n if (isFunction(handler)) handler.apply(this, data)\n })\n\n return this\n }\n}","import SHARED from './../shared/shared';\nimport { isString, isElementExist, isFunction, getElement, getAllElements } from './../shared/utils';\n\nconst ease = {\n easeInOutCirc(t, b, c, d) {\n if ((t /= d / 2) < 1) return (-c / 2) * (Math.sqrt(1 - t * t) - 1) + b;\n return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;\n },\n easeInQuart(t, b, c, d) {\n return c * (t /= d) * t * t * t + b;\n },\n easeOutQuart(t, b, c, d) {\n return -c * ((t = t / d - 1) * t * t * t - 1) + b;\n },\n};\n\n// scroll handler\nconst scrollTo = (options, instance) => {\n const { target, container, spacer, speed, gap, easing, direction } = options;\n\n const isHorizontal = direction === 'horizontal';\n const scrollDirection = isHorizontal ? 'scrollLeft' : 'scrollTop';\n const rectPosition = isHorizontal ? 'left' : 'top';\n const rectSpace = isHorizontal ? 'width' : 'height';\n\n const containerEle = isElementExist(container) ? getElement(container) : document.scrollingElement;\n const start = containerEle[scrollDirection];\n const targetPoint = isElementExist(target) ? getElement(target).getBoundingClientRect()[rectPosition] : 0 - start;\n const spacerGap = isElementExist(spacer) ? getElement(spacer).getBoundingClientRect()[rectSpace] : 0;\n const change = targetPoint - gap - spacerGap;\n const increment = 15;\n let currentTime = 0;\n\n if (change === 0) return;\n\n const emitEvent = eventName => {\n const targetEle = getElement(target);\n if (instance) instance.emit(eventName, targetEle);\n if (!instance && options.on) {\n if (isFunction(options.on[eventName])) options.on[eventName](targetEle);\n }\n };\n\n emitEvent('beforeScroll');\n\n const animateScroll = () => {\n currentTime += increment;\n const val = ease[easing](currentTime, start, change, speed);\n containerEle[scrollDirection] = val;\n if (currentTime < speed) requestAnimationFrame(animateScroll);\n if (currentTime >= speed) emitEvent('afterScroll');\n };\n\n requestAnimationFrame(animateScroll);\n};\n\n// class Anchor4\nclass Anchor4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n if (!isString(el) || !isElementExist(el)) return;\n\n const { SETTINGS, EVENTS } = fesdDB.anchor4;\n\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.anchor = {};\n el.anchor.instance = this;\n el.anchor.eventHandler = this.#trigger;\n el.anchor.defaultOptions = options;\n el.addEventListener('click', el.anchor.eventHandler);\n });\n\n this.emit('afterInit');\n }\n\n #trigger() {\n /** the keyword `this` in this method is pointed to the click target */\n const { defaultOptions, eventHandler, instance } = this.anchor;\n\n const options = {\n target: this.getAttribute('data-anchor-target') || defaultOptions.target,\n container: this.getAttribute('data-anchor-container') || defaultOptions.container,\n spacer: this.getAttribute('data-anchor-spacer') || defaultOptions.spacer,\n gap: parseInt(this.getAttribute('data-anchor-gap') || defaultOptions.gap),\n speed: parseInt(this.getAttribute('data-anchor-speed')) || defaultOptions.speed,\n delay: parseInt(this.getAttribute('data-anchor-delay')) || defaultOptions.delay,\n easing: this.getAttribute('data-anchor-easing') || defaultOptions.easing,\n direction: this.getAttribute('data-anchor-direction') || defaultOptions.direction,\n };\n\n // prevent multiple click\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, options.speed);\n\n // do scroll\n setTimeout(() => {\n scrollTo(options, instance);\n }, options.delay);\n }\n\n destroy() {\n const { elements } = this;\n\n this.emit('beforeDestroy');\n\n elements.forEach(el => {\n if (!el.anchor) return;\n\n el.removeEventListener('click', el.anchor.eventHandler);\n delete el.anchor;\n });\n\n return this;\n }\n\n update() {\n this.destroy().#create();\n\n this.emit('afterUpdate');\n\n return this;\n }\n\n static run(options) {\n const { SETTINGS } = fesdDB.anchor4;\n const newOptions = Object.assign({}, SETTINGS, options);\n\n setTimeout(() => {\n scrollTo(newOptions);\n }, newOptions.delay);\n }\n\n static url(options) {\n const { SETTINGS } = fesdDB.anchor4;\n\n const targetStr = window.location.search || window.location.hash;\n const targetName = targetStr.split('?').pop();\n const target = document.querySelector(`[data-anchor-id=\"${targetName}\"]`);\n\n if (!target) return;\n\n const newOptions = Object.assign({}, SETTINGS, options, { target });\n\n setTimeout(() => {\n scrollTo(newOptions);\n }, newOptions.delay);\n }\n}\n\nObject.assign(Anchor4.prototype, SHARED);\n\nexport default Anchor4;\n","/*!\n * OverlayScrollbars\n * Version: 2.4.4\n *\n * Copyright (c) Rene Haas | KingSora.\n * https://github.com/KingSora\n *\n * Released under the MIT license.\n */\n\nconst createCache = (t, n) => {\n const {o: o, u: s, _: e} = t;\n let c = o;\n let r;\n const cacheUpdateContextual = (t, n) => {\n const o = c;\n const l = t;\n const i = n || (s ? !s(o, l) : o !== l);\n if (i || e) {\n c = l;\n r = o;\n }\n return [ c, i, r ];\n };\n const cacheUpdateIsolated = t => cacheUpdateContextual(n(c, r), t);\n const getCurrentCache = t => [ c, !!t, r ];\n return [ n ? cacheUpdateIsolated : cacheUpdateContextual, getCurrentCache ];\n};\n\nconst t = typeof window !== \"undefined\";\n\nconst n = t && Node.ELEMENT_NODE;\n\nconst {toString: o, hasOwnProperty: s} = Object.prototype;\n\nconst e = /^\\[object (.+)\\]$/;\n\nconst isUndefined = t => t === void 0;\n\nconst isNull = t => t === null;\n\nconst type = t => isUndefined(t) || isNull(t) ? `${t}` : o.call(t).replace(e, \"$1\").toLowerCase();\n\nconst isNumber = t => typeof t === \"number\";\n\nconst isString = t => typeof t === \"string\";\n\nconst isBoolean = t => typeof t === \"boolean\";\n\nconst isFunction = t => typeof t === \"function\";\n\nconst isArray = t => Array.isArray(t);\n\nconst isObject = t => typeof t === \"object\" && !isArray(t) && !isNull(t);\n\nconst isArrayLike = t => {\n const n = !!t && t.length;\n const o = isNumber(n) && n > -1 && n % 1 == 0;\n return isArray(t) || !isFunction(t) && o ? n > 0 && isObject(t) ? n - 1 in t : true : false;\n};\n\nconst isPlainObject = t => {\n if (!t || !isObject(t) || type(t) !== \"object\") {\n return false;\n }\n let n;\n const o = \"constructor\";\n const e = t[o];\n const c = e && e.prototype;\n const r = s.call(t, o);\n const l = c && s.call(c, \"isPrototypeOf\");\n if (e && !r && !l) {\n return false;\n }\n for (n in t) {}\n return isUndefined(n) || s.call(t, n);\n};\n\nconst isHTMLElement = t => {\n const o = HTMLElement;\n return t ? o ? t instanceof o : t.nodeType === n : false;\n};\n\nconst isElement = t => {\n const o = Element;\n return t ? o ? t instanceof o : t.nodeType === n : false;\n};\n\nfunction each(t, n) {\n if (isArrayLike(t)) {\n for (let o = 0; o < t.length; o++) {\n if (n(t[o], o, t) === false) {\n break;\n }\n }\n } else if (t) {\n each(Object.keys(t), (o => n(t[o], o, t)));\n }\n return t;\n}\n\nconst inArray = (t, n) => t.indexOf(n) >= 0;\n\nconst concat = (t, n) => t.concat(n);\n\nconst push = (t, n, o) => {\n !o && !isString(n) && isArrayLike(n) ? Array.prototype.push.apply(t, n) : t.push(n);\n return t;\n};\n\nconst from = t => {\n const n = Array.from;\n const o = [];\n if (n && t) {\n return n(t);\n }\n if (t instanceof Set) {\n t.forEach((t => {\n push(o, t);\n }));\n } else {\n each(t, (t => {\n push(o, t);\n }));\n }\n return o;\n};\n\nconst isEmptyArray = t => !!t && !t.length;\n\nconst deduplicateArray = t => from(new Set(t));\n\nconst runEachAndClear = (t, n, o) => {\n const runFn = t => t && t.apply(void 0, n || []);\n each(t, runFn);\n !o && (t.length = 0);\n};\n\nconst hasOwnProperty = (t, n) => Object.prototype.hasOwnProperty.call(t, n);\n\nconst keys = t => t ? Object.keys(t) : [];\n\nconst assignDeep = (t, n, o, s, e, c, r) => {\n const l = [ n, o, s, e, c, r ];\n if ((typeof t !== \"object\" || isNull(t)) && !isFunction(t)) {\n t = {};\n }\n each(l, (n => {\n each(n, ((o, s) => {\n const e = n[s];\n if (t === e) {\n return true;\n }\n const c = isArray(e);\n if (e && isPlainObject(e)) {\n const n = t[s];\n let o = n;\n if (c && !isArray(n)) {\n o = [];\n } else if (!c && !isPlainObject(n)) {\n o = {};\n }\n t[s] = assignDeep(o, e);\n } else {\n t[s] = c ? e.slice() : e;\n }\n }));\n }));\n return t;\n};\n\nconst removeUndefinedProperties = (t, n) => each(assignDeep({}, t), ((t, o, s) => {\n if (t === void 0) {\n delete s[o];\n } else if (n && t && isPlainObject(t)) {\n s[o] = removeUndefinedProperties(t, n);\n }\n}));\n\nconst isEmptyObject = t => {\n for (const n in t) {\n return false;\n }\n return true;\n};\n\nconst attr = (t, n, o) => {\n if (isUndefined(o)) {\n return t ? t.getAttribute(n) : null;\n }\n t && t.setAttribute(n, o);\n};\n\nconst getValueSet = (t, n) => new Set((attr(t, n) || \"\").split(\" \"));\n\nconst removeAttr = (t, n) => {\n t && t.removeAttribute(n);\n};\n\nconst attrClass = (t, n, o, s) => {\n if (o) {\n const e = getValueSet(t, n);\n e[s ? \"add\" : \"delete\"](o);\n const c = from(e).join(\" \").trim();\n attr(t, n, c);\n }\n};\n\nconst hasAttrClass = (t, n, o) => getValueSet(t, n).has(o);\n\nconst c = t && Element.prototype;\n\nconst find = (t, n) => {\n const o = [];\n const s = n ? isElement(n) && n : document;\n return s ? push(o, s.querySelectorAll(t)) : o;\n};\n\nconst findFirst = (t, n) => {\n const o = n ? isElement(n) && n : document;\n return o ? o.querySelector(t) : null;\n};\n\nconst is = (t, n) => {\n if (isElement(t)) {\n const o = c.matches || c.msMatchesSelector;\n return o.call(t, n);\n }\n return false;\n};\n\nconst contents = t => t ? from(t.childNodes) : [];\n\nconst parent = t => t && t.parentElement;\n\nconst closest = (t, n) => {\n if (isElement(t)) {\n const o = c.closest;\n if (o) {\n return o.call(t, n);\n }\n do {\n if (is(t, n)) {\n return t;\n }\n t = parent(t);\n } while (t);\n }\n};\n\nconst liesBetween = (t, n, o) => {\n const s = closest(t, n);\n const e = t && findFirst(o, s);\n const c = closest(e, n) === s;\n return s && e ? s === t || e === t || c && closest(closest(t, o), n) !== s : false;\n};\n\nconst noop = () => {};\n\nconst removeElements = t => {\n if (isArrayLike(t)) {\n each(from(t), (t => removeElements(t)));\n } else if (t) {\n const n = parent(t);\n n && n.removeChild(t);\n }\n};\n\nconst before = (t, n, o) => {\n if (o && t) {\n let s = n;\n let e;\n if (isArrayLike(o)) {\n e = document.createDocumentFragment();\n each(o, (t => {\n if (t === s) {\n s = t.previousSibling;\n }\n e.appendChild(t);\n }));\n } else {\n e = o;\n }\n if (n) {\n if (!s) {\n s = t.firstChild;\n } else if (s !== n) {\n s = s.nextSibling;\n }\n }\n t.insertBefore(e, s || null);\n return () => removeElements(o);\n }\n return noop;\n};\n\nconst appendChildren = (t, n) => before(t, null, n);\n\nconst insertBefore = (t, n) => before(parent(t), t, n);\n\nconst insertAfter = (t, n) => before(parent(t), t && t.nextSibling, n);\n\nconst createDiv = t => {\n const n = document.createElement(\"div\");\n attr(n, \"class\", t);\n return n;\n};\n\nconst createDOM = t => {\n const n = createDiv();\n n.innerHTML = t.trim();\n return each(contents(n), (t => removeElements(t)));\n};\n\nconst r = t ? window : {};\n\nconst l = Math.max;\n\nconst i = Math.min;\n\nconst a = Math.round;\n\nconst u = Math.abs;\n\nconst f = r.cancelAnimationFrame;\n\nconst _ = r.requestAnimationFrame;\n\nconst d = r.setTimeout;\n\nconst v = r.clearTimeout;\n\nconst firstLetterToUpper = t => t.charAt(0).toUpperCase() + t.slice(1);\n\nconst getDummyStyle = () => createDiv().style;\n\nconst h = [ \"-webkit-\", \"-moz-\", \"-o-\", \"-ms-\" ];\n\nconst p = [ \"WebKit\", \"Moz\", \"O\", \"MS\", \"webkit\", \"moz\", \"o\", \"ms\" ];\n\nconst g = {};\n\nconst b = {};\n\nconst cssProperty = t => {\n let n = b[t];\n if (hasOwnProperty(b, t)) {\n return n;\n }\n const o = firstLetterToUpper(t);\n const s = getDummyStyle();\n each(h, (e => {\n const c = e.replace(/-/g, \"\");\n const r = [ t, e + t, c + o, firstLetterToUpper(c) + o ];\n return !(n = r.find((t => s[t] !== void 0)));\n }));\n return b[t] = n || \"\";\n};\n\nconst jsAPI = t => {\n let n = g[t] || r[t];\n if (hasOwnProperty(g, t)) {\n return n;\n }\n each(p, (o => {\n n = n || r[o + firstLetterToUpper(t)];\n return !n;\n }));\n g[t] = n;\n return n;\n};\n\nconst w = jsAPI(\"MutationObserver\");\n\nconst y = jsAPI(\"IntersectionObserver\");\n\nconst m = jsAPI(\"ResizeObserver\");\n\nconst S = jsAPI(\"ScrollTimeline\");\n\nconst bind = (t, ...n) => t.bind(0, ...n);\n\nconst selfClearTimeout = t => {\n let n;\n const o = t ? d : _;\n const s = t ? v : f;\n return [ e => {\n s(n);\n n = o(e, isFunction(t) ? t() : t);\n }, () => s(n) ];\n};\n\nconst debounce = (t, n) => {\n let o;\n let s;\n let e;\n let c = noop;\n const {v: r, p: l, g: i} = n || {};\n const a = function invokeFunctionToDebounce(n) {\n c();\n v(o);\n o = s = void 0;\n c = noop;\n t.apply(this, n);\n };\n const mergeParms = t => i && s ? i(s, t) : t;\n const flush = () => {\n if (c !== noop) {\n a(mergeParms(e) || e);\n }\n };\n const u = function debouncedFn() {\n const t = from(arguments);\n const n = isFunction(r) ? r() : r;\n const i = isNumber(n) && n >= 0;\n if (i) {\n const r = isFunction(l) ? l() : l;\n const i = isNumber(r) && r >= 0;\n const u = n > 0 ? d : _;\n const h = n > 0 ? v : f;\n const p = mergeParms(t);\n const g = p || t;\n const b = a.bind(0, g);\n c();\n const w = u(b, n);\n c = () => h(w);\n if (i && !o) {\n o = d(flush, r);\n }\n s = e = g;\n } else {\n a(t);\n }\n };\n u.m = flush;\n return u;\n};\n\nconst $ = /[^\\x20\\t\\r\\n\\f]+/g;\n\nconst classListAction = (t, n, o) => {\n const s = t && t.classList;\n let e;\n let c = 0;\n let r = false;\n if (s && n && isString(n)) {\n const t = n.match($) || [];\n r = t.length > 0;\n while (e = t[c++]) {\n r = !!o(s, e) && r;\n }\n }\n return r;\n};\n\nconst removeClass = (t, n) => {\n classListAction(t, n, ((t, n) => t.remove(n)));\n};\n\nconst addClass = (t, n) => {\n classListAction(t, n, ((t, n) => t.add(n)));\n return bind(removeClass, t, n);\n};\n\nconst x = {\n opacity: 1,\n zIndex: 1\n};\n\nconst parseToZeroOrNumber = (t, n) => {\n const o = t || \"\";\n const s = n ? parseFloat(o) : parseInt(o, 10);\n return s === s ? s : 0;\n};\n\nconst adaptCSSVal = (t, n) => !x[t] && isNumber(n) ? `${n}px` : n;\n\nconst getCSSVal = (t, n, o) => String((n != null ? n[o] || n.getPropertyValue(o) : t.style[o]) || \"\");\n\nconst setCSSVal = (t, n, o) => {\n try {\n const {style: s} = t;\n if (!isUndefined(s[n])) {\n s[n] = adaptCSSVal(n, o);\n } else {\n s.setProperty(n, o);\n }\n } catch (s) {}\n};\n\nfunction style(t, n) {\n const o = isString(n);\n const s = isArray(n) || o;\n if (s) {\n let s = o ? \"\" : {};\n if (t) {\n const e = r.getComputedStyle(t, null);\n s = o ? getCSSVal(t, e, n) : n.reduce(((n, o) => {\n n[o] = getCSSVal(t, e, o);\n return n;\n }), s);\n }\n return s;\n }\n t && each(n, ((o, s) => setCSSVal(t, s, n[s])));\n}\n\nconst getDirectionIsRTL = t => style(t, \"direction\") === \"rtl\";\n\nconst topRightBottomLeft = (t, n, o) => {\n const s = n ? `${n}-` : \"\";\n const e = o ? `-${o}` : \"\";\n const c = `${s}top${e}`;\n const r = `${s}right${e}`;\n const l = `${s}bottom${e}`;\n const i = `${s}left${e}`;\n const a = style(t, [ c, r, l, i ]);\n return {\n t: parseToZeroOrNumber(a[c], true),\n r: parseToZeroOrNumber(a[r], true),\n b: parseToZeroOrNumber(a[l], true),\n l: parseToZeroOrNumber(a[i], true)\n };\n};\n\nconst getTrasformTranslateValue = (t, n) => `translate${isObject(t) ? `(${t.x},${t.y})` : `${n ? \"X\" : \"Y\"}(${t})`}`;\n\nconst O = \"paddingTop\";\n\nconst C = \"paddingRight\";\n\nconst H = \"paddingLeft\";\n\nconst z = \"paddingBottom\";\n\nconst I = \"marginLeft\";\n\nconst A = \"marginRight\";\n\nconst E = \"marginBottom\";\n\nconst T = \"overflowX\";\n\nconst k = \"overflowY\";\n\nconst D = \"width\";\n\nconst M = \"height\";\n\nconst R = \"hidden\";\n\nconst L = {\n w: 0,\n h: 0\n};\n\nconst getElmWidthHeightProperty = (t, n) => n ? {\n w: n[`${t}Width`],\n h: n[`${t}Height`]\n} : L;\n\nconst windowSize = t => getElmWidthHeightProperty(\"inner\", t || r);\n\nconst P = bind(getElmWidthHeightProperty, \"offset\");\n\nconst V = bind(getElmWidthHeightProperty, \"client\");\n\nconst U = bind(getElmWidthHeightProperty, \"scroll\");\n\nconst fractionalSize = t => {\n const n = parseFloat(style(t, D)) || 0;\n const o = parseFloat(style(t, M)) || 0;\n return {\n w: n - a(n),\n h: o - a(o)\n };\n};\n\nconst getBoundingClientRect = t => t.getBoundingClientRect();\n\nconst domRectHasDimensions = t => !!(t && (t[M] || t[D]));\n\nconst domRectAppeared = (t, n) => {\n const o = domRectHasDimensions(t);\n const s = domRectHasDimensions(n);\n return !s && o;\n};\n\nconst animationCurrentTime = () => performance.now();\n\nconst animateNumber = (t, n, o, s, e) => {\n let c = 0;\n const r = animationCurrentTime();\n const i = l(0, o);\n const frame = o => {\n const a = animationCurrentTime();\n const u = a - r;\n const f = u >= i;\n const d = o ? 1 : 1 - (l(0, r + i - a) / i || 0);\n const v = (n - t) * (isFunction(e) ? e(d, d * i, 0, 1, i) : d) + t;\n const h = f || d === 1;\n s && s(v, d, h);\n c = h ? 0 : _((() => frame()));\n };\n frame();\n return t => {\n f(c);\n t && frame(t);\n };\n};\n\nconst equal = (t, n, o, s) => {\n if (t && n) {\n let e = true;\n each(o, (o => {\n const c = s ? s(t[o]) : t[o];\n const r = s ? s(n[o]) : n[o];\n if (c !== r) {\n e = false;\n }\n }));\n return e;\n }\n return false;\n};\n\nconst equalWH = (t, n) => equal(t, n, [ \"w\", \"h\" ]);\n\nconst equalXY = (t, n) => equal(t, n, [ \"x\", \"y\" ]);\n\nconst equalTRBL = (t, n) => equal(t, n, [ \"t\", \"r\", \"b\", \"l\" ]);\n\nconst equalBCRWH = (t, n, o) => equal(t, n, [ D, M ], o && (t => a(t)));\n\nlet B;\n\nconst j = \"passive\";\n\nconst supportPassiveEvents = () => {\n if (isUndefined(B)) {\n B = false;\n try {\n r.addEventListener(j, noop, Object.defineProperty({}, j, {\n get() {\n B = true;\n }\n }));\n } catch (t) {}\n }\n return B;\n};\n\nconst splitEventNames = t => t.split(\" \");\n\nconst removeEventListener = (t, n, o, s) => {\n each(splitEventNames(n), (n => {\n t.removeEventListener(n, o, s);\n }));\n};\n\nconst addEventListener = (t, n, o, s) => {\n var e;\n const c = supportPassiveEvents();\n const r = (e = c && s && s.S) != null ? e : c;\n const l = s && s.$ || false;\n const i = s && s.O || false;\n const a = c ? {\n passive: r,\n capture: l\n } : l;\n return bind(runEachAndClear, splitEventNames(n).map((n => {\n const s = i ? e => {\n removeEventListener(t, n, s, l);\n o(e);\n } : o;\n t.addEventListener(n, s, a);\n return bind(removeEventListener, t, n, s, l);\n })));\n};\n\nconst stopPropagation = t => t.stopPropagation();\n\nconst preventDefault = t => t.preventDefault();\n\nconst N = {\n x: 0,\n y: 0\n};\n\nconst absoluteCoordinates = t => {\n const n = t && getBoundingClientRect(t);\n return n ? {\n x: n.left + r.pageYOffset,\n y: n.top + r.pageXOffset\n } : N;\n};\n\nconst getRTLCompatibleScrollPosition = (t, n, o) => o ? o.n ? -t : o.i ? n - t : t : t;\n\nconst getRTLCompatibleScrollBounds = (t, n) => [ n ? n.i ? t : 0 : 0, getRTLCompatibleScrollPosition(t, t, n) ];\n\nconst scrollElementTo = (t, n) => {\n const {x: o, y: s} = isNumber(n) ? {\n x: n,\n y: n\n } : n || {};\n isNumber(o) && (t.scrollLeft = o);\n isNumber(s) && (t.scrollTop = s);\n};\n\nconst getElmentScroll = t => ({\n x: t.scrollLeft,\n y: t.scrollTop\n});\n\nconst manageListener = (t, n) => {\n each(isArray(n) ? n : [ n ], t);\n};\n\nconst createEventListenerHub = t => {\n const n = new Map;\n const removeEvent = (t, o) => {\n if (t) {\n const s = n.get(t);\n manageListener((t => {\n if (s) {\n s[t ? \"delete\" : \"clear\"](t);\n }\n }), o);\n } else {\n n.forEach((t => {\n t.clear();\n }));\n n.clear();\n }\n };\n const addEvent = (t, o) => {\n if (isString(t)) {\n const s = n.get(t) || new Set;\n n.set(t, s);\n manageListener((t => {\n isFunction(t) && s.add(t);\n }), o);\n return bind(removeEvent, t, o);\n }\n if (isBoolean(o) && o) {\n removeEvent();\n }\n const s = keys(t);\n const e = [];\n each(s, (n => {\n const o = t[n];\n o && push(e, addEvent(n, o));\n }));\n return bind(runEachAndClear, e);\n };\n const triggerEvent = (t, o) => {\n each(from(n.get(t)), (t => {\n if (o && !isEmptyArray(o)) {\n t.apply(0, o);\n } else {\n t();\n }\n }));\n };\n addEvent(t || {});\n return [ addEvent, removeEvent, triggerEvent ];\n};\n\nconst opsStringify = t => JSON.stringify(t, ((t, n) => {\n if (isFunction(n)) {\n throw 0;\n }\n return n;\n}));\n\nconst getPropByPath = (t, n) => t ? `${n}`.split(\".\").reduce(((t, n) => t && hasOwnProperty(t, n) ? t[n] : void 0), t) : void 0;\n\nconst G = {\n paddingAbsolute: false,\n showNativeOverlaidScrollbars: false,\n update: {\n elementEvents: [ [ \"img\", \"load\" ] ],\n debounce: [ 0, 33 ],\n attributes: null,\n ignoreMutation: null\n },\n overflow: {\n x: \"scroll\",\n y: \"scroll\"\n },\n scrollbars: {\n theme: \"os-theme-dark\",\n visibility: \"auto\",\n autoHide: \"never\",\n autoHideDelay: 1300,\n autoHideSuspend: false,\n dragScroll: true,\n clickScroll: false,\n pointers: [ \"mouse\", \"touch\", \"pen\" ]\n }\n};\n\nconst getOptionsDiff = (t, n) => {\n const o = {};\n const s = concat(keys(n), keys(t));\n each(s, (s => {\n const e = t[s];\n const c = n[s];\n if (isObject(e) && isObject(c)) {\n assignDeep(o[s] = {}, getOptionsDiff(e, c));\n if (isEmptyObject(o[s])) {\n delete o[s];\n }\n } else if (hasOwnProperty(n, s) && c !== e) {\n let t = true;\n if (isArray(e) || isArray(c)) {\n try {\n if (opsStringify(e) === opsStringify(c)) {\n t = false;\n }\n } catch (r) {}\n }\n if (t) {\n o[s] = c;\n }\n }\n }));\n return o;\n};\n\nconst createOptionCheck = (t, n, o) => s => [ getPropByPath(t, s), o || getPropByPath(n, s) !== void 0 ];\n\nconst q = `data-overlayscrollbars`;\n\nconst F = \"os-environment\";\n\nconst W = `${F}-flexbox-glue`;\n\nconst X = `${W}-max`;\n\nconst Y = `os-scrollbar-hidden`;\n\nconst J = `${q}-initialize`;\n\nconst K = q;\n\nconst Z = `${K}-overflow-x`;\n\nconst Q = `${K}-overflow-y`;\n\nconst tt = \"overflowVisible\";\n\nconst nt = \"scrollbarHidden\";\n\nconst ot = \"scrollbarPressed\";\n\nconst st = \"updating\";\n\nconst et = `${q}-viewport`;\n\nconst ct = \"arrange\";\n\nconst rt = \"scrollbarHidden\";\n\nconst lt = tt;\n\nconst it = `${q}-padding`;\n\nconst at = lt;\n\nconst ut = `${q}-content`;\n\nconst ft = \"os-size-observer\";\n\nconst _t = `${ft}-appear`;\n\nconst dt = `${ft}-listener`;\n\nconst vt = `${dt}-scroll`;\n\nconst ht = `${dt}-item`;\n\nconst pt = `${ht}-final`;\n\nconst gt = \"os-trinsic-observer\";\n\nconst bt = \"os-no-css-vars\";\n\nconst wt = \"os-theme-none\";\n\nconst yt = \"os-scrollbar\";\n\nconst mt = `${yt}-rtl`;\n\nconst St = `${yt}-horizontal`;\n\nconst $t = `${yt}-vertical`;\n\nconst xt = `${yt}-track`;\n\nconst Ot = `${yt}-handle`;\n\nconst Ct = `${yt}-visible`;\n\nconst Ht = `${yt}-cornerless`;\n\nconst zt = `${yt}-transitionless`;\n\nconst It = `${yt}-interaction`;\n\nconst At = `${yt}-unusable`;\n\nconst Et = `${yt}-auto-hide`;\n\nconst Tt = `${Et}-hidden`;\n\nconst kt = `${yt}-wheel`;\n\nconst Dt = `${xt}-interactive`;\n\nconst Mt = `${Ot}-interactive`;\n\nconst Rt = {};\n\nconst Lt = {};\n\nconst addPlugins = t => {\n each(t, (t => each(t, ((n, o) => {\n Rt[o] = t[o];\n }))));\n};\n\nconst registerPluginModuleInstances = (t, n, o) => keys(t).map((s => {\n const {static: e, instance: c} = t[s];\n const [r, l, i] = o || [];\n const a = o ? c : e;\n if (a) {\n const t = o ? a(r, l, n) : a(n);\n return (i || Lt)[s] = t;\n }\n}));\n\nconst getStaticPluginModuleInstance = t => Lt[t];\n\nconst Pt = \"__osOptionsValidationPlugin\";\n\nconst Vt = \"__osSizeObserverPlugin\";\n\nconst Ut = /* @__PURE__ */ (() => ({\n [Vt]: {\n static: () => (t, n, o) => {\n const s = 3333333;\n const e = \"scroll\";\n const c = createDOM(`<div class=\"${ht}\" dir=\"ltr\"><div class=\"${ht}\"><div class=\"${pt}\"></div></div><div class=\"${ht}\"><div class=\"${pt}\" style=\"width: 200%; height: 200%\"></div></div></div>`);\n const r = c[0];\n const l = r.lastChild;\n const i = r.firstChild;\n const a = i == null ? void 0 : i.firstChild;\n let u = P(r);\n let d = u;\n let v = false;\n let h;\n const reset = () => {\n scrollElementTo(i, s);\n scrollElementTo(l, s);\n };\n const onResized = t => {\n h = 0;\n if (v) {\n u = d;\n n(t === true);\n }\n };\n const onScroll = t => {\n d = P(r);\n v = !t || !equalWH(d, u);\n if (t) {\n stopPropagation(t);\n if (v && !h) {\n f(h);\n h = _(onResized);\n }\n } else {\n onResized(t === false);\n }\n reset();\n };\n const p = [ appendChildren(t, c), addEventListener(i, e, onScroll), addEventListener(l, e, onScroll) ];\n addClass(t, vt);\n style(a, {\n [D]: s,\n [M]: s\n });\n _(reset);\n return [ o ? bind(onScroll, false) : reset, p ];\n }\n }\n}))();\n\nlet Bt = 0;\n\nconst jt = \"__osScrollbarsHidingPlugin\";\n\nconst Nt = /* @__PURE__ */ (() => ({\n [jt]: {\n static: () => ({\n C: t => {\n const {H: n, I: o, A: s} = t;\n const e = !s && !n && (o.x || o.y);\n const c = e ? document.createElement(\"style\") : false;\n if (c) {\n attr(c, \"id\", `${et}-${ct}-${Bt}`);\n Bt++;\n }\n return c;\n },\n T: (t, n, o, s, e, c, r) => {\n const arrangeViewport = (n, c, r, l) => {\n if (t) {\n const {k: t} = e;\n const {D: i, M: a} = n;\n const {x: u, y: f} = a;\n const {x: _, y: d} = i;\n const v = l ? C : H;\n const h = t[v];\n const p = t.paddingTop;\n const g = c.w + r.w;\n const b = c.h + r.h;\n const w = {\n w: d && f ? `${d + g - h}px` : \"\",\n h: _ && u ? `${_ + b - p}px` : \"\"\n };\n if (s) {\n const {sheet: t} = s;\n if (t) {\n const {cssRules: n} = t;\n if (n) {\n if (!n.length) {\n t.insertRule(`#${attr(s, \"id\")} + [${et}~='${ct}']::before {}`, 0);\n }\n const o = n[0].style;\n o[D] = w.w;\n o[M] = w.h;\n }\n }\n } else {\n style(o, {\n \"--os-vaw\": w.w,\n \"--os-vah\": w.h\n });\n }\n }\n return t;\n };\n const undoViewportArrange = (s, l, i) => {\n if (t) {\n const a = i || c(s);\n const {k: u} = e;\n const {M: f} = a;\n const {x: _, y: d} = f;\n const v = {};\n const assignProps = t => each(t, (t => {\n v[t] = u[t];\n }));\n if (_) {\n assignProps([ E, O, z ]);\n }\n if (d) {\n assignProps([ I, A, H, C ]);\n }\n const h = style(o, keys(v));\n attrClass(o, et, ct);\n if (!n) {\n v[M] = \"\";\n }\n style(o, v);\n return [ () => {\n r(a, l, t, h);\n style(o, h);\n attrClass(o, et, ct, true);\n }, a ];\n }\n return [ noop ];\n };\n return [ arrangeViewport, undoViewportArrange ];\n },\n R: () => {\n let t = {\n w: 0,\n h: 0\n };\n let n = 0;\n const getWindowDPR = () => {\n const t = r.screen;\n const n = t.deviceXDPI || 0;\n const o = t.logicalXDPI || 1;\n return r.devicePixelRatio || n / o;\n };\n const diffBiggerThanOne = (t, n) => {\n const o = u(t);\n const s = u(n);\n return !(o === s || o + 1 === s || o - 1 === s);\n };\n return (o, s) => {\n const e = windowSize();\n const c = {\n w: e.w - t.w,\n h: e.h - t.h\n };\n if (c.w === 0 && c.h === 0) {\n return;\n }\n const r = {\n w: u(c.w),\n h: u(c.h)\n };\n const l = {\n w: u(a(e.w / (t.w / 100))),\n h: u(a(e.h / (t.h / 100)))\n };\n const i = getWindowDPR();\n const f = r.w > 2 && r.h > 2;\n const _ = !diffBiggerThanOne(l.w, l.h);\n const d = i !== n && i > 0;\n const v = f && _ && d;\n let h;\n let p;\n if (v) {\n [p, h] = s();\n assignDeep(o.L, p);\n }\n t = e;\n n = i;\n return h;\n };\n }\n })\n }\n}))();\n\nconst Gt = \"__osClickScrollPlugin\";\n\nconst qt = /* @__PURE__ */ (() => ({\n [Gt]: {\n static: () => (t, n, o, s, e) => {\n let c = 0;\n let r = noop;\n const animateClickScroll = l => {\n r = animateNumber(l, l + s * Math.sign(o), 133, ((o, l, i) => {\n t(o);\n const a = n();\n const u = a + s;\n const f = e >= a && e <= u;\n if (i && !f) {\n if (c) {\n animateClickScroll(o);\n } else {\n const t = d((() => {\n animateClickScroll(o);\n }), 222);\n r = () => {\n clearTimeout(t);\n };\n }\n c++;\n }\n }));\n };\n animateClickScroll(0);\n return () => r();\n }\n }\n}))();\n\nlet Ft;\n\nconst getNativeScrollbarSize = (t, n, o, s) => {\n appendChildren(t, n);\n const e = V(n);\n const c = P(n);\n const r = fractionalSize(o);\n s && removeElements(n);\n return {\n x: c.h - e.h + r.h,\n y: c.w - e.w + r.w\n };\n};\n\nconst getNativeScrollbarsHiding = t => {\n let n = false;\n const o = addClass(t, Y);\n try {\n n = style(t, cssProperty(\"scrollbar-width\")) === \"none\" || r.getComputedStyle(t, \"::-webkit-scrollbar\").getPropertyValue(\"display\") === \"none\";\n } catch (s) {}\n o();\n return n;\n};\n\nconst getRtlScrollBehavior = (t, n) => {\n style(t, {\n [T]: R,\n [k]: R,\n direction: \"rtl\"\n });\n scrollElementTo(t, {\n x: 0\n });\n const o = absoluteCoordinates(t);\n const s = absoluteCoordinates(n);\n scrollElementTo(t, {\n x: -999\n });\n const e = absoluteCoordinates(n);\n return {\n i: o.x === s.x,\n n: s.x !== e.x\n };\n};\n\nconst getFlexboxGlue = (t, n) => {\n const o = addClass(t, W);\n const s = getBoundingClientRect(t);\n const e = getBoundingClientRect(n);\n const c = equalBCRWH(e, s, true);\n const r = addClass(t, X);\n const l = getBoundingClientRect(t);\n const i = getBoundingClientRect(n);\n const a = equalBCRWH(i, l, true);\n o();\n r();\n return c && a;\n};\n\nconst createEnvironment = () => {\n const {body: t} = document;\n const n = createDOM(`<div class=\"${F}\"><div></div></div>`);\n const o = n[0];\n const s = o.firstChild;\n const [e, , c] = createEventListenerHub();\n const [l, i] = createCache({\n o: getNativeScrollbarSize(t, o, s),\n u: equalXY\n }, bind(getNativeScrollbarSize, t, o, s, true));\n const [a] = i();\n const u = getNativeScrollbarsHiding(o);\n const f = {\n x: a.x === 0,\n y: a.y === 0\n };\n const _ = {\n elements: {\n host: null,\n padding: !u,\n viewport: t => u && t === t.ownerDocument.body && t,\n content: false\n },\n scrollbars: {\n slot: true\n },\n cancel: {\n nativeScrollbarsOverlaid: false,\n body: null\n }\n };\n const d = assignDeep({}, G);\n const v = bind(assignDeep, {}, d);\n const h = bind(assignDeep, {}, _);\n const p = {\n L: a,\n I: f,\n H: u,\n A: style(o, \"zIndex\") === \"-1\",\n P: !!S,\n V: getRtlScrollBehavior(o, s),\n U: getFlexboxGlue(o, s),\n B: bind(e, \"r\"),\n j: h,\n N: t => assignDeep(_, t) && h(),\n G: v,\n q: t => assignDeep(d, t) && v(),\n F: assignDeep({}, _),\n W: assignDeep({}, d)\n };\n removeAttr(o, \"style\");\n removeElements(o);\n r.addEventListener(\"resize\", (() => {\n let t;\n if (!u && (!f.x || !f.y)) {\n const n = getStaticPluginModuleInstance(jt);\n const o = n ? n.R() : noop;\n t = !!o(p, l);\n }\n c(\"r\", [ t ]);\n }));\n return p;\n};\n\nconst getEnvironment = () => {\n if (!Ft) {\n Ft = createEnvironment();\n }\n return Ft;\n};\n\nconst resolveInitialization = (t, n) => isFunction(n) ? n.apply(0, t) : n;\n\nconst staticInitializationElement = (t, n, o, s) => {\n const e = isUndefined(s) ? o : s;\n const c = resolveInitialization(t, e);\n return c || n.apply(0, t);\n};\n\nconst dynamicInitializationElement = (t, n, o, s) => {\n const e = isUndefined(s) ? o : s;\n const c = resolveInitialization(t, e);\n return !!c && (isHTMLElement(c) ? c : n.apply(0, t));\n};\n\nconst cancelInitialization = (t, n) => {\n const {nativeScrollbarsOverlaid: o, body: s} = n || {};\n const {I: e, H: c, j: r} = getEnvironment();\n const {nativeScrollbarsOverlaid: l, body: i} = r().cancel;\n const a = o != null ? o : l;\n const u = isUndefined(s) ? i : s;\n const f = (e.x || e.y) && a;\n const _ = t && (isNull(u) ? !c : u);\n return !!f || !!_;\n};\n\nconst Wt = new WeakMap;\n\nconst addInstance = (t, n) => {\n Wt.set(t, n);\n};\n\nconst removeInstance = t => {\n Wt.delete(t);\n};\n\nconst getInstance = t => Wt.get(t);\n\nconst createEventContentChange = (t, n, o) => {\n let s = false;\n const e = o ? new WeakMap : false;\n const destroy = () => {\n s = true;\n };\n const updateElements = c => {\n if (e && o) {\n const r = o.map((n => {\n const [o, s] = n || [];\n const e = s && o ? (c || find)(o, t) : [];\n return [ e, s ];\n }));\n each(r, (o => each(o[0], (c => {\n const r = o[1];\n const l = e.get(c) || [];\n const i = t.contains(c);\n if (i && r) {\n const t = addEventListener(c, r.trim(), (o => {\n if (s) {\n t();\n e.delete(c);\n } else {\n n(o);\n }\n }));\n e.set(c, push(l, t));\n } else {\n runEachAndClear(l);\n e.delete(c);\n }\n }))));\n }\n };\n updateElements();\n return [ destroy, updateElements ];\n};\n\nconst createDOMObserver = (t, n, o, s) => {\n let e = false;\n const {X: c, Y: r, J: l, K: i, Z: a, tt: u} = s || {};\n const f = debounce((() => e && o(true)), {\n v: 33,\n p: 99\n });\n const [_, d] = createEventContentChange(t, f, l);\n const v = c || [];\n const h = r || [];\n const p = concat(v, h);\n const observerCallback = (e, c) => {\n if (!isEmptyArray(c)) {\n const r = a || noop;\n const l = u || noop;\n const f = [];\n const _ = [];\n let v = false;\n let p = false;\n each(c, (o => {\n const {attributeName: e, target: c, type: a, oldValue: u, addedNodes: d, removedNodes: g} = o;\n const b = a === \"attributes\";\n const w = a === \"childList\";\n const y = t === c;\n const m = b && e;\n const S = m ? attr(c, e || \"\") : null;\n const $ = m && u !== S;\n const x = inArray(h, e) && $;\n if (n && (w || !y)) {\n const n = b && $;\n const a = n && i && is(c, i);\n const _ = a ? !r(c, e, u, S) : !b || n;\n const v = _ && !l(o, !!a, t, s);\n each(d, (t => push(f, t)));\n each(g, (t => push(f, t)));\n p = p || v;\n }\n if (!n && y && $ && !r(c, e, u, S)) {\n push(_, e);\n v = v || x;\n }\n }));\n d((t => deduplicateArray(f).reduce(((n, o) => {\n push(n, find(t, o));\n return is(o, t) ? push(n, o) : n;\n }), [])));\n if (n) {\n !e && p && o(false);\n return [ false ];\n }\n if (!isEmptyArray(_) || v) {\n const t = [ deduplicateArray(_), v ];\n !e && o.apply(0, t);\n return t;\n }\n }\n };\n const g = new w(bind(observerCallback, false));\n return [ () => {\n g.observe(t, {\n attributes: true,\n attributeOldValue: true,\n attributeFilter: p,\n subtree: n,\n childList: n,\n characterData: n\n });\n e = true;\n return () => {\n if (e) {\n _();\n g.disconnect();\n e = false;\n }\n };\n }, () => {\n if (e) {\n f.m();\n return observerCallback(true, g.takeRecords());\n }\n } ];\n};\n\nconst createSizeObserver = (t, n, o) => {\n const s = 3333333;\n const {nt: e, ot: c} = o || {};\n const r = getStaticPluginModuleInstance(Vt);\n const {V: l} = getEnvironment();\n const i = bind(getDirectionIsRTL, t);\n const [a] = createCache({\n o: false,\n _: true\n });\n return () => {\n const o = [];\n const u = createDOM(`<div class=\"${ft}\"><div class=\"${dt}\"></div></div>`);\n const f = u[0];\n const _ = f.firstChild;\n const onSizeChangedCallbackProxy = t => {\n const o = t instanceof ResizeObserverEntry;\n const c = !o && isArray(t);\n let r = false;\n let i = false;\n let u = true;\n if (o) {\n const [n, , o] = a(t.contentRect);\n const s = domRectHasDimensions(n);\n const e = domRectAppeared(n, o);\n const c = !o;\n i = c || e;\n r = !i && !s;\n u = !r;\n } else if (c) {\n [, u] = t;\n } else {\n i = t === true;\n }\n if (e && u) {\n const n = c ? t[0] : getDirectionIsRTL(f);\n scrollElementTo(f, {\n x: getRTLCompatibleScrollPosition(s, s, n && l),\n y: s\n });\n }\n if (!r) {\n n({\n st: c ? t : void 0,\n et: !c,\n ot: i\n });\n }\n };\n if (m) {\n const t = new m((t => onSizeChangedCallbackProxy(t.pop())));\n t.observe(_);\n push(o, (() => {\n t.disconnect();\n }));\n } else if (r) {\n const [t, n] = r(_, onSizeChangedCallbackProxy, c);\n push(o, concat([ addClass(f, _t), addEventListener(f, \"animationstart\", t) ], n));\n } else {\n return noop;\n }\n if (e) {\n const [t] = createCache({\n o: void 0\n }, i);\n push(o, addEventListener(f, \"scroll\", (n => {\n const o = t();\n const [s, e, c] = o;\n if (e) {\n removeClass(_, \"ltr rtl\");\n addClass(_, s ? \"rtl\" : \"ltr\");\n onSizeChangedCallbackProxy([ !!s, e, c ]);\n }\n stopPropagation(n);\n })));\n }\n return bind(runEachAndClear, push(o, appendChildren(t, f)));\n };\n};\n\nconst createTrinsicObserver = (t, n) => {\n let o;\n const isHeightIntrinsic = t => t.h === 0 || t.isIntersecting || t.intersectionRatio > 0;\n const s = createDiv(gt);\n const [e] = createCache({\n o: false\n });\n const triggerOnTrinsicChangedCallback = (t, o) => {\n if (t) {\n const s = e(isHeightIntrinsic(t));\n const [, c] = s;\n return c && !o && n(s) && [ s ];\n }\n };\n const intersectionObserverCallback = (t, n) => triggerOnTrinsicChangedCallback(n.pop(), t);\n return [ () => {\n const n = [];\n if (y) {\n o = new y(bind(intersectionObserverCallback, false), {\n root: t\n });\n o.observe(s);\n push(n, (() => {\n o.disconnect();\n }));\n } else {\n const onSizeChanged = () => {\n const t = P(s);\n triggerOnTrinsicChangedCallback(t);\n };\n push(n, createSizeObserver(s, onSizeChanged)());\n onSizeChanged();\n }\n return bind(runEachAndClear, push(n, appendChildren(t, s)));\n }, () => o && intersectionObserverCallback(true, o.takeRecords()) ];\n};\n\nconst createObserversSetup = (t, n) => {\n let o;\n let s;\n let e;\n let c;\n let r;\n const {H: l} = getEnvironment();\n const i = `[${K}]`;\n const a = `[${et}]`;\n const u = [ \"tabindex\" ];\n const f = [ \"wrap\", \"cols\", \"rows\" ];\n const _ = [ \"id\", \"class\", \"style\", \"open\" ];\n const d = {\n ct: false,\n rt: getDirectionIsRTL(t.lt)\n };\n const {lt: v, it: h, ut: p, ft: g, _t: b, dt: w, vt: y} = t;\n const {U: S, B: $} = getEnvironment();\n const [x] = createCache({\n u: equalWH,\n o: {\n w: 0,\n h: 0\n }\n }, (() => {\n const t = w(lt, tt);\n const n = w(ct, \"\");\n const o = n && getElmentScroll(h);\n y(lt, tt);\n y(ct, \"\");\n y(\"\", st, true);\n const s = U(p);\n const e = U(h);\n const c = fractionalSize(h);\n y(lt, tt, t);\n y(ct, \"\", n);\n y(\"\", st);\n scrollElementTo(h, o);\n return {\n w: e.w + s.w + c.w,\n h: e.h + s.h + c.h\n };\n }));\n const O = g ? f : concat(_, f);\n const C = debounce(n, {\n v: () => o,\n p: () => s,\n g(t, n) {\n const [o] = t;\n const [s] = n;\n return [ concat(keys(o), keys(s)).reduce(((t, n) => {\n t[n] = o[n] || s[n];\n return t;\n }), {}) ];\n }\n });\n const updateViewportAttrsFromHost = t => {\n each(t || u, (t => {\n if (inArray(u, t)) {\n const n = attr(v, t);\n if (isString(n)) {\n attr(h, t, n);\n } else {\n removeAttr(h, t);\n }\n }\n }));\n };\n const onTrinsicChanged = (t, o) => {\n const [s, e] = t;\n const c = {\n ht: e\n };\n assignDeep(d, {\n ct: s\n });\n !o && n(c);\n return c;\n };\n const onSizeChanged = ({et: t, st: o, ot: s}) => {\n const e = t && !s && !o;\n const c = !e && l ? C : n;\n const [r, i] = o || [];\n o && assignDeep(d, {\n rt: r\n });\n c({\n et: t || s,\n ot: s,\n gt: i\n });\n };\n const onContentMutation = (t, o) => {\n const [, s] = x();\n const e = {\n bt: s\n };\n const c = t ? n : C;\n s && !o && c(e);\n return e;\n };\n const onHostMutation = (t, n, o) => {\n const s = {\n wt: n\n };\n if (n && !o) {\n C(s);\n } else if (!b) {\n updateViewportAttrsFromHost(t);\n }\n return s;\n };\n const [H, z] = p || !S ? createTrinsicObserver(v, onTrinsicChanged) : [];\n const I = !b && createSizeObserver(v, onSizeChanged, {\n ot: true,\n nt: true\n });\n const [A, E] = createDOMObserver(v, false, onHostMutation, {\n Y: _,\n X: concat(_, u)\n });\n const T = b && m && new m((t => {\n const n = t[t.length - 1].contentRect;\n onSizeChanged({\n et: true,\n ot: domRectAppeared(n, r)\n });\n r = n;\n }));\n return [ () => {\n updateViewportAttrsFromHost();\n T && T.observe(v);\n const t = I && I();\n const n = H && H();\n const o = A();\n const s = $((t => {\n const [, n] = x();\n C({\n yt: t,\n bt: n\n });\n }));\n return () => {\n T && T.disconnect();\n t && t();\n n && n();\n c && c();\n o();\n s();\n };\n }, ({St: t, $t: n, xt: r}) => {\n const l = {};\n const [u] = t(\"update.ignoreMutation\");\n const [f, _] = t(\"update.attributes\");\n const [d, v] = t(\"update.elementEvents\");\n const [g, w] = t(\"update.debounce\");\n const y = v || _;\n const m = n || r;\n const ignoreMutationFromOptions = t => isFunction(u) && u(t);\n if (y) {\n e && e();\n c && c();\n const [t, n] = createDOMObserver(p || h, true, onContentMutation, {\n X: concat(O, f || []),\n J: d,\n K: i,\n tt: (t, n) => {\n const {target: o, attributeName: s} = t;\n const e = !n && s && !b ? liesBetween(o, i, a) : false;\n return e || !!closest(o, `.${yt}`) || !!ignoreMutationFromOptions(t);\n }\n });\n c = t();\n e = n;\n }\n if (w) {\n C.m();\n if (isArray(g)) {\n const t = g[0];\n const n = g[1];\n o = isNumber(t) && t;\n s = isNumber(n) && n;\n } else if (isNumber(g)) {\n o = g;\n s = false;\n } else {\n o = false;\n s = false;\n }\n }\n if (m) {\n const t = E();\n const n = z && z();\n const o = e && e();\n t && assignDeep(l, onHostMutation(t[0], t[1], m));\n n && assignDeep(l, onTrinsicChanged(n[0], m));\n o && assignDeep(l, onContentMutation(o[0], m));\n }\n return l;\n }, d ];\n};\n\nconst capNumber = (t, n, o) => l(t, i(n, o));\n\nconst getScrollbarHandleOffsetPercent = (t, n, o) => {\n const s = a(n);\n const [e, c] = getRTLCompatibleScrollBounds(s, o);\n const r = (c - t) / c;\n const l = t / e;\n const i = t / c;\n const u = o ? o.n ? r : o.i ? l : i : i;\n return capNumber(0, 1, u);\n};\n\nconst getScrollbarHandleLengthRatio = (t, n, o, s) => {\n if (s) {\n const t = o ? \"x\" : \"y\";\n const {Ot: n, Ct: e} = s;\n const c = e[t];\n const r = n[t];\n return capNumber(0, 1, c / (c + r));\n }\n const e = o ? D : M;\n const c = getBoundingClientRect(t)[e];\n const r = getBoundingClientRect(n)[e];\n return capNumber(0, 1, c / r);\n};\n\nconst getScrollbarHandleOffsetRatio = (t, n, o, s) => {\n const e = getScrollbarHandleLengthRatio(t, n, s);\n return 1 / e * (1 - e) * o;\n};\n\nconst createScrollbarsSetupElements = (t, n, o) => {\n const {j: s, A: e} = getEnvironment();\n const {scrollbars: c} = s();\n const {slot: r} = c;\n const {Ht: i, lt: a, it: u, zt: f, It: _, At: v, _t: h} = n;\n const {scrollbars: p} = f ? {} : t;\n const {slot: g} = p || {};\n const b = new Map;\n const initScrollTimeline = t => S && new S({\n source: _,\n axis: t\n });\n const w = initScrollTimeline(\"x\");\n const y = initScrollTimeline(\"y\");\n const m = dynamicInitializationElement([ i, a, u ], (() => h && v ? i : a), r, g);\n const doRefreshScrollbarOffset = t => h && !v && parent(t) === u;\n const cancelElementAnimations = t => {\n b.forEach(((n, o) => {\n const s = t ? inArray(isArray(t) ? t : [ t ], o) : true;\n if (s) {\n (n || []).forEach((t => {\n t && t.cancel();\n }));\n b.delete(o);\n }\n }));\n };\n const scrollbarStructureAddRemoveClass = (t, n, o) => {\n const s = o ? addClass : removeClass;\n each(t, (t => {\n s(t.Et, n);\n }));\n };\n const scrollbarStyle = (t, n) => {\n each(t, (t => {\n const [o, s] = n(t);\n style(o, s);\n }));\n };\n const validFiniteNumber = t => {\n const n = t || 0;\n return isFinite(n) ? n : 0;\n };\n const ratioToCssPercent = t => `${(validFiniteNumber(t) * 100).toFixed(3)}%`;\n const numberToCssPx = t => `${validFiniteNumber(t)}px`;\n const scrollbarStructureRefreshHandleLength = (t, n, o) => {\n scrollbarStyle(t, (t => {\n const {Tt: s, kt: e} = t;\n return [ s, {\n [o ? D : M]: ratioToCssPercent(getScrollbarHandleLengthRatio(s, e, o, n))\n } ];\n }));\n };\n const scrollbarStructureRefreshHandleOffset = (t, n, o) => {\n scrollbarStyle(t, (t => {\n const {Tt: s, kt: e, Et: c} = t;\n const {V: r} = getEnvironment();\n const l = o ? \"x\" : \"y\";\n const i = o ? \"Left\" : \"Top\";\n const {Ot: a} = n;\n const u = getDirectionIsRTL(c);\n const f = getScrollbarHandleOffsetRatio(s, e, getScrollbarHandleOffsetPercent(_[`scroll${i}`], a[l], o && u && r), o);\n return [ s, {\n transform: getTrasformTranslateValue(ratioToCssPercent(f), o)\n } ];\n }));\n };\n const styleScrollbarPosition = t => {\n const {Et: n} = t;\n const o = doRefreshScrollbarOffset(n) && n;\n const {x: s, y: e} = getElmentScroll(_);\n return [ o, {\n transform: o ? getTrasformTranslateValue({\n x: numberToCssPx(s),\n y: numberToCssPx(e)\n }) : \"\"\n } ];\n };\n const animateElement = (t, n, o, s) => n && t.animate(o, {\n timeline: n,\n composite: s\n });\n const animateScrollbarOffset = (t, n, o, s) => animateElement(t, n, {\n transform: [ getTrasformTranslateValue(numberToCssPx(0), s), getTrasformTranslateValue(numberToCssPx(l(0, o - .5)), s) ]\n }, \"add\");\n const $ = [];\n const x = [];\n const O = [];\n const scrollbarsAddRemoveClass = (t, n, o) => {\n const s = isBoolean(o);\n const e = s ? o : true;\n const c = s ? !o : true;\n e && scrollbarStructureAddRemoveClass(x, t, n);\n c && scrollbarStructureAddRemoveClass(O, t, n);\n };\n const refreshScrollbarsHandleLength = t => {\n scrollbarStructureRefreshHandleLength(x, t, true);\n scrollbarStructureRefreshHandleLength(O, t);\n };\n const refreshScrollbarsHandleOffset = t => {\n if (!w && !y) {\n scrollbarStructureRefreshHandleOffset(x, t, true);\n scrollbarStructureRefreshHandleOffset(O, t);\n }\n };\n const refreshScrollbarsHandleOffsetTimeline = () => {\n const forEachFn = (t, {Et: n, kt: o, Tt: s}) => {\n const e = t && getDirectionIsRTL(n);\n const c = bind(getScrollbarHandleOffsetRatio, s, o);\n const r = c(e ? 1 : 0, t);\n const l = c(e ? 0 : 1, t);\n cancelElementAnimations(s);\n b.set(s, [ animateElement(s, t ? w : y, assignDeep({\n transform: [ getTrasformTranslateValue(ratioToCssPercent(r), t), getTrasformTranslateValue(ratioToCssPercent(l), t) ]\n }, e ? {\n clear: [ \"left\" ]\n } : {})) ]);\n };\n x.forEach(bind(forEachFn, true));\n O.forEach(bind(forEachFn, false));\n };\n const refreshScrollbarsScrollbarOffset = () => {\n if (!y && !y) {\n h && scrollbarStyle(x, styleScrollbarPosition);\n h && scrollbarStyle(O, styleScrollbarPosition);\n }\n };\n const refreshScrollbarsScrollbarOffsetTimeline = ({Ot: t}) => {\n concat(O, x).forEach((({Et: n}) => {\n cancelElementAnimations(n);\n if (doRefreshScrollbarOffset(n)) {\n b.set(n, [ animateScrollbarOffset(n, w, t.x, true), animateScrollbarOffset(n, y, t.y) ]);\n }\n }));\n };\n const generateScrollbarDOM = t => {\n const n = t ? St : $t;\n const s = t ? x : O;\n const c = isEmptyArray(s) ? zt : \"\";\n const r = createDiv(`${yt} ${n} ${c}`);\n const l = createDiv(xt);\n const i = createDiv(Ot);\n const a = {\n Et: r,\n kt: l,\n Tt: i\n };\n if (!e) {\n addClass(r, bt);\n }\n push(s, a);\n push($, [ appendChildren(r, l), appendChildren(l, i), bind(removeElements, r), cancelElementAnimations, o(a, scrollbarsAddRemoveClass, t) ]);\n return a;\n };\n const C = bind(generateScrollbarDOM, true);\n const H = bind(generateScrollbarDOM, false);\n const appendElements = () => {\n appendChildren(m, x[0].Et);\n appendChildren(m, O[0].Et);\n d((() => {\n scrollbarsAddRemoveClass(zt);\n }), 300);\n return bind(runEachAndClear, $);\n };\n C();\n H();\n return [ {\n Dt: refreshScrollbarsHandleLength,\n Mt: refreshScrollbarsHandleOffset,\n Rt: refreshScrollbarsHandleOffsetTimeline,\n Lt: refreshScrollbarsScrollbarOffsetTimeline,\n Pt: refreshScrollbarsScrollbarOffset,\n Vt: scrollbarsAddRemoveClass,\n Ut: {\n P: w,\n Bt: x,\n jt: C,\n Nt: bind(scrollbarStyle, x)\n },\n Gt: {\n P: y,\n Bt: O,\n jt: H,\n Nt: bind(scrollbarStyle, O)\n }\n }, appendElements ];\n};\n\nconst createScrollbarsSetupEvents = (t, n, o) => {\n const {lt: s, It: e, qt: c} = n;\n const createInteractiveScrollEvents = (n, r) => {\n const {Tt: l, kt: i} = n;\n const u = `scroll${r ? \"Left\" : \"Top\"}`;\n const f = `client${r ? \"X\" : \"Y\"}`;\n const _ = r ? D : M;\n const d = r ? \"left\" : \"top\";\n const v = r ? \"w\" : \"h\";\n const h = r ? \"x\" : \"y\";\n const p = \"pointerup pointerleave pointercancel lostpointercapture\";\n const createRelativeHandleMove = (t, n) => s => {\n const {Ot: c} = o;\n const r = P(i)[v] - P(l)[v];\n const a = n * s / r;\n const f = a * c[h];\n e[u] = t + f;\n };\n return addEventListener(i, \"pointerdown\", (n => {\n const o = closest(n.target, `.${Ot}`) === l;\n const r = o ? l : i;\n const h = t.scrollbars;\n const {button: g, isPrimary: b, pointerType: w} = n;\n const {pointers: y} = h;\n const m = g === 0 && b && h[o ? \"dragScroll\" : \"clickScroll\"] && (y || []).includes(w);\n attrClass(s, K, ot, true);\n if (m) {\n const t = !o && n.shiftKey;\n const h = bind(getBoundingClientRect, l);\n const g = bind(getBoundingClientRect, i);\n const getHandleOffset = (t, n) => (t || h())[d] - (n || g())[d];\n const b = a(getBoundingClientRect(e)[_]) / P(e)[v] || 1;\n const w = createRelativeHandleMove(e[u] || 0, 1 / b);\n const y = n[f];\n const m = h();\n const S = g();\n const $ = m[_];\n const x = getHandleOffset(m, S) + $ / 2;\n const O = y - S[d];\n const C = o ? 0 : O - x;\n const releasePointerCapture = t => {\n runEachAndClear(H);\n r.releasePointerCapture(t.pointerId);\n };\n const H = [ bind(attrClass, s, K, ot), addEventListener(c, p, releasePointerCapture), addEventListener(c, \"selectstart\", (t => preventDefault(t)), {\n S: false\n }), addEventListener(i, p, releasePointerCapture), addEventListener(i, \"pointermove\", (n => {\n const s = n[f] - y;\n if (o || t) {\n w(C + s);\n }\n })) ];\n if (t) {\n w(C);\n } else if (!o) {\n const t = getStaticPluginModuleInstance(Gt);\n t && push(H, t(w, getHandleOffset, C, $, O));\n }\n r.setPointerCapture(n.pointerId);\n }\n }));\n };\n return (t, n, o) => {\n const {Et: r} = t;\n const [l, i] = selfClearTimeout(333);\n const a = !!e.scrollBy;\n let u = true;\n return bind(runEachAndClear, [ addEventListener(r, \"pointerenter\", (() => {\n n(It, true);\n })), addEventListener(r, \"pointerleave pointercancel\", (() => {\n n(It, false);\n })), addEventListener(r, \"wheel\", (t => {\n const {deltaX: o, deltaY: c, deltaMode: i} = t;\n if (a && u && i === 0 && parent(r) === s) {\n e.scrollBy({\n left: o,\n top: c,\n behavior: \"smooth\"\n });\n }\n u = false;\n n(kt, true);\n l((() => {\n u = true;\n n(kt);\n }));\n preventDefault(t);\n }), {\n S: false,\n $: true\n }), addEventListener(r, \"mousedown\", bind(addEventListener, c, \"click\", stopPropagation, {\n O: true,\n $: true\n }), {\n $: true\n }), createInteractiveScrollEvents(t, o), i ]);\n };\n};\n\nconst createScrollbarsSetup = (t, n, o, s, e, c) => {\n let r;\n let l;\n let i;\n let a;\n let u;\n let f = noop;\n let _ = 0;\n const [d, v] = selfClearTimeout();\n const [h, p] = selfClearTimeout();\n const [g, b] = selfClearTimeout(100);\n const [w, y] = selfClearTimeout(100);\n const [m, S] = selfClearTimeout(100);\n const [$, x] = selfClearTimeout((() => _));\n const [O, C] = createScrollbarsSetupElements(t, e, createScrollbarsSetupEvents(n, e, s));\n const {lt: H, Ft: z, At: I} = e;\n const {Vt: A, Dt: E, Mt: T, Rt: k, Lt: D, Pt: M} = O;\n const manageAutoHideSuspension = t => {\n A(Et, t, true);\n A(Et, t, false);\n };\n const manageScrollbarsAutoHide = (t, n) => {\n x();\n if (t) {\n A(Tt);\n } else {\n const t = bind(A, Tt, true);\n if (_ > 0 && !n) {\n $(t);\n } else {\n t();\n }\n }\n };\n const isHoverablePointerType = t => t.pointerType === \"mouse\";\n const onHostMouseEnter = t => {\n if (isHoverablePointerType(t)) {\n a = l;\n a && manageScrollbarsAutoHide(true);\n }\n };\n const R = [ b, x, y, S, p, v, () => f(), addEventListener(H, \"pointerover\", onHostMouseEnter, {\n O: true\n }), addEventListener(H, \"pointerenter\", onHostMouseEnter), addEventListener(H, \"pointerleave\", (t => {\n if (isHoverablePointerType(t)) {\n a = false;\n l && manageScrollbarsAutoHide(false);\n }\n })), addEventListener(H, \"pointermove\", (t => {\n isHoverablePointerType(t) && r && d((() => {\n b();\n manageScrollbarsAutoHide(true);\n w((() => {\n r && manageScrollbarsAutoHide(false);\n }));\n }));\n })), addEventListener(z, \"scroll\", (t => {\n h((() => {\n T(s);\n i && manageScrollbarsAutoHide(true);\n g((() => {\n i && !a && manageScrollbarsAutoHide(false);\n }));\n }));\n c(t);\n M();\n })) ];\n return [ () => bind(runEachAndClear, push(R, C())), ({St: t, xt: n, Wt: e, Xt: c}) => {\n const {Yt: a, Jt: d, Kt: v} = c || {};\n const {gt: h, ot: p} = e || {};\n const {rt: g} = o;\n const {I: b} = getEnvironment();\n const {Ot: w, Zt: y, Qt: S} = s;\n const [$, x] = t(\"showNativeOverlaidScrollbars\");\n const [O, C] = t(\"scrollbars.theme\");\n const [H, R] = t(\"scrollbars.visibility\");\n const [L, P] = t(\"scrollbars.autoHide\");\n const [V, U] = t(\"scrollbars.autoHideSuspend\");\n const [B] = t(\"scrollbars.autoHideDelay\");\n const [j, N] = t(\"scrollbars.dragScroll\");\n const [G, q] = t(\"scrollbars.clickScroll\");\n const F = p && !n;\n const W = S.x || S.y;\n const X = a || d || h || n;\n const Y = v || R;\n const J = $ && b.x && b.y;\n const setScrollbarVisibility = (t, n) => {\n const o = H === \"visible\" || H === \"auto\" && t === \"scroll\";\n A(Ct, o, n);\n return o;\n };\n _ = B;\n if (F) {\n if (V && W) {\n manageAutoHideSuspension(false);\n f();\n m((() => {\n f = addEventListener(z, \"scroll\", bind(manageAutoHideSuspension, true), {\n O: true\n });\n }));\n } else {\n manageAutoHideSuspension(true);\n }\n }\n if (x) {\n A(wt, J);\n }\n if (C) {\n A(u);\n A(O, true);\n u = O;\n }\n if (U && !V) {\n manageAutoHideSuspension(true);\n }\n if (P) {\n r = L === \"move\";\n l = L === \"leave\";\n i = L !== \"never\";\n manageScrollbarsAutoHide(!i, true);\n }\n if (N) {\n A(Mt, j);\n }\n if (q) {\n A(Dt, G);\n }\n if (Y) {\n const t = setScrollbarVisibility(y.x, true);\n const n = setScrollbarVisibility(y.y, false);\n const o = t && n;\n A(Ht, !o);\n }\n if (X) {\n E(s);\n T(s);\n k(s);\n M();\n D(s);\n A(At, !w.x, true);\n A(At, !w.y, false);\n A(mt, g && !I);\n }\n }, {}, O ];\n};\n\nconst createStructureSetupElements = t => {\n const n = getEnvironment();\n const {j: o, H: s} = n;\n const e = getStaticPluginModuleInstance(jt);\n const c = e && e.C;\n const {elements: r} = o();\n const {host: l, padding: i, viewport: a, content: u} = r;\n const f = isHTMLElement(t);\n const _ = f ? {} : t;\n const {elements: d} = _;\n const {host: v, padding: h, viewport: p, content: g} = d || {};\n const b = f ? t : _.target;\n const w = is(b, \"textarea\");\n const y = b.ownerDocument;\n const m = y.documentElement;\n const S = b === y.body;\n const $ = y.defaultView;\n const x = bind(staticInitializationElement, [ b ]);\n const O = bind(dynamicInitializationElement, [ b ]);\n const C = bind(resolveInitialization, [ b ]);\n const H = bind(createDiv, \"\");\n const z = bind(x, H, a);\n const I = bind(O, H, u);\n const A = z(p);\n const E = A === b;\n const T = E && S;\n const k = !E && I(g);\n const D = !E && isHTMLElement(A) && A === k;\n const M = D && !!C(u);\n const R = M ? z() : A;\n const L = M ? k : I();\n const P = D ? R : A;\n const V = T ? m : P;\n const U = w ? x(H, l, v) : b;\n const B = T ? V : U;\n const j = D ? L : k;\n const N = y.activeElement;\n const G = !E && $.top === $ && N === b;\n const q = {\n Ht: b,\n lt: B,\n it: V,\n tn: !E && O(H, i, h),\n ut: j,\n nn: !E && !s && c && c(n),\n It: T ? m : V,\n Ft: T ? y : V,\n sn: $,\n qt: y,\n ft: w,\n At: S,\n zt: f,\n _t: E,\n en: D,\n dt: (t, n) => hasAttrClass(V, E ? K : et, E ? n : t),\n vt: (t, n, o) => attrClass(V, E ? K : et, E ? n : t, o)\n };\n const F = keys(q).reduce(((t, n) => {\n const o = q[n];\n return push(t, o && isHTMLElement(o) && !parent(o) ? o : false);\n }), []);\n const elementIsGenerated = t => t ? inArray(F, t) : null;\n const {Ht: W, lt: X, tn: tt, it: nt, ut: ot, nn: st} = q;\n const ct = [ () => {\n removeAttr(X, K);\n removeAttr(X, J);\n removeAttr(W, J);\n if (S) {\n removeAttr(m, K);\n removeAttr(m, J);\n }\n } ];\n const lt = w && elementIsGenerated(X);\n let at = w ? W : contents([ ot, nt, tt, X, W ].find((t => elementIsGenerated(t) === false)));\n const ft = T ? W : ot || nt;\n const _t = bind(runEachAndClear, ct);\n const appendElements = () => {\n attr(X, K, E ? \"viewport\" : \"host\");\n attr(tt, it, \"\");\n attr(ot, ut, \"\");\n if (!E) {\n attr(nt, et, \"\");\n }\n const t = S && !E ? addClass(parent(b), Y) : noop;\n const unwrap = t => {\n appendChildren(parent(t), contents(t));\n removeElements(t);\n };\n if (lt) {\n insertAfter(W, X);\n push(ct, (() => {\n insertAfter(X, W);\n removeElements(X);\n }));\n }\n appendChildren(ft, at);\n appendChildren(X, tt);\n appendChildren(tt || X, !E && nt);\n appendChildren(nt, ot);\n push(ct, (() => {\n t();\n removeAttr(tt, it);\n removeAttr(ot, ut);\n removeAttr(nt, Z);\n removeAttr(nt, Q);\n removeAttr(nt, et);\n elementIsGenerated(ot) && unwrap(ot);\n elementIsGenerated(nt) && unwrap(nt);\n elementIsGenerated(tt) && unwrap(tt);\n }));\n if (s && !E) {\n attrClass(nt, et, rt, true);\n push(ct, bind(removeAttr, nt, et));\n }\n if (st) {\n insertBefore(nt, st);\n push(ct, bind(removeElements, st));\n }\n if (G) {\n const t = \"tabindex\";\n const n = attr(nt, t);\n attr(nt, t, \"-1\");\n nt.focus();\n const revertViewportTabIndex = () => n ? attr(nt, t, n) : removeAttr(nt, t);\n const o = addEventListener(y, \"pointerdown keydown\", (() => {\n revertViewportTabIndex();\n o();\n }));\n push(ct, [ revertViewportTabIndex, o ]);\n } else if (N && N.focus) {\n N.focus();\n }\n at = 0;\n return _t;\n };\n return [ q, appendElements, _t ];\n};\n\nconst createTrinsicUpdateSegment = ({ut: t}) => ({Wt: n, cn: o, xt: s}) => {\n const {U: e} = getEnvironment();\n const {ht: c} = n || {};\n const {ct: r} = o;\n const l = (t || !e) && (c || s);\n if (l) {\n style(t, {\n [M]: r ? \"\" : \"100%\"\n });\n }\n};\n\nconst createPaddingUpdateSegment = ({lt: t, tn: n, it: o, _t: s}, e) => {\n const [c, r] = createCache({\n u: equalTRBL,\n o: topRightBottomLeft()\n }, bind(topRightBottomLeft, t, \"padding\", \"\"));\n return ({St: t, Wt: l, cn: i, xt: a}) => {\n let [u, f] = r(a);\n const {H: _, U: d} = getEnvironment();\n const {et: v, bt: h, gt: p} = l || {};\n const {rt: g} = i;\n const [b, w] = t(\"paddingAbsolute\");\n const y = a || !d && h;\n if (v || f || y) {\n [u, f] = c(a);\n }\n const m = !s && (w || p || f);\n if (m) {\n const t = !b || !n && !_;\n const s = u.r + u.l;\n const c = u.t + u.b;\n const r = {\n [A]: t && !g ? -s : 0,\n [E]: t ? -c : 0,\n [I]: t && g ? -s : 0,\n top: t ? -u.t : 0,\n right: t ? g ? -u.r : \"auto\" : 0,\n left: t ? g ? \"auto\" : -u.l : 0,\n [D]: t ? `calc(100% + ${s}px)` : \"\"\n };\n const l = {\n [O]: t ? u.t : 0,\n [C]: t ? u.r : 0,\n [z]: t ? u.b : 0,\n [H]: t ? u.l : 0\n };\n style(n || o, r);\n style(o, l);\n assignDeep(e, {\n tn: u,\n rn: !t,\n k: n ? l : assignDeep({}, r, l)\n });\n }\n return {\n ln: m\n };\n };\n};\n\nconst createOverflowUpdateSegment = ({lt: t, tn: n, it: o, nn: s, _t: e, vt: c, At: i, sn: a}, u) => {\n const f = bind(l, 0);\n const _ = \"visible\";\n const d = 42;\n const v = {\n u: equalWH,\n o: {\n w: 0,\n h: 0\n }\n };\n const h = {\n u: equalXY,\n o: {\n x: R,\n y: R\n }\n };\n const getOverflowAmount = (t, n) => {\n const o = r.devicePixelRatio % 1 !== 0 ? 1 : 0;\n const s = {\n w: f(t.w - n.w),\n h: f(t.h - n.h)\n };\n return {\n w: s.w > o ? s.w : 0,\n h: s.h > o ? s.h : 0\n };\n };\n const overflowIsVisible = t => t.indexOf(_) === 0;\n const {L: p, U: g, H: b, I: w} = getEnvironment();\n const y = getStaticPluginModuleInstance(jt);\n const m = !e && !b && (w.x || w.y);\n const S = i && e;\n const [$, x] = createCache(v, bind(fractionalSize, o));\n const [O, L] = createCache(v, bind(U, o));\n const [P, B] = createCache(v);\n const [j, N] = createCache(v);\n const [G] = createCache(h);\n const fixFlexboxGlue = (n, s) => {\n style(o, {\n [M]: \"\"\n });\n if (s) {\n const {rn: s, tn: e} = u;\n const {an: c, D: r} = n;\n const l = fractionalSize(t);\n const i = V(t);\n const a = style(o, \"boxSizing\") === \"content-box\";\n const f = s || a ? e.b + e.t : 0;\n const _ = !(w.x && a);\n style(o, {\n [M]: i.h + l.h + (c.x && _ ? r.x : 0) - f\n });\n }\n };\n const getViewportOverflowState = (t, n) => {\n const s = !b && !t ? d : 0;\n const getStatePerAxis = (t, e, c) => {\n const r = style(o, t);\n const l = n ? n[t] : r;\n const i = l === \"scroll\";\n const a = e ? s : c;\n const u = i && !b ? a : 0;\n const f = e && !!s;\n return [ r, i, u, f ];\n };\n const [e, c, r, l] = getStatePerAxis(T, w.x, p.x);\n const [i, a, u, f] = getStatePerAxis(k, w.y, p.y);\n return {\n Zt: {\n x: e,\n y: i\n },\n an: {\n x: c,\n y: a\n },\n D: {\n x: r,\n y: u\n },\n M: {\n x: l,\n y: f\n }\n };\n };\n const setViewportOverflowState = (t, n, o, s) => {\n const setAxisOverflowStyle = (t, n) => {\n const o = overflowIsVisible(t);\n const s = n && o && t.replace(`${_}-`, \"\") || \"\";\n return [ n && !o ? t : \"\", overflowIsVisible(s) ? \"hidden\" : s ];\n };\n const [e, c] = setAxisOverflowStyle(o.x, n.x);\n const [r, l] = setAxisOverflowStyle(o.y, n.y);\n s[T] = c && r ? c : e;\n s[k] = l && e ? l : r;\n return getViewportOverflowState(t, s);\n };\n const hideNativeScrollbars = (t, n, o, s) => {\n const {D: e, M: c} = t;\n const {x: r, y: l} = c;\n const {x: i, y: a} = e;\n const {k: f} = u;\n const _ = n ? I : A;\n const d = n ? H : C;\n const v = f[_];\n const h = f[E];\n const p = f[d];\n const g = f[z];\n s[D] = `calc(100% + ${a + v * -1}px)`;\n s[_] = -a + v;\n s[E] = -i + h;\n if (o) {\n s[d] = p + (l ? a : 0);\n s[z] = g + (r ? i : 0);\n }\n };\n const [q, F] = y ? y.T(m, g, o, s, u, getViewportOverflowState, hideNativeScrollbars) : [ () => m, () => [ noop ] ];\n return ({St: s, Wt: r, cn: i, xt: _}, {ln: d}) => {\n const {et: v, wt: h, bt: p, ht: y, gt: m, yt: C} = r || {};\n const {ct: H, rt: z} = i;\n const [M, R] = s(\"showNativeOverlaidScrollbars\");\n const [W, X] = s(\"overflow\");\n const Y = M && w.x && w.y;\n const J = !e && !g && (v || p || h || R || y);\n const ot = v || d || p || m || C || R;\n const st = overflowIsVisible(W.x);\n const ct = overflowIsVisible(W.y);\n const ut = st || ct;\n let ft = x(_);\n let _t = L(_);\n let dt = B(_);\n let vt = N(_);\n let ht;\n if (R && b) {\n c(rt, nt, !Y);\n }\n if (J) {\n ht = getViewportOverflowState(Y);\n fixFlexboxGlue(ht, H);\n }\n if (ot) {\n if (ut) {\n c(lt, tt, false);\n }\n const [t, n] = F(Y, z, ht);\n const [s, e] = ft = $(_);\n const [r, i] = _t = O(_);\n const u = V(o);\n let d = r;\n let v = u;\n t();\n if ((i || e || R) && n && !Y && q(n, r, s, z)) {\n v = V(o);\n d = U(o);\n }\n const h = windowSize(a);\n const p = {\n w: f(l(r.w, d.w) + s.w),\n h: f(l(r.h, d.h) + s.h)\n };\n const g = {\n w: f((S ? h.w : v.w + f(u.w - r.w)) + s.w),\n h: f((S ? h.h : v.h + f(u.h - r.h)) + s.h)\n };\n vt = j(g);\n dt = P(getOverflowAmount(p, g), _);\n }\n const [pt, gt] = vt;\n const [bt, wt] = dt;\n const [yt, mt] = _t;\n const [St, $t] = ft;\n const xt = {\n x: bt.w > 0,\n y: bt.h > 0\n };\n const Ot = st && ct && (xt.x || xt.y) || st && xt.x && !xt.y || ct && xt.y && !xt.x;\n const Ct = d || m || C || $t || mt || gt || wt || X || R || J || ot;\n if (Ct) {\n const n = {\n [A]: 0,\n [E]: 0,\n [I]: 0,\n [D]: \"\",\n [T]: \"\",\n [k]: \"\"\n };\n const s = setViewportOverflowState(Y, xt, W, n);\n const c = q(s, yt, St, z);\n if (!e) {\n hideNativeScrollbars(s, z, c, n);\n }\n if (J) {\n fixFlexboxGlue(s, H);\n }\n if (e) {\n attr(t, Z, n[T]);\n attr(t, Q, n[k]);\n } else {\n style(o, n);\n }\n }\n attrClass(t, K, tt, Ot);\n attrClass(n, it, at, Ot);\n if (!e) {\n attrClass(o, et, lt, ut);\n }\n const [Ht, zt] = G(getViewportOverflowState(Y).Zt);\n assignDeep(u, {\n Zt: Ht,\n Ct: {\n x: pt.w,\n y: pt.h\n },\n Ot: {\n x: bt.w,\n y: bt.h\n },\n Qt: xt\n });\n return {\n Kt: zt,\n Yt: gt,\n Jt: wt\n };\n };\n};\n\nconst createStructureSetup = t => {\n const [n, o, s] = createStructureSetupElements(t);\n const e = {\n tn: {\n t: 0,\n r: 0,\n b: 0,\n l: 0\n },\n rn: false,\n k: {\n [A]: 0,\n [E]: 0,\n [I]: 0,\n [O]: 0,\n [C]: 0,\n [z]: 0,\n [H]: 0\n },\n Ct: {\n x: 0,\n y: 0\n },\n Ot: {\n x: 0,\n y: 0\n },\n Zt: {\n x: R,\n y: R\n },\n Qt: {\n x: false,\n y: false\n }\n };\n const {Ht: c, it: r, vt: l, _t: i} = n;\n const {H: a, I: u, U: f} = getEnvironment();\n const _ = !a && (u.x || u.y);\n const d = [ createTrinsicUpdateSegment(n), createPaddingUpdateSegment(n, e), createOverflowUpdateSegment(n, e) ];\n return [ o, t => {\n const n = {};\n const o = _ || !f;\n const s = o && getElmentScroll(r);\n l(\"\", st, true);\n each(d, (o => {\n assignDeep(n, o(t, n) || {});\n }));\n l(\"\", st);\n scrollElementTo(r, s);\n !i && scrollElementTo(c, 0);\n return n;\n }, e, n, s ];\n};\n\nconst createSetups = (t, n, o, s) => {\n const [e, c, r, l, i] = createStructureSetup(t);\n const [a, u, f] = createObserversSetup(l, (t => {\n update({}, t);\n }));\n const [_, d, , v] = createScrollbarsSetup(t, n, f, r, l, s);\n const updateHintsAreTruthy = t => keys(t).some((n => !!t[n]));\n const update = (t, s) => {\n const {un: e, xt: r, $t: l, fn: i} = t;\n const a = e || {};\n const _ = !!r;\n const v = {\n St: createOptionCheck(n, a, _),\n un: a,\n xt: _\n };\n if (i) {\n d(v);\n return false;\n }\n const h = s || u(assignDeep({}, v, {\n $t: l\n }));\n const p = c(assignDeep({}, v, {\n cn: f,\n Wt: h\n }));\n d(assignDeep({}, v, {\n Wt: h,\n Xt: p\n }));\n const g = updateHintsAreTruthy(h);\n const b = updateHintsAreTruthy(p);\n const w = g || b || !isEmptyObject(a) || _;\n w && o(t, {\n Wt: h,\n Xt: p\n });\n return w;\n };\n return [ () => {\n const {Ht: t, it: n, qt: o, At: s} = l;\n const c = s ? o.documentElement : t;\n const r = getElmentScroll(c);\n const i = [ a(), e(), _() ];\n scrollElementTo(n, r);\n return bind(runEachAndClear, i);\n }, update, () => ({\n _n: f,\n dn: r\n }), {\n vn: l,\n hn: v\n }, i ];\n};\n\nconst OverlayScrollbars = (t, n, o) => {\n const {G: s} = getEnvironment();\n const e = isHTMLElement(t);\n const c = e ? t : t.target;\n const r = getInstance(c);\n if (n && !r) {\n let r = false;\n const l = [];\n const i = {};\n const validateOptions = t => {\n const n = removeUndefinedProperties(t, true);\n const o = getStaticPluginModuleInstance(Pt);\n return o ? o(n, true) : n;\n };\n const a = assignDeep({}, s(), validateOptions(n));\n const [u, f, _] = createEventListenerHub();\n const [d, v, h] = createEventListenerHub(o);\n const triggerEvent = (t, n) => {\n h(t, n);\n _(t, n);\n };\n const [p, g, b, w, y] = createSetups(t, a, (({un: t, xt: n}, {Wt: o, Xt: s}) => {\n const {et: e, gt: c, ht: r, bt: l, wt: i, ot: a} = o;\n const {Yt: u, Jt: f, Kt: _} = s;\n triggerEvent(\"updated\", [ m, {\n updateHints: {\n sizeChanged: !!e,\n directionChanged: !!c,\n heightIntrinsicChanged: !!r,\n overflowEdgeChanged: !!u,\n overflowAmountChanged: !!f,\n overflowStyleChanged: !!_,\n contentMutation: !!l,\n hostMutation: !!i,\n appear: !!a\n },\n changedOptions: t || {},\n force: !!n\n } ]);\n }), (t => triggerEvent(\"scroll\", [ m, t ])));\n const destroy = t => {\n removeInstance(c);\n runEachAndClear(l);\n r = true;\n triggerEvent(\"destroyed\", [ m, t ]);\n f();\n v();\n };\n const m = {\n options(t, n) {\n if (t) {\n const o = n ? s() : {};\n const e = getOptionsDiff(a, assignDeep(o, validateOptions(t)));\n if (!isEmptyObject(e)) {\n assignDeep(a, e);\n g({\n un: e\n });\n }\n }\n return assignDeep({}, a);\n },\n on: d,\n off: (t, n) => {\n t && n && v(t, n);\n },\n state() {\n const {_n: t, dn: n} = b();\n const {rt: o} = t;\n const {Ct: s, Ot: e, Zt: c, Qt: l, tn: i, rn: a} = n;\n return assignDeep({}, {\n overflowEdge: s,\n overflowAmount: e,\n overflowStyle: c,\n hasOverflow: l,\n padding: i,\n paddingAbsolute: a,\n directionRTL: o,\n destroyed: r\n });\n },\n elements() {\n const {Ht: t, lt: n, tn: o, it: s, ut: e, It: c, Ft: r} = w.vn;\n const {Ut: l, Gt: i} = w.hn;\n const translateScrollbarStructure = t => {\n const {Tt: n, kt: o, Et: s} = t;\n return {\n scrollbar: s,\n track: o,\n handle: n\n };\n };\n const translateScrollbarsSetupElement = t => {\n const {Bt: n, jt: o} = t;\n const s = translateScrollbarStructure(n[0]);\n return assignDeep({}, s, {\n clone: () => {\n const t = translateScrollbarStructure(o());\n g({\n fn: true\n });\n return t;\n }\n });\n };\n return assignDeep({}, {\n target: t,\n host: n,\n padding: o || s,\n viewport: s,\n content: e || s,\n scrollOffsetElement: c,\n scrollEventElement: r,\n scrollbarHorizontal: translateScrollbarsSetupElement(l),\n scrollbarVertical: translateScrollbarsSetupElement(i)\n });\n },\n update: t => g({\n xt: t,\n $t: true\n }),\n destroy: bind(destroy, false),\n plugin: t => i[keys(t)[0]]\n };\n push(l, [ y ]);\n addInstance(c, m);\n registerPluginModuleInstances(Rt, OverlayScrollbars, [ m, u, i ]);\n if (cancelInitialization(w.vn.At, !e && t.cancel)) {\n destroy(true);\n return m;\n }\n push(l, p());\n triggerEvent(\"initialized\", [ m ]);\n m.update(true);\n return m;\n }\n return r;\n};\n\nOverlayScrollbars.plugin = t => {\n const n = isArray(t);\n const o = n ? t : [ t ];\n const s = o.map((t => registerPluginModuleInstances(t, OverlayScrollbars)[0]));\n addPlugins(o);\n return n ? s : s[0];\n};\n\nOverlayScrollbars.valid = t => {\n const n = t && t.elements;\n const o = isFunction(n) && n();\n return isPlainObject(o) && !!getInstance(o.target);\n};\n\nOverlayScrollbars.env = () => {\n const {L: t, I: n, H: o, V: s, U: e, A: c, P: r, F: l, W: i, j: a, N: u, G: f, q: _} = getEnvironment();\n return assignDeep({}, {\n scrollbarsSize: t,\n scrollbarsOverlaid: n,\n scrollbarsHiding: o,\n rtlScrollBehavior: s,\n flexboxGlue: e,\n cssCustomProperties: c,\n scrollTimeline: r,\n staticDefaultInitialization: l,\n staticDefaultOptions: i,\n getDefaultInitialization: a,\n setDefaultInitialization: u,\n getDefaultOptions: f,\n setDefaultOptions: _\n });\n};\n\nexport { qt as ClickScrollPlugin, OverlayScrollbars, Nt as ScrollbarsHidingPlugin, Ut as SizeObserverPlugin };\n//# sourceMappingURL=overlayscrollbars.mjs.map\n","import { OverlayScrollbars } from 'overlayscrollbars';\n// self\nimport SHARED from './../shared/shared';\nimport { createUid, warn } from './../shared/utils';\n\nif (!window.MODALS) window.MODALS = {};\n\nconst { MODALS } = window;\n\n// create template method\nconst createTemplate = el => {\n const { TEMPLATE } = fesdDB.modal4;\n const { childDom } = el;\n const container = document.createElement('div');\n container.innerHTML = TEMPLATE(el.getAttribute('data-modal-template-setting'));\n\n const content = container.querySelector('.modal-content');\n [...childDom].forEach(child => {\n content.append(child);\n });\n\n return container.children[0];\n};\n\n// class\nclass ModernModal extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n\n static get observedAttributes() {\n return [':state'];\n }\n\n attributeChangedCallback(attr, oldVal, newVal) {\n switch (attr) {\n case ':state':\n this.#stateControl(newVal);\n break;\n }\n }\n\n connectedCallback() {\n if (this.initialize) return;\n this.initialize = true;\n this.#create();\n }\n\n #create() {\n const { ATTRS } = fesdDB.modal4;\n\n this.__events__ = {};\n\n if (!this.getAttribute(':state')) {\n this.setAttribute(':state', 'close');\n }\n\n const id = this.getAttribute(ATTRS.id) || createUid();\n if (!this.getAttribute(ATTRS.id)) {\n warn(`modern-modal needs a ${ATTRS.id} attribute with a unique id.`);\n this.setAttribute(ATTRS.id, id);\n }\n\n if (MODALS[id]) warn(`the ${ATTRS.id} \"${id}\" is already be used.`);\n MODALS[id] = this;\n\n this.#mount();\n }\n\n #mount() {\n this.childDom = this.childNodes;\n this.template = createTemplate(this);\n\n this.innerHTML = '';\n this.append(this.template);\n\n this.#init();\n }\n\n #init() {\n const scroller = this.querySelector('.modal-scroller');\n\n this.__scroller__ = OverlayScrollbars(scroller, {\n overflowBehavior: {\n x: 'hidden',\n },\n });\n\n this.#event();\n }\n\n #event() {\n const $self = this;\n const { ATTRS } = fesdDB.modal4;\n const { close, destroy } = ATTRS;\n\n $self.querySelectorAll(`[${close}]`)?.forEach(el => {\n el.addEventListener('click', function () {\n const closeAttr = this.getAttribute(close);\n const closeTarget = closeAttr && MODALS[closeAttr] ? MODALS[closeAttr] : $self;\n closeTarget.close();\n });\n });\n\n $self.querySelectorAll(`[${destroy}]`)?.forEach(el => {\n el.addEventListener('click', function () {\n const destroyAttr = this.getAttribute(destroy);\n const destroyTarget = destroyAttr && MODALS[destroyAttr] ? MODALS[destroyAttr] : $self;\n destroyTarget.destroy();\n });\n });\n\n $self.querySelector('[stop-propagation]')?.addEventListener('click', function (e) {\n e.stopPropagation();\n });\n }\n\n #stateControl(state) {\n const { __scroller__ } = this;\n\n if (state === 'open') {\n this.style.display = 'block';\n if (__scroller__) {\n const { viewport } = __scroller__.elements();\n viewport.scrollTo({\n top: 0,\n });\n }\n setTimeout(() => {\n this.classList.add('show');\n this.emit('open');\n }, 100);\n }\n if (state === 'close') {\n if (!this.classList.contains('show')) return;\n this.classList.remove('show');\n const transitionEndHandler = () => {\n this.style.removeProperty('display');\n this.emit('close');\n this.removeEventListener('transitionend', transitionEndHandler);\n };\n this.addEventListener('transitionend', transitionEndHandler);\n }\n if (state === 'destroy') {\n this.classList.remove('show');\n const transitionEndHandler = () => {\n const { ATTRS } = fesdDB.modal4;\n const id = this.getAttribute(ATTRS.id);\n this.style.removeProperty('display');\n this.emit('close');\n this.remove();\n this.emit('destroy');\n if (MODALS[id]) delete MODALS[id];\n };\n this.addEventListener('transitionend', transitionEndHandler);\n }\n }\n\n open() {\n this.setAttribute(':state', 'open');\n\n return this;\n }\n\n close() {\n this.setAttribute(':state', 'close');\n\n return this;\n }\n\n destroy() {\n this.setAttribute(':state', 'destroy');\n\n return this;\n }\n}\n\n// install on and emit\nObject.assign(ModernModal.prototype, SHARED);\n\nexport default ModernModal;\n","import ModernModal from './modernModal';\nimport SHARED from './../shared/shared';\nimport { isString, isElementExist, isFunction, getElement, getAllElements, toHTMLElement, jsonParse, warn } from './../shared/utils';\n\n// define custom element\nif (!customElements.get('modern-modal')) {\n customElements.define('modern-modal', ModernModal);\n}\n\nconst { MODALS } = window;\n\n// use methods (for instance)\nconst useMethod = (instance, name, ...args) => {\n if (!name) return;\n const handler = instance[name];\n\n if (handler && isFunction(handler)) {\n handler.apply(instance, args);\n }\n};\n\n// use function (for static)\nconst useFunction = (handler, ...args) => {\n if (handler && isFunction(handler)) {\n handler.apply(Modal4, args);\n }\n};\n\n// dispatch modal\nconst dispatchModal = (options, instance) => {\n const { target } = options;\n\n const modal = MODALS[target] || getElement(options.target);\n\n if (modal) useModal(options, instance);\n if (!modal) useFetch(options, instance);\n};\n\n//\nconst useModal = (options, instance) => {\n const { target, action, on, e } = options;\n\n const modal = MODALS[target] || getElement(options.target);\n const events = ['open', 'close', 'destroy'];\n\n // trigger events\n events.forEach(name => {\n modal.once(name, () => {\n if (instance) {\n instance.emit(name, modal, e);\n useMethod(instance, on[name], modal, e);\n }\n if (!instance) {\n useFunction(on[name], modal);\n }\n });\n });\n\n // action\n switch (action) {\n case 'open':\n modal.open();\n break;\n case 'close':\n modal.close();\n break;\n case 'destroy':\n modal.destroy();\n break;\n default:\n const state = modal.getAttribute(':state');\n if (state === 'close') modal.open();\n if (state === 'open') modal.close();\n break;\n }\n};\n\n// fetch modal from files\nconst useFetch = async (options, instance) => {\n const { target, route, container, on, e } = options;\n\n if (!route) return warn('modal4', 'cannot find target or data-modal-route is not defined');\n\n // trigger event handler\n const useEvent = (name, ...args) => {\n if (instance) {\n instance.emit(name, ...args);\n useMethod(instance, on[name], ...args);\n }\n if (!instance) {\n useFunction(on[name], ...args);\n }\n };\n\n // get response\n fetch(route)\n .then(res => {\n // trigger success event\n useEvent('success', e);\n\n return res.text();\n })\n .then(data => {\n const doms = toHTMLElement(data); /** modern-modal is initialized in this state */\n const containerElement = getElement(container) || getElement(fesdDB.modal4.SETTINGS.container);\n\n // append dom\n [...doms].forEach(dom => {\n containerElement.append(dom);\n });\n\n const modal = MODALS[target] || getElement(options.target);\n\n // trigger complete event\n useEvent('complete', modal);\n useModal(options, instance);\n })\n .catch(error => {\n // trigger error event\n useEvent('error', error);\n });\n};\n\nclass Modal4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n if (!isString(el) || !isElementExist(el)) return;\n\n const { SETTINGS, EVENTS } = fesdDB.modal4;\n\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.modal = {};\n el.modal.instance = this;\n el.modal.eventHandler = this.#trigger;\n el.modal.defaultOptions = options;\n el.addEventListener('click', el.modal.eventHandler);\n });\n\n this.emit('init');\n }\n\n #trigger(e) {\n /** the keyword `this` in this method is pointed to the click target */\n const { defaultOptions, eventHandler, instance } = this.modal;\n\n const ons = jsonParse(this.getAttribute('data-modal-on'));\n if (ons && typeof ons !== 'object') warn('modal4', 'data-modal-on must be a json string.');\n\n const options = {\n target: this.getAttribute('data-modal-target') || defaultOptions.target,\n action: this.getAttribute('data-modal-action') || defaultOptions.action,\n route: this.getAttribute('data-modal-route') || defaultOptions.route,\n container: this.getAttribute('data-modal-container') || defaultOptions.container,\n on: ons && typeof ons === 'object' ? ons : {},\n e,\n };\n\n // prevent multiple click\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, 200);\n\n // get modal\n dispatchModal(options, instance);\n }\n\n destroy() {\n const { elements } = this;\n\n elements.forEach(el => {\n if (!el.modal) return;\n\n el.removeEventListener('click', el.modal.eventHandler);\n delete el.modal;\n });\n\n return this;\n }\n\n update() {\n this.destroy().#create();\n\n this.emit('update');\n\n return this;\n }\n\n /** static method 'open' */\n static open(options) {\n const { SETTINGS } = fesdDB.modal4;\n const openOptions = Object.assign({}, SETTINGS, { on: {} }, options);\n dispatchModal(openOptions);\n }\n\n /** static method 'defineMethods' */\n static defineMethods(obj) {\n if (!Modal4.prototype.__methods__) Modal4.prototype.__methods__ = {};\n const methods = Modal4.prototype.__methods__;\n\n for (const [k, v] of Object.entries(obj)) {\n if (isFunction(v)) methods[k] = v;\n }\n\n Object.assign(Modal4.prototype, Modal4.prototype.__methods__);\n }\n}\n\nObject.assign(Modal4.prototype, SHARED);\n\nexport default Modal4;\n","import SHARED from './../shared/shared';\nimport { isString, isElementExist, getElement, getAllElements } from './../shared/utils';\n\nconst interaction = (scrollElement, elements) => {\n const viewHeight = scrollElement === window ? scrollElement.innerHeight : scrollElement.getBoundingClientRect().height;\n const viewTop = scrollElement === window ? 0 : scrollElement.getBoundingClientRect().top;\n\n elements.forEach(el => {\n const { class: className, delay, start, end, repeat, instance } = el.aost;\n\n const { top, bottom } = el.getBoundingClientRect();\n const startTrigger = viewHeight * (start / 100);\n const endTrigger = viewHeight * (end / 100);\n const isEntered = top - viewTop <= startTrigger && bottom - viewTop >= endTrigger;\n\n // in view\n if (isEntered && el.offsetParent) {\n setTimeout(() => {\n // instance.emit('enter', el);\n el.classList.add(className);\n }, delay);\n }\n // out of view\n else {\n const shouldRemove = (el.classList.contains(className) && repeat === 'down' && top - viewTop >= startTrigger) || (repeat === 'up' && bottom - viewTop <= endTrigger) || repeat === true;\n setTimeout(() => {\n // instance.emit('leave', el);\n if (shouldRemove) el.classList.remove(className);\n }, delay);\n }\n });\n};\n\nconst detectRepeat = (repeatType, options) => {\n if (repeatType === 'up' || repeatType === 'down') {\n return repeatType;\n }\n\n if (repeatType !== null) {\n if (repeatType === 'true') {\n return true;\n } else if (repeatType === 'false') {\n return false;\n } else {\n return options.repeat;\n }\n }\n\n return options.repeat;\n};\n\nclass Aost4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n if (!isString(el) || !isElementExist(el)) return;\n\n const { SETTINGS, EVENTS } = fesdDB.aost4;\n\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n const { scroller } = options;\n const scrollElement = scroller === window || !isElementExist(scroller) ? window : getElement(scroller);\n\n this.eventHandler = () => {\n interaction(scrollElement, elements);\n };\n\n elements.forEach(el => {\n el.aost = {};\n el.aost.class = el.getAttribute('data-aost-class') || options.class;\n el.aost.delay = parseInt(el.getAttribute('data-aost-delay')) || options.delay;\n el.aost.start = parseInt(el.getAttribute('data-aost-start')) || options.start;\n el.aost.end = parseInt(el.getAttribute('data-aost-end')) || options.end;\n el.aost.repeat = detectRepeat(el.getAttribute('data-aost-repeat'), options);\n el.aost.instance = this;\n });\n\n const { eventHandler } = this;\n eventHandler();\n scrollElement.aost = {};\n scrollElement.aost.eventHandler = eventHandler;\n scrollElement.addEventListener('scroll', scrollElement.aost.eventHandler, false);\n }\n\n destroy(removeShow) {\n const { elements, options } = this;\n if (!elements) return this;\n\n const { scroller } = options;\n const scrollElement = scroller === window || !isElementExist(scroller) ? window : getElement(scroller);\n\n if (scrollElement.aost) {\n scrollElement.removeEventListener('scroll', scrollElement.aost.eventHandler);\n delete scrollElement.aost;\n }\n\n elements.forEach(el => {\n if (!el.aost) return;\n const { class: className } = el.aost;\n if (removeShow) {\n el.classList.remove(className);\n }\n delete el.aost;\n });\n\n return this;\n }\n\n update(removeShow) {\n this.destroy(removeShow).#create();\n }\n}\n\nObject.assign(Aost4.prototype, SHARED);\n\nexport default Aost4;\n","/**\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 * Dom7 4.0.6\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2023, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: February 2, 2023\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf('<li') === 0) toCreate = 'ul';\n if (html.indexOf('<tr') === 0) toCreate = 'tbody';\n if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr';\n if (html.indexOf('<tbody') === 0) toCreate = 'table';\n if (html.indexOf('<option') === 0) toCreate = 'select';\n const tempParent = document.createElement(toCreate);\n tempParent.innerHTML = html;\n\n for (let i = 0; i < tempParent.childNodes.length; i += 1) {\n arr.push(tempParent.childNodes[i]);\n }\n } else {\n arr = qsa(selector.trim(), context || document);\n } // arr = qsa(selector, document);\n\n } else if (selector.nodeType || selector === window || selector === document) {\n arr.push(selector);\n } else if (Array.isArray(selector)) {\n if (selector instanceof Dom7) return selector;\n arr = selector;\n }\n\n return new Dom7(arrayUnique(arr));\n}\n\n$.fn = Dom7.prototype;\n\n// eslint-disable-next-line\n\nfunction addClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionStart(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionstart', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionstart', fireCallBack);\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\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 }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, transitionStart, trigger, val, value, width };\n","import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove\n};\nObject.keys(Methods).forEach(methodName => {\n Object.defineProperty($.fn, methodName, {\n value: Methods[methodName],\n writable: true\n });\n});\nexport default $;","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach(key => {\n try {\n object[key] = null;\n } catch (e) {// no getter for object\n }\n\n try {\n delete object[key];\n } catch (e) {// something got wrong\n }\n });\n}\n\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\n\nfunction now() {\n return Date.now();\n}\n\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\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\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');\n } // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n\n\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\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n\n return curTransform || 0;\n}\n\nfunction isObject(o) {\n return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';\n}\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\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\n\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);\n\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\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\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\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\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\n const isOutOfBound = (current, target) => {\n return dir === 'next' && current >= target || dir === 'prev' && current <= target;\n };\n\n const animate = () => {\n time = new Date().getTime();\n\n if (startTime === null) {\n startTime = time;\n }\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\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition\n });\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\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n\n animate();\n}\n\nexport { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };","import { getWindow, getDocument } from 'ssr-window';\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),\n passiveListener: function checkPassiveListener() {\n let supportsPassive = false;\n\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n }\n\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {// No support\n }\n\n return supportsPassive;\n }(),\n gestures: function checkGestures() {\n return 'ongesturestart' in window;\n }()\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n\n return support;\n}\n\nexport { getSupport };","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\nlet deviceCached;\n\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\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'; // iPadOs 13 fix\n\n const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];\n\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 } // Android\n\n\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n } // Export object\n\n\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n\n return deviceCached;\n}\n\nexport { getDevice };","import { getWindow } from 'ssr-window';\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n\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\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n\n return browser;\n}\n\nexport { getBrowser };","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\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\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\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\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 { getWindow } from 'ssr-window';\nexport default function Observer({\n swiper,\n extendParams,\n on,\n emit\n}) {\n const observers = [];\n const window = getWindow();\n\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 (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\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\n const init = () => {\n if (!swiper.params.observer) return;\n\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n } // Observe container\n\n\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren\n }); // Observe wrapper\n\n attach(swiper.$wrapperEl[0], {\n attributes: false\n });\n };\n\n const destroy = () => {\n observers.forEach(observer => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false\n });\n on('init', init);\n on('destroy', destroy);\n}","/* eslint-disable no-underscore-dangle */\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\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\n function onceHandler(...args) {\n self.off(events, onceHandler);\n\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n\n handler.apply(self, args);\n }\n\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\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\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n\n return self;\n },\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\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n\n return self;\n },\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\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\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\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\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\n};","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n\n if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {\n return;\n } // Subtract paddings\n\n\n width = width - parseInt($el.css('padding-left') || 0, 10) - parseInt($el.css('padding-right') || 0, 10);\n height = height - parseInt($el.css('padding-top') || 0, 10) - parseInt($el.css('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 { setCSSProperty } from '../../shared/utils.js';\nexport default function updateSlides() {\n const swiper = this;\n\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n } // prettier-ignore\n\n\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\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n const {\n $wrapperEl,\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 = $wrapperEl.children(`.${swiper.params.slideClass}`);\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\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\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\n if (typeof swiperSize === 'undefined') {\n return;\n }\n\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween; // reset margins\n\n if (rtl) slides.css({\n marginLeft: '',\n marginBottom: '',\n marginTop: ''\n });else slides.css({\n marginRight: '',\n marginBottom: '',\n marginTop: ''\n }); // reset cssMode offsets\n\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n } // Calc slides\n\n\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\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(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\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const {\n clientWidth,\n offsetWidth\n } = slide[0];\n slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight + (offsetWidth - clientWidth);\n }\n }\n\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\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\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n\n slidesSizesGrid.push(slideSize);\n\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\n swiper.virtualSize += slideSize + spaceBetween;\n prevSlideSize = slideSize;\n index += 1;\n }\n\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({\n width: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n } // Remove last grid elements depending on width\n\n\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n\n snapGrid = newSlidesGrid;\n\n if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides.filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n\n if (slideIndex === slides.length - 1) {\n return false;\n }\n\n return true;\n }).css({\n [key]: `${spaceBetween}px`\n });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.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\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach(slideSizeValue => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n\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\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(swiper.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\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n}","import $ from '../../shared/dom.js';\nexport 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\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = index => {\n if (isVirtual) {\n return swiper.slides.filter(el => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index)[0];\n }\n\n return swiper.slides.eq(index)[0];\n }; // Find slides currently in view\n\n\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || $([])).each(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 } // Find new height from highest slide in view\n\n\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 } // Update Height\n\n\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;\n }\n}","import $ from '../../shared/dom.js';\nexport 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; // Visible Slides\n\n slides.removeClass(params.slideVisibleClass);\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress = (offsetCenter - snapGrid[0] + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) / (slide.swiperSlideSize + params.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\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n\n swiper.visibleSlides = $(swiper.visibleSlides);\n}","export default function updateProgress(translate) {\n const swiper = this;\n\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1; // eslint-disable-next-line\n\n translate = swiper && swiper.translate && swiper.translate * multiplier || 0;\n }\n\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let {\n progress,\n isBeginning,\n isEnd\n } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd\n });\n if (params.watchSlidesProgress || params.centeredSlides && params.autoHeight) swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n\n if (wasBeginning && !isBeginning || wasEnd && !isEnd) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}","export default function updateSlidesClasses() {\n const swiper = this;\n const {\n slides,\n params,\n $wrapperEl,\n activeIndex,\n realIndex\n } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`);\n let activeSlide;\n\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`);\n } else {\n activeSlide = slides.eq(activeIndex);\n } // Active classes\n\n\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`).addClass(params.slideDuplicateActiveClass);\n }\n } // Next Slide\n\n\n let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass);\n\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n } // Prev Slide\n\n\n let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass);\n\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicateNextClass);\n }\n\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl.children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`).addClass(params.slideDuplicatePrevClass);\n }\n }\n\n swiper.emitSlidesClasses();\n}","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n\n if (typeof activeIndex === 'undefined') {\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 } // Normalize slideIndex\n\n\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\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\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n\n return;\n } // Get real index\n\n\n const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}","import $ from '../../shared/dom.js';\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\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\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('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\n if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {\n swiper.slideToClickedSlide();\n }\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 { 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\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n return currentTranslate || 0;\n}","export default function setTranslate(translate, byController) {\n const swiper = this;\n const {\n rtlTranslate: rtl,\n params,\n $wrapperEl,\n wrapperEl,\n progress\n } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y; // Check if we need to update progress\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}","export default function minTranslate() {\n return -this.snapGrid[0];\n}","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\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\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\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; // Update progress\n\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n\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\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n\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\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n\n if (!swiper.animating) {\n swiper.animating = true;\n\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[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd);\n }\n }\n\n return true;\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 setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\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\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n\n swiper.emit(`slideChangeTransition${step}`);\n\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 transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const {\n params\n } = swiper;\n if (params.cssMode) return;\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({\n swiper,\n runCallbacks,\n direction,\n step: 'Start'\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 setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\nexport default {\n setTransition,\n transitionStart,\n transitionEnd\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 !== 'number' && typeof index !== 'string') {\n throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`);\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\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\n if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) {\n return false;\n }\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]; // Normalize slideIndex\n\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\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 } // Directions locks\n\n\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n } // Update progress\n\n\n swiper.updateProgress(translate);\n let direction;\n if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index\n\n if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {\n swiper.updateActiveIndex(slideIndex); // Update Height\n\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n swiper.updateSlidesClasses();\n\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n\n return false;\n }\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = 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\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth'\n });\n }\n\n return true;\n }\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\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n\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[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);\n }\n\n return true;\n}","export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) {\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`);\n } // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n\n\n index = indexAsNumber;\n }\n\n const swiper = this;\n let newIndex = index;\n\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const {\n animating,\n enabled,\n params\n } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\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 animating,\n snapGrid,\n slidesGrid,\n rtlTranslate,\n enabled\n } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map(val => normalize(val));\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n\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\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n\n let prevIndex = 0;\n\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n\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\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\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}","/* 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\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\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\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\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}","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nexport default function slideToClickedSlide() {\n const swiper = this;\n const {\n params,\n $wrapperEl\n } = swiper;\n const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n\n if (params.centeredSlides) {\n if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {\n swiper.loopFix();\n slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\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 = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`).eq(0).index();\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\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};","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n $wrapperEl\n } = swiper; // Remove duplicated slides\n\n const $selector = $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;\n\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`);\n $selector.append(blankNode);\n }\n\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n\n if (swiper.loopedSlides > slides.length && swiper.params.loopedSlidesLimit) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n slides.each((el, index) => {\n const slide = $(el);\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < swiper.loopedSlides; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlides.push(slides.eq(index)[0]);\n prependSlides.unshift(slides.eq(slides.length - index - 1)[0]);\n }\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}","export default function loopFix() {\n const swiper = this;\n swiper.emit('beforeLoopFix');\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate(); // Fix For Negative Oversliding\n\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n swiper.emit('loopFix');\n}","export default function loopDestroy() {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n slides\n } = swiper;\n $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove();\n slides.removeAttr('data-swiper-slide-index');\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};","export default function setGrabCursor(moving) {\n const swiper = this;\n if (swiper.support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}","export default function unsetGrabCursor() {\n const swiper = this;\n\n if (swiper.support.touch || swiper.params.watchOverflow && swiper.isLocked || swiper.params.cssMode) {\n return;\n }\n\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\nexport default {\n setGrabCursor,\n unsetGrabCursor\n};","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js'; // Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\n\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\n if (!found && !el.getRootNode) {\n return null;\n }\n\n return found || __closestFrom(el.getRootNode().host);\n }\n\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n enabled\n } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return; // change target el for shadow root component\n\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== ''; // eslint-disable-next-line\n\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n $targetEl = $(eventPath[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot); // use closestElement for shadow root element to get the actual closest for nested shadow root element\n\n if (params.noSwiping && (isTargetShadow ? closestElement(noSwipingSelector, $targetEl[0]) : $targetEl.closest(noSwipingSelector)[0])) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY; // 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\n if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\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\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n\n if (document.activeElement && $(document.activeElement).is(data.focusableElements) && document.activeElement !== $targetEl[0]) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n\n if ((params.touchStartForcePreventDefault || shouldPreventDefault) && !$targetEl[0].isContentEditable) {\n e.preventDefault();\n }\n }\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && swiper.freeMode && swiper.animating && !params.cssMode) {\n swiper.freeMode.onTouchStart();\n }\n\n swiper.emit('touchStart', e);\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\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 let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n return;\n }\n\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY\n });\n data.touchStartTime = now();\n }\n\n return;\n }\n\n if (data.isTouchEvent && 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\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\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\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n\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\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n\n if (!data.startMoving) {\n return;\n }\n\n swiper.allowClick = false;\n\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n\n data.allowMomentumBounce = false; // Grab Cursor\n\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n\n swiper.emit('sliderFirstMove', e);\n }\n\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n } // Directions locks\n\n\n if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {\n data.currentTranslate = data.startTranslate;\n }\n\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n } // Threshold\n\n\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\n if (!params.followFinger || params.cssMode) return; // Update active index in free mode\n\n if (params.freeMode && params.freeMode.enabled && swiper.freeMode || params.watchSlidesProgress) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n } // Update progress\n\n\n swiper.updateProgress(data.currentTranslate); // Update translate\n\n swiper.setTranslate(data.currentTranslate);\n}","import { now, nextTick } from '../../shared/utils.js';\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n const {\n params,\n touches,\n rtlTranslate: rtl,\n slidesGrid,\n enabled\n } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n\n data.allowTouchCallbacks = false;\n\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n\n data.isMoved = false;\n data.startMoving = false;\n return;\n } // Return Grab Cursor\n\n\n if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(false);\n } // Time diff\n\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime; // Tap, doubleTap, Click\n\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\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\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\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n let currentPos;\n\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({\n currentPos\n });\n return;\n } // Find current slide\n\n\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n\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\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\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n\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 } // Find current slide size\n\n\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\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\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\n const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\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}","export default function onResize() {\n const swiper = this;\n const {\n params,\n el\n } = swiper;\n if (el && el.offsetWidth === 0) return; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n } // Save locks\n\n\n const {\n allowSlideNext,\n allowSlidePrev,\n snapGrid\n } = swiper; // Disable locks on resize\n\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateSlidesClasses();\n\n if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) {\n swiper.slideTo(swiper.slides.length - 1, 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 swiper.autoplay.run();\n } // Return locks after resize\n\n\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\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\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n } // eslint-disable-next-line\n\n\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\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\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';\nlet dummyEventAttached = false;\n\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const {\n params,\n touchEvents,\n el,\n wrapperEl,\n device,\n support\n } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method; // Touch Events\n\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener = touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](touchEvents.move, swiper.onTouchMove, support.passiveListener ? {\n passive: false,\n capture\n } : capture);\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n } // Prevent Links Clicks\n\n\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n } // Resize handler\n\n\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\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const {\n params,\n support\n } = swiper;\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents\n};","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const {\n activeIndex,\n initialized,\n loopedSlides = 0,\n params,\n $el\n } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return; // Get breakpoint for window width and update parameters\n\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\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(`${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`);\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n\n if (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column' || !breakpointParams.grid.fill && params.grid.fill === 'column') {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n\n swiper.emitContainerClasses();\n } // Toggle navigation, pagination, scrollbar\n\n\n ['navigation', 'pagination', 'scrollbar'].forEach(prop => {\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\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\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\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\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\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\n return {\n value: point,\n point\n };\n });\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n\n for (let i = 0; i < points.length; i += 1) {\n const {\n point,\n value\n } = points[i];\n\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\n return breakpoint || 'max';\n}","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\nexport default {\n setBreakpoint,\n getBreakpoint\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}\n\nexport default function addClasses() {\n const swiper = this;\n const {\n classNames,\n params,\n rtl,\n $el,\n device,\n support\n } = swiper; // prettier-ignore\n\n const suffixes = prepareClasses(['initialized', params.direction, {\n 'pointer-events': !support.touch\n }, {\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.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}","export default function removeClasses() {\n const swiper = this;\n const {\n $el,\n classNames\n } = swiper;\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\nexport default {\n addClasses,\n removeClasses\n};","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n\n function onReady() {\n if (callback) callback();\n }\n\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n\n if (sizes) {\n image.sizes = sizes;\n }\n\n if (srcset) {\n image.srcset = srcset;\n }\n\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);\n }\n}","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\nexport default {\n loadImage,\n preloadImages\n};","function checkOverflow() {\n const swiper = this;\n const {\n isLocked: wasLocked,\n params\n } = swiper;\n const {\n slidesOffsetBefore\n } = params;\n\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\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default {\n checkOverflow\n};","export default {\n init: true,\n direction: 'horizontal',\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 // 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: 0,\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 // Images\n preloadImages: true,\n updateOnImagesReady: true,\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopedSlidesLimit: true,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: 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 slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n // Callbacks\n runCallbacksOnInit: true,\n // Internals\n _emitClasses: false\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\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 && params[moduleParamName] === true) {\n params[moduleParamName] = {\n auto: true\n };\n }\n\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n\n if (params[moduleParamName] === true) {\n params[moduleParamName] = {\n enabled: true\n };\n }\n\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n\n if (!params[moduleParamName]) params[moduleParamName] = {\n enabled: false\n };\n extend(allModulesParams, obj);\n };\n}","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } 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 images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.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 images\n};\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n\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\n if (!params) params = {};\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each(containerEl => {\n const newParams = extend({}, params, {\n el: containerEl\n });\n swipers.push(new Swiper(newParams));\n }); // eslint-disable-next-line no-constructor-return\n\n return swipers;\n } // Swiper Instance\n\n\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\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n swiper.modules.forEach(mod => {\n mod({\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 }); // Extend defaults with modules params\n\n const swiperParams = extend({}, defaults, allModulesParams); // Extend defaults with passed params\n\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params); // add event listeners\n\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\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n } // Save Dom lib\n\n\n swiper.$ = $; // Extend Swiper\n\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\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\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 // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n // Touch Events\n touchEvents: function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3]\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2]\n };\n return swiper.support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;\n }(),\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: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined\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'); // Init\n\n if (swiper.params.init) {\n swiper.init();\n } // Return app instance\n // eslint-disable-next-line no-constructor-return\n\n\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n\n swiper.emit('disable');\n }\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\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\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\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each(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\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\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n\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\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\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\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const {\n snapGrid,\n params\n } = swiper; // Breakpoints\n\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\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\n let translated;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n\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 translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (!translated) {\n setTranslate();\n }\n }\n\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n\n if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {\n return swiper;\n }\n\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}${currentDirection}`).addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n swiper.params.direction = newDirection;\n swiper.slides.each(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\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\n if (swiper.rtl) {\n swiper.$el.addClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n\n swiper.update();\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true; // Find el\n\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector())); // Children needs to return slot items\n\n res.children = options => $el.children(options);\n\n return res;\n }\n\n if (!$el.children) {\n return $($el).children(getWrapperSelector());\n }\n\n return $el.children(getWrapperSelector());\n }; // Find Wrapper\n\n\n let $wrapperEl = getWrapper();\n\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each(slideEl => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box'\n });\n return true;\n }\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'); // Set breakpoint\n\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n } // Add Classes\n\n\n swiper.addClasses(); // Create loop\n\n if (swiper.params.loop) {\n swiper.loopCreate();\n } // Update size\n\n\n swiper.updateSize(); // Update slides\n\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n } // Set Grab Cursor\n\n\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n } // Slide To Initial Slide\n\n\n if (swiper.params.loop) {\n swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit, false, true);\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n } // Attach events\n\n\n swiper.attachEvents(); // Init Flag\n\n swiper.initialized = true; // Emit\n\n swiper.emit('init');\n swiper.emit('afterInit');\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const {\n params,\n $el,\n $wrapperEl,\n slides\n } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy'); // Init Flag\n\n swiper.initialized = false; // Detach events\n\n swiper.detachEvents(); // Destroy loop\n\n if (params.loop) {\n swiper.loopDestroy();\n } // Cleanup styles\n\n\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n\n if (slides && slides.length) {\n slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy'); // Detach emitter events\n\n Object.keys(swiper.eventsListeners).forEach(eventName => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n\n swiper.destroyed = true;\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach(m => Swiper.installModule(m));\n return Swiper;\n }\n\n Swiper.installModule(module);\n return Swiper;\n }\n\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;","import $ from '../../shared/dom.js';\nimport { 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 swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: []\n };\n\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n\n const $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $(`<div class=\"${swiper.params.slideClass}\" data-swiper-slide-index=\"${index}\">${slide}</div>`);\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n if (params.cache) swiper.virtual.cache[index] = $slideEl;\n return $slideEl;\n }\n\n function update(force) {\n const {\n slidesPerView,\n slidesPerGroup,\n centeredSlides\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\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\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\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 = slidesPerGroup + addSlidesBefore;\n }\n\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n\n emit('virtualUpdate');\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.css(offsetProp, `${offset}px`);\n }\n\n swiper.updateProgress();\n emit('virtualUpdate');\n return;\n }\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\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n\n return slidesToRender;\n }()\n });\n\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n } else {\n emit('virtualUpdate');\n }\n\n return;\n }\n\n const prependIndexes = [];\n const appendIndexes = [];\n\n if (force) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`).remove();\n }\n }\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n if (i >= from && i <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i);\n } else {\n if (i > previousTo) appendIndexes.push(i);\n if (i < previousFrom) prependIndexes.push(i);\n }\n }\n }\n\n appendIndexes.forEach(index => {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes.sort((a, b) => b - a).forEach(index => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n onRendered();\n }\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\n update(true);\n }\n\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n\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\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\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.attr('data-swiper-slide-index');\n\n if (cachedElIndex) {\n $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + numberOfNewSlides);\n }\n\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n\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\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\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\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n\n function removeAllSlides() {\n swiper.virtual.slides = [];\n\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n\n update(true);\n swiper.slideTo(0, 0);\n }\n\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.slides = swiper.params.virtual.slides;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n\n if (!swiper.params.initialSlide) {\n update();\n }\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n\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\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}","/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.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\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\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; // Directions locks\n\n if (!swiper.allowSlideNext && (swiper.isHorizontal() && isArrowRight || swiper.isVertical() && isArrowDown || isPageDown)) {\n return false;\n }\n\n if (!swiper.allowSlidePrev && (swiper.isHorizontal() && isArrowLeft || swiper.isVertical() && isArrowUp || isPageUp)) {\n return false;\n }\n\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n\n if (document.activeElement && document.activeElement.nodeName && (document.activeElement.nodeName.toLowerCase() === 'input' || document.activeElement.nodeName.toLowerCase() === 'textarea')) {\n return undefined;\n }\n\n if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) {\n let inView = false; // Check that swiper should be inside of visible area of window\n\n if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].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\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\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\n inView = true;\n }\n }\n\n if (!inView) return undefined;\n }\n\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n }\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\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n\n emit('keyPress', kc);\n return undefined;\n }\n\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\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}","/* eslint-disable consistent-return */\nimport { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\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 }\n });\n swiper.mousewheel = {\n enabled: false\n };\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n\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\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n // Legacy\n\n if ('detail' in e) {\n sY = e.detail;\n }\n\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n } // side scrolling on FF with DOMMouseScroll\n\n\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\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 } // Fall-back if spin cannot be determined\n\n\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\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\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 } // 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\n\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\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\n\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 } // If you got here is because an animation has been triggered so store the current time\n\n\n lastScrollTime = new window.Date().getTime(); // Return false as a default\n\n return false;\n }\n\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n\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\n return false;\n }\n\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n const params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n const data = normalize(e);\n\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\n if (delta === 0) return true;\n if (params.invert) delta = -delta; // Get the scroll positions\n\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate(); // 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\n disableParentSwiper = swiper.params.loop ? true : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\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 }; // Keep the most recent events\n\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); // 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\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 } // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n\n\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\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\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n\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\n if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {\n swiper.updateSlidesClasses();\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\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\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 } // Emit event\n\n\n if (!ignoreWheelEvents) emit('scroll', e); // Stop autoplay\n\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); // Return page scroll on edge positions\n\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n\n if (e.preventDefault) e.preventDefault();else e.returnValue = false;\n return false;\n }\n\n function events(method) {\n let target = swiper.$el;\n\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n\n target[method]('mouseenter', handleMouseEnter);\n target[method]('mouseleave', handleMouseLeave);\n target[method]('wheel', handle);\n }\n\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n\n if (swiper.mousewheel.enabled) return false;\n events('on');\n swiper.mousewheel.enabled = true;\n return true;\n }\n\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n\n if (!swiper.mousewheel.enabled) return false;\n events('off');\n swiper.mousewheel.enabled = false;\n return true;\n }\n\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n\n if (swiper.mousewheel.enabled) disable();\n });\n Object.assign(swiper.mousewheel, {\n enable,\n disable\n });\n}","import { getDocument } from 'ssr-window';\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach(key => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n\n return params;\n}","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.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 $nextEl: null,\n prevEl: null,\n $prevEl: null\n };\n\n function getEl(el) {\n let $el;\n\n if (el) {\n $el = $(el);\n\n if (swiper.params.uniqueNavElements && typeof el === 'string' && $el.length > 1 && swiper.$el.find(el).length === 1) {\n $el = swiper.$el.find(el);\n }\n }\n\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\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\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\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 const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0]\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\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 const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const {\n $nextEl,\n $prevEl\n } = swiper.navigation;\n const targetEl = e.target;\n\n if (swiper.params.navigation.hideOnClick && !$(targetEl).is($prevEl) && !$(targetEl).is($nextEl)) {\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\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.navigation.navigationDisabledClass);\n init();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.navigation.navigationDisabledClass);\n destroy();\n };\n\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy\n });\n}","export default function classesToSelector(classes = '') {\n return `.${classes.trim().replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.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 $el: null,\n bullets: []\n };\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return !swiper.params.pagination.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0;\n }\n\n function setSideBullets($bulletEl, position) {\n const {\n bulletActiveClass\n } = swiper.params.pagination;\n $bulletEl[position]().addClass(`${bulletActiveClass}-${position}`)[position]().addClass(`${bulletActiveClass}-${position}-${position}`);\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 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;\n const $el = swiper.pagination.$el; // Current/Total\n\n let current;\n const total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.loop) {\n current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);\n\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n } // Types\n\n\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\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(swiper.isHorizontal() ? 'width' : 'height', `${bulletSize * (params.dynamicMainBullets + 4)}px`);\n\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\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\n bullets.removeClass(['', '-next', '-next-next', '-prev', '-prev-prev', '-main'].map(suffix => `${params.bulletActiveClass}${suffix}`).join(' '));\n\n if ($el.length > 1) {\n bullets.each(bullet => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n\n bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\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.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n\n if (params.type === 'fraction') {\n $el.find(classesToSelector(params.currentClass)).text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n\n if (params.type === 'progressbar') {\n let progressbarDirection;\n\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n\n $el.find(classesToSelector(params.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed);\n }\n\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](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 const $el = swiper.pagination.$el;\n let paginationHTML = '';\n\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;\n\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.loop && numberOfBullets > slidesLength) {\n numberOfBullets = slidesLength;\n }\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}\"></${params.bulletElement}>`;\n }\n }\n\n $el.html(paginationHTML);\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\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 = `<span class=\"${params.currentClass}\"></span>` + ' / ' + `<span class=\"${params.totalClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = `<span class=\"${params.progressbarFillClass}\"></span>`;\n }\n\n $el.html(paginationHTML);\n }\n\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\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 = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el); // check if it belongs to another nested Swiper\n\n if ($el.length > 1) {\n $el = $el.filter(el => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0]\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass) swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\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 (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const {\n $el\n } = swiper.pagination;\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const {\n $el\n } = swiper.pagination;\n\n if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && $el && $el.length > 0 && !$(targetEl).hasClass(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.hasClass(swiper.params.pagination.hiddenClass);\n\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n init();\n render();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n\n if (swiper.pagination.$el) {\n swiper.pagination.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n }\n\n destroy();\n };\n\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy\n });\n}","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { 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 $el: null,\n $dragEl: null\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const {\n scrollbar,\n rtlTranslate: rtl,\n progress\n } = swiper;\n const {\n $dragEl,\n $el\n } = scrollbar;\n const params = swiper.params.scrollbar;\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n\n if (rtl) {\n newPos = -newPos;\n\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\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\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[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n divider = swiper.size / (swiper.virtualSize + swiper.params.slidesOffsetBefore - (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientX : e.clientX;\n }\n\n return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].clientY : e.clientY;\n }\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) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\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\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[0] || e.target === $dragEl ? getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;\n e.preventDefault();\n e.stopPropagation();\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n clearTimeout(dragTimeout);\n $el.transition(0);\n\n if (params.hide) {\n $el.css('opacity', 1);\n }\n\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n\n emit('scrollbarDragStart', e);\n }\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.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\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\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n\n emit('scrollbarDragEnd', e);\n\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const {\n scrollbar,\n touchEventsTouch,\n touchEventsDesktop,\n params,\n support\n } = swiper;\n const $el = scrollbar.$el;\n if (!$el) return;\n const target = $el[0];\n const activeListener = support.passiveListener && params.passiveListeners ? {\n passive: false,\n capture: false\n } : false;\n const passiveListener = support.passiveListener && params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\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 = $(params.el);\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {\n $el = $swiperEl.find(params.el);\n }\n\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n\n if ($dragEl.length === 0) {\n $dragEl = $(`<div class=\"${swiper.params.scrollbar.dragClass}\"></div>`);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0]\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n\n function destroy() {\n const params = swiper.params.scrollbar;\n const $el = swiper.scrollbar.$el;\n\n if ($el) {\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n }\n\n disableDraggable();\n }\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\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n\n init();\n updateSize();\n setTranslate();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n\n destroy();\n };\n\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy\n });\n}","import $ from '../../shared/dom.js';\nexport default function Parallax({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n parallax: {\n enabled: false\n }\n });\n\n const setTransform = (el, progress) => {\n const {\n rtl\n } = swiper;\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\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\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n };\n\n const setTranslate = () => {\n const {\n $el,\n slides,\n progress,\n snapGrid\n } = swiper;\n $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(el => {\n setTransform(el, slideProgress);\n });\n });\n };\n\n const setTransition = (duration = swiper.params.speed) => {\n const {\n $el\n } = swiper;\n $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(parallaxEl => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\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 { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { 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 gesturesEnabled;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const gesture = {\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\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n emit('zoomChange', value, imageEl, slideEl);\n }\n\n scale = value;\n }\n\n });\n\n function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n } // Events\n\n\n function onGestureStart(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n\n if (!support.gestures) {\n if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n\n isScaling = true;\n }\n\n function onGestureChange(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {\n return;\n }\n\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') onGestureStart(e);\n return;\n }\n\n if (support.gestures) {\n zoom.scale = e.scale * currentScale;\n } else {\n zoom.scale = gesture.scaleMove / gesture.scaleStart * currentScale;\n }\n\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function onGestureEnd(e) {\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n\n if (!support.gestures) {\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n\n if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !device.android) {\n return;\n }\n\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n }\n\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n\n function onTouchMove(e) {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n } // Define if we need image drag\n\n\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 = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\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\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\n if (e.cancelable) {\n e.preventDefault();\n }\n\n e.stopPropagation();\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n } // Velocity\n\n\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.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\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; // Fix duration\n\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; // Define if we need image drag\n\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.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n }\n\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (e && e.target) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n }\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n\n gesture.$slideEl.addClass(`${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\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].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\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n\n gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n\n gesture.$imageEl = gesture.$slideEl.find(`.${params.containerClass}`).eq(0).find('picture, img, svg, canvas, .swiper-zoom-target').eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0 || !gesture.$imageWrapEl || gesture.$imageWrapEl.length === 0) return;\n\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n\n zoom.scale = 1;\n currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n } // Toggle Zoom\n\n\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n\n function getListeners() {\n const support = swiper.support;\n const passiveListener = swiper.touchEvents.start === 'touchstart' && support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n const activeListenerWithCapture = support.passiveListener ? {\n passive: false,\n capture: true\n } : true;\n return {\n passiveListener,\n activeListenerWithCapture\n };\n }\n\n function getSlideSelector() {\n return `.${swiper.params.slideClass}`;\n }\n\n function toggleGestures(method) {\n const {\n passiveListener\n } = getListeners();\n const slideSelector = getSlideSelector();\n swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n }\n\n function enableGestures() {\n if (gesturesEnabled) return;\n gesturesEnabled = true;\n toggleGestures('on');\n }\n\n function disableGestures() {\n if (!gesturesEnabled) return;\n gesturesEnabled = false;\n toggleGestures('off');\n } // Attach/Detach Events\n\n\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const support = swiper.support;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\n\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n zoom.enabled = false;\n const {\n passiveListener,\n activeListenerWithCapture\n } = getListeners();\n const slideSelector = getSlideSelector(); // Scale image\n\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, onGestureChange, activeListenerWithCapture);\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, onGestureEnd, passiveListener);\n }\n } // Move image\n\n\n swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, onTouchMove, activeListenerWithCapture);\n }\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}","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nexport default function Lazy({\n swiper,\n extendParams,\n on,\n emit\n}) {\n extendParams({\n lazy: {\n checkInView: false,\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n scrollingElement: '',\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader'\n }\n });\n swiper.lazy = {};\n let scrollHandlerAttached = false;\n let initialImageLoaded = false;\n\n function loadInSlide(index, loadInDuplicate = true) {\n const params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n const $slideEl = isVirtual ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`) : swiper.slides.eq(index);\n const $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`);\n\n if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {\n $images.push($slideEl[0]);\n }\n\n if ($images.length === 0) return;\n $images.each(imageEl => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n const $pictureEl = $imageEl.parent('picture');\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;\n\n if (background) {\n $imageEl.css('background-image', `url(\"${background}\")`);\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n\n if ($pictureEl.length) {\n $pictureEl.children('source').each(sourceEl => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\n }\n\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find(`.${params.preloaderClass}`).remove();\n\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`);\n loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`);\n loadInSlide(duplicatedSlide.index(), false);\n }\n }\n\n emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n }\n\n function load() {\n const {\n $wrapperEl,\n params: swiperParams,\n slides,\n activeIndex\n } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n let slidesPerView = swiperParams.slidesPerView;\n\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`).length) {\n return true;\n }\n } else if (slides[index]) return true;\n\n return false;\n }\n\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n\n return $(slideEl).index();\n }\n\n if (!initialImageLoaded) initialImageLoaded = true;\n\n if (swiper.params.watchSlidesProgress) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each(slideEl => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n loadInSlide(activeIndex);\n }\n\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {\n const amount = params.loadPrevNextAmount;\n const spv = Math.ceil(slidesPerView);\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); // Next Slides\n\n for (let i = activeIndex + spv; i < maxIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n } // Prev Slides\n\n\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide));\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n }\n }\n }\n\n function checkInViewOnLoad() {\n const window = getWindow();\n if (!swiper || swiper.destroyed) return;\n const $scrollElement = swiper.params.lazy.scrollingElement ? $(swiper.params.lazy.scrollingElement) : $(window);\n const isWindow = $scrollElement[0] === window;\n const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n const swiperOffset = swiper.$el.offset();\n const {\n rtlTranslate: rtl\n } = swiper;\n let inView = false;\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];\n\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n\n if (point[0] >= 0 && point[0] <= scrollElementWidth && point[1] >= 0 && point[1] <= scrollElementHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n\n inView = true;\n }\n }\n\n const passiveListener = swiper.touchEvents.start === 'touchstart' && swiper.support.passiveListener && swiper.params.passiveListeners ? {\n passive: true,\n capture: false\n } : false;\n\n if (inView) {\n load();\n $scrollElement.off('scroll', checkInViewOnLoad, passiveListener);\n } else if (!scrollHandlerAttached) {\n scrollHandlerAttached = true;\n $scrollElement.on('scroll', checkInViewOnLoad, passiveListener);\n }\n }\n\n on('beforeInit', () => {\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n });\n on('init', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('scroll', () => {\n if (swiper.params.freeMode && swiper.params.freeMode.enabled && !swiper.params.freeMode.sticky) {\n load();\n }\n });\n on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('transitionStart', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n }\n });\n on('transitionEnd', () => {\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('slideChange', () => {\n const {\n lazy,\n cssMode,\n watchSlidesProgress,\n touchReleaseOnEdges,\n resistanceRatio\n } = swiper.params;\n\n if (lazy.enabled && (cssMode || watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0))) {\n load();\n }\n });\n on('destroy', () => {\n if (!swiper.$el) return;\n swiper.$el.find(`.${swiper.params.lazy.loadingClass}`).removeClass(swiper.params.lazy.loadingClass);\n });\n Object.assign(swiper.lazy, {\n load,\n loadInSlide\n });\n}","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { 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\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\n while (maxIndex - minIndex > 1) {\n guess = maxIndex + minIndex >> 1;\n\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n\n return maxIndex;\n };\n }();\n\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1; // 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\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0; // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1; // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n\n return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];\n };\n\n return this;\n } // xxx: for now i will just save one spline function to to\n\n\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop ? new LinearSpline(swiper.slidesGrid, c.slidesGrid) : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n\n function setControlledTranslate(c) {\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\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c); // 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\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\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\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n\n if (duration !== 0) {\n c.transitionStart();\n\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n\n c.transitionEnd();\n });\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\n function removeSpline() {\n if (!swiper.controller.control) return;\n\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n\n on('beforeInit', () => {\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) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition\n });\n}","import classesToSelector from '../../shared/classes-to-selector.js';\nimport $ from '../../shared/dom.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\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n\n function addElId($el, id) {\n $el.attr('id', id);\n }\n\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n\n function enableEl($el) {\n $el.attr('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\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (swiper.pagination && $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))) {\n $targetEl[0].click();\n }\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\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.each(bulletEl => {\n const $bulletEl = $(bulletEl);\n\n if (swiper.params.pagination.clickable) {\n makeElFocusable($bulletEl);\n\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel($bulletEl, params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1));\n }\n }\n\n if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) {\n $bulletEl.attr('aria-current', 'true');\n } else {\n $bulletEl.removeAttr('aria-current');\n }\n });\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n\n const handlePointerUp = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!swiper.destroyed) {\n swiper.a11y.clicked = false;\n }\n });\n });\n };\n\n const handleFocus = e => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}`);\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\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n\n const initSlides = () => {\n const params = swiper.params.a11y;\n\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n\n if (params.slideRole) {\n addElRole($(swiper.slides), params.slideRole);\n }\n\n const slidesLength = swiper.params.loop ? swiper.slides.filter(el => !el.classList.contains(swiper.params.slideDuplicateClass)).length : swiper.slides.length;\n\n if (params.slideLabelMessage) {\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop ? parseInt($slideEl.attr('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\n const init = () => {\n const params = swiper.params.a11y;\n swiper.$el.append(liveRegion); // Container\n\n const $containerEl = swiper.$el;\n\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n } // Wrapper\n\n\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = params.id || $wrapperEl.attr('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); // Slide\n\n initSlides(); // Navigation\n\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.on('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.on('focus', handleFocus, true);\n swiper.$el.on('pointerdown', handlePointerDown, true);\n swiper.$el.on('pointerup', handlePointerUp, true);\n };\n\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n let $nextEl;\n let $prevEl;\n\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n } // Pagination\n\n\n if (hasClickablePagination()) {\n swiper.pagination.$el.off('keydown', classesToSelector(swiper.params.pagination.bulletClass), onEnterOrSpaceKey);\n } // Tab focus\n\n\n swiper.$el.off('focus', handleFocus, true);\n swiper.$el.off('pointerdown', handlePointerDown, true);\n swiper.$el.off('pointerup', handlePointerUp, true);\n }\n\n on('beforeInit', () => {\n liveRegion = $(`<span class=\"${swiper.params.a11y.notificationClass}\" aria-live=\"assertive\" aria-atomic=\"true\"></span>`);\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}","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\n const slugify = text => {\n return text.toString().replace(/\\s+/g, '-').replace(/[^\\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');\n };\n\n const getPathValues = urlOverride => {\n const window = getWindow();\n let location;\n\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\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\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n\n const slide = swiper.slides.eq(index);\n let value = slugify(slide.attr('data-history'));\n\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}/${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key}/${value}`;\n }\n\n if (swiper.params.history.keepQuery) {\n value += location.search;\n }\n\n const currentState = window.history.state;\n\n if (currentState && currentState.value === value) {\n return;\n }\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\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.eq(i);\n const slideHistory = slugify(slide.attr('data-history'));\n\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, paths.value, false);\n };\n\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) return;\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n\n const destroy = () => {\n const window = getWindow();\n\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\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}","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.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 }\n });\n\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`).index();\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n };\n\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n\n if (swiper.params.hashNavigation.replaceState && window.history && window.history.replaceState) {\n window.history.replaceState(null, null, `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '');\n emit('hashSet');\n } else {\n const slide = swiper.slides.eq(swiper.activeIndex);\n const hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n emit('hashSet');\n }\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\n if (hash) {\n const speed = 0;\n\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', onHashChange);\n }\n };\n\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', onHashChange);\n }\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}","/* eslint no-underscore-dangle: \"off\" */\n\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick } from '../../shared/utils.js';\nexport default function Autoplay({\n swiper,\n extendParams,\n on,\n emit\n}) {\n let timeout;\n swiper.autoplay = {\n running: false,\n paused: false\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\n function run() {\n if (!swiper.size) {\n swiper.autoplay.running = false;\n swiper.autoplay.paused = false;\n return;\n }\n\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n\n if (swiper.params.cssMode && swiper.autoplay.running) run();else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n\n function onVisibilityChange() {\n const document = getDocument();\n\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n emit('autoplayPause');\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach(event => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n run();\n }\n\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n\n if (swiper.autoplay.running) {\n stop();\n }\n\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop\n });\n}","import { isObject } from '../../shared/utils.js';\nimport $ from '../../shared/dom.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\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).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix(); // eslint-disable-next-line\n\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n\n const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`).eq(0).index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;\n }\n\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\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 } 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\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\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; // Activate thumbs\n\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n\n if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`).addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n\n if (thumbsSwiper.params.loop) {\n if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {\n thumbsSwiper.loopFix(); // eslint-disable-next-line\n\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n } // Find actual thumbs index to slide to\n\n\n const prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n const nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`).eq(0).index();\n\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\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) {// newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n\n on('beforeInit', () => {\n const {\n thumbs\n } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\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\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n Object.assign(swiper.thumbs, {\n init,\n update\n });\n}","import { 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\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\n function onTouchMove() {\n const {\n touchEventsData: data,\n touches\n } = swiper; // Velocity\n\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime\n });\n }\n\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now()\n });\n }\n\n function onTouchEnd({\n currentPos\n }) {\n const {\n params,\n $wrapperEl,\n rtlTranslate: rtl,\n snapGrid,\n touchEventsData: data\n } = swiper; // Time diff\n\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\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\n return;\n }\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\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\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\n\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\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\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\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\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\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\n newPosition = -newPosition;\n }\n\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n } // Fix duration\n\n\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\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\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\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 $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\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\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\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\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\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\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\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n };\n\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const {\n slidesPerGroup,\n spaceBetween\n } = swiper.params;\n const {\n rows,\n fill\n } = swiper.params.grid; // Set slides order\n\n let newSlideOrderIndex;\n let column;\n let row;\n\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.css({\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex\n });\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n\n if (column > numFullColumns || column === numFullColumns && row === rows - 1) {\n row += 1;\n\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\n slide.css(getDirectionLabel('margin-top'), row !== 0 ? spaceBetween && `${spaceBetween}px` : '');\n };\n\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const {\n spaceBetween,\n centeredSlides,\n roundLengths\n } = swiper.params;\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.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px`\n });\n\n if (centeredSlides) {\n snapGrid.splice(0, snapGrid.length);\n const newSlidesGrid = [];\n\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\n snapGrid.push(...newSlidesGrid);\n }\n };\n\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize\n };\n}","export default function appendSlide(slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n}","export default function prependSlide(slides) {\n const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n let newActiveIndex = activeIndex + 1;\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n\n swiper.slideTo(newActiveIndex, 0, false);\n}","export default function addSlide(index, slides) {\n const swiper = this;\n const {\n $wrapperEl,\n params,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n const baseLength = swiper.slides.length;\n\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n const slidesBuffer = [];\n\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n\n newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n $wrapperEl.append(slidesBuffer[i]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\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 removeSlide(slidesIndexes) {\n const swiper = this;\n const {\n params,\n $wrapperEl,\n activeIndex\n } = swiper;\n let activeIndexBuffer = activeIndex;\n\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n\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.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\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 removeAllSlides() {\n const swiper = this;\n const slidesIndexes = [];\n\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n\n swiper.removeSlide(slidesIndexes);\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 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\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\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\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return; // remove shadows\n\n swiper.slides.each(slideEl => {\n const $slideEl = swiper.$(slideEl);\n $slideEl.find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').remove();\n }); // create new one\n\n recreateShadows();\n }\n });\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n}","export default function effectTarget(effectParams, $slideEl) {\n if (effectParams.transformEl) {\n return $slideEl.find(effectParams.transformEl).css({\n 'backface-visibility': 'hidden',\n '-webkit-backface-visibility': 'hidden'\n });\n }\n\n return $slideEl;\n}","export default function effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides\n}) {\n const {\n slides,\n activeIndex,\n $wrapperEl\n } = swiper;\n\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let $transitionEndTarget;\n\n if (allSlides) {\n $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n } else {\n $transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex);\n }\n\n $transitionEndTarget.transitionEnd(() => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\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';\nexport default function EffectFade({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n fadeEffect: {\n crossFade: false,\n transformEl: null\n }\n });\n\n const setTranslate = () => {\n const {\n slides\n } = swiper;\n const params = swiper.params.fadeEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset = $slideEl[0].swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n\n const slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.css({\n opacity: slideOpacity\n }).transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.fadeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\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 $ from '../../shared/dom.js';\nimport effectInit from '../../shared/effect-init.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\n const createSlideShadows = ($slideEl, progress, isHorizontal) => {\n let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}\"></div>`);\n $slideEl.append(shadowBefore);\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = $(`<div class=\"swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}\"></div>`);\n $slideEl.append(shadowAfter);\n }\n\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n };\n\n const recreateShadows = () => {\n // create new ones\n const isHorizontal = swiper.isHorizontal();\n swiper.slides.each(slideEl => {\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows($(slideEl), progress, isHorizontal);\n });\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\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $wrapperEl.append($cubeShadowEl);\n }\n\n $cubeShadowEl.css({\n height: `${swiperWidth}px`\n });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('<div class=\"swiper-cube-shadow\"></div>');\n $el.append($cubeShadowEl);\n }\n }\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let slideIndex = i;\n\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n\n const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n\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\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n\n $slideEl.transform(transform);\n\n if (params.slideShadows) {\n createSlideShadows($slideEl, progress, isHorizontal);\n }\n }\n\n $wrapperEl.css({\n '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n 'transform-origin': `50% 50% -${swiperSize / 2}px`\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.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.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`);\n }\n }\n\n const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n $wrapperEl.transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`);\n $wrapperEl[0].style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n };\n\n const setTransition = duration => {\n const {\n $el,\n slides\n } = swiper;\n slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\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 $ from './dom.js';\nexport default function createShadow(params, $slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n if (!$shadowEl.length) {\n $shadowEl = $(`<div class=\"swiper-slide-shadow${side ? `-${side}` : ''}\"></div>`);\n $shadowContainer.append($shadowEl);\n }\n\n return $shadowEl;\n}","import $ from '../../shared/dom.js';\nimport 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';\nexport default function EffectFlip({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n transformEl: null\n }\n });\n\n const createSlideShadows = ($slideEl, progress, params) => {\n let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if (shadowBefore.length === 0) {\n shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n\n if (shadowAfter.length === 0) {\n shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n };\n\n const recreateShadows = () => {\n // Set shadows\n const params = swiper.params.flipEffect;\n swiper.slides.each(slideEl => {\n const $slideEl = $(slideEl);\n let progress = $slideEl[0].progress;\n\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n\n createSlideShadows($slideEl, progress, params);\n });\n };\n\n const setTranslate = () => {\n const {\n slides,\n rtlTranslate: rtl\n } = swiper;\n const params = swiper.params.flipEffect;\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let progress = $slideEl[0].progress;\n\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n\n const offset = $slideEl[0].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\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\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (params.slideShadows) {\n createSlideShadows($slideEl, progress, params);\n }\n\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.flipEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\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 createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.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 transformEl: null\n }\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; // Each slide offset from center\n\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].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; // var rotateZ = 0\n\n let translateZ = -translate * Math.abs(offsetMultiplier);\n let stretch = params.stretch; // Allow percentage to make a relative stretch for responsive sliders\n\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = parseFloat(params.stretch) / 100 * slideSize;\n }\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); // Fix for ultra small values\n\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.transform(slideTransform);\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');\n\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n }\n\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n }\n\n if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.coverflowEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);\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';\nexport default function EffectCreative({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n creativeEffect: {\n transformEl: null,\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\n const getTranslateValue = value => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\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\n if (isCenteredSlides) {\n const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n $wrapperEl.transform(`translateX(calc(50% - ${margin}px))`);\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max($slideEl[0].progress, -params.limitProgress), params.limitProgress);\n let originalProgress = progress;\n\n if (!isCenteredSlides) {\n originalProgress = Math.min(Math.max($slideEl[0].originalProgress, -params.limitProgress), params.limitProgress);\n }\n\n const offset = $slideEl[0].swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1\n };\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 } // set translate\n\n\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(progress * multiplier)}))`;\n }); // set rotates\n\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n $slideEl[0].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}`; // Set shadows\n\n if (custom && data.shadow || !custom) {\n let $shadowEl = $slideEl.children('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0 && data.shadow) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) {\n const shadowOpacity = params.shadowPerProgress ? progress * (1 / params.limitProgress) : progress;\n $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform).css({\n opacity: opacityString\n });\n\n if (data.origin) {\n $targetEl.css('transform-origin', data.origin);\n }\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.creativeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl,\n allSlides: true\n });\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 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';\nexport default function EffectCards({\n swiper,\n extendParams,\n on\n}) {\n extendParams({\n cardsEffect: {\n slideShadows: true,\n transformEl: null,\n rotate: true,\n perSlideRotate: 2,\n perSlideOffset: 8\n }\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\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = $slideEl[0].swiperSlideOffset;\n\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`);\n }\n\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\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\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\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\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\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\n if (params.slideShadows) {\n // Set shadows\n let $shadowEl = $slideEl.find('.swiper-slide-shadow');\n\n if ($shadowEl.length === 0) {\n $shadowEl = createShadow(params, $slideEl);\n }\n\n if ($shadowEl.length) $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = duration => {\n const {\n transformEl\n } = swiper.params.cardsEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n effectVirtualTransitionEnd({\n swiper,\n duration,\n transformEl\n });\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}","/**\n * Swiper 8.4.7\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: January 30, 2023\n */\n\nimport Swiper from './core/core.js';\nexport { default as Swiper, default } from './core/core.js';\nimport Virtual from './modules/virtual/virtual.js';\nimport Keyboard from './modules/keyboard/keyboard.js';\nimport Mousewheel from './modules/mousewheel/mousewheel.js';\nimport Navigation from './modules/navigation/navigation.js';\nimport Pagination from './modules/pagination/pagination.js';\nimport Scrollbar from './modules/scrollbar/scrollbar.js';\nimport Parallax from './modules/parallax/parallax.js';\nimport Zoom from './modules/zoom/zoom.js';\nimport Lazy from './modules/lazy/lazy.js';\nimport Controller from './modules/controller/controller.js';\nimport A11y from './modules/a11y/a11y.js';\nimport History from './modules/history/history.js';\nimport HashNavigation from './modules/hash-navigation/hash-navigation.js';\nimport Autoplay from './modules/autoplay/autoplay.js';\nimport Thumbs from './modules/thumbs/thumbs.js';\nimport FreeMode from './modules/free-mode/free-mode.js';\nimport Grid from './modules/grid/grid.js';\nimport Manipulation from './modules/manipulation/manipulation.js';\nimport EffectFade from './modules/effect-fade/effect-fade.js';\nimport EffectCube from './modules/effect-cube/effect-cube.js';\nimport EffectFlip from './modules/effect-flip/effect-flip.js';\nimport EffectCoverflow from './modules/effect-coverflow/effect-coverflow.js';\nimport EffectCreative from './modules/effect-creative/effect-creative.js';\nimport EffectCards from './modules/effect-cards/effect-cards.js';\n\n// Swiper Class\nconst modules = [Virtual, Keyboard, Mousewheel, Navigation, Pagination, Scrollbar, Parallax, Zoom, Lazy, Controller, A11y, History, HashNavigation, Autoplay, Thumbs, FreeMode, Grid, Manipulation, EffectFade, EffectCube, EffectFlip, EffectCoverflow, EffectCreative, EffectCards];\nSwiper.use(modules);\n","// import Swiper bundle with all modules installed\nimport { Swiper as SwiperV8 } from 'swiper/bundle';\nimport { isString, isNodeList, isElementExist, getAllElements, createUid } from './../shared/utils';\n\n('use strict');\n\n// 設置 CSS 樣式\nconst setCss = (target, style, css) => {\n if (!target) return;\n\n // 若是 NodeList 則需使用 foreach set css\n if (isNodeList(target)) target.forEach(el => (el.style[style] = css));\n else target.style[style] = css;\n};\n\nclass Article4 {\n constructor(el, options = {}) {\n if (!isString(el) || !isElementExist(el)) return;\n\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n const { SETTINGS } = fesdDB.article4;\n\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n\n this.#init();\n }\n\n #init() {\n const { elements } = this;\n\n elements.forEach(parent => {\n parent.querySelectorAll('._article').forEach(el => {\n el.article = {};\n el.article.parent = parent;\n el.article.params = this.#getArticleData(el);\n\n this.#setStyle(el).#createVideo4(el).#createSwiper(el);\n });\n });\n }\n\n // 取得元件上的設定值\n #getArticleData(element) {\n return {\n // 元件本身\n $selector: element,\n\n // 父層元件\n $backgroundWrap: element.querySelector('._backgroundWrap'),\n $contentWrap: element.querySelector('._contentWrap'),\n $wordCover: element.querySelector('._wordCover'),\n $buttonCover: element.querySelector('._buttonCover'),\n $imgCover: element.querySelector('._imgCover'),\n $cover: element.querySelectorAll('._cover'),\n $swiper: element.querySelector('.swiper'),\n $swiperButtonCover: element.querySelector('.swiper-button-cover'),\n\n // 子層元件\n $h: element.querySelector('._H'),\n $subH: element.querySelector('._subH'),\n $p: element.querySelector('._P'),\n $button: element.querySelector('._button'),\n $description: element.querySelectorAll('._description'),\n $video: element.querySelectorAll('[video-id]'),\n\n // 父層設定\n typeFullColor: element.getAttribute('typeFull-color'),\n typeFullBoxColor: element.getAttribute('typeFull-boxcolor'),\n\n // 子層設定\n hColor: element.getAttribute('h-color'),\n subHColor: element.getAttribute('subh-color'),\n pColor: element.getAttribute('p-color'),\n buttonColor: element.getAttribute('button-color'),\n buttonColorHover: element.getAttribute('button-color-hover'),\n buttonTextColor: element.getAttribute('button-textcolor'),\n descriptionColor: element.getAttribute('description-color'),\n };\n }\n\n // 設置設定值的 CSS 樣式\n #setStyle(element) {\n const { params } = element.article;\n\n // article ._H\n setCss(params.$h, 'color', params.hColor);\n\n // article ._subH\n setCss(params.$subH, 'color', params.subHColor);\n\n // article ._P\n setCss(params.$p, 'color', params.pColor);\n\n // imgCover ._description\n setCss(params.$description, 'color', params.descriptionColor);\n\n // button background-color && text color\n setCss(params.$button, 'backgroundColor', params.buttonColor);\n setCss(params.$button, 'color', params.buttonTextColor);\n\n // button hover color\n if (params.buttonColorHover) {\n params.$button.appendChild(document.createElement('span'));\n setCss(params.$button.querySelector('span'), 'backgroundColor', params.buttonColorHover);\n }\n\n // typeFull background-color\n setCss(params.$backgroundWrap, 'backgroundColor', params.typeFullColor);\n\n // typeFull box background-color\n setCss(params.$contentWrap, 'backgroundColor', params.typeFullBoxColor);\n\n return this;\n }\n\n #createVideo4(element) {\n const { params } = element.article;\n\n if (params.$video.length) {\n const video = new Video4(params.$video);\n }\n\n return this;\n }\n\n #createSwiper(element) {\n const { basic_rwd } = this.options;\n\n const { params } = element.article;\n\n // 判斷是否擁有 swiper4 結構\n if (!params.$swiper) return;\n\n // set id\n const $id = createUid();\n\n const $this = this;\n\n // set swiper\n let $swiperSet = {\n on: {\n init(swiper) {\n const container = swiper.$el[0];\n // video4 重複綁定修正\n if (params.$video.length) {\n // 應該抓 DB 設定的 classname\n const allVideo4 = container.querySelectorAll('[video4-active]');\n [...allVideo4].forEach(element => {\n element.querySelector(fesdDB.video4.SETTINGS.videoButton)?.remove();\n element.querySelector('.overlay')?.remove();\n element.removeAttribute('video4-active');\n });\n $this.update();\n }\n },\n observerUpdate(swiper) {\n if (swiper.params.autoplay.enabled) {\n swiper.autoplay.start();\n swiper.update();\n }\n },\n },\n observer: true,\n breakpoints: {},\n };\n\n params.$selector.setAttribute('img-swiper', 'on');\n params.$selector.classList.add(`swiper-${$id}`);\n\n // swiper navigation (預設為 off)\n if (params.$selector.getAttribute('swiper-arrow') !== 'off' && params.$selector.getAttribute('swiper-arrow')) {\n const next = document.createElement('div');\n next.className = `swiper-button-next swiper-${$id}`;\n params.$swiperButtonCover.appendChild(next);\n\n const prev = document.createElement('div');\n prev.className = `swiper-button-prev swiper-${$id}`;\n params.$swiperButtonCover.appendChild(prev);\n\n $swiperSet.navigation = {\n nextEl: `.swiper-button-next.swiper-${$id}`,\n prevEl: `.swiper-button-prev.swiper-${$id}`,\n };\n }\n\n // swiper pagination (預設為 on)\n if (params.$selector.getAttribute('swiper-nav') !== 'off' || !params.$selector.getAttribute('swiper-nav')) {\n const pagination = document.createElement('div');\n pagination.className = `swiper-pagination swiper-${$id}`;\n params.$swiper.appendChild(pagination);\n\n $swiperSet.pagination = {\n el: `.swiper-pagination.swiper-${$id}`,\n clickable: true,\n };\n }\n\n // slidesPerView\n if (Number.parseInt(params.$selector.getAttribute('swiper-num'))) {\n $swiperSet.breakpoints[basic_rwd] = {\n slidesPerView: params.$selector.getAttribute('swiper-num') ? (Number.parseInt(params.$selector.getAttribute('swiper-num')) > 5 ? 5 : Number.parseInt(params.$selector.getAttribute('swiper-num'))) : 1,\n };\n }\n\n // autoplay (預設為 on)\n if (params.$selector.getAttribute('swiper-autoplay') !== 'off' || !params.$selector.getAttribute('swiper-autoplay')) {\n $swiperSet.autoplay = {\n delay: 3000,\n disableOnInteraction: false,\n };\n }\n\n // loop (預設為 on)\n if (params.$selector.getAttribute('swiper-loop') !== 'off' || !params.$selector.getAttribute('swiper-loop')) {\n $swiperSet.loop = true;\n }\n\n // speed\n if (params.$selector.getAttribute('swiper-speed')) {\n $swiperSet.speed = parseInt(params.$selector.getAttribute('swiper-speed'));\n }\n\n // parallax (預設為 off)\n if (params.$selector.getAttribute('swiper-parallax') !== 'off' && !params.$selector.getAttribute('swiper-loop')) {\n $swiperSet.parallax = true;\n }\n\n // pagination dynamicBullets (預設為 off)\n if (params.$selector.getAttribute('swiper-pagination-dynamic') === 'on') {\n $swiperSet.pagination.dynamicBullets = true;\n }\n\n // 若 swiper 只有一筆輪播則隱藏 navigation 及 pagination\n let gate = () => (window.innerWidth > this.basic_rwd ? Number(params.$selector.getAttribute('swiper-num')) || 1 : 1);\n\n if (params.$swiper.querySelectorAll('.swiper-slide').length <= gate()) {\n $swiperSet.navigation = false;\n $swiperSet.pagination = false;\n $swiperSet.autoplay = false;\n $swiperSet.loop = false;\n\n params.$selector.querySelector('.swiper-button-cover').style.display = 'none';\n params.$selector.querySelector('.swiper-pagination').style.display = 'none';\n\n params.$swiper.classList.add('swiper-no-swiping');\n }\n\n const $swiper = new SwiperV8(params.$swiper, $swiperSet);\n\n element.article.swiperList = [];\n element.article.swiperList.push($swiper);\n\n return this;\n }\n update() {\n const { elements } = this;\n\n elements.forEach(parent => {\n parent.querySelectorAll('._article').forEach(el => {\n el.article = {};\n el.article.parent = parent;\n el.article.params = this.#getArticleData(el);\n\n this.#createVideo4(el);\n });\n });\n }\n}\n\nexport default Article4;\n","\nimport { insert, warn } from './../shared/utils';\n\n'use strict'\n\n// create template method\nconst createTemplate = (el) => {\n const { TEMPLATE } = fesdDB.video4\n const { childDom } = el\n const container = document.createElement('div')\n container.innerHTML = TEMPLATE();\n\n const content = container.querySelector('.player-wrapper');\n [...childDom].forEach((child) => {\n content.append(child);\n });\n\n return container.children[0];\n};\n\n// class\nclass videoPlayer extends HTMLElement {\n constructor() {\n super();\n\n this.#create();\n }\n\n #create() {\n if (!this.getAttribute('video-id')) {\n warn('videoPlayer', `video-render needs a ['video-id'] attribute to creat player.`);\n return;\n }\n\n this.videoId = this.getAttribute('video-id');\n this.videoType = this.getAttribute('video-type');\n this.autoplay = this.getAttribute('video-autoplay');\n\n this.#mount();\n }\n\n #mount() {\n this.childDom = this.childNodes;\n this.template = createTemplate(this);\n\n // 清空原本結構\n this.innerHTML = '';\n // 放置整理過後的結構\n this.append(this.template);\n\n this.#init();\n }\n\n #init() {\n const { videoType } = this;\n let layout = '';\n\n switch (videoType) {\n case 'youtubeAPI':\n // this.#youtubeAPI();\n break;\n case 'youtube':\n layout = this.#youtube();\n break;\n case 'youkuAPI':\n // this.#youkuAPI();\n break;\n case 'youku':\n layout = this.#youku();\n break;\n case 'vimeo':\n layout = this.#vimeo();\n break;\n case 'bilibili':\n layout = this.#bilibili();\n break;\n case 'videojs':\n // this.#videoJs();\n break;\n default:\n break;\n }\n\n this.querySelector('.player-wrapper').insertAdjacentHTML(insert.prepend, layout);\n }\n\n // youtube iframe\n #youtube() {\n const { videoId, autoplay } = this;\n return `<iframe src=\"https://www.youtube.com/embed/${videoId}?rel=0&${\n autoplay === 'on' ? 'autoplay=1' : ''\n }&mute=1&loop=1&enablejsapi=1\" frameborder=\"0\" allowfullscreen=\"0\" volumn=\"0\" allow=\"${\n autoplay === 'on' ? 'autoplay;' : ''\n } encrypted-media; gyroscope; picture-in-picture;\"></iframe>`;\n }\n\n // vimeo iframe\n #vimeo() {\n const { videoId, autoplay, hash } = this;\n\n return `<iframe src=\"https://player.vimeo.com/video/${videoId}?h=${hash}&${\n autoplay === 'on' ? 'autoplay=1' : ''\n }&loop=1&color=ffffff&title=0&byline=0&portrait=0\" frameborder=\"0\" allow=\"${\n autoplay === 'on' ? 'autoplay;' : ''\n } fullscreen; picture-in-picture\" allowfullscreen></iframe><script src=\"https://player.vimeo.com/api/player.js\"></script>`;\n }\n\n // youku iframe\n #youku() {\n const { videoId, autoplay } = this;\n\n return `<iframe src=\"https://player.youku.com/embed/${videoId}?rel=0&${\n autoplay === 'on' ? 'autoplay=1' : ''\n }\" frameborder=0 \"allowfullscreen\"></iframe>`;\n }\n\n #bilibili() {\n const { videoId, autoplay } = this;\n return `<iframe src=\"//player.bilibili.com/player.html?bvid=${videoId}&page=1&as_wide=1&high_quality=1&danmaku=0\" scrolling=\"no\" border=\"0\" frameborder=\"no\" framespacing=\"0\" allowfullscreen=\"true\"></iframe>`\n }\n\n play() {\n const { videoType } = this;\n\n switch (videoType) {\n case 'youtubeAPI':\n // 無可用 functione\n break;\n case 'youtube':\n this.querySelector('iframe').contentWindow.postMessage(\n JSON.stringify({ event: 'command', func: 'playVideo' }),\n '*'\n );\n break;\n case 'youkuAPI':\n // 無可用 functione\n break;\n case 'youku':\n // 無可用 functione\n break;\n case 'vimeo':\n this.querySelector('iframe').contentWindow.postMessage(\n JSON.stringify({ value: 'true', method: 'play' }),\n '*'\n );\n break;\n case 'bilibili':\n // 無可用 functione\n break;\n case 'videojs':\n // 無可用 functione\n break;\n default:\n break;\n }\n }\n\n pause() {\n const { videoType } = this;\n\n switch (videoType) {\n case 'youtubeAPI':\n // 無可用 functione\n break;\n case 'youtube':\n this.querySelector('iframe').contentWindow.postMessage(\n JSON.stringify({ event: 'command', func: 'pauseVideo' }),\n '*'\n );\n break;\n case 'youkuAPI':\n // 無可用 functione\n break;\n case 'youku':\n // 無可用 functione\n break;\n case 'vimeo':\n this.querySelector('iframe').contentWindow.postMessage(\n JSON.stringify({ value: 'true', method: 'pause' }),\n '*'\n );\n break;\n case 'bilibili':\n // 無可用 functione\n break;\n case 'videojs':\n // 無可用 functione\n break;\n default:\n break;\n }\n }\n}\n\nexport default videoPlayer;\n","import Modal4 from '../modal4/modal4';\nimport videoPlayer from './videoPlayer';\nimport SHARED from './../shared/shared';\n\nimport { isString, isElement, isNodeList, getAllElements, warn, error, insert } from './../shared/utils';\n\n('use strict');\n\n// define custom element\nif (!customElements.get('video-player')) {\n customElements.define('video-player', videoPlayer);\n}\n\n// 判斷影片物件有沒有 video-id\nconst hasVideoID = data => {\n return data.videoId !== '' || typeof data.videoId !== 'undefined' ? true : false;\n};\n\n// 判斷影片物件是否已經啟用\nconst isActive = data => {\n return data.$selector.getAttribute('video4-active') === 'on' ? true : false;\n};\n\nconst createPlayer = params => {\n return `<video-player video-id=\"${params.videoId}\" video-type=\"${params.videoType}\" video-autoplay=\"${params.videoAutoplay}\"></video-player>`;\n};\n\nclass video4 {\n constructor(el, options = {}) {\n // 可傳 string 或 element 或 nodeList\n if (!isString(el) && !isElement(el) && !isNodeList(el)) {\n error('video4', `找不到該物件 -> ${el}`);\n return;\n }\n\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n // 從 fesdDB 提取設定\n const { SETTINGS, EVENTS } = fesdDB.video4;\n\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.video = {};\n el.video.instance = this;\n el.video.defaultOptions = options;\n el.video.params = this.#getVideoData(el);\n\n if (hasVideoID(el.video.params) && !isActive(el.video.params)) {\n el.setAttribute('video4-active', 'on');\n this.#createCover(el);\n }\n\n if (!hasVideoID(el.video.params)) {\n error('video4', `無法取得影片 ID`);\n }\n });\n\n this.emit('init');\n }\n\n #createCover(el) {\n const { LAYOUT } = fesdDB.video4;\n const params = el.video.params;\n const { $selector, videoLayoutNo, videoId, videoType, videoMode, videoButton, videoCover } = params;\n\n if (videoMode === 'onBox') {\n let $target = null;\n if (videoCover === 'on') {\n el.classList.add('video4-cover');\n // 無圖片結構放置圖片結構\n if (!$selector.querySelector('img')) {\n $selector.insertAdjacentHTML(insert.prepend, '<picture><source srcset=\"\" type=\"image/webp\"><source srcset=\"\" type=\"image/jpeg\"><img src=\"\" alt></picture>');\n warn('video4', `若啟用 [videoCover] 且選擇 onBox 模式必須於 video-target 內放置 img 結構,若無結構則自動加入圖片結構`);\n }\n\n const $cover = $selector.querySelector('img');\n $cover.insertAdjacentHTML(insert.after, LAYOUT[videoLayoutNo]);\n\n const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n\n // 無圖片時放置預設封面畫面,僅 youtube & vimeo 提供\n if (!src && videoType == 'youtube') {\n $cover.setAttribute('src', `https://img.youtube.com/vi/${videoId}/0.jpg`);\n } else if (!src && videoType == 'vimeo') {\n $cover.setAttribute('src', `https://vumbnail.com/${videoId}_large.jpg`);\n } else {\n warn('video4', `僅 youtube & vimeo 提供,無圖片時放置預設封面畫面,其他影片平台請自行上傳封面照片`);\n }\n }\n\n // 若無設定撥放按鈕,則點擊物件轉移為物件本身\n if (videoButton == 'off') {\n $target = $selector;\n } else {\n $target = $selector.querySelector(videoButton) ?? $selector;\n if (!$selector.querySelector(videoButton)) {\n warn('video4', `找不到 videoButton 設定的 element -> '${videoButton}' , 點擊物件轉移至 '${this.__storage__.el}'`);\n }\n }\n\n if (!$target.video) {\n $target.video = {};\n $target.video.params = params;\n }\n\n $target.video.eventHandler = this.#trigger;\n $target.addEventListener('click', $target.video.eventHandler);\n } else if (videoMode === 'onPage') {\n let $target = null;\n if (videoCover == 'on') {\n el.classList.add('video4-cover');\n // 無圖片結構放置圖片結構\n if (!$selector.querySelector('img')) {\n $selector.insertAdjacentHTML(insert.prepend, '<picture><source srcset=\"\" type=\"image/webp\"><source srcset=\"\" type=\"image/jpeg\"><img src=\"\" alt></picture>');\n warn('video', `若啟用 [videoCover] 且選擇 onBox 模式必須於 video-target 內放置 img 結構`);\n }\n\n const $cover = $selector.querySelector('img');\n $cover.insertAdjacentHTML(insert.after, LAYOUT[videoLayoutNo]);\n\n const src = $cover?.getAttribute('src') || $cover?.getAttribute('data-src');\n\n // 無圖片時放置預設封面畫面,僅 youtube 提供\n if (!src && videoType == 'youtube') {\n $cover.setAttribute('src', `https://img.youtube.com/vi/${videoId}/0.jpg`);\n } else if (!src && videoType == 'vimeo') {\n $cover.setAttribute('src', `https://vumbnail.com/${videoId}_large.jpg`);\n } else if (!src) {\n warn('video4', `僅 youtube & vimeo 提供,無圖片時放置預設封面畫面,其他影片平台請自行上傳封面照片`);\n }\n\n // 若無設定撥放按鈕,則點擊物件轉移為物件本身\n if (videoButton == 'off') {\n $target = $selector;\n } else {\n $target = $selector.querySelector(videoButton) ?? $selector;\n if (!$selector.querySelector(videoButton)) {\n warn('video4', `找不到 videoButton 設定的 element -> '${videoButton}', 點擊物件轉移至 '${this.__storage__.el}'`);\n }\n }\n } else {\n $selector.innerHTML = createPlayer(params);\n return;\n }\n\n if (!$target.video) {\n $target.video = {};\n $target.video.params = params;\n }\n\n $target.video.eventHandler = this.#trigger;\n $target.addEventListener('click', $target.video.eventHandler);\n }\n }\n\n #trigger(e) {\n const { video } = this;\n const { $selector, videoMode, videoTarget, videoTargetRoute } = video.params;\n\n if (videoMode == 'onBox') {\n const options = {\n target: videoTarget,\n route: videoTargetRoute,\n on: {\n complete(modal) {\n modal.querySelector('.modal-content').insertAdjacentHTML('beforeend', createPlayer(video.params));\n },\n open(modal) {\n const scrollers = modal.querySelectorAll('[data-overlayscrollbars-viewport]');\n _g.lazy.update();\n _g.scrollLock([...scrollers]);\n },\n close(modal) {\n const scrollers = modal.querySelectorAll('[data-overlayscrollbars-viewport]');\n _g.scrollUnlock([...scrollers]);\n },\n destroy(modal) {},\n },\n };\n\n Modal4.open(options);\n } else if (videoMode == 'onPage') {\n // onPage 點擊後應自動撥放影片\n video.params.videoAutoplay = 'on';\n // 直接替換 cover & playButton\n $selector.innerHTML = createPlayer(video.params);\n }\n }\n\n #getVideoData(el) {\n const { SETTINGS } = fesdDB.video4;\n\n return {\n $selector: el,\n videoId: el.getAttribute('video-id'),\n videoType: el.getAttribute('video-type'),\n videoAutoplay: el.getAttribute('video-autoplay') || SETTINGS.videoAutoplay,\n videoMode: el.getAttribute('video-mode') || SETTINGS.videoMode,\n videoButton: el.getAttribute('video-button') || SETTINGS.videoButton,\n videoCover: el.getAttribute('video-cover') || SETTINGS.videoCover,\n videoLayoutNo: el.getAttribute('video-layout-no') || SETTINGS.videoLayoutNo,\n videoTarget: el.getAttribute('video-target') || SETTINGS.videoTarget,\n videoTargetRoute: el.getAttribute('video-target-route') || SETTINGS.videoTargetRoute,\n };\n }\n\n update() {\n this.#create();\n }\n}\n\nObject.assign(video4.prototype, SHARED);\n\nexport default video4;\n","import { insert, isString, isElementExist, getAllElements } from './../shared/utils';\n\n('use strict');\n\nconst getTargetUrl = type => {\n // facebook\n if (type == 'facebook') {\n return 'https://www.facebook.com/sharer/sharer.php?u=';\n }\n\n // line\n if (type == 'line') {\n // desktop & mobile 網址不同\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {\n return 'http://line.naver.jp/R/msg/text/?';\n }\n return 'https://lineit.line.me/share/ui?url=';\n }\n\n // twitter\n if (type == 'twitter') {\n return 'https://twitter.com/intent/tweet?url=';\n }\n\n // linkedin\n if (type == 'linkedin') {\n return `http://www.linkedin.com/shareArticle?mini=true&title=${document.title}&source=${document.title}&url=`;\n // return `https://www.linkedin.com/sharing/share-offsite/?url=`;\n }\n\n // telegram\n if (type == 'telegram') {\n return 'https://telegram.me/share/url?url=';\n }\n};\n\nclass Share4 {\n constructor(el, options = {}) {\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n // 從 fesdDB 提取設定\n const { SETTINGS } = fesdDB.share4;\n if (!isString(el) || !isElementExist(el)) return;\n\n this.elements = getAllElements(el);\n\n this.options = Object.assign({}, SETTINGS, options);\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(targets => {\n targets.querySelectorAll('[share-target]').forEach(el => {\n el.share = {};\n el.share.instance = this;\n el.share.params = options;\n el.share.eventHandler = this.#trigger;\n el.addEventListener('click', el.share.eventHandler);\n });\n });\n }\n\n #trigger() {\n /** the keyword `this` in this method is pointed to the click target */\n const { eventHandler, params } = this.share;\n const type = this.getAttribute('share-target');\n\n const utm = {\n source: this.getAttribute('utm-source'),\n medium: this.getAttribute('utm-medium'),\n campaign: this.getAttribute('utm-campaign'),\n };\n\n const copy = {\n success: this.getAttribute('copy-success') || params.success,\n text: this.getAttribute('copy-text') || params.text,\n className: this.getAttribute('copy-class') || params.className,\n duration: this.getAttribute('copy-duration') || params.duration,\n };\n\n const baseUrl = encodeURIComponent(document.URL);\n let shareUrl = baseUrl;\n\n // 若為 wechat 則另開視窗掃描 QRcode\n if (type == 'wechat') {\n // https://api.qrserver.com/v1/create-qr-code/?data=${url}&size=300x300\n window.open(`https://api.qrserver.com/v1/create-qr-code/?data=${baseUrl}&size=250x250`, 'share to wechat', 'width=300,height=300');\n return;\n }\n\n // 若為 url 則複製連結\n if (type == 'url') {\n if (isElementExist('.copied-wrapper')) return;\n\n document.querySelector('body').insertAdjacentHTML(insert.append, `<div class='copied-wrapper'><div class='text'>${copy.success ? copy.success : ''}</div><input id='clipboard' type='text' readonly></div>`);\n\n const $copied = document.querySelector('.copied-wrapper');\n\n if (copy.className) {\n $copied.classList.add(copy.className);\n }\n $copied.style.top = this.getBoundingClientRect().top + window.scrollY + 'px';\n $copied.style.left = this.getBoundingClientRect().left + this.getBoundingClientRect().width / 2 + 'px';\n $copied.style.display = 'block';\n\n const $clipboard = document.querySelector('#clipboard');\n\n $clipboard.value = copy.text ?? window.location.href;\n $clipboard.setSelectionRange(0, 9999);\n $clipboard.select();\n\n if (document.execCommand('copy')) {\n // 複製對應內容\n document.execCommand('copy');\n // 動畫效果\n const copiedWrapper = document.querySelector('.copied-wrapper');\n const tooltipsText = document.querySelector('.copied-wrapper .text');\n tooltipsText.style.display = 'block';\n tooltipsText.style.opacity = 0;\n const fadeIn = (element, duration) => {\n let opacity = 0;\n const interval = 50;\n const gap = interval / duration;\n\n const fading = setInterval(function () {\n opacity += gap;\n element.style.opacity = opacity;\n\n if (opacity >= 1) {\n clearInterval(fading);\n setTimeout(function () {\n fadeOut(element, 300, function () {\n copiedWrapper.remove();\n });\n }, copy.duration);\n }\n }, interval);\n };\n const fadeOut = (element, duration, callback) => {\n let opacity = 1;\n const interval = 50;\n const gap = interval / duration;\n\n const fading = setInterval(() => {\n opacity -= gap;\n element.style.opacity = opacity;\n\n if (opacity <= 0) {\n clearInterval(fading);\n element.style.display = 'none';\n if (callback) callback();\n }\n }, interval);\n };\n fadeIn(tooltipsText, 300);\n }\n\n return;\n }\n\n // 其餘則使用對應網址另開新分頁\n // url + '?utm_source=Facebook' + '&utm_medium=social' + '&utm_campaign=' + campaign\n shareUrl = `${shareUrl}${utm.source ? `?utm_source=${utm.source}` : ''}${utm.medium ? `&utm_medium${utm.medium}` : ''}${utm.campaign ? `&utm_campaign${utm.campaign}` : ''}`;\n shareUrl = shareUrl.replace('?', '%3F').replace(new RegExp('&', 'g'), '%26');\n\n if (type == 'line') {\n // line 需帶入原始網址\n window.open(`${getTargetUrl(type)}${baseUrl}`);\n } else {\n window.open(`${getTargetUrl(type)}${shareUrl}&quote=${shareUrl}`);\n }\n\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, 100);\n }\n}\n\nexport default Share4;\n","export const cityData = {\n 'zh-tw': {\n 臺北市: [\n ['中正區', '100'],\n ['大同區', '103'],\n ['中山區', '104'],\n ['松山區', '105'],\n ['大安區', '106'],\n ['萬華區', '108'],\n ['信義區', '110'],\n ['士林區', '111'],\n ['北投區', '112'],\n ['內湖區', '114'],\n ['南港區', '115'],\n ['文山區', '116'],\n ],\n 新北市: [\n ['萬里區', '207'],\n ['金山區', '208'],\n ['板橋區', '220'],\n ['汐止區', '221'],\n ['深坑區', '222'],\n ['石碇區', '223'],\n ['瑞芳區', '224'],\n ['平溪區', '226'],\n ['雙溪區', '227'],\n ['貢寮區', '228'],\n ['新店區', '231'],\n ['坪林區', '232'],\n ['烏來區', '233'],\n ['永和區', '234'],\n ['中和區', '235'],\n ['土城區', '236'],\n ['三峽區', '237'],\n ['樹林區', '238'],\n ['鶯歌區', '239'],\n ['三重區', '241'],\n ['新莊區', '242'],\n ['泰山區', '243'],\n ['林口區', '244'],\n ['蘆洲區', '247'],\n ['五股區', '248'],\n ['八里區', '249'],\n ['淡水區', '251'],\n ['三芝區', '252'],\n ['石門區', '253'],\n ],\n 基隆市: [\n ['仁愛區', '200'],\n ['信義區', '201'],\n ['中正區', '202'],\n ['中山區', '203'],\n ['安樂區', '204'],\n ['暖暖區', '205'],\n ['七堵區', '206'],\n ],\n 宜蘭縣: [\n ['宜蘭市', '260'],\n ['頭城鎮', '261'],\n ['礁溪鄉', '262'],\n ['壯圍鄉', '263'],\n ['員山鄉', '264'],\n ['羅東鎮', '265'],\n ['三星鄉', '266'],\n ['大同鄉', '267'],\n ['五結鄉', '268'],\n ['冬山鄉', '269'],\n ['蘇澳鎮', '270'],\n ['南澳鄉', '272'],\n ],\n 桃園市: [\n ['中壢區', '320'],\n ['平鎮區', '324'],\n ['龍潭區', '325'],\n ['楊梅區', '326'],\n ['新屋區', '327'],\n ['觀音區', '328'],\n ['桃園區', '330'],\n ['龜山區', '333'],\n ['八德區', '334'],\n ['大溪區', '335'],\n ['復興區', '336'],\n ['大園區', '337'],\n ['蘆竹區', '338'],\n ],\n 新竹市: [\n ['東區', '300'],\n ['北區', '301'],\n ['香山區', '309'],\n ],\n 新竹縣: [\n ['竹北市', '302'],\n ['湖口鄉', '303'],\n ['新豐鄉', '304'],\n ['新埔鎮', '305'],\n ['關西鎮', '306'],\n ['芎林鄉', '307'],\n ['寶山鄉', '308'],\n ['竹東鎮', '310'],\n ['五峰鄉', '311'],\n ['橫山鄉', '312'],\n ['尖石鄉', '313'],\n ['北埔鄉', '314'],\n ['峨嵋鄉', '315'],\n ],\n 苗栗縣: [\n ['竹南鎮', '350'],\n ['頭份鎮', '351'],\n ['三灣鄉', '352'],\n ['南庄鄉', '353'],\n ['獅潭鄉', '354'],\n ['後龍鎮', '356'],\n ['通霄鎮', '357'],\n ['苑裡鎮', '358'],\n ['苗栗市', '360'],\n ['造橋鄉', '361'],\n ['頭屋鄉', '362'],\n ['公館鄉', '363'],\n ['大湖鄉', '364'],\n ['泰安鄉', '365'],\n ['銅鑼鄉', '366'],\n ['三義鄉', '367'],\n ['西湖鄉', '368'],\n ['卓蘭鎮', '369'],\n ],\n 臺中市: [\n ['中區', '400'],\n ['東區', '401'],\n ['南區', '402'],\n ['西區', '403'],\n ['北區', '404'],\n ['北屯區', '406'],\n ['西屯區', '407'],\n ['南屯區', '408'],\n ['太平區', '411'],\n ['大里區', '412'],\n ['霧峰區', '413'],\n ['烏日區', '414'],\n ['豐原區', '420'],\n ['后里區', '421'],\n ['石岡區', '422'],\n ['東勢區', '423'],\n ['和平區', '424'],\n ['新社區', '426'],\n ['潭子區', '427'],\n ['大雅區', '428'],\n ['神岡區', '429'],\n ['大肚區', '432'],\n ['沙鹿區', '433'],\n ['龍井區', '434'],\n ['梧棲區', '435'],\n ['清水區', '436'],\n ['大甲區', '437'],\n ['外埔區', '438'],\n ['大安區', '439'],\n ],\n 彰化縣: [\n ['彰化市', '500'],\n ['芬園鄉', '502'],\n ['花壇鄉', '503'],\n ['秀水鄉', '504'],\n ['鹿港鎮', '505'],\n ['福興鄉', '506'],\n ['線西鄉', '507'],\n ['和美鎮', '508'],\n ['伸港鄉', '509'],\n ['員林鎮', '510'],\n ['社頭鄉', '511'],\n ['永靖鄉', '512'],\n ['埔心鄉', '513'],\n ['溪湖鎮', '514'],\n ['大村鄉', '515'],\n ['埔鹽鄉', '516'],\n ['田中鎮', '520'],\n ['北斗鎮', '521'],\n ['田尾鄉', '522'],\n ['埤頭鄉', '523'],\n ['溪州鄉', '524'],\n ['竹塘鄉', '525'],\n ['二林鎮', '526'],\n ['大城鄉', '527'],\n ['芳苑鄉', '528'],\n ['二水鄉', '530'],\n ],\n 南投縣: [\n ['南投市', '540'],\n ['中寮鄉', '541'],\n ['草屯鎮', '542'],\n ['國姓鄉', '544'],\n ['埔里鎮', '545'],\n ['仁愛鄉', '546'],\n ['名間鄉', '551'],\n ['集集鎮', '552'],\n ['水里鎮', '553'],\n ['魚池鄉', '555'],\n ['信義鄉', '556'],\n ['竹山鎮', '557'],\n ['鹿谷鄉', '558'],\n ],\n 雲林縣: [\n ['斗南鎮', '630'],\n ['大埤鄉', '631'],\n ['虎尾鎮', '632'],\n ['土庫鎮', '633'],\n ['褒忠鄉', '634'],\n ['東勢鄉', '635'],\n ['臺西鄉', '636'],\n ['崙背鄉', '637'],\n ['麥寮鄉', '638'],\n ['斗六市', '640'],\n ['林內鄉', '643'],\n ['古坑鄉', '646'],\n ['莿桐鄉', '647'],\n ['西螺鎮', '648'],\n ['二崙鄉', '649'],\n ['北港鎮', '651'],\n ['水林鄉', '652'],\n ['口湖鄉', '653'],\n ['四湖鄉', '654'],\n ['元長鄉', '655'],\n ],\n 嘉義市: [\n ['西區', '600'],\n ['東區', '601'],\n ],\n 嘉義縣: [\n ['番路鄉', '602'],\n ['梅山鄉', '603'],\n ['竹崎鄉', '604'],\n ['阿里山鄉', '605'],\n ['中埔鄉', '606'],\n ['大埔鄉', '607'],\n ['水上鄉', '608'],\n ['鹿草鄉', '611'],\n ['太保市', '612'],\n ['朴子市', '613'],\n ['東石鄉', '614'],\n ['六腳鄉', '615'],\n ['新港鄉', '616'],\n ['民雄鄉', '621'],\n ['大林鎮', '622'],\n ['溪口鄉', '623'],\n ['義竹鄉', '624'],\n ['布袋鎮', '625'],\n ],\n 臺南市: [\n ['中西區', '700'],\n ['東區', '701'],\n ['南區', '702'],\n ['北區', '704'],\n ['安平區', '708'],\n ['安南區', '709'],\n ['永康區', '710'],\n ['歸仁區', '711'],\n ['新化區', '712'],\n ['左鎮區', '713'],\n ['玉井區', '714'],\n ['楠西區', '715'],\n ['南化區', '716'],\n ['仁德區', '717'],\n ['關廟區', '718'],\n ['龍崎區', '719'],\n ['官田區', '720'],\n ['麻豆區', '721'],\n ['佳里區', '722'],\n ['西港區', '723'],\n ['七股區', '724'],\n ['將軍區', '725'],\n ['學甲區', '726'],\n ['北門區', '727'],\n ['新營區', '730'],\n ['後壁區', '731'],\n ['白河區', '732'],\n ['東山區', '733'],\n ['六甲區', '734'],\n ['下營區', '735'],\n ['柳營區', '736'],\n ['鹽水區', '737'],\n ['善化區', '741'],\n ['大內區', '742'],\n ['山上區', '743'],\n ['新市區', '744'],\n ['安定區', '745'],\n ],\n 高雄市: [\n ['新興區', '800'],\n ['前金區', '801'],\n ['苓雅區', '802'],\n ['鹽埕區', '803'],\n ['鼓山區', '804'],\n ['旗津區', '805'],\n ['前鎮區', '806'],\n ['三民區', '807'],\n ['楠梓區', '811'],\n ['小港區', '812'],\n ['左營區', '813'],\n ['仁武區', '814'],\n ['大社區', '815'],\n ['岡山區', '820'],\n ['路竹區', '821'],\n ['阿蓮區', '822'],\n ['田寮區', '823'],\n ['燕巢區', '824'],\n ['橋頭區', '825'],\n ['梓官區', '826'],\n ['彌陀區', '827'],\n ['永安區', '828'],\n ['湖內區', '829'],\n ['鳳山區', '830'],\n ['大寮區', '831'],\n ['林園區', '832'],\n ['鳥松區', '833'],\n ['大樹區', '840'],\n ['旗山區', '842'],\n ['美濃區', '843'],\n ['六龜區', '844'],\n ['內門區', '845'],\n ['杉林區', '846'],\n ['甲仙區', '847'],\n ['桃源區', '848'],\n ['那瑪夏區', '849'],\n ['茂林區', '851'],\n ['茄萣區', '852'],\n ],\n 屏東縣: [\n ['屏東市', '900'],\n ['三地鄉', '901'],\n ['霧臺鄉', '902'],\n ['瑪家鄉', '903'],\n ['九如鄉', '904'],\n ['里港鄉', '905'],\n ['高樹鄉', '906'],\n ['鹽埔鄉', '907'],\n ['長治鄉', '908'],\n ['麟洛鄉', '909'],\n ['竹田鄉', '911'],\n ['內埔鄉', '912'],\n ['萬丹鄉', '913'],\n ['潮州鎮', '920'],\n ['泰武鄉', '921'],\n ['來義鄉', '922'],\n ['萬巒鄉', '923'],\n ['崁頂鄉', '924'],\n ['新埤鄉', '925'],\n ['南州鄉', '926'],\n ['林邊鄉', '927'],\n ['東港鎮', '928'],\n ['琉球鄉', '929'],\n ['佳冬鄉', '931'],\n ['新園鄉', '932'],\n ['枋寮鄉', '940'],\n ['枋山鄉', '941'],\n ['春日鄉', '942'],\n ['獅子鄉', '943'],\n ['車城鄉', '944'],\n ['牡丹鄉', '945'],\n ['恒春鎮', '946'],\n ['滿州鄉', '947'],\n ],\n 花蓮縣: [\n ['花蓮市', '970'],\n ['新城鄉', '971'],\n ['秀林鄉', '972'],\n ['吉安鄉', '973'],\n ['壽豐鄉', '974'],\n ['鳳林鎮', '975'],\n ['光復鄉', '976'],\n ['豐濱鄉', '977'],\n ['瑞穗鄉', '978'],\n ['萬榮鄉', '979'],\n ['玉里鎮', '981'],\n ['卓溪鄉', '982'],\n ['富里鄉', '983'],\n ],\n 臺東縣: [\n ['臺東市', '950'],\n ['綠島鄉', '951'],\n ['蘭嶼鄉', '952'],\n ['延平鄉', '953'],\n ['卑南鄉', '954'],\n ['鹿野鄉', '955'],\n ['關山鎮', '956'],\n ['海端鄉', '957'],\n ['池上鄉', '958'],\n ['東河鄉', '959'],\n ['成功鄉', '961'],\n ['長濱鄉', '962'],\n ['太麻里鄉', '963'],\n ['金峰鄉', '964'],\n ['大武鄉', '965'],\n ['達仁鄉', '966'],\n ],\n 澎湖縣: [\n ['馬公市', '880'],\n ['西嶼鄉', '881'],\n ['望安鄉', '882'],\n ['七美鄉', '883'],\n ['白沙鄉', '884'],\n ['湖西鄉', '885'],\n ],\n 金門縣: [\n ['金沙鎮', '890'],\n ['金湖鎮', '891'],\n ['金寧鄉', '892'],\n ['金城鎮', '893'],\n ['烈嶼鄉', '894'],\n ['烏坵鄉', '896'],\n ],\n 連江縣: [\n ['南竿鄉', '209'],\n ['北竿鄉', '210'],\n ['莒光鄉', '211'],\n ['東引鄉', '212'],\n ],\n },\n en: {\n 'Taipei City': [\n ['Zhongzheng Dist', '100'],\n ['Datong Dist', '103'],\n ['Zhongshan Dist', '104'],\n ['Songshan Dist', '105'],\n [\"Da'an Dist\", '106'],\n ['Wanhua Dist', '108'],\n ['Xinyi Dist', '110'],\n ['Shilin Dist', '111'],\n ['Beitou Dist', '112'],\n ['Neihu Dist', '114'],\n ['Nangang Dist', '115'],\n ['Wenshan Dist', '116'],\n ],\n 'New Taipei City': [\n ['Wanli Dist', '207'],\n ['Jinshan Dist', '208'],\n ['Banqiao Dist', '220'],\n ['Xizhi Dist', '221'],\n ['Shenkeng Dist', '222'],\n ['Shiding Dist', '223'],\n ['Ruifang Dist', '224'],\n ['Pingxi Dist', '226'],\n ['Shuangxi Dist', '227'],\n ['Gongliao Dist', '228'],\n ['Xindian Dist', '231'],\n ['Pinglin Dist', '232'],\n ['Wulai Dist', '233'],\n ['Yonghe Dist', '234'],\n ['Zhonghe Dist', '235'],\n ['Tucheng Dist', '236'],\n ['Sanxia Dist', '237'],\n ['Shulin Dist', '238'],\n ['Yingge Dist', '239'],\n ['Sanchong Dist', '241'],\n ['Xinzhuang Dist', '242'],\n ['Taishan Dist', '243'],\n ['Linkou Dist', '244'],\n ['Luzhou Dist', '247'],\n ['Wugu Dist', '248'],\n ['Bali Dist', '249'],\n ['Tamsui Dist', '251'],\n ['Sanzhi Dist', '252'],\n ['Shimen Dist', '253'],\n ],\n 'Keelung City': [\n [\"Ren'ai Dist\", '200'],\n ['Xinyi Dist', '201'],\n ['Zhongzheng Dist', '202'],\n ['Zhongshan Dist', '203'],\n ['Anle Dist', '204'],\n ['Nuannuan Dist', '205'],\n ['Qidu Dist', '206'],\n ],\n 'Yilan County': [\n ['Yilan City', '260'],\n ['Toucheng Township', '261'],\n ['Jiaoxi Township', '262'],\n ['Zhuangwei Township', '263'],\n ['Yuanshan Township', '264'],\n ['Luodong Township', '265'],\n ['Sanxing Township', '266'],\n ['Datong Township', '267'],\n ['Wujie Township', '268'],\n ['Dongshan Township', '269'],\n [\"Su'ao Township\", '270'],\n ['0', '272'],\n ],\n 'Taoyuan City': [\n ['Zhongli Dist', '320'],\n ['Pingzhen Dist', '324'],\n ['Longtan Dist', '325'],\n ['Yangmei Dist', '326'],\n ['Xinwu Dist', '327'],\n ['Guanyin Dist', '328'],\n ['Taoyuan Dist', '330'],\n ['Guishan Dist', '333'],\n ['Bade Dist', '334'],\n ['Daxi Dist', '335'],\n ['Fuxing Dist', '336'],\n ['Dayuan Dist', '337'],\n ['Luzhu Dist', '338'],\n ],\n 'Taoyuan City': [\n ['Xiangshan Dist', '300'],\n ['0', '301'],\n ['0', '309'],\n ],\n 'Hsinchu County': [\n ['Zhubei City', '302'],\n ['Hukou Township', '303'],\n ['Xinfeng Township', '304'],\n ['Xinpu Township', '305'],\n ['Guanxi Township', '306'],\n ['Qionglin Township', '307'],\n ['Baoshan Township', '308'],\n ['Zhudong Township', '310'],\n ['Wufeng Township', '311'],\n ['Hengshan Township', '312'],\n ['Jianshi Township', '313'],\n ['Beipu Township', '314'],\n ['Emei Township', '315'],\n ],\n 'Miaoli County': [\n ['Zhunan Township', '350'],\n ['Toufen City', '351'],\n ['Sanwan Township', '352'],\n ['Nanzhuang Township', '353'],\n ['Shitan Township', '354'],\n ['Houlong Township', '356'],\n ['Tongxiao Township', '357'],\n ['Yuanli Township', '358'],\n ['Miaoli City', '360'],\n ['Zaoqiao Township', '361'],\n ['Touwu Township', '362'],\n ['Gongguan Township', '363'],\n ['Dahu Township', '364'],\n [\"Tai'an Township\", '365'],\n ['Tongluo Township', '366'],\n ['Sanyi Township', '367'],\n ['Xihu Township', '368'],\n ['Zhuolan Township', '369'],\n ],\n 'Taichung City': [\n ['Central Dist', '400'],\n ['East Dist', '401'],\n ['South Dist', '402'],\n ['West Dist', '403'],\n ['North Dist', '404'],\n ['Beitun Dist', '406'],\n ['Xitun Dist', '407'],\n ['Nantun Dist', '408'],\n ['Taiping Dist', '411'],\n ['Dali Dist', '412'],\n ['Wufeng Dist', '413'],\n ['Wuri Dist', '414'],\n ['Fengyuan Dist', '420'],\n ['Houli Dist', '421'],\n ['Shigang Dist', '422'],\n ['Dongshi Dist', '423'],\n ['Heping Dist', '424'],\n ['Xinshe Dist', '426'],\n ['Tanzi Dist', '427'],\n ['Daya Dist', '428'],\n ['Shengang Dist', '429'],\n ['Dadu Dist', '432'],\n ['Shalu Dist', '433'],\n ['Longjing Dist', '434'],\n ['Wuqi Dist', '435'],\n ['Qingshui Dist', '436'],\n ['Dajia Dist', '437'],\n ['Waipu Dist', '438'],\n [\"Da'an Dist\", '439'],\n ],\n 'Changhua County': [\n ['Changhua City', '500'],\n ['Fenyuan Township', '502'],\n ['Huatan Township', '503'],\n ['Xiushui Township', '504'],\n ['Lukang Township', '505'],\n ['Fuxing Township', '506'],\n ['Xianxi Township', '507'],\n ['Hemei Township', '508'],\n ['Shengang Township', '509'],\n ['Yuanlin City', '510'],\n ['Shetou Township', '511'],\n ['Yongjing Township', '512'],\n ['Puxin Township', '513'],\n ['Xihu Township', '514'],\n ['Dacun Township', '515'],\n ['Puyan Township', '516'],\n ['Tianzhong Township', '520'],\n ['Beidou Township', '521'],\n ['Tianwei Township', '522'],\n ['Pitou Township', '523'],\n ['Xizhou Township', '524'],\n ['Zhutang Township', '525'],\n ['Erlin Township', '526'],\n ['Dacheng Township', '527'],\n ['Fangyuan Township', '528'],\n ['Ershui Township', '530'],\n ],\n 'Nantou County': [\n ['Nantou City', '540'],\n ['Zhongliao Township', '541'],\n ['Caotun Township', '542'],\n ['Guoxing Township', '544'],\n ['Puli Township', '545'],\n [\"Ren'ai Township\", '546'],\n ['Mingjian Township', '551'],\n ['Jiji Township', '552'],\n ['Shuili Township', '553'],\n ['Yuchi Township', '555'],\n ['Xinyi Township', '556'],\n ['Zhushan Township', '557'],\n ['Lugu Township', '558'],\n ],\n 'Yunlin County': [\n ['Dounan Township', '630'],\n ['Dapi Township', '631'],\n ['Huwei Township', '632'],\n ['Tuku Township', '633'],\n ['Baozhong Township', '634'],\n ['Dongshi Township', '635'],\n ['Taixi Township', '636'],\n ['Lunbei Township', '637'],\n ['Mailiao Township', '638'],\n ['Douliu City', '640'],\n ['Linnei Township', '643'],\n ['Gukeng Township', '646'],\n ['Citong Township', '647'],\n ['Xiluo Township', '648'],\n ['Erlun Township', '649'],\n ['Beigang Township', '651'],\n ['Shuilin Township', '652'],\n ['Kouhu Township', '653'],\n ['Sihu Township', '654'],\n ['Yuanzhang Township', '655'],\n ],\n 'Chiayi City': [\n ['West Dist', '600'],\n ['0', '601'],\n ],\n 'Chiayi County': [\n ['Fanlu Township', '602'],\n ['Meishan Township', '603'],\n ['Zhuqi Township', '604'],\n ['Alishan Township', '605'],\n ['Zhongpu Township', '606'],\n ['Dapu Township', '607'],\n ['Shuishang Township', '608'],\n ['Lucao Township', '611'],\n ['Taibao City', '612'],\n ['Puzi City', '613'],\n ['Dongshi Township', '614'],\n ['Liujiao Township', '615'],\n ['Xingang Township', '616'],\n ['Minxiong Township', '621'],\n ['Dalin Township', '622'],\n ['Xikou Township', '623'],\n ['Yizhu Township', '624'],\n ['Budai Township', '625'],\n ],\n 'Tainan City': [\n ['West Central Dist', '700'],\n ['East Dist', '701'],\n ['South Dist', '702'],\n ['North Dist', '704'],\n ['Anping Dist', '708'],\n ['Annan Dist', '709'],\n ['Yongkang Dist', '710'],\n ['Guiren Dist', '711'],\n ['Xinhua Dist', '712'],\n ['Zuozhen Dist', '713'],\n ['Yujing Dist', '714'],\n ['Nanxi Dist', '715'],\n ['Nanhua Dist', '716'],\n ['Rende Dist', '717'],\n ['Guanmiao Dist', '718'],\n ['Longqi Dist', '719'],\n ['Guantian Dist', '720'],\n ['Madou Dist', '721'],\n ['Jiali Dist', '722'],\n ['Xigang Dist', '723'],\n ['Qigu Dist', '724'],\n ['Jiangjun Dist', '725'],\n ['Xuejia Dist', '726'],\n ['Beimen Dist', '727'],\n ['Xinying Dist', '730'],\n ['Houbi Dist', '731'],\n ['Baihe Dist', '732'],\n ['Dongshan Dist', '733'],\n ['Liujia Dist', '734'],\n ['Xiaying Dist', '735'],\n ['Liuying Dist', '736'],\n ['Yanshui Dist', '737'],\n ['Shanhua Dist', '741'],\n ['Danei Dist', '742'],\n ['Shanshang Dist', '743'],\n ['Xinshi Dist', '744'],\n ['Anding Dist', '745'],\n ],\n 'Kaohsiung City': [\n ['Xinxing Dist', '800'],\n ['Qianjin Dist', '801'],\n ['Lingya Dist', '802'],\n ['Yancheng Dist', '803'],\n ['Gushan Dist', '804'],\n ['Qijin Dist', '805'],\n ['Qianzhen Dist', '806'],\n ['Sanmin Dist', '807'],\n ['Nanzi Dist', '811'],\n ['Xiaogang Dist', '812'],\n ['Zuoying Dist', '813'],\n ['Renwu Dist', '814'],\n ['Dashe Dist', '815'],\n ['Gangshan Dist', '820'],\n ['Luzhu Dist', '821'],\n ['Alian Dist', '822'],\n ['Tianliao Dist', '823'],\n ['Yanchao Dist', '824'],\n ['Qiaotou Dist', '825'],\n ['Ziguan Dist', '826'],\n ['Mituo Dist', '827'],\n [\"Yong'an Dist\", '828'],\n ['Hunei Dist', '829'],\n ['Fengshan Dist', '830'],\n ['Daliao Dist', '831'],\n ['Linyuan Dist', '832'],\n ['Niaosong Dist', '833'],\n ['Dashu Dist', '840'],\n ['Qishan Dist', '842'],\n ['Meinong Dist', '843'],\n ['Liugui Dist', '844'],\n ['Neimen Dist', '845'],\n ['Shanlin Dist', '846'],\n ['Jiaxian Dist', '847'],\n ['Taoyuan Dist', '848'],\n ['Namaxia Dist', '849'],\n ['Maolin Dist', '851'],\n ['Qieding Dist', '852'],\n ],\n 'Pingtung County': [\n ['Pingtung City', '900'],\n ['Sandimen Township', '901'],\n ['Wutai Township', '902'],\n ['Majia Township', '903'],\n ['Jiuru Township', '904'],\n ['Ligang Township', '905'],\n ['Gaoshu Township', '906'],\n ['Yanpu Township', '907'],\n ['Changzhi Township', '908'],\n ['Linluo Township', '909'],\n ['Zhutian Township', '911'],\n ['Neipu Township', '912'],\n ['Wandan Township', '913'],\n ['Chaozhou Township', '920'],\n ['Taiwu Township', '921'],\n ['Laiyi Township', '922'],\n ['Wanluan Township', '923'],\n ['Kanding Township', '924'],\n ['Xinpi Township', '925'],\n ['Nanzhou Township', '926'],\n ['Linbian Township', '927'],\n ['Donggang Township', '928'],\n ['Liuqiu Township', '929'],\n ['Jiadong Township', '931'],\n ['Xinyuan Township', '932'],\n ['Fangliao Township', '940'],\n ['Fangshan Township', '941'],\n ['Chunri Township', '942'],\n ['Shizi Township', '943'],\n ['Checheng Township', '944'],\n ['Mudan Township', '945'],\n ['Hengchun Township', '946'],\n ['Manzhou Township', '947'],\n ],\n 'Hualien County': [\n ['Hualien City', '970'],\n ['Xincheng Township', '971'],\n ['Xiulin Township', '972'],\n [\"Ji'an Township\", '973'],\n ['Shoufeng Township', '974'],\n ['Fenglin Township', '975'],\n ['Guangfu Township', '976'],\n ['Fengbin Township', '977'],\n ['Ruisui Township', '978'],\n ['Wanrong Township', '979'],\n ['Yuli Township', '981'],\n ['Zhuoxi Township', '982'],\n ['Fuli Township', '983'],\n ],\n 'Taitung County': [\n ['Taitung City', '950'],\n ['Ludao Township', '951'],\n ['Lanyu Township', '952'],\n ['Yanping Township', '953'],\n ['Beinan Township', '954'],\n ['Luye Township', '955'],\n ['Guanshan Township', '956'],\n ['Haiduan Township', '957'],\n ['Chishang Township', '958'],\n ['Donghe Township', '959'],\n ['Chenggong Township', '961'],\n ['Changbin Township', '962'],\n ['Taimali Township', '963'],\n ['Jinfeng Township', '964'],\n ['Dawu Township', '965'],\n ['Daren Township', '966'],\n ],\n 'Penghu County': [\n ['Magong City', '880'],\n ['Xiyu Township', '881'],\n [\"Wang'an Township\", '882'],\n ['Qimei Township', '883'],\n ['Baisha Township', '884'],\n ['Huxi Township', '885'],\n ],\n 'Kinmen County': [\n ['Jinsha Township', '890'],\n ['Jinhu Township', '891'],\n ['Jinning Township', '892'],\n ['Jincheng Township', '893'],\n ['Lieyu Township', '894'],\n ['Wuqiu Township', '896'],\n ],\n 'Lienchiang County': [\n ['Nangan Township', '209'],\n ['Beigan Township', '210'],\n ['Juguang Township', '211'],\n ['Dongyin Township', '212'],\n ],\n },\n};\n","import SHARED from '../shared/shared';\nimport { isElementExist, getElement, getAllElements, insert, warn } from '../shared/utils.js';\nimport { OverlayScrollbars } from 'overlayscrollbars';\n// 縣市資料\nimport { cityData } from './cityData.js';\n\n('use strict');\n\n// create template method\nconst createTemplate = d4 => {\n const { TEMPLATE } = fesdDB.dropdown4;\n const { childDom } = d4.s;\n const container = document.createElement('div');\n const filter = d4.classList.contains('filter');\n const filterPlaceholder = d4.getAttribute('filter-placeholder');\n container.innerHTML = TEMPLATE(filter, filterPlaceholder);\n const content = container.querySelector('.dropdown-list');\n [...childDom].forEach(child => {\n if (child.tagName === 'LI') {\n if (child.classList.contains('has-sublayer')) {\n const subOptions = child.querySelectorAll('li');\n [...subOptions].forEach(subOption => {\n if (!subOption.hasAttribute('data-option') || subOption.getAttribute('data-option').trim() === '') {\n subOption.setAttribute('data-option', subOption.textContent.trim());\n }\n });\n } else {\n if (!child.hasAttribute('data-option') || child.getAttribute('data-option').trim() === '') {\n child.setAttribute('data-option', child.textContent.trim());\n }\n }\n }\n content.append(child);\n });\n\n return container.children[0];\n};\n\n/**\n * 判斷是否有設定連動\n * @param {object} d4 d4 Element\n */\nconst detectSync = d4 => {\n const controlElements = d4.getAttribute('control-elements')?.split(',');\n if (controlElements) {\n controlElements.forEach(el => {\n const disabledEl = document.querySelector(el);\n if (!disabledEl) {\n warn('dropdown', `Can't not find control element(${el})`);\n }\n if (disabledEl && disabledEl.classList.contains('disabled')) {\n disabledEl.classList.remove('disabled');\n if (disabledEl.tagName === 'DROPDOWN-EL' && disabledEl.s.activeLi) {\n setSelectDisplay(disabledEl, [...disabledEl.s.allLi].indexOf(disabledEl.s.activeLi));\n }\n }\n });\n }\n};\n\n/**\n * 顯示選擇的選項\n * @param {object} d4 d4 Element\n * @param {number} valueIndex 被選擇的選項索引值\n * @returns\n */\nconst setSelectDisplay = (d4, valueIndex) => {\n const placeholder = d4.getAttribute('d4-placeholder');\n const allLi = d4.querySelectorAll('.dropdown-list li');\n if (valueIndex < 0 || valueIndex.length === 0) {\n // 恢復空值狀態\n allLi.forEach(el => {\n el.classList.remove('active');\n });\n d4.s.activeLi = undefined;\n // 判斷單選或複選\n switch (d4.s.selectType) {\n case 'single':\n d4.s.value = {\n index: -1,\n id: undefined,\n el: undefined,\n };\n break;\n case 'multiple':\n d4.s.value = [];\n break;\n }\n\n d4.s.selectDisplayEl.textContent = placeholder.trim();\n d4.setAttribute('d4-value', '');\n } else {\n if (d4.classList.contains('disabled')) {\n d4.s.selectDisplayEl.textContent = placeholder.trim();\n return;\n }\n // 判斷單選或複選\n switch (d4.s.selectType) {\n case 'single':\n const option = allLi[valueIndex].textContent.trim();\n d4.s.allLi.forEach(el => {\n el.classList.remove('active');\n });\n allLi[valueIndex].classList.add('active');\n d4.s.selectDisplayEl.textContent = option;\n d4.s.activeLi = allLi[valueIndex];\n d4.s.value = {\n index: valueIndex,\n id: allLi[valueIndex].getAttribute('data-option'),\n el: allLi[valueIndex],\n };\n break;\n case 'multiple':\n if (Array.isArray(valueIndex)) {\n d4.s.allLi.forEach(li => {\n if (valueIndex.indexOf([...d4.s.allLi].indexOf(li)) >= 0) {\n li.classList.add('active');\n } else {\n li.classList.remove('active');\n }\n });\n }\n const activeLi = d4.querySelectorAll('.dropdown-list li.active');\n if (activeLi.length <= 0) {\n d4.s.selectDisplayEl.textContent = placeholder.trim();\n } else {\n d4.s.selectDisplayEl.textContent = '';\n activeLi.forEach(li => {\n const id = li.getAttribute('data-option');\n const option = li.textContent.trim();\n const tagEl = `<div class=\"option-btn\" data-option=\"${id}\"><div class=\"text\">${option}</div><div class=\"remove-icon\"></div></div>`;\n d4.s.selectDisplayEl.insertAdjacentHTML(insert.append, tagEl);\n });\n }\n d4.s.activeLi = activeLi;\n d4.s.value = [...activeLi].map(option => {\n const obj = {\n index: [...allLi].indexOf(option),\n id: option.getAttribute('data-option'),\n el: option,\n };\n return obj;\n });\n const valueArray = [...activeLi].map(option => option.getAttribute('data-option'));\n d4.setAttribute('d4-value', valueArray.join());\n break;\n }\n }\n};\n\n/**\n * 載入台灣縣市資料\n * @param {*} d4 d4 Element\n */\nconst loadCityData = d4 => {\n const lang = d4.s.cityLang;\n // 塞入縣市資料\n if (d4.classList.contains('city')) {\n d4.s.dropdownEl.querySelector('.dropdown-list').innerHTML = '';\n Object.keys(cityData[lang]).forEach(city => {\n const li = document.createElement('li');\n li.textContent = city;\n li.setAttribute('data-option', city);\n d4.s.dropdownEl.querySelector('.dropdown-list').append(li);\n });\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n }\n};\n\n/**\n * 載入對應地區資料\n */\nconst loadDistData = (d4, city) => {\n const lang = d4.s.cityLang;\n // 塞入地區資料\n cityData[lang][city].forEach((dist, index) => {\n const li = document.createElement('li');\n li.textContent = dist[0];\n li.setAttribute('data-option', dist[0]);\n d4.querySelector('.dropdown-list').append(li);\n });\n};\n\n/**\n * 關閉全部下拉選單\n */\nconst closeAllDropdown = () => {\n const allDropdown = getAllElements('dropdown-el[d4-status=\"open\"]');\n allDropdown.forEach(el => {\n el.close();\n });\n};\n\n/**\n * 設定卷軸樣式\n */\nconst settingScrollbarStyle = () => {\n const { SETTINGS } = fesdDB.dropdown4;\n const setProperty = (element, obj) => {\n Object.keys(obj).forEach(key => {\n element.style.setProperty(`--${key}`, obj[key]);\n });\n };\n setProperty(document.documentElement, SETTINGS.scrollbar);\n};\n\nsettingScrollbarStyle();\n// 點擊空白處關閉下拉選單\ndocument.addEventListener('click', function () {\n closeAllDropdown();\n});\n\n// 創建 Custom Element\nclass Dropdown4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n static get observedAttributes() {\n return ['d4-status', 'd4-placeholder', 'd4-value'];\n }\n attributeChangedCallback(attr, oldVal, newVal) {\n const d4 = this;\n switch (attr) {\n case 'd4-status':\n if (oldVal === null || oldVal === newVal) return;\n if (newVal === 'open' || newVal === 'close') {\n d4.emit(newVal);\n }\n break;\n case 'd4-value':\n if (oldVal === null || oldVal === newVal) return;\n if (newVal !== '') {\n const selectType = d4.hasAttribute('multiple') ? 'multiple' : 'single';\n switch (selectType) {\n case 'single':\n const li = d4.querySelector(`.dropdown-list li[data-option=\"${newVal}\"]`);\n if (isElementExist(li)) {\n setSelectDisplay(d4, [...d4.s.allLi].indexOf(li));\n } else {\n setSelectDisplay(d4, -1);\n }\n break;\n case 'multiple':\n const valueLiArray = [];\n d4.querySelector(`.dropdown-list li`).classList.remove('active');\n newVal.split(',').forEach(option => {\n const li = d4.querySelector(`.dropdown-list li[data-option=\"${option}\"]`);\n if (isElementExist(li)) {\n li.classList.add('active');\n valueLiArray.push(li);\n }\n });\n const valueIndexArray = valueLiArray.map(li => [...d4.s.allLi].indexOf(li));\n setSelectDisplay(d4, valueIndexArray);\n break;\n }\n } else {\n setSelectDisplay(d4, -1);\n }\n d4.emit('change');\n break;\n case 'd4-placeholder':\n if (oldVal === null) return;\n if (oldVal !== newVal && d4.s.value.index < 0) {\n setSelectDisplay(d4, d4.s.value.index);\n }\n break;\n }\n }\n connectedCallback() {\n const d4 = this;\n if (d4.initialize || d4.classList.contains('d4-initialize')) return;\n d4.initialize = true;\n this.#create();\n }\n #create() {\n this.s = {};\n this.__events__ = {};\n\n if (!this.hasAttribute('d4-status')) {\n this.setAttribute('d4-status', 'close');\n }\n if (!this.hasAttribute('d4-value')) {\n this.setAttribute('d4-value', '');\n }\n this.#mount();\n }\n #mount() {\n this.s.childDom = this.childNodes;\n this.s.template = createTemplate(this);\n this.innerHTML = '';\n this.append(this.s.template);\n this.#init();\n }\n #init() {\n const d4 = this;\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n d4.s.selectDisplayEl = d4.querySelector('.select-display');\n d4.s.dropdownEl = d4.querySelector('.dropdown');\n d4.s.selectType = d4.hasAttribute('multiple') ? 'multiple' : 'single';\n d4.s.cityLang = d4.hasAttribute('city-lang') ? d4.getAttribute('city-lang') : 'zh-tw';\n loadCityData(d4);\n d4.s.subDropdownTotalH = 0;\n const value = d4.getAttribute('d4-value');\n switch (d4.s.selectType) {\n case 'single':\n let valueLi;\n // 如果是地區下拉選單\n if (d4.classList.contains('dist')) {\n const cityDropdown = document.querySelector(`dropdown-el[dist-select=\"${d4.id}\"]`);\n //判斷縣市下拉選單是否有值\n const cityDropdownHasVal = cityDropdown ? cityDropdown.getAttribute('d4-value') !== '' : false;\n if (cityDropdown && cityDropdownHasVal) {\n const city = cityDropdown.getAttribute('d4-value');\n loadDistData(d4, city);\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n d4.classList.remove('disabled');\n if (d4.getAttribute('d4-value') !== '') {\n const dist = value.split(',')[1];\n valueLi = d4.querySelector(`.dropdown-list li[data-option=\"${dist}\"]`);\n d4.setAttribute('d4-value', dist);\n }\n }\n } else {\n valueLi = d4.querySelector(`.dropdown-list li[data-option=\"${value}\"]`);\n }\n if (isElementExist(valueLi)) {\n valueLi.classList.add('active');\n d4.s.activeLi = valueLi;\n d4.s.value = {\n index: [...d4.s.allLi].indexOf(valueLi),\n id: value,\n el: valueLi,\n };\n } else {\n d4.s.activeLi = undefined;\n d4.s.value = {\n index: -1,\n id: undefined,\n el: undefined,\n };\n }\n break;\n case 'multiple':\n const valueLiArray = [];\n value.split(',').forEach(option => {\n const li = d4.querySelector(`.dropdown-list li[data-option=\"${option}\"]`);\n if (isElementExist(li)) {\n valueLiArray.push(li);\n }\n });\n if (valueLiArray.length > 0) {\n d4.s.value = {\n index: valueLiArray.map(li => [...d4.s.allLi].indexOf(li)),\n id: valueLiArray.map(li => li.getAttribute('data-option')),\n el: valueLiArray.map(li => li),\n };\n } else {\n d4.s.value = {\n index: [],\n id: undefined,\n el: undefined,\n };\n }\n break;\n }\n setSelectDisplay(d4, d4.s.value.index);\n d4.#event();\n d4.classList.add('d4-initialize');\n }\n #event() {\n const d4 = this;\n // 下拉選單開關\n d4.__events__.dropdownToggle = () => {\n d4.addEventListener('click', function (e) {\n e.stopPropagation();\n const status = d4.getAttribute('d4-status');\n switch (status) {\n case 'open':\n d4.close();\n break;\n case 'close':\n d4.open();\n break;\n }\n });\n };\n\n // 下拉選單完成過渡\n d4.__events__.transitionend = () => {\n function toggleTransitionend(event) {\n if (event.target === this) {\n const dropdownStatus = d4.getAttribute('d4-status');\n const hasFilter = d4.classList.contains('filter');\n switch (dropdownStatus) {\n case 'open':\n const scroller = d4.querySelector('.dropdown-scroller');\n // 捲動到 active 的選項\n const scrollToActive = () => {\n if (d4.__scroller__) {\n const { viewport } = d4.__scroller__.elements();\n if (isElementExist(d4.s.activeLi)) {\n const halfActiveLiHeight = d4.s.activeLi.clientHeight / 2;\n const offsetTop = d4.s.activeLi.offsetTop;\n const scroll = offsetTop - scroller.clientHeight / 2 + halfActiveLiHeight > 0 ? offsetTop - scroller.clientHeight / 2 + halfActiveLiHeight : 0;\n viewport.scrollTo({\n top: scroll,\n behavior: 'smooth',\n });\n } else {\n viewport.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n }\n }\n };\n if (hasFilter) {\n d4.querySelector('.filter-bar input').disabled = false;\n d4.querySelector('.filter-bar input').focus();\n }\n if (d4.s.selectType === 'single') {\n scrollToActive();\n }\n break;\n case 'close':\n d4.__scroller__.update(true);\n d4.s.dropdownEl.removeAttribute('style');\n if (hasFilter) d4.querySelector('.filter-bar input').disabled = true;\n break;\n }\n }\n }\n d4.s.dropdownEl.addEventListener('transitionend', toggleTransitionend);\n };\n\n // 綁定卷軸\n d4.__events__.bindScrollbar = (d4 = this) => {\n const scroller = d4.querySelector('.dropdown-scroller');\n // 綁定卷軸套件\n d4.__scroller__ = OverlayScrollbars(scroller, {\n overflowBehavior: {\n x: 'hidden',\n },\n });\n };\n\n // 顯示選的選項\n d4.__events__.selectOption = (d4 = this) => {\n let computedHeight, totalHeight;\n const scroller = d4.querySelector('.dropdown-scroller');\n const citySelect = d4.classList.contains('city');\n d4.s.allLi = d4.querySelectorAll('.dropdown-list li');\n d4.s.allLi.forEach(option => {\n option.addEventListener('click', function (e) {\n const clickOption = this;\n const clickIndex = [...d4.s.allLi].indexOf(clickOption);\n // 子下拉選單打開前的總高度\n const defaultHeight = parseInt(d4.getAttribute('d4-default-height'));\n // 有子層選單\n if (clickOption.classList.contains('has-sublayer')) {\n e.stopPropagation();\n const subDropdown = clickOption.querySelector('.sub-dropdown');\n const subDropdownList = subDropdown.querySelector('.sub-dropdown-list');\n const subDropdownListMargin = parseInt(getComputedStyle(subDropdownList).marginTop) + parseInt(getComputedStyle(subDropdownList).marginBottom);\n subDropdown.style.cssText = `--height: ${subDropdownList.offsetHeight + subDropdownListMargin}px`;\n // 子下拉選單高度\n const subDropdownH = parseInt(subDropdown.style.cssText.replace('--height:', '').trim());\n // 最大高度\n const maxHeight = parseInt(getComputedStyle(scroller).maxHeight);\n const recalculate = () => {\n // 重新計算整個下拉選單的高度\n computedHeight = defaultHeight + d4.s.subDropdownTotalH;\n totalHeight = computedHeight > maxHeight ? maxHeight : computedHeight;\n d4.style.cssText = `--maxHeight: ${totalHeight}px;`;\n d4.s.dropdownEl.style.height = `${totalHeight}px`;\n };\n if (!clickOption.classList.contains('open')) {\n // 子層下拉選單打開\n clickOption.classList.add('open');\n d4.s.subDropdownTotalH += subDropdownH;\n recalculate();\n } else {\n // 子層下拉選單關閉\n clickOption.classList.remove('open');\n d4.s.subDropdownTotalH -= subDropdownH;\n recalculate();\n }\n const collapse = () => {\n d4.__scroller__.update(true);\n subDropdown.removeEventListener('transitionend', collapse);\n };\n subDropdown.addEventListener('transitionend', collapse);\n }\n // 沒有子層選單\n else {\n detectSync(d4);\n // 判斷單選或複選\n switch (d4.s.selectType) {\n // 單選\n case 'single':\n d4.setAttribute('d4-value', clickOption.getAttribute('data-option'));\n // 選擇縣市\n if (citySelect) {\n const lang = d4.s.cityLang;\n const city = option.textContent.trim();\n const distSelectEl = document.getElementById(d4.getAttribute('dist-select'));\n if (distSelectEl) {\n distSelectEl.querySelector('.dropdown-list').textContent = '';\n setSelectDisplay(distSelectEl, -1);\n cityData[lang][city].forEach((dist, index) => {\n const li = document.createElement('li');\n li.textContent = dist[0];\n li.setAttribute('data-option', dist[0]);\n distSelectEl.querySelector('.dropdown-list').append(li);\n });\n d4.__events__.selectOption(distSelectEl);\n }\n }\n if (clickOption.parentNode.closest('li')?.classList.contains('has-sublayer')) {\n e.stopPropagation();\n d4.close();\n }\n break;\n // 複選\n case 'multiple':\n e.stopPropagation();\n clickOption.classList.toggle('active');\n setSelectDisplay(d4, clickIndex);\n break;\n }\n }\n });\n });\n };\n\n // 篩選功能\n d4.__events__.filterHandler = () => {\n if (d4.classList.contains('filter')) {\n d4.querySelector('.filter-bar').addEventListener('click', function (e) {\n e.stopPropagation();\n });\n d4.querySelector('.filter-input').addEventListener('input', function () {\n const val = this.value.toUpperCase();\n d4.s.allLi.forEach(el => {\n if (!el.textContent.toUpperCase().includes(val)) el.style.display = 'none';\n else el.removeAttribute('style');\n });\n });\n }\n };\n\n // 複選標籤移除\n d4.__events__.removeTag = () => {\n if (d4.s.selectType === 'single') return;\n d4.s.selectDisplayEl.addEventListener('click', function (e) {\n if (e.target.classList.contains('select-display')) return;\n const optionBtn = e.target.classList.contains('option-btn') ? e.target : e.target.parentElement;\n if (optionBtn.contains(e.target)) {\n e.stopPropagation();\n if (e.target.classList.contains('remove-icon')) {\n const tag = e.target.parentElement;\n const id = tag.getAttribute('data-option');\n d4.s.dropdownEl.querySelector(`.dropdown-list li[data-option=\"${id}\"]`).classList.remove('active');\n d4.s.activeLi = d4.querySelectorAll('.dropdown-list li.active');\n e.target.parentElement.remove();\n const activeLiArray = [...d4.s.activeLi];\n d4.s.value = activeLiArray.map(option => {\n const obj = {\n index: [...d4.s.allLi].indexOf(option),\n id: option.getAttribute('data-option'),\n el: option,\n };\n return obj;\n });\n d4.s.activeLi = activeLiArray;\n const valueArray = activeLiArray.map(option => option.getAttribute('data-option'));\n d4.setAttribute('d4-value', valueArray.join());\n if (activeLiArray.length <= 0) {\n d4.s.selectDisplayEl.textContent = d4.getAttribute('d4-placeholder').trim();\n }\n }\n }\n });\n };\n d4.__events__.dropdownToggle();\n d4.__events__.bindScrollbar();\n d4.__events__.selectOption();\n d4.__events__.filterHandler();\n d4.__events__.removeTag();\n d4.__events__.transitionend();\n }\n open() {\n const d4 = this;\n const dropdownHeight = d4.querySelector('.dropdown-scroller').clientHeight;\n const hasFilter = d4.classList.contains('filter');\n const totalHeight = () => {\n if (hasFilter) {\n return d4.querySelector('.filter-bar').clientHeight + dropdownHeight;\n }\n return dropdownHeight;\n };\n closeAllDropdown();\n d4.setAttribute('d4-status', 'open');\n d4.setAttribute('d4-default-height', totalHeight());\n d4.style.cssText = `--maxHeight: ${totalHeight()}px;`;\n d4.s.dropdownEl.style.cssText = `\n height: ${totalHeight()}px;\n z-index: 2;\n `;\n return this;\n }\n close() {\n const d4 = this;\n const allSublayer = d4.s.dropdownEl.querySelectorAll('.has-sublayer');\n const defaultHeight = parseInt(d4.getAttribute('d4-default-height'));\n d4.setAttribute('d4-status', 'close');\n d4.s.dropdownEl.style.height = '0px';\n allSublayer.forEach(item => {\n item.classList.remove('open');\n });\n d4.style.cssText = `--maxHeight: ${defaultHeight}px;`;\n d4.s.subDropdownTotalH = 0;\n return this;\n }\n scrollTo(scroll) {\n const d4 = this;\n const { viewport } = d4.__scroller__.elements();\n viewport.scrollTo({\n top: scroll,\n behavior: 'smooth',\n });\n }\n update() {\n this.__events__.selectOption();\n }\n}\n\nObject.assign(Dropdown4.prototype, SHARED);\n\n// define custom element\n// if (!customElements.get('dropdown-el')) {\n// customElements.define('dropdown-el', Dropdown4);\n// }\n\nexport default Dropdown4;\n","'use strict';\n\n// 獲取標籤上斷點設定\nfunction getBreakpoints(m4) {\n const breakpoints = {};\n [...m4.attributes].forEach(attr => {\n if (attr.name.includes('duration-')) {\n const key = attr.name.replace('duration-', '');\n const value = attr.nodeValue;\n breakpoints[key] = Number(value);\n }\n });\n return Object.keys(breakpoints).length === 0 ? null : breakpoints;\n}\n\n// 透過標籤上設定的斷點判斷持續時間\nfunction getDuration(m4) {\n if (getBreakpoints(m4)) {\n let breakpoint;\n const points = Object.keys(getBreakpoints(m4)).map(point => {\n return {\n value: point,\n point,\n };\n });\n points.sort((a, b) => parseInt(b.value, 10) - parseInt(a.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const { point, value } = points[i];\n if (window.matchMedia(`(max-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n }\n return breakpoint ? Number(getBreakpoints(m4)[breakpoint]) : m4.s.options.duration;\n } else {\n return m4.s.options.duration;\n }\n}\n\n// 產生動畫結構\nfunction createAnimateWrap(m4) {\n const { behavior, continual, gap } = m4.s.options;\n const childDOM = m4.childNodes;\n const container = document.createElement('div');\n const animateItem = document.createElement('div');\n container.className = 'animate-container';\n animateItem.className = 'animate-item';\n [...childDOM].forEach(element => {\n animateItem.append(element);\n });\n function cloneElement() {\n const cloneAnimateWrap = animateItem.cloneNode(true);\n cloneAnimateWrap.classList.add('clone');\n m4.s.cloneAnimation = null;\n m4.s.cloneAnimateEl = cloneAnimateWrap;\n return cloneAnimateWrap;\n }\n m4.s.animation = null;\n m4.s.animateEl = animateItem;\n m4.textContent = '';\n container.append(animateItem);\n m4.append(container);\n if (animateItem.clientWidth * 2 + gap >= m4.clientWidth) {\n if (behavior === 'normal' && continual) {\n container.append(cloneElement());\n }\n } else {\n m4.s.options.continual = false;\n }\n}\n\n// 設定動畫影格\nfunction keyframes(m4) {\n const { behavior, direction, continual } = m4.s.options;\n let framesObj = {};\n // 判斷模式\n switch (behavior) {\n case 'normal':\n // 判斷方向\n // normal 模式會判斷是否開啟 continual\n let animateFrom, animateTo;\n switch (direction) {\n case 'top':\n animateFrom = continual ? 'translate3d(0,100%,0)' : `translate3d(0,${m4.clientHeight}px,0)`;\n animateTo = continual ? 'translate3d(0,-100%,0)' : 'translate3d(0,-100%,0)';\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(0,0,0)' }, { transform: 'translate3d(0,-200%,0)' }];\n }\n break;\n case 'right':\n animateFrom = continual ? 'translate3d(0,0,0)' : 'translate3d(-100%,0,0)';\n animateTo = continual ? 'translate3d(200%,0,0)' : `translate3d(${m4.clientWidth}px,0,0)`;\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(-100%,0,0)' }, { transform: 'translate3d(100%,0,0)' }];\n }\n break;\n case 'bottom':\n animateFrom = continual ? 'translate3d(0,-100%,0)' : 'translate3d(0,-100%,0)';\n animateTo = continual ? 'translate3d(0,100%,0)' : `translate3d(0,${m4.clientHeight}px,0)`;\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(0,-200%,0)' }, { transform: 'translate3d(0,0,0)' }];\n }\n break;\n case 'left':\n animateFrom = continual ? 'translate3d(100%,0,0)' : `translate3d(${m4.clientWidth}px,0,0)`;\n animateTo = continual ? 'translate3d(-100%,0,0)' : 'translate3d(-100%,0,0)';\n framesObj.animate1 = [{ transform: animateFrom }, { transform: animateTo }];\n if (continual) {\n framesObj.animate2 = [{ transform: 'translate3d(0,0,0)' }, { transform: 'translate3d(-200%,0,0)' }];\n }\n break;\n }\n break;\n // 來回模式\n case 'alternate':\n // 判斷方向\n switch (direction) {\n case 'top':\n framesObj.animate1 = [{ transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }, { transform: `translate3d(0,0,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }];\n break;\n case 'right':\n framesObj.animate1 = [{ transform: `translate3d(0,0,0)` }, { transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'bottom':\n framesObj.animate1 = [{ transform: `translate3d(0,0,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'left':\n framesObj.animate1 = [{ transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }, { transform: `translate3d(0,0,0)` }, { transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }];\n break;\n }\n break;\n case 'endStop':\n // 判斷方向\n switch (direction) {\n case 'top':\n framesObj.animate1 = [{ transform: `translate3d(0,${m4.clientHeight}px,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'right':\n framesObj.animate1 = [{ transform: `translate3d(-100%,0,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'bottom':\n framesObj.animate1 = [{ transform: `translate3d(0,-100%,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }];\n break;\n case 'left':\n framesObj.animate1 = [{ transform: `translate3d(${m4.clientWidth}px,0,0)` }, { transform: `translate3d(calc(${m4.clientWidth}px - 100%),0,0)` }];\n break;\n }\n break;\n }\n return framesObj;\n}\n\nfunction debounce(func) {\n let timer;\n return function (event) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(func, 200, event);\n };\n}\n\nclass Marquee4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n static get observedAttributes() {\n return [];\n }\n attributeChangedCallback(attr, oldVal, newVal) { }\n connectedCallback() {\n if (this.initialize) return;\n this.initialize = true;\n this.#create();\n }\n #create() {\n const options = {\n direction: this.getAttribute('direction') || fesdDB.marquee4.SETTINGS.direction, // up / down / left / right\n behavior: this.getAttribute('behavior') || fesdDB.marquee4.SETTINGS.behavior, // normal / alternate / endStop\n duration: Number(this.getAttribute('duration')) || fesdDB.marquee4.SETTINGS.duration, // ms\n durationBreakpoints: getBreakpoints(this) || fesdDB.marquee4.SETTINGS.durationBreakpoints,\n autoplay: this.getAttribute('autoplay') || fesdDB.marquee4.SETTINGS.autoplay, // normal / alternate / endStop\n pauseOnMouseenter: this.getAttribute('pauseOnMouseEnter') ? (this.getAttribute('pauseOnMouseEnter') === 'true' ? true : false) : fesdDB.marquee4.SETTINGS.pauseOnMouseenter, // true / false\n continual: this.getAttribute('continual') ? (this.getAttribute('continual') === 'true' ? true : false) : fesdDB.marquee4.SETTINGS.continual, // true / false\n gap: Number(this.getAttribute('gap')) || fesdDB.marquee4.SETTINGS.gap,\n };\n this.s = {};\n this.s.options = options;\n this.s.nowDuration = getDuration(this);\n createAnimateWrap(this);\n this.#init();\n }\n #init() {\n const { direction, continual, gap } = this.s.options;\n // 方向為左/右\n switch (direction) {\n case 'left':\n case 'right':\n this.style.cssText = `--continual-gap: ${gap}px;`;\n break;\n case 'top':\n case 'bottom':\n if (continual) {\n this.style.cssText = `height: ${this.s.animateEl.clientHeight}px;--continual-gap: ${gap}px;`;\n } else {\n this.style.cssText = `min-height: ${this.s.animateEl.clientHeight}px;--continual-gap: ${gap}px;`;\n }\n break;\n }\n this.#animation();\n this.#event();\n if (continual) {\n this.classList.add(`continual`);\n }\n this.classList.add('m4-initialize');\n }\n #animation() {\n const m4 = this;\n const { direction, behavior, duration, autoplay, pauseOnMouseenter, continual } = m4.s.options;\n let playDelay; //跑馬燈自動撥放開始前的延遲時間\n function animateInit() {\n // 判斷模式\n switch (behavior) {\n case 'normal':\n m4.s.animateEl.style.transform = `${keyframes(m4).animate1[0].transform}`;\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n iterations: Infinity,\n });\n if (continual) {\n m4.s.cloneAnimateEl.style.transform = `${keyframes(m4).animate2[0].transform}`;\n m4.s.cloneAnimation = m4.s.cloneAnimateEl.animate(keyframes(m4).animate2, {\n duration: m4.s.nowDuration,\n delay: -m4.s.nowDuration / 2,\n iterations: Infinity,\n });\n }\n break;\n case 'alternate':\n let moveDistance; //移動的距離\n let averageDuration; //平均速率\n // 進場的keyframe\n function enterKeyframes() {\n let framesArr = [];\n switch (direction) {\n case 'top':\n moveDistance = Math.abs(m4.s.animateEl.scrollHeight - m4.clientHeight);\n averageDuration = parseInt(m4.s.nowDuration / (moveDistance * 2)) * m4.s.animateEl.scrollHeight;\n framesArr = [{ transform: `translate3d(0,${m4.clientHeight}px,0)` }, { transform: `translate3d(0,calc(${m4.clientHeight}px - 100%),0)` }];\n break;\n case 'right':\n moveDistance = Math.abs(m4.s.animateEl.scrollWidth - m4.clientWidth);\n averageDuration = parseInt(m4.s.nowDuration / (moveDistance * 2)) * m4.s.animateEl.scrollWidth;\n framesArr = [{ transform: `translate3d(-100%,0,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'bottom':\n moveDistance = Math.abs(m4.s.animateEl.scrollHeight - m4.clientHeight);\n averageDuration = parseInt(duration / (moveDistance * 2)) * m4.s.animateEl.scrollHeight;\n framesArr = [{ transform: `translate3d(0,-100%,0)` }, { transform: `translate3d(0,0,0)` }];\n break;\n case 'left':\n moveDistance = Math.abs(m4.s.animateEl.scrollWidth - m4.clientWidth);\n averageDuration = parseInt(duration / (moveDistance * 2)) * m4.s.animateEl.scrollWidth;\n framesArr = [{ transform: `translate3d(${m4.clientWidth}px,0,0)` }, { transform: `translate3d(calc(-100% + ${m4.clientWidth}px),0,0)` }];\n break;\n }\n return framesArr;\n }\n // 跑馬燈範圍高度大於內容高度或是方向為左/右時\n if (m4.clientHeight > m4.s.animateEl.scrollHeight || direction === 'left' || direction === 'right') {\n m4.s.animateEl.style.transform = `${enterKeyframes()[0].transform}`;\n const enterAnimate = m4.s.animateEl.animate(enterKeyframes(), {\n duration: averageDuration,\n fill: 'forwards',\n });\n enterAnimate.finished.then(() => {\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n iterations: Infinity,\n });\n });\n }\n if (m4.s.animation) {\n m4.s.animation.ready.then(() => {\n m4.s.animateEl.classList.add('ready');\n });\n }\n break;\n case 'endStop':\n m4.s.animateEl.style.transform = `${keyframes(m4).animate1[0].transform}`;\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n fill: 'forwards',\n });\n break;\n }\n m4.s.animateEl.classList.add('start');\n if (autoplay === false) {\n m4.s.animateEl.classList.remove('start');\n m4.s.animation.cancel();\n }\n }\n clearTimeout(playDelay);\n playDelay = setTimeout(\n () => {\n animateInit();\n },\n autoplay ? autoplay : 0,\n );\n\n // mouseenter/leave Event\n m4.addEventListener('mouseenter', function () {\n if (m4.s.animation && pauseOnMouseenter && m4.s.animation.playState === 'running') {\n m4.pause();\n }\n });\n m4.addEventListener('mouseleave', function () {\n if (m4.s.animation && pauseOnMouseenter && m4.s.animation.playState === 'paused') {\n m4.play();\n }\n });\n }\n #event() {\n const m4 = this;\n function updateDuration() {\n const startTime = m4.s.animation.startTime;\n const cloneStartTime = m4.s.cloneAnimation ? m4.s.cloneAnimation.startTime : null;\n m4.s.nowDuration = getDuration(m4);\n m4.s.animation.cancel();\n if (m4.s.cloneAnimation) {\n m4.s.cloneAnimation.cancel();\n }\n m4.s.animation = m4.s.animateEl.animate(keyframes(m4).animate1, {\n duration: m4.s.nowDuration,\n iterations: Infinity,\n });\n m4.s.animation.startTime = startTime;\n if (m4.s.cloneAnimation) {\n m4.s.cloneAnimation = m4.s.cloneAnimateEl.animate(keyframes(m4).animate2, {\n duration: m4.s.nowDuration,\n delay: -m4.s.nowDuration / 2,\n iterations: Infinity,\n });\n m4.s.cloneAnimation.startTime = cloneStartTime;\n }\n }\n window.addEventListener('resize', debounce(updateDuration));\n }\n play() {\n this.s.animation.play();\n this.s.animateEl.classList.add('start');\n if (this.s.options.continual) {\n this.s.cloneAnimation.play();\n this.s.cloneAnimateEl.classList.add('start');\n }\n }\n pause() {\n this.s.animation.pause();\n if (this.s.options.continual) {\n this.s.cloneAnimation.pause();\n }\n }\n}\n\n// define custom element\n// if (!customElements.get('marquee-el')) {\n// customElements.define('marquee-el', Marquee4);\n// }\n\nexport default Marquee4;\n","import { isNodeList, insert } from './../shared/utils';\n\n// debounce\nconst debounce = function (func) {\n let timer;\n return function (event) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(func, 200, event);\n };\n};\n\n// add class\nconst addClass = (target, className) => {\n if (isNodeList(target)) {\n target.forEach(el => {\n el.classList.add(className);\n });\n return;\n }\n\n target.classList.add(className);\n};\n\n// remove class\nconst removeClass = (target, className) => {\n if (isNodeList(target)) {\n target.forEach(el => {\n el.classList.remove(className);\n });\n return;\n }\n\n target.classList.remove(className);\n};\n\n// 拖拉類型控制\nclass dragControl {\n constructor(el) {\n this.$element = el;\n this.option = el.s.option.drag;\n this.#init();\n }\n\n // 初始化\n #init() {\n const $this = this;\n if (!$this.$element) return;\n\n $this.$container = $this.$element.querySelector('.drag-container');\n $this.$wrapper = $this.$container.querySelector('.wrapper');\n\n // scroll & resize event\n const updateEvent = () => {\n $this.#scrollerDetect();\n $this.#buttonDetect();\n };\n\n // scroll event handle\n $this.$wrapper.removeEventListener('scroll', updateEvent);\n $this.$wrapper.addEventListener('scroll', updateEvent);\n\n // resize event handle\n window.removeEventListener('resize', debounce(updateEvent));\n window.addEventListener('resize', debounce(updateEvent));\n\n // 左右拖拉事件綁定,若為 collapse 則強制啟用 draggable\n if ($this.option.draggable || $this.$element.s.type == 'collapse') $this.#bindDragEvent();\n // 左右箭頭事件綁定,若為 collapse 則不輸出 .navigation\n if ($this.option.navigation && $this.$element.s.type !== 'collapse') {\n $this.$container.insertAdjacentHTML(\n insert.prepend,\n `<div class=\"navigation\">\n <div class=\"button prev\">\n <div></div>\n </div>\n <div class=\"button next\">\n <div></div>\n </div>\n </div>`,\n );\n\n $this.$button = $this.$container?.querySelectorAll('.button');\n $this.#bindButtonEvent();\n }\n // 卷軸位置判斷\n $this.#scrollerDetect();\n // 隱藏按鈕判斷\n $this.#buttonDetect();\n // 選項事件綁定\n $this.#bindItemEvent();\n // 更新 active 位置\n // $this.update();\n }\n // 更新 active 位置\n update(element) {\n const $wrapper = element.querySelector('.wrapper');\n const $active = $wrapper?.querySelector('.active');\n if ($active) {\n // 移動至 active class 處\n const moveDistance = $active.offsetLeft + $active.getBoundingClientRect().width / 2 - $wrapper.getBoundingClientRect().width / 2;\n $wrapper.scrollTo({\n left: moveDistance,\n behavior: 'smooth',\n });\n }\n }\n // 左右箭頭事件綁定\n #bindButtonEvent() {\n const $this = this;\n const { $wrapper, $button } = $this;\n // button event\n const buttonEvent = function () {\n const type = this.classList.contains('next');\n const fix = parseInt($wrapper.getBoundingClientRect().width * 0.7);\n\n $wrapper.scrollTo({\n left: type ? $wrapper.scrollLeft + fix : $wrapper.scrollLeft - fix,\n behavior: 'smooth',\n });\n\n setTimeout(() => {\n $this.#buttonDetect();\n }, 100);\n };\n\n // button event handle\n $button.forEach($el => {\n $el.removeEventListener('click', buttonEvent);\n $el.addEventListener('click', buttonEvent);\n });\n }\n // 左右拖拉事件綁定\n #bindDragEvent() {\n const { $wrapper } = this;\n\n // 是否為點擊狀態\n let isDown = false;\n // 是否為移動狀態\n let isMoved = false;\n // 起始 X 軸數值\n let startX = 0;\n // 卷軸數值\n let scrollLeft = 0;\n\n // mousedown event\n const mousedownEvent = function (event) {\n event.preventDefault();\n\n isMoved = false;\n isDown = true;\n\n startX = event.pageX - $wrapper.offsetLeft;\n scrollLeft = $wrapper.scrollLeft;\n };\n\n // mousedown event handle\n $wrapper.removeEventListener('mousedown', mousedownEvent);\n $wrapper.addEventListener('mousedown', mousedownEvent);\n\n // mouseleave event\n const mouseleaveEvent = function () {\n isMoved = false;\n isDown = false;\n };\n\n // mouseleave event handle\n $wrapper.removeEventListener('mouseleave', mouseleaveEvent);\n $wrapper.addEventListener('mouseleave', mouseleaveEvent);\n\n // mouseup event\n const mouseupEvent = function (event) {\n event.preventDefault();\n isDown = false;\n };\n\n // mouseup event handle\n $wrapper.removeEventListener('mouseup', mouseupEvent);\n $wrapper.addEventListener('mouseup', mouseupEvent);\n\n // mousemove event\n const mousemoveEvent = function (event) {\n event.preventDefault();\n\n isMoved = true;\n\n if (!isDown) return;\n\n const x = event.pageX - $wrapper.offsetLeft;\n const walk = x - startX;\n $wrapper.scrollTo({\n left: scrollLeft - walk,\n });\n };\n\n // mousemove event handle\n $wrapper.removeEventListener('mousemove', mousemoveEvent);\n $wrapper.addEventListener('mousemove', mousemoveEvent);\n\n const reset = function (event) {\n if (isMoved) {\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n $wrapper.querySelectorAll('a').forEach($el => {\n $el.removeEventListener('click', reset);\n $el.addEventListener('click', reset);\n });\n }\n // 卷軸位置判斷\n #scrollerDetect() {\n const { $container, $wrapper } = this;\n\n const gate = $wrapper.scrollWidth - $wrapper.clientWidth;\n const value = $wrapper.scrollLeft;\n\n if (gate <= 0) return;\n\n addClass($container, 'scrollable');\n\n // 最前\n if (value == 0) {\n removeClass($container, 'scrollable');\n addClass($wrapper, 'start');\n removeClass($wrapper, 'end');\n }\n // 最後\n else if (value >= gate) {\n removeClass($container, 'scrollable');\n removeClass($wrapper, 'start');\n addClass($wrapper, 'end');\n }\n // 中間\n else {\n addClass($wrapper, 'center');\n removeClass($wrapper, 'start');\n removeClass($wrapper, 'end');\n }\n }\n // 隱藏按鈕判斷\n #buttonDetect() {\n const { $wrapper, $button, $element } = this;\n\n if (!$button) return;\n\n const gate = $wrapper.scrollWidth - $wrapper.clientWidth;\n const value = $wrapper.scrollLeft;\n\n if (gate <= 0) {\n addClass($button, 'hide');\n addClass($element, 'noScrollable');\n return;\n }\n\n // 最前\n if (value == 0) {\n $button.forEach($el => {\n if ($el.classList.contains('next')) {\n removeClass($el, 'hide');\n return;\n }\n\n addClass($el, 'hide');\n });\n }\n // 最後\n else if (value >= gate) {\n $button.forEach($el => {\n if ($el.classList.contains('next')) {\n addClass($el, 'hide');\n return;\n }\n\n removeClass($el, 'hide');\n });\n }\n // 中間\n else {\n removeClass($button, 'hide');\n }\n }\n // 選項事件綁定\n #bindItemEvent() {\n const { $element } = this;\n\n const itemEvent = $el => {\n if (this.option.selected) {\n const selectOption = $el.getAttribute('data-option').trim();\n $element.setAttribute('m4-status', selectOption);\n }\n };\n\n function clickHandler() {\n itemEvent(this);\n }\n\n this.$container.querySelectorAll('.item').forEach(el => {\n el.removeEventListener('click', clickHandler);\n el.addEventListener('click', clickHandler);\n });\n }\n}\n\n// 收合類型控制\nclass collapseControl {\n constructor(el) {\n this.$element = el;\n this.option = el.s.option.collapse;\n this.#init();\n }\n\n // 初始化\n #init() {\n if (!this.$element) return;\n\n this.$container = this.$element.querySelector('.collapse-container');\n this.$wrapper = this.$container.querySelector('.wrapper');\n\n // 隱藏按鈕判斷\n if (this.#buttonDetect()) {\n // 展開箭頭事件綁定\n this.#bindButtonEvent();\n }\n\n // 選項事件綁定\n this.#bindItemEvent();\n }\n // 隱藏按鈕判斷\n #buttonDetect() {\n const $drag = this.$element.querySelector('.drag-container');\n const $wrapper = $drag.querySelector('.wrapper');\n\n if ($wrapper.scrollWidth - $wrapper.clientWidth > 0) {\n $drag.insertAdjacentHTML(insert.append, `<div class=\"open-collapse\"></div>`);\n this.$button = $drag.querySelector('.open-collapse');\n return true;\n }\n\n return false;\n }\n // 展開箭頭事件綁定\n #bindButtonEvent() {\n const { $element, $button } = this;\n\n // button event\n const buttonEvent = function () {\n if ($element.classList.contains('expand')) {\n $element.classList.remove('expand');\n } else {\n $element.classList.add('expand');\n }\n };\n\n // button event handle\n $button.removeEventListener('click', buttonEvent);\n $button.addEventListener('click', buttonEvent);\n }\n // 選項事件綁定\n #bindItemEvent() {\n const { $element } = this;\n\n const itemEvent = ($el, collapse) => {\n if (collapse) {\n if ($element?.classList.contains('expand')) {\n $element?.classList.remove('expand');\n } else {\n $element?.classList.add('expand');\n }\n }\n\n if (this.option.selected) {\n const selectOption = $el.getAttribute('data-option').trim();\n $element.setAttribute('m4-status', selectOption);\n }\n };\n\n function clickHandler() {\n itemEvent(this, true);\n }\n\n this.$container.querySelectorAll('.item').forEach(el => {\n el.removeEventListener('click', clickHandler);\n el.addEventListener('click', clickHandler);\n });\n }\n}\n\n// create template method\nconst createTemplate = m4 => {\n const { type, option, originalDomString } = m4.s;\n\n const $storage = document.createElement('div');\n if (type == 'drag') {\n $storage.innerHTML = fesdDB.multipurpose4.TEMPLATE[type]().trim();\n\n const $wrapper = $storage.querySelector('.drag-container .wrapper');\n $wrapper.insertAdjacentHTML(insert.append, originalDomString);\n }\n if (type == 'collapse') {\n $storage.innerHTML = fesdDB.multipurpose4.TEMPLATE[type](option?.collapse).trim();\n // drag\n const $container = $storage.querySelector('.drag-container .wrapper');\n $container.insertAdjacentHTML(insert.append, originalDomString);\n // collapse\n const $model = $storage.querySelector('.collapse-container .wrapper');\n $model.insertAdjacentHTML(insert.append, originalDomString);\n }\n if (type == 'dropdown') {\n $storage.innerHTML = fesdDB.multipurpose4.TEMPLATE[type](option?.dropdown).trim();\n\n const $dropdown = $storage.querySelector('dropdown-el');\n $dropdown.insertAdjacentHTML(insert.append, originalDomString);\n }\n\n return $storage.children;\n};\n\nclass Multipurpose4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n this.__events__ = {};\n this.s = {};\n this.s.originalDomString = this.innerHTML.trim().replace(/\\n/g, '');\n this.previousWidth = window.innerWidth;\n }\n static get observedAttributes() {\n return ['m4-type', 'm4-status'];\n }\n attributeChangedCallback(attr, oldVal, newVal) {\n switch (attr) {\n case 'm4-type':\n if (oldVal === null || oldVal === newVal) return;\n this.s.type = newVal;\n this.#distribute();\n break;\n case 'm4-status':\n if (oldVal === newVal) return;\n const type = this.getAttribute('m4-type');\n if (type !== 'drag' && type !== 'collapse') return;\n // 左右拖拉\n this.querySelectorAll('.drag-container .item').forEach(el => {\n el.classList.remove('active');\n });\n this.querySelector(`.drag-container .item[data-option=\"${newVal}\"]`)?.classList.add('active');\n // 展開選項\n if (type === 'collapse') {\n this.querySelectorAll('.collapse-container .item').forEach(el => {\n el.classList.remove('active');\n });\n this.querySelector(`.collapse-container .item[data-option=\"${newVal}\"]`)?.classList.add('active');\n }\n this.constructor.drag?.update(this);\n break;\n }\n }\n connectedCallback() {\n if (this.initialize || this.classList.contains('m4-init')) return;\n this.initialize = true;\n this.#init();\n }\n update() {\n // 斷點設定\n this.#breakpoint();\n }\n #init() {\n let customize = {};\n\n if (!this.hasAttribute('m4-value')) {\n this.setAttribute('m4-value', '');\n }\n\n this.s.type = this.getAttribute('m4-type') ?? fesdDB.multipurpose4.SETTINGS.type;\n if (this.hasAttribute('m4-option')) {\n customize = this.getAttribute('m4-option') ? JSON.parse(this.getAttribute('m4-option')) : {};\n this.removeAttribute('m4-option');\n }\n\n const updateEvent = event => {\n if (event.type === 'resize') {\n if (window.innerWidth === this.previousWidth) return;\n this.previousWidth = window.innerWidth;\n }\n this.update();\n };\n\n // resize event handle\n window.removeEventListener('resize', debounce(updateEvent));\n window.addEventListener('resize', debounce(updateEvent));\n\n this.s.option = {};\n this.s.option.drag = Object.assign({}, fesdDB.multipurpose4.SETTINGS.drag, customize?.drag);\n this.s.option.collapse = Object.assign({}, fesdDB.multipurpose4.SETTINGS.collapse, customize?.collapse);\n this.s.option.dropdown = Object.assign({}, fesdDB.multipurpose4.SETTINGS.dropdown, customize?.dropdown);\n this.s.option.breakpoint = Object.assign({}, fesdDB.multipurpose4.SETTINGS.breakpoint, customize?.breakpoint);\n\n this.#render();\n }\n #render() {\n this.classList.add('m4-init');\n // 斷點設定\n this.#breakpoint();\n }\n // 斷點設定\n #breakpoint() {\n const obj = Object.keys(this.s.option.breakpoint);\n if (!obj.length) {\n this.#distribute();\n return;\n }\n obj\n .map(keys => Number(keys))\n .sort((a, b) => b - a)\n .some(point => {\n if (window.innerWidth >= point) {\n this.s.type = this.s.option.breakpoint[point]?.type;\n this.setAttribute('m4-type', this.s.type);\n this.s.option.drag = Object.assign({}, this.s.option.drag, this.s.option.breakpoint[point]?.drag);\n this.s.option.collapse = Object.assign({}, this.s.option.collapse, this.s.option.breakpoint[point]?.collapse);\n this.s.option.dropdown = Object.assign({}, this.s.option.dropdown, this.s.option.breakpoint[point]?.dropdown);\n }\n this.#distribute();\n return window.innerWidth >= point;\n });\n }\n // check type\n #distribute() {\n const { type } = this.s;\n\n this.innerHTML = '';\n [...createTemplate(this)].forEach(el => {\n this.append(el);\n });\n\n // 新增預設 active class\n const dragContainer = this.querySelector(`.drag-container .item[data-option=\"${this.getAttribute('m4-status')}\"]`);\n const collapseContainer = this.querySelector(`.collapse-container .item[data-option=\"${this.getAttribute('m4-status')}\"]`);\n dragContainer?.classList.add('active');\n collapseContainer?.classList.add('active');\n\n switch (type) {\n case 'drag':\n this.constructor.drag = new dragControl(this);\n break;\n case 'collapse':\n this.constructor.drag = new dragControl(this);\n this.constructor.collapse = new collapseControl(this);\n break;\n case 'dropdown':\n // this.#dropdown();\n break;\n }\n this.constructor.drag?.update(this);\n }\n}\n\n// if (!customElements.get('multipurpose-nav')) {\n// customElements.define('multipurpose-nav', Multipurpose4);\n// }\n\nexport default Multipurpose4;\n","import SHARED from '../shared/shared';\nimport { isElement } from '../shared/utils';\n\n// 第六版\nclass Tab4 extends HTMLElement {\n // 定義組件的初始狀態\n constructor(el, option) {\n super();\n }\n // 當組件的屬性被更改時會被呼叫\n static get observedAttributes() {\n return ['t4-active'];\n }\n attributeChangedCallback(attr, oldVal, newVal) {\n if (attr === 't4-active') {\n // change function\n if (oldVal !== newVal) {\n this.#stateChange(newVal);\n }\n }\n }\n connectedCallback() {\n // 防呆\n if (!this.classList.contains('t4-initialize')) {\n this.#create();\n }\n }\n #create() {\n const name = this.getAttribute('t4-name');\n const { SETTINGS } = fesdDB.tab4;\n // 防呆!\n if (document.querySelectorAll(`tab-el[t4-name=${name}]`).length > 1) {\n console.warn(name, '名字有重複喔!!!');\n }\n\n this.t = {\n tabs: [],\n name: name,\n tabPanels: [...this.children],\n activeTab: '',\n stepOutput: SETTINGS.stepOutput,\n recordUrl: this.getAttribute('t4-url') || SETTINGS.recordUrl,\n type: this.getAttribute('t4-type') || SETTINGS.type,\n display: this.getAttribute('t4-display') || SETTINGS.display,\n defaultPage: this.getAttribute('t4-defaultPage') || SETTINGS.defaultPage,\n anchor: this.getAttribute('t4-anchor'),\n gap: this.getAttribute('t4-gap') || SETTINGS.anchorGap,\n transition: {\n duration: this.getAttribute('t4-duration') || SETTINGS.transition.duration,\n timing: this.getAttribute('t4-timing') || SETTINGS.transition.timing,\n delay: this.getAttribute('t4-delay') || SETTINGS.transition.delay,\n },\n tabGroup: this.getAttribute('t4-group') || SETTINGS.tabGroup,\n };\n this.__events__ = {};\n this.t.tabs = this.#tabSet();\n this.t.step = document.querySelector(`[t4-control=\"${this.t.name}\"]${this.t.stepOutput}`);\n\n this.#init();\n }\n\n #init() {\n // 初始化設定\n this.t.activeTab = this.t.defaultPage;\n if (this.t.display === 'swiper') {\n this.#createSwiper();\n }\n if (this.t.recordUrl) {\n const params = new URLSearchParams(document.location.search);\n const val = params.get(this.t.name);\n const matchingTabs = document.querySelectorAll(`[t4-name=\"${this.t.name}\"] [t4-id=\"${val}\"]`);\n\n // 如果網址中有對應的參數,載入對應的頁籤\n if (val && matchingTabs.length === 1) {\n this.t.activeTab = val\n } else {\n console.warn(`沒有${val}這頁喔!!`);\n }\n }\n this.setActiveTab(this.t.activeTab);\n // 設定防呆\n this.classList.add('t4-initialize');\n this.#resizeTab();\n }\n // 第一關 判斷數量以及id設定\n #tabSet() {\n const { t } = this;\n const tabs = Array.from(document.querySelectorAll(`[t4-control=\"${t.name}\"][t4-role=\"tab\"]`));\n // 防呆\n if (t.type === 'normal' && t.tabGroup === 'true') {\n // 是頁籤且是群組 判斷數量是否相符\n if (t.tabPanels.length !== tabs.length) {\n console.warn('按鈕與內容數量不同喔', t.tabPanels.length, tabs.length);\n }\n }\n if (t.tabGroup === 'true') {\n // 流水號\n t.tabPanels.forEach((el, index) => el.setAttribute('t4-id', index));\n } else {\n // 單一頁籤\n t.tabPanels.forEach(el => {\n if (!el.getAttribute('t4-id')) {\n console.warn(el, '請幫我設定id!!');\n }\n });\n }\n return tabs;\n }\n // 第二關 id命名提醒\n #getTabIndex(id) {\n const { t } = this;\n const tabPanelsWithId = t.tabPanels.filter(panel => panel.getAttribute('t4-id') === id);\n // 防呆!\n if (tabPanelsWithId.length > 1) {\n console.warn('有兩個相同id設定', tabPanelsWithId);\n }\n\n // 取得頁籤本人\n const tabPanel = tabPanelsWithId[0];\n if (tabPanel) {\n const tabIndex = t.tabPanels.indexOf(tabPanel);\n return tabIndex;\n } else {\n console.warn(`找不到t4-id為${id}的頁籤`);\n return 0;\n }\n }\n\n #createSwiper() {\n const swiperContainer = document.createElement('div');\n swiperContainer.classList.add('swiper-container');\n\n const swiperWrapper = document.createElement('div');\n swiperWrapper.classList.add('swiper-wrapper');\n\n this.t.tabPanels.forEach(slide => {\n swiperWrapper.appendChild(slide.cloneNode(true));\n });\n\n // 更新 t.tabPanels\n this.t.tabPanels = [...swiperWrapper.children];\n\n swiperContainer.appendChild(swiperWrapper);\n this.innerHTML = ''; // 清空原有的內容\n this.appendChild(swiperContainer);\n // 執行 Swiper 效果的相關初始化\n this.#initSwiper();\n }\n #initSwiper() {\n const sContainer = this.querySelector('.swiper-container');\n const sWrapper = this.querySelector('.swiper-wrapper');\n const tabPanels = this.t.tabPanels;\n\n // 設定容器和 wrapper 的樣式\n sContainer.style.overflow = 'hidden';\n sWrapper.style.display = 'flex';\n\n // 設定 wrapper 的寬度\n const totalWidth = tabPanels.length * 100 + '%';\n sWrapper.style.width = totalWidth;\n }\n\n #addUrl(panel) {\n const { t } = this;\n\n if (t.recordUrl === 'true') {\n const params = new URLSearchParams(document.location.search);\n params.set(t.name, panel);\n const newUrl = `${window.location.pathname}?${params.toString()}`;\n\n // 使用 replaceState 修改瀏覽器歷史記錄\n history.replaceState({ t4Id: panel }, '', newUrl);\n }\n }\n\n // 執行函式\n // 移動至指定位置\n #eventAnchor() {\n const gap = parseInt(this.t.gap, 10);\n const pageYOffset = window.pageYOffset;\n const targetOffset = this.getBoundingClientRect().top;\n const changeOffset = targetOffset + pageYOffset - gap;\n this.#goAnchor(changeOffset);\n }\n // 移動\n #goAnchor(val) {\n window.scrollTo({\n top: val,\n behavior: 'smooth',\n });\n }\n // 步驟狀態\n #step(val) {\n let current = parseInt(val, 10) + 1;\n this.t.step.textContent = `${current}`;\n this.t.step.setAttribute('now-page', current);\n }\n // next 按鈕狀態\n #btnNextState(newPage) {\n const next = document.querySelectorAll(`[t4-role=\"next\"][t4-control=\"${this.t.name}\"]`);\n\n const isSinglePage = this.t.tabPanels.length === 1;\n const isLastPage = newPage === this.t.tabPanels.length - 1;\n\n next.forEach(btn => {\n if (isSinglePage || isLastPage) {\n btn.setAttribute('disabled', '');\n } else {\n btn.removeAttribute('disabled');\n }\n });\n }\n // prev 按鈕狀態\n #btnPrevState(newPage) {\n const prev = document.querySelectorAll(`[t4-role=\"prev\"][t4-control=\"${this.t.name}\"]`);\n\n const isSinglePage = this.t.tabPanels.length === 1;\n const isFirstPage = newPage === 0;\n\n prev.forEach(btn => {\n if (isSinglePage || isFirstPage) {\n btn.setAttribute('disabled', '');\n } else {\n btn.removeAttribute('disabled');\n }\n });\n }\n // 頁籤狀態\n #tabState(newPage, tabId) {\n if (this.t.tabGroup === 'true') {\n this.t.tabs.forEach((tab, i) => {\n if (i == newPage) {\n tab.setAttribute('aria-selected', true);\n } else {\n tab.setAttribute('aria-selected', false);\n }\n });\n } else {\n // 自訂 id 的話...\n this.t.tabs.forEach((tab, i) => {\n if (tab.getAttribute('t4-id') === tabId) {\n tab.setAttribute('aria-selected', true);\n } else {\n tab.setAttribute('aria-selected', false);\n }\n });\n }\n }\n // 第三關各種元件判斷 及 執行\n #isTrue(fun, val, val2) {\n switch (fun) {\n case 'step':\n if (isElement(this.t.step)) {\n this.#step(val);\n }\n break;\n case 'eventAnchor':\n if (this.t.anchor) {\n this.#eventAnchor();\n }\n break;\n case 'tabState':\n // 流程沒有按鈕 客制的話....\n if (this.t.type == 'normal') {\n // 頁籤按鈕狀態\n this.#tabState(val, val2);\n }\n break;\n case 'btnState':\n this.#btnNextState(val);\n this.#btnPrevState(val);\n break;\n case 'tabUrl':\n if (this.t.recordUrl === 'true') {\n this.#addUrl(val);\n }\n break;\n default:\n console.warn('請增加判斷,謝謝');\n break;\n }\n }\n // 消失動畫\n #animationHide(index) {\n const { t } = this;\n const { duration, timing, delay } = this.t.transition;\n const tabPanel = t.tabPanels[index];\n // 動畫 消失 動畫 出現 搭配 settimeout 使用\n tabPanel.classList.add('hide');\n switch (t.display) {\n case 'fade':\n tabPanel.style.cssText = 'display: none; opacity: 0;';\n break;\n case 'slide':\n tabPanel.style.cssText = 'display: none; opacity: 0; max-height: unset;';\n break;\n case 'swiper':\n break;\n default:\n tabPanel.style.display = 'none';\n break;\n }\n }\n // 出現動畫\n #animationShow(index) {\n const { duration, timing, delay } = this.t.transition;\n const tabPanel = this.t.tabPanels[index];\n let timer;\n\n tabPanel.classList.remove('hide');\n tabPanel.style.transition = `opacity ${duration}ms ${timing} ${delay}ms`;\n tabPanel.style.display = 'block';\n\n switch (this.t.display) {\n case 'fade':\n tabPanel.style.opacity = '0';\n timer = setTimeout(() => {\n clearTimeout(timer);\n tabPanel.style.opacity = '1';\n }, 100);\n break;\n case 'slide':\n console.warn(this.t.display, '抱歉,好像壞掉了...');\n const clientHeight = tabPanel.offsetHeight;\n tabPanel.style.opacity = '1';\n tabPanel.style.maxHeight = '0';\n timer = setTimeout(() => {\n clearTimeout(timer);\n tabPanel.style.maxHeight = clientHeight + 'px';\n }, 100);\n break;\n case 'swiper':\n tabPanel.style.opacity = '1';\n const sWrapper = this.querySelector('.swiper-wrapper');\n const slideWidth = this.t.tabPanels[0].offsetWidth;\n const translateValue = -index * slideWidth;\n\n sWrapper.style.transition = `transform ${duration}ms ${timing} ${delay}ms`;\n sWrapper.style.transform = `translateX(${translateValue}px)`;\n break;\n default:\n console.warn(this.t.display, '沒有這個效果請自己想辦法!!!!');\n break;\n }\n }\n // 狀態\n #stateChange(tabId) {\n const newTabIndex = this.#getTabIndex(tabId);\n // 通知狀態改變\n this.#isTrue('step', newTabIndex);\n this.#isTrue('btnState', newTabIndex);\n this.#isTrue('tabState', newTabIndex, tabId);\n this.#isTrue('tabUrl', tabId);\n // 觸發自定義事件\n this.emit('change');\n }\n // resize\n #resizeTab() {\n const _this_ = this;\n window.addEventListener(\n 'resize',\n debounce(() => {\n _this_.update();\n }, 1000),\n );\n }\n\n // ------------- 我是分隔線呦 -------------\n // 頁籤切換\n tabClick(clickedTab) {\n const { t } = this;\n // 防呆!! 為了保證數量多餘頁籤時仍可正常執行\n const indexOf = t.tabs.indexOf(clickedTab) % t.tabPanels.length;\n const newTabId = t.tabGroup === 'true' ? String(indexOf) : clickedTab.getAttribute('t4-id');\n\n // 通知頁籤切換\n this.setActiveTab(newTabId);\n\n // 錨點滑動動畫\n setTimeout(() => {\n this.#isTrue('eventAnchor');\n }, t.transition.duration);\n }\n // 外部呼叫方法 $0.setActiveTab(0)\n setActiveTab(id) {\n const { t } = this;\n const defaultID = id === '' ? t.tabPanels[0].getAttribute('t4-id') : id;\n t.activeTab = defaultID;\n this.setAttribute('t4-active', defaultID);\n\n const newTabIndex = this.#getTabIndex(defaultID);\n\n t.tabPanels.forEach((panel, i) => {\n i === newTabIndex ? this.#animationShow(i) : this.#animationHide(i);\n });\n }\n // 外部呼叫方法 $0.goNext()\n goNext() {\n const tabIndex = this.#getTabIndex(this.t.activeTab);\n const nextPage = Math.min(this.t.tabPanels.length - 1, tabIndex + 1);\n const nextPageId = this.t.tabPanels[nextPage].getAttribute('t4-id');\n this.setActiveTab(nextPageId);\n }\n // 外部呼叫方法 $0.goPrev()\n goPrev() {\n const tabIndex = this.#getTabIndex(this.t.activeTab);\n const prevPage = Math.max(0, tabIndex - 1);\n const prevPageId = this.t.tabPanels[prevPage].getAttribute('t4-id');\n this.setActiveTab(prevPageId);\n }\n // 外部呼叫方法 $0.update()\n update() {\n this.t.tabs = this.#tabSet();\n // 事件重綁\n changeEvent();\n console.log('tab update!!!!');\n }\n}\n\nfunction debounce(func, time = 1000) {\n let timer;\n return function (event) {\n if (timer) clearTimeout(timer);\n timer = setTimeout(func, time, event);\n };\n}\n\n// 綁定點擊事件\nfunction changeEvent() {\n const targetElements = document.querySelectorAll('[t4-control]');\n\n document.addEventListener('click', function (event) {\n let isTarget = false;\n for (const targetElement of targetElements) {\n if (targetElement.contains(event.target) || event.target.closest('[t4-control]') === targetElement) {\n isTarget = true;\n break;\n }\n }\n if (isTarget) {\n // event.target 是目標元素或其子層\n const tabControl = event.target.closest('[t4-control]');\n const tabElName = tabControl.getAttribute('t4-control');\n const tabEls = document.querySelectorAll(`tab-el[t4-name=\"${tabElName}\"]`);\n const role = tabControl.getAttribute('t4-role');\n tabEls.forEach(el => {\n switch (role) {\n case 'tab':\n el.tabClick(tabControl);\n break;\n case 'next':\n el.goNext(tabControl);\n break;\n case 'prev':\n el.goPrev(tabControl);\n break;\n default:\n console.warn('你是誰??', tabControl);\n break;\n }\n });\n }\n });\n}\nchangeEvent();\n\nObject.assign(Tab4.prototype, SHARED);\n\n// if (!customElements.get('tab-el')) {\n// customElements.define('tab-el', Tab4);\n// }\n\nexport default Tab4;\n","import SHARED from '../shared/shared';\nimport { isString, isElement, isNodeList, isElementExist, isFunction, getElement, getAllElements, createUid, toHTMLElement, jsonParse, warn, error } from '../shared/utils';\n\n('use strict');\n\nconst collapseHandle = $wrapper => {\n const { defaultOptions } = $wrapper.collapse;\n const { collapseClass, target, transition } = defaultOptions;\n\n const $target = $wrapper.querySelector(target);\n\n $wrapper.classList.add(collapseClass);\n\n $target.style.height = 0;\n $target.style['transition-property'] = transition.property;\n $target.style['transition-duration'] = transition.duration;\n $target.style['transition-timing-function'] = transition.function;\n $target.style['transition-delay'] = transition.delay;\n $target.style.overflow = 'hidden';\n};\n\nconst expandHandle = $wrapper => {\n const { defaultOptions } = $wrapper.collapse;\n const { collapseClass, target, transition } = defaultOptions;\n\n const $target = $wrapper.querySelector(target);\n const height = $target.children[0].offsetHeight;\n $wrapper.collapse.height = height;\n\n // console.log( height );\n // console.log( $target.children[0].offsetHeight );\n $wrapper.classList.remove(collapseClass);\n\n $target.style.display = 'block';\n $target.style.height = `${height}px`;\n $target.style['transition-property'] = transition.property;\n $target.style['transition-duration'] = transition.duration;\n $target.style['transition-timing-function'] = transition.function;\n $target.style['transition-delay'] = transition.delay;\n $target.style.overflow = 'hidden';\n};\n\nclass Collapse4 {\n constructor(el, options = {}) {\n // 可傳 string 或 element 或 nodeList\n if (!isString(el) && !isElement(el) && !isNodeList(el) && !isElementExist(el)) return;\n\n this.__storage__ = {\n el,\n options,\n };\n\n this.#create();\n }\n\n #create() {\n const { el, options } = this.__storage__;\n const { SETTINGS, EVENTS } = fesdDB.collapse4;\n\n this.elements = getAllElements(el);\n this.options = Object.assign({}, SETTINGS, options);\n this.__events__ = Object.assign({}, EVENTS);\n\n if (this.options.on) {\n for (const [k, v] of Object.entries(this.options.on)) {\n this.__events__[k] = [v];\n }\n }\n\n this.#init();\n }\n\n #init() {\n const { elements, options } = this;\n\n elements.forEach(el => {\n el.collapse = {};\n el.collapse.instance = this;\n el.collapse.defaultOptions = options;\n\n this.#trigger(el);\n });\n\n this.emit('init');\n }\n\n #trigger(el) {\n const { options } = this;\n const { collapseClass, block, target, defaultOpen, targetStopPropagation, defaultActiveMark } = options;\n\n // collapse-wrapper\n // collapse-block\n // collapse-target\n\n const $wrapper = el;\n const $target = $wrapper.querySelector(target);\n $wrapper.collapse.height = $target.children[0].offsetHeight;\n\n // const $block = $wrapper.querySelector(block);\n\n // 是否預設全打開\n if (defaultOpen) {\n $target.style.height = `${$target.children[0].offsetHeight}px`;\n $wrapper.classList.remove(collapseClass);\n } else {\n if (!$wrapper.classList.contains(defaultActiveMark) && !$wrapper.hasAttribute(defaultActiveMark)) {\n $wrapper.classList.add(collapseClass);\n $target.style.height = '0px';\n $target.style.overflow = 'hidden';\n } else {\n $target.style.height = `${$target.children[0].offsetHeight}px`;\n $wrapper.classList.remove(collapseClass);\n }\n }\n\n // update() 避免重複綁定\n $wrapper.removeEventListener('click', this.#event);\n $wrapper.addEventListener('click', this.#event);\n\n // target 點擊不收合\n if (targetStopPropagation) {\n const event = e => {\n e.stopPropagation();\n };\n // update() 避免重複綁定\n $target.removeEventListener('click', event);\n $target.addEventListener('click', event);\n }\n }\n\n #event() {\n const { instance, defaultOptions } = this.collapse;\n const { collapseClass, block, target, single } = defaultOptions;\n\n const $wrapper = this;\n\n if ($wrapper.classList.contains(collapseClass)) {\n if (single) {\n $wrapper.parentNode.querySelectorAll(`.${$wrapper.classList[0]}`).forEach(el => {\n collapseHandle(el);\n });\n }\n\n expandHandle($wrapper);\n } else {\n collapseHandle($wrapper);\n }\n\n instance.emit('afterCollapse');\n }\n\n update() {\n this.#create();\n }\n}\n\nObject.assign(Collapse4.prototype, SHARED);\n\nexport default Collapse4;\n","function createRipple(e, r4) {\n const button = r4;\n const { color, opacity, duration } = r4.s.options;\n\n // 可以更改點擊時生成效果樣式的結構\n let ripples = document.createElement('span');\n\n //偵測滑鼠點擊位置\n let x = e.clientX - button.getBoundingClientRect().left;\n let y = e.clientY - button.getBoundingClientRect().top;\n\n ripples.style.cssText = `background: ${color};left: ${x}px;top: ${y}px;opacity: ${opacity};animation-duration: ${duration}ms`;\n ripples.classList.add('circle');\n\n // 生成\n button.appendChild(ripples);\n\n // 生成後消失\n setTimeout(function () {\n ripples.remove();\n }, `${duration}`);\n}\n\nfunction removeStyle() {\n document.querySelectorAll('ripple-btn').forEach(button => {\n const ball = button.querySelector('.hover-ball');\n button.style.setProperty('--r', '');\n button.classList.remove('entered');\n });\n}\n\ndocument.addEventListener('click', removeStyle);\n\nclass Ripple4 extends HTMLElement {\n constructor() {\n super();\n this.initialize = false;\n }\n\n connectedCallback() {\n const r4 = this;\n if (r4.initialize || r4.classList.contains('r4-initialize')) return;\n r4.initialize = true;\n this.#create();\n }\n\n #create() {\n const { SETTINGS } = fesdDB.ripple4;\n this.s = {};\n function attrToBoolean(str) {\n let booleanVal = Boolean(str);\n booleanVal = str === 'true';\n return booleanVal;\n }\n const options = {\n color: this.getAttribute('r4-color') || SETTINGS.color,\n opacity: this.getAttribute('r4-opacity') || SETTINGS.opacity,\n duration: Number(this.getAttribute('r4-duration')) || SETTINGS.duration,\n speed: Number(this.getAttribute('r4-speed')) || SETTINGS.speed,\n hover: this.getAttribute('r4-hover') ? attrToBoolean(this.getAttribute('r4-hover')) : SETTINGS.hover,\n click: this.getAttribute('r4-hover-click') ? attrToBoolean(this.getAttribute('r4-hover-click')) : SETTINGS.click,\n };\n\n this.s.options = options;\n if (this.s.options.hover) this.classList.add('hover-btn');\n\n this.#init();\n }\n\n #init() {\n this.#ball();\n this.#event();\n this.classList.add('r4-initialize');\n }\n\n #ball() {\n const button = this;\n const ball = document.createElement('i');\n ball.classList.add('hover-ball');\n ball.style.transitionDuration = `${button.s.options.speed}ms`;\n button.appendChild(ball);\n }\n\n #event() {\n const ball = this.querySelector('i.hover-ball');\n const button = this;\n // ripple點擊事件\n button.addEventListener('click', function (e) {\n e.stopPropagation();\n if (button.s.options.click) {\n createRipple(e, button);\n }\n });\n\n // 判斷操作事件使用 mouse 或是 touch\n let operateStart = 'ontouchstart' in document.documentElement ? 'touchstart' : 'mouseenter';\n let operateEnd = 'ontouchend' in document.documentElement ? 'touchend' : 'mouseleave';\n // hover\n button.addEventListener(operateStart, function (e) {\n if (operateStart === 'touchstart') {\n removeStyle();\n }\n if (button.s.options.hover) {\n const posX = operateStart === 'mouseenter' ? Math.round(e.clientX - button.getBoundingClientRect().left) : Math.round(e.changedTouches[0].clientX - button.getBoundingClientRect().x);\n const posY = operateStart === 'mouseenter' ? Math.round(e.clientY - button.getBoundingClientRect().top) : Math.round(e.changedTouches[0].clientY - button.getBoundingClientRect().y);\n const { offsetWidth, offsetHeight } = button;\n // 最大可覆蓋之半徑\n const rippleR = Math.ceil(Math.sqrt(offsetWidth ** 2 + offsetHeight ** 2) * 2);\n button.style.setProperty('--r', rippleR);\n ball.style.left = posX + 'px';\n ball.style.top = posY + 'px';\n button.classList.add('entered');\n }\n });\n button.addEventListener(operateEnd, function (e) {\n if (operateEnd === 'touchend') return;\n if (button.s.options.hover) {\n const posX = operateEnd === 'mouseleave' ? Math.round(e.clientX - button.getBoundingClientRect().left) : Math.round(e.changedTouches[0].clientX - button.getBoundingClientRect().x);\n const posY = operateEnd === 'mouseleave' ? Math.round(e.clientY - button.getBoundingClientRect().top) : Math.round(e.changedTouches[0].clientY - button.getBoundingClientRect().y);\n button.style.setProperty('--r', '');\n ball.style.left = posX + 'px';\n ball.style.top = posY + 'px';\n button.classList.remove('entered');\n }\n });\n }\n update() {\n this.classList.remove('r4-initialize');\n this.querySelector('i.hover-ball').remove();\n this.#create();\n }\n}\n\n// if (!customElements.get('ripple-btn')) {\n// customElements.define('ripple-btn', Ripple4);\n// }\n\nexport default Ripple4;\n","export default class ImageValidate {\n constructor() {\n this.init();\n }\n init() {\n const images = document.querySelectorAll('*:not([video-id]) > img');\n const noImageDom = (width, height) => {\n const div = document.createElement('div');\n const slash1 = document.createElement('span');\n const slash2 = document.createElement('span');\n const slashWidth = Math.sqrt(width ** 2 + height ** 2);\n const theta = (Math.asin(height / slashWidth) * 180) / Math.PI;\n div.className = 'no-image';\n slash1.className = 'slash1';\n slash1.style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${theta}deg);\n `;\n slash2.className = 'slash2';\n slash2.style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${-theta}deg);\n `;\n div.appendChild(slash1);\n div.appendChild(slash2);\n return div;\n };\n const errorImage = document.querySelectorAll('.error-image');\n for (let i = 0; i < errorImage.length; i++) {\n errorImage[i].remove();\n }\n images.forEach((img) => {\n let src;\n const wrapWidth = img.parentElement.clientWidth;\n const wrapHeight = img.parentElement.clientHeight;\n if (img.classList.contains('lazy') || img.classList.contains('swiper-lazy')) {\n src = img.getAttribute('data-src');\n } else {\n src = img.getAttribute('src');\n }\n if (src === '') {\n const wrapDIV = document.createElement('div');\n const parentsPosition = getComputedStyle(img.parentElement).position;\n wrapDIV.className = 'error-image';\n if (parentsPosition === 'static') {\n img.parentElement.style.position = 'relative';\n }\n img.parentElement.appendChild(wrapDIV);\n wrapDIV.style.cssText = `\n position: absolute;\n top: 50%;\n left: 50%;\n width: 100%;\n height: 100%;\n transform: translate(-50%,-50%);\n z-index: 1;\n `;\n wrapDIV.appendChild(noImageDom(wrapWidth, wrapHeight));\n }\n });\n function imageResize() {\n const noImage = document.querySelectorAll('.no-image');\n if (noImage.length <= 0) return;\n noImage.forEach((item) => {\n const wrapWidth = item.parentElement.clientWidth;\n const wrapHeight = item.parentElement.clientHeight;\n const slashWidth = Math.sqrt(wrapWidth ** 2 + wrapHeight ** 2);\n const theta = (Math.asin(wrapHeight / slashWidth) * 180) / Math.PI;\n item.querySelector('.slash1').style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${theta}deg);\n `;\n item.querySelector('.slash2').style.cssText = `\n width: ${slashWidth}px;\n transform: rotate(${-theta}deg);\n `;\n });\n }\n window.addEventListener('resize', imageResize);\n }\n reValidate() {\n this.init();\n }\n}\n","'use strict';\n\n//建立 callback Function\nfunction createCallbackFunction(attributeValue, defaultValue) {\n if (attributeValue) {\n return function (el, res) {\n Function(attributeValue)(el, res);\n };\n } else {\n return defaultValue;\n }\n}\n\n//產生結構\nfunction createDOM(input, element, file, res) {\n const params = element.params;\n const preview = input.closest('[data-upload-item]').querySelector('[data-preview]');\n if (preview.querySelector('img')) preview.querySelector('img').remove();\n preview.appendChild(res.imgElement);\n const group = input.dataset.group;\n const inputIndex = document.querySelector(element.el).dataset.index;\n if (params.compress) {\n //副檔名\n const fileExt = file.name.substring(file.name.lastIndexOf('.')).replace('.');\n //檔名\n const fileName = file.name.replace(`.${fileExt}`, '');\n //檔案壓縮\n res.originalCanvas.toBlob(\n function (blob) {\n const imgFile = new File([blob], `${fileName}`, { type: file.type });\n uploadImage[`${group}`][inputIndex] = {\n file: imgFile,\n info: res,\n };\n if (params.on.changeAfter && typeof params.on.changeAfter === 'function') {\n params.on.changeAfter(input, res);\n }\n },\n file.type,\n params.compress,\n );\n } else {\n uploadImage[`${group}`][inputIndex] = {\n file: file,\n info: res,\n };\n if (params.on.changeAfter && typeof params.on.changeAfter === 'function') {\n params.on.changeAfter(input, res);\n }\n }\n}\n\n//產生Canvas\nfunction createCanvas(options, img, outputW, outputH) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const originalWidth = img.width;\n const originalHeight = img.height;\n const originalRatio = (originalHeight / originalWidth) * 100;\n const outputRatio = (outputH / outputW) * 100;\n let newWidth = 0;\n let newHeight = 0;\n canvas.width = outputW;\n canvas.height = outputH;\n //縮圖填滿\n switch (options.previewSize) {\n case 'contain':\n if (originalRatio < outputRatio) {\n newWidth = canvas.width;\n newHeight = (outputW * originalRatio) / 100;\n } else if (originalRatio > outputRatio) {\n newWidth = (outputH / originalRatio) * 100;\n newHeight = canvas.height;\n } else {\n newWidth = canvas.width;\n newHeight = canvas.height;\n }\n break;\n case 'cover':\n if (originalRatio < outputRatio) {\n newWidth = (outputH / originalRatio) * 100;\n newHeight = canvas.height;\n } else if (originalRatio > outputRatio) {\n newWidth = canvas.width;\n newHeight = (outputW * originalRatio) / 100;\n } else if (originalRatio === outputRatio) {\n newWidth = canvas.width;\n newHeight = canvas.height;\n }\n break;\n }\n const x = (canvas.width - newWidth) * 0.5;\n const y = (canvas.height - newHeight) * 0.5;\n ctx.drawImage(img, x, y, newWidth, newHeight);\n\n return canvas;\n}\n\n//將檔案轉成圖片\nfunction convertImg(options, dataUrl) {\n return new Promise((resolve, reject) => {\n if (dataUrl) {\n const img = new Image();\n img.src = dataUrl;\n img.classList.add(options.previewSize);\n img.onload = () => {\n let result = {\n imgElement: img,\n originalCanvas: createCanvas(options, img, img.width, img.height),\n info: {\n originalWidth: img.width,\n originalHeight: img.height,\n ratio: (img.height / img.width) * 100 + '%',\n },\n };\n resolve(result);\n };\n } else {\n resolve();\n }\n });\n}\n\n//小數點後第N位四捨五入\nfunction formatFloat(num, pos) {\n const size = Math.pow(10, pos);\n return Math.round(num * size) / size;\n}\n\n//檢查檔案大小\nfunction checkSize(file, sizeLimit) {\n let fileSize = file.size / 1024 / 1024;\n return `${formatFloat(fileSize, 2)}` <= sizeLimit;\n}\n\n//讀取檔案\nfunction readFileHandler(e, input, element) {\n if (e.target.files.length <= 0) return;\n const file = e.target.files[0];\n const parentsEl = input.closest('[data-upload-item]');\n let reader = new FileReader();\n reader.onload = event => {\n const dataUrl = file.type.split('/')[0] === 'image' ? event.target.result : null;\n if (element.params.sizeLimit && !checkSize(file, element.params.sizeLimit)) {\n input.value = '';\n parentsEl.classList.add('over-limit');\n if (element.params.on.overLimit && typeof element.params.on.overLimit === 'function') {\n element.params.on.overLimit(input, element.params.sizeLimit);\n }\n return;\n } else {\n parentsEl.classList.remove('over-limit');\n parentsEl.classList.add('uploaded');\n convertImg(element.params, dataUrl).then(res => {\n createDOM(input, element, file, res);\n });\n }\n };\n reader.readAsDataURL(file);\n}\n\nclass ImagePreview {\n constructor(element, params) {\n const self = this;\n self.el = element;\n // default params\n self.params = {\n on: {\n changeAfter: null,\n overLimit: null,\n },\n group: 'group', //群組名稱 (type: String)\n sizeLimit: 2, //大小限制 (type: Number 單位: MB)\n previewSize: 'cover', //縮圖形式 (type: String 'contain' || 'cover')\n compress: 0.8, //壓縮品質 (type: Number 0~1 || false)\n };\n Object.assign(self.params, params);\n self.init();\n }\n init() {\n const self = this;\n const inputs = document.querySelectorAll(`${self.el}:not(.preview-active)`);\n if (inputs.length <= 0) return;\n window.uploadImage = {};\n inputs.forEach((input, index) => {\n input.classList.add('preview-active');\n // final set params\n const params = {\n group: input.dataset.group || self.params.group,\n sizeLimit: parseInt(input.dataset.limit) || self.params.sizeLimit,\n previewSize: input.dataset.previewSize || self.params.previewSize,\n compress: input.dataset.compress || self.params.compress,\n on: {\n changeAfter: createCallbackFunction(input.dataset.changeAfter, self.params.on.changeAfter),\n overLimit: createCallbackFunction(input.dataset.overLimit, self.params.on.overLimit),\n },\n };\n self.params = params;\n if (typeof uploadImage[`${params.group}`] === 'undefined') uploadImage[`${params.group}`] = [];\n if (!input.dataset.group) input.dataset.group = params.group;\n input.dataset.index = document.querySelectorAll(`[data-group=\"${params.group}\"]`).length - 1;\n input.addEventListener('change', function (e) {\n readFileHandler(e, input, self);\n });\n });\n }\n}\n\nexport default ImagePreview;\n"],"names":["FESD_DB","type","filter","filterPlaceholder","collapse","dropdown","Detect4","userAgent","isBrowser4","browser","key","isMobile4","mobile","isOs4","os","insert","isString","value","isElement","isNodeList","isElementExist","getElement","isFunction","getAllElements","createUid","toHTMLElement","str","dom","jsonParse","json","warn","target","msg","error","SHARED","events","handler","__events__","evt","evtHandler","index","onceHandler","args","event","data","ease","t","b","c","d","scrollTo","options","instance","container","spacer","speed","gap","easing","direction","isHorizontal","scrollDirection","rectPosition","rectSpace","containerEle","start","targetPoint","spacerGap","change","increment","currentTime","emitEvent","eventName","targetEle","animateScroll","val","Anchor4","el","__privateAdd","_create","_init","_trigger","__privateMethod","create_fn","elements","_a","SETTINGS","newOptions","targetName","EVENTS","k","v","init_fn","trigger_fn","defaultOptions","eventHandler","createCache","n","o","s","e","r","cacheUpdateContextual","l","i","isUndefined","isNull","isNumber","isBoolean","isArray","isObject","isArrayLike","isPlainObject","isHTMLElement","each","inArray","concat","push","from","isEmptyArray","deduplicateArray","runEachAndClear","hasOwnProperty","keys","assignDeep","removeUndefinedProperties","isEmptyObject","attr","getValueSet","removeAttr","attrClass","hasAttrClass","find","findFirst","is","contents","parent","closest","liesBetween","noop","removeElements","before","appendChildren","insertBefore","insertAfter","createDiv","createDOM","a","f","_","firstLetterToUpper","getDummyStyle","h","p","g","cssProperty","jsAPI","w","y","m","S","bind","selfClearTimeout","debounce","mergeParms","flush","u","$","classListAction","removeClass","addClass","x","parseToZeroOrNumber","adaptCSSVal","getCSSVal","setCSSVal","style","getDirectionIsRTL","topRightBottomLeft","getTrasformTranslateValue","O","C","H","z","I","A","E","T","D","M","R","L","getElmWidthHeightProperty","windowSize","P","V","U","fractionalSize","getBoundingClientRect","domRectHasDimensions","domRectAppeared","equal","equalWH","equalXY","equalTRBL","equalBCRWH","B","j","supportPassiveEvents","splitEventNames","removeEventListener","addEventListener","stopPropagation","preventDefault","N","absoluteCoordinates","getRTLCompatibleScrollPosition","getRTLCompatibleScrollBounds","scrollElementTo","getElmentScroll","manageListener","createEventListenerHub","removeEvent","addEvent","triggerEvent","opsStringify","getPropByPath","G","getOptionsDiff","createOptionCheck","q","F","W","X","Y","J","K","Z","Q","tt","nt","ot","st","et","ct","rt","lt","it","at","ut","ft","_t","dt","gt","bt","wt","yt","mt","St","$t","xt","Ot","Ct","Ht","zt","It","At","Et","Tt","kt","Dt","Mt","Rt","Lt","addPlugins","registerPluginModuleInstances","getStaticPluginModuleInstance","Pt","Vt","jt","Gt","Ft","getNativeScrollbarSize","getNativeScrollbarsHiding","getRtlScrollBehavior","getFlexboxGlue","createEnvironment","getEnvironment","resolveInitialization","staticInitializationElement","dynamicInitializationElement","cancelInitialization","Wt","addInstance","removeInstance","getInstance","createEventContentChange","destroy","updateElements","createDOMObserver","observerCallback","createSizeObserver","onSizeChangedCallbackProxy","createTrinsicObserver","isHeightIntrinsic","triggerOnTrinsicChangedCallback","intersectionObserverCallback","onSizeChanged","createObserversSetup","updateViewportAttrsFromHost","onTrinsicChanged","onContentMutation","onHostMutation","ignoreMutationFromOptions","capNumber","getScrollbarHandleOffsetPercent","getScrollbarHandleLengthRatio","getScrollbarHandleOffsetRatio","createScrollbarsSetupElements","initScrollTimeline","doRefreshScrollbarOffset","cancelElementAnimations","scrollbarStructureAddRemoveClass","scrollbarStyle","validFiniteNumber","ratioToCssPercent","numberToCssPx","scrollbarStructureRefreshHandleLength","scrollbarStructureRefreshHandleOffset","styleScrollbarPosition","animateElement","animateScrollbarOffset","scrollbarsAddRemoveClass","refreshScrollbarsHandleLength","refreshScrollbarsHandleOffset","refreshScrollbarsHandleOffsetTimeline","forEachFn","refreshScrollbarsScrollbarOffset","refreshScrollbarsScrollbarOffsetTimeline","generateScrollbarDOM","appendElements","createScrollbarsSetupEvents","createInteractiveScrollEvents","createRelativeHandleMove","getHandleOffset","releasePointerCapture","createScrollbarsSetup","manageAutoHideSuspension","manageScrollbarsAutoHide","isHoverablePointerType","onHostMouseEnter","setScrollbarVisibility","createStructureSetupElements","elementIsGenerated","unwrap","revertViewportTabIndex","createTrinsicUpdateSegment","createPaddingUpdateSegment","createOverflowUpdateSegment","getOverflowAmount","overflowIsVisible","fixFlexboxGlue","getViewportOverflowState","getStatePerAxis","setViewportOverflowState","setAxisOverflowStyle","hideNativeScrollbars","vt","ht","pt","createStructureSetup","createSetups","update","updateHintsAreTruthy","OverlayScrollbars","validateOptions","translateScrollbarStructure","translateScrollbarsSetupElement","MODALS","createTemplate","TEMPLATE","childDom","content","child","ModernModal","_mount","_event","_stateControl","oldVal","newVal","stateControl_fn","ATTRS","id","mount_fn","scroller","event_fn","$self","close","closeAttr","_b","destroyAttr","_c","state","__scroller__","viewport","transitionEndHandler","useMethod","name","useFunction","Modal4","dispatchModal","modal","useModal","useFetch","action","on","route","useEvent","res","doms","containerElement","_Modal4","openOptions","obj","methods","ons","interaction","scrollElement","viewHeight","viewTop","className","delay","end","repeat","top","bottom","startTrigger","endTrigger","shouldRemove","detectRepeat","repeatType","Aost4","removeShow","extend","src","ssrDocument","getDocument","doc","ssrWindow","callback","getWindow","win","makeReactive","proto","Dom7","items","arrayFlat","arr","arrayFilter","arrayUnique","uniqueArray","qsa","selector","context","window","document","html","toCreate","tempParent","classes","classNames","toggleClass","hasClass","attrs","attrName","transform","transition","duration","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","parents","handleEvent","off","handlers","trigger","dataIndex","transitionEnd","fireCallBack","outerWidth","includeMargins","styles","outerHeight","offset","box","body","clientTop","clientLeft","scrollTop","scrollLeft","css","props","prop","result","text","compareWith","eq","length","returnIndex","append","els","newChild","tempDiv","prepend","next","nextAll","nextEls","prev","prevAll","prevEls","foundElements","found","children","childNodes","remove","Methods","methodName","deleteProps","object","nextTick","now","getComputedStyle","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","isNode","node","to","noExtend","nextSource","keysArray","nextIndex","len","nextKey","desc","setCSSProperty","varName","varValue","animateCSSModeScroll","swiper","targetPosition","side","startPosition","startTime","time","dir","isOutOfBound","current","animate","progress","easeProgress","currentPosition","support","calcSupport","supportsPassive","opts","getSupport","deviceCached","calcDevice","platform","ua","device","screenWidth","screenHeight","android","ipad","ipod","iphone","windows","macos","iPadScreens","getDevice","overrides","calcBrowser","isSafari","getBrowser","Resize","emit","observer","animationFrame","resizeHandler","createObserver","entries","width","height","newWidth","newHeight","contentBoxSize","contentRect","removeObserver","orientationChangeHandler","Observer","extendParams","observers","attach","ObserverFunc","mutations","observerUpdate","init","containerParents","eventsEmitter","priority","self","method","updateSize","$el","updateSlides","getDirectionLabel","property","getDirectionPropertyValue","label","params","$wrapperEl","swiperSize","rtl","wrongRTL","isVirtual","previousSlidesLength","slides","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","offsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","gridEnabled","slideSize","shouldResetSlideSize","slide","slideStyles","currentTransform","currentWebKitTransform","paddingLeft","paddingRight","marginLeft","marginRight","boxSizing","clientWidth","offsetWidth","newSlidesGrid","slidesGridItem","slideIndex","allSlidesSize","slideSizeValue","maxSnap","snap","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","backFaceHiddenClass","hasClassBackfaceClassAdded","updateAutoHeight","activeSlides","getSlideByIndex","updateSlidesOffset","updateSlidesProgress","translate","offsetCenter","slideOffset","slideProgress","originalSlideProgress","slideBefore","slideAfter","updateProgress","multiplier","translatesDiff","isBeginning","isEnd","wasBeginning","wasEnd","updateSlidesClasses","activeIndex","realIndex","activeSlide","nextSlide","prevSlide","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","skip","updateClickedSlide","slideFound","getSwiperTranslate","currentTranslate","setTranslate","byController","wrapperEl","newProgress","minTranslate","maxTranslate","translateTo","runCallbacks","translateBounds","internal","newTranslate","isH","setTransition","transitionEmit","step","transitionStart","slideTo","initial","indexAsNumber","enabled","normalizedTranslate","normalizedGrid","normalizedGridNext","slideToLoop","newIndex","slideNext","animating","perGroup","slidePrev","rtlTranslate","normalize","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","threshold","currentSnap","nextSnap","slideToClickedSlide","slidesPerView","slideToIndex","loopCreate","$selector","blankSlidesNum","blankNode","prependSlides","appendSlides","loopFix","loopedSlides","allowSlidePrev","allowSlideNext","diff","loopDestroy","loop","setGrabCursor","moving","unsetGrabCursor","grabCursor","closestElement","base","__closestFrom","onTouchStart","touches","$targetEl","swipingClassHasValue","eventPath","noSwipingSelector","isTargetShadow","startX","startY","edgeSwipeDetection","edgeSwipeThreshold","shouldPreventDefault","onTouchMove","targetTouch","pageX","pageY","diffX","diffY","touchAngle","disableParentSwiper","resistanceRatio","onTouchEnd","touchEndTime","timeDiff","pathTree","currentPos","stopIndex","groupSize","rewindFirstIndex","rewindLastIndex","ratio","onResize","onClick","onScroll","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","passiveListener","attachEvents","detachEvents","events$1","isGridEnabled","setBreakpoint","initialized","breakpoints","breakpoint","breakpointParams","wasMultiRow","isMultiRow","wasEnabled","wasModuleEnabled","isModuleEnabled","directionChanged","needsReLoop","isEnabled","getBreakpoint","containerEl","currentHeight","points","point","minRatio","prepareClasses","prefix","resultClasses","item","addClasses","suffixes","removeClasses","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","preloadImages","images","checkOverflow","wasLocked","slidesOffsetBefore","lastSlideIndex","lastSlideRightEdge","checkOverflow$1","defaults","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","prototypes","extendedDefaults","Swiper","swipers","newParams","mod","swiperParams","touch","desktop","min","cls","slideEl","updates","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","getWrapperSelector","wrapper","deleteInstance","cleanStyles","newDefaults","modules","module","prototypeGroup","protoMethod","Virtual","cssModeTimeout","renderSlide","$slideEl","force","slidesPerGroup","centeredSlides","addSlidesBefore","addSlidesAfter","previousFrom","previousTo","previousSlidesGrid","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","slidesToRender","prependIndexes","appendIndexes","appendSlide","prependSlide","numberOfNewSlides","cache","newCache","cachedIndex","$cachedEl","cachedElIndex","removeSlide","slidesIndexes","removeAllSlides","Keyboard","handle","kc","pageUpDown","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","enable","disable","Mousewheel","timeout","lastScrollTime","lastEventBeforeSnap","recentWheelEvents","sX","sY","pX","pY","handleMouseEnter","handleMouseLeave","animateSlider","newEvent","releaseScroll","delta","rtlFactor","positions","prevEvent","ignoreWheelEvents","position","firstEvent","snapToThreshold","createElementIfNotDefined","originalParams","checkProps","element","Navigation","getEl","toggleEl","disabled","$nextEl","$prevEl","onPrevClick","onNextClick","_s","targetEl","isHidden","classesToSelector","Pagination","pfx","number","bulletSize","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","bulletActiveClass","total","bullets","firstIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","progressbarDirection","scale","scaleX","scaleY","render","paginationHTML","numberOfBullets","Scrollbar","isTouched","dragTimeout","dragStartPos","dragSize","trackSize","divider","scrollbar","$dragEl","newSize","newPos","getPointerPosition","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","touchEventsTouch","touchEventsDesktop","activeListener","eventMethod","enableDraggable","disableDraggable","$swiperEl","Parallax","setTransform","opacity","currentOpacity","currentScale","parallaxEl","$parallaxEl","parallaxDuration","_swiper","Zoom","isScaling","gesturesEnabled","fakeGestureTouched","fakeGestureMoved","gesture","velocity","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","onGestureChange","zoom","onGestureEnd","scaledWidth","scaledHeight","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","onTransitionEnd","zoomIn","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","slideWidth","slideHeight","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","getSlideSelector","toggleGestures","slideSelector","enableGestures","disableGestures","Lazy","scrollHandlerAttached","initialImageLoaded","loadInSlide","loadInDuplicate","$images","$imageEl","background","$pictureEl","sourceEl","$source","slideOriginalIndex","originalSlide","duplicatedSlide","load","slideExist","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","isWindow","scrollElementWidth","scrollElementHeight","lazy","cssMode","watchSlidesProgress","touchReleaseOnEdges","Controller","LinearSpline","binarySearch","guess","array","i1","i3","getInterpolateFunction","controlled","controlledTranslate","setControlledTranslate","setControlledTransition","removeSpline","A11y","liveRegion","notify","message","notification","getRandomNumber","size","randomChar","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElControls","controls","addElLabel","addElId","addElLive","live","disableEl","enableEl","onEnterOrSpaceKey","updateNavigation","hasPagination","hasClickablePagination","updatePagination","bulletEl","initNavEl","wrapperId","handlePointerDown","handlePointerUp","handleFocus","isActive","isVisible","initSlides","ariaLabelMessage","$containerEl","History","paths","slugify","getPathValues","urlOverride","location","pathArray","part","setHistory","root","currentState","scrollToSlide","setHistoryPopState","HashNavigation","onHashChange","newHash","activeSlideHash","setHash","hash","Autoplay","run","$activeSlideEl","autoplayResult","stop","pause","onVisibilityChange","onMouseEnter","onMouseLeave","attachMouseEvents","detachMouseEvents","Thumb","swiperCreated","onThumbClick","thumbsSwiper","clickedIndex","clickedSlide","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","autoScrollOffset","useOffset","currentThumbsIndex","newThumbsIndex","prevThumbsIndex","nextThumbsIndex","thumbs","freeMode","once","lastMoveEvent","velocityEvent","distance","momentumDistance","newPosition","doBounce","afterBouncePosition","bounceAmount","needsLoopFix","moveDistance","currentSlideSize","Grid","slidesNumberEvenToRows","slidesPerRow","numFullColumns","rows","fill","updateSlide","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","updateWrapperSize","roundLengths","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","indexToRemove","Manipulation","effectInit","effect","overwriteParams","perspective","recreateShadows","getEffectParams","overwriteParamsResult","requireUpdateOnVirtual","effectTarget","effectParams","effectVirtualTransitionEnd","transformEl","allSlides","eventTriggered","$transitionEndTarget","triggerEvents","EffectFade","tx","ty","slideOpacity","EffectCube","createSlideShadows","shadowBefore","shadowAfter","wrapperRotate","$cubeShadowEl","slideAngle","round","tz","shadowAngle","scale1","scale2","zFactor","createShadow","shadowClass","$shadowContainer","$shadowEl","EffectFlip","rotateY","rotateX","EffectCoverflow","center","rotate","centerOffset","offsetMultiplier","translateZ","stretch","slideTransform","$shadowBeforeEl","$shadowAfterEl","EffectCreative","getTranslateValue","isCenteredSlides","margin","originalProgress","custom","translateString","rotateString","scaleString","opacityString","shadowOpacity","EffectCards","startTranslate","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","prevY","Thumbs","FreeMode","setCss","Article4","_getArticleData","_setStyle","_createVideo4","_createSwiper","getArticleData_fn","createVideo4_fn","setStyle_fn","createSwiper_fn","basic_rwd","$id","$this","$swiperSet","pagination","gate","$swiper","SwiperV8","videoPlayer","_youtube","_vimeo","_youku","_bilibili","videoType","layout","youtube_fn","youku_fn","vimeo_fn","bilibili_fn","videoId","autoplay","hasVideoID","createPlayer","video4","_createCover","_getVideoData","getVideoData_fn","createCover_fn","LAYOUT","videoLayoutNo","videoMode","videoButton","videoCover","$target","$cover","video","videoTarget","videoTargetRoute","scrollers","getTargetUrl","Share4","targets","utm","copy","baseUrl","shareUrl","$copied","$clipboard","copiedWrapper","tooltipsText","fadeIn","interval","fading","fadeOut","cityData","d4","subOption","detectSync","controlElements","disabledEl","setSelectDisplay","valueIndex","placeholder","allLi","option","li","activeLi","tagEl","valueArray","loadCityData","lang","city","loadDistData","dist","closeAllDropdown","settingScrollbarStyle","Dropdown4","valueLiArray","valueIndexArray","dropdownHeight","hasFilter","totalHeight","allSublayer","defaultHeight","scroll","valueLi","cityDropdown","cityDropdownHasVal","toggleTransitionend","dropdownStatus","scrollToActive","halfActiveLiHeight","offsetTop","computedHeight","citySelect","clickOption","clickIndex","subDropdown","subDropdownList","subDropdownListMargin","subDropdownH","maxHeight","recalculate","distSelectEl","activeLiArray","getBreakpoints","m4","getDuration","createAnimateWrap","behavior","continual","childDOM","animateItem","cloneElement","cloneAnimateWrap","keyframes","framesObj","animateFrom","animateTo","func","timer","Marquee4","_animation","animation_fn","pauseOnMouseenter","playDelay","animateInit","enterKeyframes","framesArr","averageDuration","updateDuration","cloneStartTime","dragControl","_bindButtonEvent","_bindDragEvent","_scrollerDetect","_buttonDetect","_bindItemEvent","$wrapper","$active","updateEvent","scrollerDetect_fn","buttonDetect_fn","bindDragEvent_fn","bindButtonEvent_fn","_d","_e","_f","bindItemEvent_fn","$button","buttonEvent","fix","isDown","isMoved","mousedownEvent","mouseleaveEvent","mouseupEvent","mousemoveEvent","walk","reset","$container","$element","itemEvent","selectOption","clickHandler","collapseControl","$drag","originalDomString","$storage","Multipurpose4","_render","_breakpoint","_distribute","distribute_fn","breakpoint_fn","customize","render_fn","dragContainer","collapseContainer","Tab4","_tabSet","_getTabIndex","_initSwiper","_addUrl","_eventAnchor","_goAnchor","_step","_btnNextState","_btnPrevState","_tabState","_isTrue","_animationHide","_animationShow","_stateChange","_resizeTab","stateChange_fn","clickedTab","indexOf","newTabId","isTrue_fn","defaultID","newTabIndex","getTabIndex_fn","panel","animationShow_fn","animationHide_fn","tabIndex","nextPage","nextPageId","prevPage","prevPageId","tabSet_fn","changeEvent","matchingTabs","resizeTab_fn","tabs","tabPanelsWithId","tabPanel","swiperContainer","swiperWrapper","initSwiper_fn","sContainer","sWrapper","tabPanels","totalWidth","addUrl_fn","newUrl","eventAnchor_fn","pageYOffset","changeOffset","goAnchor_fn","step_fn","btnNextState_fn","newPage","isSinglePage","isLastPage","btn","btnPrevState_fn","isFirstPage","tabState_fn","tabId","tab","fun","val2","timing","clientHeight","_this_","targetElements","isTarget","targetElement","tabControl","tabElName","tabEls","collapseHandle","collapseClass","expandHandle","Collapse4","block","defaultOpen","targetStopPropagation","defaultActiveMark","single","createRipple","r4","button","color","ripples","removeStyle","Ripple4","_ball","attrToBoolean","booleanVal","ball_fn","ball","operateStart","operateEnd","posX","posY","offsetHeight","rippleR","ImageValidate","noImageDom","div","slash1","slash2","slashWidth","theta","errorImage","img","wrapWidth","wrapHeight","wrapDIV","parentsPosition","imageResize","noImage","createCallbackFunction","attributeValue","defaultValue","input","file","preview","group","inputIndex","fileExt","fileName","blob","imgFile","createCanvas","outputW","outputH","canvas","ctx","originalWidth","originalRatio","outputRatio","convertImg","dataUrl","resolve","reject","formatFloat","num","pos","checkSize","sizeLimit","fileSize","readFileHandler","parentsEl","reader","ImagePreview","inputs"],"mappings":"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AAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,K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AAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,MAAM,KAAK;AAAA,MACZ,CAAC,MAAM,KAAK;AAAA,IACb;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,QAAQ,KAAK;AAAA,MACd,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,MAAM,KAAK;AAAA,MACZ,CAAC,MAAM,KAAK;AAAA,MACZ,CAAC,MAAM,KAAK;AAAA,MACZ,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,KAAK;AAAA,MACb,CAAC,OAAO,K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","x_google_ignoreList":[5,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110]}