{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///../node_modules/dom-select/index.js","webpack:///../node_modules/fizzy-ui-utils/utils.js","webpack:///../node_modules/flickity/js/flickity.js","webpack:///../node_modules/flickity/js/index.js","webpack:///../node_modules/ev-emitter/ev-emitter.js","webpack:///../node_modules/unipointer/unipointer.js","webpack:///../node_modules/webpack/buildin/global.js","webpack:///../node_modules/get-size/get-size.js","webpack:///../node_modules/a11y-dialog/a11y-dialog.js","webpack:///../node_modules/lodash.throttle/index.js","webpack:///../node_modules/desandro-matches-selector/matches-selector.js","webpack:///../node_modules/flickity/js/cell.js","webpack:///../node_modules/flickity/js/slide.js","webpack:///../node_modules/flickity/js/animate.js","webpack:///../node_modules/flickity/js/drag.js","webpack:///../node_modules/unidragger/unidragger.js","webpack:///../node_modules/flickity/js/prev-next-button.js","webpack:///../node_modules/flickity/js/page-dots.js","webpack:///../node_modules/flickity/js/player.js","webpack:///../node_modules/flickity/js/add-remove-cell.js","webpack:///../node_modules/flickity/js/lazyload.js","webpack:///../node_modules/flickity-imagesloaded/flickity-imagesloaded.js","webpack:///../node_modules/imagesloaded/imagesloaded.js","webpack:///../node_modules/flickity-fade/flickity-fade.js","webpack:///./ui/components/accordion/accordion.init.js","webpack:///./ui/components/expandable/expandable.init.js","webpack:///./ui/blocks/image/image.init.js","webpack:///./ui/blocks/language-select/language-select.init.js","webpack:///./ui/components/page-nav/page-nav.init.js","webpack:///./ui/components/modal/modal.init.js","webpack:///./ui/blocks/table/table.init.js","webpack:///./ui/components/tabs/tabs.init.js","webpack:///./js/lib/measureViewport.js","webpack:///./ui/components/global-header/partials/nav-item/nav-item.init.js","webpack:///./ui/components/global-header/partials/navigation/navigation.init.js","webpack:///./js/lib/initModule.js","webpack:///./js/lib/detectIE11.js","webpack:///./js/browser.js","webpack:///./js/lib/domReady.js","webpack:///./js/lib/load-svg.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","selector","parent","document","querySelector","all","selection","querySelectorAll","Array","slice","window","factory","matchesSelector","utils","a","b","prop","num","div","arraySlice","makeArray","obj","isArray","length","removeFrom","ary","index","indexOf","splice","getParent","elem","parentNode","body","getQueryElement","handleEvent","event","method","type","this","filterFindElements","elems","ffElems","forEach","HTMLElement","push","childElems","debounceMethod","_class","methodName","threshold","timeoutName","timeout","clearTimeout","args","arguments","_this","setTimeout","apply","docReady","callback","readyState","addEventListener","toDashed","str","replace","match","$1","$2","toLowerCase","console","htmlInit","WidgetClass","namespace","dashedNamespace","dataAttr","dataAttrElems","jsDashElems","concat","dataOptionsAttr","jQuery","options","attr","getAttribute","JSON","parse","error","className","instance","data","EvEmitter","getSize","Cell","Slide","animatePrototype","getComputedStyle","moveElements","toElem","appendChild","shift","GUID","instances","Flickity","element","queryElement","flickityGUID","option","$element","extend","constructor","defaults","_create","accessibility","cellAlign","freeScrollFriction","friction","namespaceJQueryEvents","percentPosition","resize","selectedAttraction","setGallerySize","createMethods","proto","id","guid","eventName","selectedIndex","restingFrames","x","velocity","originSide","rightToLeft","viewport","createElement","_createSlider","watchCSS","on","listener","activate","opts","isActive","classList","add","_filterFindCellElements","children","slider","reloadCells","tabIndex","emitEvent","selectInitialIndex","isInitActivated","dispatchEvent","style","cellSelector","cells","_makeCells","positionCells","_getWrapShiftCells","map","cellElem","getLastCell","getLastSlide","slides","_sizeCells","_positionCells","maxCellHeight","cellX","startCell","size","outerWidth","len","cell","setPosition","Math","max","outerHeight","slideableWidth","updateSlides","_containSlides","slidesWidth","target","slide","nextMargin","canCellFit","_getCanCellFit","slideWidth","firstMargin","updateTarget","addCell","updateSelectedSlide","groupCells","number","parseInt","percentMatch","percent","innerWidth","_init","reposition","positionSliderAtSelected","setCellAlign","cursorPosition","cellAlignShorthands","center","left","right","shorthand","height","adaptiveHeight","selectedSlide","wrapAround","_unshiftCells","beforeShiftCells","afterShiftCells","gapX","cellIndex","_getGapCells","increment","contain","isRightToLeft","beginMargin","endMargin","contentWidth","isContentSmaller","beginBound","endBound","min","emitArgs","$event","jQEvent","Event","trigger","select","isWrap","isInstant","_wrapSelect","modulo","prevIndex","startAnimation","wrapIndex","delta","abs","backWrapDelta","forewardWrapDelta","isDragSelect","previous","next","unselectSelectedSlide","selectedCells","selectedElements","getCellElements","selectedCell","selectedElement","unselect","initialIndex","queryCell","selectCell","getCellSlideIndex","getCell","getCells","getParentCell","getAdjacentCellElements","adjCount","undefined","cellElems","slideIndex","uiChange","childUIPointerDown","preventDefault","focus","onresize","content","deactivate","onkeydown","isNotFocused","activeElement","handler","keyboardHandlers","keyCode","37","leftMethod","39","rightMethod","prevScrollY","pageYOffset","preventScroll","scrollTo","pageXOffset","remove","destroy","removeChild","removeAttribute","removeEventListener","allOff","removeData","bridget","setJQuery","jq","events","_events","listeners","once","onceEvents","_onceEvents","off","onceListeners","Unipointer","bindStartEvent","_bindStartEvent","unbindStartEvent","isAdd","bindMethod","startEvent","PointerEvent","getTouch","touches","touch","identifier","pointerIdentifier","onmousedown","button","_pointerDown","ontouchstart","changedTouches","onpointerdown","pointer","isPointerDown","pointerId","pointerDown","_bindPostStartEvents","postStartEvents","mousedown","touchstart","pointerdown","_boundPointerEvents","_unbindPostStartEvents","onmousemove","_pointerMove","onpointermove","ontouchmove","pointerMove","onmouseup","_pointerUp","onpointerup","ontouchend","_pointerDone","pointerUp","_pointerReset","pointerDone","onpointercancel","_pointerCancel","ontouchcancel","pointerCancel","getPointerPoint","pageX","y","pageY","g","Function","e","getStyleSize","parseFloat","isNaN","logError","message","measurements","measurementsLength","getStyle","isBoxSizeOuter","isSetup","width","padding","borderStyle","borderWidth","boxSizing","documentElement","round","setup","nodeType","display","innerHeight","getZeroSize","offsetWidth","offsetHeight","isBorderBox","measurement","paddingWidth","paddingLeft","paddingRight","paddingHeight","paddingTop","paddingBottom","marginWidth","marginLeft","marginRight","marginHeight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderHeight","borderTopWidth","borderBottomWidth","isBorderBoxSizeOuter","styleWidth","styleHeight","global","focusedBeforeDialog","FOCUSABLE_ELEMENTS","A11yDialog","node","targets","_show","show","_hide","hide","_maintainFocus","_bindKeypress","container","dialog","role","useDialog","nodeName","_listeners","toArray","collection","$$","context","setFocusToFirstItem","focusableChildren","getFocusableChildren","focused","join","filter","child","getClientRects","siblings","_targets","NodeList","isPrototypeOf","Element","collect","childNodes","shown","hasAttribute","setAttribute","_openers","opener","_closers","closer","_fire","showModal","close","which","focusedItemIndex","shiftKey","trapTabKey","contains","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","freeGlobal","freeSelf","self","root","objectToString","toString","nativeMax","nativeMin","now","Date","debounce","func","wait","lastArgs","lastThis","maxWait","result","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","TypeError","invokeFunc","time","thisArg","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","remainingWait","debounced","isInvoking","toNumber","isObject","cancel","flush","isObjectLike","isSymbol","other","valueOf","isBinary","test","matchesMethod","ElemProto","matches","prefixes","position","side","renderPosition","setDefaultTarget","marginProperty","getPositionValue","wrapShift","isOriginLeft","lastCell","lastMargin","isAnimating","animate","applyDragForce","applySelectedAttraction","previousX","integratePhysics","positionSlider","settle","requestAnimationFrame","shiftWrapCells","setTranslateX","dispatchScrollEvent","is3d","translateX","transform","firstSlide","positionX","progress","isFreeScrolling","beforeGap","_shiftCells","afterGap","gap","cellShift","getFrictionFactor","force","isDraggable","dragForce","dragX","applyForce","Unidragger","draggable","dragThreshold","_touchActionValue","isTouch","isTouchmoveScrollCanceled","_createDrag","onActivateDrag","_uiChangeDrag","onDeactivateDrag","updateDraggable","handles","bindHandles","unbindHandles","bindDrag","unbindDrag","okayPointerDown","_pointerDownPreventDefault","pointerDownFocus","pointerDownBlur","pointerDownScroll","getScrollPosition","_pointerDownDefault","pointerDownPointer","focusNodes","INPUT","TEXTAREA","SELECT","isTouchStart","isTouchPointer","pointerType","isFocusNode","hasDragStarted","moveVector","isTouchScrolling","_dragPointerUp","dragStart","dragStartPosition","_dragPointerMove","_dragMove","dragMove","previousDragX","direction","originBound","dragMoveTime","dragEnd","freeScroll","dragEndRestingSelect","restingX","getRestingPosition","dragEndBoostSelect","distance","getSlideDistance","positiveResting","_getClosestResting","negativeResting","minDistance","Infinity","condition","md","isWrapAround","wrap","floor","staticClick","clickedCell","onscroll","scroll","scrollMoveX","scrollMoveY","_bindHandles","touchAction","handle","cursorNodes","OPTION","clickTypes","radio","checkbox","submit","image","file","isCursorNode","isClickType","isOkay","blur","isDragging","_dragStart","_dragEnd","_staticClick","isPreventingClicks","onclick","isIgnoringMouseUp","svgURI","PrevNextButton","isEnabled","isPrevious","leftDirection","isLeft","disable","svg","createSVG","update","createElementNS","shape","path","pathMovements","arrowShape","x0","x1","y1","x2","y2","x3","enable","disabled","lastIndex","boundIndex","prevNextButtons","_createPrevNextButtons","prevButton","nextButton","activatePrevNextButtons","deactivatePrevNextButtons","PageDots","holder","dots","handleClick","onClick","setDots","addDots","removeDots","count","fragment","createDocumentFragment","newDots","dot","updateSelected","selectedDot","onTap","pageDots","_createPageDots","activatePageDots","updateSelectedPageDots","updatePageDots","deactivatePageDots","Player","state","onVisibilityChange","visibilityChange","onVisibilityPlay","visibilityPlay","play","hidden","tick","autoPlay","clear","stop","pause","unpause","pauseAutoPlayOnHover","_createPlayer","player","activatePlayer","stopPlayer","deactivatePlayer","playPlayer","pausePlayer","unpausePlayer","onmouseenter","onmouseleave","insert","getCellsFragment","isAppend","insertCellElement","insertBefore","endCells","cellChange","append","prepend","minCellIndex","cellSizeChange","changedCellIndex","isPositioningSlider","prevSelectedElem","LazyLoader","img","flickity","load","_createLazyload","lazyLoad","lazyImages","lazyCellImages","lazyloadAttr","srcAttr","srcsetAttr","imgs","getCellLazyImages","src","srcset","onload","complete","onerror","imagesLoaded","_createImagesLoaded","$","ImagesLoaded","onAlways","queryElem","elements","getImages","jqDeferred","Deferred","check","images","addElementImages","addImage","background","addElementBackgroundImages","elementNodeTypes","childImgs","1","9","11","LoadingImage","Background","url","Image","reURL","exec","backgroundImage","addBackground","loadingImage","onProgress","progressedCount","hasAnyBroken","isLoaded","notify","debug","log","isComplete","jqMethod","getIsImageComplete","confirm","naturalWidth","proxyImage","unbindEvents","makeJQueryPlugin","fn","promise","slideUpdateTarget","fade","slideTargetX","firstCellX","targetX","setOpacity","alpha","opacity","_createFade","fadeIndex","prevSelectedIndex","onSelectFade","onDragEndFade","onSettleFade","onActivateFade","onDeactivateFade","didDragEnd","fadeSlides","indexes","getFadeIndexes","fadeSlideA","fadeSlideB","wrapDifference","fadeHideIndex","getFadeDragWrapIndexes","getFadeDragLimitIndexes","distances","absDistances","closestIndex","dragIndex","diff","diffPlus","diffMinus","toggle","AccordionGroup","el","ui","accordions","toggleAll","dataset","controlled","onControlToggle","current","accordion","onToggle","drawer","link","Accordion","control","Expandable","startOpen","isExpanded","closedHeight","aria","box","panel","lowImage","resolveImage","Promise","resolve","reject","loadedImage","Error","loadImage","then","catch","detectBoundingBox","getBoundingClientRect","top","clientWidth","bottom","clientHeight","PageNav","nav","Modal","closeBtn","carousel","iframe","video","flkty","addEvents","rows","heads","row","idx","innerText","tabsList","tabs","panels","tab","throttle","breakpoint","closeMenu","NavItem","menu","icon","backdrop","back","navigation","innerItems","menuOpen","desktop","windowIsLargerThan","onMenuOpen","openItem","firstElementChild","item","previousElementSibling","lastElementChild","nextElementSibling","onMenuClose","handleMenuToggle","closeMainMenu","Navigation","items","utility","utilityItems","globalHeader","navOpen","subNavOpen","closeNavMenu","handleResize","firstChild","handleToggle","openNavMenu","addEventListeners","limit","inner","MSInputMethodContext","documentMode","svgSpritePath","location","protocol","host","cb","isTurnStorybook","MutationObserver","mutationsList","observe","getElementById","childList","subtree","domReady","initModule","sprite","ajax","XMLHttpRequest","open","send","responseText","substr","status","innerHTML"],"mappings":"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","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/assets/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 24);\n","module.exports = one;\nmodule.exports.all = all;\n\nfunction one (selector, parent) {\n parent || (parent = document);\n return parent.querySelector(selector);\n}\n\nfunction all (selector, parent) {\n parent || (parent = document);\n var selection = parent.querySelectorAll(selector);\n return Array.prototype.slice.call(selection);\n}\n","/**\n * Fizzy UI utils v2.0.7\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'desandro-matches-selector/matches-selector'\n ], function( matchesSelector ) {\n return factory( window, matchesSelector );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('desandro-matches-selector')\n );\n } else {\n // browser global\n window.fizzyUIUtils = factory(\n window,\n window.matchesSelector\n );\n }\n\n}( window, function factory( window, matchesSelector ) {\n\n'use strict';\n\nvar utils = {};\n\n// ----- extend ----- //\n\n// extends objects\nutils.extend = function( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n};\n\n// ----- modulo ----- //\n\nutils.modulo = function( num, div ) {\n return ( ( num % div ) + div ) % div;\n};\n\n// ----- makeArray ----- //\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nutils.makeArray = function( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n // return empty array if undefined or null. #6\n if ( obj === null || obj === undefined ) {\n return [];\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n};\n\n// ----- removeFrom ----- //\n\nutils.removeFrom = function( ary, obj ) {\n var index = ary.indexOf( obj );\n if ( index != -1 ) {\n ary.splice( index, 1 );\n }\n};\n\n// ----- getParent ----- //\n\nutils.getParent = function( elem, selector ) {\n while ( elem.parentNode && elem != document.body ) {\n elem = elem.parentNode;\n if ( matchesSelector( elem, selector ) ) {\n return elem;\n }\n }\n};\n\n// ----- getQueryElement ----- //\n\n// use element as selector string\nutils.getQueryElement = function( elem ) {\n if ( typeof elem == 'string' ) {\n return document.querySelector( elem );\n }\n return elem;\n};\n\n// ----- handleEvent ----- //\n\n// enable .ontype to trigger from .addEventListener( elem, 'type' )\nutils.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// ----- filterFindElements ----- //\n\nutils.filterFindElements = function( elems, selector ) {\n // make array of elems\n elems = utils.makeArray( elems );\n var ffElems = [];\n\n elems.forEach( function( elem ) {\n // check that elem is an actual element\n if ( !( elem instanceof HTMLElement ) ) {\n return;\n }\n // add elem if no selector\n if ( !selector ) {\n ffElems.push( elem );\n return;\n }\n // filter & find items if we have a selector\n // filter\n if ( matchesSelector( elem, selector ) ) {\n ffElems.push( elem );\n }\n // find children\n var childElems = elem.querySelectorAll( selector );\n // concat childElems to filterFound array\n for ( var i=0; i < childElems.length; i++ ) {\n ffElems.push( childElems[i] );\n }\n });\n\n return ffElems;\n};\n\n// ----- debounceMethod ----- //\n\nutils.debounceMethod = function( _class, methodName, threshold ) {\n threshold = threshold || 100;\n // original method\n var method = _class.prototype[ methodName ];\n var timeoutName = methodName + 'Timeout';\n\n _class.prototype[ methodName ] = function() {\n var timeout = this[ timeoutName ];\n clearTimeout( timeout );\n\n var args = arguments;\n var _this = this;\n this[ timeoutName ] = setTimeout( function() {\n method.apply( _this, args );\n delete _this[ timeoutName ];\n }, threshold );\n };\n};\n\n// ----- docReady ----- //\n\nutils.docReady = function( callback ) {\n var readyState = document.readyState;\n if ( readyState == 'complete' || readyState == 'interactive' ) {\n // do async to allow for other scripts to run. metafizzy/flickity#441\n setTimeout( callback );\n } else {\n document.addEventListener( 'DOMContentLoaded', callback );\n }\n};\n\n// ----- htmlInit ----- //\n\n// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/\nutils.toDashed = function( str ) {\n return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {\n return $1 + '-' + $2;\n }).toLowerCase();\n};\n\nvar console = window.console;\n/**\n * allow user to initialize classes via [data-namespace] or .js-namespace class\n * htmlInit( Widget, 'widgetName' )\n * options are parsed from data-namespace-options\n */\nutils.htmlInit = function( WidgetClass, namespace ) {\n utils.docReady( function() {\n var dashedNamespace = utils.toDashed( namespace );\n var dataAttr = 'data-' + dashedNamespace;\n var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );\n var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );\n var elems = utils.makeArray( dataAttrElems )\n .concat( utils.makeArray( jsDashElems ) );\n var dataOptionsAttr = dataAttr + '-options';\n var jQuery = window.jQuery;\n\n elems.forEach( function( elem ) {\n var attr = elem.getAttribute( dataAttr ) ||\n elem.getAttribute( dataOptionsAttr );\n var options;\n try {\n options = attr && JSON.parse( attr );\n } catch ( error ) {\n // log error, do not initialize\n if ( console ) {\n console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +\n ': ' + error );\n }\n return;\n }\n // initialize\n var instance = new WidgetClass( elem, options );\n // make available via $().data('namespace')\n if ( jQuery ) {\n jQuery.data( elem, namespace, instance );\n }\n });\n\n });\n};\n\n// ----- ----- //\n\nreturn utils;\n\n}));\n","// Flickity main\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'get-size/get-size',\n 'fizzy-ui-utils/utils',\n './cell',\n './slide',\n './animate'\n ], function( EvEmitter, getSize, utils, Cell, Slide, animatePrototype ) {\n return factory( window, EvEmitter, getSize, utils, Cell, Slide, animatePrototype );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter'),\n require('get-size'),\n require('fizzy-ui-utils'),\n require('./cell'),\n require('./slide'),\n require('./animate')\n );\n } else {\n // browser global\n var _Flickity = window.Flickity;\n\n window.Flickity = factory(\n window,\n window.EvEmitter,\n window.getSize,\n window.fizzyUIUtils,\n _Flickity.Cell,\n _Flickity.Slide,\n _Flickity.animatePrototype\n );\n }\n\n}( window, function factory( window, EvEmitter, getSize,\n utils, Cell, Slide, animatePrototype ) {\n\n'use strict';\n\n// vars\nvar jQuery = window.jQuery;\nvar getComputedStyle = window.getComputedStyle;\nvar console = window.console;\n\nfunction moveElements( elems, toElem ) {\n elems = utils.makeArray( elems );\n while ( elems.length ) {\n toElem.appendChild( elems.shift() );\n }\n}\n\n// -------------------------- Flickity -------------------------- //\n\n// globally unique identifiers\nvar GUID = 0;\n// internal store of all Flickity intances\nvar instances = {};\n\nfunction Flickity( element, options ) {\n var queryElement = utils.getQueryElement( element );\n if ( !queryElement ) {\n if ( console ) {\n console.error( 'Bad element for Flickity: ' + ( queryElement || element ) );\n }\n return;\n }\n this.element = queryElement;\n // do not initialize twice on same element\n if ( this.element.flickityGUID ) {\n var instance = instances[ this.element.flickityGUID ];\n instance.option( options );\n return instance;\n }\n\n // add jQuery\n if ( jQuery ) {\n this.$element = jQuery( this.element );\n }\n // options\n this.options = utils.extend( {}, this.constructor.defaults );\n this.option( options );\n\n // kick things off\n this._create();\n}\n\nFlickity.defaults = {\n accessibility: true,\n // adaptiveHeight: false,\n cellAlign: 'center',\n // cellSelector: undefined,\n // contain: false,\n freeScrollFriction: 0.075, // friction when free-scrolling\n friction: 0.28, // friction when selecting\n namespaceJQueryEvents: true,\n // initialIndex: 0,\n percentPosition: true,\n resize: true,\n selectedAttraction: 0.025,\n setGallerySize: true\n // watchCSS: false,\n // wrapAround: false\n};\n\n// hash of methods triggered on _create()\nFlickity.createMethods = [];\n\nvar proto = Flickity.prototype;\n// inherit EventEmitter\nutils.extend( proto, EvEmitter.prototype );\n\nproto._create = function() {\n // add id for Flickity.data\n var id = this.guid = ++GUID;\n this.element.flickityGUID = id; // expando\n instances[ id ] = this; // associate via id\n // initial properties\n this.selectedIndex = 0;\n // how many frames slider has been in same position\n this.restingFrames = 0;\n // initial physics properties\n this.x = 0;\n this.velocity = 0;\n this.originSide = this.options.rightToLeft ? 'right' : 'left';\n // create viewport & slider\n this.viewport = document.createElement('div');\n this.viewport.className = 'flickity-viewport';\n this._createSlider();\n\n if ( this.options.resize || this.options.watchCSS ) {\n window.addEventListener( 'resize', this );\n }\n\n // add listeners from on option\n for ( var eventName in this.options.on ) {\n var listener = this.options.on[ eventName ];\n this.on( eventName, listener );\n }\n\n Flickity.createMethods.forEach( function( method ) {\n this[ method ]();\n }, this );\n\n if ( this.options.watchCSS ) {\n this.watchCSS();\n } else {\n this.activate();\n }\n\n};\n\n/**\n * set options\n * @param {Object} opts\n */\nproto.option = function( opts ) {\n utils.extend( this.options, opts );\n};\n\nproto.activate = function() {\n if ( this.isActive ) {\n return;\n }\n this.isActive = true;\n this.element.classList.add('flickity-enabled');\n if ( this.options.rightToLeft ) {\n this.element.classList.add('flickity-rtl');\n }\n\n this.getSize();\n // move initial cell elements so they can be loaded as cells\n var cellElems = this._filterFindCellElements( this.element.children );\n moveElements( cellElems, this.slider );\n this.viewport.appendChild( this.slider );\n this.element.appendChild( this.viewport );\n // get cells from children\n this.reloadCells();\n\n if ( this.options.accessibility ) {\n // allow element to focusable\n this.element.tabIndex = 0;\n // listen for key presses\n this.element.addEventListener( 'keydown', this );\n }\n\n this.emitEvent('activate');\n this.selectInitialIndex();\n // flag for initial activation, for using initialIndex\n this.isInitActivated = true;\n // ready event. #493\n this.dispatchEvent('ready');\n};\n\n// slider positions the cells\nproto._createSlider = function() {\n // slider element does all the positioning\n var slider = document.createElement('div');\n slider.className = 'flickity-slider';\n slider.style[ this.originSide ] = 0;\n this.slider = slider;\n};\n\nproto._filterFindCellElements = function( elems ) {\n return utils.filterFindElements( elems, this.options.cellSelector );\n};\n\n// goes through all children\nproto.reloadCells = function() {\n // collection of item elements\n this.cells = this._makeCells( this.slider.children );\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n};\n\n/**\n * turn elements into Flickity.Cells\n * @param {Array or NodeList or HTMLElement} elems\n * @returns {Array} items - collection of new Flickity Cells\n */\nproto._makeCells = function( elems ) {\n var cellElems = this._filterFindCellElements( elems );\n\n // create new Flickity for collection\n var cells = cellElems.map( function( cellElem ) {\n return new Cell( cellElem, this );\n }, this );\n\n return cells;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.getLastSlide = function() {\n return this.slides[ this.slides.length - 1 ];\n};\n\n// positions all cells\nproto.positionCells = function() {\n // size all cells\n this._sizeCells( this.cells );\n // position all cells\n this._positionCells( 0 );\n};\n\n/**\n * position certain cells\n * @param {Integer} index - which cell to start with\n */\nproto._positionCells = function( index ) {\n index = index || 0;\n // also measure maxCellHeight\n // start 0 if positioning all cells\n this.maxCellHeight = index ? this.maxCellHeight || 0 : 0;\n var cellX = 0;\n // get cellX\n if ( index > 0 ) {\n var startCell = this.cells[ index - 1 ];\n cellX = startCell.x + startCell.size.outerWidth;\n }\n var len = this.cells.length;\n for ( var i=index; i < len; i++ ) {\n var cell = this.cells[i];\n cell.setPosition( cellX );\n cellX += cell.size.outerWidth;\n this.maxCellHeight = Math.max( cell.size.outerHeight, this.maxCellHeight );\n }\n // keep track of cellX for wrap-around\n this.slideableWidth = cellX;\n // slides\n this.updateSlides();\n // contain slides target\n this._containSlides();\n // update slidesWidth\n this.slidesWidth = len ? this.getLastSlide().target - this.slides[0].target : 0;\n};\n\n/**\n * cell.getSize() on multiple cells\n * @param {Array} cells\n */\nproto._sizeCells = function( cells ) {\n cells.forEach( function( cell ) {\n cell.getSize();\n });\n};\n\n// -------------------------- -------------------------- //\n\nproto.updateSlides = function() {\n this.slides = [];\n if ( !this.cells.length ) {\n return;\n }\n\n var slide = new Slide( this );\n this.slides.push( slide );\n var isOriginLeft = this.originSide == 'left';\n var nextMargin = isOriginLeft ? 'marginRight' : 'marginLeft';\n\n var canCellFit = this._getCanCellFit();\n\n this.cells.forEach( function( cell, i ) {\n // just add cell if first cell in slide\n if ( !slide.cells.length ) {\n slide.addCell( cell );\n return;\n }\n\n var slideWidth = ( slide.outerWidth - slide.firstMargin ) +\n ( cell.size.outerWidth - cell.size[ nextMargin ] );\n\n if ( canCellFit.call( this, i, slideWidth ) ) {\n slide.addCell( cell );\n } else {\n // doesn't fit, new slide\n slide.updateTarget();\n\n slide = new Slide( this );\n this.slides.push( slide );\n slide.addCell( cell );\n }\n }, this );\n // last slide\n slide.updateTarget();\n // update .selectedSlide\n this.updateSelectedSlide();\n};\n\nproto._getCanCellFit = function() {\n var groupCells = this.options.groupCells;\n if ( !groupCells ) {\n return function() {\n return false;\n };\n } else if ( typeof groupCells == 'number' ) {\n // group by number. 3 -> [0,1,2], [3,4,5], ...\n var number = parseInt( groupCells, 10 );\n return function( i ) {\n return ( i % number ) !== 0;\n };\n }\n // default, group by width of slide\n // parse '75%\n var percentMatch = typeof groupCells == 'string' &&\n groupCells.match(/^(\\d+)%$/);\n var percent = percentMatch ? parseInt( percentMatch[1], 10 ) / 100 : 1;\n return function( i, slideWidth ) {\n return slideWidth <= ( this.size.innerWidth + 1 ) * percent;\n };\n};\n\n// alias _init for jQuery plugin .flickity()\nproto._init =\nproto.reposition = function() {\n this.positionCells();\n this.positionSliderAtSelected();\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n this.setCellAlign();\n this.cursorPosition = this.size.innerWidth * this.cellAlign;\n};\n\nvar cellAlignShorthands = {\n // cell align, then based on origin side\n center: {\n left: 0.5,\n right: 0.5\n },\n left: {\n left: 0,\n right: 1\n },\n right: {\n right: 0,\n left: 1\n }\n};\n\nproto.setCellAlign = function() {\n var shorthand = cellAlignShorthands[ this.options.cellAlign ];\n this.cellAlign = shorthand ? shorthand[ this.originSide ] : this.options.cellAlign;\n};\n\nproto.setGallerySize = function() {\n if ( this.options.setGallerySize ) {\n var height = this.options.adaptiveHeight && this.selectedSlide ?\n this.selectedSlide.height : this.maxCellHeight;\n this.viewport.style.height = height + 'px';\n }\n};\n\nproto._getWrapShiftCells = function() {\n // only for wrap-around\n if ( !this.options.wrapAround ) {\n return;\n }\n // unshift previous cells\n this._unshiftCells( this.beforeShiftCells );\n this._unshiftCells( this.afterShiftCells );\n // get before cells\n // initial gap\n var gapX = this.cursorPosition;\n var cellIndex = this.cells.length - 1;\n this.beforeShiftCells = this._getGapCells( gapX, cellIndex, -1 );\n // get after cells\n // ending gap between last cell and end of gallery viewport\n gapX = this.size.innerWidth - this.cursorPosition;\n // start cloning at first cell, working forwards\n this.afterShiftCells = this._getGapCells( gapX, 0, 1 );\n};\n\nproto._getGapCells = function( gapX, cellIndex, increment ) {\n // keep adding cells until the cover the initial gap\n var cells = [];\n while ( gapX > 0 ) {\n var cell = this.cells[ cellIndex ];\n if ( !cell ) {\n break;\n }\n cells.push( cell );\n cellIndex += increment;\n gapX -= cell.size.outerWidth;\n }\n return cells;\n};\n\n// ----- contain ----- //\n\n// contain cell targets so no excess sliding\nproto._containSlides = function() {\n if ( !this.options.contain || this.options.wrapAround || !this.cells.length ) {\n return;\n }\n var isRightToLeft = this.options.rightToLeft;\n var beginMargin = isRightToLeft ? 'marginRight' : 'marginLeft';\n var endMargin = isRightToLeft ? 'marginLeft' : 'marginRight';\n var contentWidth = this.slideableWidth - this.getLastCell().size[ endMargin ];\n // content is less than gallery size\n var isContentSmaller = contentWidth < this.size.innerWidth;\n // bounds\n var beginBound = this.cursorPosition + this.cells[0].size[ beginMargin ];\n var endBound = contentWidth - this.size.innerWidth * ( 1 - this.cellAlign );\n // contain each cell target\n this.slides.forEach( function( slide ) {\n if ( isContentSmaller ) {\n // all cells fit inside gallery\n slide.target = contentWidth * this.cellAlign;\n } else {\n // contain to bounds\n slide.target = Math.max( slide.target, beginBound );\n slide.target = Math.min( slide.target, endBound );\n }\n }, this );\n};\n\n// ----- ----- //\n\n/**\n * emits events via eventEmitter and jQuery events\n * @param {String} type - name of event\n * @param {Event} event - original event\n * @param {Array} args - extra arguments\n */\nproto.dispatchEvent = function( type, event, args ) {\n var emitArgs = event ? [ event ].concat( args ) : args;\n this.emitEvent( type, emitArgs );\n\n if ( jQuery && this.$element ) {\n // default trigger with type if no event\n type += this.options.namespaceJQueryEvents ? '.flickity' : '';\n var $event = type;\n if ( event ) {\n // create jQuery event\n var jQEvent = jQuery.Event( event );\n jQEvent.type = type;\n $event = jQEvent;\n }\n this.$element.trigger( $event, args );\n }\n};\n\n// -------------------------- select -------------------------- //\n\n/**\n * @param {Integer} index - index of the slide\n * @param {Boolean} isWrap - will wrap-around to last/first if at the end\n * @param {Boolean} isInstant - will immediately set position at selected cell\n */\nproto.select = function( index, isWrap, isInstant ) {\n if ( !this.isActive ) {\n return;\n }\n index = parseInt( index, 10 );\n this._wrapSelect( index );\n\n if ( this.options.wrapAround || isWrap ) {\n index = utils.modulo( index, this.slides.length );\n }\n // bail if invalid index\n if ( !this.slides[ index ] ) {\n return;\n }\n var prevIndex = this.selectedIndex;\n this.selectedIndex = index;\n this.updateSelectedSlide();\n if ( isInstant ) {\n this.positionSliderAtSelected();\n } else {\n this.startAnimation();\n }\n if ( this.options.adaptiveHeight ) {\n this.setGallerySize();\n }\n // events\n this.dispatchEvent( 'select', null, [ index ] );\n // change event if new index\n if ( index != prevIndex ) {\n this.dispatchEvent( 'change', null, [ index ] );\n }\n // old v1 event name, remove in v3\n this.dispatchEvent('cellSelect');\n};\n\n// wraps position for wrapAround, to move to closest slide. #113\nproto._wrapSelect = function( index ) {\n var len = this.slides.length;\n var isWrapping = this.options.wrapAround && len > 1;\n if ( !isWrapping ) {\n return index;\n }\n var wrapIndex = utils.modulo( index, len );\n // go to shortest\n var delta = Math.abs( wrapIndex - this.selectedIndex );\n var backWrapDelta = Math.abs( ( wrapIndex + len ) - this.selectedIndex );\n var forewardWrapDelta = Math.abs( ( wrapIndex - len ) - this.selectedIndex );\n if ( !this.isDragSelect && backWrapDelta < delta ) {\n index += len;\n } else if ( !this.isDragSelect && forewardWrapDelta < delta ) {\n index -= len;\n }\n // wrap position so slider is within normal area\n if ( index < 0 ) {\n this.x -= this.slideableWidth;\n } else if ( index >= len ) {\n this.x += this.slideableWidth;\n }\n};\n\nproto.previous = function( isWrap, isInstant ) {\n this.select( this.selectedIndex - 1, isWrap, isInstant );\n};\n\nproto.next = function( isWrap, isInstant ) {\n this.select( this.selectedIndex + 1, isWrap, isInstant );\n};\n\nproto.updateSelectedSlide = function() {\n var slide = this.slides[ this.selectedIndex ];\n // selectedIndex could be outside of slides, if triggered before resize()\n if ( !slide ) {\n return;\n }\n // unselect previous selected slide\n this.unselectSelectedSlide();\n // update new selected slide\n this.selectedSlide = slide;\n slide.select();\n this.selectedCells = slide.cells;\n this.selectedElements = slide.getCellElements();\n // HACK: selectedCell & selectedElement is first cell in slide, backwards compatibility\n // Remove in v3?\n this.selectedCell = slide.cells[0];\n this.selectedElement = this.selectedElements[0];\n};\n\nproto.unselectSelectedSlide = function() {\n if ( this.selectedSlide ) {\n this.selectedSlide.unselect();\n }\n};\n\nproto.selectInitialIndex = function() {\n var initialIndex = this.options.initialIndex;\n // already activated, select previous selectedIndex\n if ( this.isInitActivated ) {\n this.select( this.selectedIndex, false, true );\n return;\n }\n // select with selector string\n if ( initialIndex && typeof initialIndex == 'string' ) {\n var cell = this.queryCell( initialIndex );\n if ( cell ) {\n this.selectCell( initialIndex, false, true );\n return;\n }\n }\n\n var index = 0;\n // select with number\n if ( initialIndex && this.slides[ initialIndex ] ) {\n index = initialIndex;\n }\n // select instantly\n this.select( index, false, true );\n};\n\n/**\n * select slide from number or cell element\n * @param {Element or Number} elem\n */\nproto.selectCell = function( value, isWrap, isInstant ) {\n // get cell\n var cell = this.queryCell( value );\n if ( !cell ) {\n return;\n }\n\n var index = this.getCellSlideIndex( cell );\n this.select( index, isWrap, isInstant );\n};\n\nproto.getCellSlideIndex = function( cell ) {\n // get index of slides that has cell\n for ( var i=0; i < this.slides.length; i++ ) {\n var slide = this.slides[i];\n var index = slide.cells.indexOf( cell );\n if ( index != -1 ) {\n return i;\n }\n }\n};\n\n// -------------------------- get cells -------------------------- //\n\n/**\n * get Flickity.Cell, given an Element\n * @param {Element} elem\n * @returns {Flickity.Cell} item\n */\nproto.getCell = function( elem ) {\n // loop through cells to get the one that matches\n for ( var i=0; i < this.cells.length; i++ ) {\n var cell = this.cells[i];\n if ( cell.element == elem ) {\n return cell;\n }\n }\n};\n\n/**\n * get collection of Flickity.Cells, given Elements\n * @param {Element, Array, NodeList} elems\n * @returns {Array} cells - Flickity.Cells\n */\nproto.getCells = function( elems ) {\n elems = utils.makeArray( elems );\n var cells = [];\n elems.forEach( function( elem ) {\n var cell = this.getCell( elem );\n if ( cell ) {\n cells.push( cell );\n }\n }, this );\n return cells;\n};\n\n/**\n * get cell elements\n * @returns {Array} cellElems\n */\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\n/**\n * get parent cell from an element\n * @param {Element} elem\n * @returns {Flickit.Cell} cell\n */\nproto.getParentCell = function( elem ) {\n // first check if elem is cell\n var cell = this.getCell( elem );\n if ( cell ) {\n return cell;\n }\n // try to get parent cell elem\n elem = utils.getParent( elem, '.flickity-slider > *' );\n return this.getCell( elem );\n};\n\n/**\n * get cells adjacent to a slide\n * @param {Integer} adjCount - number of adjacent slides\n * @param {Integer} index - index of slide to start\n * @returns {Array} cells - array of Flickity.Cells\n */\nproto.getAdjacentCellElements = function( adjCount, index ) {\n if ( !adjCount ) {\n return this.selectedSlide.getCellElements();\n }\n index = index === undefined ? this.selectedIndex : index;\n\n var len = this.slides.length;\n if ( 1 + ( adjCount * 2 ) >= len ) {\n return this.getCellElements();\n }\n\n var cellElems = [];\n for ( var i = index - adjCount; i <= index + adjCount ; i++ ) {\n var slideIndex = this.options.wrapAround ? utils.modulo( i, len ) : i;\n var slide = this.slides[ slideIndex ];\n if ( slide ) {\n cellElems = cellElems.concat( slide.getCellElements() );\n }\n }\n return cellElems;\n};\n\n/**\n * select slide from number or cell element\n * @param {Element, Selector String, or Number} selector\n */\nproto.queryCell = function( selector ) {\n if ( typeof selector == 'number' ) {\n // use number as index\n return this.cells[ selector ];\n }\n if ( typeof selector == 'string' ) {\n // do not select invalid selectors from hash: #123, #/. #791\n if ( selector.match(/^[#\\.]?[\\d\\/]/) ) {\n return;\n }\n // use string as selector, get element\n selector = this.element.querySelector( selector );\n }\n // get cell from element\n return this.getCell( selector );\n};\n\n// -------------------------- events -------------------------- //\n\nproto.uiChange = function() {\n this.emitEvent('uiChange');\n};\n\n// keep focus on element when child UI elements are clicked\nproto.childUIPointerDown = function( event ) {\n // HACK iOS does not allow touch events to bubble up?!\n if ( event.type != 'touchstart' ) {\n event.preventDefault();\n }\n this.focus();\n};\n\n// ----- resize ----- //\n\nproto.onresize = function() {\n this.watchCSS();\n this.resize();\n};\n\nutils.debounceMethod( Flickity, 'onresize', 150 );\n\nproto.resize = function() {\n if ( !this.isActive ) {\n return;\n }\n this.getSize();\n // wrap values\n if ( this.options.wrapAround ) {\n this.x = utils.modulo( this.x, this.slideableWidth );\n }\n this.positionCells();\n this._getWrapShiftCells();\n this.setGallerySize();\n this.emitEvent('resize');\n // update selected index for group slides, instant\n // TODO: position can be lost between groups of various numbers\n var selectedElement = this.selectedElements && this.selectedElements[0];\n this.selectCell( selectedElement, false, true );\n};\n\n// watches the :after property, activates/deactivates\nproto.watchCSS = function() {\n var watchOption = this.options.watchCSS;\n if ( !watchOption ) {\n return;\n }\n\n var afterContent = getComputedStyle( this.element, ':after' ).content;\n // activate if :after { content: 'flickity' }\n if ( afterContent.indexOf('flickity') != -1 ) {\n this.activate();\n } else {\n this.deactivate();\n }\n};\n\n// ----- keydown ----- //\n\n// go previous/next if left/right keys pressed\nproto.onkeydown = function( event ) {\n // only work if element is in focus\n var isNotFocused = document.activeElement && document.activeElement != this.element;\n if ( !this.options.accessibility ||isNotFocused ) {\n return;\n }\n\n var handler = Flickity.keyboardHandlers[ event.keyCode ];\n if ( handler ) {\n handler.call( this );\n }\n};\n\nFlickity.keyboardHandlers = {\n // left arrow\n 37: function() {\n var leftMethod = this.options.rightToLeft ? 'next' : 'previous';\n this.uiChange();\n this[ leftMethod ]();\n },\n // right arrow\n 39: function() {\n var rightMethod = this.options.rightToLeft ? 'previous' : 'next';\n this.uiChange();\n this[ rightMethod ]();\n },\n};\n\n// ----- focus ----- //\n\nproto.focus = function() {\n // TODO remove scrollTo once focus options gets more support\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/focus#Browser_compatibility\n var prevScrollY = window.pageYOffset;\n this.element.focus({ preventScroll: true });\n // hack to fix scroll jump after focus, #76\n if ( window.pageYOffset != prevScrollY ) {\n window.scrollTo( window.pageXOffset, prevScrollY );\n }\n};\n\n// -------------------------- destroy -------------------------- //\n\n// deactivate all Flickity functionality, but keep stuff available\nproto.deactivate = function() {\n if ( !this.isActive ) {\n return;\n }\n this.element.classList.remove('flickity-enabled');\n this.element.classList.remove('flickity-rtl');\n this.unselectSelectedSlide();\n // destroy cells\n this.cells.forEach( function( cell ) {\n cell.destroy();\n });\n this.element.removeChild( this.viewport );\n // move child elements back into element\n moveElements( this.slider.children, this.element );\n if ( this.options.accessibility ) {\n this.element.removeAttribute('tabIndex');\n this.element.removeEventListener( 'keydown', this );\n }\n // set flags\n this.isActive = false;\n this.emitEvent('deactivate');\n};\n\nproto.destroy = function() {\n this.deactivate();\n window.removeEventListener( 'resize', this );\n this.allOff();\n this.emitEvent('destroy');\n if ( jQuery && this.$element ) {\n jQuery.removeData( this.element, 'flickity' );\n }\n delete this.element.flickityGUID;\n delete instances[ this.guid ];\n};\n\n// -------------------------- prototype -------------------------- //\n\nutils.extend( proto, animatePrototype );\n\n// -------------------------- extras -------------------------- //\n\n/**\n * get Flickity instance from element\n * @param {Element} elem\n * @returns {Flickity}\n */\nFlickity.data = function( elem ) {\n elem = utils.getQueryElement( elem );\n var id = elem && elem.flickityGUID;\n return id && instances[ id ];\n};\n\nutils.htmlInit( Flickity, 'flickity' );\n\nif ( jQuery && jQuery.bridget ) {\n jQuery.bridget( 'flickity', Flickity );\n}\n\n// set internal jQuery, for Webpack + jQuery v3, #478\nFlickity.setJQuery = function( jq ) {\n jQuery = jq;\n};\n\nFlickity.Cell = Cell;\nFlickity.Slide = Slide;\n\nreturn Flickity;\n\n}));\n","/*!\n * Flickity v2.2.1\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-2019 Metafizzy\n */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n './drag',\n './prev-next-button',\n './page-dots',\n './player',\n './add-remove-cell',\n './lazyload'\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('./flickity'),\n require('./drag'),\n require('./prev-next-button'),\n require('./page-dots'),\n require('./player'),\n require('./add-remove-cell'),\n require('./lazyload')\n );\n }\n\n})( window, function factory( Flickity ) {\n /*jshint strict: false*/\n return Flickity;\n});\n","/**\n * EvEmitter v1.1.0\n * Lil' event emitter\n * MIT License\n */\n\n/* jshint unused: true, undef: true, strict: true */\n\n( function( global, factory ) {\n // universal module definition\n /* jshint strict: false */ /* globals define, module, window */\n if ( typeof define == 'function' && define.amd ) {\n // AMD - RequireJS\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS - Browserify, Webpack\n module.exports = factory();\n } else {\n // Browser globals\n global.EvEmitter = factory();\n }\n\n}( typeof window != 'undefined' ? window : this, function() {\n\n\"use strict\";\n\nfunction EvEmitter() {}\n\nvar proto = EvEmitter.prototype;\n\nproto.on = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // set events hash\n var events = this._events = this._events || {};\n // set listeners array\n var listeners = events[ eventName ] = events[ eventName ] || [];\n // only add once\n if ( listeners.indexOf( listener ) == -1 ) {\n listeners.push( listener );\n }\n\n return this;\n};\n\nproto.once = function( eventName, listener ) {\n if ( !eventName || !listener ) {\n return;\n }\n // add event\n this.on( eventName, listener );\n // set once flag\n // set onceEvents hash\n var onceEvents = this._onceEvents = this._onceEvents || {};\n // set onceListeners object\n var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};\n // set flag\n onceListeners[ listener ] = true;\n\n return this;\n};\n\nproto.off = function( eventName, listener ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n var index = listeners.indexOf( listener );\n if ( index != -1 ) {\n listeners.splice( index, 1 );\n }\n\n return this;\n};\n\nproto.emitEvent = function( eventName, args ) {\n var listeners = this._events && this._events[ eventName ];\n if ( !listeners || !listeners.length ) {\n return;\n }\n // copy over to avoid interference if .off() in listener\n listeners = listeners.slice(0);\n args = args || [];\n // once stuff\n var onceListeners = this._onceEvents && this._onceEvents[ eventName ];\n\n for ( var i=0; i < listeners.length; i++ ) {\n var listener = listeners[i]\n var isOnce = onceListeners && onceListeners[ listener ];\n if ( isOnce ) {\n // remove listener\n // remove before trigger to prevent recursion\n this.off( eventName, listener );\n // unset once flag\n delete onceListeners[ listener ];\n }\n // trigger listener\n listener.apply( this, args );\n }\n\n return this;\n};\n\nproto.allOff = function() {\n delete this._events;\n delete this._onceEvents;\n};\n\nreturn EvEmitter;\n\n}));\n","/*!\n * Unipointer v2.3.0\n * base class for doing one thing with pointer event\n * MIT license\n */\n\n/*jshint browser: true, undef: true, unused: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */ /*global define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.Unipointer = factory(\n window,\n window.EvEmitter\n );\n }\n\n}( window, function factory( window, EvEmitter ) {\n\n'use strict';\n\nfunction noop() {}\n\nfunction Unipointer() {}\n\n// inherit EvEmitter\nvar proto = Unipointer.prototype = Object.create( EvEmitter.prototype );\n\nproto.bindStartEvent = function( elem ) {\n this._bindStartEvent( elem, true );\n};\n\nproto.unbindStartEvent = function( elem ) {\n this._bindStartEvent( elem, false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd - remove if falsey\n */\nproto._bindStartEvent = function( elem, isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n\n // default to mouse events\n var startEvent = 'mousedown';\n if ( window.PointerEvent ) {\n // Pointer Events\n startEvent = 'pointerdown';\n } else if ( 'ontouchstart' in window ) {\n // Touch Events. iOS Safari\n startEvent = 'touchstart';\n }\n elem[ bindMethod ]( startEvent, this );\n};\n\n// trigger handler methods for events\nproto.handleEvent = function( event ) {\n var method = 'on' + event.type;\n if ( this[ method ] ) {\n this[ method ]( event );\n }\n};\n\n// returns the touch that we're keeping track of\nproto.getTouch = function( touches ) {\n for ( var i=0; i < touches.length; i++ ) {\n var touch = touches[i];\n if ( touch.identifier == this.pointerIdentifier ) {\n return touch;\n }\n }\n};\n\n// ----- start event ----- //\n\nproto.onmousedown = function( event ) {\n // dismiss clicks from right or middle buttons\n var button = event.button;\n if ( button && ( button !== 0 && button !== 1 ) ) {\n return;\n }\n this._pointerDown( event, event );\n};\n\nproto.ontouchstart = function( event ) {\n this._pointerDown( event, event.changedTouches[0] );\n};\n\nproto.onpointerdown = function( event ) {\n this._pointerDown( event, event );\n};\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto._pointerDown = function( event, pointer ) {\n // dismiss right click and other pointers\n // button = 0 is okay, 1-4 not\n if ( event.button || this.isPointerDown ) {\n return;\n }\n\n this.isPointerDown = true;\n // save pointer identifier to match up touch events\n this.pointerIdentifier = pointer.pointerId !== undefined ?\n // pointerId for pointer events, touch.indentifier for touch events\n pointer.pointerId : pointer.identifier;\n\n this.pointerDown( event, pointer );\n};\n\nproto.pointerDown = function( event, pointer ) {\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// hash of events to be bound after start event\nvar postStartEvents = {\n mousedown: [ 'mousemove', 'mouseup' ],\n touchstart: [ 'touchmove', 'touchend', 'touchcancel' ],\n pointerdown: [ 'pointermove', 'pointerup', 'pointercancel' ],\n};\n\nproto._bindPostStartEvents = function( event ) {\n if ( !event ) {\n return;\n }\n // get proper events to match start event\n var events = postStartEvents[ event.type ];\n // bind events to node\n events.forEach( function( eventName ) {\n window.addEventListener( eventName, this );\n }, this );\n // save these arguments\n this._boundPointerEvents = events;\n};\n\nproto._unbindPostStartEvents = function() {\n // check for _boundEvents, in case dragEnd triggered twice (old IE8 bug)\n if ( !this._boundPointerEvents ) {\n return;\n }\n this._boundPointerEvents.forEach( function( eventName ) {\n window.removeEventListener( eventName, this );\n }, this );\n\n delete this._boundPointerEvents;\n};\n\n// ----- move event ----- //\n\nproto.onmousemove = function( event ) {\n this._pointerMove( event, event );\n};\n\nproto.onpointermove = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerMove( event, event );\n }\n};\n\nproto.ontouchmove = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerMove( event, touch );\n }\n};\n\n/**\n * pointer move\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerMove = function( event, pointer ) {\n this.pointerMove( event, pointer );\n};\n\n// public\nproto.pointerMove = function( event, pointer ) {\n this.emitEvent( 'pointerMove', [ event, pointer ] );\n};\n\n// ----- end event ----- //\n\n\nproto.onmouseup = function( event ) {\n this._pointerUp( event, event );\n};\n\nproto.onpointerup = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerUp( event, event );\n }\n};\n\nproto.ontouchend = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerUp( event, touch );\n }\n};\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerUp = function( event, pointer ) {\n this._pointerDone();\n this.pointerUp( event, pointer );\n};\n\n// public\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n};\n\n// ----- pointer done ----- //\n\n// triggered on pointer up & pointer cancel\nproto._pointerDone = function() {\n this._pointerReset();\n this._unbindPostStartEvents();\n this.pointerDone();\n};\n\nproto._pointerReset = function() {\n // reset properties\n this.isPointerDown = false;\n delete this.pointerIdentifier;\n};\n\nproto.pointerDone = noop;\n\n// ----- pointer cancel ----- //\n\nproto.onpointercancel = function( event ) {\n if ( event.pointerId == this.pointerIdentifier ) {\n this._pointerCancel( event, event );\n }\n};\n\nproto.ontouchcancel = function( event ) {\n var touch = this.getTouch( event.changedTouches );\n if ( touch ) {\n this._pointerCancel( event, touch );\n }\n};\n\n/**\n * pointer cancel\n * @param {Event} event\n * @param {Event or Touch} pointer\n * @private\n */\nproto._pointerCancel = function( event, pointer ) {\n this._pointerDone();\n this.pointerCancel( event, pointer );\n};\n\n// public\nproto.pointerCancel = function( event, pointer ) {\n this.emitEvent( 'pointerCancel', [ event, pointer ] );\n};\n\n// ----- ----- //\n\n// utility function for getting x/y coords from event\nUnipointer.getPointerPoint = function( pointer ) {\n return {\n x: pointer.pageX,\n y: pointer.pageY\n };\n};\n\n// ----- ----- //\n\nreturn Unipointer;\n\n}));\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/*!\n * getSize v2.0.3\n * measure size of elements\n * MIT license\n */\n\n/* jshint browser: true, strict: true, undef: true, unused: true */\n/* globals console: false */\n\n( function( window, factory ) {\n /* jshint strict: false */ /* globals define, module */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.getSize = factory();\n }\n\n})( window, function factory() {\n'use strict';\n\n// -------------------------- helpers -------------------------- //\n\n// get a number from a string, not a percentage\nfunction getStyleSize( value ) {\n var num = parseFloat( value );\n // not a percent like '100%', and a number\n var isValid = value.indexOf('%') == -1 && !isNaN( num );\n return isValid && num;\n}\n\nfunction noop() {}\n\nvar logError = typeof console == 'undefined' ? noop :\n function( message ) {\n console.error( message );\n };\n\n// -------------------------- measurements -------------------------- //\n\nvar measurements = [\n 'paddingLeft',\n 'paddingRight',\n 'paddingTop',\n 'paddingBottom',\n 'marginLeft',\n 'marginRight',\n 'marginTop',\n 'marginBottom',\n 'borderLeftWidth',\n 'borderRightWidth',\n 'borderTopWidth',\n 'borderBottomWidth'\n];\n\nvar measurementsLength = measurements.length;\n\nfunction getZeroSize() {\n var size = {\n width: 0,\n height: 0,\n innerWidth: 0,\n innerHeight: 0,\n outerWidth: 0,\n outerHeight: 0\n };\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n size[ measurement ] = 0;\n }\n return size;\n}\n\n// -------------------------- getStyle -------------------------- //\n\n/**\n * getStyle, get style of element, check for Firefox bug\n * https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n */\nfunction getStyle( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n logError( 'Style returned ' + style +\n '. Are you running this code in a hidden iframe on Firefox? ' +\n 'See https://bit.ly/getsizebug1' );\n }\n return style;\n}\n\n// -------------------------- setup -------------------------- //\n\nvar isSetup = false;\n\nvar isBoxSizeOuter;\n\n/**\n * setup\n * check isBoxSizerOuter\n * do on first getSize() rather than on page load for Firefox bug\n */\nfunction setup() {\n // setup once\n if ( isSetup ) {\n return;\n }\n isSetup = true;\n\n // -------------------------- box sizing -------------------------- //\n\n /**\n * Chrome & Safari measure the outer-width on style.width on border-box elems\n * IE11 & Firefox<29 measures the inner-width\n */\n var div = document.createElement('div');\n div.style.width = '200px';\n div.style.padding = '1px 2px 3px 4px';\n div.style.borderStyle = 'solid';\n div.style.borderWidth = '1px 2px 3px 4px';\n div.style.boxSizing = 'border-box';\n\n var body = document.body || document.documentElement;\n body.appendChild( div );\n var style = getStyle( div );\n // round value for browser zoom. desandro/masonry#928\n isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200;\n getSize.isBoxSizeOuter = isBoxSizeOuter;\n\n body.removeChild( div );\n}\n\n// -------------------------- getSize -------------------------- //\n\nfunction getSize( elem ) {\n setup();\n\n // use querySeletor if elem is string\n if ( typeof elem == 'string' ) {\n elem = document.querySelector( elem );\n }\n\n // do not proceed on non-objects\n if ( !elem || typeof elem != 'object' || !elem.nodeType ) {\n return;\n }\n\n var style = getStyle( elem );\n\n // if hidden, everything is 0\n if ( style.display == 'none' ) {\n return getZeroSize();\n }\n\n var size = {};\n size.width = elem.offsetWidth;\n size.height = elem.offsetHeight;\n\n var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box';\n\n // get all measurements\n for ( var i=0; i < measurementsLength; i++ ) {\n var measurement = measurements[i];\n var value = style[ measurement ];\n var num = parseFloat( value );\n // any 'auto', 'medium' value will be 0\n size[ measurement ] = !isNaN( num ) ? num : 0;\n }\n\n var paddingWidth = size.paddingLeft + size.paddingRight;\n var paddingHeight = size.paddingTop + size.paddingBottom;\n var marginWidth = size.marginLeft + size.marginRight;\n var marginHeight = size.marginTop + size.marginBottom;\n var borderWidth = size.borderLeftWidth + size.borderRightWidth;\n var borderHeight = size.borderTopWidth + size.borderBottomWidth;\n\n var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter;\n\n // overwrite width and height if we can get it from style\n var styleWidth = getStyleSize( style.width );\n if ( styleWidth !== false ) {\n size.width = styleWidth +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth );\n }\n\n var styleHeight = getStyleSize( style.height );\n if ( styleHeight !== false ) {\n size.height = styleHeight +\n // add padding and border unless it's already including it\n ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight );\n }\n\n size.innerWidth = size.width - ( paddingWidth + borderWidth );\n size.innerHeight = size.height - ( paddingHeight + borderHeight );\n\n size.outerWidth = size.width + marginWidth;\n size.outerHeight = size.height + marginHeight;\n\n return size;\n}\n\nreturn getSize;\n\n});\n","/* global NodeList, Element, Event, define */\n\n(function(global) {\n 'use strict';\n\n var FOCUSABLE_ELEMENTS = [\n 'a[href]:not([tabindex^=\"-\"]):not([inert])',\n 'area[href]:not([tabindex^=\"-\"]):not([inert])',\n 'input:not([disabled]):not([inert])',\n 'select:not([disabled]):not([inert])',\n 'textarea:not([disabled]):not([inert])',\n 'button:not([disabled]):not([inert])',\n 'iframe:not([tabindex^=\"-\"]):not([inert])',\n 'audio:not([tabindex^=\"-\"]):not([inert])',\n 'video:not([tabindex^=\"-\"]):not([inert])',\n '[contenteditable]:not([tabindex^=\"-\"]):not([inert])',\n '[tabindex]:not([tabindex^=\"-\"]):not([inert])'\n ];\n var TAB_KEY = 9;\n var ESCAPE_KEY = 27;\n var focusedBeforeDialog;\n\n /**\n * Define the constructor to instantiate a dialog\n *\n * @constructor\n * @param {Element} node\n * @param {(NodeList | Element | string)} targets\n */\n function A11yDialog(node, targets) {\n // Prebind the functions that will be bound in addEventListener and\n // removeEventListener to avoid losing references\n this._show = this.show.bind(this);\n this._hide = this.hide.bind(this);\n this._maintainFocus = this._maintainFocus.bind(this);\n this._bindKeypress = this._bindKeypress.bind(this);\n\n // Keep a reference of the node and the actual dialog on the instance\n this.container = node;\n this.dialog = node.querySelector('dialog, [role=\"dialog\"], [role=\"alertdialog\"]');\n this.role = this.dialog.getAttribute('role') || 'dialog';\n this.useDialog = (\n 'show' in document.createElement('dialog') &&\n this.dialog.nodeName === 'DIALOG'\n );\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n // Initialise everything needed for the dialog to work properly\n this.create(targets);\n }\n\n /**\n * Set up everything necessary for the dialog to be functioning\n *\n * @param {(NodeList | Element | string)} targets\n * @return {this}\n */\n A11yDialog.prototype.create = function(targets) {\n // Keep a collection of nodes to disable/enable when toggling the dialog\n this._targets =\n this._targets || collect(targets) || getSiblings(this.container);\n\n // Set the `shown` property to match the status from the DOM\n this.shown = this.dialog.hasAttribute('open');\n\n // Despite using a `` element, `role=\"dialog\"` is not necessarily\n // implied by all screen-readers (yet)\n // See: https://github.com/edenspiekermann/a11y-dialog/commit/6ba711a777aed0dbda0719a18a02f742098c64d9#commitcomment-28694166\n this.dialog.setAttribute('role', this.role);\n\n if (!this.useDialog) {\n if (this.shown) {\n this.container.removeAttribute('aria-hidden');\n } else {\n this.container.setAttribute('aria-hidden', true);\n }\n } else {\n this.container.setAttribute('data-a11y-dialog-native', '');\n }\n\n // Keep a collection of dialog openers, each of which will be bound a click\n // event listener to open the dialog\n this._openers = $$('[data-a11y-dialog-show=\"' + this.container.id + '\"]');\n this._openers.forEach(\n function(opener) {\n opener.addEventListener('click', this._show);\n }.bind(this)\n );\n\n // Keep a collection of dialog closers, each of which will be bound a click\n // event listener to close the dialog\n this._closers = $$('[data-a11y-dialog-hide]', this.container).concat(\n $$('[data-a11y-dialog-hide=\"' + this.container.id + '\"]')\n );\n this._closers.forEach(\n function(closer) {\n closer.addEventListener('click', this._hide);\n }.bind(this)\n );\n\n // Execute all callbacks registered for the `create` event\n this._fire('create');\n\n return this;\n };\n\n /**\n * Show the dialog element, disable all the targets (siblings), trap the\n * current focus within it, listen for some specific key presses and fire all\n * registered callbacks for `show` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.show = function(event) {\n // If the dialog is already open, abort\n if (this.shown) {\n return this;\n }\n\n this.shown = true;\n\n // Keep a reference to the currently focused element to be able to restore\n // it later\n focusedBeforeDialog = document.activeElement;\n\n if (this.useDialog) {\n this.dialog.showModal(event instanceof Event ? void 0 : event);\n } else {\n this.dialog.setAttribute('open', '');\n this.container.removeAttribute('aria-hidden');\n\n // Iterate over the targets to disable them by setting their `aria-hidden`\n // attribute to `true`\n this._targets.forEach(function(target) {\n target.setAttribute('aria-hidden', 'true');\n });\n }\n\n // Set the focus to the first focusable child of the dialog element\n setFocusToFirstItem(this.dialog);\n\n // Bind a focus event listener to the body element to make sure the focus\n // stays trapped inside the dialog while open, and start listening for some\n // specific key presses (TAB and ESC)\n document.body.addEventListener('focus', this._maintainFocus, true);\n document.addEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `show` event\n this._fire('show', event);\n\n return this;\n };\n\n /**\n * Hide the dialog element, enable all the targets (siblings), restore the\n * focus to the previously active element, stop listening for some specific\n * key presses and fire all registered callbacks for `hide` event\n *\n * @param {Event} event\n * @return {this}\n */\n A11yDialog.prototype.hide = function(event) {\n // If the dialog is already closed, abort\n if (!this.shown) {\n return this;\n }\n\n this.shown = false;\n\n if (this.useDialog) {\n this.dialog.close(event instanceof Event ? void 0 : event);\n } else {\n this.dialog.removeAttribute('open');\n this.container.setAttribute('aria-hidden', 'true');\n\n // Iterate over the targets to enable them by removing their `aria-hidden`\n // attribute\n this._targets.forEach(function(target) {\n target.removeAttribute('aria-hidden');\n });\n }\n\n // If there was a focused element before the dialog was opened (and it has a\n // `focus` method), restore the focus back to it\n // See: https://github.com/edenspiekermann/a11y-dialog/issues/108\n if (focusedBeforeDialog && focusedBeforeDialog.focus) {\n focusedBeforeDialog.focus();\n }\n\n // Remove the focus event listener to the body element and stop listening\n // for specific key presses\n document.body.removeEventListener('focus', this._maintainFocus, true);\n document.removeEventListener('keydown', this._bindKeypress);\n\n // Execute all callbacks registered for the `hide` event\n this._fire('hide', event);\n\n return this;\n };\n\n /**\n * Destroy the current instance (after making sure the dialog has been hidden)\n * and remove all associated listeners from dialog openers and closers\n *\n * @return {this}\n */\n A11yDialog.prototype.destroy = function() {\n // Hide the dialog to avoid destroying an open instance\n this.hide();\n\n // Remove the click event listener from all dialog openers\n this._openers.forEach(\n function(opener) {\n opener.removeEventListener('click', this._show);\n }.bind(this)\n );\n\n // Remove the click event listener from all dialog closers\n this._closers.forEach(\n function(closer) {\n closer.removeEventListener('click', this._hide);\n }.bind(this)\n );\n\n // Execute all callbacks registered for the `destroy` event\n this._fire('destroy');\n\n // Keep an object of listener types mapped to callback functions\n this._listeners = {};\n\n return this;\n };\n\n /**\n * Register a new callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.on = function(type, handler) {\n if (typeof this._listeners[type] === 'undefined') {\n this._listeners[type] = [];\n }\n\n this._listeners[type].push(handler);\n\n return this;\n };\n\n /**\n * Unregister an existing callback for the given event type\n *\n * @param {string} type\n * @param {Function} handler\n */\n A11yDialog.prototype.off = function(type, handler) {\n var index = this._listeners[type].indexOf(handler);\n\n if (index > -1) {\n this._listeners[type].splice(index, 1);\n }\n\n return this;\n };\n\n /**\n * Iterate over all registered handlers for given type and call them all with\n * the dialog element as first argument, event as second argument (if any).\n *\n * @access private\n * @param {string} type\n * @param {Event} event\n */\n A11yDialog.prototype._fire = function(type, event) {\n var listeners = this._listeners[type] || [];\n\n listeners.forEach(\n function(listener) {\n listener(this.container, event);\n }.bind(this)\n );\n };\n\n /**\n * Private event handler used when listening to some specific key presses\n * (namely ESCAPE and TAB)\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._bindKeypress = function(event) {\n // If the dialog is shown and the ESCAPE key is being pressed, prevent any\n // further effects from the ESCAPE key and hide the dialog, unless its role\n // is 'alertdialog', which should be modal\n if (this.shown && event.which === ESCAPE_KEY && this.role !== 'alertdialog') {\n event.preventDefault();\n this.hide(event);\n }\n\n // If the dialog is shown and the TAB key is being pressed, make sure the\n // focus stays trapped within the dialog element\n if (this.shown && event.which === TAB_KEY) {\n trapTabKey(this.dialog, event);\n }\n };\n\n /**\n * Private event handler used when making sure the focus stays within the\n * currently open dialog\n *\n * @access private\n * @param {Event} event\n */\n A11yDialog.prototype._maintainFocus = function(event) {\n // If the dialog is shown and the focus is not within the dialog element,\n // move it back to its first focusable child\n if (this.shown && !this.container.contains(event.target)) {\n setFocusToFirstItem(this.dialog);\n }\n };\n\n /**\n * Convert a NodeList into an array\n *\n * @param {NodeList} collection\n * @return {Array}\n */\n function toArray(collection) {\n return Array.prototype.slice.call(collection);\n }\n\n /**\n * Query the DOM for nodes matching the given selector, scoped to context (or\n * the whole document)\n *\n * @param {String} selector\n * @param {Element} [context = document]\n * @return {Array}\n */\n function $$(selector, context) {\n return toArray((context || document).querySelectorAll(selector));\n }\n\n /**\n * Return an array of Element based on given argument (NodeList, Element or\n * string representing a selector)\n *\n * @param {(NodeList | Element | string)} target\n * @return {Array}\n */\n function collect(target) {\n if (NodeList.prototype.isPrototypeOf(target)) {\n return toArray(target);\n }\n\n if (Element.prototype.isPrototypeOf(target)) {\n return [target];\n }\n\n if (typeof target === 'string') {\n return $$(target);\n }\n }\n\n /**\n * Set the focus to the first element with `autofocus` or the first focusable\n * child of the given element\n *\n * @param {Element} node\n */\n function setFocusToFirstItem(node) {\n var focusableChildren = getFocusableChildren(node);\n var focused = node.querySelector('[autofocus]') || focusableChildren[0];\n\n if (focused) {\n focused.focus();\n }\n }\n\n /**\n * Get the focusable children of the given element\n *\n * @param {Element} node\n * @return {Array}\n */\n function getFocusableChildren(node) {\n return $$(FOCUSABLE_ELEMENTS.join(','), node).filter(function(child) {\n return !!(\n child.offsetWidth ||\n child.offsetHeight ||\n child.getClientRects().length\n );\n });\n }\n\n /**\n * Trap the focus inside the given element\n *\n * @param {Element} node\n * @param {Event} event\n */\n function trapTabKey(node, event) {\n var focusableChildren = getFocusableChildren(node);\n var focusedItemIndex = focusableChildren.indexOf(document.activeElement);\n\n // If the SHIFT key is being pressed while tabbing (moving backwards) and\n // the currently focused item is the first one, move the focus to the last\n // focusable item from the dialog element\n if (event.shiftKey && focusedItemIndex === 0) {\n focusableChildren[focusableChildren.length - 1].focus();\n event.preventDefault();\n // If the SHIFT key is not being pressed (moving forwards) and the currently\n // focused item is the last one, move the focus to the first focusable item\n // from the dialog element\n } else if (\n !event.shiftKey &&\n focusedItemIndex === focusableChildren.length - 1\n ) {\n focusableChildren[0].focus();\n event.preventDefault();\n }\n }\n\n /**\n * Retrieve siblings from given element\n *\n * @param {Element} node\n * @return {Array}\n */\n function getSiblings(node) {\n var nodes = toArray(node.parentNode.childNodes);\n var siblings = nodes.filter(function(node) {\n return node.nodeType === 1;\n });\n\n siblings.splice(siblings.indexOf(node), 1);\n\n return siblings;\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = A11yDialog;\n } else if (typeof define === 'function' && define.amd) {\n define('A11yDialog', [], function() {\n return A11yDialog;\n });\n } else if (typeof global === 'object') {\n global.A11yDialog = A11yDialog;\n }\n})(typeof global !== 'undefined' ? global : window);\n","/**\n * lodash (Custom Build) \n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n result = wait - timeSinceLastCall;\n\n return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\n/**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\nfunction throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return !!value && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = throttle;\n","/**\n * matchesSelector v2.0.2\n * matchesSelector( element, '.selector' )\n * MIT license\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n /*global define: false, module: false */\n 'use strict';\n // universal module definition\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.matchesSelector = factory();\n }\n\n}( window, function factory() {\n 'use strict';\n\n var matchesMethod = ( function() {\n var ElemProto = window.Element.prototype;\n // check for the standard method name first\n if ( ElemProto.matches ) {\n return 'matches';\n }\n // check un-prefixed\n if ( ElemProto.matchesSelector ) {\n return 'matchesSelector';\n }\n // check vendor prefixes\n var prefixes = [ 'webkit', 'moz', 'ms', 'o' ];\n\n for ( var i=0; i < prefixes.length; i++ ) {\n var prefix = prefixes[i];\n var method = prefix + 'MatchesSelector';\n if ( ElemProto[ method ] ) {\n return method;\n }\n }\n })();\n\n return function matchesSelector( elem, selector ) {\n return elem[ matchesMethod ]( selector );\n };\n\n}));\n","// Flickity.Cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'get-size/get-size'\n ], function( getSize ) {\n return factory( window, getSize );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('get-size')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Cell = factory(\n window,\n window.getSize\n );\n }\n\n}( window, function factory( window, getSize ) {\n\n'use strict';\n\nfunction Cell( elem, parent ) {\n this.element = elem;\n this.parent = parent;\n\n this.create();\n}\n\nvar proto = Cell.prototype;\n\nproto.create = function() {\n this.element.style.position = 'absolute';\n this.element.setAttribute( 'aria-hidden', 'true' );\n this.x = 0;\n this.shift = 0;\n};\n\nproto.destroy = function() {\n // reset style\n this.unselect();\n this.element.style.position = '';\n var side = this.parent.originSide;\n this.element.style[ side ] = '';\n};\n\nproto.getSize = function() {\n this.size = getSize( this.element );\n};\n\nproto.setPosition = function( x ) {\n this.x = x;\n this.updateTarget();\n this.renderPosition( x );\n};\n\n// setDefaultTarget v1 method, backwards compatibility, remove in v3\nproto.updateTarget = proto.setDefaultTarget = function() {\n var marginProperty = this.parent.originSide == 'left' ? 'marginLeft' : 'marginRight';\n this.target = this.x + this.size[ marginProperty ] +\n this.size.width * this.parent.cellAlign;\n};\n\nproto.renderPosition = function( x ) {\n // render position of cell with in slider\n var side = this.parent.originSide;\n this.element.style[ side ] = this.parent.getPositionValue( x );\n};\n\nproto.select = function() {\n this.element.classList.add('is-selected');\n this.element.removeAttribute('aria-hidden');\n};\n\nproto.unselect = function() {\n this.element.classList.remove('is-selected');\n this.element.setAttribute( 'aria-hidden', 'true' );\n};\n\n/**\n * @param {Integer} factor - 0, 1, or -1\n**/\nproto.wrapShift = function( shift ) {\n this.shift = shift;\n this.renderPosition( this.x + this.parent.slideableWidth * shift );\n};\n\nproto.remove = function() {\n this.element.parentNode.removeChild( this.element );\n};\n\nreturn Cell;\n\n}));\n","// slide\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory();\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.Slide = factory();\n }\n\n}( window, function factory() {\n'use strict';\n\nfunction Slide( parent ) {\n this.parent = parent;\n this.isOriginLeft = parent.originSide == 'left';\n this.cells = [];\n this.outerWidth = 0;\n this.height = 0;\n}\n\nvar proto = Slide.prototype;\n\nproto.addCell = function( cell ) {\n this.cells.push( cell );\n this.outerWidth += cell.size.outerWidth;\n this.height = Math.max( cell.size.outerHeight, this.height );\n // first cell stuff\n if ( this.cells.length == 1 ) {\n this.x = cell.x; // x comes from first cell\n var beginMargin = this.isOriginLeft ? 'marginLeft' : 'marginRight';\n this.firstMargin = cell.size[ beginMargin ];\n }\n};\n\nproto.updateTarget = function() {\n var endMargin = this.isOriginLeft ? 'marginRight' : 'marginLeft';\n var lastCell = this.getLastCell();\n var lastMargin = lastCell ? lastCell.size[ endMargin ] : 0;\n var slideWidth = this.outerWidth - ( this.firstMargin + lastMargin );\n this.target = this.x + this.firstMargin + slideWidth * this.parent.cellAlign;\n};\n\nproto.getLastCell = function() {\n return this.cells[ this.cells.length - 1 ];\n};\n\nproto.select = function() {\n this.cells.forEach( function( cell ) {\n cell.select();\n });\n};\n\nproto.unselect = function() {\n this.cells.forEach( function( cell ) {\n cell.unselect();\n });\n};\n\nproto.getCellElements = function() {\n return this.cells.map( function( cell ) {\n return cell.element;\n });\n};\n\nreturn Slide;\n\n}));\n","// animate\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'fizzy-ui-utils/utils'\n ], function( utils ) {\n return factory( window, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = window.Flickity || {};\n window.Flickity.animatePrototype = factory(\n window,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, utils ) {\n\n'use strict';\n\n// -------------------------- animate -------------------------- //\n\nvar proto = {};\n\nproto.startAnimation = function() {\n if ( this.isAnimating ) {\n return;\n }\n\n this.isAnimating = true;\n this.restingFrames = 0;\n this.animate();\n};\n\nproto.animate = function() {\n this.applyDragForce();\n this.applySelectedAttraction();\n\n var previousX = this.x;\n\n this.integratePhysics();\n this.positionSlider();\n this.settle( previousX );\n // animate next frame\n if ( this.isAnimating ) {\n var _this = this;\n requestAnimationFrame( function animateFrame() {\n _this.animate();\n });\n }\n};\n\nproto.positionSlider = function() {\n var x = this.x;\n // wrap position around\n if ( this.options.wrapAround && this.cells.length > 1 ) {\n x = utils.modulo( x, this.slideableWidth );\n x = x - this.slideableWidth;\n this.shiftWrapCells( x );\n }\n\n this.setTranslateX( x, this.isAnimating );\n this.dispatchScrollEvent();\n};\n\nproto.setTranslateX = function( x, is3d ) {\n x += this.cursorPosition;\n // reverse if right-to-left and using transform\n x = this.options.rightToLeft ? -x : x;\n var translateX = this.getPositionValue( x );\n // use 3D tranforms for hardware acceleration on iOS\n // but use 2D when settled, for better font-rendering\n this.slider.style.transform = is3d ?\n 'translate3d(' + translateX + ',0,0)' : 'translateX(' + translateX + ')';\n};\n\nproto.dispatchScrollEvent = function() {\n var firstSlide = this.slides[0];\n if ( !firstSlide ) {\n return;\n }\n var positionX = -this.x - firstSlide.target;\n var progress = positionX / this.slidesWidth;\n this.dispatchEvent( 'scroll', null, [ progress, positionX ] );\n};\n\nproto.positionSliderAtSelected = function() {\n if ( !this.cells.length ) {\n return;\n }\n this.x = -this.selectedSlide.target;\n this.velocity = 0; // stop wobble\n this.positionSlider();\n};\n\nproto.getPositionValue = function( position ) {\n if ( this.options.percentPosition ) {\n // percent position, round to 2 digits, like 12.34%\n return ( Math.round( ( position / this.size.innerWidth ) * 10000 ) * 0.01 )+ '%';\n } else {\n // pixel positioning\n return Math.round( position ) + 'px';\n }\n};\n\nproto.settle = function( previousX ) {\n // keep track of frames where x hasn't moved\n if ( !this.isPointerDown && Math.round( this.x * 100 ) == Math.round( previousX * 100 ) ) {\n this.restingFrames++;\n }\n // stop animating if resting for 3 or more frames\n if ( this.restingFrames > 2 ) {\n this.isAnimating = false;\n delete this.isFreeScrolling;\n // render position with translateX when settled\n this.positionSlider();\n this.dispatchEvent( 'settle', null, [ this.selectedIndex ] );\n }\n};\n\nproto.shiftWrapCells = function( x ) {\n // shift before cells\n var beforeGap = this.cursorPosition + x;\n this._shiftCells( this.beforeShiftCells, beforeGap, -1 );\n // shift after cells\n var afterGap = this.size.innerWidth - ( x + this.slideableWidth + this.cursorPosition );\n this._shiftCells( this.afterShiftCells, afterGap, 1 );\n};\n\nproto._shiftCells = function( cells, gap, shift ) {\n for ( var i=0; i < cells.length; i++ ) {\n var cell = cells[i];\n var cellShift = gap > 0 ? shift : 0;\n cell.wrapShift( cellShift );\n gap -= cell.size.outerWidth;\n }\n};\n\nproto._unshiftCells = function( cells ) {\n if ( !cells || !cells.length ) {\n return;\n }\n for ( var i=0; i < cells.length; i++ ) {\n cells[i].wrapShift( 0 );\n }\n};\n\n// -------------------------- physics -------------------------- //\n\nproto.integratePhysics = function() {\n this.x += this.velocity;\n this.velocity *= this.getFrictionFactor();\n};\n\nproto.applyForce = function( force ) {\n this.velocity += force;\n};\n\nproto.getFrictionFactor = function() {\n return 1 - this.options[ this.isFreeScrolling ? 'freeScrollFriction' : 'friction' ];\n};\n\nproto.getRestingPosition = function() {\n // my thanks to Steven Wittens, who simplified this math greatly\n return this.x + this.velocity / ( 1 - this.getFrictionFactor() );\n};\n\nproto.applyDragForce = function() {\n if ( !this.isDraggable || !this.isPointerDown ) {\n return;\n }\n // change the position to drag position by applying force\n var dragVelocity = this.dragX - this.x;\n var dragForce = dragVelocity - this.velocity;\n this.applyForce( dragForce );\n};\n\nproto.applySelectedAttraction = function() {\n // do not attract if pointer down or no slides\n var dragDown = this.isDraggable && this.isPointerDown;\n if ( dragDown || this.isFreeScrolling || !this.slides.length ) {\n return;\n }\n var distance = this.selectedSlide.target * -1 - this.x;\n var force = distance * this.options.selectedAttraction;\n this.applyForce( force );\n};\n\nreturn proto;\n\n}));\n","// drag\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unidragger/unidragger',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unidragger, utils ) {\n return factory( window, Flickity, Unidragger, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unidragger'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.Unidragger,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unidragger, utils ) {\n\n'use strict';\n\n// ----- defaults ----- //\n\nutils.extend( Flickity.defaults, {\n draggable: '>1',\n dragThreshold: 3,\n});\n\n// ----- create ----- //\n\nFlickity.createMethods.push('_createDrag');\n\n// -------------------------- drag prototype -------------------------- //\n\nvar proto = Flickity.prototype;\nutils.extend( proto, Unidragger.prototype );\nproto._touchActionValue = 'pan-y';\n\n// -------------------------- -------------------------- //\n\nvar isTouch = 'createTouch' in document;\nvar isTouchmoveScrollCanceled = false;\n\nproto._createDrag = function() {\n this.on( 'activate', this.onActivateDrag );\n this.on( 'uiChange', this._uiChangeDrag );\n this.on( 'deactivate', this.onDeactivateDrag );\n this.on( 'cellChange', this.updateDraggable );\n // TODO updateDraggable on resize? if groupCells & slides change\n // HACK - add seemingly innocuous handler to fix iOS 10 scroll behavior\n // #457, RubaXa/Sortable#973\n if ( isTouch && !isTouchmoveScrollCanceled ) {\n window.addEventListener( 'touchmove', function() {});\n isTouchmoveScrollCanceled = true;\n }\n};\n\nproto.onActivateDrag = function() {\n this.handles = [ this.viewport ];\n this.bindHandles();\n this.updateDraggable();\n};\n\nproto.onDeactivateDrag = function() {\n this.unbindHandles();\n this.element.classList.remove('is-draggable');\n};\n\nproto.updateDraggable = function() {\n // disable dragging if less than 2 slides. #278\n if ( this.options.draggable == '>1' ) {\n this.isDraggable = this.slides.length > 1;\n } else {\n this.isDraggable = this.options.draggable;\n }\n if ( this.isDraggable ) {\n this.element.classList.add('is-draggable');\n } else {\n this.element.classList.remove('is-draggable');\n }\n};\n\n// backwards compatibility\nproto.bindDrag = function() {\n this.options.draggable = true;\n this.updateDraggable();\n};\n\nproto.unbindDrag = function() {\n this.options.draggable = false;\n this.updateDraggable();\n};\n\nproto._uiChangeDrag = function() {\n delete this.isFreeScrolling;\n};\n\n// -------------------------- pointer events -------------------------- //\n\nproto.pointerDown = function( event, pointer ) {\n if ( !this.isDraggable ) {\n this._pointerDownDefault( event, pointer );\n return;\n }\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n\n this._pointerDownPreventDefault( event );\n this.pointerDownFocus( event );\n // blur\n if ( document.activeElement != this.element ) {\n // do not blur if already focused\n this.pointerDownBlur();\n }\n\n // stop if it was moving\n this.dragX = this.x;\n this.viewport.classList.add('is-pointer-down');\n // track scrolling\n this.pointerDownScroll = getScrollPosition();\n window.addEventListener( 'scroll', this );\n\n this._pointerDownDefault( event, pointer );\n};\n\n// default pointerDown logic, used for staticClick\nproto._pointerDownDefault = function( event, pointer ) {\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. #779\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n // bind move and end events\n this._bindPostStartEvents( event );\n this.dispatchEvent( 'pointerDown', event, [ pointer ] );\n};\n\nvar focusNodes = {\n INPUT: true,\n TEXTAREA: true,\n SELECT: true,\n};\n\nproto.pointerDownFocus = function( event ) {\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isFocusNode ) {\n this.focus();\n }\n};\n\nproto._pointerDownPreventDefault = function( event ) {\n var isTouchStart = event.type == 'touchstart';\n var isTouchPointer = event.pointerType == 'touch';\n var isFocusNode = focusNodes[ event.target.nodeName ];\n if ( !isTouchStart && !isTouchPointer && !isFocusNode ) {\n event.preventDefault();\n }\n};\n\n// ----- move ----- //\n\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > this.options.dragThreshold;\n};\n\n// ----- up ----- //\n\nproto.pointerUp = function( event, pointer ) {\n delete this.isTouchScrolling;\n this.viewport.classList.remove('is-pointer-down');\n this.dispatchEvent( 'pointerUp', event, [ pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto.pointerDone = function() {\n window.removeEventListener( 'scroll', this );\n delete this.pointerDownScroll;\n};\n\n// -------------------------- dragging -------------------------- //\n\nproto.dragStart = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n this.dragStartPosition = this.x;\n this.startAnimation();\n window.removeEventListener( 'scroll', this );\n this.dispatchEvent( 'dragStart', event, [ pointer ] );\n};\n\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.dispatchEvent( 'pointerMove', event, [ pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n if ( !this.isDraggable ) {\n return;\n }\n event.preventDefault();\n\n this.previousDragX = this.dragX;\n // reverse if right-to-left\n var direction = this.options.rightToLeft ? -1 : 1;\n if ( this.options.wrapAround ) {\n // wrap around move. #589\n moveVector.x = moveVector.x % this.slideableWidth;\n }\n var dragX = this.dragStartPosition + moveVector.x * direction;\n\n if ( !this.options.wrapAround && this.slides.length ) {\n // slow drag\n var originBound = Math.max( -this.slides[0].target, this.dragStartPosition );\n dragX = dragX > originBound ? ( dragX + originBound ) * 0.5 : dragX;\n var endBound = Math.min( -this.getLastSlide().target, this.dragStartPosition );\n dragX = dragX < endBound ? ( dragX + endBound ) * 0.5 : dragX;\n }\n\n this.dragX = dragX;\n\n this.dragMoveTime = new Date();\n this.dispatchEvent( 'dragMove', event, [ pointer, moveVector ] );\n};\n\nproto.dragEnd = function( event, pointer ) {\n if ( !this.isDraggable ) {\n return;\n }\n if ( this.options.freeScroll ) {\n this.isFreeScrolling = true;\n }\n // set selectedIndex based on where flick will end up\n var index = this.dragEndRestingSelect();\n\n if ( this.options.freeScroll && !this.options.wrapAround ) {\n // if free-scroll & not wrap around\n // do not free-scroll if going outside of bounding slides\n // so bounding slides can attract slider, and keep it in bounds\n var restingX = this.getRestingPosition();\n this.isFreeScrolling = -restingX > this.slides[0].target &&\n -restingX < this.getLastSlide().target;\n } else if ( !this.options.freeScroll && index == this.selectedIndex ) {\n // boost selection if selected index has not changed\n index += this.dragEndBoostSelect();\n }\n delete this.previousDragX;\n // apply selection\n // TODO refactor this, selecting here feels weird\n // HACK, set flag so dragging stays in correct direction\n this.isDragSelect = this.options.wrapAround;\n this.select( index );\n delete this.isDragSelect;\n this.dispatchEvent( 'dragEnd', event, [ pointer ] );\n};\n\nproto.dragEndRestingSelect = function() {\n var restingX = this.getRestingPosition();\n // how far away from selected slide\n var distance = Math.abs( this.getSlideDistance( -restingX, this.selectedIndex ) );\n // get closet resting going up and going down\n var positiveResting = this._getClosestResting( restingX, distance, 1 );\n var negativeResting = this._getClosestResting( restingX, distance, -1 );\n // use closer resting for wrap-around\n var index = positiveResting.distance < negativeResting.distance ?\n positiveResting.index : negativeResting.index;\n return index;\n};\n\n/**\n * given resting X and distance to selected cell\n * get the distance and index of the closest cell\n * @param {Number} restingX - estimated post-flick resting position\n * @param {Number} distance - distance to selected cell\n * @param {Integer} increment - +1 or -1, going up or down\n * @returns {Object} - { distance: {Number}, index: {Integer} }\n */\nproto._getClosestResting = function( restingX, distance, increment ) {\n var index = this.selectedIndex;\n var minDistance = Infinity;\n var condition = this.options.contain && !this.options.wrapAround ?\n // if contain, keep going if distance is equal to minDistance\n function( d, md ) { return d <= md; } : function( d, md ) { return d < md; };\n while ( condition( distance, minDistance ) ) {\n // measure distance to next cell\n index += increment;\n minDistance = distance;\n distance = this.getSlideDistance( -restingX, index );\n if ( distance === null ) {\n break;\n }\n distance = Math.abs( distance );\n }\n return {\n distance: minDistance,\n // selected was previous index\n index: index - increment\n };\n};\n\n/**\n * measure distance between x and a slide target\n * @param {Number} x\n * @param {Integer} index - slide index\n */\nproto.getSlideDistance = function( x, index ) {\n var len = this.slides.length;\n // wrap around if at least 2 slides\n var isWrapAround = this.options.wrapAround && len > 1;\n var slideIndex = isWrapAround ? utils.modulo( index, len ) : index;\n var slide = this.slides[ slideIndex ];\n if ( !slide ) {\n return null;\n }\n // add distance for wrap-around slides\n var wrap = isWrapAround ? this.slideableWidth * Math.floor( index / len ) : 0;\n return x - ( slide.target + wrap );\n};\n\nproto.dragEndBoostSelect = function() {\n // do not boost if no previousDragX or dragMoveTime\n if ( this.previousDragX === undefined || !this.dragMoveTime ||\n // or if drag was held for 100 ms\n new Date() - this.dragMoveTime > 100 ) {\n return 0;\n }\n\n var distance = this.getSlideDistance( -this.dragX, this.selectedIndex );\n var delta = this.previousDragX - this.dragX;\n if ( distance > 0 && delta > 0 ) {\n // boost to next if moving towards the right, and positive velocity\n return 1;\n } else if ( distance < 0 && delta < 0 ) {\n // boost to previous if moving towards the left, and negative velocity\n return -1;\n }\n return 0;\n};\n\n// ----- staticClick ----- //\n\nproto.staticClick = function( event, pointer ) {\n // get clickedCell, if cell was clicked\n var clickedCell = this.getParentCell( event.target );\n var cellElem = clickedCell && clickedCell.element;\n var cellIndex = clickedCell && this.cells.indexOf( clickedCell );\n this.dispatchEvent( 'staticClick', event, [ pointer, cellElem, cellIndex ] );\n};\n\n// ----- scroll ----- //\n\nproto.onscroll = function() {\n var scroll = getScrollPosition();\n var scrollMoveX = this.pointerDownScroll.x - scroll.x;\n var scrollMoveY = this.pointerDownScroll.y - scroll.y;\n // cancel click/tap if scroll is too much\n if ( Math.abs( scrollMoveX ) > 3 || Math.abs( scrollMoveY ) > 3 ) {\n this._pointerDone();\n }\n};\n\n// ----- utils ----- //\n\nfunction getScrollPosition() {\n return {\n x: window.pageXOffset,\n y: window.pageYOffset\n };\n}\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n","/*!\n * Unidragger v2.3.1\n * Draggable base class\n * MIT license\n */\n\n/*jshint browser: true, unused: true, undef: true, strict: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'unipointer/unipointer'\n ], function( Unipointer ) {\n return factory( window, Unipointer );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('unipointer')\n );\n } else {\n // browser global\n window.Unidragger = factory(\n window,\n window.Unipointer\n );\n }\n\n}( window, function factory( window, Unipointer ) {\n\n'use strict';\n\n// -------------------------- Unidragger -------------------------- //\n\nfunction Unidragger() {}\n\n// inherit Unipointer & EvEmitter\nvar proto = Unidragger.prototype = Object.create( Unipointer.prototype );\n\n// ----- bind start ----- //\n\nproto.bindHandles = function() {\n this._bindHandles( true );\n};\n\nproto.unbindHandles = function() {\n this._bindHandles( false );\n};\n\n/**\n * Add or remove start event\n * @param {Boolean} isAdd\n */\nproto._bindHandles = function( isAdd ) {\n // munge isAdd, default to true\n isAdd = isAdd === undefined ? true : isAdd;\n // bind each handle\n var bindMethod = isAdd ? 'addEventListener' : 'removeEventListener';\n var touchAction = isAdd ? this._touchActionValue : '';\n for ( var i=0; i < this.handles.length; i++ ) {\n var handle = this.handles[i];\n this._bindStartEvent( handle, isAdd );\n handle[ bindMethod ]( 'click', this );\n // touch-action: none to override browser touch gestures. metafizzy/flickity#540\n if ( window.PointerEvent ) {\n handle.style.touchAction = touchAction;\n }\n }\n};\n\n// prototype so it can be overwriteable by Flickity\nproto._touchActionValue = 'none';\n\n// ----- start event ----- //\n\n/**\n * pointer start\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerDown = function( event, pointer ) {\n var isOkay = this.okayPointerDown( event );\n if ( !isOkay ) {\n return;\n }\n // track start event position\n // Safari 9 overrides pageX and pageY. These values needs to be copied. flickity#842\n this.pointerDownPointer = {\n pageX: pointer.pageX,\n pageY: pointer.pageY,\n };\n\n event.preventDefault();\n this.pointerDownBlur();\n // bind move and end events\n this._bindPostStartEvents( event );\n this.emitEvent( 'pointerDown', [ event, pointer ] );\n};\n\n// nodes that have text fields\nvar cursorNodes = {\n TEXTAREA: true,\n INPUT: true,\n SELECT: true,\n OPTION: true,\n};\n\n// input types that do not have text fields\nvar clickTypes = {\n radio: true,\n checkbox: true,\n button: true,\n submit: true,\n image: true,\n file: true,\n};\n\n// dismiss inputs with text fields. flickity#403, flickity#404\nproto.okayPointerDown = function( event ) {\n var isCursorNode = cursorNodes[ event.target.nodeName ];\n var isClickType = clickTypes[ event.target.type ];\n var isOkay = !isCursorNode || isClickType;\n if ( !isOkay ) {\n this._pointerReset();\n }\n return isOkay;\n};\n\n// kludge to blur previously focused input\nproto.pointerDownBlur = function() {\n var focused = document.activeElement;\n // do not blur body for IE10, metafizzy/flickity#117\n var canBlur = focused && focused.blur && focused != document.body;\n if ( canBlur ) {\n focused.blur();\n }\n};\n\n// ----- move event ----- //\n\n/**\n * drag move\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerMove = function( event, pointer ) {\n var moveVector = this._dragPointerMove( event, pointer );\n this.emitEvent( 'pointerMove', [ event, pointer, moveVector ] );\n this._dragMove( event, pointer, moveVector );\n};\n\n// base pointer move logic\nproto._dragPointerMove = function( event, pointer ) {\n var moveVector = {\n x: pointer.pageX - this.pointerDownPointer.pageX,\n y: pointer.pageY - this.pointerDownPointer.pageY\n };\n // start drag if pointer has moved far enough to start drag\n if ( !this.isDragging && this.hasDragStarted( moveVector ) ) {\n this._dragStart( event, pointer );\n }\n return moveVector;\n};\n\n// condition if pointer has moved far enough to start drag\nproto.hasDragStarted = function( moveVector ) {\n return Math.abs( moveVector.x ) > 3 || Math.abs( moveVector.y ) > 3;\n};\n\n// ----- end event ----- //\n\n/**\n * pointer up\n * @param {Event} event\n * @param {Event or Touch} pointer\n */\nproto.pointerUp = function( event, pointer ) {\n this.emitEvent( 'pointerUp', [ event, pointer ] );\n this._dragPointerUp( event, pointer );\n};\n\nproto._dragPointerUp = function( event, pointer ) {\n if ( this.isDragging ) {\n this._dragEnd( event, pointer );\n } else {\n // pointer didn't move enough for drag to start\n this._staticClick( event, pointer );\n }\n};\n\n// -------------------------- drag -------------------------- //\n\n// dragStart\nproto._dragStart = function( event, pointer ) {\n this.isDragging = true;\n // prevent clicks\n this.isPreventingClicks = true;\n this.dragStart( event, pointer );\n};\n\nproto.dragStart = function( event, pointer ) {\n this.emitEvent( 'dragStart', [ event, pointer ] );\n};\n\n// dragMove\nproto._dragMove = function( event, pointer, moveVector ) {\n // do not drag if not dragging yet\n if ( !this.isDragging ) {\n return;\n }\n\n this.dragMove( event, pointer, moveVector );\n};\n\nproto.dragMove = function( event, pointer, moveVector ) {\n event.preventDefault();\n this.emitEvent( 'dragMove', [ event, pointer, moveVector ] );\n};\n\n// dragEnd\nproto._dragEnd = function( event, pointer ) {\n // set flags\n this.isDragging = false;\n // re-enable clicking async\n setTimeout( function() {\n delete this.isPreventingClicks;\n }.bind( this ) );\n\n this.dragEnd( event, pointer );\n};\n\nproto.dragEnd = function( event, pointer ) {\n this.emitEvent( 'dragEnd', [ event, pointer ] );\n};\n\n// ----- onclick ----- //\n\n// handle all clicks and prevent clicks when dragging\nproto.onclick = function( event ) {\n if ( this.isPreventingClicks ) {\n event.preventDefault();\n }\n};\n\n// ----- staticClick ----- //\n\n// triggered after pointer down & up with no/tiny movement\nproto._staticClick = function( event, pointer ) {\n // ignore emulated mouse up clicks\n if ( this.isIgnoringMouseUp && event.type == 'mouseup' ) {\n return;\n }\n\n this.staticClick( event, pointer );\n\n // set flag for emulated clicks 300ms after touchend\n if ( event.type != 'mouseup' ) {\n this.isIgnoringMouseUp = true;\n // reset flag after 300ms\n setTimeout( function() {\n delete this.isIgnoringMouseUp;\n }.bind( this ), 400 );\n }\n};\n\nproto.staticClick = function( event, pointer ) {\n this.emitEvent( 'staticClick', [ event, pointer ] );\n};\n\n// ----- utils ----- //\n\nUnidragger.getPointerPoint = Unipointer.getPointerPoint;\n\n// ----- ----- //\n\nreturn Unidragger;\n\n}));\n","// prev/next buttons\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n'use strict';\n\nvar svgURI = 'http://www.w3.org/2000/svg';\n\n// -------------------------- PrevNextButton -------------------------- //\n\nfunction PrevNextButton( direction, parent ) {\n this.direction = direction;\n this.parent = parent;\n this._create();\n}\n\nPrevNextButton.prototype = Object.create( Unipointer.prototype );\n\nPrevNextButton.prototype._create = function() {\n // properties\n this.isEnabled = true;\n this.isPrevious = this.direction == -1;\n var leftDirection = this.parent.options.rightToLeft ? 1 : -1;\n this.isLeft = this.direction == leftDirection;\n\n var element = this.element = document.createElement('button');\n element.className = 'flickity-button flickity-prev-next-button';\n element.className += this.isPrevious ? ' previous' : ' next';\n // prevent button from submitting form http://stackoverflow.com/a/10836076/182183\n element.setAttribute( 'type', 'button' );\n // init as disabled\n this.disable();\n\n element.setAttribute( 'aria-label', this.isPrevious ? 'Previous' : 'Next' );\n\n // create arrow\n var svg = this.createSVG();\n element.appendChild( svg );\n // events\n this.parent.on( 'select', this.update.bind( this ) );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPrevNextButton.prototype.activate = function() {\n this.bindStartEvent( this.element );\n this.element.addEventListener( 'click', this );\n // add to DOM\n this.parent.element.appendChild( this.element );\n};\n\nPrevNextButton.prototype.deactivate = function() {\n // remove from DOM\n this.parent.element.removeChild( this.element );\n // click events\n this.unbindStartEvent( this.element );\n this.element.removeEventListener( 'click', this );\n};\n\nPrevNextButton.prototype.createSVG = function() {\n var svg = document.createElementNS( svgURI, 'svg');\n svg.setAttribute( 'class', 'flickity-button-icon' );\n svg.setAttribute( 'viewBox', '0 0 100 100' );\n var path = document.createElementNS( svgURI, 'path');\n var pathMovements = getArrowMovements( this.parent.options.arrowShape );\n path.setAttribute( 'd', pathMovements );\n path.setAttribute( 'class', 'arrow' );\n // rotate arrow\n if ( !this.isLeft ) {\n path.setAttribute( 'transform', 'translate(100, 100) rotate(180) ' );\n }\n svg.appendChild( path );\n return svg;\n};\n\n// get SVG path movmement\nfunction getArrowMovements( shape ) {\n // use shape as movement if string\n if ( typeof shape == 'string' ) {\n return shape;\n }\n // create movement string\n return 'M ' + shape.x0 + ',50' +\n ' L ' + shape.x1 + ',' + ( shape.y1 + 50 ) +\n ' L ' + shape.x2 + ',' + ( shape.y2 + 50 ) +\n ' L ' + shape.x3 + ',50 ' +\n ' L ' + shape.x2 + ',' + ( 50 - shape.y2 ) +\n ' L ' + shape.x1 + ',' + ( 50 - shape.y1 ) +\n ' Z';\n}\n\nPrevNextButton.prototype.handleEvent = utils.handleEvent;\n\nPrevNextButton.prototype.onclick = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.parent.uiChange();\n var method = this.isPrevious ? 'previous' : 'next';\n this.parent[ method ]();\n};\n\n// ----- ----- //\n\nPrevNextButton.prototype.enable = function() {\n if ( this.isEnabled ) {\n return;\n }\n this.element.disabled = false;\n this.isEnabled = true;\n};\n\nPrevNextButton.prototype.disable = function() {\n if ( !this.isEnabled ) {\n return;\n }\n this.element.disabled = true;\n this.isEnabled = false;\n};\n\nPrevNextButton.prototype.update = function() {\n // index of first or last slide, if previous or next\n var slides = this.parent.slides;\n // enable is wrapAround and at least 2 slides\n if ( this.parent.options.wrapAround && slides.length > 1 ) {\n this.enable();\n return;\n }\n var lastIndex = slides.length ? slides.length - 1 : 0;\n var boundIndex = this.isPrevious ? 0 : lastIndex;\n var method = this.parent.selectedIndex == boundIndex ? 'disable' : 'enable';\n this[ method ]();\n};\n\nPrevNextButton.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\n// -------------------------- Flickity prototype -------------------------- //\n\nutils.extend( Flickity.defaults, {\n prevNextButtons: true,\n arrowShape: {\n x0: 10,\n x1: 60, y1: 50,\n x2: 70, y2: 40,\n x3: 30\n }\n});\n\nFlickity.createMethods.push('_createPrevNextButtons');\nvar proto = Flickity.prototype;\n\nproto._createPrevNextButtons = function() {\n if ( !this.options.prevNextButtons ) {\n return;\n }\n\n this.prevButton = new PrevNextButton( -1, this );\n this.nextButton = new PrevNextButton( 1, this );\n\n this.on( 'activate', this.activatePrevNextButtons );\n};\n\nproto.activatePrevNextButtons = function() {\n this.prevButton.activate();\n this.nextButton.activate();\n this.on( 'deactivate', this.deactivatePrevNextButtons );\n};\n\nproto.deactivatePrevNextButtons = function() {\n this.prevButton.deactivate();\n this.nextButton.deactivate();\n this.off( 'deactivate', this.deactivatePrevNextButtons );\n};\n\n// -------------------------- -------------------------- //\n\nFlickity.PrevNextButton = PrevNextButton;\n\nreturn Flickity;\n\n}));\n","// page dots\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'unipointer/unipointer',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, Unipointer, utils ) {\n return factory( window, Flickity, Unipointer, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('unipointer'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.Unipointer,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, Unipointer, utils ) {\n\n// -------------------------- PageDots -------------------------- //\n\n'use strict';\n\nfunction PageDots( parent ) {\n this.parent = parent;\n this._create();\n}\n\nPageDots.prototype = Object.create( Unipointer.prototype );\n\nPageDots.prototype._create = function() {\n // create holder element\n this.holder = document.createElement('ol');\n this.holder.className = 'flickity-page-dots';\n // create dots, array of elements\n this.dots = [];\n // events\n this.handleClick = this.onClick.bind( this );\n this.on( 'pointerDown', this.parent.childUIPointerDown.bind( this.parent ) );\n};\n\nPageDots.prototype.activate = function() {\n this.setDots();\n this.holder.addEventListener( 'click', this.handleClick );\n this.bindStartEvent( this.holder );\n // add to DOM\n this.parent.element.appendChild( this.holder );\n};\n\nPageDots.prototype.deactivate = function() {\n this.holder.removeEventListener( 'click', this.handleClick );\n this.unbindStartEvent( this.holder );\n // remove from DOM\n this.parent.element.removeChild( this.holder );\n};\n\nPageDots.prototype.setDots = function() {\n // get difference between number of slides and number of dots\n var delta = this.parent.slides.length - this.dots.length;\n if ( delta > 0 ) {\n this.addDots( delta );\n } else if ( delta < 0 ) {\n this.removeDots( -delta );\n }\n};\n\nPageDots.prototype.addDots = function( count ) {\n var fragment = document.createDocumentFragment();\n var newDots = [];\n var length = this.dots.length;\n var max = length + count;\n\n for ( var i = length; i < max; i++ ) {\n var dot = document.createElement('li');\n dot.className = 'dot';\n dot.setAttribute( 'aria-label', 'Page dot ' + ( i + 1 ) );\n fragment.appendChild( dot );\n newDots.push( dot );\n }\n\n this.holder.appendChild( fragment );\n this.dots = this.dots.concat( newDots );\n};\n\nPageDots.prototype.removeDots = function( count ) {\n // remove from this.dots collection\n var removeDots = this.dots.splice( this.dots.length - count, count );\n // remove from DOM\n removeDots.forEach( function( dot ) {\n this.holder.removeChild( dot );\n }, this );\n};\n\nPageDots.prototype.updateSelected = function() {\n // remove selected class on previous\n if ( this.selectedDot ) {\n this.selectedDot.className = 'dot';\n this.selectedDot.removeAttribute('aria-current');\n }\n // don't proceed if no dots\n if ( !this.dots.length ) {\n return;\n }\n this.selectedDot = this.dots[ this.parent.selectedIndex ];\n this.selectedDot.className = 'dot is-selected';\n this.selectedDot.setAttribute( 'aria-current', 'step' );\n};\n\nPageDots.prototype.onTap = // old method name, backwards-compatible\nPageDots.prototype.onClick = function( event ) {\n var target = event.target;\n // only care about dot clicks\n if ( target.nodeName != 'LI' ) {\n return;\n }\n\n this.parent.uiChange();\n var index = this.dots.indexOf( target );\n this.parent.select( index );\n};\n\nPageDots.prototype.destroy = function() {\n this.deactivate();\n this.allOff();\n};\n\nFlickity.PageDots = PageDots;\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pageDots: true\n});\n\nFlickity.createMethods.push('_createPageDots');\n\nvar proto = Flickity.prototype;\n\nproto._createPageDots = function() {\n if ( !this.options.pageDots ) {\n return;\n }\n this.pageDots = new PageDots( this );\n // events\n this.on( 'activate', this.activatePageDots );\n this.on( 'select', this.updateSelectedPageDots );\n this.on( 'cellChange', this.updatePageDots );\n this.on( 'resize', this.updatePageDots );\n this.on( 'deactivate', this.deactivatePageDots );\n};\n\nproto.activatePageDots = function() {\n this.pageDots.activate();\n};\n\nproto.updateSelectedPageDots = function() {\n this.pageDots.updateSelected();\n};\n\nproto.updatePageDots = function() {\n this.pageDots.setDots();\n};\n\nproto.deactivatePageDots = function() {\n this.pageDots.deactivate();\n};\n\n// ----- ----- //\n\nFlickity.PageDots = PageDots;\n\nreturn Flickity;\n\n}));\n","// player & autoPlay\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter',\n 'fizzy-ui-utils/utils',\n './flickity'\n ], function( EvEmitter, utils, Flickity ) {\n return factory( EvEmitter, utils, Flickity );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('ev-emitter'),\n require('fizzy-ui-utils'),\n require('./flickity')\n );\n } else {\n // browser global\n factory(\n window.EvEmitter,\n window.fizzyUIUtils,\n window.Flickity\n );\n }\n\n}( window, function factory( EvEmitter, utils, Flickity ) {\n\n'use strict';\n\n// -------------------------- Player -------------------------- //\n\nfunction Player( parent ) {\n this.parent = parent;\n this.state = 'stopped';\n // visibility change event handler\n this.onVisibilityChange = this.visibilityChange.bind( this );\n this.onVisibilityPlay = this.visibilityPlay.bind( this );\n}\n\nPlayer.prototype = Object.create( EvEmitter.prototype );\n\n// start play\nPlayer.prototype.play = function() {\n if ( this.state == 'playing' ) {\n return;\n }\n // do not play if page is hidden, start playing when page is visible\n var isPageHidden = document.hidden;\n if ( isPageHidden ) {\n document.addEventListener( 'visibilitychange', this.onVisibilityPlay );\n return;\n }\n\n this.state = 'playing';\n // listen to visibility change\n document.addEventListener( 'visibilitychange', this.onVisibilityChange );\n // start ticking\n this.tick();\n};\n\nPlayer.prototype.tick = function() {\n // do not tick if not playing\n if ( this.state != 'playing' ) {\n return;\n }\n\n var time = this.parent.options.autoPlay;\n // default to 3 seconds\n time = typeof time == 'number' ? time : 3000;\n var _this = this;\n // HACK: reset ticks if stopped and started within interval\n this.clear();\n this.timeout = setTimeout( function() {\n _this.parent.next( true );\n _this.tick();\n }, time );\n};\n\nPlayer.prototype.stop = function() {\n this.state = 'stopped';\n this.clear();\n // remove visibility change event\n document.removeEventListener( 'visibilitychange', this.onVisibilityChange );\n};\n\nPlayer.prototype.clear = function() {\n clearTimeout( this.timeout );\n};\n\nPlayer.prototype.pause = function() {\n if ( this.state == 'playing' ) {\n this.state = 'paused';\n this.clear();\n }\n};\n\nPlayer.prototype.unpause = function() {\n // re-start play if paused\n if ( this.state == 'paused' ) {\n this.play();\n }\n};\n\n// pause if page visibility is hidden, unpause if visible\nPlayer.prototype.visibilityChange = function() {\n var isPageHidden = document.hidden;\n this[ isPageHidden ? 'pause' : 'unpause' ]();\n};\n\nPlayer.prototype.visibilityPlay = function() {\n this.play();\n document.removeEventListener( 'visibilitychange', this.onVisibilityPlay );\n};\n\n// -------------------------- Flickity -------------------------- //\n\nutils.extend( Flickity.defaults, {\n pauseAutoPlayOnHover: true\n});\n\nFlickity.createMethods.push('_createPlayer');\nvar proto = Flickity.prototype;\n\nproto._createPlayer = function() {\n this.player = new Player( this );\n\n this.on( 'activate', this.activatePlayer );\n this.on( 'uiChange', this.stopPlayer );\n this.on( 'pointerDown', this.stopPlayer );\n this.on( 'deactivate', this.deactivatePlayer );\n};\n\nproto.activatePlayer = function() {\n if ( !this.options.autoPlay ) {\n return;\n }\n this.player.play();\n this.element.addEventListener( 'mouseenter', this );\n};\n\n// Player API, don't hate the ... thanks I know where the door is\n\nproto.playPlayer = function() {\n this.player.play();\n};\n\nproto.stopPlayer = function() {\n this.player.stop();\n};\n\nproto.pausePlayer = function() {\n this.player.pause();\n};\n\nproto.unpausePlayer = function() {\n this.player.unpause();\n};\n\nproto.deactivatePlayer = function() {\n this.player.stop();\n this.element.removeEventListener( 'mouseenter', this );\n};\n\n// ----- mouseenter/leave ----- //\n\n// pause auto-play on hover\nproto.onmouseenter = function() {\n if ( !this.options.pauseAutoPlayOnHover ) {\n return;\n }\n this.player.pause();\n this.element.addEventListener( 'mouseleave', this );\n};\n\n// resume auto-play on hover off\nproto.onmouseleave = function() {\n this.player.unpause();\n this.element.removeEventListener( 'mouseleave', this );\n};\n\n// ----- ----- //\n\nFlickity.Player = Player;\n\nreturn Flickity;\n\n}));\n","// add, remove cell\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n\n'use strict';\n\n// append cells to a document fragment\nfunction getCellsFragment( cells ) {\n var fragment = document.createDocumentFragment();\n cells.forEach( function( cell ) {\n fragment.appendChild( cell.element );\n });\n return fragment;\n}\n\n// -------------------------- add/remove cell prototype -------------------------- //\n\nvar proto = Flickity.prototype;\n\n/**\n * Insert, prepend, or append cells\n * @param {Element, Array, NodeList} elems\n * @param {Integer} index\n */\nproto.insert = function( elems, index ) {\n var cells = this._makeCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n var len = this.cells.length;\n // default to append\n index = index === undefined ? len : index;\n // add cells with document fragment\n var fragment = getCellsFragment( cells );\n // append to slider\n var isAppend = index == len;\n if ( isAppend ) {\n this.slider.appendChild( fragment );\n } else {\n var insertCellElement = this.cells[ index ].element;\n this.slider.insertBefore( fragment, insertCellElement );\n }\n // add to this.cells\n if ( index === 0 ) {\n // prepend, add to start\n this.cells = cells.concat( this.cells );\n } else if ( isAppend ) {\n // append, add to end\n this.cells = this.cells.concat( cells );\n } else {\n // insert in this.cells\n var endCells = this.cells.splice( index, len - index );\n this.cells = this.cells.concat( cells ).concat( endCells );\n }\n\n this._sizeCells( cells );\n this.cellChange( index, true );\n};\n\nproto.append = function( elems ) {\n this.insert( elems, this.cells.length );\n};\n\nproto.prepend = function( elems ) {\n this.insert( elems, 0 );\n};\n\n/**\n * Remove cells\n * @param {Element, Array, NodeList} elems\n */\nproto.remove = function( elems ) {\n var cells = this.getCells( elems );\n if ( !cells || !cells.length ) {\n return;\n }\n\n var minCellIndex = this.cells.length - 1;\n // remove cells from collection & DOM\n cells.forEach( function( cell ) {\n cell.remove();\n var index = this.cells.indexOf( cell );\n minCellIndex = Math.min( index, minCellIndex );\n utils.removeFrom( this.cells, cell );\n }, this );\n\n this.cellChange( minCellIndex, true );\n};\n\n/**\n * logic to be run after a cell's size changes\n * @param {Element} elem - cell's element\n */\nproto.cellSizeChange = function( elem ) {\n var cell = this.getCell( elem );\n if ( !cell ) {\n return;\n }\n cell.getSize();\n\n var index = this.cells.indexOf( cell );\n this.cellChange( index );\n};\n\n/**\n * logic any time a cell is changed: added, removed, or size changed\n * @param {Integer} changedCellIndex - index of the changed cell, optional\n */\nproto.cellChange = function( changedCellIndex, isPositioningSlider ) {\n var prevSelectedElem = this.selectedElement;\n this._positionCells( changedCellIndex );\n this._getWrapShiftCells();\n this.setGallerySize();\n // update selectedIndex\n // try to maintain position & select previous selected element\n var cell = this.getCell( prevSelectedElem );\n if ( cell ) {\n this.selectedIndex = this.getCellSlideIndex( cell );\n }\n this.selectedIndex = Math.min( this.slides.length - 1, this.selectedIndex );\n\n this.emitEvent( 'cellChange', [ changedCellIndex ] );\n // position slider\n this.select( this.selectedIndex );\n // do not position slider after lazy load\n if ( isPositioningSlider ) {\n this.positionSliderAtSelected();\n }\n};\n\n// ----- ----- //\n\nreturn Flickity;\n\n}));\n","// lazyload\n( function( window, factory ) {\n // universal module definition\n /* jshint strict: false */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n './flickity',\n 'fizzy-ui-utils/utils'\n ], function( Flickity, utils ) {\n return factory( window, Flickity, utils );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('./flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window,\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( window, function factory( window, Flickity, utils ) {\n'use strict';\n\nFlickity.createMethods.push('_createLazyload');\nvar proto = Flickity.prototype;\n\nproto._createLazyload = function() {\n this.on( 'select', this.lazyLoad );\n};\n\nproto.lazyLoad = function() {\n var lazyLoad = this.options.lazyLoad;\n if ( !lazyLoad ) {\n return;\n }\n // get adjacent cells, use lazyLoad option for adjacent count\n var adjCount = typeof lazyLoad == 'number' ? lazyLoad : 0;\n var cellElems = this.getAdjacentCellElements( adjCount );\n // get lazy images in those cells\n var lazyImages = [];\n cellElems.forEach( function( cellElem ) {\n var lazyCellImages = getCellLazyImages( cellElem );\n lazyImages = lazyImages.concat( lazyCellImages );\n });\n // load lazy images\n lazyImages.forEach( function( img ) {\n new LazyLoader( img, this );\n }, this );\n};\n\nfunction getCellLazyImages( cellElem ) {\n // check if cell element is lazy image\n if ( cellElem.nodeName == 'IMG' ) {\n var lazyloadAttr = cellElem.getAttribute('data-flickity-lazyload');\n var srcAttr = cellElem.getAttribute('data-flickity-lazyload-src');\n var srcsetAttr = cellElem.getAttribute('data-flickity-lazyload-srcset');\n if ( lazyloadAttr || srcAttr || srcsetAttr ) {\n return [ cellElem ];\n }\n }\n // select lazy images in cell\n var lazySelector = 'img[data-flickity-lazyload], ' +\n 'img[data-flickity-lazyload-src], img[data-flickity-lazyload-srcset]';\n var imgs = cellElem.querySelectorAll( lazySelector );\n return utils.makeArray( imgs );\n}\n\n// -------------------------- LazyLoader -------------------------- //\n\n/**\n * class to handle loading images\n */\nfunction LazyLoader( img, flickity ) {\n this.img = img;\n this.flickity = flickity;\n this.load();\n}\n\nLazyLoader.prototype.handleEvent = utils.handleEvent;\n\nLazyLoader.prototype.load = function() {\n this.img.addEventListener( 'load', this );\n this.img.addEventListener( 'error', this );\n // get src & srcset\n var src = this.img.getAttribute('data-flickity-lazyload') ||\n this.img.getAttribute('data-flickity-lazyload-src');\n var srcset = this.img.getAttribute('data-flickity-lazyload-srcset');\n // set src & serset\n this.img.src = src;\n if ( srcset ) {\n this.img.setAttribute( 'srcset', srcset );\n }\n // remove attr\n this.img.removeAttribute('data-flickity-lazyload');\n this.img.removeAttribute('data-flickity-lazyload-src');\n this.img.removeAttribute('data-flickity-lazyload-srcset');\n};\n\nLazyLoader.prototype.onload = function( event ) {\n this.complete( event, 'flickity-lazyloaded' );\n};\n\nLazyLoader.prototype.onerror = function( event ) {\n this.complete( event, 'flickity-lazyerror' );\n};\n\nLazyLoader.prototype.complete = function( event, className ) {\n // unbind events\n this.img.removeEventListener( 'load', this );\n this.img.removeEventListener( 'error', this );\n\n var cell = this.flickity.getParentCell( this.img );\n var cellElem = cell && cell.element;\n this.flickity.cellSizeChange( cellElem );\n\n this.img.classList.add( className );\n this.flickity.dispatchEvent( 'lazyLoad', event, cellElem );\n};\n\n// ----- ----- //\n\nFlickity.LazyLoader = LazyLoader;\n\nreturn Flickity;\n\n}));\n","/*!\n * Flickity imagesLoaded v2.0.0\n * enables imagesLoaded option for Flickity\n */\n\n/*jshint browser: true, strict: true, undef: true, unused: true */\n\n( function( window, factory ) {\n // universal module definition\n /*jshint strict: false */ /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'flickity/js/index',\n 'imagesloaded/imagesloaded'\n ], function( Flickity, imagesLoaded ) {\n return factory( window, Flickity, imagesLoaded );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('flickity'),\n require('imagesloaded')\n );\n } else {\n // browser global\n window.Flickity = factory(\n window,\n window.Flickity,\n window.imagesLoaded\n );\n }\n\n}( window, function factory( window, Flickity, imagesLoaded ) {\n'use strict';\n\nFlickity.createMethods.push('_createImagesLoaded');\n\nvar proto = Flickity.prototype;\n\nproto._createImagesLoaded = function() {\n this.on( 'activate', this.imagesLoaded );\n};\n\nproto.imagesLoaded = function() {\n if ( !this.options.imagesLoaded ) {\n return;\n }\n var _this = this;\n function onImagesLoadedProgress( instance, image ) {\n var cell = _this.getParentCell( image.img );\n _this.cellSizeChange( cell && cell.element );\n if ( !_this.options.freeScroll ) {\n _this.positionSliderAtSelected();\n }\n }\n imagesLoaded( this.slider ).on( 'progress', onImagesLoadedProgress );\n};\n\nreturn Flickity;\n\n}));\n","/*!\n * imagesLoaded v4.1.4\n * JavaScript is all like \"You images are done yet or what?\"\n * MIT License\n */\n\n( function( window, factory ) { 'use strict';\n // universal module definition\n\n /*global define: false, module: false, require: false */\n\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'ev-emitter/ev-emitter'\n ], function( EvEmitter ) {\n return factory( window, EvEmitter );\n });\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n window,\n require('ev-emitter')\n );\n } else {\n // browser global\n window.imagesLoaded = factory(\n window,\n window.EvEmitter\n );\n }\n\n})( typeof window !== 'undefined' ? window : this,\n\n// -------------------------- factory -------------------------- //\n\nfunction factory( window, EvEmitter ) {\n\n'use strict';\n\nvar $ = window.jQuery;\nvar console = window.console;\n\n// -------------------------- helpers -------------------------- //\n\n// extend objects\nfunction extend( a, b ) {\n for ( var prop in b ) {\n a[ prop ] = b[ prop ];\n }\n return a;\n}\n\nvar arraySlice = Array.prototype.slice;\n\n// turn element or nodeList into an array\nfunction makeArray( obj ) {\n if ( Array.isArray( obj ) ) {\n // use object if already an array\n return obj;\n }\n\n var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';\n if ( isArrayLike ) {\n // convert nodeList to array\n return arraySlice.call( obj );\n }\n\n // array of single index\n return [ obj ];\n}\n\n// -------------------------- imagesLoaded -------------------------- //\n\n/**\n * @param {Array, Element, NodeList, String} elem\n * @param {Object or Function} options - if function, use as callback\n * @param {Function} onAlways - callback function\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 var 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 = extend( {}, this.options );\n // shift arguments if no options set\n if ( typeof options == 'function' ) {\n onAlways = options;\n } else {\n extend( this.options, options );\n }\n\n if ( onAlways ) {\n this.on( 'always', onAlways );\n }\n\n this.getImages();\n\n if ( $ ) {\n // add jQuery Deferred object\n this.jqDeferred = new $.Deferred();\n }\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.options = {};\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\n/**\n * @param {Node} element\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 var nodeType = elem.nodeType;\n if ( !nodeType || !elementNodeTypes[ nodeType ] ) {\n return;\n }\n var childImgs = elem.querySelectorAll('img');\n // concat childElems to filterFound array\n for ( var i=0; i < childImgs.length; i++ ) {\n var img = childImgs[i];\n this.addImage( img );\n }\n\n // get child background images\n if ( typeof this.options.background == 'string' ) {\n var children = elem.querySelectorAll( this.options.background );\n for ( i=0; i < children.length; i++ ) {\n var child = children[i];\n this.addElementBackgroundImages( child );\n }\n }\n};\n\nvar elementNodeTypes = {\n 1: true,\n 9: true,\n 11: true\n};\n\nImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {\n var style = getComputedStyle( elem );\n if ( !style ) {\n // Firefox returns null if in a hidden iframe https://bugzil.la/548397\n return;\n }\n // get url inside url(\"...\")\n var reURL = /url\\((['\"])?(.*?)\\1\\)/gi;\n var matches = reURL.exec( style.backgroundImage );\n while ( matches !== null ) {\n var 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 var loadingImage = new LoadingImage( img );\n this.images.push( loadingImage );\n};\n\nImagesLoaded.prototype.addBackground = function( url, elem ) {\n var background = new Background( url, elem );\n this.images.push( background );\n};\n\nImagesLoaded.prototype.check = function() {\n var _this = this;\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 function onProgress( image, elem, message ) {\n // HACK - Chrome triggers event before object properties have changed. #83\n setTimeout( function() {\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 var eventName = this.hasAnyBroken ? 'fail' : 'done';\n this.isComplete = true;\n this.emitEvent( eventName, [ this ] );\n this.emitEvent( 'always', [ this ] );\n if ( this.jqDeferred ) {\n var 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 var 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 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.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 this.emitEvent( 'progress', [ this, this.img, message ] );\n};\n\n// ----- events ----- //\n\n// trigger specified handler for event type\nLoadingImage.prototype.handleEvent = function( event ) {\n var 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 var 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 ) {\n return;\n }\n // set local variable\n $ = jQuery;\n // $().imagesLoaded()\n $.fn.imagesLoaded = function( options, callback ) {\n var instance = new ImagesLoaded( this, options, callback );\n return instance.jqDeferred.promise( $(this) );\n };\n};\n// try making plugin\nImagesLoaded.makeJQueryPlugin();\n\n// -------------------------- -------------------------- //\n\nreturn ImagesLoaded;\n\n});\n","/**\n * Flickity fade v1.0.0\n * Fade between Flickity slides\n */\n\n/* jshint browser: true, undef: true, unused: true */\n\n( function( window, factory ) {\n // universal module definition\n /*globals define, module, require */\n if ( typeof define == 'function' && define.amd ) {\n // AMD\n define( [\n 'flickity/js/index',\n 'fizzy-ui-utils/utils',\n ], factory );\n } else if ( typeof module == 'object' && module.exports ) {\n // CommonJS\n module.exports = factory(\n require('flickity'),\n require('fizzy-ui-utils')\n );\n } else {\n // browser global\n factory(\n window.Flickity,\n window.fizzyUIUtils\n );\n }\n\n}( this, function factory( Flickity, utils ) {\n\n// ---- Slide ---- //\n\nvar Slide = Flickity.Slide;\n\nvar slideUpdateTarget = Slide.prototype.updateTarget;\nSlide.prototype.updateTarget = function() {\n slideUpdateTarget.apply( this, arguments );\n if ( !this.parent.options.fade ) {\n return;\n }\n // position cells at selected target\n var slideTargetX = this.target - this.x;\n var firstCellX = this.cells[0].x;\n this.cells.forEach( function( cell ) {\n var targetX = cell.x - firstCellX - slideTargetX;\n cell.renderPosition( targetX );\n });\n};\n\nSlide.prototype.setOpacity = function( alpha ) {\n this.cells.forEach( function( cell ) {\n cell.element.style.opacity = alpha;\n });\n};\n\n// ---- Flickity ---- //\n\nvar proto = Flickity.prototype;\n\nFlickity.createMethods.push('_createFade');\n\nproto._createFade = function() {\n this.fadeIndex = this.selectedIndex;\n this.prevSelectedIndex = this.selectedIndex;\n this.on( 'select', this.onSelectFade );\n this.on( 'dragEnd', this.onDragEndFade );\n this.on( 'settle', this.onSettleFade );\n this.on( 'activate', this.onActivateFade );\n this.on( 'deactivate', this.onDeactivateFade );\n};\n\nvar updateSlides = proto.updateSlides;\nproto.updateSlides = function() {\n updateSlides.apply( this, arguments );\n if ( !this.options.fade ) {\n return;\n }\n // set initial opacity\n this.slides.forEach( function( slide, i ) {\n var alpha = i == this.selectedIndex ? 1 : 0;\n slide.setOpacity( alpha );\n }, this );\n};\n\n/* ---- events ---- */\n\nproto.onSelectFade = function() {\n // in case of resize, keep fadeIndex within current count\n this.fadeIndex = Math.min( this.prevSelectedIndex, this.slides.length - 1 );\n this.prevSelectedIndex = this.selectedIndex;\n};\n\nproto.onSettleFade = function() {\n delete this.didDragEnd;\n if ( !this.options.fade ) {\n return;\n }\n // set full and 0 opacity on selected & faded slides\n this.selectedSlide.setOpacity( 1 );\n var fadedSlide = this.slides[ this.fadeIndex ];\n if ( fadedSlide && this.fadeIndex != this.selectedIndex ) {\n this.slides[ this.fadeIndex ].setOpacity( 0 );\n }\n};\n\nproto.onDragEndFade = function() {\n // set flag\n this.didDragEnd = true;\n};\n\nproto.onActivateFade = function() {\n if ( this.options.fade ) {\n this.element.classList.add('is-fade');\n }\n};\n\nproto.onDeactivateFade = function() {\n if ( !this.options.fade ) {\n return;\n }\n this.element.classList.remove('is-fade');\n // reset opacity\n this.slides.forEach( function( slide ) {\n slide.setOpacity('');\n });\n};\n\n/* ---- position & fading ---- */\n\nvar positionSlider = proto.positionSlider;\nproto.positionSlider = function() {\n if ( !this.options.fade ) {\n positionSlider.apply( this, arguments );\n return;\n }\n\n this.fadeSlides();\n this.dispatchScrollEvent();\n};\n\nvar positionSliderAtSelected = proto.positionSliderAtSelected;\nproto.positionSliderAtSelected = function() {\n if ( this.options.fade ) {\n // position fade slider at origin\n this.setTranslateX( 0 );\n }\n positionSliderAtSelected.apply( this, arguments );\n};\n\nproto.fadeSlides = function() {\n if ( this.slides.length < 2 ) {\n return;\n }\n // get slides to fade-in & fade-out\n var indexes = this.getFadeIndexes();\n var fadeSlideA = this.slides[ indexes.a ];\n var fadeSlideB = this.slides[ indexes.b ];\n var distance = this.wrapDifference( fadeSlideA.target, fadeSlideB.target );\n var progress = this.wrapDifference( fadeSlideA.target, -this.x );\n progress = progress / distance;\n\n fadeSlideA.setOpacity( 1 - progress );\n fadeSlideB.setOpacity( progress );\n\n // hide previous slide\n var fadeHideIndex = indexes.a;\n if ( this.isDragging ) {\n fadeHideIndex = progress > 0.5 ? indexes.a : indexes.b;\n }\n var isNewHideIndex = this.fadeHideIndex != undefined &&\n this.fadeHideIndex != fadeHideIndex &&\n this.fadeHideIndex != indexes.a &&\n this.fadeHideIndex != indexes.b;\n if ( isNewHideIndex ) {\n // new fadeHideSlide set, hide previous\n this.slides[ this.fadeHideIndex ].setOpacity( 0 );\n }\n this.fadeHideIndex = fadeHideIndex;\n};\n\nproto.getFadeIndexes = function() {\n if ( !this.isDragging && !this.didDragEnd ) {\n return {\n a: this.fadeIndex,\n b: this.selectedIndex,\n };\n }\n if ( this.options.wrapAround ) {\n return this.getFadeDragWrapIndexes();\n } else {\n return this.getFadeDragLimitIndexes();\n }\n};\n\nproto.getFadeDragWrapIndexes = function() {\n var distances = this.slides.map( function( slide, i ) {\n return this.getSlideDistance( -this.x, i );\n }, this );\n var absDistances = distances.map( function( distance ) {\n return Math.abs( distance );\n });\n var minDistance = Math.min.apply( Math, absDistances );\n var closestIndex = absDistances.indexOf( minDistance );\n var distance = distances[ closestIndex ];\n var len = this.slides.length;\n\n var delta = distance >= 0 ? 1 : -1;\n return {\n a: closestIndex,\n b: utils.modulo( closestIndex + delta, len ),\n };\n};\n\nproto.getFadeDragLimitIndexes = function() {\n // calculate closest previous slide\n var dragIndex = 0;\n for ( var i=0; i < this.slides.length - 1; i++ ) {\n var slide = this.slides[i];\n if ( -this.x < slide.target ) {\n break;\n }\n dragIndex = i;\n }\n return {\n a: dragIndex,\n b: dragIndex + 1,\n };\n};\n\nproto.wrapDifference = function( a, b ) {\n var diff = b - a;\n\n if ( !this.options.wrapAround ) {\n return diff;\n }\n\n var diffPlus = diff + this.slideableWidth;\n var diffMinus = diff - this.slideableWidth;\n if ( Math.abs( diffPlus ) < Math.abs( diff ) ) {\n diff = diffPlus;\n }\n if ( Math.abs( diffMinus ) < Math.abs( diff ) ) {\n diff = diffMinus;\n }\n return diff;\n};\n\n// ---- wrapAround ---- //\n\nvar _getWrapShiftCells = proto._getWrapShiftCells;\nproto._getWrapShiftCells = function() {\n if ( !this.options.fade ) {\n _getWrapShiftCells.apply( this, arguments );\n }\n};\n\nvar shiftWrapCells = proto.shiftWrapCells;\nproto.shiftWrapCells = function() {\n if ( !this.options.fade ) {\n shiftWrapCells.apply( this, arguments );\n }\n};\n\nreturn Flickity;\n\n}));\n","const toggle = new Event('toggle'); // eslint-disable-line\r\n\r\nexport const Accordion = (el) => {\r\n const ui = {\r\n el,\r\n control: el.querySelector('.accordion__heading')\r\n };\r\n\r\n ui.control.addEventListener('keydown', (e) => {\r\n if (e.keyCode === 13) {\r\n ui.control.dispatchEvent(toggle);\r\n }\r\n });\r\n};\r\n\r\nexport const AccordionGroup = (el) => {\r\n const ui = {\r\n el,\r\n accordions: el.querySelectorAll('.accordion'),\r\n toggleAll: el.querySelector('.accordion__toggleall')\r\n }\r\n\r\n /*\r\n ui.toggleAll.addEventListener('click', () => {\r\n ui.toggleAll.classList.toggle('is-active');\r\n\r\n if (ui.toggleAll.classList.contains('is-active')) {\r\n // COLLAPSE THEM ALL\r\n ui.accordions.forEach((accordion) => {\r\n const hidden = accordion.querySelector('.expandable__drawer').getAttribute('aria-hidden');\r\n\r\n if (hidden === 'true') {\r\n accordion.querySelector('.expandable__toggle').dispatchEvent(toggle);\r\n }\r\n });\r\n\r\n } else {\r\n // EXPAND THEM ALL\r\n ui.accordions.forEach((accordion) => {\r\n const hidden = accordion.querySelector('.expandable__drawer').getAttribute('aria-hidden');\r\n\r\n if (hidden === 'false') {\r\n accordion.querySelector('.expandable__toggle').dispatchEvent(toggle);\r\n }\r\n });\r\n }\r\n });\r\n */\r\n;\r\n\r\n const state = {\r\n controlled: ui.el.dataset.controlled\r\n };\r\n\r\n const onControlToggle = (current) => {\r\n // are any drawers open?\r\n ui.accordions.forEach((accordion) => {\r\n if (accordion !== current) {\r\n const hidden = accordion.querySelector('.expandable__drawer').getAttribute('aria-hidden');\r\n\r\n if (hidden === 'false') {\r\n accordion.querySelector('.expandable__toggle').dispatchEvent(toggle);\r\n }\r\n }\r\n });\r\n };\r\n\r\n const onToggle = (accordion) => {\r\n const drawer = accordion.querySelector('.expandable__drawer');\r\n const hidden = drawer.getAttribute('aria-hidden');\r\n\r\n if (hidden === 'false') {\r\n const links = drawer.querySelectorAll('.link');\r\n\r\n links.forEach((link) => {\r\n link.setAttribute('tabIndex', 0);\r\n });\r\n } else {\r\n const links = drawer.querySelectorAll('.link');\r\n\r\n links.forEach((link) => {\r\n link.setAttribute('tabIndex', -1);\r\n });\r\n }\r\n };\r\n\r\n const addEvents = () => {\r\n ui.accordions.forEach((accordion) => {\r\n accordion.addEventListener('click', () => onToggle(accordion));\r\n\r\n accordion.addEventListener('keydown', (e) => { if (e.keyCode === 13) { onToggle(accordion); } });\r\n });\r\n\r\n if (state.controlled === 'true') {\r\n ui.accordions.forEach((current) => {\r\n current.addEventListener('click', () => {\r\n onControlToggle(current);\r\n });\r\n\r\n current.addEventListener('keydown', (e) => {\r\n if (e.keyCode === 13) {\r\n onControlToggle(current);\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n const init = () => {\r\n addEvents();\r\n\r\n ui.accordions.forEach((accordion) => {\r\n const drawer = accordion.querySelector('.expandable__drawer');\r\n const hidden = drawer.getAttribute('aria-hidden');\r\n\r\n if (hidden === 'false') {\r\n const links = drawer.querySelectorAll('a');\r\n\r\n links.forEach((link) => {\r\n link.setAttribute('tabIndex', 0);\r\n });\r\n } else {\r\n const links = drawer.querySelectorAll('a');\r\n\r\n links.forEach((link) => {\r\n link.setAttribute('tabIndex', -1);\r\n });\r\n }\r\n });\r\n };\r\n\r\n init();\r\n};\r\n\r\nexport default Accordion;\r\n","export const Expandable = (el) => {\r\n const ui = {\r\n el,\r\n drawer: el.querySelector('.expandable__drawer'),\r\n toggle: undefined\r\n };\r\n\r\n const state = {\r\n startOpen: ui.el.dataset.startOpen === 'true' || false,\r\n isExpanded: false,\r\n closedHeight: ui.el.dataset.closedHeight || 0,\r\n aria: undefined\r\n };\r\n\r\n const toggle = new Event('toggle'); // eslint-disable-line\r\n\r\n const onToggle = () => {\r\n if (state.isExpanded) {\r\n ui.el.style.height = state.closedHeight;\r\n\r\n setTimeout(() => {\r\n ui.el.classList.remove('is-expanded');\r\n }, 200); // animation time\r\n\r\n if (state.aria) { // aria when content is hidden completely\r\n if (ui.toggle) {\r\n ui.toggle.setAttribute('aria-expanded', false);\r\n }\r\n\r\n ui.drawer.setAttribute('aria-hidden', true);\r\n }\r\n } else {\r\n const height = ui.drawer.offsetHeight;\r\n ui.el.style.height = `${height}px`;\r\n ui.el.classList.add('is-expanded');\r\n\r\n if (state.aria) {\r\n if (ui.toggle) {\r\n ui.toggle.setAttribute('aria-expanded', true);\r\n }\r\n\r\n ui.drawer.setAttribute('aria-hidden', false);\r\n }\r\n }\r\n\r\n state.isExpanded = !state.isExpanded;\r\n };\r\n\r\n\r\n const init = () => {\r\n ui.el.style.height = state.closedHeight;\r\n state.aria = state.closedHeight === '0';\r\n\r\n ui.toggle = document.querySelector(`#${ui.el.id}-expandable-control`);\r\n\r\n if (state.startOpen) {\r\n document.onload = onToggle();\r\n }\r\n\r\n if (ui.toggle) {\r\n if (state.aria) {\r\n ui.toggle.setAttribute('aria-expanded', false);\r\n }\r\n\r\n ui.toggle.addEventListener('toggle', () => {\r\n onToggle();\r\n });\r\n\r\n ui.toggle.addEventListener('click', () => {\r\n ui.toggle.dispatchEvent(toggle);\r\n });\r\n }\r\n };\r\n\r\n init();\r\n};\r\n\r\nexport default Expandable;\r\n","/*\r\n image.init.js\r\n\r\n 1. Page loads low-res image\r\n 2. JS mounts, apply blur / gray screen\r\n 3. Large image loads / fails, apply / revert\r\n*/\r\n\r\nexport default (el) => {\r\n const ui = {\r\n el,\r\n image: el.querySelector('.image'),\r\n box: el.querySelector('.image__lazy-box'), // has placeholder image (if supplied) + gray window\r\n panel: el.querySelector('.image__lazy-panel'),\r\n lowImage: el.querySelector('.image__low-res')\r\n };\r\n\r\n const { src } = ui.el.dataset;\r\n const { srcset } = ui.el.dataset;\r\n\r\n const resolveImage = (obj) => { // obj = { src: [src], type: ['src' or 'srcset'] }\r\n /*\r\n Promise that creates an Image HTML element from an `obj`, and attempts to\r\n load the `src` or `srcset` from the dataset into that Image.\r\n\r\n On success, we resolve and return the obj information to be applied\r\n to the Image inside the page markup.\r\n */\r\n const loadImage = (obj) => new Promise((resolve, reject) => {\r\n const loadedImage = new Image();\r\n\r\n loadedImage[obj.type] = obj.src;\r\n loadedImage.onload = () => resolve(obj);\r\n loadedImage.onerror = () => {\r\n throw new Error(`Unable to load ${obj.type} from ${obj.src}`);\r\n }\r\n });\r\n\r\n loadImage(obj).then((obj) => {\r\n ui.image[obj.type] = obj.src;\r\n\r\n setTimeout(() => {\r\n ui.el.classList.add('is-loaded');\r\n ui.el.classList.remove('pre-load');\r\n }, 500)\r\n }).catch((e) => {\r\n /*\r\n Error response:\r\n - log in console 'Error loading the src from www.facebook.com/cool-image.png'\r\n - Revert to previous style state.\r\n */\r\n console.log(e.message);\r\n\r\n setTimeout(() => {\r\n ui.el.classList.remove('pre-load');\r\n }, 500);\r\n });\r\n };\r\n\r\n const onImageView = () => {\r\n /*\r\n Sends correct information based on `src` vs `srcset` supply\r\n */\r\n if (srcset) {\r\n resolveImage({src: srcset, type: \"srcset\"});\r\n } else {\r\n resolveImage({src: src, type: \"src\"});\r\n }\r\n }\r\n\r\n const detectBoundingBox = () => {\r\n /*\r\n Measures bounding box relative to viewport\r\n\r\n When Image is within the distance of it's own height\r\n from the viewport window, call a responder\r\n */\r\n const box = ui.el.getBoundingClientRect();\r\n\r\n // When the Image wrapper is near the viewport, call responder.\r\n if (\r\n box.top >= 0 &&\r\n box.left >= 0 &&\r\n box.right <= (window.innerWidth || document.documentElement.clientWidth) &&\r\n box.bottom - box.height <= (window.innerHeight || document.documentElement.clientHeight)\r\n ) {\r\n onImageView(); // responder\r\n }\r\n }\r\n\r\n const prepareLoad = () => {\r\n /*\r\n When JS loads, we engage our Promise pattern.\r\n First, we add classes for our panel so we apply the gray filter and blur.\r\n */\r\n\r\n ui.el.classList.add('pre-load');\r\n };\r\n\r\n const addEvents = () => {\r\n /*\r\n When we scroll, measure lazy images to know when to load them\r\n */\r\n window.addEventListener('scroll', () => {\r\n detectBoundingBox();\r\n })\r\n };\r\n\r\n const init = () => {\r\n /*\r\n On load, calls in order:\r\n - adds blur quality to image (if JS fails, Image remains clear)\r\n - add scroll watch event\r\n - measure all lazy Images, load if in viewport.\r\n */\r\n prepareLoad();\r\n addEvents();\r\n detectBoundingBox();\r\n };\r\n\r\n init();\r\n};\r\n","import select from 'dom-select';\r\n\r\nexport default (el) => {\r\n const ui = {\r\n el,\r\n select: select('.language-select__select', el),\r\n };\r\n\r\n const addEvents = () => {\r\n ui.select.addEventListener('change', () => {\r\n const actionURL = ui.select.value;\r\n el.submit();\r\n });\r\n };\r\n\r\n const init = () => {\r\n addEvents();\r\n };\r\n\r\n init();\r\n};\r\n","import select from 'dom-select';\r\n\r\nexport const PageNav = (el) => {\r\n const ui = {\r\n el,\r\n nav: select('.page-nav'),\r\n toggle: select('.page-nav__heading', el),\r\n };\r\n\r\n // console.log(ui);\r\n\r\n const addEvents = () => {\r\n ui.toggle.addEventListener('click', () => {\r\n if (ui.nav.classList.contains('is-open')) {\r\n ui.nav.classList.remove('is-open');\r\n } else {\r\n ui.nav.classList.add('is-open');\r\n }\r\n });\r\n };\r\n\r\n const init = () => {\r\n addEvents();\r\n };\r\n\r\n init();\r\n};\r\n\r\nexport default PageNav;","import A11yDialog from 'a11y-dialog';\r\nimport Flickity from 'flickity';\r\nimport select from 'dom-select';\r\n\r\nexport const Modal = (el) => {\r\n const ui = {\r\n el,\r\n closeBtn: select('.modal__close', el),\r\n carousel: select('.carousel__container', el),\r\n iframe: el.querySelector('iframe'),\r\n video: el.querySelector('iframe[src*=\"www.youtube.com\"], iframe[src*=\"player.vimeo.com\"], video')\r\n };\r\n\r\n const { id } = ui.el;\r\n\r\n const stopVideo = function (el) {\r\n if (ui.video) {\r\n ui.video.src = ui.video.src.replace('&autoplay=1', '').replace('?autoplay=1', '');\r\n }\r\n }\r\n\r\n const startVideo = function (el) {\r\n if (ui.video) {\r\n // ui.video.src = ui.video.src + (ui.video.src.indexOf('?') < 0 ? '?' : '&') + 'autoplay=1';\r\n // console.log('autoplay!');\r\n }\r\n }\r\n\r\n ui.toggle = document.querySelector(`#opens--${id}`);\r\n\r\n const dialog = new A11yDialog(ui.el);\r\n\r\n const addEvents = () => {\r\n ui.toggle.addEventListener('click', () => {\r\n dialog.show();\r\n });\r\n\r\n dialog.on('show', () => {\r\n ui.closeBtn.blur();\r\n\r\n if (ui.carousel) {\r\n const flkty = Flickity.data(ui.carousel);\r\n ui.carousel.classList.add('is-open');\r\n flkty.resize();\r\n }\r\n\r\n startVideo();\r\n });\r\n\r\n dialog.on('hide', () => {\r\n if (ui.carousel) {\r\n ui.carousel.classList.remove('is-open');\r\n }\r\n\r\n stopVideo();\r\n });\r\n };\r\n\r\n const init = () => {\r\n addEvents();\r\n };\r\n\r\n init();\r\n};\r\n\r\nexport default Modal;\r\n","import select from 'dom-select';\r\n\r\n// el here is `.richtext table`, not `table` or `.table`\r\n// tables from the rich text editor require data\r\n// attributes not easily replicated in markup\r\nexport default (el) => {\r\n const ui = {\r\n el,\r\n rows: select.all('tr', el)\r\n };\r\n\r\n ui.heads = select.all('th', ui.rows[0]);\r\n\r\n ui.rows.forEach((row) => {\r\n const cells = select.all('td', row);\r\n\r\n cells.forEach((cell, idx) => {\r\n cell.setAttribute('data-heading', ui.heads[idx].innerText);\r\n });\r\n });\r\n};\r\n","import Flickity from 'flickity';\r\nimport select from 'dom-select';\r\nimport throttle from 'lodash.throttle';\r\nimport 'flickity-imagesloaded';\r\nimport 'flickity-fade';\r\n\r\nexport default (el) => {\r\n const ui = {\r\n el,\r\n tabsList: select('.tabs__tab-list', el),\r\n tabs: select.all('.tabs__tab', el),\r\n panels: select('.tabs__panel-list', el)\r\n };\r\n\r\n // initialize carousel\r\n const flkty = new Flickity(ui.panels, {\r\n adaptiveHeight: true,\r\n autoPlay: false,\r\n fade: true,\r\n imagesLoaded: true,\r\n pageDots: false,\r\n prevNextButtons: false\r\n });\r\n\r\n const onLoad = () => {\r\n flkty.select(0);\r\n ui.tabs[0].classList.add('is-active');\r\n };\r\n\r\n // set initial state on page load\r\n onLoad();\r\n\r\n ui.tabs.forEach((tab, index) => {\r\n tab.addEventListener('click', () => {\r\n flkty.select(index);\r\n ui.tabs.forEach((t) => {\r\n t.classList.remove('is-active');\r\n });\r\n tab.classList.add('is-active');\r\n tab.blur();\r\n });\r\n });\r\n\r\n // settle is a Flickity event fired once slide change completes\r\n flkty.on('settle', (index) => {\r\n flkty.resize();\r\n });\r\n\r\n flkty.on('select', (index) => {\r\n ui.tabs.forEach((t) => {\r\n t.classList.remove('is-active');\r\n });\r\n\r\n ui.tabs[index].classList.add('is-active');\r\n });\r\n\r\n // resize carousel cells on (throttled) window.resize\r\n window.addEventListener('resize', throttle(() => {\r\n flkty.resize();\r\n },\r\n 250,\r\n {\r\n trailing: true,\r\n leading: true\r\n }));\r\n};\r\n","const windowIsLargerThan = (breakpoint) => {\r\n const { clientWidth } = document.body;\r\n\r\n if (clientWidth >= breakpoint) {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexport default windowIsLargerThan;\r\n","import windowIsLargerThan from '@lib/measureViewport';\r\nimport select from 'dom-select';\r\n\r\nexport const closeMenu = new Event('closeMenu'); // eslint-disable-line\r\n\r\nconst NavItem = (el) => {\r\n const ui = {\r\n el,\r\n menu: el.querySelector('.nav-item__menu'),\r\n toggle: el.querySelector('.nav-item__inner'),\r\n icon: select('.nav-item__icon', el),\r\n close: select('.nav-item__close-icon', el),\r\n backdrop: select('.global-header__backdrop', document),\r\n back: select('.navigation__back', document),\r\n root: select('.global-header', document),\r\n body: select('body', document),\r\n navigation: select('.global-navigation', document),\r\n innerItems: null\r\n /* elements outside local scope */\r\n // pageshell: document.querySelector('.page-shell'),\r\n // backdrop: document.querySelector('.page-shell__backdrop'),\r\n // profile: document.querySelector('.global-profile'),\r\n // toggle: document.querySelector('.global-navigation__toggle')\r\n };\r\n\r\n const breakpoint = 896;\r\n\r\n const state = {\r\n menuOpen: false,\r\n desktop: windowIsLargerThan(breakpoint)\r\n };\r\n\r\n const addInnerEvents = () => {\r\n ui.innerItems = select.all('.link', ui.menu);\r\n\r\n ui.innerItems.forEach((item) => {\r\n item.addEventListener('keydown', (e) => {\r\n const { keyCode } = e;\r\n\r\n if (keyCode !== 13) {\r\n e.preventDefault();\r\n }\r\n\r\n if (keyCode === 38) {\r\n if (state.menuOpen === true) {\r\n if (item.previousElementSibling) {\r\n item.previousElementSibling.focus();\r\n } else {\r\n ui.menu.lastElementChild.focus();\r\n }\r\n }\r\n } else if (keyCode === 40) {\r\n if (state.menuOpen === true) {\r\n if (item.nextElementSibling) {\r\n item.nextElementSibling.focus();\r\n } else {\r\n ui.menu.firstElementChild.focus();\r\n }\r\n }\r\n } else if (keyCode === 9) {\r\n if (state.desktop === true) {\r\n ui.el.dispatchEvent(closeMenu);\r\n ui.menu.previousElementSibling.focus();\r\n } else {\r\n ui.back.focus();\r\n }\r\n }\r\n });\r\n });\r\n };\r\n\r\n const onMenuOpen = (e) => {\r\n if (ui.menu) {\r\n const openItem = select('.nav-item.is-open', document);\r\n\r\n if (openItem) openItem.dispatchEvent(closeMenu);\r\n\r\n state.menuOpen = true;\r\n ui.el.classList.add('is-open');\r\n ui.toggle.setAttribute('aria-expanded', true);\r\n\r\n if (windowIsLargerThan(breakpoint) === false) {\r\n ui.back.removeAttribute('hidden');\r\n ui.back.setAttribute('tabIndex', 0);\r\n\r\n } else {\r\n ui.root.classList.add('nav-open');\r\n ui.body.classList.add('nav-open');\r\n ui.root.classList.add('sub-open');\r\n }\r\n\r\n if (ui.icon !== null) ui.icon.setAttribute('hidden', true);\r\n if (ui.close !== null) ui.close.removeAttribute('hidden');\r\n\r\n if (e.type === 'keydown') {\r\n ui.menu.firstElementChild.focus();\r\n }\r\n\r\n addInnerEvents();\r\n }\r\n };\r\n\r\n const onMenuClose = () => {\r\n state.menuOpen = false;\r\n ui.el.classList.remove('is-open');\r\n ui.back.setAttribute('hidden', true);\r\n ui.back.setAttribute('tabIndex', -1);\r\n ui.toggle.setAttribute('aria-expanded', false);\r\n ui.root.classList.remove('nav-open');\r\n ui.body.classList.remove('nav-open');\r\n ui.root.classList.remove('sub-open');\r\n\r\n if (ui.close !== null) ui.close.setAttribute('hidden', true);\r\n if (ui.icon !== null) ui.icon.removeAttribute('hidden');\r\n\r\n ui.toggle.focus();\r\n };\r\n\r\n const handleMenuToggle = (e) => {\r\n if (state.menuOpen === false) {\r\n onMenuOpen(e);\r\n } else {\r\n ui.el.dispatchEvent(closeMenu);\r\n }\r\n };\r\n\r\n const addEventListeners = () => {\r\n ui.el.addEventListener('closeMenu', onMenuClose);\r\n\r\n ui.backdrop.addEventListener('click', () => {\r\n ui.el.dispatchEvent(closeMenu);\r\n });\r\n\r\n if (ui.toggle !== null) {\r\n ui.toggle.addEventListener('click', (e) => {\r\n handleMenuToggle(e);\r\n });\r\n\r\n ui.toggle.addEventListener('keydown', (e) => {\r\n const { keyCode } = e;\r\n\r\n /*\r\n keydown events:\r\n tab 9 default\r\n enter 13 toggle menu\r\n spacebar 32 toggle menu\r\n up arrow 38 close menu if open\r\n down arrow 40 open menu if closed, else focus inner child\r\n */\r\n\r\n if (keyCode !== 9) {\r\n e.preventDefault();\r\n }\r\n\r\n if (keyCode === 13) {\r\n handleMenuToggle(e);\r\n }\r\n\r\n /* desktop patterns */\r\n if (state.desktop === true) {\r\n if (keyCode === 38) {\r\n if (state.menuOpen === true) {\r\n ui.el.dispatchEvent(closeMenu);\r\n }\r\n } else if (keyCode === 32) {\r\n handleMenuToggle(e);\r\n } else if ((keyCode === 40) && state.menuOpen === false) {\r\n onMenuOpen(e);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n const init = () => {\r\n addEventListeners();\r\n };\r\n\r\n init();\r\n};\r\n\r\nexport default NavItem;\r\n","import select from 'dom-select';\r\nimport windowIsLargerThan from '@lib/measureViewport';\r\nimport { closeMenu } from '@components/global-header/partials/nav-item/nav-item.init';\r\n\r\nconst closeMainMenu = new Event('closeMainMenu'); // eslint-disable-line\r\n\r\nexport const Navigation = (el) => {\r\n const ui = {\r\n el,\r\n items: select.all('.nav-item', el),\r\n toggle: select('.navigation__toggle', el),\r\n back: select('.navigation__back', el),\r\n utility: select('.nav-utility', document),\r\n utilityItems: null,\r\n globalHeader: select('.global-header', document),\r\n body: select('body', document)\r\n };\r\n\r\n const breakpoint = 896;\r\n\r\n const state = {\r\n desktop: windowIsLargerThan(breakpoint),\r\n throttle: false,\r\n navOpen: false,\r\n subNavOpen: false\r\n };\r\n\r\n const throttle = (func, limit, ...args) => {\r\n const context = this;\r\n if (state.throttle === false) {\r\n func.apply(context, args);\r\n state.throttle = true;\r\n setTimeout(() => { state.throttle = false; }, limit);\r\n }\r\n };\r\n\r\n const openNavMenu = (e) => {\r\n const { type } = e;\r\n ui.el.classList.add('nav-open');\r\n ui.globalHeader.classList.add('nav-open');\r\n ui.toggle.setAttribute('aria-expanded', true);\r\n ui.body.classList.add('lock-body');\r\n\r\n ui.items.forEach((item) => {\r\n item.removeAttribute('hidden');\r\n\r\n item.querySelector('.nav-item__inner').setAttribute('tabIndex', 0);\r\n });\r\n\r\n if (state.desktop === false && type === 'keydown') {\r\n ui.items[0].querySelector('.nav-item__inner').focus();\r\n }\r\n\r\n state.navOpen = true;\r\n state.subNavOpen = false;\r\n };\r\n\r\n const closeNavMenu = () => {\r\n ui.el.classList.remove('nav-open');\r\n ui.globalHeader.classList.remove('sub-open');\r\n ui.globalHeader.classList.remove('nav-open');\r\n ui.toggle.setAttribute('aria-expanded', false);\r\n ui.body.classList.remove('lock-body');\r\n\r\n setTimeout(() => {\r\n if (!state.desktop) {\r\n ui.items.forEach((item) => {\r\n item.setAttribute('hidden', true);\r\n item.classList.remove('is-open');\r\n\r\n item.querySelector('.nav-item__inner').setAttribute('tabIndex', -1);\r\n\r\n item.dispatchEvent(closeMenu);\r\n });\r\n }\r\n }, 250);\r\n\r\n state.navOpen = false;\r\n state.subNavOpen = false;\r\n };\r\n\r\n const handleResize = () => {\r\n if (windowIsLargerThan(breakpoint) === true) {\r\n ui.el.dispatchEvent(closeMainMenu);\r\n ui.items.forEach((item) => {\r\n item.removeAttribute('hidden');\r\n item.classList.remove('is-hidden');\r\n const inner = select('.nav-item__inner', item);\r\n inner.setAttribute('tabIndex', 0);\r\n });\r\n\r\n ui.toggle.setAttribute('hidden', true);\r\n ui.toggle.setAttribute('tabIndex', -1);\r\n\r\n if (ui.utilityItems !== null) {\r\n ui.utilityItems.forEach((item) => {\r\n item.firstChild.setAttribute('tabIndex', 0);\r\n });\r\n }\r\n } else if (windowIsLargerThan(breakpoint) === false) {\r\n closeNavMenu();\r\n ui.toggle.removeAttribute('hidden');\r\n ui.toggle.setAttribute('tabIndex', 0);\r\n\r\n ui.items.forEach((item) => {\r\n item.classList.remove('is-hidden');\r\n item.removeAttribute('hidden');\r\n const inner = select('.nav-item__inner', item);\r\n inner.setAttribute('tabIndex', -1);\r\n });\r\n\r\n if (ui.utilityItems !== null) {\r\n ui.utilityItems.forEach((item) => {\r\n item.firstChild.setAttribute('tabIndex', 1);\r\n });\r\n }\r\n }\r\n\r\n state.desktop = windowIsLargerThan(breakpoint);\r\n };\r\n\r\n const handleToggle = (e) => {\r\n e.preventDefault();\r\n\r\n if (state.navOpen === false) {\r\n openNavMenu(e);\r\n } else {\r\n closeNavMenu();\r\n }\r\n };\r\n\r\n const addEventListeners = () => {\r\n window.addEventListener('resize', () => {\r\n if (state.desktop !== windowIsLargerThan(breakpoint)) {\r\n throttle(handleResize, 200);\r\n }\r\n });\r\n\r\n ui.el.addEventListener('closeMainMenu', () => {\r\n closeNavMenu();\r\n });\r\n\r\n ui.toggle.addEventListener('click', (e) => handleToggle(e));\r\n ui.toggle.addEventListener('keydown', (e) => {\r\n if (e.keyCode === 13) {\r\n handleToggle(e);\r\n } else if (e.keyCode === 9) {\r\n e.preventDefault();\r\n\r\n if (state.subNavOpen) {\r\n const openItem = select('.nav-item.is-open');\r\n\r\n const openLink = select('.link', openItem);\r\n openLink.focus();\r\n } else if (state.navOpen) {\r\n const button = select('.nav-item__toggle', ui.items[0]);\r\n button.focus();\r\n }\r\n }\r\n });\r\n\r\n ui.items.forEach((item, index) => {\r\n const button = select('.nav-item__toggle', item);\r\n const inner = select('.nav-item__inner', item);\r\n\r\n if (button !== null) {\r\n button.addEventListener('click', () => {\r\n state.subNavOpen = true;\r\n ui.globalHeader.classList.add('sub-open');\r\n });\r\n\r\n button.addEventListener('keydown', (e) => {\r\n const { keyCode } = e;\r\n\r\n if (keyCode !== 13) return;\r\n\r\n state.subNavOpen = true;\r\n ui.globalHeader.classList.add('sub-open');\r\n });\r\n }\r\n\r\n inner.addEventListener('keydown', (e) => {\r\n const { keyCode } = e;\r\n\r\n if (windowIsLargerThan(breakpoint) === false) {\r\n if (keyCode === 38) { // UP ARROW\r\n if (index !== 0) {\r\n ui.items[index - 1].querySelector('.nav-item__inner').focus();\r\n } else {\r\n ui.items[ui.items.length - 1].querySelector('.nav-item__inner').focus();\r\n }\r\n } else if (keyCode === 40) { // DOWN ARROW\r\n if (index !== ui.items.length - 1) {\r\n ui.items[index + 1].querySelector('.nav-item__inner').focus();\r\n } else {\r\n ui.items[0].querySelector('.nav-item__inner').focus();\r\n }\r\n } else if (keyCode === 9) { // TAB\r\n e.preventDefault();\r\n ui.toggle.focus();\r\n }\r\n }\r\n });\r\n });\r\n\r\n ui.back.addEventListener('click', () => {\r\n const openItem = select('.nav-item.is-open');\r\n\r\n ui.globalHeader.classList.remove('sub-open');\r\n openItem.dispatchEvent(closeMenu);\r\n state.subNavOpen = false;\r\n });\r\n };\r\n\r\n const init = () => {\r\n if (windowIsLargerThan(breakpoint) === true) {\r\n ui.toggle.setAttribute('hidden', true);\r\n ui.toggle.setAttribute('tabIndex', -1);\r\n\r\n ui.items.forEach((item) => {\r\n item.classList.remove('is-hidden');\r\n item.removeAttribute('hidden');\r\n\r\n item.querySelector('.nav-item__inner').setAttribute('tabIndex', 0);\r\n });\r\n }\r\n\r\n addEventListeners();\r\n };\r\n\r\n init();\r\n};\r\n\r\nexport default Navigation;\r\n","import select from 'dom-select';\r\n\r\nexport default (method, selector) => {\r\n select.all(selector, document)\r\n .forEach((el) => {\r\n method(el);\r\n });\r\n};\r\n","const addIeBodyClass = (el) => {\r\n if (!!window.MSInputMethodContext && !!document.documentMode) {\r\n el.classList.add('ie11');\r\n }\r\n};\r\n\r\nexport default addIeBodyClass;\r\n","import accordion, { AccordionGroup } from '@components/accordion/accordion.init';\r\nimport expandable from '@components/expandable/expandable.init';\r\nimport image from '@blocks/image/image.init';\r\nimport languageSelect from '@blocks/language-select/language-select.init';\r\nimport pageNav from '@components/page-nav/page-nav.init';\r\nimport modal from '@components/modal/modal.init';\r\nimport table from '@blocks/table/table.init';\r\nimport tabs from '@components/tabs/tabs.init';\r\nimport navigation from '@components/global-header/partials/navigation/navigation.init';\r\nimport navItem from '@components/global-header/partials/nav-item/nav-item.init';\r\n\r\nimport domReady from './lib/domReady';\r\nimport initModule from './lib/initModule';\r\nimport addIeBodyClass from './lib/detectIE11';\r\nimport loadSvg from './lib/load-svg';\r\n\r\nconst svgSpritePath = `${window.location.protocol}//${window.location.host}/bp-sprite.svg`;\r\n\r\n// Intialize scripts here requiring DOM access.\r\n//\r\n// Any modules imported here should export a function\r\n// that takes a node as its only parameter.\r\n// Import the module then initialize it below inside\r\n// domScripts(), calling initModule() and passing in\r\n// the function and a selector that aligns with the element\r\n// you want to pass into the module.\r\n// initModule() calls the method on each instance\r\n// of the selector passed, so your script can assume\r\n// it is working on a unique DOM node.\r\n//\r\n// example:\r\n// import coolThing from '../ui/blocks/CoolThing/cool-thing.init';\r\n// initModule(coolThing, '.cool-thing');\r\n\r\nconst domScripts = () => {\r\n initModule(accordion, '.accordion');\r\n initModule(AccordionGroup, '.accordion__group');\r\n initModule(addIeBodyClass, 'body');\r\n initModule(expandable, '.expandable');\r\n initModule(image, '.image__lazy-wrapper');\r\n initModule(languageSelect, '.language-select');\r\n initModule(modal, '.modal');\r\n initModule(navigation, '.navigation');\r\n initModule(navItem, '.nav-item');\r\n initModule(pageNav, '.page-nav');\r\n initModule(table, '.richtext table');\r\n initModule(tabs, '.tabs');\r\n loadSvg(svgSpritePath);\r\n};\r\n\r\n// domReady ensures our scripts fire inside Storybook\r\n// even when navigating component to component,\r\n// calling the passed function on DOMContentLoaded\r\n// and each time the page changes, using MutationObserver\r\ndomReady(domScripts);\r\n","export default (cb = () => {}) => {\r\n function runOnInit() {\r\n cb();\r\n }\r\n\r\n function runOnPageChange() {\r\n cb();\r\n }\r\n\r\n document.addEventListener('DOMContentLoaded', () => {\r\n runOnInit();\r\n\r\n // we only need to run callback() when in Storybook\r\n if (!window.isTurnStorybook) return;\r\n\r\n const callback = (mutationsList) => {\r\n for (let i = 0, len = mutationsList.length; i < len; i++) {\r\n if (mutationsList[i].type === 'childList') {\r\n runOnPageChange();\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const observer = new MutationObserver(callback);\r\n const config = { childList: true, subtree: false };\r\n\r\n observer.observe(document.getElementById('root'), config);\r\n }, false);\r\n};\r\n","import select from 'dom-select';\r\n\r\nexport default (url) => {\r\n const spriteId = 'bp-svg-sprite';\r\n const sprite = select(`#${spriteId}`);\r\n\r\n // footgun check\r\n if (typeof url !== 'string') {\r\n throw new Error('URL must be a string');\r\n }\r\n\r\n // in order to avoid multiple copies in the DOM\r\n // not returning because this may be refiring for reasons\r\n if (sprite) {\r\n sprite.remove();\r\n }\r\n\r\n // get the sprite\r\n const ajax = new XMLHttpRequest();\r\n ajax.open('GET', url, true);\r\n ajax.send();\r\n ajax.onload = () => {\r\n if (!ajax.responseText || ajax.responseText.substr(0, 4) !== '= 300) {\r\n return;\r\n }\r\n // make a hidden wrapper for the sprite to live in\r\n const div = document.createElement('div');\r\n div.id = spriteId;\r\n div.style.height = '0';\r\n div.innerHTML = ajax.responseText;\r\n\r\n // drop it into the page\r\n document.body.insertBefore(div, document.body.childNodes[0]);\r\n };\r\n};\r\n"],"sourceRoot":""}