@xwadex/fesd 0.0.14 → 0.0.16

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.
@@ -1 +0,0 @@
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","../../src/fesd/video4/videoPlayer.js","../../src/fesd/video4/video4.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/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 fesdDB from '../../fesdDB.js';\nimport 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 fesdDB from '../../fesdDB.js';\nimport { 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 fesdDB from '../../fesdDB.js';\nimport 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 fesdDB from '../../fesdDB.js';\nimport 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","import fesdDB from '../../fesdDB.js';\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&${autoplay === 'on' ? 'autoplay=1' : ''}&mute=1&loop=1&enablejsapi=1\" frameborder=\"0\" allowfullscreen=\"0\" volumn=\"0\" allow=\"${autoplay === 'on' ? 'autoplay;' : ''} 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}&${autoplay === 'on' ? 'autoplay=1' : ''}&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&${autoplay === 'on' ? 'autoplay=1' : ''}\" 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(JSON.stringify({ event: 'command', func: 'playVideo' }), '*');\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(JSON.stringify({ value: 'true', method: 'play' }), '*');\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(JSON.stringify({ event: 'command', func: 'pauseVideo' }), '*');\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(JSON.stringify({ value: 'true', method: 'pause' }), '*');\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 fesdDB from '../../fesdDB.js';\nimport 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","/**\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 fesdDB from '../../fesdDB.js';\nimport Video4 from '../video4/video4';\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","import fesdDB from '../../fesdDB.js';\nimport { 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 fesdDB from '../../fesdDB.js';\nimport 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","import fesdDB from '../../fesdDB.js';\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 fesdDB from '../../fesdDB.js';\nimport { 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 fesdDB from '../../fesdDB.js';\nimport 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","import fesdDB from '../../fesdDB.js';\n\nfunction 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","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","fesdDB","newOptions","targetName","EVENTS","k","v","init_fn","trigger_fn","defaultOptions","eventHandler","createCache","n","o","s","e","r","cacheUpdateContextual","t","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","videoPlayer","_youtube","_vimeo","_youku","_bilibili","videoType","layout","youtube_fn","youku_fn","vimeo_fn","bilibili_fn","videoId","autoplay","hash","hasVideoID","isActive","createPlayer","params","video4","_createCover","_getVideoData","getVideoData_fn","createCover_fn","LAYOUT","$selector","videoLayoutNo","videoMode","videoButton","videoCover","$target","$cover","src","video","videoTarget","videoTargetRoute","scrollers","extend","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","$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","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","isVisible","initSlides","ariaLabelMessage","$containerEl","History","paths","slugify","getPathValues","urlOverride","location","pathArray","part","setHistory","root","currentState","scrollToSlide","setHistoryPopState","HashNavigation","onHashChange","newHash","activeSlideHash","setHash","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","Video4","basic_rwd","$id","$this","$swiperSet","pagination","gate","$swiper","SwiperV8","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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C,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,KAAK;AAAA,MACb,CAA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C,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,KAAK;AAAA,MACb,CAA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","x_google_ignoreList":[5,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,111,112]}