{"version":3,"file":"navigation.js","sources":["../../src/core/render/dom.ts","../../src/modules/navigation.ts"],"sourcesContent":["export function addClass (\n el: HTMLElement,\n list: Array | string = []\n): void {\n if (!Array.isArray(list)) list = [list]\n\n list.forEach(clz => (!el.classList.contains(clz) && el.classList.add(clz)))\n}\n\nexport function removeClass (\n el: HTMLElement,\n list: Array | string = []\n): void {\n if (!Array.isArray(list)) list = [list]\n\n list.forEach(clz => (el.classList.contains(clz) && el.classList.remove(clz)))\n}\n\nexport function attachListener (\n el: HTMLElement | Document | Window,\n evtName: string,\n handler: EventListenerOrEventListenerObject,\n opts?: boolean | AddEventListenerOptions\n): void {\n el.addEventListener(evtName, handler, opts)\n}\n\nexport function detachListener (\n el: HTMLElement | Document | Window,\n evtName: string,\n handler: EventListenerOrEventListenerObject\n): void {\n el.removeEventListener(evtName, handler)\n}\n\nexport function removeAttr (\n el: HTMLElement,\n attr: string\n): void {\n el.removeAttribute(attr)\n}\n\nexport function setAttr (\n el: HTMLElement,\n attr: string,\n value = ''\n): HTMLElement {\n el.setAttribute(attr, value)\n return el\n}\n\nexport function setStyle (\n el: HTMLElement,\n style: {[key: string]: string},\n forceRender?: boolean\n): HTMLElement {\n Object.keys(style).forEach(prop => {\n // TS7015: Element implicitly has an 'any' type because index expression is not of type 'number'.\n el.style[prop as any] = style[prop]\n })\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n forceRender && getComputedStyle(el)\n\n return el\n}\n\nexport function getTranslate (\n el: HTMLElement,\n isHorizontal: boolean\n): number {\n const matrix = getComputedStyle(el).transform.replace(/[a-z]|\\(|\\)|\\s/g, '').split(',').map(parseFloat)\n let arr: Array = []\n\n if (matrix.length === 16) {\n arr = matrix.slice(12, 14)\n } else if (matrix.length === 6) {\n arr = matrix.slice(4, 6)\n }\n return (>arr)[isHorizontal ? 0 : 1] || 0\n}\n\nexport function stringToElement (\n string: string\n): HTMLElement {\n const wrapper = document.createElement('div')\n wrapper.innerHTML = string\n return wrapper.firstChild as HTMLElement\n}\n","import {\n attachListener,\n detachListener\n} from '../core/render/dom'\nimport { SwiperInstance, SwiperPlugin } from '../core/index'\nimport { Options } from '../core/options'\n\nexport type SwiperPluginNavigationOptions = {\n nextEl: HTMLElement | string\n prevEl: HTMLElement | string\n disabledClass: string\n}\n\nexport type SwiperPluginNavigationPartialOptions = Partial\n\nexport type SwiperPluginNavigationInstance = {\n nextEl?: HTMLElement\n prevEl?: HTMLElement\n}\n\nexport default function SwiperPluginNavigation (\n instance: SwiperInstance & {\n navigation?: SwiperPluginNavigationInstance\n },\n options: Options & {\n navigation?: SwiperPluginNavigationPartialOptions\n }\n) {\n const isEnable = Boolean(options.navigation)\n const navigationInstance = {\n nextEl: null,\n prevEl: null\n } as unknown as SwiperPluginNavigationInstance\n const navigationOptions = Object.assign({\n disabledClass: 'swiper-button-disabled'\n }, options.navigation)\n const nextClickHandler = (e: PointerEvent) => {\n clickHandler(e.target as HTMLElement, 'next')\n }\n\n const prevClickHandler = (e: PointerEvent) => {\n clickHandler(e.target as HTMLElement, 'prev')\n }\n\n const clickHandler = (e: HTMLElement, type: 'next' | 'prev') => {\n if (checkIsDisable(e) && !instance.options.loop) {\n return\n }\n const {\n index\n } = instance.state\n\n if (type === 'next') {\n instance.slideTo(index + 1)\n }\n\n if (type === 'prev') {\n instance.slideTo(index - 1)\n }\n }\n\n const checkNavBtnDisabledClass = (index: number) => {\n const {\n minIndex,\n maxIndex\n } = instance.env.limitation\n if (\n navigationInstance\n && navigationInstance!.prevEl\n && navigationInstance!.nextEl\n ) {\n if (navigationInstance.nextEl.classList.contains(navigationOptions.disabledClass)\n && index >= minIndex) {\n navigationInstance.nextEl.classList.remove(navigationOptions.disabledClass)\n }\n if (navigationInstance.prevEl.classList.contains(navigationOptions.disabledClass)\n && index <= maxIndex) {\n navigationInstance.prevEl.classList.remove(navigationOptions.disabledClass)\n }\n\n if (index === minIndex) {\n navigationInstance.prevEl.classList.add(navigationOptions.disabledClass)\n }\n if (index === maxIndex) {\n navigationInstance.nextEl.classList.add(navigationOptions.disabledClass)\n }\n }\n }\n\n const checkIsDisable = (e: HTMLElement) => {\n return e.classList.contains(navigationOptions.disabledClass)\n }\n\n const checkButtonDefaultStatus = () => {\n const {\n index\n } = instance.state\n const {\n $list\n } = instance.env.element\n const {\n minIndex\n } = instance.env.limitation\n if (index === minIndex\n && navigationInstance.prevEl\n ) {\n navigationInstance.prevEl.classList.add(navigationOptions.disabledClass)\n }\n if ($list.length === minIndex\n && navigationInstance.nextEl\n ) {\n navigationInstance.nextEl.classList.add(navigationOptions.disabledClass)\n }\n }\n\n instance.on('before-slide', (currentIndex: number, state: never, newIndex: number) => {\n if (!instance.options.loop) {\n checkNavBtnDisabledClass(newIndex)\n }\n })\n\n instance.on('after-init', () => {\n if (!isEnable) return\n\n navigationInstance.nextEl = (typeof navigationOptions.nextEl === 'string')\n ? document.body.querySelector(navigationOptions.nextEl) as HTMLElement\n : navigationOptions.nextEl\n navigationInstance.prevEl = (typeof navigationOptions.prevEl === 'string')\n ? document.body.querySelector(navigationOptions.prevEl) as HTMLElement\n : navigationOptions.prevEl\n\n if (!instance.options.loop) {\n checkButtonDefaultStatus()\n }\n attachListener(navigationInstance.nextEl, 'click', nextClickHandler)\n attachListener(navigationInstance.prevEl, 'click', prevClickHandler)\n })\n\n instance.on('after-destroy', () => {\n if (navigationInstance\n && navigationInstance.prevEl\n && navigationInstance.nextEl\n ) {\n detachListener(navigationInstance.nextEl, 'click', nextClickHandler)\n detachListener(navigationInstance.prevEl, 'click', prevClickHandler)\n\n delete navigationInstance.nextEl\n delete navigationInstance.prevEl\n }\n })\n}\n"],"names":["attachListener","el","evtName","handler","opts","addEventListener","detachListener","removeEventListener","SwiperPluginNavigation","instance","options","isEnable","Boolean","navigation","navigationInstance","nextEl","prevEl","navigationOptions","Object","assign","disabledClass","nextClickHandler","e","clickHandler","target","prevClickHandler","type","checkIsDisable","loop","index","state","slideTo","checkNavBtnDisabledClass","env","limitation","minIndex","maxIndex","classList","contains","remove","add","checkButtonDefaultStatus","$list","element","length","on","currentIndex","newIndex","document","body","querySelector"],"mappings":"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"}