{"version":3,"file":"442.b9932412892bc5cbeb85.js","mappings":"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","sources":["webpack://undocarbon/./node_modules/ev-emitter/ev-emitter.js","webpack://undocarbon/./node_modules/fizzy-ui-utils/utils.js","webpack://undocarbon/./node_modules/flickity/js/add-remove-cell.js","webpack://undocarbon/./node_modules/flickity/js/animate.js","webpack://undocarbon/./node_modules/flickity/js/cell.js","webpack://undocarbon/./node_modules/flickity/js/core.js","webpack://undocarbon/./node_modules/flickity/js/drag.js","webpack://undocarbon/./node_modules/flickity/js/imagesloaded.js","webpack://undocarbon/./node_modules/flickity/js/index.js","webpack://undocarbon/./node_modules/flickity/js/lazyload.js","webpack://undocarbon/./node_modules/flickity/js/page-dots.js","webpack://undocarbon/./node_modules/flickity/js/player.js","webpack://undocarbon/./node_modules/flickity/js/prev-next-button.js","webpack://undocarbon/./node_modules/flickity/js/slide.js","webpack://undocarbon/./node_modules/get-size/get-size.js","webpack://undocarbon/./node_modules/imagesloaded/imagesloaded.js","webpack://undocarbon/./node_modules/unidragger/unidragger.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 * 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","// 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","// 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.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","// 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","// 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","// 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","// 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","// 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","// 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","// 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","/*!\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 * 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 <picture> or self <img>\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","/*!\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"],"names":["global","factory","window","this","EvEmitter","proto","prototype","on","eventName","listener","events","_events","listeners","includes","push","once","onceEvents","_onceEvents","off","length","index","indexOf","splice","emitEvent","args","slice","onceListeners","apply","allOff","module","exports","utils","a","b","Object","assign","num","div","obj","Array","isArray","ary","elem","selector","parentNode","document","body","matches","querySelector","event","method","type","elems","makeArray","filter","HTMLElement","reduce","ffElems","childElems","querySelectorAll","concat","_class","methodName","threshold","timeoutName","clearTimeout","arguments","setTimeout","onDocReady","readyState","addEventListener","str","replace","match","$1","$2","toLowerCase","console","htmlInit","WidgetClass","namespace","docReady","dataAttr","toDashed","dataAttrElems","jQuery","forEach","options","attr","getAttribute","JSON","parse","error","className","instance","data","fizzyUIUtils","Flickity","insert","cells","_makeCells","len","undefined","fragment","createDocumentFragment","cell","appendChild","element","getCellsFragment","isAppend","slider","insertCellElement","insertBefore","endCells","_sizeCells","cellChange","positionSliderAtSelected","append","prepend","remove","getCells","minCellIndex","Math","min","removeFrom","cellSizeChange","getCell","getSize","changedCellIndex","prevSelectedElem","selectedElement","_positionCells","_updateWrapShiftCells","setGallerySize","selectedIndex","getCellSlideIndex","slides","select","animatePrototype","isAnimating","restingFrames","animate","applyDragForce","applySelectedAttraction","previousX","x","integratePhysics","positionSlider","settle","requestAnimationFrame","isWrapping","modulo","slideableWidth","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","cursorPosition","rightToLeft","translateX","getPositionValue","style","transform","firstSlide","positionX","target","progress","slidesWidth","dispatchEvent","selectedSlide","velocity","position","percentPosition","round","size","innerWidth","isPointerDown","isFreeScrolling","beforeGap","_shiftCells","beforeShiftCells","afterGap","afterShiftCells","gap","shift","cellShift","_wrapShiftCell","outerWidth","_renderCellPosition","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","selectedAttraction","Cell","cellClassName","classList","add","unselect","destroy","removeAttribute","setAttribute","_Flickity","Slide","getComputedStyle","GUID","instances","queryElement","getQueryElement","flickityGUID","option","$element","constructor","defaults","_create","accessibility","cellAlign","freeScrollFriction","friction","namespaceJQueryEvents","resize","create","watchCSS","id","guid","beginMargin","endMargin","viewport","createElement","_createSlider","focusableElems","call","activate","opts","isActive","cellElems","_filterFindCellElements","children","reloadCells","tabIndex","selectInitialIndex","isInitActivated","filterFindElements","cellSelector","positionCells","map","cellElem","getLastCell","getLastSlide","maxCellHeight","cellX","startCell","max","outerHeight","updateSlides","_containSlides","renderX","width","positionValue","slide","canCellFit","_getCanCellFit","i","addCell","slideWidth","firstMargin","updateTarget","updateSelectedSlide","groupCells","number","parseInt","percent","percentMatch","groupWidth","_init","reposition","setCellAlign","cellAlignShorthands","left","center","right","shorthand","height","adaptiveHeight","getIsWrapping","_unshiftCells","beforeGapX","lastIndex","_getGapCells","afterGapX","wrapAround","gapWidth","gapX","cellIndex","increment","contain","contentWidth","beginBound","endBound","emitArgs","$event","jQEvent","Event","trigger","unidraggerEvents","_emitEvent","clickedCell","getParentCell","isWrap","isInstant","_wrapSelect","prevIndex","startAnimation","isDragSelect","wrapIndex","delta","abs","backWrapDelta","forewardWrapDelta","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","initialIndex","queryCell","selectCell","value","cellSlide","find","Boolean","closest","getAdjacentCellElements","adjCount","slideIndex","uiChange","onresize","debounceMethod","isDragging","content","deactivate","onkeydown","activeElement","handler","keyboardHandlers","key","some","ArrowLeft","ArrowRight","focus","preventScroll","removeEventListener","removeData","jQueryBridget","setJQuery","jq","Unidragger","draggable","dragThreshold","getScrollPosition","pageXOffset","y","pageYOffset","touchActionValue","drag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handlePointerDown","handlePointerUp","handlePointerDone","handleDragStart","handleDragMove","handleDragEnd","handleStaticClick","handles","bindHandles","unbindHandles","toggle","bindActivePointerEvents","isTouchStart","isTouchPointer","pointerType","isFocusNode","preventDefault","blur","pointerDownScroll","hasDragStarted","moveVector","isTouchScrolling","dragStartPosition","pointer","previousDragX","direction","originBound","dragMoveTime","Date","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","dist","minDist","isWrapAround","wrap","floor","onscroll","scroll","scrollMoveX","scrollMoveY","pointerDone","imagesLoaded","image","img","lazyAttr","lazySrcAttr","lazySrcsetAttr","imgSelector","lazyLoad","handleLazyLoadComplete","onLazyLoadComplete","bind","getCellLazyImages","cellAttr","cellSrcAttr","cellSrcsetAttr","LazyLoader","onComplete","load","flat","handleEvent","src","srcset","onload","complete","onerror","PageDots","holder","dots","setDots","slidesLength","addDots","removeDots","count","newDots","fill","item","dot","textContent","updateSelected","selectedDot","pageDots","handlePageDotsClick","onPageDotsClick","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","autoPlay","onTick","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","hidden","tick","time","clear","timeout","stop","pause","unpause","pauseAutoPlayOnHover","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","svgURI","PrevNextButton","arrowShape","isPrevious","isLeft","label","disable","svg","createSVG","createElementNS","title","path","pathMovements","shape","x0","x1","x2","x3","y1","y2","getArrowMovements","enable","prevNextButtons","prevDirection","nextDirection","prevButton","nextButton","handlePrevButtonClick","handleNextButtonClick","activatePrevNextButtons","updatePrevNextButtons","updatePrevNextButton","button","disabledIndex","isEnabled","deactivatePrevNextButtons","lastCell","lastMargin","getStyleSize","parseFloat","isNaN","measurements","nodeType","display","innerHeight","measurement","getZeroSize","offsetWidth","offsetHeight","isBorderBox","boxSizing","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderWidth","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","styleWidth","styleHeight","$","ImagesLoaded","onAlways","queryElem","elements","getImages","jqDeferred","Deferred","check","images","addElementImages","elementNodeTypes","nodeName","addImage","background","addElementBackgroundImages","childImgs","child","reURL","LoadingImage","Background","url","Image","exec","backgroundImage","addBackground","loadingImage","progressedCount","hasAnyBroken","onProgress","message","isLoaded","notify","debug","log","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","crossOrigin","currentSrc","unbindEvents","makeJQueryPlugin","fn","promise","startEvent","activeEvents","PointerEvent","_bindHandles","bindMethod","touchAction","handle","unbindActivePointerEvents","withPointer","pointerId","pointerIdentifier","withTouch","touch","changedTouch","changedTouches","identifier","onmousedown","pointerDown","ontouchstart","onpointerdown","cursorNodes","clickTypes","isCursorNode","isClickType","isOkayElement","pointerDownPointer","pageX","pageY","onmousemove","pointerMove","onpointermove","ontouchmove","dragStart","dragMove","isPreventingClicks","onmouseup","pointerUp","onpointerup","ontouchend","dragEnd","staticClick","onpointercancel","ontouchcancel","pointerCancel","onclick","isMouseup","isIgnoringMouseUp"],"sourceRoot":""}