{"version":3,"file":"js/vendor.27829911b83865caeb0c.bundle.js","mappings":"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","sources":["webpack:///../node_modules/flickity/js/add-remove-cell.js","webpack:///../node_modules/flickity/js/animate.js","webpack:///../node_modules/flickity/js/cell.js","webpack:///../node_modules/flickity/js/drag.js","webpack:///../node_modules/flickity/js/flickity.js","webpack:///../node_modules/flickity/js/index.js","webpack:///../node_modules/flickity/js/lazyload.js","webpack:///../node_modules/flickity/js/page-dots.js","webpack:///../node_modules/flickity/js/player.js","webpack:///../node_modules/flickity/js/prev-next-button.js","webpack:///../node_modules/flickity/js/slide.js"],"sourcesContent":["// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n } );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar 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 var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var 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 var 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, true );\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 var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\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 var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\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 * @param {Boolean} isPositioningSlider - Positions slider after selection\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\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 // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils',\n ], function( utils ) {\n return factory( window, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\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 var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n } );\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x -= 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 x = this.options.rightToLeft ? -x : x;\n var 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 var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n 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 var isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) == Math.round( previousX * 100 );\n if ( isResting ) {\n this.restingFrames++;\n }\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 var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var 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 for ( var i = 0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i = 0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\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 ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size',\n ], function( getSize ) {\n return factory( window, getSize );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\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\n/**\n * @param {Integer} shift - 0, 1, or -1\n */\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n} ) );\n","// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\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}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = 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 // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {} );\n isTouchmoveScrollCanceled = true;\n }\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 if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\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\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x %= this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\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 var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.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 // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return 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 var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return 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 ) {\n 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 var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var 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 var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var 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// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var 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","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate',\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n } );\n } else 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 var _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}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n/* eslint-enable max-params */\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var 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 = utils.extend( {}, 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.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var 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.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n 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 var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( 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 var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\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._getWrapShiftCells();\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 var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\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 var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i = index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( 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 = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n } );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( 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 var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match( /^(\\d+)%$/ );\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n /* eslint-disable-next-line no-invalid-this */\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\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\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5,\n },\n left: {\n left: 0,\n right: 1,\n },\n right: {\n right: 0,\n left: 1,\n },\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\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 var 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 var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\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 ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var 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 // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.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 var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n 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 // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var 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 var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var 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 var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i = 0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\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 ( var i = 0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\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 var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\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 var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\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 ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var 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 if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match( /^[#.]?[\\d/]/ ) ) {\n return;\n }\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// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\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 if ( !this.isActive ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\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 var 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 var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\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 // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility || isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus ...\n // #Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n 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( function( cell ) {\n cell.destroy();\n } );\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\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\nutils.extend( 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 var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\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","/*!\n * Flickity v2.2.2\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-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n} )( window, function factory( Flickity ) {\n return Flickity;\n} );\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n } );\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Flickity} flickity - Flickity instance\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\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 var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\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\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - 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 var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( 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\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity',\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\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\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var 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' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\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' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var 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\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\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\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n 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 ) {\n 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","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils',\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n } );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path' );\n var pathMovements = getArrowMovements( this.parent.options.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.appendChild( 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' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( 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.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n","// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else 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}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar 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 var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n } );\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n } );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n } );\n};\n\nreturn Slide;\n\n} ) );\n"],"names":["window","Flickity","utils","getCellsFragment","cells","fragment","document","createDocumentFragment","forEach","cell","appendChild","element","proto","prototype","insert","elems","index","this","_makeCells","length","len","undefined","isAppend","slider","insertCellElement","insertBefore","concat","endCells","splice","_sizeCells","cellChange","append","prepend","remove","getCells","minCellIndex","indexOf","Math","min","removeFrom","cellSizeChange","elem","getCell","getSize","changedCellIndex","isPositioningSlider","prevSelectedElem","selectedElement","_positionCells","_getWrapShiftCells","setGallerySize","selectedIndex","getCellSlideIndex","slides","emitEvent","select","positionSliderAtSelected","factory","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","x","integratePhysics","positionSlider","settle","_this","requestAnimationFrame","options","wrapAround","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","style","transform","firstSlide","positionX","target","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","position","percentPosition","round","size","innerWidth","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","i","cellShift","wrapShift","outerWidth","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","selectedAttraction","Cell","parent","create","setAttribute","destroy","unselect","side","originSide","removeAttribute","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","width","cellAlign","classList","add","parentNode","removeChild","Unidragger","extend","defaults","draggable","dragThreshold","createMethods","push","_touchActionValue","isTouch","isTouchmoveScrollCanceled","_createDrag","on","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","addEventListener","handles","viewport","bindHandles","unbindHandles","bindDrag","unbindDrag","pointerDown","event","pointer","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","activeElement","pointerDownBlur","pointerDownScroll","getScrollPosition","_pointerDownDefault","pointerDownPointer","pageX","pageY","_bindPostStartEvents","focusNodes","INPUT","TEXTAREA","SELECT","pageXOffset","y","pageYOffset","nodeName","focus","isTouchStart","type","isTouchPointer","pointerType","isFocusNode","preventDefault","hasDragStarted","moveVector","abs","pointerUp","isTouchScrolling","_dragPointerUp","pointerDone","removeEventListener","dragStart","dragStartPosition","startAnimation","pointerMove","_dragPointerMove","_dragMove","dragMove","previousDragX","direction","originBound","max","endBound","getLastSlide","dragMoveTime","Date","dragEnd","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","isDragSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","increment","minDistance","Infinity","condition","contain","dist","minDist","isWrapAround","slideIndex","slide","wrap","floor","delta","staticClick","clickedCell","getParentCell","cellElem","cellIndex","onscroll","scroll","scrollMoveX","scrollMoveY","_pointerDone","EvEmitter","Slide","animatePrototype","jQuery","getComputedStyle","console","moveElements","toElem","makeArray","GUID","instances","queryElement","getQueryElement","flickityGUID","instance","option","$element","constructor","_create","error","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","resize","id","guid","eventName","createElement","className","_createSlider","watchCSS","listener","method","activate","opts","isActive","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","filterFindElements","cellSelector","positionCells","map","getLastCell","maxCellHeight","cellX","startCell","outerHeight","updateSlides","_containSlides","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","call","addCell","updateSelectedSlide","groupCells","number","parseInt","percentMatch","match","percent","_init","reposition","setCellAlign","cellAlignShorthands","center","left","right","shorthand","height","adaptiveHeight","_unshiftCells","gapX","_getGapCells","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","args","emitArgs","$event","jQEvent","Event","trigger","isWrap","isInstant","_wrapSelect","prevIndex","wrapIndex","backWrapDelta","forewardWrapDelta","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","initialIndex","queryCell","selectCell","value","getParent","getAdjacentCellElements","adjCount","cellElems","selector","querySelector","uiChange","childUIPointerDown","onresize","debounceMethod","content","deactivate","onkeydown","isNotFocused","handler","keyboardHandlers","keyCode","leftMethod","rightMethod","prevScrollY","preventScroll","scrollTo","allOff","removeData","data","htmlInit","bridget","setJQuery","jq","getCellLazyImages","lazyloadAttr","getAttribute","srcAttr","srcsetAttr","lazySelector","imgs","querySelectorAll","LazyLoader","img","flickity","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","handleEvent","src","srcset","onload","complete","onerror","Unipointer","PageDots","Object","holder","dots","handleClick","onClick","bind","setDots","bindStartEvent","unbindStartEvent","addDots","removeDots","count","newDots","dot","updateSelected","selectedDot","onTap","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","hidden","tick","time","autoPlay","clear","timeout","setTimeout","stop","clearTimeout","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","svgURI","PrevNextButton","getArrowMovements","shape","x0","x1","y1","x2","y2","x3","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","path","pathMovements","arrowShape","onclick","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","off","isOriginLeft","lastCell","lastMargin"],"sourceRoot":""}