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