{"version":3,"file":"sliders.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","node_modules/flickity-fade/flickity-fade.js","resources/theme/js/sliders.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};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} shift - 0, 1, or -1\n */\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n} ) );\n","// 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 if ( !this.isActive ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility || isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus ...\n // #Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n } );\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Unipointer v2.3.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 ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n } else if ( 'ontouchstart' in window ) {\n // Touch Events. iOS Safari\n startEvent = 'touchstart';\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.3.1\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\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {} );\n isTouchmoveScrollCanceled = true;\n }\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x %= this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( dist, minDist ) {\n return dist <= minDist;\n } : function( dist, minDist ) {\n return dist < minDist;\n };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","// 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.2.2\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2021 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n} )( window, function factory( Flickity ) {\n return Flickity;\n} );\n","/**\n * Flickity fade v1.0.0\n * Fade between Flickity slides\n */\n\n/* jshint browser: true, undef: true, unused: true */\n\n( function( window, factory ) {\n // universal module definition\n /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'flickity/js/index',\n 'fizzy-ui-utils/utils',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( this, function factory( Flickity, utils ) {\n\n// ---- Slide ---- //\n\nvar Slide = Flickity.Slide;\n\nvar slideUpdateTarget = Slide.prototype.updateTarget;\nSlide.prototype.updateTarget = function() {\n slideUpdateTarget.apply( this, arguments );\n if ( !this.parent.options.fade ) {\n return;\n }\n // position cells at selected target\n var slideTargetX = this.target - this.x;\n var firstCellX = this.cells[0].x;\n this.cells.forEach( function( cell ) {\n var targetX = cell.x - firstCellX - slideTargetX;\n cell.renderPosition( targetX );\n });\n};\n\nSlide.prototype.setOpacity = function( alpha ) {\n this.cells.forEach( function( cell ) {\n cell.element.style.opacity = alpha;\n });\n};\n\n// ---- Flickity ---- //\n\nvar proto = Flickity.prototype;\n\nFlickity.createMethods.push('_createFade');\n\nproto._createFade = function() {\n this.fadeIndex = this.selectedIndex;\n this.prevSelectedIndex = this.selectedIndex;\n this.on( 'select', this.onSelectFade );\n this.on( 'dragEnd', this.onDragEndFade );\n this.on( 'settle', this.onSettleFade );\n this.on( 'activate', this.onActivateFade );\n this.on( 'deactivate', this.onDeactivateFade );\n};\n\nvar updateSlides = proto.updateSlides;\nproto.updateSlides = function() {\n updateSlides.apply( this, arguments );\n if ( !this.options.fade ) {\n return;\n }\n // set initial opacity\n this.slides.forEach( function( slide, i ) {\n var alpha = i == this.selectedIndex ? 1 : 0;\n slide.setOpacity( alpha );\n }, this );\n};\n\n/* ---- events ---- */\n\nproto.onSelectFade = function() {\n // in case of resize, keep fadeIndex within current count\n this.fadeIndex = Math.min( this.prevSelectedIndex, this.slides.length - 1 );\n this.prevSelectedIndex = this.selectedIndex;\n};\n\nproto.onSettleFade = function() {\n delete this.didDragEnd;\n if ( !this.options.fade ) {\n return;\n }\n // set full and 0 opacity on selected & faded slides\n this.selectedSlide.setOpacity( 1 );\n var fadedSlide = this.slides[ this.fadeIndex ];\n if ( fadedSlide && this.fadeIndex != this.selectedIndex ) {\n this.slides[ this.fadeIndex ].setOpacity( 0 );\n }\n};\n\nproto.onDragEndFade = function() {\n // set flag\n this.didDragEnd = true;\n};\n\nproto.onActivateFade = function() {\n if ( this.options.fade ) {\n this.element.classList.add('is-fade');\n }\n};\n\nproto.onDeactivateFade = function() {\n if ( !this.options.fade ) {\n return;\n }\n this.element.classList.remove('is-fade');\n // reset opacity\n this.slides.forEach( function( slide ) {\n slide.setOpacity('');\n });\n};\n\n/* ---- position & fading ---- */\n\nvar positionSlider = proto.positionSlider;\nproto.positionSlider = function() {\n if ( !this.options.fade ) {\n positionSlider.apply( this, arguments );\n return;\n }\n\n this.fadeSlides();\n this.dispatchScrollEvent();\n};\n\nvar positionSliderAtSelected = proto.positionSliderAtSelected;\nproto.positionSliderAtSelected = function() {\n if ( this.options.fade ) {\n // position fade slider at origin\n this.setTranslateX( 0 );\n }\n positionSliderAtSelected.apply( this, arguments );\n};\n\nproto.fadeSlides = function() {\n if ( this.slides.length < 2 ) {\n return;\n }\n // get slides to fade-in & fade-out\n var indexes = this.getFadeIndexes();\n var fadeSlideA = this.slides[ indexes.a ];\n var fadeSlideB = this.slides[ indexes.b ];\n var distance = this.wrapDifference( fadeSlideA.target, fadeSlideB.target );\n var progress = this.wrapDifference( fadeSlideA.target, -this.x );\n progress = progress / distance;\n\n fadeSlideA.setOpacity( 1 - progress );\n fadeSlideB.setOpacity( progress );\n\n // hide previous slide\n var fadeHideIndex = indexes.a;\n if ( this.isDragging ) {\n fadeHideIndex = progress > 0.5 ? indexes.a : indexes.b;\n }\n var isNewHideIndex = this.fadeHideIndex != undefined &&\n this.fadeHideIndex != fadeHideIndex &&\n this.fadeHideIndex != indexes.a &&\n this.fadeHideIndex != indexes.b;\n if ( isNewHideIndex ) {\n // new fadeHideSlide set, hide previous\n this.slides[ this.fadeHideIndex ].setOpacity( 0 );\n }\n this.fadeHideIndex = fadeHideIndex;\n};\n\nproto.getFadeIndexes = function() {\n if ( !this.isDragging && !this.didDragEnd ) {\n return {\n a: this.fadeIndex,\n b: this.selectedIndex,\n };\n }\n if ( this.options.wrapAround ) {\n return this.getFadeDragWrapIndexes();\n } else {\n return this.getFadeDragLimitIndexes();\n }\n};\n\nproto.getFadeDragWrapIndexes = function() {\n var distances = this.slides.map( function( slide, i ) {\n return this.getSlideDistance( -this.x, i );\n }, this );\n var absDistances = distances.map( function( distance ) {\n return Math.abs( distance );\n });\n var minDistance = Math.min.apply( Math, absDistances );\n var closestIndex = absDistances.indexOf( minDistance );\n var distance = distances[ closestIndex ];\n var len = this.slides.length;\n\n var delta = distance >= 0 ? 1 : -1;\n return {\n a: closestIndex,\n b: utils.modulo( closestIndex + delta, len ),\n };\n};\n\nproto.getFadeDragLimitIndexes = function() {\n // calculate closest previous slide\n var dragIndex = 0;\n for ( var i=0; i < this.slides.length - 1; i++ ) {\n var slide = this.slides[i];\n if ( -this.x < slide.target ) {\n break;\n }\n dragIndex = i;\n }\n return {\n a: dragIndex,\n b: dragIndex + 1,\n };\n};\n\nproto.wrapDifference = function( a, b ) {\n var diff = b - a;\n\n if ( !this.options.wrapAround ) {\n return diff;\n }\n\n var diffPlus = diff + this.slideableWidth;\n var diffMinus = diff - this.slideableWidth;\n if ( Math.abs( diffPlus ) < Math.abs( diff ) ) {\n diff = diffPlus;\n }\n if ( Math.abs( diffMinus ) < Math.abs( diff ) ) {\n diff = diffMinus;\n }\n return diff;\n};\n\n// ---- wrapAround ---- //\n\nvar _getWrapShiftCells = proto._getWrapShiftCells;\nproto._getWrapShiftCells = function() {\n if ( !this.options.fade ) {\n _getWrapShiftCells.apply( this, arguments );\n }\n};\n\nvar shiftWrapCells = proto.shiftWrapCells;\nproto.shiftWrapCells = function() {\n if ( !this.options.fade ) {\n shiftWrapCells.apply( this, arguments );\n }\n};\n\nreturn Flickity;\n\n}));\n","import Flickity from 'flickity-fade';\r\n\r\nfunction initSlider(trigger, options){\r\n const slider = new Flickity(trigger, options);\r\n window.addEventListener('resize', () => {\r\n slider.resize();\r\n })\r\n}\r\n\r\ndocument.addEventListener('readystatechange', () => {\r\n if (document.readyState === 'complete') {\r\n const triggers = Array.from(document.querySelectorAll('.slider'));\r\n let options = {\r\n pageDots: true,\r\n wrapAround: true,\r\n prevNextButtons: true,\r\n cellAlign: 'left',\r\n percentPosition: true,\r\n draggable: false,\r\n fade: true,\r\n autoPlay: false,\r\n };\r\n triggers.forEach(trigger => {\r\n if (trigger.dataset.sliderOptions) {\r\n options = JSON.parse(trigger.dataset.sliderOptions);\r\n }\r\n initSlider(trigger, options);\r\n });\r\n }\r\n});\r\n"],"names":["global","factory","module","exports","EvEmitter","window","this","proto","prototype","on","eventName","listener","events","_events","listeners","indexOf","push","once","onceEvents","_onceEvents","onceListeners","off","length","index","splice","emitEvent","args","slice","i","isOnce","apply","allOff","getSize","getStyleSize","value","num","parseFloat","isValid","isNaN","noop","logError","console","message","error","measurements","measurementsLength","getZeroSize","size","width","height","innerWidth","innerHeight","outerWidth","outerHeight","measurement","getStyle","elem","style","getComputedStyle","isSetup","isBoxSizeOuter","setup","div","document","createElement","padding","borderStyle","borderWidth","boxSizing","body","documentElement","appendChild","Math","round","removeChild","querySelector","_typeof","nodeType","display","offsetWidth","offsetHeight","isBorderBox","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","matchesSelector","matchesMethod","ElemProto","Element","matches","prefixes","prefix","method","selector","require$$0","fizzyUIUtils","utils","extend","a","b","prop","modulo","arraySlice","Array","makeArray","obj","isArray","undefined","isArrayLike","call","removeFrom","ary","getParent","parentNode","getQueryElement","handleEvent","event","type","filterFindElements","elems","ffElems","forEach","HTMLElement","childElems","querySelectorAll","debounceMethod","_class","methodName","threshold","timeoutName","timeout","clearTimeout","arguments","_this","setTimeout","docReady","callback","readyState","addEventListener","toDashed","str","replace","match","$1","$2","toLowerCase","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","jQuery","attr","getAttribute","options","JSON","parse","className","instance","data","Flickity","Cell","parent","element","create","position","setAttribute","x","shift","destroy","unselect","side","originSide","removeAttribute","setPosition","updateTarget","renderPosition","setDefaultTarget","marginProperty","target","cellAlign","getPositionValue","select","classList","add","remove","wrapShift","slideableWidth","Slide","isOriginLeft","cells","addCell","cell","max","beginMargin","firstMargin","endMargin","lastCell","getLastCell","lastMargin","slideWidth","getCellElements","map","animatePrototype","startAnimation","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","requestAnimationFrame","animateFrame","wrapAround","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","slider","transform","firstSlide","slides","positionX","progress","slidesWidth","dispatchEvent","positionSliderAtSelected","selectedSlide","velocity","percentPosition","isResting","isPointerDown","isFreeScrolling","selectedIndex","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","cellShift","_unshiftCells","getFrictionFactor","applyForce","force","getRestingPosition","isDraggable","dragVelocity","dragX","dragForce","dragDown","distance","selectedAttraction","require$$1","require$$2","require$$3","require$$4","require$$5","_Flickity","moveElements","toElem","GUID","instances","queryElement","flickityGUID","option","$element","constructor","defaults","_create","accessibility","freeScrollFriction","friction","namespaceJQueryEvents","resize","setGallerySize","createMethods","id","guid","viewport","_createSlider","watchCSS","activate","opts","isActive","cellElems","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","cellSelector","_makeCells","positionCells","_getWrapShiftCells","cellElem","getLastSlide","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","len","updateSlides","_containSlides","slide","nextMargin","canCellFit","_getCanCellFit","updateSelectedSlide","groupCells","number","parseInt","percentMatch","percent","_init","reposition","setCellAlign","cellAlignShorthands","center","left","right","shorthand","adaptiveHeight","gapX","cellIndex","_getGapCells","increment","contain","isRightToLeft","contentWidth","isContentSmaller","beginBound","endBound","min","emitArgs","$event","jQEvent","Event","trigger","isWrap","isInstant","_wrapSelect","prevIndex","isWrapping","wrapIndex","delta","abs","backWrapDelta","forewardWrapDelta","isDragSelect","previous","next","unselectSelectedSlide","selectedCells","selectedElements","selectedCell","selectedElement","initialIndex","queryCell","selectCell","getCellSlideIndex","getCell","getCells","getParentCell","getAdjacentCellElements","adjCount","slideIndex","uiChange","childUIPointerDown","preventDefault","focus","onresize","watchOption","afterContent","content","deactivate","onkeydown","isNotFocused","activeElement","handler","keyboardHandlers","keyCode","leftMethod","rightMethod","prevScrollY","pageYOffset","preventScroll","scrollTo","pageXOffset","removeEventListener","removeData","bridget","setJQuery","jq","Unipointer","Object","bindStartEvent","_bindStartEvent","unbindStartEvent","isAdd","bindMethod","startEvent","PointerEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","pointerId","pointerDown","_bindPostStartEvents","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","pageX","y","pageY","Unidragger","bindHandles","_bindHandles","unbindHandles","touchAction","_touchActionValue","handles","handle","isOkay","okayPointerDown","pointerDownPointer","pointerDownBlur","cursorNodes","TEXTAREA","INPUT","SELECT","OPTION","clickTypes","radio","checkbox","submit","image","file","isCursorNode","nodeName","isClickType","focused","canBlur","blur","moveVector","_dragPointerMove","_dragMove","isDragging","hasDragStarted","_dragStart","_dragPointerUp","_dragEnd","_staticClick","isPreventingClicks","dragStart","dragMove","bind","dragEnd","onclick","isIgnoringMouseUp","staticClick","draggable","dragThreshold","isTouch","isTouchmoveScrollCanceled","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","bindDrag","unbindDrag","_pointerDownDefault","_pointerDownPreventDefault","pointerDownFocus","pointerDownScroll","getScrollPosition","focusNodes","isFocusNode","isTouchStart","isTouchPointer","pointerType","isTouchScrolling","dragStartPosition","previousDragX","direction","originBound","dragMoveTime","Date","freeScroll","dragEndRestingSelect","restingX","dragEndBoostSelect","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","dist","minDist","isWrapAround","wrap","floor","clickedCell","onscroll","scroll","scrollMoveX","scrollMoveY","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","path","pathMovements","getArrowMovements","arrowShape","shape","x0","x1","y1","x2","y2","x3","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","PageDots","holder","dots","handleClick","onClick","setDots","addDots","removeDots","count","fragment","createDocumentFragment","newDots","dot","updateSelected","selectedDot","onTap","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","isPageHidden","hidden","tick","time","autoPlay","clear","stop","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","getCellsFragment","insert","isAppend","insertCellElement","insertBefore","endCells","cellChange","append","prepend","minCellIndex","cellSizeChange","changedCellIndex","isPositioningSlider","prevSelectedElem","_createLazyload","lazyLoad","lazyImages","lazyCellImages","getCellLazyImages","img","LazyLoader","lazyloadAttr","srcAttr","srcsetAttr","lazySelector","imgs","flickity","load","src","srcset","onload","complete","onerror","require$$6","slideUpdateTarget","fade","slideTargetX","firstCellX","targetX","setOpacity","alpha","opacity","_createFade","fadeIndex","prevSelectedIndex","onSelectFade","onDragEndFade","onSettleFade","onActivateFade","onDeactivateFade","didDragEnd","fadedSlide","fadeSlides","indexes","getFadeIndexes","fadeSlideA","fadeSlideB","wrapDifference","fadeHideIndex","isNewHideIndex","getFadeDragWrapIndexes","getFadeDragLimitIndexes","distances","absDistances","closestIndex","dragIndex","diff","diffPlus","diffMinus","initSlider","triggers","from","dataset","sliderOptions"],"mappings":"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"}