{"version":3,"file":"878.9417020f1c8119506f39.js","mappings":"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","sources":["webpack://kelberman.org/./node_modules/blaze-slider/dist/blaze-slider.esm.js"],"sourcesContent":["/* blaze-slider v1.9.1 by Manan Tank */\n/**\n * calculate pages and return\n */\nfunction calculatePages(slider) {\n const { slidesToShow, slidesToScroll, loop } = slider.config;\n const { isStatic, totalSlides } = slider;\n const pages = [];\n const lastIndex = totalSlides - 1;\n // start with index 0, keep adding slidesToScroll to get the new page\n for (let startIndex = 0; startIndex < totalSlides; startIndex += slidesToScroll) {\n const _endIndex = startIndex + slidesToShow - 1;\n const overflow = _endIndex > lastIndex;\n if (overflow) {\n // if not looped\n if (!loop) {\n // adjust the startIndex\n const startIndex = lastIndex - slidesToShow + 1;\n const lastPageIndex = pages.length - 1;\n // create page only if adjusting the startIndex does not make it the same as previously saved page\n if (pages.length === 0 ||\n (pages.length > 0 && pages[lastPageIndex][0] !== startIndex)) {\n pages.push([startIndex, lastIndex]);\n }\n break;\n }\n // if looped\n else {\n // adjust the endIndex\n const endIndex = _endIndex - totalSlides;\n pages.push([startIndex, endIndex]);\n }\n }\n else {\n pages.push([startIndex, _endIndex]);\n }\n // if static, only allow 1 iteration\n if (isStatic) {\n break;\n }\n }\n return pages;\n}\n\n/**\n * calculate all possible states of given slider\n */\nfunction calculateStates(slider) {\n const { totalSlides } = slider;\n const { loop } = slider.config;\n // get all possible pages\n const pages = calculatePages(slider);\n const states = [];\n const lastPageIndex = pages.length - 1;\n for (let pageIndex = 0; pageIndex < pages.length; pageIndex++) {\n // calculate prev and next page index based on config\n let nextPageIndex, prevPageIndex;\n if (loop) {\n nextPageIndex = pageIndex === lastPageIndex ? 0 : pageIndex + 1;\n prevPageIndex = pageIndex === 0 ? lastPageIndex : pageIndex - 1;\n }\n else {\n nextPageIndex =\n pageIndex === lastPageIndex ? lastPageIndex : pageIndex + 1;\n prevPageIndex = pageIndex === 0 ? 0 : pageIndex - 1;\n }\n const currentPageStartIndex = pages[pageIndex][0];\n const nextPageStartIndex = pages[nextPageIndex][0];\n const prevPageStartIndex = pages[prevPageIndex][0];\n // calculate slides that need to be moved for transitioning to next and prev state from current state\n let nextDiff = nextPageStartIndex - currentPageStartIndex;\n if (nextPageStartIndex < currentPageStartIndex) {\n nextDiff += totalSlides;\n }\n let prevDiff = currentPageStartIndex - prevPageStartIndex;\n if (prevPageStartIndex > currentPageStartIndex) {\n prevDiff += totalSlides;\n }\n states.push({\n page: pages[pageIndex],\n next: {\n stateIndex: nextPageIndex,\n moveSlides: nextDiff,\n },\n prev: {\n stateIndex: prevPageIndex,\n moveSlides: prevDiff,\n },\n });\n }\n return states;\n}\n\nconst START = 'start';\nconst END = 'end';\nconst DEV = process.env.NODE_ENV !== 'production';\n\n/**\n * it fixes below scenarios which are wrong (and adds a warning in console in development)\n * - config.slidesToShow greater than totalSlides\n * - config.slidesToScroll greater than config.slidesToShow which skips showing certain slides\n * - config.slidesToScroll too high such that it causes glitches\n */\nfunction fixSliderConfig(slider) {\n const { slidesToScroll, slidesToShow } = slider.config;\n const { totalSlides, config } = slider;\n if (totalSlides < slidesToShow) {\n if (DEV) {\n console.warn('slidesToShow can not be larger than number of slides. Setting slidesToShow = totalSlides instead.');\n }\n config.slidesToShow = totalSlides;\n }\n if (totalSlides <= slidesToShow) {\n // return because slidesToScroll does not need to be checked\n return;\n }\n // detect slider skipping\n if (slidesToScroll > slidesToShow) {\n if (DEV) {\n console.warn('slidesToScroll can not be greater than slidesToShow. Setting slidesToScroll = slidesToShow instead');\n }\n config.slidesToScroll = slidesToShow;\n }\n // detect slider jumping glitch\n if (totalSlides < slidesToScroll + slidesToShow) {\n const properSlidesToScroll = totalSlides - slidesToShow;\n if (DEV) {\n console.warn(`slidesToScroll = ${slidesToScroll} is too large for a slider with ${totalSlides} slides with slidesToShow=${slidesToShow}, setting max possible slidesToScroll = ${properSlidesToScroll} instead.`);\n }\n config.slidesToScroll = properSlidesToScroll;\n }\n}\n\nclass Automata {\n constructor(totalSlides, config) {\n this.config = config;\n this.totalSlides = totalSlides;\n this.isTransitioning = false;\n constructAutomata(this, totalSlides, config);\n }\n next(pages = 1) {\n if (this.isTransitioning || this.isStatic)\n return;\n const { stateIndex } = this;\n let slidesMoved = 0;\n let newStateIndex = stateIndex;\n for (let i = 0; i < pages; i++) {\n const state = this.states[newStateIndex];\n slidesMoved += state.next.moveSlides;\n newStateIndex = state.next.stateIndex;\n }\n if (newStateIndex === stateIndex)\n return;\n this.stateIndex = newStateIndex;\n return [stateIndex, slidesMoved];\n }\n prev(pages = 1) {\n if (this.isTransitioning || this.isStatic)\n return;\n const { stateIndex } = this;\n let slidesMoved = 0;\n let newStateIndex = stateIndex;\n for (let i = 0; i < pages; i++) {\n const state = this.states[newStateIndex];\n slidesMoved += state.prev.moveSlides;\n newStateIndex = state.prev.stateIndex;\n }\n if (newStateIndex === stateIndex)\n return;\n this.stateIndex = newStateIndex;\n return [stateIndex, slidesMoved];\n }\n}\n// this will be called when slider is refreshed\nfunction constructAutomata(automata, totalSlides, config) {\n automata.stateIndex = 0;\n fixSliderConfig(automata);\n automata.isStatic = totalSlides <= config.slidesToShow;\n automata.states = calculateStates(automata);\n}\n\nfunction scrollPrev(slider, slideCount) {\n const rAf = requestAnimationFrame;\n if (!slider.config.loop) {\n noLoopScroll(slider);\n }\n else {\n // shift elements and apply negative transform to make it look like nothing changed\n // disable transition\n disableTransition(slider);\n // apply negative transform\n slider.offset = -1 * slideCount;\n updateTransform(slider);\n // and move the elements\n wrapPrev(slider, slideCount);\n const reset = () => {\n rAf(() => {\n enableTransition(slider);\n rAf(() => {\n slider.offset = 0;\n updateTransform(slider);\n onSlideEnd(slider);\n });\n });\n };\n // if the scroll was done as part of dragging\n // reset should be done after the dragging is completed\n if (slider.isDragging) {\n if (isTouch()) {\n slider.track.addEventListener('touchend', reset, { once: true });\n }\n else {\n slider.track.addEventListener('pointerup', reset, { once: true });\n }\n }\n else {\n rAf(reset);\n }\n }\n}\n// <--- move slider to left for showing content on right\nfunction scrollNext(slider, slideCount) {\n const rAf = requestAnimationFrame;\n if (!slider.config.loop) {\n noLoopScroll(slider);\n }\n else {\n // apply offset and let the slider scroll from <- (right to left)\n slider.offset = -1 * slideCount;\n updateTransform(slider);\n // once the transition is done\n setTimeout(() => {\n // remove the elements from start that are no longer visible and put them at the end\n wrapNext(slider, slideCount);\n disableTransition(slider);\n // apply transform where the slider should go\n slider.offset = 0;\n updateTransform(slider);\n rAf(() => {\n rAf(() => {\n enableTransition(slider);\n onSlideEnd(slider);\n });\n });\n }, slider.config.transitionDuration);\n }\n}\nfunction onSlideEnd(slider) {\n if (slider.onSlideCbs) {\n const state = slider.states[slider.stateIndex];\n const [firstSlideIndex, lastSlideIndex] = state.page;\n slider.onSlideCbs.forEach((cb) => cb(slider.stateIndex, firstSlideIndex, lastSlideIndex));\n }\n}\n\n// when loop is disabled, we must update the offset\nfunction noLoopScroll(slider) {\n slider.offset = -1 * slider.states[slider.stateIndex].page[0];\n updateTransform(slider);\n onSlideEnd(slider);\n}\nfunction wrapPrev(slider, count) {\n const len = slider.slides.length;\n for (let i = 0; i < count; i++) {\n // pick the last and move to first\n const slide = slider.slides[len - 1];\n // @ts-ignore\n slider.track.prepend(slide);\n }\n}\nfunction wrapNext(slider, count) {\n for (let i = 0; i < count; i++) {\n slider.track.append(slider.slides[0]);\n }\n}\nfunction updateTransform(slider) {\n const { track, offset, dragged } = slider;\n if (offset === 0) {\n track.style.transform = `translate3d(${dragged}px,0px,0px)`;\n }\n else {\n track.style.transform = `translate3d( calc( ${dragged}px + ${offset} * (var(--slide-width) + ${slider.config.slideGap})),0px,0px)`;\n }\n}\nfunction enableTransition(slider) {\n slider.track.style.transitionDuration = `${slider.config.transitionDuration}ms`;\n}\nfunction disableTransition(slider) {\n slider.track.style.transitionDuration = `0ms`;\n}\n\nconst slideThreshold = 10;\nconst isTouch = () => 'ontouchstart' in window;\nfunction handlePointerDown(downEvent) {\n const track = this;\n const slider = track.slider;\n if (slider.isTransitioning)\n return;\n slider.dragged = 0;\n track.isScrolled = false;\n track.startMouseClientX =\n 'touches' in downEvent ? downEvent.touches[0].clientX : downEvent.clientX;\n if (!('touches' in downEvent)) {\n // do not directly setPointerCapture on track - it blocks the click events\n // https://github.com/GoogleChromeLabs/pointer-tracker/issues/4\n const el = (downEvent.target || track);\n el.setPointerCapture(downEvent.pointerId);\n }\n disableTransition(slider);\n updateEventListener(track, 'addEventListener');\n}\nfunction handlePointerMove(moveEvent) {\n const track = this;\n const x = 'touches' in moveEvent ? moveEvent.touches[0].clientX : moveEvent.clientX;\n const dragged = (track.slider.dragged = x - track.startMouseClientX);\n const draggedAbs = Math.abs(dragged);\n // consider dragging only if the user has dragged more than 5px\n if (draggedAbs > 5) {\n // track.setAttribute('data-dragging', 'true')\n track.slider.isDragging = true;\n }\n // prevent vertical scrolling if horizontal scrolling is happening\n if (draggedAbs > 15) {\n moveEvent.preventDefault();\n }\n track.slider.dragged = dragged;\n updateTransform(track.slider);\n if (!track.isScrolled && track.slider.config.loop) {\n if (dragged > slideThreshold) {\n track.isScrolled = true;\n track.slider.prev();\n }\n }\n}\nfunction handlePointerUp() {\n const track = this;\n const dragged = track.slider.dragged;\n track.slider.isDragging = false;\n updateEventListener(track, 'removeEventListener');\n // reset drag\n track.slider.dragged = 0;\n updateTransform(track.slider);\n enableTransition(track.slider);\n if (!track.isScrolled) {\n if (dragged < -1 * slideThreshold) {\n track.slider.next();\n }\n else if (dragged > slideThreshold) {\n track.slider.prev();\n }\n }\n}\nconst preventDefault = (event) => event.preventDefault();\n/**\n * drag based navigation for slider\n */\nfunction dragSupport(slider) {\n // @ts-expect-error\n const track = slider.track;\n track.slider = slider;\n const event = isTouch() ? 'touchstart' : 'pointerdown';\n // @ts-expect-error\n track.addEventListener(event, handlePointerDown);\n // prevent click default when slider is being dragged or transitioning\n track.addEventListener('click', (event) => {\n if (slider.isTransitioning || slider.isDragging) {\n event.preventDefault();\n }\n });\n // prevent dragging of elements inside the slider\n track.addEventListener('dragstart', preventDefault);\n}\nfunction updateEventListener(track, method) {\n track[method]('contextmenu', handlePointerUp);\n if (isTouch()) {\n track[method]('touchend', handlePointerUp);\n // @ts-expect-error\n track[method]('touchmove', handlePointerMove);\n }\n else {\n track[method]('pointerup', handlePointerUp);\n // @ts-expect-error\n track[method]('pointermove', handlePointerMove);\n }\n}\n\nfunction handleAutoplay(slider) {\n const config = slider.config;\n if (!config.enableAutoplay)\n return;\n const dir = config.autoplayDirection === 'to left' ? 'next' : 'prev';\n slider.autoplayTimer = setInterval(() => {\n slider[dir]();\n }, config.autoplayInterval);\n if (config.stopAutoplayOnInteraction) {\n slider.el.addEventListener(isTouch() ? 'touchstart' : 'mousedown', () => {\n clearInterval(slider.autoplayTimer);\n }, { once: true });\n }\n}\n\nconst defaultConfig = {\n // layout\n slideGap: '20px',\n slidesToScroll: 1,\n slidesToShow: 1,\n // behavior\n loop: true,\n // autoplay\n enableAutoplay: false,\n stopAutoplayOnInteraction: true,\n autoplayInterval: 3000,\n autoplayDirection: 'to left',\n // pagination\n enablePagination: true,\n // transition\n transitionDuration: 300,\n transitionTimingFunction: 'ease',\n draggable: true,\n};\nfunction createConfig(blazeConfig) {\n // start with default config clone\n const config = { ...defaultConfig };\n for (const media in blazeConfig) {\n // if the media matches, override the config with media config\n if (window.matchMedia(media).matches) {\n const mediaConfig = blazeConfig[media];\n for (const key in mediaConfig) {\n // @ts-expect-error\n config[key] = mediaConfig[key];\n }\n }\n }\n return config;\n}\n\nfunction handleNavigation(slider) {\n const prev = slider.el.querySelector('.blaze-prev');\n const next = slider.el.querySelector('.blaze-next');\n if (prev) {\n prev.onclick = () => {\n slider.prev();\n };\n }\n if (next) {\n next.onclick = () => {\n slider.next();\n };\n }\n}\n\nfunction handlePagination(slider) {\n if (!slider.config.enablePagination || slider.isStatic)\n return;\n const paginationContainer = slider.el.querySelector('.blaze-pagination');\n if (!paginationContainer)\n return;\n slider.paginationButtons = [];\n const total = slider.states.length;\n for (let index = 0; index < total; index++) {\n const button = document.createElement('button');\n slider.paginationButtons.push(button);\n button.textContent = 1 + index + '';\n button.ariaLabel = `${index + 1} of ${total}`;\n paginationContainer.append(button);\n // @ts-expect-error\n button.slider = slider;\n // @ts-expect-error\n button.index = index;\n // @ts-expect-error\n button.onclick = handlePaginationButtonClick;\n }\n // initially the first button is active\n slider.paginationButtons[0].classList.add('active');\n}\nfunction handlePaginationButtonClick() {\n const index = this.index;\n const slider = this.slider;\n const stateIndex = slider.stateIndex;\n const loop = slider.config.loop;\n const diff = Math.abs(index - stateIndex);\n const inverseDiff = slider.states.length - diff;\n const isDiffLargerThanHalf = diff > slider.states.length / 2;\n const scrollOpposite = isDiffLargerThanHalf && loop;\n // if target state is ahead of current state\n if (index > stateIndex) {\n // but the diff is too large\n if (scrollOpposite) {\n // scroll in opposite direction to reduce scrolling\n slider.prev(inverseDiff);\n }\n else {\n // scroll normally\n slider.next(diff);\n }\n }\n // if target state is before current state\n else {\n // but the diff is too large\n if (scrollOpposite) {\n // scroll in opposite direction\n slider.next(inverseDiff);\n }\n else {\n // scroll normally\n slider.prev(diff);\n }\n }\n}\n\nfunction isTransitioning(slider, time = slider.config.transitionDuration) {\n slider.isTransitioning = true;\n setTimeout(() => {\n slider.isTransitioning = false;\n }, time);\n}\nclass BlazeSlider extends Automata {\n constructor(blazeSliderEl, blazeConfig) {\n const track = blazeSliderEl.querySelector('.blaze-track');\n const slides = track.children;\n const config = blazeConfig\n ? createConfig(blazeConfig)\n : { ...defaultConfig };\n super(slides.length, config);\n this.config = config;\n this.el = blazeSliderEl;\n this.track = track;\n this.slides = slides;\n this.offset = 0;\n this.dragged = 0;\n this.isDragging = false;\n // @ts-ignore - for debugging\n this.el.blazeSlider = this;\n this.passedConfig = blazeConfig;\n const slider = this;\n track.slider = slider;\n construct(config, slider);\n // throttled to refresh every 200ms when resizing\n let ignoreResize = false;\n let width = 0;\n window.addEventListener('resize', () => {\n if (width === 0) {\n width = window.innerWidth;\n return;\n }\n const newWidth = window.innerWidth;\n // ignore height change - only refresh if the width is changed\n if (width === newWidth)\n return;\n width = newWidth;\n if (!ignoreResize) {\n ignoreResize = true;\n setTimeout(() => {\n slider.refresh();\n ignoreResize = false;\n }, 200);\n }\n });\n }\n next(count) {\n if (this.isTransitioning)\n return;\n const transition = super.next(count);\n if (!transition)\n return;\n const [prevStateIndex, slideCount] = transition;\n handleStateChange(this, prevStateIndex);\n isTransitioning(this);\n scrollNext(this, slideCount);\n }\n prev(count) {\n if (this.isTransitioning)\n return;\n const transition = super.prev(count);\n if (!transition)\n return;\n const [prevStateIndex, slideCount] = transition;\n handleStateChange(this, prevStateIndex);\n isTransitioning(this);\n scrollPrev(this, slideCount);\n }\n stopAutoplay() {\n clearInterval(this.autoplayTimer);\n }\n destroy() {\n // remove side effects that won't be overridden by construct()\n // remove old drag event handler\n this.track.removeEventListener(isTouch() ? 'touchstart' : 'pointerdown', \n // @ts-expect-error\n handlePointerDown);\n // stop autoplay\n this.stopAutoplay();\n // remove pagination buttons\n this.paginationButtons?.forEach((button) => button.remove());\n // remove classes\n this.el.classList.remove('static');\n this.el.classList.remove(START);\n }\n refresh() {\n const newConfig = this.passedConfig\n ? createConfig(this.passedConfig)\n : { ...defaultConfig };\n this.destroy();\n construct(newConfig, this);\n }\n /**\n * Subscribe for slide change event\n * Returns a function to unsubscribe from slide change event\n */\n onSlide(cb) {\n if (!this.onSlideCbs)\n this.onSlideCbs = new Set();\n this.onSlideCbs.add(cb);\n return () => this.onSlideCbs.delete(cb);\n }\n}\nfunction handleStateChange(slider, prevStateIndex) {\n const classList = slider.el.classList;\n const stateIndex = slider.stateIndex;\n const buttons = slider.paginationButtons;\n if (!slider.config.loop) {\n if (stateIndex === 0) {\n classList.add(START);\n }\n else {\n classList.remove(START);\n }\n if (stateIndex === slider.states.length - 1) {\n classList.add(END);\n }\n else {\n classList.remove(END);\n }\n }\n if (buttons && slider.config.enablePagination) {\n buttons[prevStateIndex].classList.remove('active');\n buttons[stateIndex].classList.add('active');\n }\n}\nfunction construct(config, slider) {\n const track = slider.track;\n slider.slides = track.children;\n slider.offset = 0;\n slider.config = config;\n constructAutomata(slider, slider.totalSlides, config);\n // if a side effect is in condition - make sure to add it for both conditions - so it gets cleaned up\n // when refresh is called\n if (!config.loop) {\n slider.el.classList.add(START);\n }\n if (config.enableAutoplay && !config.loop) {\n if (DEV) {\n console.warn('enableAutoplay:true is not consistent with loop:false, auto-fixing with enableAutoplay:false');\n }\n config.enableAutoplay = false;\n }\n track.style.transitionProperty = 'transform';\n track.style.transitionTimingFunction = slider.config.transitionTimingFunction;\n track.style.transitionDuration = `${slider.config.transitionDuration}ms`;\n const { slidesToShow, slideGap } = slider.config;\n slider.el.style.setProperty('--slides-to-show', slidesToShow + '');\n slider.el.style.setProperty('--slide-gap', slideGap);\n if (!slider.isStatic) {\n if (config.draggable) {\n dragSupport(slider);\n }\n }\n else {\n slider.el.classList.add('static');\n }\n handlePagination(slider);\n handleAutoplay(slider);\n handleNavigation(slider);\n updateTransform(slider);\n}\n\nexport { BlazeSlider as default };\n"],"names":["START","Automata","constructor","totalSlides","config","this","isTransitioning","constructAutomata","next","pages","isStatic","stateIndex","slidesMoved","newStateIndex","i","state","states","moveSlides","prev","automata","slider","slidesToScroll","slidesToShow","properSlidesToScroll","fixSliderConfig","loop","lastIndex","startIndex","_endIndex","lastPageIndex","length","push","endIndex","calculatePages","pageIndex","nextPageIndex","prevPageIndex","currentPageStartIndex","nextPageStartIndex","prevPageStartIndex","nextDiff","prevDiff","page","calculateStates","onSlideEnd","onSlideCbs","firstSlideIndex","lastSlideIndex","forEach","cb","noLoopScroll","offset","updateTransform","track","dragged","style","transform","slideGap","enableTransition","transitionDuration","disableTransition","isTouch","window","handlePointerDown","downEvent","isScrolled","startMouseClientX","touches","clientX","target","setPointerCapture","pointerId","updateEventListener","handlePointerMove","moveEvent","x","draggedAbs","Math","abs","isDragging","preventDefault","handlePointerUp","event","method","defaultConfig","enableAutoplay","stopAutoplayOnInteraction","autoplayInterval","autoplayDirection","enablePagination","transitionTimingFunction","draggable","createConfig","blazeConfig","media","matchMedia","matches","mediaConfig","key","handlePaginationButtonClick","index","diff","inverseDiff","scrollOpposite","time","setTimeout","BlazeSlider","blazeSliderEl","querySelector","slides","children","super","el","blazeSlider","passedConfig","construct","ignoreResize","width","addEventListener","innerWidth","newWidth","refresh","count","transition","prevStateIndex","slideCount","handleStateChange","rAf","requestAnimationFrame","append","wrapNext","scrollNext","len","slide","prepend","wrapPrev","reset","once","scrollPrev","stopAutoplay","clearInterval","autoplayTimer","destroy","removeEventListener","paginationButtons","button","remove","classList","newConfig","onSlide","Set","add","delete","buttons","transitionProperty","setProperty","dragSupport","paginationContainer","total","document","createElement","textContent","ariaLabel","onclick","handlePagination","dir","setInterval","handleAutoplay","handleNavigation"],"sourceRoot":""}