{"version":3,"sources":["webpack:///./node_modules/flickity/js/animate.js","webpack:///./node_modules/flickity/js/page-dots.js","webpack:///./node_modules/ev-emitter/ev-emitter.js","webpack:///./node_modules/flickity/js/index.js","webpack:///./node_modules/flickity/js/imagesloaded.js","webpack:///./node_modules/get-size/get-size.js","webpack:///./src/components/Flickity/index.vue","webpack:///./src/components/Flickity/index.vue?b4fb","webpack:///./node_modules/flickity/js/drag.js","webpack:///./node_modules/fizzy-ui-utils/utils.js","webpack:///./node_modules/flickity/js/core.js","webpack:///./node_modules/flickity/js/slide.js","webpack:///./node_modules/flickity/js/lazyload.js","webpack:///./node_modules/flickity/js/player.js","webpack:///./node_modules/flickity/js/add-remove-cell.js","webpack:///./node_modules/imagesloaded/imagesloaded.js","webpack:///./node_modules/flickity/js/cell.js","webpack:///./node_modules/flickity/js/prev-next-button.js","webpack:///./node_modules/unidragger/unidragger.js"],"names":["window","factory","module","exports","Flickity","animatePrototype","fizzyUIUtils","this","utils","proto","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","x","integratePhysics","positionSlider","settle","requestAnimationFrame","isWrapping","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","options","rightToLeft","translateX","getPositionValue","slider","style","transform","firstSlide","slides","positionX","target","progress","slidesWidth","dispatchEvent","cells","length","selectedSlide","velocity","position","percentPosition","Math","round","size","innerWidth","isResting","isPointerDown","isFreeScrolling","selectedIndex","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","forEach","cell","cellShift","_wrapShiftCell","outerWidth","_renderCellPosition","getFrictionFactor","force","isDraggable","dragVelocity","dragX","dragForce","applyForce","dragDown","distance","selectedAttraction","PageDots","holder","document","createElement","className","dots","prototype","setDots","slidesLength","delta","addDots","removeDots","count","newDots","Array","fill","map","item","i","dot","setAttribute","num","textContent","append","concat","splice","remove","updateSelected","index","selectedDot","classList","removeAttribute","add","Object","assign","defaults","pageDots","create","handlePageDotsClick","onPageDotsClick","bind","on","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","focusableElems","push","addEventListener","element","event","indexOf","uiChange","select","removeFrom","removeEventListener","global","EvEmitter","eventName","listener","events","_events","listeners","includes","once","onceEvents","_onceEvents","onceListeners","off","emitEvent","args","slice","isOnce","apply","allOff","imagesLoaded","onImagesLoadedProgress","instance","image","getParentCell","img","cellSizeChange","freeScroll","positionSliderAtSelected","getSize","getStyleSize","value","parseFloat","isValid","isNaN","measurements","getZeroSize","width","height","innerHeight","outerHeight","measurement","elem","querySelector","isElement","nodeType","getComputedStyle","display","offsetWidth","offsetHeight","isBorderBox","boxSizing","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderWidth","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","styleWidth","styleHeight","class","_createElementBlock","_hoisted_1","_renderSlot","_ctx","$slots","props","mounted","init","setTimeout","resize","beforeUnmount","$flickity","destroy","methods","$el","$emit","flickity","isWrapped","isInstant","next","previous","selectCell","reposition","prepend","elements","insert","playPlayer","stopPlayer","pausePlayer","unpausePlayer","rerender","reloadCells","getCellElements","data","selectedElement","selectedElements","disableDrag","draggable","updateDraggable","enableDrag","__exports__","render","Unidragger","dragThreshold","getScrollPosition","pageXOffset","y","pageYOffset","touchActionValue","drag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","handlePointerDown","handlePointerUp","handlePointerDone","handleDragStart","handleDragMove","handleDragEnd","handleStaticClick","handles","viewport","bindHandles","unbindHandles","toggle","bindActivePointerEvents","isTouchStart","type","isTouchPointer","pointerType","isFocusNode","matches","preventDefault","focus","activeElement","blur","pointerDownScroll","hasDragStarted","moveVector","abs","isTouchScrolling","dragStartPosition","startAnimation","pointer","previousDragX","direction","originBound","max","endBound","min","getLastSlide","dragMoveTime","Date","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","isDragSelect","getSlideDistance","positiveResting","_getClosestResting","negativeResting","increment","minDistance","Infinity","condition","contain","dist","minDist","len","isWrapAround","wrapAround","slideIndex","slide","wrap","floor","undefined","onscroll","scroll","scrollMoveX","scrollMoveY","pointerDone","a","b","div","obj","isArray","isArrayLike","ary","selector","parentNode","body","method","elems","makeArray","filter","HTMLElement","reduce","ffElems","childElems","querySelectorAll","_class","methodName","threshold","timeoutName","clearTimeout","arguments","onDocReady","readyState","str","replace","match","$1","$2","toLowerCase","console","htmlInit","WidgetClass","namespace","docReady","dashedNamespace","toDashed","dataAttr","dataAttrElems","jQuery","attr","getAttribute","JSON","parse","error","_Flickity","Cell","Slide","GUID","instances","queryElement","getQueryElement","flickityGUID","option","$element","constructor","_create","accessibility","cellAlign","freeScrollFriction","friction","namespaceJQueryEvents","setGallerySize","watchCSS","id","guid","beginMargin","endMargin","_createSlider","call","activate","opts","isActive","cellElems","_filterFindCellElements","children","tabIndex","selectInitialIndex","isInitActivated","filterFindElements","cellSelector","_makeCells","positionCells","_updateWrapShiftCells","cellElem","getLastCell","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","updateSlides","_containSlides","sideOffset","renderX","positionValue","canCellFit","_getCanCellFit","addCell","slideWidth","firstMargin","updateTarget","updateSelectedSlide","groupCells","number","parseInt","percent","percentMatch","groupWidth","_init","setCellAlign","cellAlignShorthands","left","center","right","shorthand","adaptiveHeight","getIsWrapping","_unshiftCells","beforeGapX","lastIndex","_getGapCells","afterGapX","gapWidth","gapX","cellIndex","isContaining","contentWidth","isContentSmaller","beginBound","emitArgs","$event","jQEvent","Event","trigger","unidraggerEvents","_emitEvent","clickedCell","isUnidraggerEvent","isWrap","_wrapSelect","prevIndex","wrapIndex","backWrapDelta","forewardWrapDelta","unselectSelectedSlide","selectedCells","selectedCell","unselect","initialIndex","queryCell","getCellSlideIndex","cellSlide","find","getCell","getCells","Boolean","closest","getAdjacentCellElements","adjCount","isSelectorString","onresize","debounceMethod","isDragging","afterContent","content","deactivate","onkeydown","handler","keyboardHandlers","key","isFocused","some","ArrowLeft","leftMethod","ArrowRight","rightMethod","preventScroll","removeData","jQueryBridget","setJQuery","jq","lastCell","lastMargin","lazyAttr","lazySrcAttr","lazySrcsetAttr","imgSelector","lazyLoad","handleLazyLoadComplete","onLazyLoadComplete","getCellLazyImages","cellAttr","cellSrcAttr","cellSrcsetAttr","LazyLoader","onComplete","load","flat","handleEvent","src","srcset","onload","complete","onerror","mediaElem","Player","autoPlay","onTick","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","isPageHidden","hidden","tick","time","clear","timeout","stop","pause","unpause","pauseAutoPlayOnHover","player","activatePlayer","deactivatePlayer","onmouseenter","onmouseleave","getCellsFragment","fragment","createDocumentFragment","appendChild","isAppend","insertCellElement","insertBefore","endCells","cellChange","minCellIndex","changedCellIndex","prevSelectedElem","$","ImagesLoaded","onAlways","queryElem","getImages","jqDeferred","Deferred","check","images","addElementImages","elementNodeTypes","nodeName","addImage","background","addElementBackgroundImages","childImgs","child","reURL","LoadingImage","Background","url","Image","exec","backgroundImage","addBackground","loadingImage","progressedCount","hasAnyBroken","onProgress","message","isLoaded","notify","debug","log","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","crossOrigin","currentSrc","unbindEvents","makeJQueryPlugin","fn","promise","cellClassName","svgURI","PrevNextButton","arrowShape","isPrevious","isLeft","getArrowMovements","shape","x0","x1","x2","x3","y1","y2","label","disable","svg","createSVG","createElementNS","title","path","pathMovements","enable","prevNextButtons","prevDirection","nextDirection","prevButton","nextButton","handlePrevButtonClick","handleNextButtonClick","activatePrevNextButtons","updatePrevNextButtons","updatePrevNextButton","button","disabledIndex","isEnabled","isDisabledFocused","deactivatePrevNextButtons","startEvent","activeEvents","PointerEvent","_bindHandles","bindMethod","touchAction","handle","unbindActivePointerEvents","withPointer","pointerId","pointerIdentifier","withTouch","touch","changedTouch","changedTouches","identifier","onmousedown","pointerDown","ontouchstart","onpointerdown","cursorNodes","clickTypes","isCursorNode","isClickType","isOkayElement","isOkay","pointerDownPointer","pageX","pageY","onmousemove","pointerMove","onpointermove","ontouchmove","isDragStarting","dragStart","dragMove","isPreventingClicks","onmouseup","pointerUp","onpointerup","ontouchend","dragEnd","staticClick","onpointercancel","ontouchcancel","pointerCancel","onclick","isMouseup","isIgnoringMouseUp"],"mappings":"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","file":"js/chunk-46dfad68.d4f38024.js","sourcesContent":["// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('fizzy-ui-utils') );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory( window.fizzyUIUtils );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( utils ) {\n\n// -------------------------- animate -------------------------- //\n\nlet proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) return;\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n let previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) requestAnimationFrame( () => this.animate() );\n};\n\nproto.positionSlider = function() {\n let x = this.x;\n // wrap position around\n if ( this.isWrapping ) {\n x = utils.modulo( x, this.slideableWidth ) - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n if ( this.options.rightToLeft ) x = -x;\n let translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n `translate3d(${translateX},0,0)` : `translateX(${translateX})`;\n};\n\nproto.dispatchScrollEvent = function() {\n let firstSlide = this.slides[0];\n if ( !firstSlide ) return;\n\n let positionX = -this.x - firstSlide.target;\n let progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) return;\n\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n let isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) === Math.round( previousX * 100 );\n if ( isResting ) this.restingFrames++;\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n let beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n let afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n cells.forEach( ( cell ) => {\n let cellShift = gap > 0 ? shift : 0;\n this._wrapShiftCell( cell, cellShift );\n gap -= cell.size.outerWidth;\n } );\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) return;\n\n cells.forEach( ( cell ) => this._wrapShiftCell( cell, 0 ) );\n};\n\n// @param {Integer} shift - 0, 1, or -1\nproto._wrapShiftCell = function( cell, shift ) {\n this._renderCellPosition( cell, cell.x + this.slideableWidth * shift );\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) return;\n\n // change the position to drag position by applying force\n let dragVelocity = this.dragX - this.x;\n let dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n let dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) return;\n\n let distance = this.selectedSlide.target * -1 - this.x;\n let force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\nfunction PageDots() {\n // create holder element\n this.holder = document.createElement('div');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n}\n\nPageDots.prototype.setDots = function( slidesLength ) {\n // get difference between number of slides and number of dots\n let delta = slidesLength - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n let newDots = new Array( count ).fill()\n .map( ( item, i ) => {\n let dot = document.createElement('button');\n dot.setAttribute( 'type', 'button' );\n let num = i + 1 + this.dots.length;\n dot.className = 'flickity-page-dot';\n dot.textContent = `View slide ${num}`;\n return dot;\n } );\n\n this.holder.append( ...newDots );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n let removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( ( dot ) => dot.remove() );\n};\n\nPageDots.prototype.updateSelected = function( index ) {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.classList.remove('is-selected');\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) return;\n\n this.selectedDot = this.dots[ index ];\n this.selectedDot.classList.add('is-selected');\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nObject.assign( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.create.pageDots = function() {\n if ( !this.options.pageDots ) return;\n\n this.pageDots = new PageDots();\n this.handlePageDotsClick = this.onPageDotsClick.bind( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nlet proto = Flickity.prototype;\n\nproto.activatePageDots = function() {\n this.pageDots.setDots( this.slides.length );\n this.focusableElems.push( ...this.pageDots.dots );\n this.pageDots.holder.addEventListener( 'click', this.handlePageDotsClick );\n this.element.append( this.pageDots.holder );\n};\n\nproto.onPageDotsClick = function( event ) {\n let index = this.pageDots.dots.indexOf( event.target );\n if ( index === -1 ) return; // only dot clicks\n\n this.uiChange();\n this.select( index );\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected( this.selectedIndex );\n};\n\nproto.updatePageDots = function() {\n this.pageDots.dots.forEach( ( dot ) => {\n utils.removeFrom( this.focusableElems, dot );\n } );\n this.pageDots.setDots( this.slides.length );\n this.focusableElems.push( ...this.pageDots.dots );\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.holder.remove();\n this.pageDots.holder.removeEventListener( 'click', this.handlePageDotsClick );\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","/**\n * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\nfunction EvEmitter() {}\n\nlet proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // set events hash\n let events = this._events = this._events || {};\n // set listeners array\n let listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( !listeners.includes( listener ) ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n let onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n let index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice( 0 );\n args = args || [];\n // once stuff\n let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( let listener of listeners ) {\n let isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n return this;\n};\n\nreturn EvEmitter;\n\n} ) );\n","/*!\n * Flickity v3.0.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2022 Metafizzy\n */\n\nif ( typeof module == 'object' && module.exports ) {\n const Flickity = require('./core');\n require('./drag');\n require('./prev-next-button');\n require('./page-dots');\n require('./player');\n require('./add-remove-cell');\n require('./lazyload');\n require('./imagesloaded');\n\n module.exports = Flickity;\n}\n","// imagesloaded\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('imagesloaded'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.imagesLoaded,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( Flickity, imagesLoaded ) {\n\nFlickity.create.imagesLoaded = function() {\n this.on( 'activate', this.imagesLoaded );\n};\n\nFlickity.prototype.imagesLoaded = function() {\n if ( !this.options.imagesLoaded ) return;\n\n let onImagesLoadedProgress = ( instance, image ) => {\n let cell = this.getParentCell( image.img );\n this.cellSizeChange( cell && cell.element );\n if ( !this.options.freeScroll ) this.positionSliderAtSelected();\n };\n imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\n};\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Infinite Scroll v2.0.4\n * measure size of elements\n * MIT license\n */\n\n( function( window, factory ) {\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n} )( window, function factory() {\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n let num = parseFloat( value );\n // not a percent like '100%', and a number\n let isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\n// -------------------------- measurements -------------------------- //\n\nlet measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth',\n];\n\nlet measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n let size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0,\n };\n measurements.forEach( ( measurement ) => {\n size[ measurement ] = 0;\n } );\n return size;\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) elem = document.querySelector( elem );\n\n // do not proceed on non-objects\n let isElement = elem && typeof elem == 'object' && elem.nodeType;\n if ( !isElement ) return;\n\n let style = getComputedStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) return getZeroSize();\n\n let size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n let isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n measurements.forEach( ( measurement ) => {\n let value = style[ measurement ];\n let num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n } );\n\n let paddingWidth = size.paddingLeft + size.paddingRight;\n let paddingHeight = size.paddingTop + size.paddingBottom;\n let marginWidth = size.marginLeft + size.marginRight;\n let marginHeight = size.marginTop + size.marginBottom;\n let borderWidth = size.borderLeftWidth + size.borderRightWidth;\n let borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n // overwrite width and height if we can get it from style\n let styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBox ? 0 : paddingWidth + borderWidth );\n }\n\n let styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBox ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n} );\n","\n\n\n","import { render } from \"./index.vue?vue&type=template&id=006095f7\"\nimport script from \"./index.vue?vue&type=script&lang=js\"\nexport * from \"./index.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/codebuild/output/src1243849527/src/lead-hockey/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./core'),\n require('unidragger'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( window, Flickity, Unidragger, utils ) {\n\n// ----- defaults ----- //\n\nObject.assign( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// -------------------------- drag prototype -------------------------- //\n\nlet proto = Flickity.prototype;\nObject.assign( proto, Unidragger.prototype ); // inherit Unidragger\nproto.touchActionValue = '';\n\n// -------------------------- -------------------------- //\n\nFlickity.create.drag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n this.on( 'pointerDown', this.handlePointerDown );\n this.on( 'pointerUp', this.handlePointerUp );\n this.on( 'pointerDown', this.handlePointerDone );\n this.on( 'dragStart', this.handleDragStart );\n this.on( 'dragMove', this.handleDragMove );\n this.on( 'dragEnd', this.handleDragEnd );\n this.on( 'staticClick', this.handleStaticClick );\n // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable === '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n this.element.classList.toggle( 'is-draggable', this.isDraggable );\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.handlePointerDown = function( event ) {\n if ( !this.isDraggable ) {\n // proceed for staticClick\n this.bindActivePointerEvents( event );\n return;\n }\n\n let isTouchStart = event.type === 'touchstart';\n let isTouchPointer = event.pointerType === 'touch';\n let isFocusNode = event.target.matches('input, textarea, select');\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) event.preventDefault();\n if ( !isFocusNode ) this.focus();\n // blur\n if ( document.activeElement !== this.element ) document.activeElement.blur();\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n this.bindActivePointerEvents( event );\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.handlePointerUp = function() {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n};\n\nproto.handlePointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.handleDragStart = function() {\n if ( !this.isDraggable ) return;\n\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n};\n\nproto.handleDragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) return;\n\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n let direction = this.options.rightToLeft ? -1 : 1;\n // wrap around move. #589\n if ( this.isWrapping ) moveVector.x %= this.slideableWidth;\n let dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.isWrapping ) {\n // slow drag\n let originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n let endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n this.dragMoveTime = new Date();\n};\n\nproto.handleDragEnd = function() {\n if ( !this.isDraggable ) return;\n\n let { freeScroll } = this.options;\n if ( freeScroll ) this.isFreeScrolling = true;\n // set selectedIndex based on where flick will end up\n let index = this.dragEndRestingSelect();\n\n if ( freeScroll && !this.isWrapping ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n let restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !freeScroll && index === this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.isWrapping;\n this.select( index );\n delete this.isDragSelect;\n};\n\nproto.dragEndRestingSelect = function() {\n let restingX = this.getRestingPosition();\n // how far away from selected slide\n let distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n let positiveResting = this._getClosestResting( restingX, distance, 1 );\n let negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n return positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n let index = this.selectedIndex;\n let minDistance = Infinity;\n let condition = this.options.contain && !this.isWrapping ?\n // if containing, keep going if distance is equal to minDistance\n ( dist, minDist ) => dist <= minDist :\n ( dist, minDist ) => dist < minDist;\n\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) break;\n\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n let len = this.slides.length;\n // wrap around if at least 2 slides\n let isWrapAround = this.options.wrapAround && len > 1;\n let slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n let slide = this.slides[ slideIndex ];\n if ( !slide ) return null;\n\n // add distance for wrap-around slides\n let wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n let distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n let delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n let scroll = getScrollPosition();\n let scrollMoveX = this.pointerDownScroll.x - scroll.x;\n let scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this.pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","/**\n * Fizzy UI utils v3.0.0\n * MIT license\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( global );\n } else {\n // browser global\n global.fizzyUIUtils = factory( global );\n }\n\n}( this, function factory( global ) {\n\nlet utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n return Object.assign( a, b );\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) return [];\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n let index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( elem.matches( selector ) ) return elem;\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n\n return elems\n // check that elem is an actual element\n .filter( ( elem ) => elem instanceof HTMLElement )\n .reduce( ( ffElems, elem ) => {\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return ffElems;\n }\n // filter & find items if we have a selector\n // filter\n if ( elem.matches( selector ) ) {\n ffElems.push( elem );\n }\n // find children\n let childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n ffElems = ffElems.concat( ...childElems );\n return ffElems;\n }, [] );\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n let method = _class.prototype[ methodName ];\n let timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n clearTimeout( this[ timeoutName ] );\n\n let args = arguments;\n this[ timeoutName ] = setTimeout( () => {\n method.apply( this, args );\n delete this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( onDocReady ) {\n let readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( onDocReady );\n } else {\n document.addEventListener( 'DOMContentLoaded', onDocReady );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://bit.ly/3oYLusc\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n } ).toLowerCase();\n};\n\nlet console = global.console;\n\n// allow user to initialize classes via [data-namespace] or .js-namespace class\n// htmlInit( Widget, 'widgetName' )\n// options are parsed from data-namespace-options\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n let dashedNamespace = utils.toDashed( namespace );\n let dataAttr = 'data-' + dashedNamespace;\n let dataAttrElems = document.querySelectorAll( `[${dataAttr}]` );\n let jQuery = global.jQuery;\n\n [ ...dataAttrElems ].forEach( ( elem ) => {\n let attr = elem.getAttribute( dataAttr );\n let options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( `Error parsing ${dataAttr} on ${elem.className}: ${error}` );\n }\n return;\n }\n // initialize\n let instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n } );\n\n } );\n};\n\n// ----- ----- //\n\nreturn utils;\n\n} ) );\n","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate'),\n );\n } else {\n // browser global\n let _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n/* eslint-enable max-params */\n\n// vars\nconst { getComputedStyle, console } = window;\nlet { jQuery } = window;\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nlet GUID = 0;\n// internal store of all Flickity intances\nlet instances = {};\n\nfunction Flickity( element, options ) {\n let queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) console.error(`Bad element for Flickity: ${queryElement || element}`);\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n let instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = { ...this.constructor.defaults };\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.create = {};\n\nlet proto = Flickity.prototype;\n// inherit EventEmitter\nObject.assign( proto, EvEmitter.prototype );\n\nproto._create = function() {\n let { resize, watchCSS, rightToLeft } = this.options;\n // add id for Flickity.data\n let id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.beginMargin = rightToLeft ? 'marginRight' : 'marginLeft';\n this.endMargin = rightToLeft ? 'marginLeft' : 'marginRight';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n // used for keyboard navigation\n this.focusableElems = [ this.element ];\n\n if ( resize || watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( let eventName in this.options.on ) {\n let listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n for ( let method in Flickity.create ) {\n Flickity.create[ method ].call( this );\n }\n\n if ( watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n Object.assign( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) return;\n\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n let cellElems = this._filterFindCellElements( this.element.children );\n this.slider.append( ...cellElems );\n this.viewport.append( this.slider );\n this.element.append( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n let slider = document.createElement('div');\n slider.className = 'flickity-slider';\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._updateWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n let cellElems = this._filterFindCellElements( elems );\n\n // create new Cells for collection\n return cellElems.map( ( cellElem ) => new Cell( cellElem ) );\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n let cellX = 0;\n // get cellX\n if ( index > 0 ) {\n let startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n\n this.cells.slice( index ).forEach( ( cell ) => {\n cell.x = cellX;\n this._renderCellPosition( cell, cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n } );\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = this.cells.length ?\n this.getLastSlide().target - this.slides[0].target : 0;\n};\n\nproto._renderCellPosition = function( cell, x ) {\n // render position of cell with in slider\n let sideOffset = this.options.rightToLeft ? -1 : 1;\n let renderX = x * sideOffset;\n if ( this.options.percentPosition ) renderX *= this.size.innerWidth / cell.size.width;\n let positionValue = this.getPositionValue( renderX );\n cell.element.style.transform = `translateX( ${positionValue} )`;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( ( cell ) => cell.getSize() );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) return;\n\n let { beginMargin, endMargin } = this;\n let slide = new Slide( beginMargin, endMargin, this.cellAlign );\n this.slides.push( slide );\n\n let canCellFit = this._getCanCellFit();\n\n this.cells.forEach( ( cell, i ) => {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n let slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ endMargin ] );\n\n if ( canCellFit( i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( beginMargin, endMargin, this.cellAlign );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n } );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n let { groupCells } = this.options;\n if ( !groupCells ) return () => false;\n\n if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n let number = parseInt( groupCells, 10 );\n return ( i ) => ( i % number ) !== 0;\n }\n // default, group by width of slide\n let percent = 1;\n // parse '75%\n let percentMatch = typeof groupCells == 'string' && groupCells.match( /^(\\d+)%$/ );\n if ( percentMatch ) percent = parseInt( percentMatch[1], 10 ) / 100;\n let groupWidth = ( this.size.innerWidth + 1 ) * percent;\n return ( i, slideWidth ) => slideWidth <= groupWidth;\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nlet cellAlignShorthands = {\n left: 0,\n center: 0.5,\n right: 1,\n};\n\nproto.setCellAlign = function() {\n let { cellAlign, rightToLeft } = this.options;\n let shorthand = cellAlignShorthands[ cellAlign ];\n this.cellAlign = shorthand !== undefined ? shorthand : cellAlign;\n if ( rightToLeft ) this.cellAlign = 1 - this.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( !this.options.setGallerySize ) return;\n\n let height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = `${height}px`;\n};\n\nproto._updateWrapShiftCells = function() {\n // update isWrapping\n this.isWrapping = this.getIsWrapping();\n // only for wrap-around\n if ( !this.isWrapping ) return;\n\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n let beforeGapX = this.cursorPosition;\n let lastIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( beforeGapX, lastIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n let afterGapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( afterGapX, 0, 1 );\n};\n\nproto.getIsWrapping = function() {\n let { wrapAround } = this.options;\n if ( !wrapAround || this.slides.length < 2 ) return false;\n\n if ( wrapAround !== 'fill' ) return true;\n // check that slides can fit\n\n let gapWidth = this.slideableWidth - this.size.innerWidth;\n if ( gapWidth > this.size.innerWidth ) return true; // gap * 2x big, all good\n // check that content width - shifting cell is bigger than viewport width\n for ( let cell of this.cells ) {\n if ( cell.size.outerWidth > gapWidth ) return false;\n }\n return true;\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n let cells = [];\n while ( gapX > 0 ) {\n let cell = this.cells[ cellIndex ];\n if ( !cell ) break;\n\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain & wrap ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n let isContaining = this.options.contain && !this.isWrapping &&\n this.cells.length;\n if ( !isContaining ) return;\n\n let contentWidth = this.slideableWidth - this.getLastCell().size[ this.endMargin ];\n // content is less than gallery size\n let isContentSmaller = contentWidth < this.size.innerWidth;\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n this.slides.forEach( ( slide ) => {\n slide.target = contentWidth * this.cellAlign;\n } );\n } else {\n // contain to bounds\n let beginBound = this.cursorPosition + this.cells[0].size[ this.beginMargin ];\n let endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n this.slides.forEach( ( slide ) => {\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n } );\n }\n};\n\n// ----- events ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n let emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n let $event = type;\n if ( event ) {\n // create jQuery event\n let jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\nconst unidraggerEvents = [\n 'dragStart',\n 'dragMove',\n 'dragEnd',\n 'pointerDown',\n 'pointerMove',\n 'pointerEnd',\n 'staticClick',\n];\n\nlet _emitEvent = proto.emitEvent;\nproto.emitEvent = function( eventName, args ) {\n if ( eventName === 'staticClick' ) {\n // add cellElem and cellIndex args to staticClick\n let clickedCell = this.getParentCell( args[0].target );\n let cellElem = clickedCell && clickedCell.element;\n let cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n args = args.concat( cellElem, cellIndex );\n }\n // do regular thing\n _emitEvent.call( this, eventName, args );\n // duck-punch in jQuery events for Unidragger events\n let isUnidraggerEvent = unidraggerEvents.includes( eventName );\n if ( !isUnidraggerEvent || !jQuery || !this.$element ) return;\n\n eventName += this.options.namespaceJQueryEvents ? '.flickity' : '';\n let event = args.shift( 0 );\n let jQEvent = new jQuery.Event( event );\n jQEvent.type = eventName;\n this.$element.trigger( jQEvent, args );\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) return;\n\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.isWrapping || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) return;\n\n let prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index !== prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n if ( !this.isWrapping ) return;\n\n const { selectedIndex, slideableWidth, slides: { length } } = this;\n // shift index for wrap, do not wrap dragSelect\n if ( !this.isDragSelect ) {\n let wrapIndex = utils.modulo( index, length );\n // go to shortest\n let delta = Math.abs( wrapIndex - selectedIndex );\n let backWrapDelta = Math.abs( ( wrapIndex + length ) - selectedIndex );\n let forewardWrapDelta = Math.abs( ( wrapIndex - length ) - selectedIndex );\n if ( backWrapDelta < delta ) {\n index += length;\n } else if ( forewardWrapDelta < delta ) {\n index -= length;\n }\n }\n\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= slideableWidth;\n } else if ( index >= length ) {\n this.x += slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n let slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) return;\n\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) this.selectedSlide.unselect();\n};\n\nproto.selectInitialIndex = function() {\n let initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n let cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n let index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n let cell = this.queryCell( value );\n if ( !cell ) return;\n\n let index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slide that has cell\n let cellSlide = this.slides.find( ( slide ) => slide.cells.includes( cell ) );\n return this.slides.indexOf( cellSlide );\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( let cell of this.cells ) {\n if ( cell.element === elem ) return cell;\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n return elems.map( ( elem ) => this.getCell( elem ) ).filter( Boolean );\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( ( cell ) => cell.element );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n let cell = this.getCell( elem );\n if ( cell ) return cell;\n\n // try to get parent cell elem\n let closest = elem.closest('.flickity-slider > *');\n return this.getCell( closest );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) return this.selectedSlide.getCellElements();\n\n index = index === undefined ? this.selectedIndex : index;\n\n let len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements(); // get all\n }\n\n let cellElems = [];\n for ( let i = index - adjCount; i <= index + adjCount; i++ ) {\n let slideIndex = this.isWrapping ? utils.modulo( i, len ) : i;\n let slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n // do not select invalid selectors from hash: #123, #/. #791\n let isSelectorString = typeof selector == 'string' && !selector.match( /^[#.]?[\\d/]/ );\n if ( isSelectorString ) {\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) return;\n this.getSize();\n // wrap values\n if ( this.isWrapping ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._updateWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n let selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n if ( !this.options.watchCSS ) return;\n\n let afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.includes('flickity') ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n let { activeElement } = document;\n let handler = Flickity.keyboardHandlers[ event.key ];\n // only work if element is in focus\n if ( !this.options.accessibility || !activeElement || !handler ) return;\n\n let isFocused = this.focusableElems.some( ( elem ) => activeElement === elem );\n if ( isFocused ) handler.call( this );\n};\n\nFlickity.keyboardHandlers = {\n ArrowLeft: function() {\n this.uiChange();\n let leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this[ leftMethod ]();\n },\n ArrowRight: function() {\n this.uiChange();\n let rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n this.element.focus({ preventScroll: true });\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) return;\n\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( ( cell ) => cell.destroy() );\n this.viewport.remove();\n // move child elements back into element\n this.element.append( ...this.slider.children );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nObject.assign( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n if ( elem ) return instances[ elem.flickityGUID ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nlet { jQueryBridget } = window;\nif ( jQuery && jQueryBridget ) {\n jQueryBridget( 'flickity', Flickity, jQuery );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function factory() {\n\nfunction Slide( beginMargin, endMargin, cellAlign ) {\n this.beginMargin = beginMargin;\n this.endMargin = endMargin;\n this.cellAlign = cellAlign;\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nlet proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length === 1 ) {\n this.x = cell.x; // x comes from first cell\n this.firstMargin = cell.size[ this.beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n let lastCell = this.getLastCell();\n let lastMargin = lastCell ? lastCell.size[ this.endMargin ] : 0;\n let slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( ( cell ) => cell.select() );\n};\n\nproto.unselect = function() {\n this.cells.forEach( ( cell ) => cell.unselect() );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( ( cell ) => cell.element );\n};\n\nreturn Slide;\n\n} ) );\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\nconst lazyAttr = 'data-flickity-lazyload';\nconst lazySrcAttr = `${lazyAttr}-src`;\nconst lazySrcsetAttr = `${lazyAttr}-srcset`;\nconst imgSelector = `img[${lazyAttr}], img[${lazySrcAttr}], ` +\n `img[${lazySrcsetAttr}], source[${lazySrcsetAttr}]`;\n\nFlickity.create.lazyLoad = function() {\n this.on( 'select', this.lazyLoad );\n\n this.handleLazyLoadComplete = this.onLazyLoadComplete.bind( this );\n};\n\nlet proto = Flickity.prototype;\n\nproto.lazyLoad = function() {\n let { lazyLoad } = this.options;\n if ( !lazyLoad ) return;\n\n // get adjacent cells, use lazyLoad option for adjacent count\n let adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n // lazy load images\n this.getAdjacentCellElements( adjCount )\n .map( getCellLazyImages )\n .flat()\n .forEach( ( img ) => new LazyLoader( img, this.handleLazyLoadComplete ) );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.matches('img') ) {\n let cellAttr = cellElem.getAttribute( lazyAttr );\n let cellSrcAttr = cellElem.getAttribute( lazySrcAttr );\n let cellSrcsetAttr = cellElem.getAttribute( lazySrcsetAttr );\n if ( cellAttr || cellSrcAttr || cellSrcsetAttr ) {\n return cellElem;\n }\n }\n // select lazy images in cell\n return [ ...cellElem.querySelectorAll( imgSelector ) ];\n}\n\nproto.onLazyLoadComplete = function( img, event ) {\n let cell = this.getParentCell( img );\n let cellElem = cell && cell.element;\n this.cellSizeChange( cellElem );\n\n this.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Function} onComplete - callback function\n */\nfunction LazyLoader( img, onComplete ) {\n this.img = img;\n this.onComplete = onComplete;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n let src = this.img.getAttribute( lazyAttr ) ||\n this.img.getAttribute( lazySrcAttr );\n let srcset = this.img.getAttribute( lazySrcsetAttr );\n // set src & serset\n this.img.src = src;\n if ( srcset ) this.img.setAttribute( 'srcset', srcset );\n // remove attr\n this.img.removeAttribute( lazyAttr );\n this.img.removeAttribute( lazySrcAttr );\n this.img.removeAttribute( lazySrcsetAttr );\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n let mediaElem = this.img.parentNode.matches('picture') ? this.img.parentNode : this.img;\n mediaElem.classList.add( className );\n\n this.onComplete( this.img, event );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('./core') );\n } else {\n // browser global\n factory( window.Flickity );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity ) {\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( autoPlay, onTick ) {\n this.autoPlay = autoPlay;\n this.onTick = onTick;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state === 'playing' ) return;\n\n // do not play if page is hidden, start playing when page is visible\n let isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state !== 'playing' ) return;\n\n // default to 3 seconds\n let time = typeof this.autoPlay == 'number' ? this.autoPlay : 3000;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( () => {\n this.onTick();\n this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state === 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state === 'paused' ) this.play();\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n let isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nObject.assign( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.create.player = function() {\n this.player = new Player( this.options.autoPlay, () => {\n this.next( true );\n } );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nlet proto = Flickity.prototype;\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) return;\n\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) return;\n\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n let fragment = document.createDocumentFragment();\n cells.forEach( ( cell ) => fragment.appendChild( cell.element ) );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nlet proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n let cells = this._makeCells( elems );\n if ( !cells || !cells.length ) return;\n\n let len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n let fragment = getCellsFragment( cells );\n // append to slider\n let isAppend = index === len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n let insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n let endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index );\n this.positionSliderAtSelected();\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n let cells = this.getCells( elems );\n if ( !cells || !cells.length ) return;\n\n let minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( ( cell ) => {\n cell.remove();\n let index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n } );\n\n this.cellChange( minCellIndex );\n this.positionSliderAtSelected();\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n let cell = this.getCell( elem );\n if ( !cell ) return;\n\n cell.getSize();\n\n let index = this.cells.indexOf( cell );\n this.cellChange( index );\n // do not position slider after lazy load\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex ) {\n let prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._updateWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex, try to maintain position & select previous selected element\n let cell = this.getCell( prevSelectedElem );\n if ( cell ) this.selectedIndex = this.getCellSlideIndex( cell );\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","/*!\n * imagesLoaded v5.0.0\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( window, require('ev-emitter') );\n } else {\n // browser global\n window.imagesLoaded = factory( window, window.EvEmitter );\n }\n\n} )( typeof window !== 'undefined' ? window : this,\n function factory( window, EvEmitter ) {\n\nlet $ = window.jQuery;\nlet console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\n\n // array of single index\n return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {[Array, Element, NodeList, String]} elem\n * @param {[Object, Function]} options - if function, use as callback\n * @param {Function} onAlways - callback function\n * @returns {ImagesLoaded}\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n let queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error(`Bad element for imagesLoaded ${queryElem || elem}`);\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = {};\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n Object.assign( this.options, options );\n }\n\n if ( onAlways ) this.on( 'always', onAlways );\n\n this.getImages();\n // add jQuery Deferred object\n if ( $ ) this.jqDeferred = new $.Deferred();\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\nconst elementNodeTypes = [ 1, 9, 11 ];\n\n/**\n * @param {Node} elem\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName === 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n let { nodeType } = elem;\n if ( !nodeType || !elementNodeTypes.includes( nodeType ) ) return;\n\n let childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( let img of childImgs ) {\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n let children = elem.querySelectorAll( this.options.background );\n for ( let child of children ) {\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nconst reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n let style = getComputedStyle( elem );\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n if ( !style ) return;\n\n // get url inside url(\"...\")\n let matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n let url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n let loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n let background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n /* eslint-disable-next-line func-style */\n let onProgress = ( image, elem, message ) => {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( () => {\n this.progress( image, elem, message );\n } );\n };\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n } );\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount === this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( `progress: ${message}`, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n let eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n let jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n let isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n // add crossOrigin attribute. #204\n if ( this.img.crossOrigin ) {\n this.proxyImage.crossOrigin = this.img.crossOrigin;\n }\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.currentSrc || this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n let { parentNode } = this.img;\n // emit progress with parent or self \n let elem = parentNode.nodeName === 'PICTURE' ? parentNode : this.img;\n this.emitEvent( 'progress', [ this, elem, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n let isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) return;\n\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, onAlways ) {\n let instance = new ImagesLoaded( this, options, onAlways );\n return instance.jqDeferred.promise( $( this ) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n} );\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('get-size') );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory( window.getSize );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( getSize ) {\n\nconst cellClassName = 'flickity-cell';\n\nfunction Cell( elem ) {\n this.element = elem;\n this.element.classList.add( cellClassName );\n\n this.x = 0;\n this.unselect();\n}\n\nlet proto = Cell.prototype;\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.classList.remove( cellClassName );\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\nproto.remove = function() {\n this.element.remove();\n};\n\nreturn Cell;\n\n} ) );\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('./core') );\n } else {\n // browser global\n factory( window.Flickity );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity ) {\n\nconst svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( increment, direction, arrowShape ) {\n this.increment = increment;\n this.direction = direction;\n this.isPrevious = increment === 'previous';\n this.isLeft = direction === 'left';\n this._create( arrowShape );\n}\n\nPrevNextButton.prototype._create = function( arrowShape ) {\n // properties\n let element = this.element = document.createElement('button');\n element.className = `flickity-button flickity-prev-next-button ${this.increment}`;\n let label = this.isPrevious ? 'Previous' : 'Next';\n // prevent button from submitting form https://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n element.setAttribute( 'aria-label', label );\n // init as disabled\n this.disable();\n // create arrow\n let svg = this.createSVG( label, arrowShape );\n element.append( svg );\n};\n\nPrevNextButton.prototype.createSVG = function( label, arrowShape ) {\n let svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n // add title #1189\n let title = document.createElementNS( svgURI, 'title' );\n title.append( label );\n // add path\n let path = document.createElementNS( svgURI, 'path' );\n let pathMovements = getArrowMovements( arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180)' );\n }\n svg.append( title, path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) return shape;\n\n let { x0, x1, x2, x3, y1, y2 } = shape;\n\n // create movement string\n return `M ${x0}, 50\n L ${x1}, ${y1 + 50}\n L ${x2}, ${y2 + 50}\n L ${x3}, 50\n L ${x2}, ${50 - y2}\n L ${x1}, ${50 - y1}\n Z`;\n}\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n this.element.removeAttribute('disabled');\n};\n\nPrevNextButton.prototype.disable = function() {\n this.element.setAttribute( 'disabled', true );\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nObject.assign( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.create.prevNextButtons = function() {\n if ( !this.options.prevNextButtons ) return;\n\n let { rightToLeft, arrowShape } = this.options;\n let prevDirection = rightToLeft ? 'right' : 'left';\n let nextDirection = rightToLeft ? 'left' : 'right';\n this.prevButton = new PrevNextButton( 'previous', prevDirection, arrowShape );\n this.nextButton = new PrevNextButton( 'next', nextDirection, arrowShape );\n this.focusableElems.push( this.prevButton.element );\n this.focusableElems.push( this.nextButton.element );\n\n this.handlePrevButtonClick = () => {\n this.uiChange();\n this.previous();\n };\n\n this.handleNextButtonClick = () => {\n this.uiChange();\n this.next();\n };\n\n this.on( 'activate', this.activatePrevNextButtons );\n this.on( 'select', this.updatePrevNextButtons );\n};\n\nlet proto = Flickity.prototype;\n\nproto.updatePrevNextButtons = function() {\n let lastIndex = this.slides.length ? this.slides.length - 1 : 0;\n this.updatePrevNextButton( this.prevButton, 0 );\n this.updatePrevNextButton( this.nextButton, lastIndex );\n};\n\nproto.updatePrevNextButton = function( button, disabledIndex ) {\n // enable is wrapAround and at least 2 slides\n if ( this.isWrapping && this.slides.length > 1 ) {\n button.enable();\n return;\n }\n\n let isEnabled = this.selectedIndex !== disabledIndex;\n button[ isEnabled ? 'enable' : 'disable' ]();\n // if disabling button that is focused,\n // shift focus to element to maintain keyboard accessibility\n let isDisabledFocused = !isEnabled && document.activeElement === button.element;\n if ( isDisabledFocused ) this.focus();\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.element.addEventListener( 'click', this.handlePrevButtonClick );\n this.nextButton.element.addEventListener( 'click', this.handleNextButtonClick );\n this.element.append( this.prevButton.element, this.nextButton.element );\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.element.remove();\n this.nextButton.element.remove();\n this.prevButton.element.removeEventListener( 'click', this.handlePrevButtonClick );\n this.nextButton.element.removeEventListener( 'click', this.handleNextButtonClick );\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Unidragger v3.0.1\n * Draggable base class\n * MIT license\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.EvEmitter,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( window, EvEmitter ) {\n\nfunction Unidragger() {}\n\n// inherit EvEmitter\nlet proto = Unidragger.prototype = Object.create( EvEmitter.prototype );\n\n// ----- bind start ----- //\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nlet startEvent, activeEvents;\nif ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n activeEvents = [ 'touchmove', 'touchend', 'touchcancel' ];\n} else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n activeEvents = [ 'pointermove', 'pointerup', 'pointercancel' ];\n} else {\n // mouse events\n startEvent = 'mousedown';\n activeEvents = [ 'mousemove', 'mouseup' ];\n}\n\n// prototype so it can be overwriteable by Flickity\nproto.touchActionValue = 'none';\n\nproto.bindHandles = function() {\n this._bindHandles( 'addEventListener', this.touchActionValue );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( 'removeEventListener', '' );\n};\n\n/**\n * Add or remove start event\n * @param {String} bindMethod - addEventListener or removeEventListener\n * @param {String} touchAction - value for touch-action CSS property\n */\nproto._bindHandles = function( bindMethod, touchAction ) {\n this.handles.forEach( ( handle ) => {\n handle[ bindMethod ]( startEvent, this );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) handle.style.touchAction = touchAction;\n } );\n};\n\nproto.bindActivePointerEvents = function() {\n activeEvents.forEach( ( eventName ) => {\n window.addEventListener( eventName, this );\n } );\n};\n\nproto.unbindActivePointerEvents = function() {\n activeEvents.forEach( ( eventName ) => {\n window.removeEventListener( eventName, this );\n } );\n};\n\n// ----- event handler helpers ----- //\n\n// trigger method with matching pointer\nproto.withPointer = function( methodName, event ) {\n if ( event.pointerId === this.pointerIdentifier ) {\n this[ methodName ]( event, event );\n }\n};\n\n// trigger method with matching touch\nproto.withTouch = function( methodName, event ) {\n let touch;\n for ( let changedTouch of event.changedTouches ) {\n if ( changedTouch.identifier === this.pointerIdentifier ) {\n touch = changedTouch;\n }\n }\n if ( touch ) this[ methodName ]( event, touch );\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n this.pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this.pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this.pointerDown( event, event );\n};\n\n// nodes that have text fields\nconst cursorNodes = [ 'TEXTAREA', 'INPUT', 'SELECT', 'OPTION' ];\n// input types that do not have text fields\nconst clickTypes = [ 'radio', 'checkbox', 'button', 'submit', 'image', 'file' ];\n\n/**\n * any time you set `event, pointer` it refers to:\n * @param {Event} event\n * @param {Event | Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n // dismiss multi-touch taps, right clicks, and clicks on text fields\n let isCursorNode = cursorNodes.includes( event.target.nodeName );\n let isClickType = clickTypes.includes( event.target.type );\n let isOkayElement = !isCursorNode || isClickType;\n let isOkay = !this.isPointerDown && !event.button && isOkayElement;\n if ( !isOkay ) return;\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n // track position for move\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n this.bindActivePointerEvents();\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// ----- move ----- //\n\nproto.onmousemove = function( event ) {\n this.pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n this.withPointer( 'pointerMove', event );\n};\n\nproto.ontouchmove = function( event ) {\n this.withTouch( 'pointerMove', event );\n};\n\nproto.pointerMove = function( event, pointer ) {\n let moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY,\n };\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n // start drag if pointer has moved far enough to start drag\n let isDragStarting = !this.isDragging && this.hasDragStarted( moveVector );\n if ( isDragStarting ) this.dragStart( event, pointer );\n if ( this.isDragging ) this.dragMove( event, pointer, moveVector );\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- drag ----- //\n\nproto.dragStart = function( event, pointer ) {\n this.isDragging = true;\n this.isPreventingClicks = true; // set flag to prevent clicks\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// ----- end ----- //\n\nproto.onmouseup = function( event ) {\n this.pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n this.withPointer( 'pointerUp', event );\n};\n\nproto.ontouchend = function( event ) {\n this.withTouch( 'pointerUp', event );\n};\n\nproto.pointerUp = function( event, pointer ) {\n this.pointerDone();\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n\n if ( this.isDragging ) {\n this.dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this.staticClick( event, pointer );\n }\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.isDragging = false; // reset flag\n // re-enable clicking async\n setTimeout( () => delete this.isPreventingClicks );\n\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// triggered on pointer up & pointer cancel\nproto.pointerDone = function() {\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n this.unbindActivePointerEvents();\n this.emitEvent('pointerDone');\n};\n\n// ----- cancel ----- //\n\nproto.onpointercancel = function( event ) {\n this.withPointer( 'pointerCancel', event );\n};\n\nproto.ontouchcancel = function( event ) {\n this.withTouch( 'pointerCancel', event );\n};\n\nproto.pointerCancel = function( event, pointer ) {\n this.pointerDone();\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- click ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) event.preventDefault();\n};\n\n// triggered after pointer down & up with no/tiny movement\nproto.staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n let isMouseup = event.type === 'mouseup';\n if ( isMouseup && this.isIgnoringMouseUp ) return;\n\n this.emitEvent( 'staticClick', [ event, pointer ] );\n\n // set flag for emulated clicks 300ms after touchend\n if ( isMouseup ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 400ms\n setTimeout( () => {\n delete this.isIgnoringMouseUp;\n }, 400 );\n }\n};\n\n// ----- ----- //\n\nreturn Unidragger;\n\n} ) );\n"],"sourceRoot":""}