@xwadex/fesd 0.0.1-4.15.rc → 0.0.1-4.2.rc
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.
- package/dist/assets/fesd-bundle.css +9 -9
- package/dist/assets/fesd-bundle.js +8074 -633
- package/dist/assets/fesd-bundle.js.map +1 -1
- package/dist/assets/tools-bundle.js +4908 -3207
- package/dist/assets/tools-bundle.js.map +1 -1
- package/dist/assets/utils-bundle.js +28495 -0
- package/dist/assets/utils-bundle.js.map +1 -0
- package/package.json +5 -4
- package/dist/assets/image-preview-bundle.js +0 -14929
- package/dist/assets/image-preview-bundle.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fesd-bundle.js","sources":["../../src/fesd/detect4/detect4.js","../../src/fesd/article4/article4.js","../../src/fesd/category-slider/category-slider.js","../../src/fesd/share4/share4.js","../../src/fesd/marquee4/marquee4.js","../../src/fesd/multipurpose4/multipurpose4.js"],"sourcesContent":["export const init = () => {\n const userAgent = navigator.userAgent;\n const 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 const 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 const 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 return { browser, mobile, os }\n}\n\nexport const isBrowser4 = () => {\n const { browser } = init();\n return Object.keys(browser).find(key => {\n if (browser[key]) return browser[key];\n });\n};\n\nexport const isMobile4 = () => {\n const { mobile } = init();\n return Object.keys(mobile).some(key => {\n if (mobile[key]) return mobile[key];\n });\n};\n\nexport const isOs4 = () => {\n const { os } = init();\n return Object.keys(os).find(key => {\n if (os[key]) return os[key];\n });\n};\n\nexport const logs = () => console.dir(init());\n\nexport default function Detect4() {\n return {\n init,\n isBrowser4,\n isMobile4,\n isOs4,\n logs\n }\n}\n\n\n","import { Swiper as SwiperV8 } from 'swiper/bundle'\nimport { configs } from '../configs'\nimport Video4 from '../video4'\n// import Swiper bundle with all modules installed\nimport {\n isString,\n isNodeList,\n isElementExist,\n getAllElements,\n createUid\n} from '../commons'\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 } = configs.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 && params.$button) {\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(configs.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","// 判斷操作事件使用 mouse 或是 touch\nlet operateStart = 'ontouchstart' in document.documentElement ? 'touchstart' : 'mousedown';\nlet operateEnd = 'ontouchend' in document.documentElement ? 'touchend' : 'mouseup';\nlet operateMove = 'ontouchmove' in document.documentElement ? 'touchmove' : 'mousemove';\n\n/* ---------------------------- Function 宣告 --------------------------------- */\n\n// 獲取 translate 數值\nfunction getTranslateValues(element) {\n const style = window.getComputedStyle(element);\n const matrix = style['transform'] || style.mozTransform;\n\n // No transform property. Simply return 0 values.\n if (matrix === 'none') {\n return {\n x: 0,\n y: 0,\n z: 0,\n };\n }\n\n // Can either be 2d or 3d transform\n const matrixType = matrix.includes('3d') ? '3d' : '2d';\n const matrixValues = matrix.match(/matrix.*\\((.+)\\)/)[1].split(', ');\n\n // 2d matrices have 6 values\n // Last 2 values are X and Y.\n // 2d matrices does not have Z value.\n if (matrixType === '2d') {\n return {\n x: Number(matrixValues[4]),\n y: Number(matrixValues[5]),\n z: 0,\n };\n }\n\n // 3d matrices have 16 values\n // The 13th, 14th, and 15th values are X, Y, and Z\n if (matrixType === '3d') {\n return {\n x: Number(matrixValues[12]),\n y: Number(matrixValues[13]),\n z: Number(matrixValues[14]),\n };\n }\n}\n\n// 計算輪播內容總寬度\nfunction getSlideTotalW(element) {\n const slideWrap = element.querySelector('.wrapper');\n const items = slideWrap.querySelectorAll('.item');\n let slideTotalWidth = 0; //輪播內容總寬度\n items.forEach((item) => {\n const style = getComputedStyle(item);\n const marginL = parseInt(style.marginLeft);\n const marginR = parseInt(style.marginRight);\n slideTotalWidth += item.getBoundingClientRect().width + marginL + marginR;\n });\n return slideTotalWidth;\n}\n\n// 偵測目前輪播位置\nfunction detectPos(self) {\n // 拖拉在最左邊時\n if (getTranslateValues(self.slideWrapEl).x >= self.translateMin) {\n return 'is-start';\n }\n // 拖拉在最右邊時\n else if (getTranslateValues(self.slideWrapEl).x <= self.translateMax) {\n return 'is-end';\n }\n // 拖拉在中間時\n else if (\n getTranslateValues(self.slideWrapEl).x < self.translateMin &&\n getTranslateValues(self.slideWrapEl).x > self.translateMax\n ) {\n return 'is-middle';\n }\n}\n\n// 綁定事件\nfunction eventHandler(self) {\n const element = self.el;\n const slideWrap = element.querySelector('.wrapper');\n //滑鼠按住或是行動裝置手指按住\n slideWrap.addEventListener(operateStart, function (e) {\n self.isDown = true;\n if (self.slidable) slideWrap.classList.add('dragging');\n switch (operateStart) {\n case 'mousedown':\n self.startX = e.pageX;\n break;\n case 'touchstart':\n self.startX = e.changedTouches[0].pageX;\n break;\n }\n self.nowTranslateX = getTranslateValues(slideWrap).x;\n });\n\n //滑鼠放開或是行動裝置手指放開\n slideWrap.addEventListener(operateEnd, function (e) {\n self.isDown = false;\n slideWrap.classList.remove('dragging');\n slideWrap.classList.remove('moving');\n //移動距離\n let moveDistance;\n switch (operateMove) {\n case 'mousemove':\n moveDistance = e.pageX - self.startX;\n break;\n case 'touchmove':\n moveDistance = e.changedTouches[0].pageX - self.startX;\n break;\n }\n if (moveDistance === 0 && e.target.closest('.item')) {\n if (operateEnd === 'mouseup' && e.button !== 0) return;\n const items = slideWrap.querySelectorAll('.item');\n items.forEach((item) => {\n item.classList.remove('active');\n });\n e.target.closest('.item').classList.add('active');\n self.moveActive(self.params.speed);\n } else {\n if (self.slidable) self.resetPos(element);\n }\n });\n\n //滑鼠離開\n slideWrap.addEventListener('mouseleave', function () {\n if (!self.isDown) return;\n if (self.slidable) {\n self.isDown = false;\n slideWrap.classList.remove('dragging');\n slideWrap.classList.remove('moving');\n self.resetPos(element);\n }\n });\n\n //滑鼠移動或是行動裝置手指移動\n slideWrap.addEventListener(operateMove, function (e) {\n if (!self.draggable) return;\n if (self.slidable) {\n if (!self.isDown) return;\n e.preventDefault();\n //移動距離\n let moveDistance;\n switch (operateMove) {\n case 'mousemove':\n moveDistance = e.pageX - self.startX;\n break;\n case 'touchmove':\n moveDistance = e.changedTouches[0].pageX - self.startX;\n break;\n }\n if (moveDistance !== 0) {\n slideWrap.classList.add('moving');\n const styles = {\n transition: 'all 0ms ease 0s',\n transform: `translate3d(${self.nowTranslateX + moveDistance}px,0,0)`,\n };\n Object.assign(slideWrap.style, styles);\n }\n }\n });\n}\n\n// 取消 a 的拖拉\nfunction disableLinkDrag(element) {\n const aTag = element.querySelectorAll('a');\n for (var i = 0, len = aTag.length; i < len; i++) {\n aTag[i].draggable = false;\n }\n}\n\nexport default class CategorySlider {\n constructor(element, params) {\n this.el = typeof element === 'string' ? document.querySelector(element) : element;\n this.slideWrapEl = this.el.querySelector('.wrapper');\n // default params\n this.params = {\n speed: 300,\n clickSwitch: true,\n breakpoint: false,\n };\n Object.assign(this.params, params);\n\n this.draggable = true;\n this.isDown = false; //按下\n this.startX = 0; //按下初始位置\n this.nowTranslateX = getTranslateValues(this.slideWrapEl).x; //目前X軸偏移輛\n this.slideTotalWidth = getSlideTotalW(this.el);\n this.translateMin = 0;\n this.translateMax = -Math.floor(\n Math.abs(\n getSlideTotalW(this.el) - this.el.querySelector('.wrapper').getBoundingClientRect().width\n )\n );\n this.slidable =\n this.slideTotalWidth > Math.round(this.el.getBoundingClientRect().width) &&\n (!this.params.breakpoint || window.innerWidth <= this.params.breakpoint);\n this.init();\n }\n init() {\n const self = this;\n if (self.slidable) {\n self.slideWrapEl.style.width = `${self.slideTotalWidth}px`;\n self.el.classList.add('slidable');\n if (self.slideWrapEl.querySelector('.item.active')) self.moveActive();\n }\n window.addEventListener('resize', function () {\n self.update();\n });\n eventHandler(self);\n disableLinkDrag(self.el);\n }\n moveActive(speed) {\n const self = this;\n const activeItem = self.slideWrapEl.querySelector('.item.active');\n const prevItem = activeItem.previousElementSibling;\n const prevOffsetLeft = prevItem\n ? activeItem.offsetLeft - self.el.clientWidth / 2 + activeItem.clientWidth / 2\n : 0;\n if (self.slidable) {\n if (-prevOffsetLeft < 0 && -prevOffsetLeft > self.translateMax) {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(-${prevOffsetLeft}px,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n } else if (-prevOffsetLeft >= 0) {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(0,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n } else {\n const styles = {\n transition: `all ${speed ? speed : 0}ms ease 0s`,\n transform: `translate3d(${self.translateMax}px,0,0)`,\n };\n Object.assign(self.slideWrapEl.style, styles);\n }\n if (speed) {\n self.slideWrapEl.addEventListener(\n 'transitionend',\n function () {\n self.nowTranslateX = getTranslateValues(self.slideWrapEl).x;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n break;\n }\n },\n false\n );\n } else {\n self.nowTranslateX = getTranslateValues(self.slideWrapEl).x;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n break;\n }\n }\n }\n }\n resetPos() {\n const self = this;\n switch (detectPos(self)) {\n case 'is-start':\n self.el.classList.add('is-start');\n self.el.classList.remove('is-end');\n Object.assign(self.slideWrapEl.style, {\n transition: `all ${self.params.speed}ms ease 0s`,\n transform: 'translate3d(0,0,0)',\n });\n break;\n case 'is-middle':\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n break;\n case 'is-end':\n self.el.classList.remove('is-start');\n self.el.classList.add('is-end');\n Object.assign(self.slideWrapEl.style, {\n transition: `all ${self.params.speed}ms ease 0s`,\n transform: `translate3d(${self.translateMax}px,0,0)`,\n });\n break;\n }\n }\n update() {\n const self = this;\n self.el.querySelector('.wrapper').removeAttribute('style');\n self.slideTotalWidth = getSlideTotalW(self.el);\n self.translateMax = -Math.floor(\n Math.abs(\n getSlideTotalW(self.el) - self.el.querySelector('.wrapper').getBoundingClientRect().width\n )\n );\n self.slidable =\n self.slideTotalWidth > Math.round(self.el.getBoundingClientRect().width) &&\n (!self.params.breakpoint || window.innerWidth <= self.params.breakpoint);\n if (self.slidable) {\n self.slideWrapEl.style.width = `${self.slideTotalWidth}px`;\n self.el.classList.add('slidable');\n if (self.slideWrapEl.querySelector('.item.active')) self.moveActive();\n } else {\n self.el.classList.remove('slidable');\n self.el.classList.remove('is-start');\n self.el.classList.remove('is-end');\n self.slideWrapEl.removeAttribute('style');\n }\n }\n}\n","import { configs } from '../configs'\nimport {\n insert,\n isString,\n isElementExist,\n getAllElements\n} from '../commons'\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 // 從 configs 提取設定\n const { SETTINGS } = configs.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}"e=${shareUrl}`);\n }\n\n this.removeEventListener('click', eventHandler);\n setTimeout(() => {\n this.addEventListener('click', eventHandler);\n }, 100);\n }\n}\n\nexport default Share4;\n","import { configs } from '../configs'\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') || configs.marquee4.SETTINGS.direction, // up / down / left / right\n behavior: this.getAttribute('behavior') || configs.marquee4.SETTINGS.behavior, // normal / alternate / endStop\n duration: Number(this.getAttribute('duration')) || configs.marquee4.SETTINGS.duration, // ms\n durationBreakpoints: getBreakpoints(this) || configs.marquee4.SETTINGS.durationBreakpoints,\n autoplay: this.getAttribute('autoplay') || configs.marquee4.SETTINGS.autoplay, // normal / alternate / endStop\n pauseOnMouseenter: this.getAttribute('pauseOnMouseEnter') ? (this.getAttribute('pauseOnMouseEnter') === 'true' ? true : false) : configs.marquee4.SETTINGS.pauseOnMouseenter, // true / false\n continual: this.getAttribute('continual') ? (this.getAttribute('continual') === 'true' ? true : false) : configs.marquee4.SETTINGS.continual, // true / false\n gap: Number(this.getAttribute('gap')) || configs.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 { configs } from '../configs'\nimport { isNodeList, insert } from '../commons'\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 = configs.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 = configs.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 = configs.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') ?? configs.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({}, configs.multipurpose4.SETTINGS.drag, customize?.drag);\n this.s.option.collapse = Object.assign({}, configs.multipurpose4.SETTINGS.collapse, customize?.collapse);\n this.s.option.dropdown = Object.assign({}, configs.multipurpose4.SETTINGS.dropdown, customize?.dropdown);\n this.s.option.breakpoint = Object.assign({}, configs.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"],"names":["init","userAgent","browser","mobile","os","isBrowser4","key","isMobile4","isOs4","logs","Detect4","setCss","target","style","css","isNodeList","el","Article4","options","__privateAdd","_create","_init","_getArticleData","_setStyle","_createVideo4","_createSwiper","isString","isElementExist","__privateMethod","create_fn","elements","parent","getArticleData_fn","createVideo4_fn","SETTINGS","configs.article4","getAllElements","init_fn","_b","_a","setStyle_fn","createSwiper_fn","element","params","Video4","basic_rwd","$id","createUid","$this","$swiperSet","swiper","container","configs.video4","next","prev","pagination","gate","$swiper","SwiperV8","operateStart","operateEnd","operateMove","getTranslateValues","matrix","matrixType","matrixValues","getSlideTotalW","items","slideTotalWidth","item","marginL","marginR","detectPos","self","eventHandler","slideWrap","e","moveDistance","styles","disableLinkDrag","aTag","i","len","CategorySlider","speed","activeItem","prevOffsetLeft","getTargetUrl","type","Share4","_trigger","configs.share4","targets","trigger_fn","utm","copy","baseUrl","shareUrl","insert","$copied","$clipboard","copiedWrapper","tooltipsText","fadeIn","duration","opacity","interval","gap","fading","fadeOut","callback","getBreakpoints","m4","breakpoints","attr","value","getDuration","breakpoint","points","point","a","b","createAnimateWrap","behavior","continual","childDOM","animateItem","cloneElement","cloneAnimateWrap","keyframes","direction","framesObj","animateFrom","animateTo","debounce","func","timer","event","Marquee4","_animation","_event","oldVal","newVal","configs.marquee4","animation_fn","event_fn","autoplay","pauseOnMouseenter","playDelay","animateInit","enterKeyframes","framesArr","averageDuration","updateDuration","startTime","cloneStartTime","addClass","className","removeClass","dragControl","_bindButtonEvent","_bindDragEvent","_scrollerDetect","_buttonDetect","_bindItemEvent","$wrapper","$active","updateEvent","scrollerDetect_fn","buttonDetect_fn","bindDragEvent_fn","_c","bindButtonEvent_fn","_d","_e","_f","bindItemEvent_fn","$button","buttonEvent","fix","$el","isDown","isMoved","startX","scrollLeft","mousedownEvent","mouseleaveEvent","mouseupEvent","mousemoveEvent","walk","reset","$container","$element","itemEvent","selectOption","clickHandler","collapseControl","$drag","collapse","createTemplate","option","originalDomString","$storage","configs.multipurpose4","Multipurpose4","_render","_breakpoint","_distribute","distribute_fn","breakpoint_fn","customize","render_fn","obj","keys","dragContainer","collapseContainer"],"mappings":"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"}
|
|
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","../../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","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';\nimport { scrollLock, scrollUnlock } from \"../../tools/utils.js\"\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 const lazy = new LazyLoad({ callback_loaded: img => { }, })\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 lazy.update();\n scrollLock([...scrollers]);\n },\n close(modal) {\n const scrollers = modal.querySelectorAll('[data-overlayscrollbars-viewport]');\n 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 && params.$button) {\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}"e=${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","//建立 callback Function\nfunction createCallbackFunction(attributeValue, defaultValue) {\n if (attributeValue) {\n return function (el, res) {\n Function(attributeValue)(el, res);\n };\n } else {\n return defaultValue;\n }\n}\n\n//產生結構\nfunction createDOM(input, element, file, res) {\n const params = element.params;\n const preview = input.closest('[data-upload-item]').querySelector('[data-preview]');\n if (preview.querySelector('img')) preview.querySelector('img').remove();\n preview.appendChild(res.imgElement);\n const group = input.dataset.group;\n const inputIndex = document.querySelector(element.el).dataset.index;\n if (params.compress) {\n //副檔名\n const fileExt = file.name.substring(file.name.lastIndexOf('.')).replace('.');\n //檔名\n const fileName = file.name.replace(`.${fileExt}`, '');\n //檔案壓縮\n res.originalCanvas.toBlob(\n function (blob) {\n const imgFile = new File([blob], `${fileName}`, { type: file.type });\n uploadImage[`${group}`][inputIndex] = {\n file: imgFile,\n info: res,\n };\n if (params.on.changeAfter && typeof params.on.changeAfter === 'function') {\n params.on.changeAfter(input, res);\n }\n },\n file.type,\n params.compress,\n );\n } else {\n uploadImage[`${group}`][inputIndex] = {\n file: file,\n info: res,\n };\n if (params.on.changeAfter && typeof params.on.changeAfter === 'function') {\n params.on.changeAfter(input, res);\n }\n }\n}\n\n//產生Canvas\nfunction createCanvas(options, img, outputW, outputH) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n const originalWidth = img.width;\n const originalHeight = img.height;\n const originalRatio = (originalHeight / originalWidth) * 100;\n const outputRatio = (outputH / outputW) * 100;\n let newWidth = 0;\n let newHeight = 0;\n canvas.width = outputW;\n canvas.height = outputH;\n //縮圖填滿\n switch (options.previewSize) {\n case 'contain':\n if (originalRatio < outputRatio) {\n newWidth = canvas.width;\n newHeight = (outputW * originalRatio) / 100;\n } else if (originalRatio > outputRatio) {\n newWidth = (outputH / originalRatio) * 100;\n newHeight = canvas.height;\n } else {\n newWidth = canvas.width;\n newHeight = canvas.height;\n }\n break;\n case 'cover':\n if (originalRatio < outputRatio) {\n newWidth = (outputH / originalRatio) * 100;\n newHeight = canvas.height;\n } else if (originalRatio > outputRatio) {\n newWidth = canvas.width;\n newHeight = (outputW * originalRatio) / 100;\n } else if (originalRatio === outputRatio) {\n newWidth = canvas.width;\n newHeight = canvas.height;\n }\n break;\n }\n const x = (canvas.width - newWidth) * 0.5;\n const y = (canvas.height - newHeight) * 0.5;\n ctx.drawImage(img, x, y, newWidth, newHeight);\n\n return canvas;\n}\n\n//將檔案轉成圖片\nfunction convertImg(options, dataUrl) {\n return new Promise((resolve, reject) => {\n if (dataUrl) {\n const img = new Image();\n img.src = dataUrl;\n img.classList.add(options.previewSize);\n img.onload = () => {\n let result = {\n imgElement: img,\n originalCanvas: createCanvas(options, img, img.width, img.height),\n info: {\n originalWidth: img.width,\n originalHeight: img.height,\n ratio: (img.height / img.width) * 100 + '%',\n },\n };\n resolve(result);\n };\n } else {\n resolve();\n }\n });\n}\n\n//小數點後第N位四捨五入\nfunction formatFloat(num, pos) {\n const size = Math.pow(10, pos);\n return Math.round(num * size) / size;\n}\n\n//檢查檔案大小\nfunction checkSize(file, sizeLimit) {\n let fileSize = file.size / 1024 / 1024;\n return `${formatFloat(fileSize, 2)}` <= sizeLimit;\n}\n\n//讀取檔案\nfunction readFileHandler(e, input, element) {\n if (e.target.files.length <= 0) return;\n const file = e.target.files[0];\n const parentsEl = input.closest('[data-upload-item]');\n let reader = new FileReader();\n reader.onload = event => {\n const dataUrl = file.type.split('/')[0] === 'image' ? event.target.result : null;\n if (element.params.sizeLimit && !checkSize(file, element.params.sizeLimit)) {\n input.value = '';\n parentsEl.classList.add('over-limit');\n if (element.params.on.overLimit && typeof element.params.on.overLimit === 'function') {\n element.params.on.overLimit(input, element.params.sizeLimit);\n }\n return;\n } else {\n parentsEl.classList.remove('over-limit');\n parentsEl.classList.add('uploaded');\n convertImg(element.params, dataUrl).then(res => {\n createDOM(input, element, file, res);\n });\n }\n };\n reader.readAsDataURL(file);\n}\n\nclass ImagePreview {\n constructor(element, params) {\n const self = this;\n self.el = element;\n // default params\n self.params = {\n on: {\n changeAfter: null,\n overLimit: null,\n },\n group: 'group', //群組名稱 (type: String)\n sizeLimit: 2, //大小限制 (type: Number 單位: MB)\n previewSize: 'cover', //縮圖形式 (type: String 'contain' || 'cover')\n compress: 0.8, //壓縮品質 (type: Number 0~1 || false)\n };\n Object.assign(self.params, params);\n self.init();\n }\n init() {\n const self = this;\n const inputs = document.querySelectorAll(`${self.el}:not(.preview-active)`);\n if (inputs.length <= 0) return;\n window.uploadImage = {};\n inputs.forEach((input, index) => {\n input.classList.add('preview-active');\n // final set params\n const params = {\n group: input.dataset.group || self.params.group,\n sizeLimit: parseInt(input.dataset.limit) || self.params.sizeLimit,\n previewSize: input.dataset.previewSize || self.params.previewSize,\n compress: input.dataset.compress || self.params.compress,\n on: {\n changeAfter: createCallbackFunction(input.dataset.changeAfter, self.params.on.changeAfter),\n overLimit: createCallbackFunction(input.dataset.overLimit, self.params.on.overLimit),\n },\n };\n self.params = params;\n if (typeof uploadImage[`${params.group}`] === 'undefined') uploadImage[`${params.group}`] = [];\n if (!input.dataset.group) input.dataset.group = params.group;\n input.dataset.index = document.querySelectorAll(`[data-group=\"${params.group}\"]`).length - 1;\n input.addEventListener('change', function (e) {\n readFileHandler(e, input, self);\n });\n });\n }\n}\n\nexport default ImagePreview;\n"],"names":["FESD_DB","type","filter","filterPlaceholder","collapse","dropdown","Detect4","userAgent","isBrowser4","browser","key","isMobile4","mobile","isOs4","os","insert","isString","value","isElement","isNodeList","isElementExist","getElement","isFunction","getAllElements","createUid","toHTMLElement","str","dom","jsonParse","json","warn","target","msg","error","SHARED","events","handler","__events__","evt","evtHandler","index","onceHandler","args","event","data","ease","t","b","c","d","scrollTo","options","instance","container","spacer","speed","gap","easing","direction","isHorizontal","scrollDirection","rectPosition","rectSpace","containerEle","start","targetPoint","spacerGap","change","increment","currentTime","emitEvent","eventName","targetEle","animateScroll","val","Anchor4","el","__privateAdd","_create","_init","_trigger","__privateMethod","create_fn","elements","_a","SETTINGS","fesdDB","newOptions","targetName","EVENTS","k","v","init_fn","trigger_fn","defaultOptions","eventHandler","MODALS","createTemplate","TEMPLATE","childDom","content","child","ModernModal","_mount","_event","_stateControl","attr","oldVal","newVal","stateControl_fn","ATTRS","id","mount_fn","scroller","OverlayScrollbars","event_fn","$self","close","destroy","closeAttr","_b","destroyAttr","_c","e","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","lazy","img","scrollers","scrollLock","scrollUnlock","isObject","extend","ssrDocument","getDocument","doc","ssrWindow","callback","getWindow","win","makeReactive","proto","Dom7","items","arrayFlat","arr","arrayFilter","arrayUnique","uniqueArray","i","qsa","selector","context","a","$","window","document","html","toCreate","tempParent","addClass","classes","classNames","removeClass","toggleClass","hasClass","attrs","attrName","removeAttr","transform","transition","duration","eventType","targetSelector","listener","capture","handleLiveEvent","eventData","parents","handleEvent","j","off","handlers","trigger","dataIndex","transitionEnd","fireCallBack","outerWidth","includeMargins","styles","outerHeight","offset","box","body","clientTop","clientLeft","scrollTop","scrollLeft","css","props","prop","each","result","text","is","compareWith","eq","length","returnIndex","append","els","newChild","tempDiv","prepend","next","nextAll","nextEls","prev","prevAll","prevEls","parent","closest","find","foundElements","found","children","childNodes","remove","Methods","methodName","deleteProps","object","nextTick","now","getComputedStyle","style","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","o","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","update","getSwiperTranslate","currentTranslate","setTranslate","byController","wrapperEl","x","y","z","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","preventDefault","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","m","prototypeGroup","protoMethod","Virtual","cssModeTimeout","renderSlide","$slideEl","force","slidesPerGroup","centeredSlides","addSlidesBefore","addSlidesAfter","previousFrom","previousTo","previousSlidesGrid","previousOffset","offsetProp","slidesAfter","slidesBefore","from","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","p","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","cssMode","watchSlidesProgress","touchReleaseOnEdges","Controller","LinearSpline","binarySearch","guess","array","i1","i3","getInterpolateFunction","_t","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","r","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","debounce","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","keys","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","wrapWidth","wrapHeight","wrapDIV","parentsPosition","imageResize","noImage","createCallbackFunction","attributeValue","defaultValue","createDOM","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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K;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,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,MAAM,KAAK;AAAA,MACZ,CAAC,MAAM,KAAK;AAAA,MACZ,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,IACd;AAAA,IACD,KAAK;AAAA,MACH,CAAC,MAAM,KAAK;AAAA,MACZ,CAAC,MAAM,KAAK;AAAA,MACZ,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,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,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,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,QAAQ,KAAK;AAAA,MACd,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,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,KAA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","x_google_ignoreList":[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111]}
|