{"version":3,"file":"main-Ca9fApzH.js","sources":["../../../node_modules/ev-emitter/ev-emitter.js","../../../node_modules/get-size/get-size.js","../../../node_modules/fizzy-ui-utils/utils.js","../../../node_modules/flickity/js/cell.js","../../../node_modules/flickity/js/slide.js","../../../node_modules/flickity/js/animate.js","../../../node_modules/flickity/js/core.js","../../../node_modules/unidragger/unidragger.js","../../../node_modules/flickity/js/drag.js","../../../node_modules/flickity/js/prev-next-button.js","../../../node_modules/flickity/js/page-dots.js","../../../node_modules/flickity/js/player.js","../../../node_modules/flickity/js/add-remove-cell.js","../../../node_modules/flickity/js/lazyload.js","../../../node_modules/imagesloaded/imagesloaded.js","../../../node_modules/flickity/js/imagesloaded.js","../../../node_modules/flickity/js/index.js","../../../node_modules/flickity-fade/flickity-fade.js","../../../node_modules/bowser/src/constants.js","../../../node_modules/bowser/src/utils.js","../../../node_modules/bowser/src/parser-browsers.js","../../../node_modules/bowser/src/parser-os.js","../../../node_modules/bowser/src/parser-platforms.js","../../../node_modules/bowser/src/parser-engines.js","../../../node_modules/bowser/src/parser.js","../../../node_modules/bowser/src/bowser.js","../../../node_modules/svg-tag-names/index.js","../../../node_modules/dom-chef/index.js","../../../node_modules/@wagich/medium-zoom/dist/medium-zoom.esm.js","../../../Scripts/utils.ts","../../../Scripts/index.tsx"],"sourcesContent":["/**\n * EvEmitter v2.1.1\n * Lil' event emitter\n * MIT License\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\nfunction EvEmitter() {}\n\nlet proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // set events hash\n let events = this._events = this._events || {};\n // set listeners array\n let listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( !listeners.includes( listener ) ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) return this;\n\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n let onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n let onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n let index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n let listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) return this;\n\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice( 0 );\n args = args || [];\n // once stuff\n let onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( let listener of listeners ) {\n let isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n return this;\n};\n\nreturn EvEmitter;\n\n} ) );\n","/*!\n * Infinite Scroll v2.0.4\n * measure size of elements\n * MIT license\n */\n\n( function( window, factory ) {\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n} )( window, function factory() {\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n let num = parseFloat( value );\n // not a percent like '100%', and a number\n let isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\n// -------------------------- measurements -------------------------- //\n\nlet measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth',\n];\n\nlet measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n let size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0,\n };\n measurements.forEach( ( measurement ) => {\n size[ measurement ] = 0;\n } );\n return size;\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) elem = document.querySelector( elem );\n\n // do not proceed on non-objects\n let isElement = elem && typeof elem == 'object' && elem.nodeType;\n if ( !isElement ) return;\n\n let style = getComputedStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) return getZeroSize();\n\n let size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n let isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n measurements.forEach( ( measurement ) => {\n let value = style[ measurement ];\n let num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n } );\n\n let paddingWidth = size.paddingLeft + size.paddingRight;\n let paddingHeight = size.paddingTop + size.paddingBottom;\n let marginWidth = size.marginLeft + size.marginRight;\n let marginHeight = size.marginTop + size.marginBottom;\n let borderWidth = size.borderLeftWidth + size.borderRightWidth;\n let borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n // overwrite width and height if we can get it from style\n let styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBox ? 0 : paddingWidth + borderWidth );\n }\n\n let styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBox ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n} );\n","/**\n * Fizzy UI utils v3.0.0\n * MIT license\n */\n\n( function( global, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( global );\n } else {\n // browser global\n global.fizzyUIUtils = factory( global );\n }\n\n}( this, function factory( global ) {\n\nlet utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n return Object.assign( a, b );\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) return [];\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n let index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( elem.matches( selector ) ) return elem;\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n\n return elems\n // check that elem is an actual element\n .filter( ( elem ) => elem instanceof HTMLElement )\n .reduce( ( ffElems, elem ) => {\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return ffElems;\n }\n // filter & find items if we have a selector\n // filter\n if ( elem.matches( selector ) ) {\n ffElems.push( elem );\n }\n // find children\n let childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n ffElems = ffElems.concat( ...childElems );\n return ffElems;\n }, [] );\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n let method = _class.prototype[ methodName ];\n let timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n clearTimeout( this[ timeoutName ] );\n\n let args = arguments;\n this[ timeoutName ] = setTimeout( () => {\n method.apply( this, args );\n delete this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( onDocReady ) {\n let readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( onDocReady );\n } else {\n document.addEventListener( 'DOMContentLoaded', onDocReady );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://bit.ly/3oYLusc\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n } ).toLowerCase();\n};\n\nlet console = global.console;\n\n// allow user to initialize classes via [data-namespace] or .js-namespace class\n// htmlInit( Widget, 'widgetName' )\n// options are parsed from data-namespace-options\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n let dashedNamespace = utils.toDashed( namespace );\n let dataAttr = 'data-' + dashedNamespace;\n let dataAttrElems = document.querySelectorAll( `[${dataAttr}]` );\n let jQuery = global.jQuery;\n\n [ ...dataAttrElems ].forEach( ( elem ) => {\n let attr = elem.getAttribute( dataAttr );\n let options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( `Error parsing ${dataAttr} on ${elem.className}: ${error}` );\n }\n return;\n }\n // initialize\n let instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n } );\n\n } );\n};\n\n// ----- ----- //\n\nreturn utils;\n\n} ) );\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('get-size') );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory( window.getSize );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( getSize ) {\n\nconst cellClassName = 'flickity-cell';\n\nfunction Cell( elem ) {\n this.element = elem;\n this.element.classList.add( cellClassName );\n\n this.x = 0;\n this.unselect();\n}\n\nlet proto = Cell.prototype;\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.classList.remove( cellClassName );\n this.element.style.transform = '';\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\nproto.remove = function() {\n this.element.remove();\n};\n\nreturn Cell;\n\n} ) );\n","// slide\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function factory() {\n\nfunction Slide( beginMargin, endMargin, cellAlign ) {\n this.beginMargin = beginMargin;\n this.endMargin = endMargin;\n this.cellAlign = cellAlign;\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nlet proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length === 1 ) {\n this.x = cell.x; // x comes from first cell\n this.firstMargin = cell.size[ this.beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n let lastCell = this.getLastCell();\n let lastMargin = lastCell ? lastCell.size[ this.endMargin ] : 0;\n let slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( ( cell ) => cell.select() );\n};\n\nproto.unselect = function() {\n this.cells.forEach( ( cell ) => cell.unselect() );\n};\n\nproto.getCellElements = function() {\n return this.cells.map( ( cell ) => cell.element );\n};\n\nreturn Slide;\n\n} ) );\n","// animate\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('fizzy-ui-utils') );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory( window.fizzyUIUtils );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( utils ) {\n\n// -------------------------- animate -------------------------- //\n\nlet proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) return;\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n let previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) requestAnimationFrame( () => this.animate() );\n};\n\nproto.positionSlider = function() {\n let x = this.x;\n // wrap position around\n if ( this.isWrapping ) {\n x = utils.modulo( x, this.slideableWidth ) - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n if ( this.options.rightToLeft ) x = -x;\n let translateX = this.getPositionValue( x );\n // use 3D transforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n `translate3d(${translateX},0,0)` : `translateX(${translateX})`;\n};\n\nproto.dispatchScrollEvent = function() {\n let firstSlide = this.slides[0];\n if ( !firstSlide ) return;\n\n let positionX = -this.x - firstSlide.target;\n let progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) return;\n\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 ) + '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n let isResting = !this.isPointerDown &&\n Math.round( this.x * 100 ) === Math.round( previousX * 100 );\n if ( isResting ) this.restingFrames++;\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n let beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n let afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n cells.forEach( ( cell ) => {\n let cellShift = gap > 0 ? shift : 0;\n this._wrapShiftCell( cell, cellShift );\n gap -= cell.size.outerWidth;\n } );\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) return;\n\n cells.forEach( ( cell ) => this._wrapShiftCell( cell, 0 ) );\n};\n\n// @param {Integer} shift - 0, 1, or -1\nproto._wrapShiftCell = function( cell, shift ) {\n this._renderCellPosition( cell, cell.x + this.slideableWidth * shift );\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) return;\n\n // change the position to drag position by applying force\n let dragVelocity = this.dragX - this.x;\n let dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n let dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) return;\n\n let distance = this.selectedSlide.target * -1 - this.x;\n let force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n} ) );\n","// Flickity main\n/* eslint-disable max-params */\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate'),\n );\n } else {\n // browser global\n let _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n/* eslint-enable max-params */\n\n// vars\nconst { getComputedStyle, console } = window;\nlet { jQuery } = window;\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nlet GUID = 0;\n// internal store of all Flickity intances\nlet instances = {};\n\nfunction Flickity( element, options ) {\n let queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) console.error(`Bad element for Flickity: ${queryElement || element}`);\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n let instance = instances[ this.element.flickityGUID ];\n if ( instance ) instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = { ...this.constructor.defaults };\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true,\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.create = {};\n\nlet proto = Flickity.prototype;\n// inherit EventEmitter\nObject.assign( proto, EvEmitter.prototype );\n\nproto._create = function() {\n let { resize, watchCSS, rightToLeft } = this.options;\n // add id for Flickity.data\n let id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.beginMargin = rightToLeft ? 'marginRight' : 'marginLeft';\n this.endMargin = rightToLeft ? 'marginLeft' : 'marginRight';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n // used for keyboard navigation\n this.focusableElems = [ this.element ];\n\n if ( resize || watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( let eventName in this.options.on ) {\n let listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n for ( let method in Flickity.create ) {\n Flickity.create[ method ].call( this );\n }\n\n if ( watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n};\n\n/**\n * set options\n * @param {Object} opts - options to extend\n */\nproto.option = function( opts ) {\n Object.assign( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) return;\n\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n let cellElems = this._filterFindCellElements( this.element.children );\n this.slider.append( ...cellElems );\n this.viewport.append( this.slider );\n this.element.append( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n let slider = document.createElement('div');\n slider.className = 'flickity-slider';\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._updateWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {[Array, NodeList, HTMLElement]} elems - elements to make into cells\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n let cellElems = this._filterFindCellElements( elems );\n\n // create new Cells for collection\n return cellElems.map( ( cellElem ) => new Cell( cellElem ) );\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n let cellX = 0;\n // get cellX\n if ( index > 0 ) {\n let startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n\n this.cells.slice( index ).forEach( ( cell ) => {\n cell.x = cellX;\n this._renderCellPosition( cell, cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n } );\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = this.cells.length ?\n this.getLastSlide().target - this.slides[0].target : 0;\n};\n\nproto._renderCellPosition = function( cell, x ) {\n // render position of cell with in slider\n let sideOffset = this.options.rightToLeft ? -1 : 1;\n let renderX = x * sideOffset;\n if ( this.options.percentPosition ) renderX *= this.size.innerWidth / cell.size.width;\n let positionValue = this.getPositionValue( renderX );\n cell.element.style.transform = `translateX( ${positionValue} )`;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells - cells to size\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( ( cell ) => cell.getSize() );\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) return;\n\n let { beginMargin, endMargin } = this;\n let slide = new Slide( beginMargin, endMargin, this.cellAlign );\n this.slides.push( slide );\n\n let canCellFit = this._getCanCellFit();\n\n this.cells.forEach( ( cell, i ) => {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n let slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ endMargin ] );\n\n if ( canCellFit( i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( beginMargin, endMargin, this.cellAlign );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n } );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n let { groupCells } = this.options;\n if ( !groupCells ) return () => false;\n\n if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n let number = parseInt( groupCells, 10 );\n return ( i ) => ( i % number ) !== 0;\n }\n // default, group by width of slide\n let percent = 1;\n // parse '75%\n let percentMatch = typeof groupCells == 'string' && groupCells.match( /^(\\d+)%$/ );\n if ( percentMatch ) percent = parseInt( percentMatch[1], 10 ) / 100;\n let groupWidth = ( this.size.innerWidth + 1 ) * percent;\n return ( i, slideWidth ) => slideWidth <= groupWidth;\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nlet cellAlignShorthands = {\n left: 0,\n center: 0.5,\n right: 1,\n};\n\nproto.setCellAlign = function() {\n let { cellAlign, rightToLeft } = this.options;\n let shorthand = cellAlignShorthands[ cellAlign ];\n this.cellAlign = shorthand !== undefined ? shorthand : cellAlign;\n if ( rightToLeft ) this.cellAlign = 1 - this.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( !this.options.setGallerySize ) return;\n\n let height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = `${height}px`;\n};\n\nproto._updateWrapShiftCells = function() {\n // update isWrapping\n this.isWrapping = this.getIsWrapping();\n // only for wrap-around\n if ( !this.isWrapping ) return;\n\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n let beforeGapX = this.cursorPosition;\n let lastIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( beforeGapX, lastIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n let afterGapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( afterGapX, 0, 1 );\n};\n\nproto.getIsWrapping = function() {\n let { wrapAround } = this.options;\n if ( !wrapAround || this.slides.length < 2 ) return false;\n\n if ( wrapAround !== 'fill' ) return true;\n // check that slides can fit\n\n let gapWidth = this.slideableWidth - this.size.innerWidth;\n if ( gapWidth > this.size.innerWidth ) return true; // gap * 2x big, all good\n // check that content width - shifting cell is bigger than viewport width\n for ( let cell of this.cells ) {\n if ( cell.size.outerWidth > gapWidth ) return false;\n }\n return true;\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n let cells = [];\n while ( gapX > 0 ) {\n let cell = this.cells[ cellIndex ];\n if ( !cell ) break;\n\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain & wrap ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n let isContaining = this.options.contain && !this.isWrapping &&\n this.cells.length;\n if ( !isContaining ) return;\n\n let contentWidth = this.slideableWidth - this.getLastCell().size[ this.endMargin ];\n // content is less than gallery size\n let isContentSmaller = contentWidth < this.size.innerWidth;\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n this.slides.forEach( ( slide ) => {\n slide.target = contentWidth * this.cellAlign;\n } );\n } else {\n // contain to bounds\n let beginBound = this.cursorPosition + this.cells[0].size[ this.beginMargin ];\n let endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n this.slides.forEach( ( slide ) => {\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n } );\n }\n};\n\n// ----- events ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n let emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n let $event = type;\n if ( event ) {\n // create jQuery event\n let jQEvent = new jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\nconst unidraggerEvents = [\n 'dragStart',\n 'dragMove',\n 'dragEnd',\n 'pointerDown',\n 'pointerMove',\n 'pointerEnd',\n 'staticClick',\n];\n\nlet _emitEvent = proto.emitEvent;\nproto.emitEvent = function( eventName, args ) {\n if ( eventName === 'staticClick' ) {\n // add cellElem and cellIndex args to staticClick\n let clickedCell = this.getParentCell( args[0].target );\n let cellElem = clickedCell && clickedCell.element;\n let cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n args = args.concat( cellElem, cellIndex );\n }\n // do regular thing\n _emitEvent.call( this, eventName, args );\n // duck-punch in jQuery events for Unidragger events\n let isUnidraggerEvent = unidraggerEvents.includes( eventName );\n if ( !isUnidraggerEvent || !jQuery || !this.$element ) return;\n\n eventName += this.options.namespaceJQueryEvents ? '.flickity' : '';\n let event = args.shift( 0 );\n let jQEvent = new jQuery.Event( event );\n jQEvent.type = eventName;\n this.$element.trigger( jQEvent, args );\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) return;\n\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.isWrapping || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) return;\n\n let prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index !== prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n if ( !this.isWrapping ) return;\n\n const { selectedIndex, slideableWidth, slides: { length } } = this;\n // shift index for wrap, do not wrap dragSelect\n if ( !this.isDragSelect ) {\n let wrapIndex = utils.modulo( index, length );\n // go to shortest\n let delta = Math.abs( wrapIndex - selectedIndex );\n let backWrapDelta = Math.abs( ( wrapIndex + length ) - selectedIndex );\n let forewardWrapDelta = Math.abs( ( wrapIndex - length ) - selectedIndex );\n if ( backWrapDelta < delta ) {\n index += length;\n } else if ( forewardWrapDelta < delta ) {\n index -= length;\n }\n }\n\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= slideableWidth;\n } else if ( index >= length ) {\n this.x += slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n let slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) return;\n\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) this.selectedSlide.unselect();\n};\n\nproto.selectInitialIndex = function() {\n let initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n let cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n let index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, Number]} value - zero-based index or element to select\n * @param {Boolean} isWrap - enables wrapping around for extra index\n * @param {Boolean} isInstant - disables slide animation\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n let cell = this.queryCell( value );\n if ( !cell ) return;\n\n let index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slide that has cell\n let cellSlide = this.slides.find( ( slide ) => slide.cells.includes( cell ) );\n return this.slides.indexOf( cellSlide );\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem - matching cell element\n * @returns {Flickity.Cell} cell - matching cell\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( let cell of this.cells ) {\n if ( cell.element === elem ) return cell;\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {[Element, Array, NodeList]} elems - multiple elements\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n return elems.map( ( elem ) => this.getCell( elem ) ).filter( Boolean );\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( ( cell ) => cell.element );\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem - child element\n * @returns {Flickit.Cell} cell - parent cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n let cell = this.getCell( elem );\n if ( cell ) return cell;\n\n // try to get parent cell elem\n let closest = elem.closest('.flickity-slider > *');\n return this.getCell( closest );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) return this.selectedSlide.getCellElements();\n\n index = index === undefined ? this.selectedIndex : index;\n\n let len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements(); // get all\n }\n\n let cellElems = [];\n for ( let i = index - adjCount; i <= index + adjCount; i++ ) {\n let slideIndex = this.isWrapping ? utils.modulo( i, len ) : i;\n let slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {[Element, String, Number]} selector - element, selector string, or index\n * @returns {Flickity.Cell} - matching cell\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n // do not select invalid selectors from hash: #123, #/. #791\n let isSelectorString = typeof selector == 'string' && !selector.match( /^[#.]?[\\d/]/ );\n if ( isSelectorString ) {\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n // #1177 disable resize behavior when animating or dragging for iOS 15\n if ( !this.isActive || this.isAnimating || this.isDragging ) return;\n this.getSize();\n // wrap values\n if ( this.isWrapping ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._updateWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n let selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n if ( !this.options.watchCSS ) return;\n\n let afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.includes('flickity') ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n let { activeElement } = document;\n let handler = Flickity.keyboardHandlers[ event.key ];\n // only work if element is in focus\n if ( !this.options.accessibility || !activeElement || !handler ) return;\n\n let isFocused = this.focusableElems.some( ( elem ) => activeElement === elem );\n if ( isFocused ) handler.call( this );\n};\n\nFlickity.keyboardHandlers = {\n ArrowLeft: function() {\n this.uiChange();\n let leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this[ leftMethod ]();\n },\n ArrowRight: function() {\n this.uiChange();\n let rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n this.element.focus({ preventScroll: true });\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) return;\n\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( ( cell ) => cell.destroy() );\n this.viewport.remove();\n // move child elements back into element\n this.element.append( ...this.slider.children );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nObject.assign( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {[Element, String]} elem - element or selector string\n * @returns {Flickity} - Flickity instance\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n if ( elem ) return instances[ elem.flickityGUID ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nlet { jQueryBridget } = window;\nif ( jQuery && jQueryBridget ) {\n jQueryBridget( 'flickity', Flickity, jQuery );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Unidragger v3.0.1\n * Draggable base class\n * MIT license\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.EvEmitter,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( window, EvEmitter ) {\n\nfunction Unidragger() {}\n\n// inherit EvEmitter\nlet proto = Unidragger.prototype = Object.create( EvEmitter.prototype );\n\n// ----- bind start ----- //\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nlet startEvent, activeEvents;\nif ( 'ontouchstart' in window ) {\n // HACK prefer Touch Events as you can preventDefault on touchstart to\n // disable scroll in iOS & mobile Chrome metafizzy/flickity#1177\n startEvent = 'touchstart';\n activeEvents = [ 'touchmove', 'touchend', 'touchcancel' ];\n} else if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n activeEvents = [ 'pointermove', 'pointerup', 'pointercancel' ];\n} else {\n // mouse events\n startEvent = 'mousedown';\n activeEvents = [ 'mousemove', 'mouseup' ];\n}\n\n// prototype so it can be overwriteable by Flickity\nproto.touchActionValue = 'none';\n\nproto.bindHandles = function() {\n this._bindHandles( 'addEventListener', this.touchActionValue );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( 'removeEventListener', '' );\n};\n\n/**\n * Add or remove start event\n * @param {String} bindMethod - addEventListener or removeEventListener\n * @param {String} touchAction - value for touch-action CSS property\n */\nproto._bindHandles = function( bindMethod, touchAction ) {\n this.handles.forEach( ( handle ) => {\n handle[ bindMethod ]( startEvent, this );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) handle.style.touchAction = touchAction;\n } );\n};\n\nproto.bindActivePointerEvents = function() {\n activeEvents.forEach( ( eventName ) => {\n window.addEventListener( eventName, this );\n } );\n};\n\nproto.unbindActivePointerEvents = function() {\n activeEvents.forEach( ( eventName ) => {\n window.removeEventListener( eventName, this );\n } );\n};\n\n// ----- event handler helpers ----- //\n\n// trigger method with matching pointer\nproto.withPointer = function( methodName, event ) {\n if ( event.pointerId === this.pointerIdentifier ) {\n this[ methodName ]( event, event );\n }\n};\n\n// trigger method with matching touch\nproto.withTouch = function( methodName, event ) {\n let touch;\n for ( let changedTouch of event.changedTouches ) {\n if ( changedTouch.identifier === this.pointerIdentifier ) {\n touch = changedTouch;\n }\n }\n if ( touch ) this[ methodName ]( event, touch );\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n this.pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this.pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this.pointerDown( event, event );\n};\n\n// nodes that have text fields\nconst cursorNodes = [ 'TEXTAREA', 'INPUT', 'SELECT', 'OPTION' ];\n// input types that do not have text fields\nconst clickTypes = [ 'radio', 'checkbox', 'button', 'submit', 'image', 'file' ];\n\n/**\n * any time you set `event, pointer` it refers to:\n * @param {Event} event\n * @param {Event | Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n // dismiss multi-touch taps, right clicks, and clicks on text fields\n let isCursorNode = cursorNodes.includes( event.target.nodeName );\n let isClickType = clickTypes.includes( event.target.type );\n let isOkayElement = !isCursorNode || isClickType;\n let isOkay = !this.isPointerDown && !event.button && isOkayElement;\n if ( !isOkay ) return;\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n // track position for move\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n this.bindActivePointerEvents();\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// ----- move ----- //\n\nproto.onmousemove = function( event ) {\n this.pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n this.withPointer( 'pointerMove', event );\n};\n\nproto.ontouchmove = function( event ) {\n this.withTouch( 'pointerMove', event );\n};\n\nproto.pointerMove = function( event, pointer ) {\n let moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY,\n };\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n // start drag if pointer has moved far enough to start drag\n let isDragStarting = !this.isDragging && this.hasDragStarted( moveVector );\n if ( isDragStarting ) this.dragStart( event, pointer );\n if ( this.isDragging ) this.dragMove( event, pointer, moveVector );\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- drag ----- //\n\nproto.dragStart = function( event, pointer ) {\n this.isDragging = true;\n this.isPreventingClicks = true; // set flag to prevent clicks\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// ----- end ----- //\n\nproto.onmouseup = function( event ) {\n this.pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n this.withPointer( 'pointerUp', event );\n};\n\nproto.ontouchend = function( event ) {\n this.withTouch( 'pointerUp', event );\n};\n\nproto.pointerUp = function( event, pointer ) {\n this.pointerDone();\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n\n if ( this.isDragging ) {\n this.dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this.staticClick( event, pointer );\n }\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.isDragging = false; // reset flag\n // re-enable clicking async\n setTimeout( () => delete this.isPreventingClicks );\n\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// triggered on pointer up & pointer cancel\nproto.pointerDone = function() {\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n this.unbindActivePointerEvents();\n this.emitEvent('pointerDone');\n};\n\n// ----- cancel ----- //\n\nproto.onpointercancel = function( event ) {\n this.withPointer( 'pointerCancel', event );\n};\n\nproto.ontouchcancel = function( event ) {\n this.withTouch( 'pointerCancel', event );\n};\n\nproto.pointerCancel = function( event, pointer ) {\n this.pointerDone();\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- click ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) event.preventDefault();\n};\n\n// triggered after pointer down & up with no/tiny movement\nproto.staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n let isMouseup = event.type === 'mouseup';\n if ( isMouseup && this.isIgnoringMouseUp ) return;\n\n this.emitEvent( 'staticClick', [ event, pointer ] );\n\n // set flag for emulated clicks 300ms after touchend\n if ( isMouseup ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 400ms\n setTimeout( () => {\n delete this.isIgnoringMouseUp;\n }, 400 );\n }\n};\n\n// ----- ----- //\n\nreturn Unidragger;\n\n} ) );\n","// drag\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./core'),\n require('unidragger'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( window, Flickity, Unidragger, utils ) {\n\n// ----- defaults ----- //\n\nObject.assign( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n} );\n\n// -------------------------- drag prototype -------------------------- //\n\nlet proto = Flickity.prototype;\nObject.assign( proto, Unidragger.prototype ); // inherit Unidragger\nproto.touchActionValue = '';\n\n// -------------------------- -------------------------- //\n\nFlickity.create.drag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n this.on( 'pointerDown', this.handlePointerDown );\n this.on( 'pointerUp', this.handlePointerUp );\n this.on( 'pointerDown', this.handlePointerDone );\n this.on( 'dragStart', this.handleDragStart );\n this.on( 'dragMove', this.handleDragMove );\n this.on( 'dragEnd', this.handleDragEnd );\n this.on( 'staticClick', this.handleStaticClick );\n // TODO updateDraggable on resize? if groupCells & slides change\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable === '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n this.element.classList.toggle( 'is-draggable', this.isDraggable );\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.handlePointerDown = function( event ) {\n if ( !this.isDraggable ) {\n // proceed for staticClick\n this.bindActivePointerEvents( event );\n return;\n }\n\n let isTouchStart = event.type === 'touchstart';\n let isTouchPointer = event.pointerType === 'touch';\n let isFocusNode = event.target.matches('input, textarea, select');\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) event.preventDefault();\n if ( !isFocusNode ) this.focus();\n // blur\n if ( document.activeElement !== this.element ) document.activeElement.blur();\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n this.bindActivePointerEvents( event );\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.handlePointerUp = function() {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n};\n\nproto.handlePointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.handleDragStart = function() {\n if ( !this.isDraggable ) return;\n\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n};\n\nproto.handleDragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) return;\n\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n let direction = this.options.rightToLeft ? -1 : 1;\n // wrap around move. #589\n if ( this.isWrapping ) moveVector.x %= this.slideableWidth;\n let dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.isWrapping ) {\n // slow drag\n let originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n let endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n this.dragMoveTime = new Date();\n};\n\nproto.handleDragEnd = function() {\n if ( !this.isDraggable ) return;\n\n let { freeScroll } = this.options;\n if ( freeScroll ) this.isFreeScrolling = true;\n // set selectedIndex based on where flick will end up\n let index = this.dragEndRestingSelect();\n\n if ( freeScroll && !this.isWrapping ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n let restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !freeScroll && index === this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.isWrapping;\n this.select( index );\n delete this.isDragSelect;\n};\n\nproto.dragEndRestingSelect = function() {\n let restingX = this.getRestingPosition();\n // how far away from selected slide\n let distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n let positiveResting = this._getClosestResting( restingX, distance, 1 );\n let negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n return positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n let index = this.selectedIndex;\n let minDistance = Infinity;\n let condition = this.options.contain && !this.isWrapping ?\n // if containing, keep going if distance is equal to minDistance\n ( dist, minDist ) => dist <= minDist :\n ( dist, minDist ) => dist < minDist;\n\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) break;\n\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment,\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x - horizontal position\n * @param {Integer} index - slide index\n * @returns {Number} - slide distance\n */\nproto.getSlideDistance = function( x, index ) {\n let len = this.slides.length;\n // wrap around if at least 2 slides\n let isWrapAround = this.options.wrapAround && len > 1;\n let slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n let slide = this.slides[ slideIndex ];\n if ( !slide ) return null;\n\n // add distance for wrap-around slides\n let wrap = isWrapAround ? this.slideableWidth * Math.floor( index/len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n let distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n let delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n let scroll = getScrollPosition();\n let scrollMoveX = this.pointerDownScroll.x - scroll.x;\n let scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this.pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset,\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('./core') );\n } else {\n // browser global\n factory( window.Flickity );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity ) {\n\nconst svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( increment, direction, arrowShape ) {\n this.increment = increment;\n this.direction = direction;\n this.isPrevious = increment === 'previous';\n this.isLeft = direction === 'left';\n this._create( arrowShape );\n}\n\nPrevNextButton.prototype._create = function( arrowShape ) {\n // properties\n let element = this.element = document.createElement('button');\n element.className = `flickity-button flickity-prev-next-button ${this.increment}`;\n let label = this.isPrevious ? 'Previous' : 'Next';\n // prevent button from submitting form https://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n element.setAttribute( 'aria-label', label );\n // init as disabled\n this.disable();\n // create arrow\n let svg = this.createSVG( label, arrowShape );\n element.append( svg );\n};\n\nPrevNextButton.prototype.createSVG = function( label, arrowShape ) {\n let svg = document.createElementNS( svgURI, 'svg' );\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n // add title #1189\n let title = document.createElementNS( svgURI, 'title' );\n title.append( label );\n // add path\n let path = document.createElementNS( svgURI, 'path' );\n let pathMovements = getArrowMovements( arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180)' );\n }\n svg.append( title, path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) return shape;\n\n let { x0, x1, x2, x3, y1, y2 } = shape;\n\n // create movement string\n return `M ${x0}, 50\n L ${x1}, ${y1 + 50}\n L ${x2}, ${y2 + 50}\n L ${x3}, 50\n L ${x2}, ${50 - y2}\n L ${x1}, ${50 - y1}\n Z`;\n}\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n this.element.removeAttribute('disabled');\n};\n\nPrevNextButton.prototype.disable = function() {\n this.element.setAttribute( 'disabled', true );\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nObject.assign( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30,\n },\n} );\n\nFlickity.create.prevNextButtons = function() {\n if ( !this.options.prevNextButtons ) return;\n\n let { rightToLeft, arrowShape } = this.options;\n let prevDirection = rightToLeft ? 'right' : 'left';\n let nextDirection = rightToLeft ? 'left' : 'right';\n this.prevButton = new PrevNextButton( 'previous', prevDirection, arrowShape );\n this.nextButton = new PrevNextButton( 'next', nextDirection, arrowShape );\n this.focusableElems.push( this.prevButton.element );\n this.focusableElems.push( this.nextButton.element );\n\n this.handlePrevButtonClick = () => {\n this.uiChange();\n this.previous();\n };\n\n this.handleNextButtonClick = () => {\n this.uiChange();\n this.next();\n };\n\n this.on( 'activate', this.activatePrevNextButtons );\n this.on( 'select', this.updatePrevNextButtons );\n};\n\nlet proto = Flickity.prototype;\n\nproto.updatePrevNextButtons = function() {\n let lastIndex = this.slides.length ? this.slides.length - 1 : 0;\n this.updatePrevNextButton( this.prevButton, 0 );\n this.updatePrevNextButton( this.nextButton, lastIndex );\n};\n\nproto.updatePrevNextButton = function( button, disabledIndex ) {\n // enable is wrapAround and at least 2 slides\n if ( this.isWrapping && this.slides.length > 1 ) {\n button.enable();\n return;\n }\n\n let isEnabled = this.selectedIndex !== disabledIndex;\n button[ isEnabled ? 'enable' : 'disable' ]();\n // if disabling button that is focused,\n // shift focus to element to maintain keyboard accessibility\n let isDisabledFocused = !isEnabled && document.activeElement === button.element;\n if ( isDisabledFocused ) this.focus();\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.element.addEventListener( 'click', this.handlePrevButtonClick );\n this.nextButton.element.addEventListener( 'click', this.handleNextButtonClick );\n this.element.append( this.prevButton.element, this.nextButton.element );\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.element.remove();\n this.nextButton.element.remove();\n this.prevButton.element.removeEventListener( 'click', this.handlePrevButtonClick );\n this.nextButton.element.removeEventListener( 'click', this.handleNextButtonClick );\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n} ) );\n","// page dots\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\nfunction PageDots() {\n // create holder element\n this.holder = document.createElement('div');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n}\n\nPageDots.prototype.setDots = function( slidesLength ) {\n // get difference between number of slides and number of dots\n let delta = slidesLength - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n let newDots = new Array( count ).fill()\n .map( ( item, i ) => {\n let dot = document.createElement('button');\n dot.setAttribute( 'type', 'button' );\n let num = i + 1 + this.dots.length;\n dot.className = 'flickity-page-dot';\n dot.textContent = `View slide ${num}`;\n return dot;\n } );\n\n this.holder.append( ...newDots );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n let removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( ( dot ) => dot.remove() );\n};\n\nPageDots.prototype.updateSelected = function( index ) {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.classList.remove('is-selected');\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) return;\n\n this.selectedDot = this.dots[ index ];\n this.selectedDot.classList.add('is-selected');\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nObject.assign( Flickity.defaults, {\n pageDots: true,\n} );\n\nFlickity.create.pageDots = function() {\n if ( !this.options.pageDots ) return;\n\n this.pageDots = new PageDots();\n this.handlePageDotsClick = this.onPageDotsClick.bind( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nlet proto = Flickity.prototype;\n\nproto.activatePageDots = function() {\n this.pageDots.setDots( this.slides.length );\n this.focusableElems.push( ...this.pageDots.dots );\n this.pageDots.holder.addEventListener( 'click', this.handlePageDotsClick );\n this.element.append( this.pageDots.holder );\n};\n\nproto.onPageDotsClick = function( event ) {\n let index = this.pageDots.dots.indexOf( event.target );\n if ( index === -1 ) return; // only dot clicks\n\n this.uiChange();\n this.select( index );\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected( this.selectedIndex );\n};\n\nproto.updatePageDots = function() {\n this.pageDots.dots.forEach( ( dot ) => {\n utils.removeFrom( this.focusableElems, dot );\n } );\n this.pageDots.setDots( this.slides.length );\n this.focusableElems.push( ...this.pageDots.dots );\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.holder.remove();\n this.pageDots.holder.removeEventListener( 'click', this.handlePageDotsClick );\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n} ) );\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( require('./core') );\n } else {\n // browser global\n factory( window.Flickity );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity ) {\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( autoPlay, onTick ) {\n this.autoPlay = autoPlay;\n this.onTick = onTick;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state === 'playing' ) return;\n\n // do not play if page is hidden, start playing when page is visible\n let isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state !== 'playing' ) return;\n\n // default to 3 seconds\n let time = typeof this.autoPlay == 'number' ? this.autoPlay : 3000;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( () => {\n this.onTick();\n this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state === 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state === 'paused' ) this.play();\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n let isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nObject.assign( Flickity.defaults, {\n pauseAutoPlayOnHover: true,\n} );\n\nFlickity.create.player = function() {\n this.player = new Player( this.options.autoPlay, () => {\n this.next( true );\n } );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nlet proto = Flickity.prototype;\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) return;\n\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) return;\n\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n} ) );\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n let fragment = document.createDocumentFragment();\n cells.forEach( ( cell ) => fragment.appendChild( cell.element ) );\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nlet proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {[Element, Array, NodeList]} elems - Elements to insert\n * @param {Integer} index - Zero-based number to insert\n */\nproto.insert = function( elems, index ) {\n let cells = this._makeCells( elems );\n if ( !cells || !cells.length ) return;\n\n let len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n let fragment = getCellsFragment( cells );\n // append to slider\n let isAppend = index === len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n let insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n let endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index );\n this.positionSliderAtSelected();\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {[Element, Array, NodeList]} elems - ELements to remove\n */\nproto.remove = function( elems ) {\n let cells = this.getCells( elems );\n if ( !cells || !cells.length ) return;\n\n let minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( ( cell ) => {\n cell.remove();\n let index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n } );\n\n this.cellChange( minCellIndex );\n this.positionSliderAtSelected();\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n let cell = this.getCell( elem );\n if ( !cell ) return;\n\n cell.getSize();\n\n let index = this.cells.indexOf( cell );\n this.cellChange( index );\n // do not position slider after lazy load\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex ) {\n let prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._updateWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex, try to maintain position & select previous selected element\n let cell = this.getCell( prevSelectedElem );\n if ( cell ) this.selectedIndex = this.getCellSlideIndex( cell );\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n} ) );\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\nconst lazyAttr = 'data-flickity-lazyload';\nconst lazySrcAttr = `${lazyAttr}-src`;\nconst lazySrcsetAttr = `${lazyAttr}-srcset`;\nconst imgSelector = `img[${lazyAttr}], img[${lazySrcAttr}], ` +\n `img[${lazySrcsetAttr}], source[${lazySrcsetAttr}]`;\n\nFlickity.create.lazyLoad = function() {\n this.on( 'select', this.lazyLoad );\n\n this.handleLazyLoadComplete = this.onLazyLoadComplete.bind( this );\n};\n\nlet proto = Flickity.prototype;\n\nproto.lazyLoad = function() {\n let { lazyLoad } = this.options;\n if ( !lazyLoad ) return;\n\n // get adjacent cells, use lazyLoad option for adjacent count\n let adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n // lazy load images\n this.getAdjacentCellElements( adjCount )\n .map( getCellLazyImages )\n .flat()\n .forEach( ( img ) => new LazyLoader( img, this.handleLazyLoadComplete ) );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.matches('img') ) {\n let cellAttr = cellElem.getAttribute( lazyAttr );\n let cellSrcAttr = cellElem.getAttribute( lazySrcAttr );\n let cellSrcsetAttr = cellElem.getAttribute( lazySrcsetAttr );\n if ( cellAttr || cellSrcAttr || cellSrcsetAttr ) {\n return cellElem;\n }\n }\n // select lazy images in cell\n return [ ...cellElem.querySelectorAll( imgSelector ) ];\n}\n\nproto.onLazyLoadComplete = function( img, event ) {\n let cell = this.getParentCell( img );\n let cellElem = cell && cell.element;\n this.cellSizeChange( cellElem );\n\n this.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n * @param {Image} img - Image element\n * @param {Function} onComplete - callback function\n */\nfunction LazyLoader( img, onComplete ) {\n this.img = img;\n this.onComplete = onComplete;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n let src = this.img.getAttribute( lazyAttr ) ||\n this.img.getAttribute( lazySrcAttr );\n let srcset = this.img.getAttribute( lazySrcsetAttr );\n // set src & serset\n this.img.src = src;\n if ( srcset ) this.img.setAttribute( 'srcset', srcset );\n // remove attr\n this.img.removeAttribute( lazyAttr );\n this.img.removeAttribute( lazySrcAttr );\n this.img.removeAttribute( lazySrcsetAttr );\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n let mediaElem = this.img.parentNode.matches('picture') ? this.img.parentNode : this.img;\n mediaElem.classList.add( className );\n\n this.onComplete( this.img, event );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n} ) );\n","/*!\n * imagesLoaded v5.0.0\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory( window, require('ev-emitter') );\n } else {\n // browser global\n window.imagesLoaded = factory( window, window.EvEmitter );\n }\n\n} )( typeof window !== 'undefined' ? window : this,\n function factory( window, EvEmitter ) {\n\nlet $ = window.jQuery;\nlet console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n // use object if already an array\n if ( Array.isArray( obj ) ) return obj;\n\n let isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n // convert nodeList to array\n if ( isArrayLike ) return [ ...obj ];\n\n // array of single index\n return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {[Array, Element, NodeList, String]} elem\n * @param {[Object, Function]} options - if function, use as callback\n * @param {Function} onAlways - callback function\n * @returns {ImagesLoaded}\n */\nfunction ImagesLoaded( elem, options, onAlways ) {\n // coerce ImagesLoaded() without new, to be new ImagesLoaded()\n if ( !( this instanceof ImagesLoaded ) ) {\n return new ImagesLoaded( elem, options, onAlways );\n }\n // use elem as selector string\n let queryElem = elem;\n if ( typeof elem == 'string' ) {\n queryElem = document.querySelectorAll( elem );\n }\n // bail if bad element\n if ( !queryElem ) {\n console.error(`Bad element for imagesLoaded ${queryElem || elem}`);\n return;\n }\n\n this.elements = makeArray( queryElem );\n this.options = {};\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n Object.assign( this.options, options );\n }\n\n if ( onAlways ) this.on( 'always', onAlways );\n\n this.getImages();\n // add jQuery Deferred object\n if ( $ ) this.jqDeferred = new $.Deferred();\n\n // HACK check async to allow time to bind listeners\n setTimeout( this.check.bind( this ) );\n}\n\nImagesLoaded.prototype = Object.create( EvEmitter.prototype );\n\nImagesLoaded.prototype.getImages = function() {\n this.images = [];\n\n // filter & find items if we have an item selector\n this.elements.forEach( this.addElementImages, this );\n};\n\nconst elementNodeTypes = [ 1, 9, 11 ];\n\n/**\n * @param {Node} elem\n */\nImagesLoaded.prototype.addElementImages = function( elem ) {\n // filter siblings\n if ( elem.nodeName === 'IMG' ) {\n this.addImage( elem );\n }\n // get background image on element\n if ( this.options.background === true ) {\n this.addElementBackgroundImages( elem );\n }\n\n // find children\n // no non-element nodes, #143\n let { nodeType } = elem;\n if ( !nodeType || !elementNodeTypes.includes( nodeType ) ) return;\n\n let childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( let img of childImgs ) {\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n let children = elem.querySelectorAll( this.options.background );\n for ( let child of children ) {\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nconst reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n let style = getComputedStyle( elem );\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n if ( !style ) return;\n\n // get url inside url(\"...\")\n let matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n let url = matches && matches[2];\n if ( url ) {\n this.addBackground( url, elem );\n }\n matches = reURL.exec( style.backgroundImage );\n }\n};\n\n/**\n * @param {Image} img\n */\nImagesLoaded.prototype.addImage = function( img ) {\n let loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n let background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n this.progressedCount = 0;\n this.hasAnyBroken = false;\n // complete if no images\n if ( !this.images.length ) {\n this.complete();\n return;\n }\n\n /* eslint-disable-next-line func-style */\n let onProgress = ( image, elem, message ) => {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( () => {\n this.progress( image, elem, message );\n } );\n };\n\n this.images.forEach( function( loadingImage ) {\n loadingImage.once( 'progress', onProgress );\n loadingImage.check();\n } );\n};\n\nImagesLoaded.prototype.progress = function( image, elem, message ) {\n this.progressedCount++;\n this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;\n // progress event\n this.emitEvent( 'progress', [ this, image, elem ] );\n if ( this.jqDeferred && this.jqDeferred.notify ) {\n this.jqDeferred.notify( this, image );\n }\n // check if completed\n if ( this.progressedCount === this.images.length ) {\n this.complete();\n }\n\n if ( this.options.debug && console ) {\n console.log( `progress: ${message}`, image, elem );\n }\n};\n\nImagesLoaded.prototype.complete = function() {\n let eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n let jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';\n this.jqDeferred[ jqMethod ]( this );\n }\n};\n\n// -------------------------- -------------------------- //\n\nfunction LoadingImage( img ) {\n this.img = img;\n}\n\nLoadingImage.prototype = Object.create( EvEmitter.prototype );\n\nLoadingImage.prototype.check = function() {\n // If complete is true and browser supports natural sizes,\n // try to check for image status manually.\n let isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n // report based on naturalWidth\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n return;\n }\n\n // If none of the checks above matched, simulate loading on detached element.\n this.proxyImage = new Image();\n // add crossOrigin attribute. #204\n if ( this.img.crossOrigin ) {\n this.proxyImage.crossOrigin = this.img.crossOrigin;\n }\n this.proxyImage.addEventListener( 'load', this );\n this.proxyImage.addEventListener( 'error', this );\n // bind to image as well for Firefox. #191\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.proxyImage.src = this.img.currentSrc || this.img.src;\n};\n\nLoadingImage.prototype.getIsImageComplete = function() {\n // check for non-zero, non-undefined naturalWidth\n // fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671\n return this.img.complete && this.img.naturalWidth;\n};\n\nLoadingImage.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n let { parentNode } = this.img;\n // emit progress with parent or self \n let elem = parentNode.nodeName === 'PICTURE' ? parentNode : this.img;\n this.emitEvent( 'progress', [ this, elem, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n let method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\nLoadingImage.prototype.onload = function() {\n this.confirm( true, 'onload' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.onerror = function() {\n this.confirm( false, 'onerror' );\n this.unbindEvents();\n};\n\nLoadingImage.prototype.unbindEvents = function() {\n this.proxyImage.removeEventListener( 'load', this );\n this.proxyImage.removeEventListener( 'error', this );\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\n// -------------------------- Background -------------------------- //\n\nfunction Background( url, element ) {\n this.url = url;\n this.element = element;\n this.img = new Image();\n}\n\n// inherit LoadingImage prototype\nBackground.prototype = Object.create( LoadingImage.prototype );\n\nBackground.prototype.check = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n this.img.src = this.url;\n // check if image is already complete\n let isComplete = this.getIsImageComplete();\n if ( isComplete ) {\n this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );\n this.unbindEvents();\n }\n};\n\nBackground.prototype.unbindEvents = function() {\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n};\n\nBackground.prototype.confirm = function( isLoaded, message ) {\n this.isLoaded = isLoaded;\n this.emitEvent( 'progress', [ this, this.element, message ] );\n};\n\n// -------------------------- jQuery -------------------------- //\n\nImagesLoaded.makeJQueryPlugin = function( jQuery ) {\n jQuery = jQuery || window.jQuery;\n if ( !jQuery ) return;\n\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, onAlways ) {\n let instance = new ImagesLoaded( this, options, onAlways );\n return instance.jqDeferred.promise( $( this ) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n} );\n","// imagesloaded\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./core'),\n require('imagesloaded'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.imagesLoaded,\n );\n }\n\n}( typeof window != 'undefined' ? window : this,\n function factory( Flickity, imagesLoaded ) {\n\nFlickity.create.imagesLoaded = function() {\n this.on( 'activate', this.imagesLoaded );\n};\n\nFlickity.prototype.imagesLoaded = function() {\n if ( !this.options.imagesLoaded ) return;\n\n let onImagesLoadedProgress = ( instance, image ) => {\n let cell = this.getParentCell( image.img );\n this.cellSizeChange( cell && cell.element );\n if ( !this.options.freeScroll ) this.positionSliderAtSelected();\n };\n imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\n};\n\nreturn Flickity;\n\n} ) );\n","/*!\n * Flickity v3.0.0\n * Touch, responsive, flickable carousels\n *\n * Licensed GPLv3 for open source use\n * or Flickity Commercial License for commercial use\n *\n * https://flickity.metafizzy.co\n * Copyright 2015-2022 Metafizzy\n */\n\nif ( typeof module == 'object' && module.exports ) {\n const Flickity = require('./core');\n require('./drag');\n require('./prev-next-button');\n require('./page-dots');\n require('./player');\n require('./add-remove-cell');\n require('./lazyload');\n require('./imagesloaded');\n\n module.exports = Flickity;\n}\n","/**\n * Flickity fade v2.0.0\n * Fade between Flickity slides\n */\n\n( function( window, factory ) {\n // universal module definition\n if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity'),\n require('fizzy-ui-utils'),\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils,\n );\n }\n\n}( typeof window != 'undefined' ? window : this, function factory( Flickity, utils ) {\n\n// ---- Slide ---- //\n\nlet Slide = Flickity.Slide;\n\nSlide.prototype.renderFadePosition = function() {\n};\n\nSlide.prototype.setOpacity = function( alpha ) {\n this.cells.forEach( ( cell ) => {\n cell.element.style.opacity = alpha;\n } );\n};\n\n// ---- Flickity ---- //\n\nFlickity.create.fade = function() {\n this.fadeIndex = this.selectedIndex;\n this.prevSelectedIndex = this.selectedIndex;\n this.on( 'select', this.onSelectFade );\n this.on( 'dragEnd', this.onDragEndFade );\n this.on( 'settle', this.onSettleFade );\n this.on( 'activate', this.onActivateFade );\n this.on( 'deactivate', this.onDeactivateFade );\n};\n\nlet proto = Flickity.prototype;\n\nlet updateSlides = proto.updateSlides;\nproto.updateSlides = function() {\n updateSlides.apply( this, arguments );\n if ( !this.options.fade ) return;\n\n this.slides.forEach( ( slide, i ) => {\n // position cells at selected target\n let slideTargetX = slide.target - slide.x;\n let firstCellX = slide.cells[0].x;\n slide.cells.forEach( ( cell ) => {\n let targetX = cell.x - firstCellX - slideTargetX;\n this._renderCellPosition( cell, targetX );\n } );\n // set initial opacity\n let alpha = i === this.selectedIndex ? 1 : 0;\n slide.setOpacity( alpha );\n } );\n};\n\n/* ---- events ---- */\n\nproto.onSelectFade = function() {\n // in case of resize, keep fadeIndex within current count\n this.fadeIndex = Math.min( this.prevSelectedIndex, this.slides.length - 1 );\n this.prevSelectedIndex = this.selectedIndex;\n};\n\nproto.onSettleFade = function() {\n delete this.didDragEnd;\n if ( !this.options.fade ) return;\n\n // set full and 0 opacity on selected & faded slides\n this.selectedSlide.setOpacity( 1 );\n let fadedSlide = this.slides[ this.fadeIndex ];\n if ( fadedSlide && this.fadeIndex !== this.selectedIndex ) {\n this.slides[ this.fadeIndex ].setOpacity( 0 );\n }\n};\n\nproto.onDragEndFade = function() {\n // set flag\n this.didDragEnd = true;\n};\n\nproto.onActivateFade = function() {\n if ( this.options.fade ) {\n this.element.classList.add('is-fade');\n }\n};\n\nproto.onDeactivateFade = function() {\n if ( !this.options.fade ) return;\n\n this.element.classList.remove('is-fade');\n // reset opacity\n this.slides.forEach( ( slide ) => {\n slide.setOpacity('');\n } );\n};\n\n/* ---- position & fading ---- */\n\nlet positionSlider = proto.positionSlider;\nproto.positionSlider = function() {\n if ( !this.options.fade ) {\n positionSlider.apply( this, arguments );\n return;\n }\n\n this.fadeSlides();\n this.dispatchScrollEvent();\n};\n\nlet positionSliderAtSelected = proto.positionSliderAtSelected;\nproto.positionSliderAtSelected = function() {\n if ( this.options.fade ) {\n // position fade slider at origin\n this.setTranslateX( 0 );\n }\n positionSliderAtSelected.apply( this, arguments );\n};\n\nproto.fadeSlides = function() {\n if ( this.slides.length < 2 ) return;\n\n // get slides to fade-in & fade-out\n let indexes = this.getFadeIndexes();\n let fadeSlideA = this.slides[ indexes.a ];\n let fadeSlideB = this.slides[ indexes.b ];\n let distance = this.wrapDifference( fadeSlideA.target, fadeSlideB.target );\n let progress = this.wrapDifference( fadeSlideA.target, -this.x );\n progress /= distance;\n\n fadeSlideA.setOpacity( 1 - progress );\n fadeSlideB.setOpacity( progress );\n\n // hide previous slide\n let fadeHideIndex = indexes.a;\n if ( this.isDragging ) {\n fadeHideIndex = progress > 0.5 ? indexes.a : indexes.b;\n }\n let isNewHideIndex = this.fadeHideIndex !== undefined &&\n this.fadeHideIndex !== fadeHideIndex &&\n this.fadeHideIndex !== indexes.a &&\n this.fadeHideIndex !== indexes.b;\n if ( isNewHideIndex ) {\n // new fadeHideSlide set, hide previous\n this.slides[ this.fadeHideIndex ].setOpacity( 0 );\n }\n this.fadeHideIndex = fadeHideIndex;\n};\n\nproto.getFadeIndexes = function() {\n if ( !this.isDragging && !this.didDragEnd ) {\n return {\n a: this.fadeIndex,\n b: this.selectedIndex,\n };\n }\n if ( this.options.wrapAround ) {\n return this.getFadeDragWrapIndexes();\n } else {\n return this.getFadeDragLimitIndexes();\n }\n};\n\nproto.getFadeDragWrapIndexes = function() {\n let distances = this.slides.map( function( slide, i ) {\n return this.getSlideDistance( -this.x, i );\n }, this );\n let absDistances = distances.map( function( distance ) {\n return Math.abs( distance );\n } );\n let minDistance = Math.min( ...absDistances );\n let closestIndex = absDistances.indexOf( minDistance );\n let distance = distances[ closestIndex ];\n let len = this.slides.length;\n\n let delta = distance >= 0 ? 1 : -1;\n return {\n a: closestIndex,\n b: utils.modulo( closestIndex + delta, len ),\n };\n};\n\nproto.getFadeDragLimitIndexes = function() {\n // calculate closest previous slide\n let dragIndex = 0;\n for ( let i = 0; i < this.slides.length - 1; i++ ) {\n let slide = this.slides[i];\n if ( -this.x < slide.target ) {\n break;\n }\n dragIndex = i;\n }\n return {\n a: dragIndex,\n b: dragIndex + 1,\n };\n};\n\nproto.wrapDifference = function( a, b ) {\n let diff = b - a;\n if ( !this.options.wrapAround ) return diff;\n\n let diffPlus = diff + this.slideableWidth;\n let diffMinus = diff - this.slideableWidth;\n if ( Math.abs( diffPlus ) < Math.abs( diff ) ) {\n diff = diffPlus;\n }\n if ( Math.abs( diffMinus ) < Math.abs( diff ) ) {\n diff = diffMinus;\n }\n return diff;\n};\n\n// ---- wrapAround ---- //\n\nlet _updateWrapShiftCells = proto._updateWrapShiftCells;\nproto._updateWrapShiftCells = function() {\n if ( this.options.fade ) {\n // update isWrapping\n this.isWrapping = this.getIsWrapping();\n } else {\n _updateWrapShiftCells.apply( this, arguments );\n }\n};\n\nlet shiftWrapCells = proto.shiftWrapCells;\nproto.shiftWrapCells = function() {\n if ( !this.options.fade ) {\n shiftWrapCells.apply( this, arguments );\n }\n};\n\nreturn Flickity;\n\n} ) );\n","// NOTE: this list must be up-to-date with browsers listed in\n// test/acceptance/useragentstrings.yml\nexport const BROWSER_ALIASES_MAP = {\n 'Amazon Silk': 'amazon_silk',\n 'Android Browser': 'android',\n Bada: 'bada',\n BlackBerry: 'blackberry',\n Chrome: 'chrome',\n Chromium: 'chromium',\n Electron: 'electron',\n Epiphany: 'epiphany',\n Firefox: 'firefox',\n Focus: 'focus',\n Generic: 'generic',\n 'Google Search': 'google_search',\n Googlebot: 'googlebot',\n 'Internet Explorer': 'ie',\n 'K-Meleon': 'k_meleon',\n Maxthon: 'maxthon',\n 'Microsoft Edge': 'edge',\n 'MZ Browser': 'mz',\n 'NAVER Whale Browser': 'naver',\n Opera: 'opera',\n 'Opera Coast': 'opera_coast',\n PhantomJS: 'phantomjs',\n Puffin: 'puffin',\n QupZilla: 'qupzilla',\n QQ: 'qq',\n QQLite: 'qqlite',\n Safari: 'safari',\n Sailfish: 'sailfish',\n 'Samsung Internet for Android': 'samsung_internet',\n SeaMonkey: 'seamonkey',\n Sleipnir: 'sleipnir',\n Swing: 'swing',\n Tizen: 'tizen',\n 'UC Browser': 'uc',\n Vivaldi: 'vivaldi',\n 'WebOS Browser': 'webos',\n WeChat: 'wechat',\n 'Yandex Browser': 'yandex',\n Roku: 'roku',\n};\n\nexport const BROWSER_MAP = {\n amazon_silk: 'Amazon Silk',\n android: 'Android Browser',\n bada: 'Bada',\n blackberry: 'BlackBerry',\n chrome: 'Chrome',\n chromium: 'Chromium',\n electron: 'Electron',\n epiphany: 'Epiphany',\n firefox: 'Firefox',\n focus: 'Focus',\n generic: 'Generic',\n googlebot: 'Googlebot',\n google_search: 'Google Search',\n ie: 'Internet Explorer',\n k_meleon: 'K-Meleon',\n maxthon: 'Maxthon',\n edge: 'Microsoft Edge',\n mz: 'MZ Browser',\n naver: 'NAVER Whale Browser',\n opera: 'Opera',\n opera_coast: 'Opera Coast',\n phantomjs: 'PhantomJS',\n puffin: 'Puffin',\n qupzilla: 'QupZilla',\n qq: 'QQ Browser',\n qqlite: 'QQ Browser Lite',\n safari: 'Safari',\n sailfish: 'Sailfish',\n samsung_internet: 'Samsung Internet for Android',\n seamonkey: 'SeaMonkey',\n sleipnir: 'Sleipnir',\n swing: 'Swing',\n tizen: 'Tizen',\n uc: 'UC Browser',\n vivaldi: 'Vivaldi',\n webos: 'WebOS Browser',\n wechat: 'WeChat',\n yandex: 'Yandex Browser',\n};\n\nexport const PLATFORMS_MAP = {\n tablet: 'tablet',\n mobile: 'mobile',\n desktop: 'desktop',\n tv: 'tv',\n};\n\nexport const OS_MAP = {\n WindowsPhone: 'Windows Phone',\n Windows: 'Windows',\n MacOS: 'macOS',\n iOS: 'iOS',\n Android: 'Android',\n WebOS: 'WebOS',\n BlackBerry: 'BlackBerry',\n Bada: 'Bada',\n Tizen: 'Tizen',\n Linux: 'Linux',\n ChromeOS: 'Chrome OS',\n PlayStation4: 'PlayStation 4',\n Roku: 'Roku',\n};\n\nexport const ENGINE_MAP = {\n EdgeHTML: 'EdgeHTML',\n Blink: 'Blink',\n Trident: 'Trident',\n Presto: 'Presto',\n Gecko: 'Gecko',\n WebKit: 'WebKit',\n};\n","import { BROWSER_MAP, BROWSER_ALIASES_MAP } from './constants.js';\n\nexport default class Utils {\n /**\n * Get first matched item for a string\n * @param {RegExp} regexp\n * @param {String} ua\n * @return {Array|{index: number, input: string}|*|boolean|string}\n */\n static getFirstMatch(regexp, ua) {\n const match = ua.match(regexp);\n return (match && match.length > 0 && match[1]) || '';\n }\n\n /**\n * Get second matched item for a string\n * @param regexp\n * @param {String} ua\n * @return {Array|{index: number, input: string}|*|boolean|string}\n */\n static getSecondMatch(regexp, ua) {\n const match = ua.match(regexp);\n return (match && match.length > 1 && match[2]) || '';\n }\n\n /**\n * Match a regexp and return a constant or undefined\n * @param {RegExp} regexp\n * @param {String} ua\n * @param {*} _const Any const that will be returned if regexp matches the string\n * @return {*}\n */\n static matchAndReturnConst(regexp, ua, _const) {\n if (regexp.test(ua)) {\n return _const;\n }\n return void (0);\n }\n\n static getWindowsVersionName(version) {\n switch (version) {\n case 'NT': return 'NT';\n case 'XP': return 'XP';\n case 'NT 5.0': return '2000';\n case 'NT 5.1': return 'XP';\n case 'NT 5.2': return '2003';\n case 'NT 6.0': return 'Vista';\n case 'NT 6.1': return '7';\n case 'NT 6.2': return '8';\n case 'NT 6.3': return '8.1';\n case 'NT 10.0': return '10';\n default: return undefined;\n }\n }\n\n /**\n * Get macOS version name\n * 10.5 - Leopard\n * 10.6 - Snow Leopard\n * 10.7 - Lion\n * 10.8 - Mountain Lion\n * 10.9 - Mavericks\n * 10.10 - Yosemite\n * 10.11 - El Capitan\n * 10.12 - Sierra\n * 10.13 - High Sierra\n * 10.14 - Mojave\n * 10.15 - Catalina\n *\n * @example\n * getMacOSVersionName(\"10.14\") // 'Mojave'\n *\n * @param {string} version\n * @return {string} versionName\n */\n static getMacOSVersionName(version) {\n const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n v.push(0);\n if (v[0] !== 10) return undefined;\n switch (v[1]) {\n case 5: return 'Leopard';\n case 6: return 'Snow Leopard';\n case 7: return 'Lion';\n case 8: return 'Mountain Lion';\n case 9: return 'Mavericks';\n case 10: return 'Yosemite';\n case 11: return 'El Capitan';\n case 12: return 'Sierra';\n case 13: return 'High Sierra';\n case 14: return 'Mojave';\n case 15: return 'Catalina';\n default: return undefined;\n }\n }\n\n /**\n * Get Android version name\n * 1.5 - Cupcake\n * 1.6 - Donut\n * 2.0 - Eclair\n * 2.1 - Eclair\n * 2.2 - Froyo\n * 2.x - Gingerbread\n * 3.x - Honeycomb\n * 4.0 - Ice Cream Sandwich\n * 4.1 - Jelly Bean\n * 4.4 - KitKat\n * 5.x - Lollipop\n * 6.x - Marshmallow\n * 7.x - Nougat\n * 8.x - Oreo\n * 9.x - Pie\n *\n * @example\n * getAndroidVersionName(\"7.0\") // 'Nougat'\n *\n * @param {string} version\n * @return {string} versionName\n */\n static getAndroidVersionName(version) {\n const v = version.split('.').splice(0, 2).map(s => parseInt(s, 10) || 0);\n v.push(0);\n if (v[0] === 1 && v[1] < 5) return undefined;\n if (v[0] === 1 && v[1] < 6) return 'Cupcake';\n if (v[0] === 1 && v[1] >= 6) return 'Donut';\n if (v[0] === 2 && v[1] < 2) return 'Eclair';\n if (v[0] === 2 && v[1] === 2) return 'Froyo';\n if (v[0] === 2 && v[1] > 2) return 'Gingerbread';\n if (v[0] === 3) return 'Honeycomb';\n if (v[0] === 4 && v[1] < 1) return 'Ice Cream Sandwich';\n if (v[0] === 4 && v[1] < 4) return 'Jelly Bean';\n if (v[0] === 4 && v[1] >= 4) return 'KitKat';\n if (v[0] === 5) return 'Lollipop';\n if (v[0] === 6) return 'Marshmallow';\n if (v[0] === 7) return 'Nougat';\n if (v[0] === 8) return 'Oreo';\n if (v[0] === 9) return 'Pie';\n return undefined;\n }\n\n /**\n * Get version precisions count\n *\n * @example\n * getVersionPrecision(\"1.10.3\") // 3\n *\n * @param {string} version\n * @return {number}\n */\n static getVersionPrecision(version) {\n return version.split('.').length;\n }\n\n /**\n * Calculate browser version weight\n *\n * @example\n * compareVersions('1.10.2.1', '1.8.2.1.90') // 1\n * compareVersions('1.010.2.1', '1.09.2.1.90'); // 1\n * compareVersions('1.10.2.1', '1.10.2.1'); // 0\n * compareVersions('1.10.2.1', '1.0800.2'); // -1\n * compareVersions('1.10.2.1', '1.10', true); // 0\n *\n * @param {String} versionA versions versions to compare\n * @param {String} versionB versions versions to compare\n * @param {boolean} [isLoose] enable loose comparison\n * @return {Number} comparison result: -1 when versionA is lower,\n * 1 when versionA is bigger, 0 when both equal\n */\n /* eslint consistent-return: 1 */\n static compareVersions(versionA, versionB, isLoose = false) {\n // 1) get common precision for both versions, for example for \"10.0\" and \"9\" it should be 2\n const versionAPrecision = Utils.getVersionPrecision(versionA);\n const versionBPrecision = Utils.getVersionPrecision(versionB);\n\n let precision = Math.max(versionAPrecision, versionBPrecision);\n let lastPrecision = 0;\n\n const chunks = Utils.map([versionA, versionB], (version) => {\n const delta = precision - Utils.getVersionPrecision(version);\n\n // 2) \"9\" -> \"9.0\" (for precision = 2)\n const _version = version + new Array(delta + 1).join('.0');\n\n // 3) \"9.0\" -> [\"000000000\"\", \"000000009\"]\n return Utils.map(_version.split('.'), chunk => new Array(20 - chunk.length).join('0') + chunk).reverse();\n });\n\n // adjust precision for loose comparison\n if (isLoose) {\n lastPrecision = precision - Math.min(versionAPrecision, versionBPrecision);\n }\n\n // iterate in reverse order by reversed chunks array\n precision -= 1;\n while (precision >= lastPrecision) {\n // 4) compare: \"000000009\" > \"000000010\" = false (but \"9\" > \"10\" = true)\n if (chunks[0][precision] > chunks[1][precision]) {\n return 1;\n }\n\n if (chunks[0][precision] === chunks[1][precision]) {\n if (precision === lastPrecision) {\n // all version chunks are same\n return 0;\n }\n\n precision -= 1;\n } else if (chunks[0][precision] < chunks[1][precision]) {\n return -1;\n }\n }\n\n return undefined;\n }\n\n /**\n * Array::map polyfill\n *\n * @param {Array} arr\n * @param {Function} iterator\n * @return {Array}\n */\n static map(arr, iterator) {\n const result = [];\n let i;\n if (Array.prototype.map) {\n return Array.prototype.map.call(arr, iterator);\n }\n for (i = 0; i < arr.length; i += 1) {\n result.push(iterator(arr[i]));\n }\n return result;\n }\n\n /**\n * Array::find polyfill\n *\n * @param {Array} arr\n * @param {Function} predicate\n * @return {Array}\n */\n static find(arr, predicate) {\n let i;\n let l;\n if (Array.prototype.find) {\n return Array.prototype.find.call(arr, predicate);\n }\n for (i = 0, l = arr.length; i < l; i += 1) {\n const value = arr[i];\n if (predicate(value, i)) {\n return value;\n }\n }\n return undefined;\n }\n\n /**\n * Object::assign polyfill\n *\n * @param {Object} obj\n * @param {Object} ...objs\n * @return {Object}\n */\n static assign(obj, ...assigners) {\n const result = obj;\n let i;\n let l;\n if (Object.assign) {\n return Object.assign(obj, ...assigners);\n }\n for (i = 0, l = assigners.length; i < l; i += 1) {\n const assigner = assigners[i];\n if (typeof assigner === 'object' && assigner !== null) {\n const keys = Object.keys(assigner);\n keys.forEach((key) => {\n result[key] = assigner[key];\n });\n }\n }\n return obj;\n }\n\n /**\n * Get short version/alias for a browser name\n *\n * @example\n * getBrowserAlias('Microsoft Edge') // edge\n *\n * @param {string} browserName\n * @return {string}\n */\n static getBrowserAlias(browserName) {\n return BROWSER_ALIASES_MAP[browserName];\n }\n\n /**\n * Get short version/alias for a browser name\n *\n * @example\n * getBrowserAlias('edge') // Microsoft Edge\n *\n * @param {string} browserAlias\n * @return {string}\n */\n static getBrowserTypeByAlias(browserAlias) {\n return BROWSER_MAP[browserAlias] || '';\n }\n}\n","/**\n * Browsers' descriptors\n *\n * The idea of descriptors is simple. You should know about them two simple things:\n * 1. Every descriptor has a method or property called `test` and a `describe` method.\n * 2. Order of descriptors is important.\n *\n * More details:\n * 1. Method or property `test` serves as a way to detect whether the UA string\n * matches some certain browser or not. The `describe` method helps to make a result\n * object with params that show some browser-specific things: name, version, etc.\n * 2. Order of descriptors is important because a Parser goes through them one by one\n * in course. For example, if you insert Chrome's descriptor as the first one,\n * more then a half of browsers will be described as Chrome, because they will pass\n * the Chrome descriptor's test.\n *\n * Descriptor's `test` could be a property with an array of RegExps, where every RegExp\n * will be applied to a UA string to test it whether it matches or not.\n * If a descriptor has two or more regexps in the `test` array it tests them one by one\n * with a logical sum operation. Parser stops if it has found any RegExp that matches the UA.\n *\n * Or `test` could be a method. In that case it gets a Parser instance and should\n * return true/false to get the Parser know if this browser descriptor matches the UA or not.\n */\n\nimport Utils from './utils.js';\n\nconst commonVersionIdentifier = /version\\/(\\d+(\\.?_?\\d+)+)/i;\n\nconst browsersList = [\n /* Googlebot */\n {\n test: [/googlebot/i],\n describe(ua) {\n const browser = {\n name: 'Googlebot',\n };\n const version = Utils.getFirstMatch(/googlebot\\/(\\d+(\\.\\d+))/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Opera < 13.0 */\n {\n test: [/opera/i],\n describe(ua) {\n const browser = {\n name: 'Opera',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:opera)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Opera > 13.0 */\n {\n test: [/opr\\/|opios/i],\n describe(ua) {\n const browser = {\n name: 'Opera',\n };\n const version = Utils.getFirstMatch(/(?:opr|opios)[\\s/](\\S+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/SamsungBrowser/i],\n describe(ua) {\n const browser = {\n name: 'Samsung Internet for Android',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:SamsungBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/Whale/i],\n describe(ua) {\n const browser = {\n name: 'NAVER Whale Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:whale)[\\s/](\\d+(?:\\.\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/MZBrowser/i],\n describe(ua) {\n const browser = {\n name: 'MZ Browser',\n };\n const version = Utils.getFirstMatch(/(?:MZBrowser)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/focus/i],\n describe(ua) {\n const browser = {\n name: 'Focus',\n };\n const version = Utils.getFirstMatch(/(?:focus)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/swing/i],\n describe(ua) {\n const browser = {\n name: 'Swing',\n };\n const version = Utils.getFirstMatch(/(?:swing)[\\s/](\\d+(?:\\.\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/coast/i],\n describe(ua) {\n const browser = {\n name: 'Opera Coast',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:coast)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/opt\\/\\d+(?:.?_?\\d+)+/i],\n describe(ua) {\n const browser = {\n name: 'Opera Touch',\n };\n const version = Utils.getFirstMatch(/(?:opt)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/yabrowser/i],\n describe(ua) {\n const browser = {\n name: 'Yandex Browser',\n };\n const version = Utils.getFirstMatch(/(?:yabrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/ucbrowser/i],\n describe(ua) {\n const browser = {\n name: 'UC Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:ucbrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/Maxthon|mxios/i],\n describe(ua) {\n const browser = {\n name: 'Maxthon',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:Maxthon|mxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/epiphany/i],\n describe(ua) {\n const browser = {\n name: 'Epiphany',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:epiphany)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/puffin/i],\n describe(ua) {\n const browser = {\n name: 'Puffin',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:puffin)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/sleipnir/i],\n describe(ua) {\n const browser = {\n name: 'Sleipnir',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:sleipnir)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/k-meleon/i],\n describe(ua) {\n const browser = {\n name: 'K-Meleon',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/(?:k-meleon)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/micromessenger/i],\n describe(ua) {\n const browser = {\n name: 'WeChat',\n };\n const version = Utils.getFirstMatch(/(?:micromessenger)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/qqbrowser/i],\n describe(ua) {\n const browser = {\n name: (/qqbrowserlite/i).test(ua) ? 'QQ Browser Lite' : 'QQ Browser',\n };\n const version = Utils.getFirstMatch(/(?:qqbrowserlite|qqbrowser)[/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/msie|trident/i],\n describe(ua) {\n const browser = {\n name: 'Internet Explorer',\n };\n const version = Utils.getFirstMatch(/(?:msie |rv:)(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/\\sedg\\//i],\n describe(ua) {\n const browser = {\n name: 'Microsoft Edge',\n };\n\n const version = Utils.getFirstMatch(/\\sedg\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/edg([ea]|ios)/i],\n describe(ua) {\n const browser = {\n name: 'Microsoft Edge',\n };\n\n const version = Utils.getSecondMatch(/edg([ea]|ios)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/vivaldi/i],\n describe(ua) {\n const browser = {\n name: 'Vivaldi',\n };\n const version = Utils.getFirstMatch(/vivaldi\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/seamonkey/i],\n describe(ua) {\n const browser = {\n name: 'SeaMonkey',\n };\n const version = Utils.getFirstMatch(/seamonkey\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/sailfish/i],\n describe(ua) {\n const browser = {\n name: 'Sailfish',\n };\n\n const version = Utils.getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/silk/i],\n describe(ua) {\n const browser = {\n name: 'Amazon Silk',\n };\n const version = Utils.getFirstMatch(/silk\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/phantom/i],\n describe(ua) {\n const browser = {\n name: 'PhantomJS',\n };\n const version = Utils.getFirstMatch(/phantomjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/slimerjs/i],\n describe(ua) {\n const browser = {\n name: 'SlimerJS',\n };\n const version = Utils.getFirstMatch(/slimerjs\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe(ua) {\n const browser = {\n name: 'BlackBerry',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/(web|hpw)[o0]s/i],\n describe(ua) {\n const browser = {\n name: 'WebOS Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua) || Utils.getFirstMatch(/w(?:eb)?[o0]sbrowser\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/bada/i],\n describe(ua) {\n const browser = {\n name: 'Bada',\n };\n const version = Utils.getFirstMatch(/dolfin\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/tizen/i],\n describe(ua) {\n const browser = {\n name: 'Tizen',\n };\n const version = Utils.getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/qupzilla/i],\n describe(ua) {\n const browser = {\n name: 'QupZilla',\n };\n const version = Utils.getFirstMatch(/(?:qupzilla)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/firefox|iceweasel|fxios/i],\n describe(ua) {\n const browser = {\n name: 'Firefox',\n };\n const version = Utils.getFirstMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/electron/i],\n describe(ua) {\n const browser = {\n name: 'Electron',\n };\n const version = Utils.getFirstMatch(/(?:electron)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/MiuiBrowser/i],\n describe(ua) {\n const browser = {\n name: 'Miui',\n };\n const version = Utils.getFirstMatch(/(?:MiuiBrowser)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/chromium/i],\n describe(ua) {\n const browser = {\n name: 'Chromium',\n };\n const version = Utils.getFirstMatch(/(?:chromium)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua) || Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/chrome|crios|crmo/i],\n describe(ua) {\n const browser = {\n name: 'Chrome',\n };\n const version = Utils.getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n {\n test: [/GSA/i],\n describe(ua) {\n const browser = {\n name: 'Google Search',\n };\n const version = Utils.getFirstMatch(/(?:GSA)\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Android Browser */\n {\n test(parser) {\n const notLikeAndroid = !parser.test(/like android/i);\n const butAndroid = parser.test(/android/i);\n return notLikeAndroid && butAndroid;\n },\n describe(ua) {\n const browser = {\n name: 'Android Browser',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* PlayStation 4 */\n {\n test: [/playstation 4/i],\n describe(ua) {\n const browser = {\n name: 'PlayStation 4',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Safari */\n {\n test: [/safari|applewebkit/i],\n describe(ua) {\n const browser = {\n name: 'Safari',\n };\n const version = Utils.getFirstMatch(commonVersionIdentifier, ua);\n\n if (version) {\n browser.version = version;\n }\n\n return browser;\n },\n },\n\n /* Something else */\n {\n test: [/.*/i],\n describe(ua) {\n /* Here we try to make sure that there are explicit details about the device\n * in order to decide what regexp exactly we want to apply\n * (as there is a specific decision based on that conclusion)\n */\n const regexpWithoutDeviceSpec = /^(.*)\\/(.*) /;\n const regexpWithDeviceSpec = /^(.*)\\/(.*)[ \\t]\\((.*)/;\n const hasDeviceSpec = ua.search('\\\\(') !== -1;\n const regexp = hasDeviceSpec ? regexpWithDeviceSpec : regexpWithoutDeviceSpec;\n return {\n name: Utils.getFirstMatch(regexp, ua),\n version: Utils.getSecondMatch(regexp, ua),\n };\n },\n },\n];\n\nexport default browsersList;\n","import Utils from './utils.js';\nimport { OS_MAP } from './constants.js';\n\nexport default [\n /* Roku */\n {\n test: [/Roku\\/DVP/],\n describe(ua) {\n const version = Utils.getFirstMatch(/Roku\\/DVP-(\\d+\\.\\d+)/i, ua);\n return {\n name: OS_MAP.Roku,\n version,\n };\n },\n },\n\n /* Windows Phone */\n {\n test: [/windows phone/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i, ua);\n return {\n name: OS_MAP.WindowsPhone,\n version,\n };\n },\n },\n\n /* Windows */\n {\n test: [/windows /i],\n describe(ua) {\n const version = Utils.getFirstMatch(/Windows ((NT|XP)( \\d\\d?.\\d)?)/i, ua);\n const versionName = Utils.getWindowsVersionName(version);\n\n return {\n name: OS_MAP.Windows,\n version,\n versionName,\n };\n },\n },\n\n /* Firefox on iPad */\n {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe(ua) {\n const result = {\n name: OS_MAP.iOS,\n };\n const version = Utils.getSecondMatch(/(Version\\/)(\\d[\\d.]+)/, ua);\n if (version) {\n result.version = version;\n }\n return result;\n },\n },\n\n /* macOS */\n {\n test: [/macintosh/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/mac os x (\\d+(\\.?_?\\d+)+)/i, ua).replace(/[_\\s]/g, '.');\n const versionName = Utils.getMacOSVersionName(version);\n\n const os = {\n name: OS_MAP.MacOS,\n version,\n };\n if (versionName) {\n os.versionName = versionName;\n }\n return os;\n },\n },\n\n /* iOS */\n {\n test: [/(ipod|iphone|ipad)/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i, ua).replace(/[_\\s]/g, '.');\n\n return {\n name: OS_MAP.iOS,\n version,\n };\n },\n },\n\n /* Android */\n {\n test(parser) {\n const notLikeAndroid = !parser.test(/like android/i);\n const butAndroid = parser.test(/android/i);\n return notLikeAndroid && butAndroid;\n },\n describe(ua) {\n const version = Utils.getFirstMatch(/android[\\s/-](\\d+(\\.\\d+)*)/i, ua);\n const versionName = Utils.getAndroidVersionName(version);\n const os = {\n name: OS_MAP.Android,\n version,\n };\n if (versionName) {\n os.versionName = versionName;\n }\n return os;\n },\n },\n\n /* WebOS */\n {\n test: [/(web|hpw)[o0]s/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/(?:web|hpw)[o0]s\\/(\\d+(\\.\\d+)*)/i, ua);\n const os = {\n name: OS_MAP.WebOS,\n };\n\n if (version && version.length) {\n os.version = version;\n }\n return os;\n },\n },\n\n /* BlackBerry */\n {\n test: [/blackberry|\\bbb\\d+/i, /rim\\stablet/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i, ua)\n || Utils.getFirstMatch(/blackberry\\d+\\/(\\d+([_\\s]\\d+)*)/i, ua)\n || Utils.getFirstMatch(/\\bbb(\\d+)/i, ua);\n\n return {\n name: OS_MAP.BlackBerry,\n version,\n };\n },\n },\n\n /* Bada */\n {\n test: [/bada/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i, ua);\n\n return {\n name: OS_MAP.Bada,\n version,\n };\n },\n },\n\n /* Tizen */\n {\n test: [/tizen/i],\n describe(ua) {\n const version = Utils.getFirstMatch(/tizen[/\\s](\\d+(\\.\\d+)*)/i, ua);\n\n return {\n name: OS_MAP.Tizen,\n version,\n };\n },\n },\n\n /* Linux */\n {\n test: [/linux/i],\n describe() {\n return {\n name: OS_MAP.Linux,\n };\n },\n },\n\n /* Chrome OS */\n {\n test: [/CrOS/],\n describe() {\n return {\n name: OS_MAP.ChromeOS,\n };\n },\n },\n\n /* Playstation 4 */\n {\n test: [/PlayStation 4/],\n describe(ua) {\n const version = Utils.getFirstMatch(/PlayStation 4[/\\s](\\d+(\\.\\d+)*)/i, ua);\n return {\n name: OS_MAP.PlayStation4,\n version,\n };\n },\n },\n];\n","import Utils from './utils.js';\nimport { PLATFORMS_MAP } from './constants.js';\n\n/*\n * Tablets go first since usually they have more specific\n * signs to detect.\n */\n\nexport default [\n /* Googlebot */\n {\n test: [/googlebot/i],\n describe() {\n return {\n type: 'bot',\n vendor: 'Google',\n };\n },\n },\n\n /* Huawei */\n {\n test: [/huawei/i],\n describe(ua) {\n const model = Utils.getFirstMatch(/(can-l01)/i, ua) && 'Nova';\n const platform = {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Huawei',\n };\n if (model) {\n platform.model = model;\n }\n return platform;\n },\n },\n\n /* Nexus Tablet */\n {\n test: [/nexus\\s*(?:7|8|9|10).*/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Nexus',\n };\n },\n },\n\n /* iPad */\n {\n test: [/ipad/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Apple',\n model: 'iPad',\n };\n },\n },\n\n /* Firefox on iPad */\n {\n test: [/Macintosh(.*?) FxiOS(.*?)\\//],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Apple',\n model: 'iPad',\n };\n },\n },\n\n /* Amazon Kindle Fire */\n {\n test: [/kftt build/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Amazon',\n model: 'Kindle Fire HD 7',\n };\n },\n },\n\n /* Another Amazon Tablet with Silk */\n {\n test: [/silk/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n vendor: 'Amazon',\n };\n },\n },\n\n /* Tablet */\n {\n test: [/tablet(?! pc)/i],\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n };\n },\n },\n\n /* iPod/iPhone */\n {\n test(parser) {\n const iDevice = parser.test(/ipod|iphone/i);\n const likeIDevice = parser.test(/like (ipod|iphone)/i);\n return iDevice && !likeIDevice;\n },\n describe(ua) {\n const model = Utils.getFirstMatch(/(ipod|iphone)/i, ua);\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Apple',\n model,\n };\n },\n },\n\n /* Nexus Mobile */\n {\n test: [/nexus\\s*[0-6].*/i, /galaxy nexus/i],\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Nexus',\n };\n },\n },\n\n /* Mobile */\n {\n test: [/[^-]mobi/i],\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* BlackBerry */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'blackberry';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'BlackBerry',\n };\n },\n },\n\n /* Bada */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'bada';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* Windows Phone */\n {\n test(parser) {\n return parser.getBrowserName() === 'windows phone';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n vendor: 'Microsoft',\n };\n },\n },\n\n /* Android Tablet */\n {\n test(parser) {\n const osMajorVersion = Number(String(parser.getOSVersion()).split('.')[0]);\n return parser.getOSName(true) === 'android' && (osMajorVersion >= 3);\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tablet,\n };\n },\n },\n\n /* Android Mobile */\n {\n test(parser) {\n return parser.getOSName(true) === 'android';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.mobile,\n };\n },\n },\n\n /* desktop */\n {\n test(parser) {\n return parser.getOSName(true) === 'macos';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n vendor: 'Apple',\n };\n },\n },\n\n /* Windows */\n {\n test(parser) {\n return parser.getOSName(true) === 'windows';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n };\n },\n },\n\n /* Linux */\n {\n test(parser) {\n return parser.getOSName(true) === 'linux';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.desktop,\n };\n },\n },\n\n /* PlayStation 4 */\n {\n test(parser) {\n return parser.getOSName(true) === 'playstation 4';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tv,\n };\n },\n },\n\n /* Roku */\n {\n test(parser) {\n return parser.getOSName(true) === 'roku';\n },\n describe() {\n return {\n type: PLATFORMS_MAP.tv,\n };\n },\n },\n];\n","import Utils from './utils.js';\nimport { ENGINE_MAP } from './constants.js';\n\n/*\n * More specific goes first\n */\nexport default [\n /* EdgeHTML */\n {\n test(parser) {\n return parser.getBrowserName(true) === 'microsoft edge';\n },\n describe(ua) {\n const isBlinkBased = /\\sedg\\//i.test(ua);\n\n // return blink if it's blink-based one\n if (isBlinkBased) {\n return {\n name: ENGINE_MAP.Blink,\n };\n }\n\n // otherwise match the version and return EdgeHTML\n const version = Utils.getFirstMatch(/edge\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n return {\n name: ENGINE_MAP.EdgeHTML,\n version,\n };\n },\n },\n\n /* Trident */\n {\n test: [/trident/i],\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Trident,\n };\n\n const version = Utils.getFirstMatch(/trident\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Presto */\n {\n test(parser) {\n return parser.test(/presto/i);\n },\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Presto,\n };\n\n const version = Utils.getFirstMatch(/presto\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Gecko */\n {\n test(parser) {\n const isGecko = parser.test(/gecko/i);\n const likeGecko = parser.test(/like gecko/i);\n return isGecko && !likeGecko;\n },\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.Gecko,\n };\n\n const version = Utils.getFirstMatch(/gecko\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n\n /* Blink */\n {\n test: [/(apple)?webkit\\/537\\.36/i],\n describe() {\n return {\n name: ENGINE_MAP.Blink,\n };\n },\n },\n\n /* WebKit */\n {\n test: [/(apple)?webkit/i],\n describe(ua) {\n const engine = {\n name: ENGINE_MAP.WebKit,\n };\n\n const version = Utils.getFirstMatch(/webkit\\/(\\d+(\\.?_?\\d+)+)/i, ua);\n\n if (version) {\n engine.version = version;\n }\n\n return engine;\n },\n },\n];\n","import browserParsersList from './parser-browsers.js';\nimport osParsersList from './parser-os.js';\nimport platformParsersList from './parser-platforms.js';\nimport enginesParsersList from './parser-engines.js';\nimport Utils from './utils.js';\n\n/**\n * The main class that arranges the whole parsing process.\n */\nclass Parser {\n /**\n * Create instance of Parser\n *\n * @param {String} UA User-Agent string\n * @param {Boolean} [skipParsing=false] parser can skip parsing in purpose of performance\n * improvements if you need to make a more particular parsing\n * like {@link Parser#parseBrowser} or {@link Parser#parsePlatform}\n *\n * @throw {Error} in case of empty UA String\n *\n * @constructor\n */\n constructor(UA, skipParsing = false) {\n if (UA === void (0) || UA === null || UA === '') {\n throw new Error(\"UserAgent parameter can't be empty\");\n }\n\n this._ua = UA;\n\n /**\n * @typedef ParsedResult\n * @property {Object} browser\n * @property {String|undefined} [browser.name]\n * Browser name, like `\"Chrome\"` or `\"Internet Explorer\"`\n * @property {String|undefined} [browser.version] Browser version as a String `\"12.01.45334.10\"`\n * @property {Object} os\n * @property {String|undefined} [os.name] OS name, like `\"Windows\"` or `\"macOS\"`\n * @property {String|undefined} [os.version] OS version, like `\"NT 5.1\"` or `\"10.11.1\"`\n * @property {String|undefined} [os.versionName] OS name, like `\"XP\"` or `\"High Sierra\"`\n * @property {Object} platform\n * @property {String|undefined} [platform.type]\n * platform type, can be either `\"desktop\"`, `\"tablet\"` or `\"mobile\"`\n * @property {String|undefined} [platform.vendor] Vendor of the device,\n * like `\"Apple\"` or `\"Samsung\"`\n * @property {String|undefined} [platform.model] Device model,\n * like `\"iPhone\"` or `\"Kindle Fire HD 7\"`\n * @property {Object} engine\n * @property {String|undefined} [engine.name]\n * Can be any of this: `WebKit`, `Blink`, `Gecko`, `Trident`, `Presto`, `EdgeHTML`\n * @property {String|undefined} [engine.version] String version of the engine\n */\n this.parsedResult = {};\n\n if (skipParsing !== true) {\n this.parse();\n }\n }\n\n /**\n * Get UserAgent string of current Parser instance\n * @return {String} User-Agent String of the current object\n *\n * @public\n */\n getUA() {\n return this._ua;\n }\n\n /**\n * Test a UA string for a regexp\n * @param {RegExp} regex\n * @return {Boolean}\n */\n test(regex) {\n return regex.test(this._ua);\n }\n\n /**\n * Get parsed browser object\n * @return {Object}\n */\n parseBrowser() {\n this.parsedResult.browser = {};\n\n const browserDescriptor = Utils.find(browserParsersList, (_browser) => {\n if (typeof _browser.test === 'function') {\n return _browser.test(this);\n }\n\n if (_browser.test instanceof Array) {\n return _browser.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (browserDescriptor) {\n this.parsedResult.browser = browserDescriptor.describe(this.getUA());\n }\n\n return this.parsedResult.browser;\n }\n\n /**\n * Get parsed browser object\n * @return {Object}\n *\n * @public\n */\n getBrowser() {\n if (this.parsedResult.browser) {\n return this.parsedResult.browser;\n }\n\n return this.parseBrowser();\n }\n\n /**\n * Get browser's name\n * @return {String} Browser's name or an empty string\n *\n * @public\n */\n getBrowserName(toLowerCase) {\n if (toLowerCase) {\n return String(this.getBrowser().name).toLowerCase() || '';\n }\n return this.getBrowser().name || '';\n }\n\n\n /**\n * Get browser's version\n * @return {String} version of browser\n *\n * @public\n */\n getBrowserVersion() {\n return this.getBrowser().version;\n }\n\n /**\n * Get OS\n * @return {Object}\n *\n * @example\n * this.getOS();\n * {\n * name: 'macOS',\n * version: '10.11.12'\n * }\n */\n getOS() {\n if (this.parsedResult.os) {\n return this.parsedResult.os;\n }\n\n return this.parseOS();\n }\n\n /**\n * Parse OS and save it to this.parsedResult.os\n * @return {*|{}}\n */\n parseOS() {\n this.parsedResult.os = {};\n\n const os = Utils.find(osParsersList, (_os) => {\n if (typeof _os.test === 'function') {\n return _os.test(this);\n }\n\n if (_os.test instanceof Array) {\n return _os.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (os) {\n this.parsedResult.os = os.describe(this.getUA());\n }\n\n return this.parsedResult.os;\n }\n\n /**\n * Get OS name\n * @param {Boolean} [toLowerCase] return lower-cased value\n * @return {String} name of the OS — macOS, Windows, Linux, etc.\n */\n getOSName(toLowerCase) {\n const { name } = this.getOS();\n\n if (toLowerCase) {\n return String(name).toLowerCase() || '';\n }\n\n return name || '';\n }\n\n /**\n * Get OS version\n * @return {String} full version with dots ('10.11.12', '5.6', etc)\n */\n getOSVersion() {\n return this.getOS().version;\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n getPlatform() {\n if (this.parsedResult.platform) {\n return this.parsedResult.platform;\n }\n\n return this.parsePlatform();\n }\n\n /**\n * Get platform name\n * @param {Boolean} [toLowerCase=false]\n * @return {*}\n */\n getPlatformType(toLowerCase = false) {\n const { type } = this.getPlatform();\n\n if (toLowerCase) {\n return String(type).toLowerCase() || '';\n }\n\n return type || '';\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n parsePlatform() {\n this.parsedResult.platform = {};\n\n const platform = Utils.find(platformParsersList, (_platform) => {\n if (typeof _platform.test === 'function') {\n return _platform.test(this);\n }\n\n if (_platform.test instanceof Array) {\n return _platform.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (platform) {\n this.parsedResult.platform = platform.describe(this.getUA());\n }\n\n return this.parsedResult.platform;\n }\n\n /**\n * Get parsed engine\n * @return {{}}\n */\n getEngine() {\n if (this.parsedResult.engine) {\n return this.parsedResult.engine;\n }\n\n return this.parseEngine();\n }\n\n /**\n * Get engines's name\n * @return {String} Engines's name or an empty string\n *\n * @public\n */\n getEngineName(toLowerCase) {\n if (toLowerCase) {\n return String(this.getEngine().name).toLowerCase() || '';\n }\n return this.getEngine().name || '';\n }\n\n /**\n * Get parsed platform\n * @return {{}}\n */\n parseEngine() {\n this.parsedResult.engine = {};\n\n const engine = Utils.find(enginesParsersList, (_engine) => {\n if (typeof _engine.test === 'function') {\n return _engine.test(this);\n }\n\n if (_engine.test instanceof Array) {\n return _engine.test.some(condition => this.test(condition));\n }\n\n throw new Error(\"Browser's test function is not valid\");\n });\n\n if (engine) {\n this.parsedResult.engine = engine.describe(this.getUA());\n }\n\n return this.parsedResult.engine;\n }\n\n /**\n * Parse full information about the browser\n * @returns {Parser}\n */\n parse() {\n this.parseBrowser();\n this.parseOS();\n this.parsePlatform();\n this.parseEngine();\n\n return this;\n }\n\n /**\n * Get parsed result\n * @return {ParsedResult}\n */\n getResult() {\n return Utils.assign({}, this.parsedResult);\n }\n\n /**\n * Check if parsed browser matches certain conditions\n *\n * @param {Object} checkTree It's one or two layered object,\n * which can include a platform or an OS on the first layer\n * and should have browsers specs on the bottom-laying layer\n *\n * @returns {Boolean|undefined} Whether the browser satisfies the set conditions or not.\n * Returns `undefined` when the browser is no described in the checkTree object.\n *\n * @example\n * const browser = Bowser.getParser(window.navigator.userAgent);\n * if (browser.satisfies({chrome: '>118.01.1322' }))\n * // or with os\n * if (browser.satisfies({windows: { chrome: '>118.01.1322' } }))\n * // or with platforms\n * if (browser.satisfies({desktop: { chrome: '>118.01.1322' } }))\n */\n satisfies(checkTree) {\n const platformsAndOSes = {};\n let platformsAndOSCounter = 0;\n const browsers = {};\n let browsersCounter = 0;\n\n const allDefinitions = Object.keys(checkTree);\n\n allDefinitions.forEach((key) => {\n const currentDefinition = checkTree[key];\n if (typeof currentDefinition === 'string') {\n browsers[key] = currentDefinition;\n browsersCounter += 1;\n } else if (typeof currentDefinition === 'object') {\n platformsAndOSes[key] = currentDefinition;\n platformsAndOSCounter += 1;\n }\n });\n\n if (platformsAndOSCounter > 0) {\n const platformsAndOSNames = Object.keys(platformsAndOSes);\n const OSMatchingDefinition = Utils.find(platformsAndOSNames, name => (this.isOS(name)));\n\n if (OSMatchingDefinition) {\n const osResult = this.satisfies(platformsAndOSes[OSMatchingDefinition]);\n\n if (osResult !== void 0) {\n return osResult;\n }\n }\n\n const platformMatchingDefinition = Utils.find(\n platformsAndOSNames,\n name => (this.isPlatform(name)),\n );\n if (platformMatchingDefinition) {\n const platformResult = this.satisfies(platformsAndOSes[platformMatchingDefinition]);\n\n if (platformResult !== void 0) {\n return platformResult;\n }\n }\n }\n\n if (browsersCounter > 0) {\n const browserNames = Object.keys(browsers);\n const matchingDefinition = Utils.find(browserNames, name => (this.isBrowser(name, true)));\n\n if (matchingDefinition !== void 0) {\n return this.compareVersion(browsers[matchingDefinition]);\n }\n }\n\n return undefined;\n }\n\n /**\n * Check if the browser name equals the passed string\n * @param browserName The string to compare with the browser name\n * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n * @returns {boolean}\n */\n isBrowser(browserName, includingAlias = false) {\n const defaultBrowserName = this.getBrowserName().toLowerCase();\n let browserNameLower = browserName.toLowerCase();\n const alias = Utils.getBrowserTypeByAlias(browserNameLower);\n\n if (includingAlias && alias) {\n browserNameLower = alias.toLowerCase();\n }\n return browserNameLower === defaultBrowserName;\n }\n\n compareVersion(version) {\n let expectedResults = [0];\n let comparableVersion = version;\n let isLoose = false;\n\n const currentBrowserVersion = this.getBrowserVersion();\n\n if (typeof currentBrowserVersion !== 'string') {\n return void 0;\n }\n\n if (version[0] === '>' || version[0] === '<') {\n comparableVersion = version.substr(1);\n if (version[1] === '=') {\n isLoose = true;\n comparableVersion = version.substr(2);\n } else {\n expectedResults = [];\n }\n if (version[0] === '>') {\n expectedResults.push(1);\n } else {\n expectedResults.push(-1);\n }\n } else if (version[0] === '=') {\n comparableVersion = version.substr(1);\n } else if (version[0] === '~') {\n isLoose = true;\n comparableVersion = version.substr(1);\n }\n\n return expectedResults.indexOf(\n Utils.compareVersions(currentBrowserVersion, comparableVersion, isLoose),\n ) > -1;\n }\n\n isOS(osName) {\n return this.getOSName(true) === String(osName).toLowerCase();\n }\n\n isPlatform(platformType) {\n return this.getPlatformType(true) === String(platformType).toLowerCase();\n }\n\n isEngine(engineName) {\n return this.getEngineName(true) === String(engineName).toLowerCase();\n }\n\n /**\n * Is anything? Check if the browser is called \"anything\",\n * the OS called \"anything\" or the platform called \"anything\"\n * @param {String} anything\n * @param [includingAlias=false] The flag showing whether alias will be included into comparison\n * @returns {Boolean}\n */\n is(anything, includingAlias = false) {\n return this.isBrowser(anything, includingAlias) || this.isOS(anything)\n || this.isPlatform(anything);\n }\n\n /**\n * Check if any of the given values satisfies this.is(anything)\n * @param {String[]} anythings\n * @returns {Boolean}\n */\n some(anythings = []) {\n return anythings.some(anything => this.is(anything));\n }\n}\n\nexport default Parser;\n","/*!\n * Bowser - a browser detector\n * https://github.com/lancedikson/bowser\n * MIT License | (c) Dustin Diaz 2012-2015\n * MIT License | (c) Denis Demchenko 2015-2019\n */\nimport Parser from './parser.js';\nimport {\n BROWSER_MAP,\n ENGINE_MAP,\n OS_MAP,\n PLATFORMS_MAP,\n} from './constants.js';\n\n/**\n * Bowser class.\n * Keep it simple as much as it can be.\n * It's supposed to work with collections of {@link Parser} instances\n * rather then solve one-instance problems.\n * All the one-instance stuff is located in Parser class.\n *\n * @class\n * @classdesc Bowser is a static object, that provides an API to the Parsers\n * @hideconstructor\n */\nclass Bowser {\n /**\n * Creates a {@link Parser} instance\n *\n * @param {String} UA UserAgent string\n * @param {Boolean} [skipParsing=false] Will make the Parser postpone parsing until you ask it\n * explicitly. Same as `skipParsing` for {@link Parser}.\n * @returns {Parser}\n * @throws {Error} when UA is not a String\n *\n * @example\n * const parser = Bowser.getParser(window.navigator.userAgent);\n * const result = parser.getResult();\n */\n static getParser(UA, skipParsing = false) {\n if (typeof UA !== 'string') {\n throw new Error('UserAgent should be a string');\n }\n return new Parser(UA, skipParsing);\n }\n\n /**\n * Creates a {@link Parser} instance and runs {@link Parser.getResult} immediately\n *\n * @param UA\n * @return {ParsedResult}\n *\n * @example\n * const result = Bowser.parse(window.navigator.userAgent);\n */\n static parse(UA) {\n return (new Parser(UA)).getResult();\n }\n\n static get BROWSER_MAP() {\n return BROWSER_MAP;\n }\n\n static get ENGINE_MAP() {\n return ENGINE_MAP;\n }\n\n static get OS_MAP() {\n return OS_MAP;\n }\n\n static get PLATFORMS_MAP() {\n return PLATFORMS_MAP;\n }\n}\n\nexport default Bowser;\n","/**\n * List of known SVG tag names.\n *\n * @type {Array}\n */\nexport const svgTagNames = [\n 'a',\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animate',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'animation',\n 'audio',\n 'canvas',\n 'circle',\n 'clipPath',\n 'color-profile',\n 'cursor',\n 'defs',\n 'desc',\n 'discard',\n 'ellipse',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'filter',\n 'font',\n 'font-face',\n 'font-face-format',\n 'font-face-name',\n 'font-face-src',\n 'font-face-uri',\n 'foreignObject',\n 'g',\n 'glyph',\n 'glyphRef',\n 'handler',\n 'hkern',\n 'iframe',\n 'image',\n 'line',\n 'linearGradient',\n 'listener',\n 'marker',\n 'mask',\n 'metadata',\n 'missing-glyph',\n 'mpath',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'prefetch',\n 'radialGradient',\n 'rect',\n 'script',\n 'set',\n 'solidColor',\n 'stop',\n 'style',\n 'svg',\n 'switch',\n 'symbol',\n 'tbreak',\n 'text',\n 'textArea',\n 'textPath',\n 'title',\n 'tref',\n 'tspan',\n 'unknown',\n 'use',\n 'video',\n 'view',\n 'vkern'\n]\n","import { svgTagNames } from 'svg-tag-names';\nconst svgTags = new Set(svgTagNames);\nsvgTags.delete('a');\nsvgTags.delete('audio');\nsvgTags.delete('canvas');\nsvgTags.delete('iframe');\nsvgTags.delete('script');\nsvgTags.delete('video');\n// Copied from Preact\n// https://github.com/preactjs/preact/blob/1bbd687c13c1fd16f0d6393e79ea6232f55fbec4/src/constants.js#L3\nconst IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\nconst isFragment = (type) => type === DocumentFragment;\nconst setCSSProps = (element, style) => {\n for (const [name, value] of Object.entries(style)) {\n if (name.startsWith('-')) {\n element.style.setProperty(name, value);\n }\n else if (typeof value === 'number' && !IS_NON_DIMENSIONAL.test(name)) {\n element.style[name] = `${value}px`;\n }\n else {\n element.style[name] = value;\n }\n }\n};\nconst create = (type) => {\n if (typeof type === 'string') {\n if (svgTags.has(type)) {\n return document.createElementNS('http://www.w3.org/2000/svg', type);\n }\n return document.createElement(type);\n }\n if (isFragment(type)) {\n return document.createDocumentFragment();\n }\n return type(type.defaultProps);\n};\nconst setAttribute = (element, name, value) => {\n if (value === undefined || value === null) {\n return;\n }\n // Naive support for xlink namespace\n // Full list: https://github.com/facebook/react/blob/1843f87/src/renderers/dom/shared/SVGDOMPropertyConfig.js#L258-L264\n if (/^xlink[AHRST]/.test(name)) {\n element.setAttributeNS('http://www.w3.org/1999/xlink', name.replace('xlink', 'xlink:').toLowerCase(), value);\n }\n else {\n element.setAttribute(name, value);\n }\n};\nconst addChildren = (parent, children) => {\n for (const child of children) {\n if (child instanceof Node) {\n parent.appendChild(child);\n }\n else if (Array.isArray(child)) {\n addChildren(parent, child);\n }\n else if (typeof child !== 'boolean'\n && typeof child !== 'undefined'\n && child !== null) {\n parent.appendChild(document.createTextNode(child));\n }\n }\n};\n// These attributes allow \"false\" as a valid value\n// https://github.com/facebook/react/blob/3f8990898309c61c817fbf663f5221d9a00d0eaa/packages/react-dom/src/shared/DOMProperty.js#L288-L322\nconst booleanishAttributes = new Set([\n // These attributes allow \"false\" as a valid value\n 'contentEditable',\n 'draggable',\n 'spellCheck',\n 'value',\n // SVG-specific\n 'autoReverse',\n 'externalResourcesRequired',\n 'focusable',\n 'preserveAlpha',\n]);\nexport const h = (type, attributes, ...children) => {\n var _a;\n const element = create(type);\n addChildren(element, children);\n if (element instanceof DocumentFragment || !attributes) {\n return element;\n }\n // Set attributes\n for (let [name, value] of Object.entries(attributes)) {\n if (name === 'htmlFor') {\n name = 'for';\n }\n if (name === 'class' || name === 'className') {\n const existingClassname = (_a = element.getAttribute('class')) !== null && _a !== void 0 ? _a : '';\n setAttribute(element, 'class', (existingClassname + ' ' + String(value)).trim());\n }\n else if (name === 'style') {\n setCSSProps(element, value);\n }\n else if (name.startsWith('on')) {\n const eventName = name.slice(2).toLowerCase().replace(/^-/, '');\n element.addEventListener(eventName, value);\n }\n else if (name === 'dangerouslySetInnerHTML' && '__html' in value) {\n element.innerHTML = value.__html;\n }\n else if (name !== 'key' && (booleanishAttributes.has(name) || value !== false)) {\n setAttribute(element, name, value === true ? '' : value);\n }\n }\n return element;\n};\n// eslint-disable-next-line @typescript-eslint/no-redeclare -- Ur rong.\nexport const Fragment = (typeof DocumentFragment === 'function' ? DocumentFragment : () => { });\n// Improve TypeScript support for DocumentFragment\n// https://github.com/Microsoft/TypeScript/issues/20469\nconst React = {\n createElement: h,\n Fragment,\n};\n// Improve CJS support\nexport const createElement = h;\nexport default React;\n","/*! @wagich/medium-zoom 1.0.6-custom002 | MIT License | https://github.com/https://github.com/wagich/medium-zoom.git */\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar isSupported = function isSupported(node) {\n return node.tagName === 'IMG';\n};\n\n/* eslint-disable-next-line no-prototype-builtins */\nvar isNodeList = function isNodeList(selector) {\n return NodeList.prototype.isPrototypeOf(selector);\n};\n\nvar isNode = function isNode(selector) {\n return selector && selector.nodeType === 1;\n};\n\nvar isSvg = function isSvg(image) {\n var source = image.currentSrc || image.src;\n return source.substr(-4).toLowerCase() === '.svg';\n};\n\nvar getImagesFromSelector = function getImagesFromSelector(selector) {\n try {\n if (Array.isArray(selector)) {\n return selector.filter(isSupported);\n }\n\n if (isNodeList(selector)) {\n // Do not use spread operator or Array.from() for IE support\n return [].slice.call(selector).filter(isSupported);\n }\n\n if (isNode(selector)) {\n return [selector].filter(isSupported);\n }\n\n if (typeof selector === 'string') {\n // Do not use spread operator or Array.from() for IE support\n return [].slice.call(document.querySelectorAll(selector)).filter(isSupported);\n }\n\n return [];\n } catch (err) {\n throw new TypeError('The provided selector is invalid.\\n' + 'Expects a CSS selector, a Node element, a NodeList or an array.\\n' + 'See: https://github.com/francoischalifour/medium-zoom');\n }\n};\n\nvar createOverlay = function createOverlay(background) {\n var overlay = document.createElement('div');\n overlay.classList.add('medium-zoom-overlay');\n overlay.style.background = background;\n\n return overlay;\n};\n\nvar createLoadingIndicator = function createLoadingIndicator(color) {\n var wrapper = document.createElement('div');\n wrapper.classList.add('medium-zoom-loader');\n\n var colorRgb = parseColor(color);\n var ringColor = 'rgba(' + colorRgb[0] + ',' + colorRgb[1] + ',' + colorRgb[2] + ',0.2)';\n\n var indicator = document.createElement('div');\n indicator.style.borderTopColor = ringColor;\n indicator.style.borderRightColor = ringColor;\n indicator.style.borderBottomColor = ringColor;\n indicator.style.borderLeftColor = color;\n\n wrapper.appendChild(indicator);\n return wrapper;\n};\n\n// color parsing function from https://stackoverflow.com/a/21966100\nvar parseColor = function parseColor(colorString) {\n if (colorString.substr(0, 1) == '#') {\n var collen = (colorString.length - 1) / 3;\n var fact = [17, 1, 0.062272][collen - 1];\n return [Math.round(parseInt(colorString.substr(1, collen), 16) * fact), Math.round(parseInt(colorString.substr(1 + collen, collen), 16) * fact), Math.round(parseInt(colorString.substr(1 + 2 * collen, collen), 16) * fact)];\n } else return colorString.split('(')[1].split(')')[0].split(',').map(function (x) {\n return +x;\n });\n};\n\nvar cloneTarget = function cloneTarget(template) {\n var _template$getBounding = template.getBoundingClientRect(),\n top = _template$getBounding.top,\n left = _template$getBounding.left,\n width = _template$getBounding.width,\n height = _template$getBounding.height;\n\n var clone = template.cloneNode();\n var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\n\n clone.removeAttribute('id');\n clone.style.position = 'absolute';\n clone.style.top = top + scrollTop + 'px';\n clone.style.left = left + scrollLeft + 'px';\n clone.style.width = width + 'px';\n clone.style.height = height + 'px';\n clone.style.transform = '';\n\n return clone;\n};\n\nvar createCustomEvent = function createCustomEvent(type, params) {\n var eventParams = _extends({\n bubbles: false,\n cancelable: false,\n detail: undefined\n }, params);\n\n if (typeof window.CustomEvent === 'function') {\n return new CustomEvent(type, eventParams);\n }\n\n var customEvent = document.createEvent('CustomEvent');\n customEvent.initCustomEvent(type, eventParams.bubbles, eventParams.cancelable, eventParams.detail);\n\n return customEvent;\n};\n\nvar mediumZoom = function mediumZoom(selector) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n /**\r\n * Ensure the compatibility with IE11 if no Promise polyfill are used.\r\n */\n var Promise = window.Promise || function Promise(fn) {\n function noop() {}\n fn(noop, noop);\n };\n\n var _handleClick = function _handleClick(event) {\n var target = event.target;\n\n\n if (target === overlay) {\n close();\n return;\n }\n\n if (images.indexOf(target) === -1) {\n return;\n }\n\n toggle({ target: target });\n };\n\n var _handleScroll = function _handleScroll() {\n if (isAnimating || !active.original) {\n return;\n }\n\n var currentScroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n\n if (Math.abs(scrollTop - currentScroll) > zoomOptions.scrollOffset) {\n setTimeout(close, 150);\n }\n };\n\n var _handleKeyUp = function _handleKeyUp(event) {\n var key = event.key || event.keyCode;\n\n // Close if escape key is pressed\n if (key === 'Escape' || key === 'Esc' || key === 27) {\n close();\n }\n };\n\n var update = function update() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var newOptions = options;\n\n if (options.background) {\n overlay.style.background = options.background;\n }\n\n if (options.container && options.container instanceof Object) {\n newOptions.container = _extends({}, zoomOptions.container, options.container);\n }\n\n if (options.template) {\n var template = isNode(options.template) ? options.template : document.querySelector(options.template);\n\n newOptions.template = template;\n }\n\n zoomOptions = _extends({}, zoomOptions, newOptions);\n\n images.forEach(function (image) {\n image.dispatchEvent(createCustomEvent('medium-zoom:update', {\n detail: { zoom: zoom }\n }));\n });\n\n return zoom;\n };\n\n var clone = function clone() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n return mediumZoom(_extends({}, zoomOptions, options));\n };\n\n var attach = function attach() {\n for (var _len = arguments.length, selectors = Array(_len), _key = 0; _key < _len; _key++) {\n selectors[_key] = arguments[_key];\n }\n\n var newImages = selectors.reduce(function (imagesAccumulator, currentSelector) {\n return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));\n }, []);\n\n newImages.filter(function (newImage) {\n return images.indexOf(newImage) === -1;\n }).forEach(function (newImage) {\n images.push(newImage);\n newImage.classList.add('medium-zoom-image');\n });\n\n eventListeners.forEach(function (_ref) {\n var type = _ref.type,\n listener = _ref.listener,\n options = _ref.options;\n\n newImages.forEach(function (image) {\n image.addEventListener(type, listener, options);\n });\n });\n\n return zoom;\n };\n\n var detach = function detach() {\n for (var _len2 = arguments.length, selectors = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n selectors[_key2] = arguments[_key2];\n }\n\n if (active.zoomed) {\n close();\n }\n\n var imagesToDetach = selectors.length > 0 ? selectors.reduce(function (imagesAccumulator, currentSelector) {\n return [].concat(imagesAccumulator, getImagesFromSelector(currentSelector));\n }, []) : images;\n\n imagesToDetach.forEach(function (image) {\n image.classList.remove('medium-zoom-image');\n image.dispatchEvent(createCustomEvent('medium-zoom:detach', {\n detail: { zoom: zoom }\n }));\n });\n\n images = images.filter(function (image) {\n return imagesToDetach.indexOf(image) === -1;\n });\n\n return zoom;\n };\n\n var on = function on(type, listener) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n images.forEach(function (image) {\n image.addEventListener('medium-zoom:' + type, listener, options);\n });\n\n eventListeners.push({ type: 'medium-zoom:' + type, listener: listener, options: options });\n\n return zoom;\n };\n\n var off = function off(type, listener) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n images.forEach(function (image) {\n image.removeEventListener('medium-zoom:' + type, listener, options);\n });\n\n eventListeners = eventListeners.filter(function (eventListener) {\n return !(eventListener.type === 'medium-zoom:' + type && eventListener.listener.toString() === listener.toString());\n });\n\n return zoom;\n };\n\n var open = function open() {\n var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n target = _ref2.target;\n\n var _animate = function _animate() {\n var container = {\n width: document.documentElement.clientWidth,\n height: document.documentElement.clientHeight,\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n var viewportWidth = void 0;\n var viewportHeight = void 0;\n\n if (zoomOptions.container) {\n if (zoomOptions.container instanceof Object) {\n // The container is given as an object with properties like width, height, left, top\n container = _extends({}, container, zoomOptions.container);\n\n // We need to adjust custom options like container.right or container.bottom\n viewportWidth = container.width - container.left - container.right - zoomOptions.margin * 2;\n viewportHeight = container.height - container.top - container.bottom - zoomOptions.margin * 2;\n } else {\n // The container is given as an element\n var zoomContainer = isNode(zoomOptions.container) ? zoomOptions.container : document.querySelector(zoomOptions.container);\n\n var _zoomContainer$getBou = zoomContainer.getBoundingClientRect(),\n _width = _zoomContainer$getBou.width,\n _height = _zoomContainer$getBou.height,\n _left = _zoomContainer$getBou.left,\n _top = _zoomContainer$getBou.top;\n\n container = _extends({}, container, {\n width: _width,\n height: _height,\n left: _left,\n top: _top\n });\n }\n }\n\n viewportWidth = viewportWidth || container.width - zoomOptions.margin * 2;\n viewportHeight = viewportHeight || container.height - zoomOptions.margin * 2;\n\n var zoomTarget = active.zoomedHd || active.original;\n var naturalWidth = isSvg(zoomTarget) ? viewportWidth : zoomTarget.naturalWidth || viewportWidth;\n var naturalHeight = isSvg(zoomTarget) ? viewportHeight : zoomTarget.naturalHeight || viewportHeight;\n\n var _zoomTarget$getBoundi = zoomTarget.getBoundingClientRect(),\n top = _zoomTarget$getBoundi.top,\n left = _zoomTarget$getBoundi.left,\n width = _zoomTarget$getBoundi.width,\n height = _zoomTarget$getBoundi.height;\n\n var scaleX = Math.min(naturalWidth, viewportWidth) / width;\n var scaleY = Math.min(naturalHeight, viewportHeight) / height;\n var scale = Math.min(scaleX, scaleY);\n var translateX = (-left + (viewportWidth - width) / 2 + zoomOptions.margin + container.left) / scale;\n var translateY = (-top + (viewportHeight - height) / 2 + zoomOptions.margin + container.top) / scale;\n var transform = 'scale(' + scale + ') translate3d(' + translateX + 'px, ' + translateY + 'px, 0)';\n\n active.zoomed.style.transform = transform;\n\n if (active.zoomedHd) {\n active.zoomed.style.opacity = 0;\n\n // correct aspect ratio of hd image and center-align it in relation to the thumbnail\n var aspectRatio = naturalWidth / naturalHeight;\n if (aspectRatio >= 1) {\n var currentWidth = active.zoomedHd.width;\n var correctedWidth = currentWidth * aspectRatio;\n active.zoomedHd.style.width = correctedWidth + 'px';\n active.zoomedHd.style.height = correctedWidth / aspectRatio + 'px';\n active.zoomedHd.style.marginLeft = '-' + (correctedWidth - currentWidth) / 2 + 'px';\n } else {\n var currentHeight = active.zoomedHd.height;\n var correctedHeight = currentHeight / aspectRatio;\n active.zoomedHd.style.width = correctedHeight * aspectRatio + 'px';\n active.zoomedHd.style.height = correctedHeight + 'px';\n active.zoomedHd.style.marginTop = '-' + (correctedHeight - currentHeight) / 2 + 'px';\n }\n\n var _active$zoomedHd$getB = active.zoomedHd.getBoundingClientRect(),\n _top2 = _active$zoomedHd$getB.top,\n _left2 = _active$zoomedHd$getB.left,\n _width2 = _active$zoomedHd$getB.width,\n _height2 = _active$zoomedHd$getB.height;\n\n var _scaleX = Math.min(naturalWidth, viewportWidth) / _width2;\n var _scaleY = Math.min(naturalHeight, viewportHeight) / _height2;\n var _scale = Math.min(_scaleX, _scaleY);\n var _translateX = (-_left2 + (viewportWidth - _width2) / 2 + zoomOptions.margin + container.left) / _scale;\n var _translateY = (-_top2 + (viewportHeight - _height2) / 2 + zoomOptions.margin + container.top) / _scale;\n var _transform = 'scale(' + _scale + ') translate3d(' + _translateX + 'px, ' + _translateY + 'px, 0)';\n\n active.zoomedHd.style.opacity = 1;\n active.zoomedHd.style.transform = _transform;\n }\n };\n\n var _addLoadingIndicator = function _addLoadingIndicator() {\n var _active$original$getB = active.original.getBoundingClientRect(),\n top = _active$original$getB.top,\n left = _active$original$getB.left,\n width = _active$original$getB.width,\n height = _active$original$getB.height;\n\n var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\n\n // position indicator over the original (thumbnail) image,\n // make it a centered square with the edge length corresponding to the shorter dimension of the image\n loadingIndicator.style.top = top + scrollTop + 'px';\n loadingIndicator.style.left = left + scrollLeft + 'px';\n\n var smallestDimension = Math.min(width, height);\n loadingIndicator.style.width = smallestDimension + 'px';\n loadingIndicator.style.height = smallestDimension + 'px';\n loadingIndicator.style.marginLeft = (width - smallestDimension) / 2 + 'px';\n\n // scale indicator based on original (thumbnail) image size, native size of the indicator is 100px\n var scale = 1.5 / (100 / smallestDimension ^ 2);\n loadingIndicator.style.transform = 'scale(' + scale + ')';\n\n document.body.appendChild(loadingIndicator);\n };\n\n return new Promise(function (resolve) {\n if (target && images.indexOf(target) === -1) {\n resolve(zoom);\n return;\n }\n\n var _handleOpenEnd = function _handleOpenEnd() {\n isAnimating = false;\n active.zoomed.removeEventListener('transitionend', _handleOpenEnd);\n active.original.dispatchEvent(createCustomEvent('medium-zoom:opened', {\n detail: { zoom: zoom }\n }));\n\n resolve(zoom);\n };\n\n if (active.zoomed) {\n resolve(zoom);\n return;\n }\n\n if (target) {\n // The zoom was triggered manually via a click\n active.original = target;\n } else if (images.length > 0) {\nvar _images = images;\n active.original = _images[0];\n } else {\n resolve(zoom);\n return;\n }\n\n active.original.dispatchEvent(createCustomEvent('medium-zoom:open', {\n detail: { zoom: zoom }\n }));\n\n scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\n isAnimating = true;\n active.zoomed = cloneTarget(active.original);\n\n document.body.appendChild(overlay);\n\n if (zoomOptions.template) {\n var template = isNode(zoomOptions.template) ? zoomOptions.template : document.querySelector(zoomOptions.template);\n active.template = document.createElement('div');\n active.template.appendChild(template.content.cloneNode(true));\n\n document.body.appendChild(active.template);\n }\n\n document.body.appendChild(active.zoomed);\n\n window.requestAnimationFrame(function () {\n document.body.classList.add('medium-zoom--opened');\n });\n\n active.original.classList.add('medium-zoom-image--hidden');\n active.zoomed.classList.add('medium-zoom-image--opened');\n\n active.zoomed.addEventListener('click', close);\n active.zoomed.addEventListener('transitionend', _handleOpenEnd);\n\n if (active.original.getAttribute('data-zoom-src')) {\n active.zoomedHd = active.zoomed.cloneNode();\n active.zoomedHd.classList.add('medium-zoom-image-hd');\n\n // Reset the `scrset` property or the HD image won't load.\n active.zoomedHd.removeAttribute('srcset');\n active.zoomedHd.removeAttribute('sizes');\n\n active.zoomedHd.src = active.zoomed.getAttribute('data-zoom-src');\n\n active.zoomedHd.onerror = function () {\n clearInterval(getZoomTargetSize);\n console.warn('Unable to reach the zoom image target ' + active.zoomedHd.src);\n active.zoomedHd = null;\n _animate();\n };\n\n _addLoadingIndicator();\n // We need to access the natural size of the full HD\n // target as fast as possible to compute the animation.\n var getZoomTargetSize = setInterval(function () {\n if ( active.zoomedHd.complete) {\n clearInterval(getZoomTargetSize);\n active.zoomedHd.classList.add('medium-zoom-image--opened');\n active.zoomedHd.addEventListener('click', close);\n document.body.appendChild(active.zoomedHd);\n document.body.removeChild(loadingIndicator);\n _animate();\n }\n }, 10);\n } else if (active.original.hasAttribute('srcset')) {\n // If an image has a `srcset` attribuet, we don't know the dimensions of the\n // zoomed (HD) image (like when `data-zoom-src` is specified).\n // Therefore the approach is quite similar.\n active.zoomedHd = active.zoomed.cloneNode();\n active.zoomedHd.classList.add('medium-zoom-image-hd');\n\n // Resetting the sizes attribute tells the browser to load the\n // image best fitting the current viewport size, respecting the `srcset`.\n active.zoomedHd.removeAttribute('sizes');\n\n // In Firefox, the `loading` attribute needs to be set to `eager` (default\n // value) for the load event to be fired.\n active.zoomedHd.removeAttribute('loading');\n\n _addLoadingIndicator();\n // Wait for the load event of the hd image. This will fire if the image\n // is already cached.\n var loadEventListener = active.zoomedHd.addEventListener('load', function () {\n active.zoomedHd.removeEventListener('load', loadEventListener);\n active.zoomedHd.classList.add('medium-zoom-image--opened');\n active.zoomedHd.addEventListener('click', close);\n document.body.appendChild(active.zoomedHd);\n document.body.removeChild(loadingIndicator);\n _animate();\n });\n } else {\n _animate();\n }\n });\n };\n\n var close = function close() {\n return new Promise(function (resolve) {\n if (isAnimating || !active.original) {\n resolve(zoom);\n return;\n }\n\n var _handleCloseEnd = function _handleCloseEnd() {\n active.original.classList.remove('medium-zoom-image--hidden');\n document.body.removeChild(active.zoomed);\n if (active.zoomedHd) {\n document.body.removeChild(active.zoomedHd);\n }\n document.body.removeChild(overlay);\n active.zoomed.classList.remove('medium-zoom-image--opened');\n if (active.template) {\n document.body.removeChild(active.template);\n }\n\n isAnimating = false;\n active.zoomed.removeEventListener('transitionend', _handleCloseEnd);\n\n active.original.dispatchEvent(createCustomEvent('medium-zoom:closed', {\n detail: { zoom: zoom }\n }));\n\n active.original = null;\n active.zoomed = null;\n active.zoomedHd = null;\n active.template = null;\n\n resolve(zoom);\n };\n\n isAnimating = true;\n document.body.classList.remove('medium-zoom--opened');\n active.zoomed.style.transform = '';\n\n if (active.zoomedHd) {\n active.zoomedHd.style.transform = '';\n active.zoomedHd.style.opacity = 0;\n active.zoomed.style.opacity = 1;\n }\n\n // Fade out the template so it's not too abrupt\n if (active.template) {\n active.template.style.transition = 'opacity 150ms';\n active.template.style.opacity = 0;\n }\n\n active.original.dispatchEvent(createCustomEvent('medium-zoom:close', {\n detail: { zoom: zoom }\n }));\n\n active.zoomed.addEventListener('transitionend', _handleCloseEnd);\n });\n };\n\n var toggle = function toggle() {\n var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n target = _ref3.target;\n\n if (active.original) {\n return close();\n }\n\n return open({ target: target });\n };\n\n var getOptions = function getOptions() {\n return zoomOptions;\n };\n\n var getImages = function getImages() {\n return images;\n };\n\n var getZoomedImage = function getZoomedImage() {\n return active.original;\n };\n\n var images = [];\n var eventListeners = [];\n var isAnimating = false;\n var scrollTop = 0;\n var zoomOptions = options;\n var active = {\n original: null,\n zoomed: null,\n zoomedHd: null,\n template: null\n\n // If the selector is omitted, it's replaced by the options\n };if (Object.prototype.toString.call(selector) === '[object Object]') {\n zoomOptions = selector;\n } else if (selector || typeof selector === 'string' // to process empty string as a selector\n ) {\n attach(selector);\n }\n\n // Apply the default option values\n zoomOptions = _extends({\n margin: 0,\n background: '#fff',\n loadingIndicatorColor: '#eee',\n scrollOffset: 40,\n container: null,\n template: null\n }, zoomOptions);\n\n var overlay = createOverlay(zoomOptions.background);\n var loadingIndicator = createLoadingIndicator(zoomOptions.loadingIndicatorColor);\n\n document.addEventListener('click', _handleClick);\n document.addEventListener('keyup', _handleKeyUp);\n document.addEventListener('scroll', _handleScroll);\n window.addEventListener('resize', close);\n\n var zoom = {\n open: open,\n close: close,\n toggle: toggle,\n update: update,\n clone: clone,\n attach: attach,\n detach: detach,\n on: on,\n off: off,\n getOptions: getOptions,\n getImages: getImages,\n getZoomedImage: getZoomedImage\n };\n\n return zoom;\n};\n\nfunction styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar css = \".medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;opacity:1;transition:transform .3s cubic-bezier(.2,0,.2,1),opacity .3s ease!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}.medium-zoom-image-hd{max-width:none!important;max-height:none!important;opacity:0;will-change:opacity,transform}.medium-zoom-loader{display:flex;align-items:center;justify-content:center;position:absolute}.medium-zoom-loader>div{flex:0 0 auto;width:100px;height:100px;border-radius:50%;border:10px solid hsla(0,0%,40%,.2);border-left-color:#666;animation:medium-zoom-loader .8s linear infinite}@keyframes medium-zoom-loader{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}\";\nstyleInject(css);\n\nexport default mediumZoom;\n","\nexport function delay(delay: number) {\n\treturn new Promise(resolve => setTimeout(resolve, delay));\n}\n\nexport function emToPx(em: string | number): number {\n\tlet bodyFontSize = parseFloat(getComputedStyle(document.documentElement).fontSize);\n\treturn parseFloat(em.toString()) * bodyFontSize;\n}\n","import \"../Styles/index.scss\";\n\nimport Flickity from \"flickity-fade\";\nimport Bowser from \"bowser\";\nimport React from \"dom-chef\";\nimport debounce from \"lodash/debounce\";\nimport getSize from \"get-size\";\nimport imagesLoaded from \"imagesloaded\";\nimport mediumZoom from \"@wagich/medium-zoom\";\n\nimport { emToPx, delay } from \"./utils\";\n\nconst navigationContainer = document.getElementById(\"navigationContainer\")!;\nconst contentContainer = document.getElementById(\"contentContainer\")!;\nconst scrollWrapper = document.getElementById(\"contentScrollWrapper\")!;\nconst textContainer = document.getElementById(\"textContainer\")!;\nconst columnContainer = document.getElementById(\"columnContainer\")!;\nconst backgroundVideo = document.getElementById(\"backgroundVideo\") as HTMLVideoElement | null;\nconst multicolumnMq = window.matchMedia(\"(min-width: 75em)\");\n\nasync function toggleContent() {\n\t// disable open-once listener\n\tcontentContainer.removeEventListener(\"mouseover\", toggleContent);\n\n\tif (contentContainer.classList.contains(\"closed\")) {\n\t\tsetContentContainerPosition();\n\t\twindow.setTimeout(() => {\n\t\t\t// set 500ms delay to return from overflow:hidden because of the css transition\n\t\t\tscrollWrapper.style.overflowX = \"\";\n\t\t}, 500);\n\t} else {\n\t\tscrollWrapper.style.overflowX = \"hidden\";\n\t\tcontentContainer.style.left = `${window.innerWidth - emToPx(\"16em\")}px`;\n\t}\n\n\tcontentContainer.classList.toggle(\"closed\");\n\tdocument.getElementById(\"secondaryNavigationContainer\")?.classList.toggle(\"contentClosed\");\n\tdocument.querySelector(\".sequence-controls\")?.classList.toggle(\"contentClosed\");\n\n\tawait delay(250);\n\tconst toggleSymbol = document.querySelector(\"#hideContentButton .symbol\");\n\tif (toggleSymbol != null) {\n\t\ttoggleSymbol.textContent = contentContainer.classList.contains(\"closed\") ? \"«\" : \"»\";\n\t}\n}\n\nfunction setContentContainerPosition() {\n\tlet navigationWidth = getSize(navigationContainer).outerWidth;\n\n\tlet columnContainerWidth = columnEndMarker.offsetLeft + getSize(columnEndMarker).width + emToPx(2);\n\tcolumnContainer.style.width = `${columnContainerWidth}px`;\n\n\tlet contentSpace = window.innerWidth - navigationWidth - emToPx(6);\n\n\tif (columnContainerWidth < contentSpace) {\n\t\tcontentContainer.style.left = `${Math.floor(navigationWidth + (contentSpace - columnContainerWidth))}px`;\n\t} else {\n\t\tcontentContainer.style.left = \"\";\n\t}\n}\n\nfunction initMulticolumn() {\n\ttextContainer?.appendChild(
»
);\n\n\tsetContentContainerPosition();\n\tif (document.body.getAttribute(\"data-nocollapse\") == null) {\n\t\tcontentContainer.addEventListener(\"mouseover\", toggleContent, { once: true });\n\t\ttoggleContent();\n\t}\n\n\twindow.addEventListener(\"resize\", multicolumnResizeDebounced);\n}\nfunction destroyMulticolumn() {\n\tmulticolumnResizeDebounced.cancel();\n\twindow.removeEventListener(\"resize\", multicolumnResizeDebounced);\n\ttextContainer.querySelector(\"#hideContentButton\")?.remove();\n\tcontentContainer.style.left = \"\";\n\tcolumnContainer.style.width = \"\";\n}\n\nconst multicolumnResizeDebounced = debounce(multicolumnResize, 250);\nasync function multicolumnResize() {\n\tif (!contentContainer.classList.contains(\"closed\")) {\n\t\tcontentContainer.style.left = \"\";\n\t\tsetContentContainerPosition();\n\n\t\t// set 500ms delay to return from overflow:hidden because of the css transition\n\t\tawait delay(500);\n\t\tscrollWrapper.style.overflowX = \"\";\n\t} else {\n\t\tcontentContainer.style.left = `${window.innerWidth - emToPx(\"10em\")}px`;\n\t}\n}\n\nconst columnEndMarker = ;\ncolumnContainer.appendChild(columnEndMarker);\n\n// only initialize multicolumn if we're on a decent size screen\nif (multicolumnMq.matches) {\n\timagesLoaded(columnContainer, initMulticolumn);\n}\nmulticolumnMq.addEventListener(\"change\", mq => {\n\tif (mq.matches) {\n\t\tinitMulticolumn();\n\t} else {\n\t\tdestroyMulticolumn();\n\t}\n});\n\n// HIDE NAVIGATION OVERLAY\nasync function toggleNavigation() {\n\tnavigationContainer?.classList.toggle(\"closed\");\n\tcontentContainer?.classList.toggle(\"expanded\");\n\n\tdelay(250);\n\tlet toggleNavigationSymbol = document.querySelector(\"#hideNavigationButton .symbol\");\n\tif (toggleNavigationSymbol != null) {\n\t\ttoggleNavigationSymbol.textContent = navigationContainer?.classList.contains(\"closed\") ? \"»\" : \"«\";\n\t}\n}\nconst toggleNavigationButton =
«
;\nnavigationContainer?.appendChild(toggleNavigationButton);\n\nvar flickity = new Flickity(\"#sequence\", {\n\tfade: true,\n\tpageDots: false,\n\tprevNextButtons: false,\n\tautoPlay: 4000,\n\tsetGallerySize: false,\n\tpauseAutoPlayOnHover: false,\n});\n\ndocument.querySelector(\".sequence-prev\")?.addEventListener(\"click\", () => flickity.previous());\ndocument.querySelector(\".sequence-next\")?.addEventListener(\"click\", () => flickity.next());\n\nif (backgroundVideo != null) {\n\tconst browser = Bowser.getParser(window.navigator.userAgent);\n\tif (browser.getPlatformType(true) !== \"mobile\" && multicolumnMq.matches) {\n\t\tflickity.pausePlayer();\n\t\tbackgroundVideo.play();\n\t}\n\n\tflickity.on(\"change\", (index?: number) => {\n\t\tif (index === 0) {\n\t\t\tflickity.pausePlayer();\n\t\t\tbackgroundVideo.play();\n\t\t}\n\t});\n\tbackgroundVideo.addEventListener(\"ended\", e => {\n\t\tflickity.next();\n\t\tflickity.playPlayer();\n\t});\n}\n\n// add filler strip between navigation and content and scroll it out with the content,\n// hiding the gap between the fixed faux-background of the columns and the real left edge\nvar filler =
;\ncontentContainer.appendChild(filler);\nscrollWrapper?.addEventListener(\"scroll\", e => {\n\tvar newLeft = emToPx(\"4em\") - scrollWrapper.scrollLeft;\n\tfiller.style.left = `${Math.max(newLeft, 0)}px`;\n});\n\nmediumZoom(\".is-zoomable\", {\n\tmargin: 50,\n\tbackground: \"rgba(255,255,255,0.8)\"\n});\n"],"names":["global","factory","module","this","EvEmitter","proto","eventName","listener","events","listeners","onceEvents","onceListeners","index","args","window","getStyleSize","value","num","measurements","getZeroSize","size","measurement","getSize","elem","style","isBorderBox","paddingWidth","paddingHeight","marginWidth","marginHeight","borderWidth","borderHeight","styleWidth","styleHeight","utils","a","b","div","obj","ary","selector","event","method","elems","ffElems","childElems","_class","methodName","threshold","timeoutName","onDocReady","readyState","str","match","$1","$2","console","WidgetClass","namespace","dataAttr","dataAttrElems","jQuery","attr","options","error","instance","require$$0","cellClassName","Cell","Slide","beginMargin","endMargin","cellAlign","cell","lastCell","lastMargin","slideWidth","previousX","x","is3d","translateX","firstSlide","positionX","progress","position","beforeGap","afterGap","cells","gap","shift","cellShift","force","dragForce","require$$1","require$$2","require$$3","require$$4","require$$5","_Flickity","animatePrototype","getComputedStyle","GUID","instances","Flickity","element","queryElement","resize","watchCSS","rightToLeft","id","opts","cellElems","slider","cellElem","cellX","startCell","sideOffset","renderX","positionValue","slide","canCellFit","i","groupCells","number","percent","percentMatch","groupWidth","cellAlignShorthands","shorthand","height","beforeGapX","lastIndex","afterGapX","wrapAround","gapWidth","gapX","cellIndex","increment","contentWidth","beginBound","endBound","type","emitArgs","$event","jQEvent","unidraggerEvents","_emitEvent","clickedCell","isWrap","isInstant","prevIndex","selectedIndex","slideableWidth","length","wrapIndex","delta","backWrapDelta","forewardWrapDelta","initialIndex","cellSlide","closest","adjCount","len","slideIndex","selectedElement","activeElement","handler","leftMethod","rightMethod","jQueryBridget","jq","Unidragger","startEvent","activeEvents","bindMethod","touchAction","handle","touch","changedTouch","cursorNodes","clickTypes","pointer","isCursorNode","isClickType","isOkayElement","moveVector","isMouseup","isTouchStart","isTouchPointer","isFocusNode","getScrollPosition","direction","dragX","originBound","freeScroll","restingX","distance","positiveResting","negativeResting","minDistance","condition","dist","minDist","isWrapAround","wrap","scroll","scrollMoveX","scrollMoveY","svgURI","PrevNextButton","arrowShape","label","svg","title","path","pathMovements","getArrowMovements","shape","x0","x1","x2","x3","y1","y2","prevDirection","nextDirection","button","disabledIndex","isEnabled","PageDots","slidesLength","count","newDots","item","dot","Player","autoPlay","onTick","time","isPageHidden","getCellsFragment","fragment","isAppend","insertCellElement","endCells","minCellIndex","changedCellIndex","prevSelectedElem","lazyAttr","lazySrcAttr","lazySrcsetAttr","imgSelector","lazyLoad","getCellLazyImages","img","LazyLoader","cellAttr","cellSrcAttr","cellSrcsetAttr","onComplete","src","srcset","className","$","makeArray","ImagesLoaded","onAlways","queryElem","elementNodeTypes","nodeType","childImgs","children","child","reURL","matches","url","loadingImage","LoadingImage","background","Background","onProgress","image","message","jqMethod","isLoaded","parentNode","imagesLoaded","onImagesLoadedProgress","require$$6","require$$7","alpha","updateSlides","slideTargetX","firstCellX","targetX","positionSlider","positionSliderAtSelected","indexes","fadeSlideA","fadeSlideB","fadeHideIndex","distances","absDistances","closestIndex","dragIndex","diff","diffPlus","diffMinus","_updateWrapShiftCells","shiftWrapCells","BROWSER_ALIASES_MAP","BROWSER_MAP","PLATFORMS_MAP","OS_MAP","ENGINE_MAP","Utils","regexp","ua","_const","version","v","s","versionA","versionB","isLoose","versionAPrecision","versionBPrecision","precision","lastPrecision","chunks","_version","chunk","arr","iterator","result","predicate","l","assigners","assigner","key","browserName","browserAlias","commonVersionIdentifier","browsersList","browser","parser","notLikeAndroid","butAndroid","regexpWithoutDeviceSpec","regexpWithDeviceSpec","osParsersList","versionName","os","platformParsersList","model","platform","iDevice","likeIDevice","osMajorVersion","enginesParsersList","engine","isGecko","likeGecko","Parser","UA","skipParsing","regex","browserDescriptor","browserParsersList","_browser","toLowerCase","_os","name","_platform","_engine","checkTree","platformsAndOSes","platformsAndOSCounter","browsers","browsersCounter","currentDefinition","platformsAndOSNames","OSMatchingDefinition","osResult","platformMatchingDefinition","platformResult","browserNames","matchingDefinition","includingAlias","defaultBrowserName","browserNameLower","alias","expectedResults","comparableVersion","currentBrowserVersion","osName","platformType","engineName","anything","anythings","Bowser","svgTagNames","svgTags","IS_NON_DIMENSIONAL","isFragment","setCSSProps","create","setAttribute","addChildren","parent","booleanishAttributes","h","attributes","_a","existingClassname","Fragment","React","_extends","target","source","isSupported","node","isNodeList","isNode","isSvg","getImagesFromSelector","createOverlay","overlay","createLoadingIndicator","color","wrapper","colorRgb","parseColor","ringColor","indicator","colorString","collen","fact","cloneTarget","template","_template$getBounding","top","left","width","clone","scrollTop","scrollLeft","createCustomEvent","params","eventParams","customEvent","mediumZoom","Promise","fn","noop","_handleClick","close","images","toggle","_handleScroll","isAnimating","active","currentScroll","zoomOptions","_handleKeyUp","update","newOptions","zoom","attach","_len","selectors","_key","newImages","imagesAccumulator","currentSelector","newImage","eventListeners","_ref","detach","_len2","_key2","imagesToDetach","on","off","eventListener","open","_ref2","_animate","container","viewportWidth","viewportHeight","zoomContainer","_zoomContainer$getBou","_width","_height","_left","_top","zoomTarget","naturalWidth","naturalHeight","_zoomTarget$getBoundi","scaleX","scaleY","scale","translateY","transform","aspectRatio","currentWidth","correctedWidth","currentHeight","correctedHeight","_active$zoomedHd$getB","_top2","_left2","_width2","_height2","_scaleX","_scaleY","_scale","_translateX","_translateY","_transform","_addLoadingIndicator","_active$original$getB","loadingIndicator","smallestDimension","resolve","_handleOpenEnd","_images","getZoomTargetSize","loadEventListener","_handleCloseEnd","_ref3","getOptions","getImages","getZoomedImage","styleInject","css","ref","insertAt","head","delay","emToPx","em","bodyFontSize","navigationContainer","contentContainer","scrollWrapper","textContainer","columnContainer","backgroundVideo","multicolumnMq","toggleContent","setContentContainerPosition","_b","toggleSymbol","navigationWidth","columnContainerWidth","columnEndMarker","contentSpace","initMulticolumn","multicolumnResizeDebounced","destroyMulticolumn","debounce","multicolumnResize","mq","toggleNavigation","toggleNavigationSymbol","toggleNavigationButton","flickity","e","filler","newLeft"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28]}