{"version":3,"file":"index-Cf2UCf1j.js","sources":["../../../node_modules/ev-emitter/ev-emitter.js","../../../node_modules/get-size/get-size.js","../../../node_modules/desandro-matches-selector/matches-selector.js","../../../node_modules/fizzy-ui-utils/utils.js","../../../node_modules/flickity/js/cell.js","../../../node_modules/flickity/js/slide.js","../../../node_modules/flickity/js/animate.js","../../../node_modules/flickity/js/flickity.js","../../../node_modules/unipointer/unipointer.js","../../../node_modules/unidragger/unidragger.js","../../../node_modules/flickity/js/drag.js","../../../node_modules/flickity/js/prev-next-button.js","../../../node_modules/flickity/js/page-dots.js","../../../node_modules/flickity/js/player.js","../../../node_modules/flickity/js/add-remove-cell.js","../../../node_modules/flickity/js/lazyload.js","../../../node_modules/flickity/js/index.js"],"sourcesContent":["/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else 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\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var 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 var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var 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};\n\nreturn EvEmitter;\n\n}));\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\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.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar 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\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 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 * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\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.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var 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 ( matchesSelector( elem, selector ) ) {\n return elem;\n }\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 var 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 var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.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\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var 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 +\n ': ' + error );\n }\n return;\n }\n // initialize\n var 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.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 this.element.style[ this.parent.originSide ] = 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.style.transform = '';\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 sideOffset = this.parent.originSide === 'left' ? 1 : -1;\n\n var adjustedX = this.parent.options.percentPosition ?\n x * sideOffset * ( this.parent.size.innerWidth / this.size.width ) :\n x * sideOffset;\n\n this.element.style.transform = 'translateX(' +\n this.parent.getPositionValue( adjustedX ) + ')';\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","// 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","// 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 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 // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) {\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 * Unipointer v2.4.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else 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.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( '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 } else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\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/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\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\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n","/*!\n * Unidragger v2.4.0\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return 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// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\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\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\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\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};\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","// 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","// 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","// 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","// 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","/*!\n * Flickity v2.3.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-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"],"names":["global","factory","module","this","EvEmitter","proto","eventName","listener","events","listeners","onceEvents","onceListeners","index","args","i","isOnce","window","getStyleSize","value","num","isValid","noop","logError","message","measurements","measurementsLength","getZeroSize","size","measurement","getStyle","elem","style","isSetup","isBoxSizeOuter","setup","div","body","getSize","isBorderBox","paddingWidth","paddingHeight","marginWidth","marginHeight","borderWidth","borderHeight","isBorderBoxSizeOuter","styleWidth","styleHeight","matchesMethod","ElemProto","prefixes","prefix","method","selector","require$$0","matchesSelector","utils","a","b","prop","arraySlice","obj","isArrayLike","ary","event","elems","ffElems","childElems","_class","methodName","threshold","timeoutName","timeout","_this","callback","readyState","str","match","$1","$2","console","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","dataOptionsAttr","jQuery","attr","options","error","instance","Cell","parent","side","x","marginProperty","sideOffset","adjustedX","shift","Slide","cell","beginMargin","endMargin","lastCell","lastMargin","slideWidth","previousX","is3d","translateX","firstSlide","positionX","progress","position","isResting","beforeGap","afterGap","cells","gap","cellShift","force","dragVelocity","dragForce","dragDown","distance","require$$1","require$$2","require$$3","require$$4","require$$5","_Flickity","animatePrototype","getComputedStyle","moveElements","toElem","GUID","instances","Flickity","element","queryElement","id","opts","cellElems","slider","cellElem","cellX","startCell","len","slide","isOriginLeft","nextMargin","canCellFit","groupCells","number","percentMatch","percent","cellAlignShorthands","shorthand","height","gapX","cellIndex","increment","isRightToLeft","contentWidth","isContentSmaller","beginBound","endBound","type","emitArgs","$event","jQEvent","isWrap","isInstant","prevIndex","isWrapping","wrapIndex","delta","backWrapDelta","forewardWrapDelta","initialIndex","adjCount","slideIndex","selectedElement","watchOption","afterContent","isNotFocused","handler","leftMethod","rightMethod","prevScrollY","jq","Unipointer","isAdd","bindMethod","startEvent","touches","touch","button","pointer","postStartEvents","Unidragger","touchAction","handle","isOkay","cursorNodes","clickTypes","isCursorNode","isClickType","focused","canBlur","moveVector","getScrollPosition","focusNodes","isFocusNode","isTouchStart","isTouchPointer","direction","dragX","originBound","restingX","positiveResting","negativeResting","minDistance","condition","dist","minDist","isWrapAround","wrap","clickedCell","scroll","scrollMoveX","scrollMoveY","svgURI","PrevNextButton","leftDirection","svg","path","pathMovements","getArrowMovements","shape","slides","lastIndex","boundIndex","PageDots","count","fragment","newDots","length","max","dot","removeDots","target","Player","isPageHidden","time","getCellsFragment","isAppend","insertCellElement","endCells","minCellIndex","changedCellIndex","isPositioningSlider","prevSelectedElem","lazyLoad","lazyImages","lazyCellImages","getCellLazyImages","img","LazyLoader","lazyloadAttr","srcAttr","srcsetAttr","lazySelector","imgs","flickity","src","srcset","className","require$$6"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]}