Project import generated by Copybara.

GitOrigin-RevId: 63746295f1a5ab5a619056791995793d65529e62
diff --git a/node_modules/mdl-ext/lib/mdl-ext.min.js.map b/node_modules/mdl-ext/lib/mdl-ext.min.js.map
new file mode 100644
index 0000000..9290e8e
--- /dev/null
+++ b/node_modules/mdl-ext/lib/mdl-ext.min.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/universalModuleDefinition?5ca6","webpack:///mdl-ext.min.js?c961","webpack:///webpack/bootstrap 82005ea981e272a97aa0?b88c","webpack:///./~/babel-runtime/~/core-js/library/modules/_core.js?d611","webpack:///./src/utils/constants.js?14df","webpack:///./~/babel-runtime/~/core-js/library/modules/_export.js?8e40","webpack:///./~/babel-runtime/~/core-js/library/modules/_wks.js?2014","webpack:///./~/babel-runtime/~/core-js/library/modules/_global.js?3c52","webpack:///./~/babel-runtime/~/core-js/library/modules/_an-object.js?3af2","webpack:///./~/babel-runtime/~/core-js/library/modules/_iterators.js?f3f3","webpack:///./~/babel-runtime/helpers/toConsumableArray.js?1825","webpack:///./~/babel-runtime/~/core-js/library/modules/_descriptors.js?c0f5","webpack:///./~/babel-runtime/~/core-js/library/modules/_fails.js?c6dd","webpack:///./~/babel-runtime/~/core-js/library/modules/_hide.js?0d2e","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-dp.js?5986","webpack:///./src/utils/full-throttle.js?dc07","webpack:///./src/utils/json-utils.js?45f0","webpack:///./src/utils/string-utils.js?37f8","webpack:///./~/babel-runtime/~/core-js/library/modules/_has.js?ddd0","webpack:///./~/babel-runtime/~/core-js/library/modules/_is-object.js?cfda","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-keys.js?5d2e","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-iobject.js?527c","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-object.js?ca4f","webpack:///./src/utils/dom-utils.js?0816","webpack:///./~/babel-runtime/helpers/classCallCheck.js?21af","webpack:///./~/babel-runtime/helpers/createClass.js?1dfe","webpack:///./~/babel-runtime/~/core-js/library/modules/_defined.js?932b","webpack:///./~/babel-runtime/~/core-js/library/modules/_property-desc.js?256b","webpack:///./~/babel-runtime/~/core-js/library/modules/_shared-key.js?5602","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-integer.js?09ce","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.string.iterator.js?ae27","webpack:///./src/utils/easing.js?f6e9","webpack:///./src/utils/interval-function.js?c7e7","webpack:///./~/babel-runtime/core-js/get-iterator.js?1b08","webpack:///./~/babel-runtime/core-js/number/is-integer.js?14ca","webpack:///./~/babel-runtime/core-js/object/assign.js?e6ca","webpack:///./~/babel-runtime/~/core-js/library/modules/_a-function.js?0699","webpack:///./~/babel-runtime/~/core-js/library/modules/_classof.js?4e04","webpack:///./~/babel-runtime/~/core-js/library/modules/_cof.js?7381","webpack:///./~/babel-runtime/~/core-js/library/modules/_ctx.js?4e59","webpack:///./~/babel-runtime/~/core-js/library/modules/_dom-create.js?612f","webpack:///./~/babel-runtime/~/core-js/library/modules/_enum-bug-keys.js?3254","webpack:///./~/babel-runtime/~/core-js/library/modules/_iobject.js?34ed","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-define.js?4272","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-pie.js?a26b","webpack:///./~/babel-runtime/~/core-js/library/modules/_set-to-string-tag.js?57a7","webpack:///./~/babel-runtime/~/core-js/library/modules/_shared.js?f1ee","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-length.js?f510","webpack:///./~/babel-runtime/~/core-js/library/modules/_uid.js?c10a","webpack:///./~/babel-runtime/~/core-js/library/modules/core.get-iterator-method.js?8a45","webpack:///./~/babel-runtime/~/core-js/library/modules/web.dom.iterable.js?7e82","webpack:///./src/accordion/accordion.js?021c","webpack:///./src/carousel/carousel.js?7189","webpack:///./src/collapsible/collapsible.js?8da8","webpack:///./src/formatfield/formatfield.js?602e","webpack:///./src/index.js?9552","webpack:///./src/lightboard/lightboard.js?4a51","webpack:///./src/lightbox/lightbox.js?4a9b","webpack:///./src/menu-button/menu-button.js?292f","webpack:///./src/selectfield/selectfield.js?4310","webpack:///./src/sticky-header/sticky-header.js?0ce9","webpack:///./src/utils/index.js?d310","webpack:///./~/babel-runtime/core-js/array/from.js?efc2","webpack:///./~/babel-runtime/core-js/is-iterable.js?350e","webpack:///./~/babel-runtime/core-js/number/is-nan.js?f039","webpack:///./~/babel-runtime/core-js/object/define-property.js?5f70","webpack:///./~/babel-runtime/core-js/object/entries.js?41f9","webpack:///./~/babel-runtime/core-js/object/keys.js?fe06","webpack:///./~/babel-runtime/core-js/reflect/apply.js?a3c1","webpack:///./~/babel-runtime/helpers/slicedToArray.js?39c4","webpack:///./~/babel-runtime/~/core-js/library/fn/array/from.js?56e0","webpack:///./~/babel-runtime/~/core-js/library/fn/get-iterator.js?cf7c","webpack:///./~/babel-runtime/~/core-js/library/fn/is-iterable.js?f64a","webpack:///./~/babel-runtime/~/core-js/library/fn/number/is-integer.js?17db","webpack:///./~/babel-runtime/~/core-js/library/fn/number/is-nan.js?e8e9","webpack:///./~/babel-runtime/~/core-js/library/fn/object/assign.js?2fc7","webpack:///./~/babel-runtime/~/core-js/library/fn/object/define-property.js?4d33","webpack:///./~/babel-runtime/~/core-js/library/fn/object/entries.js?eb23","webpack:///./~/babel-runtime/~/core-js/library/fn/object/keys.js?0e2b","webpack:///./~/babel-runtime/~/core-js/library/fn/reflect/apply.js?1fe6","webpack:///./~/babel-runtime/~/core-js/library/modules/_add-to-unscopables.js?7da3","webpack:///./~/babel-runtime/~/core-js/library/modules/_array-includes.js?3a79","webpack:///./~/babel-runtime/~/core-js/library/modules/_create-property.js?f892","webpack:///./~/babel-runtime/~/core-js/library/modules/_html.js?8916","webpack:///./~/babel-runtime/~/core-js/library/modules/_ie8-dom-define.js?b102","webpack:///./~/babel-runtime/~/core-js/library/modules/_is-array-iter.js?a9d0","webpack:///./~/babel-runtime/~/core-js/library/modules/_is-integer.js?9053","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-call.js?45cd","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-create.js?0359","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-detect.js?e400","webpack:///./~/babel-runtime/~/core-js/library/modules/_iter-step.js?8944","webpack:///./~/babel-runtime/~/core-js/library/modules/_library.js?08a9","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-assign.js?82ff","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-create.js?9175","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-dps.js?73bc","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-gops.js?a865","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-gpo.js?5ec8","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-keys-internal.js?6fa8","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-sap.js?2605","webpack:///./~/babel-runtime/~/core-js/library/modules/_object-to-array.js?205b","webpack:///./~/babel-runtime/~/core-js/library/modules/_redefine.js?350a","webpack:///./~/babel-runtime/~/core-js/library/modules/_string-at.js?8678","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-index.js?7bea","webpack:///./~/babel-runtime/~/core-js/library/modules/_to-primitive.js?1a65","webpack:///./~/babel-runtime/~/core-js/library/modules/core.get-iterator.js?74ea","webpack:///./~/babel-runtime/~/core-js/library/modules/core.is-iterable.js?be30","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.array.from.js?f8ab","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.array.iterator.js?8359","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.number.is-integer.js?a48c","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.number.is-nan.js?7944","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.object.assign.js?07f0","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.object.define-property.js?8bde","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.object.keys.js?dfa4","webpack:///./~/babel-runtime/~/core-js/library/modules/es6.reflect.apply.js?2b77","webpack:///./~/babel-runtime/~/core-js/library/modules/es7.object.entries.js?872a"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","core","version","__e","Object","defineProperty","value","VK_TAB","VK_ENTER","VK_ESC","VK_SPACE","VK_PAGE_UP","VK_PAGE_DOWN","VK_END","VK_HOME","VK_ARROW_LEFT","VK_ARROW_UP","VK_ARROW_RIGHT","VK_ARROW_DOWN","ARIA_EXPANDED","ARIA_HIDDEN","ARIA_MULTISELECTABLE","ARIA_SELECTED","IS_DIRTY","IS_DISABLED","IS_EXPANDED","IS_FOCUSED","IS_INVALID","IS_UPGRADED","DATA_UPGRADED","MDL_RIPPLE","MDL_RIPPLE_COMPONENT","MDL_RIPPLE_EFFECT","MDL_RIPPLE_EFFECT_IGNORE_EVENTS","global","ctx","hide","PROTOTYPE","$export","type","name","source","key","own","out","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","IS_WRAP","W","expProto","target","undefined","C","a","b","arguments","length","apply","Function","virtual","R","U","store","uid","Symbol","USE_SYMBOL","$exports","window","Math","self","__g","isObject","it","TypeError","_interopRequireDefault","obj","__esModule","default","_from","_from2","arr","Array","isArray","i","arr2","get","exec","e","dP","createDesc","object","f","anObject","IE8_DOM_DEFINE","toPrimitive","O","Attributes","_apply","_apply2","fullThrottle","callback","context","throttling","_len","args","_key","requestAnimationFrame","jsonStringToObject","_assign","_assign2","jsonString","s","replace","JSON","parse","Error","message","stringList","randomString","joinStrings","_keys","_keys2","isString","str","flatten","list","reduce","concat","objectToStrings","arg","filter","map","result","_len2","_key2","delimiter","join","n","random","toString","slice","hasOwnProperty","$keys","enumBugKeys","keys","IObject","defined","tether","removeChildElements","moveElements","isRectInsideWindowViewport","isFocusable","getScrollParents","getParentElements","getWindowViewport","_isNan","_isNan2","element","forceReflow","lastChild","removeChild","d","style","display","ownerDocument","createDocumentFragment","firstChild","appendChild","viewportWidth","max","document","documentElement","clientWidth","innerWidth","viewportHeight","clientHeight","innerHeight","_ref","top","left","bottom","right","_getWindowViewport","el","elements","parentNode","cs","getComputedStyle","overflowY","overflowX","unshift","body","from","to","controlledBy","controlRect","getBoundingClientRect","_getWindowViewport2","height","offsetHeight","width","offsetWidth","elementRect","dy","dx","ddy","ddx","r","offsetTop","offsetLeft","hasAttribute","tabindex","getAttribute","parseInt","selector","nodeName","test","toLowerCase","disabled","href","getPropertyValue","instance","Constructor","_defineProperty","_defineProperty2","defineProperties","props","descriptor","enumerable","configurable","writable","protoProps","staticProps","prototype","bitmap","shared","ceil","floor","isNaN","$at","String","iterated","_t","_i","point","index","done","easeInOutQuad","t","inOutQuintic","ts","tc","MIN_INERVAL","intervalFunction","interval","lapse","cb","next","timeElapsed","execute","cancel","cancelAnimationFrame","start","timeStart","Date","now","loop","started","immediate","ReferenceError","stop","cof","TAG","ARG","tryGet","T","callee","aFunction","fn","that","is","createElement","split","propertyIsEnumerable","LIBRARY","redefine","has","Iterators","$iterCreate","setToStringTag","getPrototypeOf","ITERATOR","BUGGY","FF_ITERATOR","KEYS","VALUES","returnThis","Base","NAME","DEFAULT","IS_SET","FORCED","methods","IteratorPrototype","getMethod","kind","proto","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","entries","values","def","tag","stat","SHARED","toInteger","min","px","classof","getIteratorMethod","TO_STRING_TAG","collections","Collection","_toConsumableArray2","_toConsumableArray3","_constants","ACCORDION","ACCORDION_VERTICAL","ACCORDION_HORIZONTAL","PANEL","PANEL_ROLE","TAB","TAB_CAPTION","TAB_ROLE","TABPANEL","TABPANEL_ROLE","RIPPLE_EFFECT","RIPPLE","ANIMATION_EFFECT","ANIMATION","MaterialExtAccordion","element_","init","accordionPanelElements","classList","contains","panel","tab","querySelector","tabpanel","commandHandler_","event","preventDefault","stopPropagation","detail","command","dispatchToggleEvent_","state","ce","CustomEvent","bubbles","cancelable","dispatchEvent","openTab_","add","setAttribute","removeAttribute","closeTab_","remove","toggleTab_","closeTabs_","openTabs_","_this","querySelectorAll","forEach","closedItem","_this2","upgradeTab","tabElement","_this3","_accordionPanelElemen","disableTab","enableTab","calcMaxTabCaptionWidth","tabCaption","w","children","v","maxWidth","selectTab","selectedTab","tabClickHandler","tabFocusHandler","tabpanelClickHandler","tabpanelFocusHandler","tabKeydownHandler","keyCode","nextTab","nextPanel","previousElementSibling","nextElementSibling","focus","removeEventListener","addEventListener","_this4","openTab","_accordionPanelElemen2","closeTab","_accordionPanelElemen3","toggleTab","_accordionPanelElemen4","action","_this5","bind","componentHandler","register","constructor","classAsString","cssClass","widget","_isInteger","_isInteger2","_intervalFunction","_intervalFunction2","_easing","_jsonUtils","MDL_RIPPLE_CONTAINER","SLIDE","ROLE","SLIDE_ROLE","MaterialExtCarousel","config_","interactive","autostart","animationLoop","scrollAnimation_","startSlideShow_","nextSlide","slide","animateScroll_","moveSlideIntoViewport_","emitSelectEvent_","nextScroll","direction","nextDirection","scrollLeft","scrollWidth","x","cancelSlideShow_","newPosition","newDuration","completedCallback","distance","duration","abs","command_","setAriaSelected_","slides","getSlidesInViewport_","keyDownHandler_","cmd","getSlide_","shiftKey","setFocus_","dragHandler_","updating","rAFDragId","startX","clientX","touches","prevX","targetElement","update","currentX","drag","endDrag","clickHandler_","focusHandler_","blurHandler_","evt","carouselRect","slidesInViewport","slideRect","removeListeners_","mdlDowngrade_","closest","addRipple_","rippleContainer","ripple","img","title","upgradeElement","stopAnimation","upgradeSlides","hasRippleEffect","getConfig","_classCallCheck2","_classCallCheck3","_createClass2","_createClass3","_stringUtils","_domUtils","JS_COLLAPSIBLE","COLLAPSIBLE_CONTROL_CLASS","COLLAPSIBLE_GROUP_CLASS","COLLAPSIBLE_REGION_CLASS","Collapsible","controlElement_","keyDownHandler","controlElement","MouseEvent","view","clickHandler","isDisabled","push","find","toggle","isExpanded","dispatchToggleEvent","regions","regionElements","region","collapse","expand","regionId","ids","regionIds","role","addRegionId","initControl","initRegions","addRegionElement","addListeners","removeListeners","MaterialExtCollapsible","collapsible","downgrade","getControlElement","getRegionElements","addRegionElements","removeRegionElements","removeRegionElement","disableToggle","enableToggle","_class","_temp","JS_FORMAT_FIELD","FORMAT_FIELD_COMPONENT","browserLanguage","navigator","languages","language","userLanguage","FormatField","options_","clearTimeout","timer","focusInHandler","input","readOnly","unformatInput","setTimeout","select","focusOutHandler","formatValue","doReplace","RegExp","options","groupSeparator","decimalSeparator","intlGroupSeparator_","intlDecimalSeparator_","Intl","NumberFormat","locales","format","stripSeparatorsFromValue","fixSeparators","_this6","addOptions","opts","addLocale","addGrouping","toLocaleString","useGrouping","minimumFractionDigits","maximumFractionDigits","charAt","input_","MaterialExtFormatfield","formatField_","getOptions","getUnformattedValue","unformat","LIGHTBOARD_ROLE","SLIDE_TABSTOP","MaterialExtLightboard","getSlide","selectSlide_","selectedSlide","dispatchSelectEvent_","addRipple","firstSlide","lastSlide","prevSlide","keydownHandler","focusHandler","_slicedToArray2","_slicedToArray3","_entries","_entries2","_getIterator2","_getIterator3","_fullThrottle","_fullThrottle2","LIGHTBOX","LIGHTBOX_SLIDER","LIGHTBOX_SLIDER_SLIDE","STICKY_FOOTER","BUTTON","MaterialExtLightbox","dispatchAction_","buttonClickHandler_","repositionDialog_","lightboxElement","footerHeight","footer","isSticky","reposition","dialog","fh","position","scrollTop","topValue","naturalWidth","vh","imgLoadHandler_","imgDragHandler_","setStyles","properties","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_step$value","err","return","opacity","slider","textContent","line-height","font-size","text-align","background-image","src","button","figcaption","JS_MENU_BUTTON","MENU_BUTTON_MENU","MENU_BUTTON_MENU_ITEM","MENU_BUTTON_MENU_ITEM_SEPARATOR","menuFactory","ariaControls","removeAllSelected","selectedItem","setSelected","item","force","getSelected","isSeparator","nextItem","current","firstElementChild","previousItem","lastElementChild","firstItem","lastItem","selectItem","close","blurHandler","relatedTarget","explicitOriginalTarget","activeElement","shouldClose","touchStartHandler","open","btn","forceFocus","addWaiAria","menuitem","selected","MenuButton","openMenu","closeMenu","recalcMenuPosition","focusElement","focusElementLastScrollPosition","parseFloat","menu","positionChangeHandler","closeMenuHandler","dispatchMenuSelect","scrollElements","addFocusElement","tagName","moveElementToDocumentBody","findMenuElement","menuElement","menuElementId","addMenu","componentInstance","related","indexOf","MaterialExtMenuButton","menuButton_","getMenuElement","getSelectedMenuItem","setSelectedMenuItem","LABEL","INPUT","MaterialExtSelectfield","onFocus_","onBlur_","onReset_","updateClasses_","checkDisabled","checkValidity","checkDirty","checkFocus","select_","Boolean","disable","enable","change","label_","invalid","MDL_LAYOUT_CONTENT","IS_SCROLL_CLASS","MaterialExtStickyHeader","header_","content_","lastScrollTop_","visibleAtScrollEnd","mutationObserver_","drawing_","recalcWidth_","throttleResize","resizeHandler_","reposition_","currentContentScrollTop","scrollDiff","headerTop","scrollHeight","throttleScroll","scrollHandler_","updatePosition_","addMutationObserver_","MutationObserver","observe","attributes","childList","characterData","subtree","disconnect","paddingTop","_isIterable2","_isIterable3","sliceIterator","_arr","_n","_d","_e","_s","Number","isInteger","assign","$Object","desc","Reflect","toIObject","toLength","toIndex","IS_INCLUDES","$this","fromIndex","$defineProperty","ArrayProto","isFinite","iterator","ret","create","SAFE_CLOSING","riter","skipClosing","safe","iter","getKeys","gOPS","pIE","toObject","$assign","A","K","k","aLen","getSymbols","isEnum","j","dPs","IE_PROTO","Empty","createDict","iframeDocument","iframe","lt","gt","contentWindow","write","Properties","getOwnPropertySymbols","ObjectProto","arrayIndexOf","names","fails","KEY","exp","isEntries","TO_STRING","pos","l","charCodeAt","val","valueOf","getIterator","iterFn","isIterable","isArrayIter","createProperty","getIterFn","arrayLike","step","mapfn","mapping","addToUnscopables","_k","Arguments","number","rApply","fApply","thisArgument","argumentsList","L"],"mappings":"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","file":"mdl-ext.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"mdl-ext\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"mdl-ext\"] = factory();\n\telse\n\t\troot[\"mdl-ext\"] = factory();\n})(this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"mdl-ext\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"mdl-ext\"] = factory();\n\telse\n\t\troot[\"mdl-ext\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \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/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(0);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(113);\n\tmodule.exports = __webpack_require__(53);\n\n\n/***/ },\n/* 1 */\n/***/ function(module, exports) {\n\n\tvar core = module.exports = {version: '2.4.0'};\n\tif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n/***/ },\n/* 2 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\tvar VK_TAB = 9;\n\tvar VK_ENTER = 13;\n\tvar VK_ESC = 27;\n\tvar VK_SPACE = 32;\n\tvar VK_PAGE_UP = 33;\n\tvar VK_PAGE_DOWN = 34;\n\tvar VK_END = 35;\n\tvar VK_HOME = 36;\n\tvar VK_ARROW_LEFT = 37;\n\tvar VK_ARROW_UP = 38;\n\tvar VK_ARROW_RIGHT = 39;\n\tvar VK_ARROW_DOWN = 40;\n\t\n\tvar ARIA_EXPANDED = 'aria-expanded';\n\tvar ARIA_HIDDEN = 'aria-hidden';\n\tvar ARIA_MULTISELECTABLE = 'aria-multiselectable';\n\tvar ARIA_SELECTED = 'aria-selected';\n\t\n\tvar IS_DIRTY = 'is-dirty';\n\tvar IS_DISABLED = 'is-disabled';\n\tvar IS_EXPANDED = 'is-expanded';\n\tvar IS_FOCUSED = 'is-focused';\n\tvar IS_INVALID = 'is-invalid';\n\tvar IS_UPGRADED = 'is-upgraded';\n\tvar DATA_UPGRADED = 'data-upgraded';\n\t\n\tvar MDL_RIPPLE = 'mdl-ripple';\n\tvar MDL_RIPPLE_COMPONENT = 'MaterialRipple';\n\tvar MDL_RIPPLE_EFFECT = 'mdl-js-ripple-effect';\n\tvar MDL_RIPPLE_EFFECT_IGNORE_EVENTS = 'mdl-js-ripple-effect--ignore-events';\n\t\n\texports.VK_TAB = VK_TAB;\n\texports.VK_ENTER = VK_ENTER;\n\texports.VK_ESC = VK_ESC;\n\texports.VK_SPACE = VK_SPACE;\n\texports.VK_PAGE_UP = VK_PAGE_UP;\n\texports.VK_PAGE_DOWN = VK_PAGE_DOWN;\n\texports.VK_END = VK_END;\n\texports.VK_HOME = VK_HOME;\n\texports.VK_ARROW_LEFT = VK_ARROW_LEFT;\n\texports.VK_ARROW_UP = VK_ARROW_UP;\n\texports.VK_ARROW_RIGHT = VK_ARROW_RIGHT;\n\texports.VK_ARROW_DOWN = VK_ARROW_DOWN;\n\texports.ARIA_EXPANDED = ARIA_EXPANDED;\n\texports.ARIA_HIDDEN = ARIA_HIDDEN;\n\texports.ARIA_MULTISELECTABLE = ARIA_MULTISELECTABLE;\n\texports.ARIA_SELECTED = ARIA_SELECTED;\n\texports.IS_DIRTY = IS_DIRTY;\n\texports.IS_DISABLED = IS_DISABLED;\n\texports.IS_EXPANDED = IS_EXPANDED;\n\texports.IS_FOCUSED = IS_FOCUSED;\n\texports.IS_INVALID = IS_INVALID;\n\texports.IS_UPGRADED = IS_UPGRADED;\n\texports.DATA_UPGRADED = DATA_UPGRADED;\n\texports.MDL_RIPPLE = MDL_RIPPLE;\n\texports.MDL_RIPPLE_COMPONENT = MDL_RIPPLE_COMPONENT;\n\texports.MDL_RIPPLE_EFFECT = MDL_RIPPLE_EFFECT;\n\texports.MDL_RIPPLE_EFFECT_IGNORE_EVENTS = MDL_RIPPLE_EFFECT_IGNORE_EVENTS;\n\n/***/ },\n/* 3 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar global    = __webpack_require__(5)\n\t  , core      = __webpack_require__(1)\n\t  , ctx       = __webpack_require__(37)\n\t  , hide      = __webpack_require__(11)\n\t  , PROTOTYPE = 'prototype';\n\t\n\tvar $export = function(type, name, source){\n\t  var IS_FORCED = type & $export.F\n\t    , IS_GLOBAL = type & $export.G\n\t    , IS_STATIC = type & $export.S\n\t    , IS_PROTO  = type & $export.P\n\t    , IS_BIND   = type & $export.B\n\t    , IS_WRAP   = type & $export.W\n\t    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n\t    , expProto  = exports[PROTOTYPE]\n\t    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n\t    , key, own, out;\n\t  if(IS_GLOBAL)source = name;\n\t  for(key in source){\n\t    // contains in native\n\t    own = !IS_FORCED && target && target[key] !== undefined;\n\t    if(own && key in exports)continue;\n\t    // export native or passed\n\t    out = own ? target[key] : source[key];\n\t    // prevent global pollution for namespaces\n\t    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n\t    // bind timers to global for call from export context\n\t    : IS_BIND && own ? ctx(out, global)\n\t    // wrap global constructors for prevent change them in library\n\t    : IS_WRAP && target[key] == out ? (function(C){\n\t      var F = function(a, b, c){\n\t        if(this instanceof C){\n\t          switch(arguments.length){\n\t            case 0: return new C;\n\t            case 1: return new C(a);\n\t            case 2: return new C(a, b);\n\t          } return new C(a, b, c);\n\t        } return C.apply(this, arguments);\n\t      };\n\t      F[PROTOTYPE] = C[PROTOTYPE];\n\t      return F;\n\t    // make static versions for prototype methods\n\t    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n\t    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n\t    if(IS_PROTO){\n\t      (exports.virtual || (exports.virtual = {}))[key] = out;\n\t      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n\t      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n\t    }\n\t  }\n\t};\n\t// type bitmap\n\t$export.F = 1;   // forced\n\t$export.G = 2;   // global\n\t$export.S = 4;   // static\n\t$export.P = 8;   // proto\n\t$export.B = 16;  // bind\n\t$export.W = 32;  // wrap\n\t$export.U = 64;  // safe\n\t$export.R = 128; // real proto method for `library` \n\tmodule.exports = $export;\n\n/***/ },\n/* 4 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar store      = __webpack_require__(44)('wks')\n\t  , uid        = __webpack_require__(46)\n\t  , Symbol     = __webpack_require__(5).Symbol\n\t  , USE_SYMBOL = typeof Symbol == 'function';\n\t\n\tvar $exports = module.exports = function(name){\n\t  return store[name] || (store[name] =\n\t    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n\t};\n\t\n\t$exports.store = store;\n\n/***/ },\n/* 5 */\n/***/ function(module, exports) {\n\n\t// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n\tvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n\t  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\n\tif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n/***/ },\n/* 6 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar isObject = __webpack_require__(17);\n\tmodule.exports = function(it){\n\t  if(!isObject(it))throw TypeError(it + ' is not an object!');\n\t  return it;\n\t};\n\n/***/ },\n/* 7 */\n/***/ function(module, exports) {\n\n\tmodule.exports = {};\n\n/***/ },\n/* 8 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _from = __webpack_require__(60);\n\t\n\tvar _from2 = _interopRequireDefault(_from);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = function (arr) {\n\t  if (Array.isArray(arr)) {\n\t    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n\t      arr2[i] = arr[i];\n\t    }\n\t\n\t    return arr2;\n\t  } else {\n\t    return (0, _from2.default)(arr);\n\t  }\n\t};\n\n/***/ },\n/* 9 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// Thank's IE8 for his funny defineProperty\n\tmodule.exports = !__webpack_require__(10)(function(){\n\t  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n\t});\n\n/***/ },\n/* 10 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(exec){\n\t  try {\n\t    return !!exec();\n\t  } catch(e){\n\t    return true;\n\t  }\n\t};\n\n/***/ },\n/* 11 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar dP         = __webpack_require__(12)\n\t  , createDesc = __webpack_require__(25);\n\tmodule.exports = __webpack_require__(9) ? function(object, key, value){\n\t  return dP.f(object, key, createDesc(1, value));\n\t} : function(object, key, value){\n\t  object[key] = value;\n\t  return object;\n\t};\n\n/***/ },\n/* 12 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar anObject       = __webpack_require__(6)\n\t  , IE8_DOM_DEFINE = __webpack_require__(82)\n\t  , toPrimitive    = __webpack_require__(101)\n\t  , dP             = Object.defineProperty;\n\t\n\texports.f = __webpack_require__(9) ? Object.defineProperty : function defineProperty(O, P, Attributes){\n\t  anObject(O);\n\t  P = toPrimitive(P, true);\n\t  anObject(Attributes);\n\t  if(IE8_DOM_DEFINE)try {\n\t    return dP(O, P, Attributes);\n\t  } catch(e){ /* empty */ }\n\t  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n\t  if('value' in Attributes)O[P] = Attributes.value;\n\t  return O;\n\t};\n\n/***/ },\n/* 13 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\t\n\tvar _apply = __webpack_require__(66);\n\t\n\tvar _apply2 = _interopRequireDefault(_apply);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Since some events can fire at a high rate, the event handler should be limited to execute computationally\n\t * expensive operations, such as DOM modifications, inside a single rendered frame.\n\t * When listening to e.g. scroll and resize events, the browser tends to fire off more events per\n\t * second than are actually useful. For instance, if your event listener sets some element positions, then it\n\t * is possible for those positions to be updated multiple times in a single rendered frame. In this case, all of\n\t * the layout calculations triggered by setting the elements' positions will be wasted except for the one time that\n\t * it runs immediately prior to the browser rendering the updated layout to the screen.\n\t * To avoid wasting cycles, we can use requestAnimationFrame to only run the event listener once just before the page\n\t * is rendered to the screen.\n\t * *\n\t * @param callback the function to throttle\n\t * @param context  optional context of this, default to global\n\t * @return {function(...[*])}\n\t */\n\tvar fullThrottle = function fullThrottle(callback, context) {\n\t\n\t  if (!context) {\n\t    context = undefined || window;\n\t  }\n\t\n\t  var throttling = false;\n\t\n\t  return function () {\n\t    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t      args[_key] = arguments[_key];\n\t    }\n\t\n\t    if (!throttling) {\n\t      throttling = true;\n\t      window.requestAnimationFrame(function () {\n\t        throttling = false;\n\t        return (0, _apply2.default)(callback, context, args);\n\t      });\n\t    }\n\t  };\n\t};\n\t\n\texports.default = fullThrottle;\n\tmodule.exports = exports[\"default\"];\n\n/***/ },\n/* 14 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * Converts a JSON string to object\n\t * @param jsonString\n\t * @param source\n\t */\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.jsonStringToObject = undefined;\n\t\n\tvar _assign = __webpack_require__(33);\n\t\n\tvar _assign2 = _interopRequireDefault(_assign);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar jsonStringToObject = function jsonStringToObject(jsonString) {\n\t  var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\t\n\t  var s = jsonString.replace(/'/g, '\"');\n\t  try {\n\t    return (0, _assign2.default)(source, JSON.parse(s));\n\t  } catch (e) {\n\t    throw new Error('Failed to parse json string: ' + s + '. Error: ' + e.message);\n\t  }\n\t};\n\t\n\texports.jsonStringToObject = jsonStringToObject;\n\n/***/ },\n/* 15 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t/**\n\t * @license\n\t * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t *      http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t */\n\t\n\t/**\n\t * A javascript utility for conditionally creating a list of strings.\n\t * The function takes any number of arguments which can be a string or object.\n\t * Inspired by (but not copied from) JedWatson/classnames, https://github.com/JedWatson/classnames\n\t *\n\t * @param  {*} args the strings and/or objects to\n\t * @return {Array} a list of strings\n\t * @example\n\t * // Returns ['foo', 'bar', 'baz', 'quux']\n\t * stringList(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });\n\t * @example see the tests for more examples\n\t */\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.stringList = exports.randomString = exports.joinStrings = undefined;\n\t\n\tvar _keys = __webpack_require__(65);\n\t\n\tvar _keys2 = _interopRequireDefault(_keys);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar stringList = function stringList() {\n\t  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n\t    args[_key] = arguments[_key];\n\t  }\n\t\n\t  var isString = function isString(str) {\n\t    return str != null && typeof str === 'string';\n\t  };\n\t\n\t  var flatten = function flatten(list) {\n\t    return list.reduce(function (a, b) {\n\t      return a.concat(Array.isArray(b) ? flatten(b) : b);\n\t    }, []);\n\t  };\n\t\n\t  var objectToStrings = function objectToStrings(arg) {\n\t    return (0, _keys2.default)(arg).filter(function (key) {\n\t      return arg[key];\n\t    }).map(function (key) {\n\t      return key;\n\t    });\n\t  };\n\t\n\t  return args.filter(function (arg) {\n\t    return !!arg;\n\t  }).map(function (arg) {\n\t    return isString(arg) ? arg : objectToStrings(arg);\n\t  }).reduce(function (result, arg) {\n\t    return result.concat(Array.isArray(arg) ? flatten(arg) : arg);\n\t  }, []);\n\t};\n\t\n\t/**\n\t * A simple javascript utility for conditionally joining strings together.\n\t * The function takes a delimiter string and any number of arguments which can be a string or object.\n\t *\n\t * @param delimiter delimiter to separate joined strings\n\t * @param  {*} args the strings and/or objects to join\n\t * @return {String} the joined strings\n\t * @example\n\t * // Returns 'foo, bar, baz, quux'\n\t * joinStrings(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });\n\t * @example see the tests for more examples\n\t */\n\tvar joinStrings = function joinStrings() {\n\t  for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n\t    args[_key2 - 1] = arguments[_key2];\n\t  }\n\t\n\t  var delimiter = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ' ';\n\t  return stringList.apply(undefined, args).join(delimiter);\n\t};\n\t\n\t/**\n\t * Generates a random string with a given length\n\t * @param n {Integer} length of generated string\n\t * @see http://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript\n\t * @return {String} the random string\n\t * @example\n\t * // Returns e.g. 'pd781w0y'\n\t * randomString(8);\n\t * @example see the tests for more examples\n\t */\n\tvar randomString = function randomString() {\n\t  var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12;\n\t  return Array(n + 1).join((Math.random().toString(36) + '00000000000000000').slice(2, 18)).slice(0, n);\n\t};\n\t\n\texports.joinStrings = joinStrings;\n\texports.randomString = randomString;\n\texports.stringList = stringList;\n\n/***/ },\n/* 16 */\n/***/ function(module, exports) {\n\n\tvar hasOwnProperty = {}.hasOwnProperty;\n\tmodule.exports = function(it, key){\n\t  return hasOwnProperty.call(it, key);\n\t};\n\n/***/ },\n/* 17 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(it){\n\t  return typeof it === 'object' ? it !== null : typeof it === 'function';\n\t};\n\n/***/ },\n/* 18 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.14 / 15.2.3.14 Object.keys(O)\n\tvar $keys       = __webpack_require__(95)\n\t  , enumBugKeys = __webpack_require__(39);\n\t\n\tmodule.exports = Object.keys || function keys(O){\n\t  return $keys(O, enumBugKeys);\n\t};\n\n/***/ },\n/* 19 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// to indexed object, toObject with fallback for non-array-like ES3 strings\n\tvar IObject = __webpack_require__(40)\n\t  , defined = __webpack_require__(24);\n\tmodule.exports = function(it){\n\t  return IObject(defined(it));\n\t};\n\n/***/ },\n/* 20 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.13 ToObject(argument)\n\tvar defined = __webpack_require__(24);\n\tmodule.exports = function(it){\n\t  return Object(defined(it));\n\t};\n\n/***/ },\n/* 21 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\texports.tether = exports.removeChildElements = exports.moveElements = exports.isRectInsideWindowViewport = exports.isFocusable = exports.getScrollParents = exports.getParentElements = exports.getWindowViewport = undefined;\n\t\n\tvar _isNan = __webpack_require__(62);\n\t\n\tvar _isNan2 = _interopRequireDefault(_isNan);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * Remove child element(s)\n\t * element.innerHTNL = '' has a performance penality!\n\t * @see http://jsperf.com/empty-an-element/16\n\t * @see http://jsperf.com/force-reflow\n\t * @param element\n\t * @param forceReflow\n\t */\n\tvar removeChildElements = function removeChildElements(element) {\n\t  var forceReflow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\t\n\t\n\t  // See: http://jsperf.com/empty-an-element/16\n\t  while (element.lastChild) {\n\t    element.removeChild(element.lastChild);\n\t  }\n\t  if (forceReflow) {\n\t    // See: http://jsperf.com/force-reflow\n\t    var d = element.style.display;\n\t\n\t    element.style.display = 'none';\n\t    element.style.display = d;\n\t  }\n\t};\n\t\n\t/**\n\t * Moves child elements from a DOM node to another dom node.\n\t * @param source {HTMLElement}\n\t * @param target {HTMLElement} If the target parameter is ommited, a document fragment is created\n\t * @return {HTMLElement} The target node\n\t *\n\t * @example\n\t * // Moves child elements from a DOM node to another dom node.\n\t * moveElements(source, destination);\n\t *\n\t * @example\n\t * // If the second parameter is ommited, a document fragment is created:\n\t * let fragment = moveElements(source);\n\t *\n\t * @See: https://github.com/webmodules/dom-move\n\t */\n\tvar moveElements = function moveElements(source, target) {\n\t  if (!target) {\n\t    target = source.ownerDocument.createDocumentFragment();\n\t  }\n\t  while (source.firstChild) {\n\t    target.appendChild(source.firstChild);\n\t  }\n\t  return target;\n\t};\n\t\n\t/**\n\t * Get the browser viewport dimensions\n\t * @see http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript\n\t * @return {{windowWidth: number, windowHeight: number}}\n\t */\n\tvar getWindowViewport = function getWindowViewport() {\n\t  return {\n\t    viewportWidth: Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\n\t    viewportHeight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)\n\t  };\n\t};\n\t\n\t/**\n\t * Check whether an element is in the window viewport\n\t * @see http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport/\n\t * @param top\n\t * @param left\n\t * @param bottom\n\t * @param right\n\t * @return {boolean} true if rectangle is inside window viewport, otherwise false\n\t */\n\tvar isRectInsideWindowViewport = function isRectInsideWindowViewport(_ref) {\n\t  var top = _ref.top,\n\t      left = _ref.left,\n\t      bottom = _ref.bottom,\n\t      right = _ref.right;\n\t\n\t  var _getWindowViewport = getWindowViewport(),\n\t      viewportWidth = _getWindowViewport.viewportWidth,\n\t      viewportHeight = _getWindowViewport.viewportHeight;\n\t\n\t  return top >= 0 && left >= 0 && bottom <= viewportHeight && right <= viewportWidth;\n\t};\n\t\n\t/**\n\t * Get a list of parent elements that can possibly scroll\n\t * @param el the element to get parents for\n\t * @returns {Array}\n\t */\n\tvar getScrollParents = function getScrollParents(el) {\n\t  var elements = [];\n\t\n\t  /*\n\t  for (el = el.parentNode; el; el = el.parentNode) {\n\t    const cs = window.getComputedStyle(el);\n\t    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {\n\t      elements.unshift(el);\n\t    }\n\t    if(el === document.body) {\n\t      break;\n\t    }\n\t  }\n\t  */\n\t\n\t  var element = el.parentNode;\n\t  while (element) {\n\t    var cs = window.getComputedStyle(element);\n\t    if (!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {\n\t      elements.unshift(element);\n\t    }\n\t    if (element === document.body) {\n\t      break;\n\t    }\n\t    element = element.parentNode;\n\t  }\n\t\n\t  return elements;\n\t};\n\t\n\t/**\n\t * Get a list of parent elements, from a given element to a given element\n\t * @param {HTMLElement} from\n\t * @param {HTMLElement} to\n\t * @return {Array<HTMLElement>} the parent elements, not including from and to\n\t */\n\tvar getParentElements = function getParentElements(from, to) {\n\t  var result = [];\n\t  var element = from.parentNode;\n\t  while (element) {\n\t    if (element === to) {\n\t      break;\n\t    }\n\t    result.unshift(element);\n\t    element = element.parentNode;\n\t  }\n\t  return result;\n\t};\n\t\n\t/**\n\t * Position element next to button\n\t *\n\t * Positioning strategy\n\t *  1. element.height > viewport.height\n\t *     let element.height = viewport.heigt\n\t *     let element.overflow-y = auto\n\t *  2. element.width > viewport.width\n\t *     let element.width = viewport.width\n\t *  3. position element below button, align left edge of element with button left\n\t *       done if element inside viewport\n\t *  4. position element below button, align right edge of element with button right\n\t *       done if element inside viewport\n\t *  5. positions element above button, aligns left edge of element with button left\n\t *       done if element inside viewport\n\t *  6. position element above the control element, aligned to its right.\n\t *       done if element inside viewport\n\t *  7. position element at button right hand side, aligns element top with button top\n\t *       done if element inside viewport\n\t *  8. position element at button left hand side, aligns element top with button top\n\t *       done if element inside viewport\n\t *  9. position element inside viewport\n\t *     1. position element at viewport bottom\n\t *     2. position element at button right hand side\n\t *        done if element inside viewport\n\t *     3. position element at button left hand side\n\t *       done if element inside viewport\n\t *     4. position element at viewport right\n\t * 10. done\n\t *\n\t */\n\tvar tether = function tether(controlledBy, element) {\n\t  var controlRect = controlledBy.getBoundingClientRect();\n\t\n\t  // 1. will element height fit inside window viewport?\n\t\n\t  var _getWindowViewport2 = getWindowViewport(),\n\t      viewportWidth = _getWindowViewport2.viewportWidth,\n\t      viewportHeight = _getWindowViewport2.viewportHeight;\n\t\n\t  element.style.height = 'auto';\n\t  //element.style.overflowY = 'hidden';\n\t  if (element.offsetHeight > viewportHeight) {\n\t    element.style.height = viewportHeight + 'px';\n\t    element.style.overflowY = 'auto';\n\t  }\n\t\n\t  // 2. will element width fit inside window viewport?\n\t  element.style.width = 'auto';\n\t  if (element.offsetWidth > viewportWidth) {\n\t    element.style.width = viewportWidth + 'px';\n\t  }\n\t\n\t  var elementRect = element.getBoundingClientRect();\n\t\n\t  // element to control distance\n\t  var dy = controlRect.top - elementRect.top;\n\t  var dx = controlRect.left - elementRect.left;\n\t\n\t  // element rect, window coordinates relative to top,left of control\n\t  var top = elementRect.top + dy;\n\t  var left = elementRect.left + dx;\n\t  var bottom = top + elementRect.height;\n\t  var right = left + elementRect.width;\n\t\n\t  // Position relative to control\n\t  var ddy = dy;\n\t  var ddx = dx;\n\t\n\t  if (isRectInsideWindowViewport({\n\t    top: top + controlRect.height,\n\t    left: left,\n\t    bottom: bottom + controlRect.height,\n\t    right: right\n\t  })) {\n\t    // 3 position element below the control element, aligned to its left\n\t    ddy = controlRect.height + dy;\n\t    //console.log('***** 3');\n\t  } else if (isRectInsideWindowViewport({\n\t    top: top + controlRect.height,\n\t    left: left + controlRect.width - elementRect.width,\n\t    bottom: bottom + controlRect.height,\n\t    right: left + controlRect.width\n\t  })) {\n\t    // 4 position element below the control element, aligned to its right\n\t    ddy = controlRect.height + dy;\n\t    ddx = dx + controlRect.width - elementRect.width;\n\t    //console.log('***** 4');\n\t  } else if (isRectInsideWindowViewport({\n\t    top: top - elementRect.height,\n\t    left: left,\n\t    bottom: bottom - elementRect.height,\n\t    right: right\n\t  })) {\n\t    // 5. position element above the control element, aligned to its left.\n\t    ddy = dy - elementRect.height;\n\t    //console.log('***** 5');\n\t  } else if (isRectInsideWindowViewport({\n\t    top: top - elementRect.height,\n\t    left: left + controlRect.width - elementRect.width,\n\t    bottom: bottom - elementRect.height,\n\t    right: left + controlRect.width\n\t  })) {\n\t    // 6. position element above the control element, aligned to its right.\n\t    ddy = dy - elementRect.height;\n\t    ddx = dx + controlRect.width - elementRect.width;\n\t    //console.log('***** 6');\n\t  } else if (isRectInsideWindowViewport({\n\t    top: top,\n\t    left: left + controlRect.width,\n\t    bottom: bottom,\n\t    right: right + controlRect.width\n\t  })) {\n\t    // 7. position element at button right hand side\n\t    ddx = controlRect.width + dx;\n\t    //console.log('***** 7');\n\t  } else if (isRectInsideWindowViewport({\n\t    top: top,\n\t    left: left - controlRect.width,\n\t    bottom: bottom,\n\t    right: right - controlRect.width\n\t  })) {\n\t    // 8. position element at button left hand side\n\t    ddx = dx - elementRect.width;\n\t    //console.log('***** 8');\n\t  } else {\n\t    // 9. position element inside viewport, near controlrect if possible\n\t    //console.log('***** 9');\n\t\n\t    // 9.1 position element near controlrect bottom\n\t    ddy = dy - bottom + viewportHeight;\n\t    if (top + controlRect.height >= 0 && bottom + controlRect.height <= viewportHeight) {\n\t      ddy = controlRect.height + dy;\n\t    } else if (top - elementRect.height >= 0 && bottom - elementRect.height <= viewportHeight) {\n\t      ddy = dy - elementRect.height;\n\t    }\n\t\n\t    if (left + elementRect.width + controlRect.width <= viewportWidth) {\n\t      // 9.2 Position element at button right hand side\n\t      ddx = controlRect.width + dx;\n\t      //console.log('***** 9.2');\n\t    } else if (left - elementRect.width >= 0) {\n\t      // 9.3 Position element at button left hand side\n\t      ddx = dx - elementRect.width;\n\t      //console.log('***** 9.3');\n\t    } else {\n\t      // 9.4 position element at (near) viewport right\n\t      var r = left + elementRect.width - viewportWidth;\n\t      ddx = dx - r;\n\t      //console.log('***** 9.4');\n\t    }\n\t  }\n\t\n\t  // 10. done\n\t  element.style.top = element.offsetTop + ddy + 'px';\n\t  element.style.left = element.offsetLeft + ddx + 'px';\n\t  //console.log('***** 10. done');\n\t};\n\t\n\t/**\n\t * Check if the given element can receive focus\n\t * @param {HTMLElement} element the element to check\n\t * @return {boolean} true if the element is focusable, otherwise false\n\t */\n\tvar isFocusable = function isFocusable(element) {\n\t  // https://github.com/stephenmathieson/is-focusable/blob/master/index.js\n\t  // http://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus\n\t\n\t  if (element.hasAttribute('tabindex')) {\n\t    var tabindex = element.getAttribute('tabindex');\n\t    if (!(0, _isNan2.default)(tabindex)) {\n\t      return parseInt(tabindex) > -1;\n\t    }\n\t  }\n\t\n\t  if (element.hasAttribute('contenteditable') && element.getAttribute('contenteditable') !== 'false') {\n\t    // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-contenteditable\n\t    return true;\n\t  }\n\t\n\t  // natively focusable, but only when enabled\n\t  var selector = /input|select|textarea|button|details/i;\n\t  var name = element.nodeName;\n\t  if (selector.test(name)) {\n\t    return element.type.toLowerCase() !== 'hidden' && !element.disabled;\n\t  }\n\t\n\t  // anchors and area must have an href\n\t  if (name === 'A' || name === 'AREA') {\n\t    return !!element.href;\n\t  }\n\t\n\t  if (name === 'IFRAME') {\n\t    // Check visible iframe\n\t    var cs = window.getComputedStyle(element);\n\t    return cs.getPropertyValue('display').toLowerCase() !== 'none';\n\t  }\n\t\n\t  return false;\n\t};\n\t\n\t/**\n\t * Get a list of offset parents for given element\n\t * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript\n\t * @param el the element\n\t * @return {Array} a list of offset parents\n\t */\n\t/*\n\tconst offsetParents = (el) => {\n\t  const elements = [];\n\t  for (; el; el = el.offsetParent) {\n\t    elements.unshift(el);\n\t  }\n\t  if(!elements.find(e => e === document.body)) {\n\t    elements.unshift(document.body);\n\t  }\n\t  return elements;\n\t};\n\t*/\n\t\n\t/**\n\t * Finds the common offset ancestor of two DOM nodes\n\t * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript\n\t * @see https://gist.github.com/benpickles/4059636\n\t * @param a\n\t * @param b\n\t * @return {Element} The common offset ancestor of a and b\n\t */\n\t/*\n\tconst commonOffsetAncestor = (a, b) => {\n\t  const parentsA = offsetParents(a);\n\t  const parentsB = offsetParents(b);\n\t\n\t  for (let i = 0; i < parentsA.length; i++) {\n\t    if (parentsA[i] !== parentsB[i]) return parentsA[i-1];\n\t  }\n\t};\n\t*/\n\t\n\t/**\n\t * Calculate position relative to a target element\n\t * @see http://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively\n\t * @param target\n\t * @param el\n\t * @return {{top: number, left: number}}\n\t */\n\t/*\n\tconst calcPositionRelativeToTarget = (target, el) => {\n\t  let top = 0;\n\t  let left = 0;\n\t\n\t  while(el) {\n\t    top += (el.offsetTop - el.scrollTop + el.clientTop) || 0;\n\t    left += (el.offsetLeft - el.scrollLeft + el.clientLeft) || 0;\n\t    el = el.offsetParent;\n\t\n\t    if(el === target) {\n\t      break;\n\t    }\n\t  }\n\t  return { top: top, left: left };\n\t};\n\t*/\n\t\n\texports.getWindowViewport = getWindowViewport;\n\texports.getParentElements = getParentElements;\n\texports.getScrollParents = getScrollParents;\n\texports.isFocusable = isFocusable;\n\texports.isRectInsideWindowViewport = isRectInsideWindowViewport;\n\texports.moveElements = moveElements;\n\texports.removeChildElements = removeChildElements;\n\texports.tether = tether;\n\n/***/ },\n/* 22 */\n/***/ function(module, exports) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\texports.default = function (instance, Constructor) {\n\t  if (!(instance instanceof Constructor)) {\n\t    throw new TypeError(\"Cannot call a class as a function\");\n\t  }\n\t};\n\n/***/ },\n/* 23 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _defineProperty = __webpack_require__(63);\n\t\n\tvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = function () {\n\t  function defineProperties(target, props) {\n\t    for (var i = 0; i < props.length; i++) {\n\t      var descriptor = props[i];\n\t      descriptor.enumerable = descriptor.enumerable || false;\n\t      descriptor.configurable = true;\n\t      if (\"value\" in descriptor) descriptor.writable = true;\n\t      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n\t    }\n\t  }\n\t\n\t  return function (Constructor, protoProps, staticProps) {\n\t    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n\t    if (staticProps) defineProperties(Constructor, staticProps);\n\t    return Constructor;\n\t  };\n\t}();\n\n/***/ },\n/* 24 */\n/***/ function(module, exports) {\n\n\t// 7.2.1 RequireObjectCoercible(argument)\n\tmodule.exports = function(it){\n\t  if(it == undefined)throw TypeError(\"Can't call method on  \" + it);\n\t  return it;\n\t};\n\n/***/ },\n/* 25 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(bitmap, value){\n\t  return {\n\t    enumerable  : !(bitmap & 1),\n\t    configurable: !(bitmap & 2),\n\t    writable    : !(bitmap & 4),\n\t    value       : value\n\t  };\n\t};\n\n/***/ },\n/* 26 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar shared = __webpack_require__(44)('keys')\n\t  , uid    = __webpack_require__(46);\n\tmodule.exports = function(key){\n\t  return shared[key] || (shared[key] = uid(key));\n\t};\n\n/***/ },\n/* 27 */\n/***/ function(module, exports) {\n\n\t// 7.1.4 ToInteger\n\tvar ceil  = Math.ceil\n\t  , floor = Math.floor;\n\tmodule.exports = function(it){\n\t  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n\t};\n\n/***/ },\n/* 28 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar $at  = __webpack_require__(99)(true);\n\t\n\t// 21.1.3.27 String.prototype[@@iterator]()\n\t__webpack_require__(41)(String, 'String', function(iterated){\n\t  this._t = String(iterated); // target\n\t  this._i = 0;                // next index\n\t// 21.1.5.2.1 %StringIteratorPrototype%.next()\n\t}, function(){\n\t  var O     = this._t\n\t    , index = this._i\n\t    , point;\n\t  if(index >= O.length)return {value: undefined, done: true};\n\t  point = $at(O, index);\n\t  this._i += point.length;\n\t  return {value: point, done: false};\n\t});\n\n/***/ },\n/* 29 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\t// See: http://robertpenner.com/easing/\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\tvar easeInOutQuad = function easeInOutQuad(t, b, c, d) {\n\t  t /= d / 2;\n\t  if (t < 1) return c / 2 * t * t + b;\n\t  t--;\n\t  return -c / 2 * (t * (t - 2) - 1) + b;\n\t};\n\t\n\tvar inOutQuintic = function inOutQuintic(t, b, c, d) {\n\t  var ts = (t /= d) * t;\n\t  var tc = ts * t;\n\t  return b + c * (6 * tc * ts + -15 * ts * ts + 10 * tc);\n\t};\n\t\n\texports.easeInOutQuad = easeInOutQuad;\n\texports.inOutQuintic = inOutQuintic;\n\n/***/ },\n/* 30 */\n/***/ function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, \"__esModule\", {\n\t  value: true\n\t});\n\tvar MIN_INERVAL = 1000 / 60;\n\t\n\t/**\n\t * Trigger a callback at a given interval\n\t * @param interval defaults to 1000/60 ms\n\t * @return {function()} reference to start, stop, immediate and started\n\t */\n\t\n\tvar intervalFunction = function intervalFunction() {\n\t  var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : MIN_INERVAL;\n\t\n\t\n\t  var lapse = interval < MIN_INERVAL ? MIN_INERVAL : interval;\n\t  var cb = undefined;\n\t  var next = null;\n\t  var timeElapsed = 0;\n\t\n\t  var execute = function execute() {\n\t    var f = cb(timeElapsed);\n\t    if (!f) {\n\t      cancel();\n\t    }\n\t  };\n\t\n\t  var cancel = function cancel() {\n\t    if (next) {\n\t      window.cancelAnimationFrame(next);\n\t    }\n\t    next = null;\n\t    timeElapsed = 0;\n\t  };\n\t\n\t  var _start = function _start() {\n\t    var timeStart = Date.now();\n\t\n\t    var loop = function loop(now) {\n\t      if (next) {\n\t        next = window.requestAnimationFrame(function () {\n\t          return loop(Date.now());\n\t        });\n\t\n\t        timeElapsed += now - timeStart;\n\t\n\t        if (timeElapsed >= lapse) {\n\t          execute();\n\t          if ((timeElapsed -= lapse) > lapse) {\n\t            // time elapsed - interval_ > interval_ , indicates inactivity\n\t            // Could be due to browser minimized, tab changed, screen saver started, computer sleep, and so on\n\t            timeElapsed = 0;\n\t          }\n\t        }\n\t        timeStart = now;\n\t      }\n\t    };\n\t\n\t    next = 1; // a truthy value for first loop\n\t    loop(timeStart);\n\t  };\n\t\n\t  return {\n\t    get started() {\n\t      return next != null;\n\t    },\n\t    get interval() {\n\t      return lapse;\n\t    },\n\t    set interval(value) {\n\t      lapse = value < MIN_INERVAL ? MIN_INERVAL : value;\n\t    },\n\t    start: function start(callback) {\n\t      if (typeof callback !== 'function') {\n\t        throw new TypeError('callback parameter must be a function');\n\t      }\n\t      cb = callback;\n\t      _start();\n\t    },\n\t    immediate: function immediate() {\n\t      if (!cb) {\n\t        throw new ReferenceError('callback parameter is not defined. Call start before immediate.');\n\t      }\n\t      execute();\n\t    },\n\t\n\t    stop: function stop() {\n\t      return cancel();\n\t    }\n\t  };\n\t};\n\t\n\texports.default = intervalFunction;\n\tmodule.exports = exports['default'];\n\n/***/ },\n/* 31 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(69), __esModule: true };\n\n/***/ },\n/* 32 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(71), __esModule: true };\n\n/***/ },\n/* 33 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(73), __esModule: true };\n\n/***/ },\n/* 34 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(it){\n\t  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n\t  return it;\n\t};\n\n/***/ },\n/* 35 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// getting tag from 19.1.3.6 Object.prototype.toString()\n\tvar cof = __webpack_require__(36)\n\t  , TAG = __webpack_require__(4)('toStringTag')\n\t  // ES3 wrong here\n\t  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\t\n\t// fallback for IE11 Script Access Denied error\n\tvar tryGet = function(it, key){\n\t  try {\n\t    return it[key];\n\t  } catch(e){ /* empty */ }\n\t};\n\t\n\tmodule.exports = function(it){\n\t  var O, T, B;\n\t  return it === undefined ? 'Undefined' : it === null ? 'Null'\n\t    // @@toStringTag case\n\t    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n\t    // builtinTag case\n\t    : ARG ? cof(O)\n\t    // ES3 arguments fallback\n\t    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n\t};\n\n/***/ },\n/* 36 */\n/***/ function(module, exports) {\n\n\tvar toString = {}.toString;\n\t\n\tmodule.exports = function(it){\n\t  return toString.call(it).slice(8, -1);\n\t};\n\n/***/ },\n/* 37 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// optional / simple context binding\n\tvar aFunction = __webpack_require__(34);\n\tmodule.exports = function(fn, that, length){\n\t  aFunction(fn);\n\t  if(that === undefined)return fn;\n\t  switch(length){\n\t    case 1: return function(a){\n\t      return fn.call(that, a);\n\t    };\n\t    case 2: return function(a, b){\n\t      return fn.call(that, a, b);\n\t    };\n\t    case 3: return function(a, b, c){\n\t      return fn.call(that, a, b, c);\n\t    };\n\t  }\n\t  return function(/* ...args */){\n\t    return fn.apply(that, arguments);\n\t  };\n\t};\n\n/***/ },\n/* 38 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar isObject = __webpack_require__(17)\n\t  , document = __webpack_require__(5).document\n\t  // in old IE typeof document.createElement is 'object'\n\t  , is = isObject(document) && isObject(document.createElement);\n\tmodule.exports = function(it){\n\t  return is ? document.createElement(it) : {};\n\t};\n\n/***/ },\n/* 39 */\n/***/ function(module, exports) {\n\n\t// IE 8- don't enum bug keys\n\tmodule.exports = (\n\t  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n\t).split(',');\n\n/***/ },\n/* 40 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\tvar cof = __webpack_require__(36);\n\tmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n\t  return cof(it) == 'String' ? it.split('') : Object(it);\n\t};\n\n/***/ },\n/* 41 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar LIBRARY        = __webpack_require__(89)\n\t  , $export        = __webpack_require__(3)\n\t  , redefine       = __webpack_require__(98)\n\t  , hide           = __webpack_require__(11)\n\t  , has            = __webpack_require__(16)\n\t  , Iterators      = __webpack_require__(7)\n\t  , $iterCreate    = __webpack_require__(86)\n\t  , setToStringTag = __webpack_require__(43)\n\t  , getPrototypeOf = __webpack_require__(94)\n\t  , ITERATOR       = __webpack_require__(4)('iterator')\n\t  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n\t  , FF_ITERATOR    = '@@iterator'\n\t  , KEYS           = 'keys'\n\t  , VALUES         = 'values';\n\t\n\tvar returnThis = function(){ return this; };\n\t\n\tmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n\t  $iterCreate(Constructor, NAME, next);\n\t  var getMethod = function(kind){\n\t    if(!BUGGY && kind in proto)return proto[kind];\n\t    switch(kind){\n\t      case KEYS: return function keys(){ return new Constructor(this, kind); };\n\t      case VALUES: return function values(){ return new Constructor(this, kind); };\n\t    } return function entries(){ return new Constructor(this, kind); };\n\t  };\n\t  var TAG        = NAME + ' Iterator'\n\t    , DEF_VALUES = DEFAULT == VALUES\n\t    , VALUES_BUG = false\n\t    , proto      = Base.prototype\n\t    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n\t    , $default   = $native || getMethod(DEFAULT)\n\t    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n\t    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n\t    , methods, key, IteratorPrototype;\n\t  // Fix native\n\t  if($anyNative){\n\t    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n\t    if(IteratorPrototype !== Object.prototype){\n\t      // Set @@toStringTag to native iterators\n\t      setToStringTag(IteratorPrototype, TAG, true);\n\t      // fix for some old engines\n\t      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n\t    }\n\t  }\n\t  // fix Array#{values, @@iterator}.name in V8 / FF\n\t  if(DEF_VALUES && $native && $native.name !== VALUES){\n\t    VALUES_BUG = true;\n\t    $default = function values(){ return $native.call(this); };\n\t  }\n\t  // Define iterator\n\t  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n\t    hide(proto, ITERATOR, $default);\n\t  }\n\t  // Plug for library\n\t  Iterators[NAME] = $default;\n\t  Iterators[TAG]  = returnThis;\n\t  if(DEFAULT){\n\t    methods = {\n\t      values:  DEF_VALUES ? $default : getMethod(VALUES),\n\t      keys:    IS_SET     ? $default : getMethod(KEYS),\n\t      entries: $entries\n\t    };\n\t    if(FORCED)for(key in methods){\n\t      if(!(key in proto))redefine(proto, key, methods[key]);\n\t    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n\t  }\n\t  return methods;\n\t};\n\n/***/ },\n/* 42 */\n/***/ function(module, exports) {\n\n\texports.f = {}.propertyIsEnumerable;\n\n/***/ },\n/* 43 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar def = __webpack_require__(12).f\n\t  , has = __webpack_require__(16)\n\t  , TAG = __webpack_require__(4)('toStringTag');\n\t\n\tmodule.exports = function(it, tag, stat){\n\t  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n\t};\n\n/***/ },\n/* 44 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar global = __webpack_require__(5)\n\t  , SHARED = '__core-js_shared__'\n\t  , store  = global[SHARED] || (global[SHARED] = {});\n\tmodule.exports = function(key){\n\t  return store[key] || (store[key] = {});\n\t};\n\n/***/ },\n/* 45 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.15 ToLength\n\tvar toInteger = __webpack_require__(27)\n\t  , min       = Math.min;\n\tmodule.exports = function(it){\n\t  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n\t};\n\n/***/ },\n/* 46 */\n/***/ function(module, exports) {\n\n\tvar id = 0\n\t  , px = Math.random();\n\tmodule.exports = function(key){\n\t  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n\t};\n\n/***/ },\n/* 47 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar classof   = __webpack_require__(35)\n\t  , ITERATOR  = __webpack_require__(4)('iterator')\n\t  , Iterators = __webpack_require__(7);\n\tmodule.exports = __webpack_require__(1).getIteratorMethod = function(it){\n\t  if(it != undefined)return it[ITERATOR]\n\t    || it['@@iterator']\n\t    || Iterators[classof(it)];\n\t};\n\n/***/ },\n/* 48 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(105);\n\tvar global        = __webpack_require__(5)\n\t  , hide          = __webpack_require__(11)\n\t  , Iterators     = __webpack_require__(7)\n\t  , TO_STRING_TAG = __webpack_require__(4)('toStringTag');\n\t\n\tfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n\t  var NAME       = collections[i]\n\t    , Collection = global[NAME]\n\t    , proto      = Collection && Collection.prototype;\n\t  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n\t  Iterators[NAME] = Iterators.Array;\n\t}\n\n/***/ },\n/* 49 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _toConsumableArray2 = __webpack_require__(8);\n\t\n\tvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  var ACCORDION = 'mdlext-accordion';\n\t  var ACCORDION_VERTICAL = 'mdlext-accordion--vertical';\n\t  var ACCORDION_HORIZONTAL = 'mdlext-accordion--horizontal';\n\t  var PANEL = 'mdlext-accordion__panel';\n\t  var PANEL_ROLE = 'presentation';\n\t  var TAB = 'mdlext-accordion__tab';\n\t  var TAB_CAPTION = 'mdlext-accordion__tab__caption';\n\t  var TAB_ROLE = 'tab';\n\t  var TABPANEL = 'mdlext-accordion__tabpanel';\n\t  var TABPANEL_ROLE = 'tabpanel';\n\t  var RIPPLE_EFFECT = 'mdlext-js-ripple-effect';\n\t  var RIPPLE = 'mdlext-accordion__tab--ripple';\n\t  var ANIMATION_EFFECT = 'mdlext-js-animation-effect';\n\t  var ANIMATION = 'mdlext-accordion__tabpanel--animation';\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtAccordion = function MaterialExtAccordion(element) {\n\t\n\t    // Stores the Accordion HTML element.\n\t    this.element_ = element;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtAccordion'] = MaterialExtAccordion;\n\t\n\t  // Helpers\n\t  var accordionPanelElements = function accordionPanelElements(element) {\n\t    if (!element) {\n\t      return {\n\t        panel: null,\n\t        tab: null,\n\t        tabpanel: null\n\t      };\n\t    } else if (element.classList.contains(PANEL)) {\n\t      return {\n\t        panel: element,\n\t        tab: element.querySelector('.' + TAB),\n\t        tabpanel: element.querySelector('.' + TABPANEL)\n\t      };\n\t    } else {\n\t      return {\n\t        panel: element.parentNode,\n\t        tab: element.parentNode.querySelector('.' + TAB),\n\t        tabpanel: element.parentNode.querySelector('.' + TABPANEL)\n\t      };\n\t    }\n\t  };\n\t\n\t  // Private methods.\n\t\n\t  /**\n\t   * Handles custom command event, 'open', 'close', 'toggle' or upgrade\n\t   * @param event. A custom event\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.commandHandler_ = function (event) {\n\t    event.preventDefault();\n\t    event.stopPropagation();\n\t\n\t    if (event && event.detail) {\n\t      this.command(event.detail);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Dispatch toggle event\n\t   * @param {string} state\n\t   * @param {Element} tab\n\t   * @param {Element} tabpanel\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.dispatchToggleEvent_ = function (state, tab, tabpanel) {\n\t    var ce = new CustomEvent('toggle', {\n\t      bubbles: true,\n\t      cancelable: true,\n\t      detail: { state: state, tab: tab, tabpanel: tabpanel }\n\t    });\n\t    this.element_.dispatchEvent(ce);\n\t  };\n\t\n\t  /**\n\t   * Open tab\n\t   * @param {Element} panel\n\t   * @param {Element} tab\n\t   * @param {Element} tabpanel\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.openTab_ = function (panel, tab, tabpanel) {\n\t    panel.classList.add(_constants.IS_EXPANDED);\n\t    tab.setAttribute(_constants.ARIA_EXPANDED, 'true');\n\t    tabpanel.removeAttribute('hidden');\n\t    tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'false');\n\t    this.dispatchToggleEvent_('open', tab, tabpanel);\n\t  };\n\t\n\t  /**\n\t   * Close tab\n\t   * @param {Element} panel\n\t   * @param {Element} tab\n\t   * @param {Element} tabpanel\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.closeTab_ = function (panel, tab, tabpanel) {\n\t    panel.classList.remove(_constants.IS_EXPANDED);\n\t    tab.setAttribute(_constants.ARIA_EXPANDED, 'false');\n\t    tabpanel.setAttribute('hidden', '');\n\t    tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');\n\t    this.dispatchToggleEvent_('close', tab, tabpanel);\n\t  };\n\t\n\t  /**\n\t   * Toggle tab\n\t   * @param {Element} panel\n\t   * @param {Element} tab\n\t   * @param {Element} tabpanel\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.toggleTab_ = function (panel, tab, tabpanel) {\n\t    if (!(this.element_.hasAttribute('disabled') || tab.hasAttribute('disabled'))) {\n\t      if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {\n\t        this.closeTab_(panel, tab, tabpanel);\n\t      } else {\n\t        if (this.element_.getAttribute(_constants.ARIA_MULTISELECTABLE).toLowerCase() !== 'true') {\n\t          this.closeTabs_();\n\t        }\n\t        this.openTab_(panel, tab, tabpanel);\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Open tabs\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.openTabs_ = function () {\n\t    var _this = this;\n\t\n\t    if (this.element_.getAttribute(_constants.ARIA_MULTISELECTABLE).toLowerCase() === 'true') {\n\t      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL))).filter(function (panel) {\n\t        return !panel.classList.contains(_constants.IS_EXPANDED);\n\t      }).forEach(function (closedItem) {\n\t        var tab = closedItem.querySelector('.' + TAB);\n\t        if (!tab.hasAttribute('disabled')) {\n\t          _this.openTab_(closedItem, tab, closedItem.querySelector('.' + TABPANEL));\n\t        }\n\t      });\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Close tabs\n\t   * @private\n\t   */\n\t  MaterialExtAccordion.prototype.closeTabs_ = function () {\n\t    var _this2 = this;\n\t\n\t    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL + '.' + _constants.IS_EXPANDED))).forEach(function (panel) {\n\t      var tab = panel.querySelector('.' + TAB);\n\t      if (!tab.hasAttribute('disabled')) {\n\t        _this2.closeTab_(panel, tab, panel.querySelector('.' + TABPANEL));\n\t      }\n\t    });\n\t  };\n\t\n\t  // Public methods.\n\t\n\t  /**\n\t   * Upgrade an individual accordion tab\n\t   * @public\n\t   * @param {Element} tabElement The HTML element for the accordion panel.\n\t   */\n\t  MaterialExtAccordion.prototype.upgradeTab = function (tabElement) {\n\t    var _this3 = this;\n\t\n\t    var _accordionPanelElemen = accordionPanelElements(tabElement),\n\t        panel = _accordionPanelElemen.panel,\n\t        tab = _accordionPanelElemen.tab,\n\t        tabpanel = _accordionPanelElemen.tabpanel;\n\t\n\t    var disableTab = function disableTab() {\n\t      panel.classList.remove(_constants.IS_EXPANDED);\n\t      tab.setAttribute('tabindex', '-1');\n\t      tab.setAttribute(_constants.ARIA_EXPANDED, 'false');\n\t      tabpanel.setAttribute('hidden', '');\n\t      tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');\n\t    };\n\t\n\t    var enableTab = function enableTab() {\n\t      if (!tab.hasAttribute(_constants.ARIA_EXPANDED)) {\n\t        tab.setAttribute(_constants.ARIA_EXPANDED, 'false');\n\t      }\n\t\n\t      tab.setAttribute('tabindex', '0');\n\t\n\t      if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {\n\t        panel.classList.add(_constants.IS_EXPANDED);\n\t        tabpanel.removeAttribute('hidden');\n\t        tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'false');\n\t      } else {\n\t        panel.classList.remove(_constants.IS_EXPANDED);\n\t        tabpanel.setAttribute('hidden', '');\n\t        tabpanel.setAttribute(_constants.ARIA_HIDDEN, 'true');\n\t      }\n\t    };\n\t\n\t    // In horizontal layout, caption must have a max-width defined to prevent pushing elements to the right of the caption out of view.\n\t    // In JsDom, offsetWidth and offsetHeight properties do not work, so this function is not testable.\n\t    /* istanbul ignore next */\n\t    var calcMaxTabCaptionWidth = function calcMaxTabCaptionWidth() {\n\t\n\t      var tabCaption = tab.querySelector('.' + TAB_CAPTION);\n\t      if (tabCaption !== null) {\n\t        var w = [].concat((0, _toConsumableArray3.default)(tab.children)).filter(function (el) {\n\t          return el.classList && !el.classList.contains(TAB_CAPTION);\n\t        }).reduce(function (v, el) {\n\t          return v + el.offsetWidth;\n\t        }, 0);\n\t\n\t        var maxWidth = tab.clientHeight - w;\n\t        if (maxWidth > 0) {\n\t          tabCaption.style['max-width'] = maxWidth + 'px';\n\t        }\n\t      }\n\t    };\n\t\n\t    var selectTab = function selectTab() {\n\t      if (!tab.hasAttribute(_constants.ARIA_SELECTED)) {\n\t        [].concat((0, _toConsumableArray3.default)(_this3.element_.querySelectorAll('.' + TAB + '[aria-selected=\"true\"]'))).forEach(function (selectedTab) {\n\t          return selectedTab.removeAttribute(_constants.ARIA_SELECTED);\n\t        });\n\t        tab.setAttribute(_constants.ARIA_SELECTED, 'true');\n\t      }\n\t    };\n\t\n\t    var tabClickHandler = function tabClickHandler() {\n\t      _this3.toggleTab_(panel, tab, tabpanel);\n\t      selectTab();\n\t    };\n\t\n\t    var tabFocusHandler = function tabFocusHandler() {\n\t      selectTab();\n\t    };\n\t\n\t    var tabpanelClickHandler = function tabpanelClickHandler() {\n\t      selectTab();\n\t    };\n\t\n\t    var tabpanelFocusHandler = function tabpanelFocusHandler() {\n\t      selectTab();\n\t    };\n\t\n\t    var tabKeydownHandler = function tabKeydownHandler(e) {\n\t\n\t      if (_this3.element_.hasAttribute('disabled')) {\n\t        return;\n\t      }\n\t\n\t      if (e.keyCode === _constants.VK_END || e.keyCode === _constants.VK_HOME || e.keyCode === _constants.VK_ARROW_UP || e.keyCode === _constants.VK_ARROW_LEFT || e.keyCode === _constants.VK_ARROW_DOWN || e.keyCode === _constants.VK_ARROW_RIGHT) {\n\t\n\t        var nextTab = null;\n\t        var keyCode = e.keyCode;\n\t\n\t        if (keyCode === _constants.VK_HOME) {\n\t          nextTab = _this3.element_.querySelector('.' + PANEL + ':first-child > .' + TAB);\n\t          if (nextTab && nextTab.hasAttribute('disabled')) {\n\t            nextTab = null;\n\t            keyCode = _constants.VK_ARROW_DOWN;\n\t          }\n\t        } else if (keyCode === _constants.VK_END) {\n\t          nextTab = _this3.element_.querySelector('.' + PANEL + ':last-child > .' + TAB);\n\t          if (nextTab && nextTab.hasAttribute('disabled')) {\n\t            nextTab = null;\n\t            keyCode = _constants.VK_ARROW_UP;\n\t          }\n\t        }\n\t\n\t        if (!nextTab) {\n\t          var nextPanel = panel;\n\t\n\t          do {\n\t            if (keyCode === _constants.VK_ARROW_UP || keyCode === _constants.VK_ARROW_LEFT) {\n\t              nextPanel = nextPanel.previousElementSibling;\n\t              if (!nextPanel) {\n\t                nextPanel = _this3.element_.querySelector('.' + PANEL + ':last-child');\n\t              }\n\t              if (nextPanel) {\n\t                nextTab = nextPanel.querySelector('.' + PANEL + ' > .' + TAB);\n\t              }\n\t            } else if (keyCode === _constants.VK_ARROW_DOWN || keyCode === _constants.VK_ARROW_RIGHT) {\n\t              nextPanel = nextPanel.nextElementSibling;\n\t              if (!nextPanel) {\n\t                nextPanel = _this3.element_.querySelector('.' + PANEL + ':first-child');\n\t              }\n\t              if (nextPanel) {\n\t                nextTab = nextPanel.querySelector('.' + PANEL + ' > .' + TAB);\n\t              }\n\t            }\n\t\n\t            if (nextTab && nextTab.hasAttribute('disabled')) {\n\t              nextTab = null;\n\t            } else {\n\t              break;\n\t            }\n\t          } while (nextPanel !== panel);\n\t        }\n\t\n\t        if (nextTab) {\n\t          e.preventDefault();\n\t          e.stopPropagation();\n\t          nextTab.focus();\n\t\n\t          // Workaround for JSDom testing:\n\t          // In JsDom 'element.focus()' does not trigger any focus event\n\t          if (!nextTab.hasAttribute(_constants.ARIA_SELECTED)) {\n\t\n\t            [].concat((0, _toConsumableArray3.default)(_this3.element_.querySelectorAll('.' + TAB + '[aria-selected=\"true\"]'))).forEach(function (selectedTab) {\n\t              return selectedTab.removeAttribute(_constants.ARIA_SELECTED);\n\t            });\n\t\n\t            nextTab.setAttribute(_constants.ARIA_SELECTED, 'true');\n\t          }\n\t        }\n\t      } else if (e.keyCode === _constants.VK_ENTER || e.keyCode === _constants.VK_SPACE) {\n\t        e.preventDefault();\n\t        e.stopPropagation();\n\t        _this3.toggleTab_(panel, tab, tabpanel);\n\t      }\n\t    };\n\t\n\t    if (tab === null) {\n\t      throw new Error('There must be a tab element for each accordion panel.');\n\t    }\n\t\n\t    if (tabpanel === null) {\n\t      throw new Error('There must be a tabpanel element for each accordion panel.');\n\t    }\n\t\n\t    panel.setAttribute('role', PANEL_ROLE);\n\t    tab.setAttribute('role', TAB_ROLE);\n\t    tabpanel.setAttribute('role', TABPANEL_ROLE);\n\t\n\t    if (tab.hasAttribute('disabled')) {\n\t      disableTab();\n\t    } else {\n\t      enableTab();\n\t    }\n\t\n\t    if (this.element_.classList.contains(ACCORDION_HORIZONTAL)) {\n\t      calcMaxTabCaptionWidth();\n\t    }\n\t\n\t    if (this.element_.classList.contains(RIPPLE_EFFECT)) {\n\t      tab.classList.add(RIPPLE);\n\t    }\n\t\n\t    if (this.element_.classList.contains(ANIMATION_EFFECT)) {\n\t      tabpanel.classList.add(ANIMATION);\n\t    }\n\t\n\t    // Remove listeners, just in case ...\n\t    tab.removeEventListener('click', tabClickHandler);\n\t    tab.removeEventListener('focus', tabFocusHandler);\n\t    tab.removeEventListener('keydown', tabKeydownHandler);\n\t    tabpanel.removeEventListener('click', tabpanelClickHandler);\n\t    tabpanel.removeEventListener('focus', tabpanelFocusHandler);\n\t\n\t    tab.addEventListener('click', tabClickHandler);\n\t    tab.addEventListener('focus', tabFocusHandler);\n\t    tab.addEventListener('keydown', tabKeydownHandler);\n\t    tabpanel.addEventListener('click', tabpanelClickHandler, true);\n\t    tabpanel.addEventListener('focus', tabpanelFocusHandler, true);\n\t  };\n\t  MaterialExtAccordion.prototype['upgradeTab'] = MaterialExtAccordion.prototype.upgradeTab;\n\t\n\t  /**\n\t   * Execute command\n\t   * @param detail\n\t   */\n\t  MaterialExtAccordion.prototype.command = function (detail) {\n\t    var _this4 = this;\n\t\n\t    var openTab = function openTab(tabElement) {\n\t\n\t      if (tabElement === undefined) {\n\t        _this4.openTabs_();\n\t      } else if (tabElement !== null) {\n\t        var _accordionPanelElemen2 = accordionPanelElements(tabElement),\n\t            panel = _accordionPanelElemen2.panel,\n\t            tab = _accordionPanelElemen2.tab,\n\t            tabpanel = _accordionPanelElemen2.tabpanel;\n\t\n\t        if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() !== 'true') {\n\t          _this4.toggleTab_(panel, tab, tabpanel);\n\t        }\n\t      }\n\t    };\n\t\n\t    var closeTab = function closeTab(tabElement) {\n\t      if (tabElement === undefined) {\n\t        _this4.closeTabs_();\n\t      } else if (tabElement !== null) {\n\t        var _accordionPanelElemen3 = accordionPanelElements(tabElement),\n\t            panel = _accordionPanelElemen3.panel,\n\t            tab = _accordionPanelElemen3.tab,\n\t            tabpanel = _accordionPanelElemen3.tabpanel;\n\t\n\t        if (tab.getAttribute(_constants.ARIA_EXPANDED).toLowerCase() === 'true') {\n\t          _this4.toggleTab_(panel, tab, tabpanel);\n\t        }\n\t      }\n\t    };\n\t\n\t    var toggleTab = function toggleTab(tabElement) {\n\t      if (tabElement) {\n\t        var _accordionPanelElemen4 = accordionPanelElements(tabElement),\n\t            panel = _accordionPanelElemen4.panel,\n\t            tab = _accordionPanelElemen4.tab,\n\t            tabpanel = _accordionPanelElemen4.tabpanel;\n\t\n\t        _this4.toggleTab_(panel, tab, tabpanel);\n\t      }\n\t    };\n\t\n\t    if (detail && detail.action) {\n\t      var action = detail.action,\n\t          target = detail.target;\n\t\n\t\n\t      switch (action.toLowerCase()) {\n\t        case 'open':\n\t          openTab(target);\n\t          break;\n\t        case 'close':\n\t          closeTab(target);\n\t          break;\n\t        case 'toggle':\n\t          toggleTab(target);\n\t          break;\n\t        case 'upgrade':\n\t          if (target) {\n\t            this.upgradeTab(target);\n\t          }\n\t          break;\n\t        default:\n\t          throw new Error('Unknown action \"' + action + '\". Action must be one of \"open\", \"close\", \"toggle\" or \"upgrade\"');\n\t      }\n\t    }\n\t  };\n\t  MaterialExtAccordion.prototype['command'] = MaterialExtAccordion.prototype.command;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtAccordion.prototype.init = function () {\n\t    var _this5 = this;\n\t\n\t    if (this.element_) {\n\t      // Do the init required for this component to work\n\t      if (!(this.element_.classList.contains(ACCORDION_HORIZONTAL) || this.element_.classList.contains(ACCORDION_VERTICAL))) {\n\t        throw new Error('Accordion must have one of the classes \"' + ACCORDION_HORIZONTAL + '\" or \"' + ACCORDION_VERTICAL + '\"');\n\t      }\n\t\n\t      this.element_.setAttribute('role', 'tablist');\n\t\n\t      if (!this.element_.hasAttribute(_constants.ARIA_MULTISELECTABLE)) {\n\t        this.element_.setAttribute(_constants.ARIA_MULTISELECTABLE, 'false');\n\t      }\n\t\n\t      this.element_.removeEventListener('command', this.commandHandler_);\n\t      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\t\n\t      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + ACCORDION + ' > .' + PANEL))).forEach(function (panel) {\n\t        return _this5.upgradeTab(panel);\n\t      });\n\t\n\t      // Set upgraded flag\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t    }\n\t  };\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   *\n\t   * Nothing to downgrade\n\t   *\n\t   MaterialExtAccordion.prototype.mdlDowngrade_ = function() {\n\t     'use strict';\n\t     console.log('***** MaterialExtAccordion.mdlDowngrade');\n\t   };\n\t   */\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtAccordion,\n\t    classAsString: 'MaterialExtAccordion',\n\t    cssClass: 'mdlext-js-accordion',\n\t    widget: true\n\t  });\n\t})(); /**\n\t       * @license\n\t       * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t       *\n\t       * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t       * you may not use this file except in compliance with the License.\n\t       * You may obtain a copy of the License at\n\t       *\n\t       *      http://www.apache.org/licenses/LICENSE-2.0\n\t       *\n\t       * Unless required by applicable law or agreed to in writing, software\n\t       * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t       * See the License for the specific language governing permissions and\n\t       * limitations under the License.\n\t       *\n\t       * This code is built with Google Material Design Lite,\n\t       * which is Licensed under the Apache License, Version 2.0\n\t       */\n\t\n\t/**\n\t * A WAI-ARIA friendly accordion component.\n\t * An accordion is a collection of expandable panels associated with a common outer container. Panels consist\n\t * of a header and an associated content region or tabpanel. The primary use of an Accordion is to present multiple sections\n\t * of content on a single page without scrolling, where all of the sections are peers in the application or object hierarchy.\n\t * The general look is similar to a tree where each root tree node is an expandable accordion header. The user navigates\n\t * and makes the contents of each panel visible (or not) by interacting with the Accordion Header\n\t */\n\n/***/ },\n/* 50 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _isInteger = __webpack_require__(32);\n\t\n\tvar _isInteger2 = _interopRequireDefault(_isInteger);\n\t\n\tvar _toConsumableArray2 = __webpack_require__(8);\n\t\n\tvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\t\n\tvar _assign = __webpack_require__(33);\n\t\n\tvar _assign2 = _interopRequireDefault(_assign);\n\t\n\tvar _intervalFunction = __webpack_require__(30);\n\t\n\tvar _intervalFunction2 = _interopRequireDefault(_intervalFunction);\n\t\n\tvar _easing = __webpack_require__(29);\n\t\n\tvar _jsonUtils = __webpack_require__(14);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * @license\n\t * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t *      http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t *\n\t * This code is built with Google Material Design Lite,\n\t * which is Licensed under the Apache License, Version 2.0\n\t */\n\t\n\t/**\n\t * Image carousel\n\t */\n\t\n\tvar MDL_RIPPLE_CONTAINER = 'mdlext-carousel__slide__ripple-container';\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  //const CAROUSEL = 'mdlext-carousel';\n\t\n\t  var SLIDE = 'mdlext-carousel__slide';\n\t  var ROLE = 'list';\n\t  var SLIDE_ROLE = 'listitem';\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtCarousel = function MaterialExtCarousel(element) {\n\t    // Stores the element.\n\t    this.element_ = element;\n\t\n\t    // Default config\n\t    this.config_ = {\n\t      interactive: true,\n\t      autostart: false,\n\t      type: 'slide',\n\t      interval: 1000,\n\t      animationLoop: (0, _intervalFunction2.default)(1000)\n\t    };\n\t\n\t    this.scrollAnimation_ = (0, _intervalFunction2.default)(33);\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t\n\t  window['MaterialExtCarousel'] = MaterialExtCarousel;\n\t\n\t  /**\n\t   * Start slideshow animation\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.startSlideShow_ = function () {\n\t    var _this = this;\n\t\n\t    var nextSlide = function nextSlide() {\n\t      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected]');\n\t      if (slide) {\n\t        slide.removeAttribute('aria-selected');\n\t        slide = slide.nextElementSibling;\n\t      }\n\t      if (!slide) {\n\t        slide = _this.element_.querySelector('.' + SLIDE + ':first-child');\n\t        _this.animateScroll_(0);\n\t      }\n\t      if (slide) {\n\t        _this.moveSlideIntoViewport_(slide);\n\t        slide.setAttribute('aria-selected', '');\n\t        _this.emitSelectEvent_('next', null, slide);\n\t        return true;\n\t      }\n\t      return false;\n\t    };\n\t\n\t    var nextScroll = function nextScroll(direction) {\n\t      var nextDirection = direction;\n\t\n\t      if ('next' === direction && _this.element_.scrollLeft === _this.element_.scrollWidth - _this.element_.clientWidth) {\n\t        nextDirection = 'prev';\n\t      } else if (_this.element_.scrollLeft === 0) {\n\t        nextDirection = 'next';\n\t      }\n\t      var x = 'next' === nextDirection ? Math.min(_this.element_.scrollLeft + _this.element_.clientWidth, _this.element_.scrollWidth - _this.element_.clientWidth) : Math.max(_this.element_.scrollLeft - _this.element_.clientWidth, 0);\n\t\n\t      _this.animateScroll_(x, 1000);\n\t      return nextDirection;\n\t    };\n\t\n\t    if (!this.config_.animationLoop.started) {\n\t      (function () {\n\t        _this.config_.animationLoop.interval = _this.config_.interval;\n\t        var direction = 'next';\n\t\n\t        if ('scroll' === _this.config_.type) {\n\t          _this.config_.animationLoop.start(function () {\n\t            direction = nextScroll(direction);\n\t            return true; // It runs until cancelSlideShow_ is triggered\n\t          });\n\t        } else {\n\t          nextSlide();\n\t          _this.config_.animationLoop.start(function () {\n\t            return nextSlide(); // It runs until cancelSlideShow_ is triggered\n\t          });\n\t        }\n\t      })();\n\t    }\n\t\n\t    // TODO: Pause animation when carousel is not in browser viewport or user changes tab\n\t  };\n\t\n\t  /**\n\t   * Cancel slideshow if running. Emmits a 'pause' event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.cancelSlideShow_ = function () {\n\t    if (this.config_.animationLoop.started) {\n\t      this.config_.animationLoop.stop();\n\t      this.emitSelectEvent_('pause', _constants.VK_ESC, this.element_.querySelector('.' + SLIDE + '[aria-selected]'));\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Animate scroll\n\t   * @param newPosition\n\t   * @param newDuration\n\t   * @param completedCallback\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.animateScroll_ = function (newPosition, newDuration, completedCallback) {\n\t    var _this2 = this;\n\t\n\t    var start = this.element_.scrollLeft;\n\t    var distance = newPosition - start;\n\t\n\t    if (distance !== 0) {\n\t      (function () {\n\t        var duration = Math.max(Math.min(Math.abs(distance), newDuration || 400), 100); // duration is between 100 and newDuration||400ms||distance\n\t        var t = 0;\n\t        _this2.scrollAnimation_.stop();\n\t        _this2.scrollAnimation_.start(function (timeElapsed) {\n\t          t += timeElapsed;\n\t          if (t < duration) {\n\t            _this2.element_.scrollLeft = (0, _easing.inOutQuintic)(t, start, distance, duration);\n\t            return true;\n\t          } else {\n\t            _this2.element_.scrollLeft = newPosition;\n\t            if (completedCallback) {\n\t              completedCallback();\n\t            }\n\t            return false;\n\t          }\n\t        });\n\t      })();\n\t    } else {\n\t      if (completedCallback) {\n\t        completedCallback();\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Execute commend\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.command_ = function (event) {\n\t    var _this3 = this;\n\t\n\t    var x = 0;\n\t    var slide = null;\n\t    var a = event.detail.action.toLowerCase();\n\t\n\t    // Cancel slideshow if running\n\t    this.cancelSlideShow_();\n\t\n\t    switch (a) {\n\t      case 'first':\n\t        slide = this.element_.querySelector('.' + SLIDE + ':first-child');\n\t        break;\n\t\n\t      case 'last':\n\t        x = this.element_.scrollWidth - this.element_.clientWidth;\n\t        slide = this.element_.querySelector('.' + SLIDE + ':last-child');\n\t        break;\n\t\n\t      case 'scroll-prev':\n\t        x = Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);\n\t        break;\n\t\n\t      case 'scroll-next':\n\t        x = Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth);\n\t        break;\n\t\n\t      case 'next':\n\t      case 'prev':\n\t        slide = this.element_.querySelector('.' + SLIDE + '[aria-selected]');\n\t        if (slide) {\n\t          slide = a === 'next' ? slide.nextElementSibling : slide.previousElementSibling;\n\t          this.setAriaSelected_(slide);\n\t          this.emitSelectEvent_(a, null, slide);\n\t        }\n\t        return;\n\t\n\t      case 'play':\n\t        (0, _assign2.default)(this.config_, event.detail);\n\t        this.startSlideShow_();\n\t        return;\n\t\n\t      case 'pause':\n\t        return;\n\t\n\t      default:\n\t        return;\n\t    }\n\t\n\t    this.animateScroll_(x, undefined, function () {\n\t      if ('scroll-next' === a || 'scroll-prev' === a) {\n\t        var slides = _this3.getSlidesInViewport_();\n\t        if (slides.length > 0) {\n\t          slide = 'scroll-next' === a ? slides[0] : slides[slides.length - 1];\n\t        }\n\t      }\n\t      _this3.setAriaSelected_(slide);\n\t      _this3.emitSelectEvent_(a, null, slide);\n\t    });\n\t  };\n\t\n\t  /**\n\t   * Handles custom command event, 'scroll-prev', 'scroll-next', 'first', 'last', next, prev, play, pause\n\t   * @param event. A custom event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.commandHandler_ = function (event) {\n\t    event.preventDefault();\n\t    event.stopPropagation();\n\t    if (event.detail && event.detail.action) {\n\t      this.command_(event);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Handle keypress\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.keyDownHandler_ = function (event) {\n\t\n\t    if (event && event.target && event.target !== this.element_) {\n\t\n\t      var action = 'first';\n\t\n\t      if (event.keyCode === _constants.VK_HOME || event.keyCode === _constants.VK_END || event.keyCode === _constants.VK_PAGE_UP || event.keyCode === _constants.VK_PAGE_DOWN) {\n\t\n\t        event.preventDefault();\n\t        if (event.keyCode === _constants.VK_END) {\n\t          action = 'last';\n\t        } else if (event.keyCode === _constants.VK_PAGE_UP) {\n\t          action = 'scroll-prev';\n\t        } else if (event.keyCode === _constants.VK_PAGE_DOWN) {\n\t          action = 'scroll-next';\n\t        }\n\t\n\t        var cmd = new CustomEvent('select', {\n\t          detail: {\n\t            action: action\n\t          }\n\t        });\n\t        this.command_(cmd);\n\t      } else if (event.keyCode === _constants.VK_TAB || event.keyCode === _constants.VK_ENTER || event.keyCode === _constants.VK_SPACE || event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT || event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {\n\t\n\t        var slide = getSlide_(event.target);\n\t\n\t        if (!slide) {\n\t          return;\n\t        }\n\t\n\t        // Cancel slideshow if running\n\t        this.cancelSlideShow_();\n\t\n\t        switch (event.keyCode) {\n\t          case _constants.VK_ARROW_UP:\n\t          case _constants.VK_ARROW_LEFT:\n\t            action = 'prev';\n\t            slide = slide.previousElementSibling;\n\t            break;\n\t\n\t          case _constants.VK_ARROW_DOWN:\n\t          case _constants.VK_ARROW_RIGHT:\n\t            action = 'next';\n\t            slide = slide.nextElementSibling;\n\t            break;\n\t\n\t          case _constants.VK_TAB:\n\t            if (event.shiftKey) {\n\t              action = 'prev';\n\t              slide = slide.previousElementSibling;\n\t            } else {\n\t              action = 'next';\n\t              slide = slide.nextElementSibling;\n\t            }\n\t            break;\n\t\n\t          case _constants.VK_SPACE:\n\t          case _constants.VK_ENTER:\n\t            action = 'select';\n\t            break;\n\t        }\n\t\n\t        if (slide) {\n\t          event.preventDefault();\n\t          setFocus_(slide);\n\t          this.emitSelectEvent_(action, event.keyCode, slide);\n\t        }\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Handle dragging\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.dragHandler_ = function (event) {\n\t    var _this4 = this;\n\t\n\t    event.preventDefault();\n\t\n\t    // Cancel slideshow if running\n\t    this.cancelSlideShow_();\n\t\n\t    var updating = false;\n\t    var rAFDragId = 0;\n\t\n\t    var startX = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);\n\t    var prevX = startX;\n\t    var targetElement = event.target;\n\t\n\t    var update = function update(e) {\n\t      var currentX = e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0);\n\t      var dx = prevX - currentX;\n\t\n\t      if (dx < 0) {\n\t        _this4.element_.scrollLeft = Math.max(_this4.element_.scrollLeft + dx, 0);\n\t      } else if (dx > 0) {\n\t        _this4.element_.scrollLeft = Math.min(_this4.element_.scrollLeft + dx, _this4.element_.scrollWidth - _this4.element_.clientWidth);\n\t      }\n\t\n\t      prevX = currentX;\n\t      updating = false;\n\t    };\n\t\n\t    // drag handler\n\t    var drag = function drag(e) {\n\t      e.preventDefault();\n\t\n\t      if (!updating) {\n\t        rAFDragId = window.requestAnimationFrame(function () {\n\t          return update(e);\n\t        });\n\t        updating = true;\n\t      }\n\t    };\n\t\n\t    // end drag handler\n\t    var endDrag = function endDrag(e) {\n\t      e.preventDefault();\n\t\n\t      _this4.element_.removeEventListener('mousemove', drag);\n\t      _this4.element_.removeEventListener('touchmove', drag);\n\t      window.removeEventListener('mouseup', endDrag);\n\t      window.removeEventListener('touchend', endDrag);\n\t\n\t      // cancel any existing drag rAF, see: http://www.html5rocks.com/en/tutorials/speed/animations/\n\t      window.cancelAnimationFrame(rAFDragId);\n\t\n\t      var slide = getSlide_(targetElement);\n\t      setFocus_(slide);\n\t      _this4.emitSelectEvent_('click', null, slide);\n\t    };\n\t\n\t    this.element_.addEventListener('mousemove', drag);\n\t    this.element_.addEventListener('touchmove', drag);\n\t    window.addEventListener('mouseup', endDrag);\n\t    window.addEventListener('touchend', endDrag);\n\t  };\n\t\n\t  /**\n\t   * Handle click\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.clickHandler_ = function (event) {\n\t    // Click is handled by drag\n\t    event.preventDefault();\n\t  };\n\t\n\t  /**\n\t   * Handle focus\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.focusHandler_ = function (event) {\n\t    var slide = getSlide_(event.target);\n\t    if (slide) {\n\t      // The last focused/selected slide has 'aria-selected', even if focus is lost\n\t      this.setAriaSelected_(slide);\n\t      slide.classList.add(_constants.IS_FOCUSED);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Handle blur\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.blurHandler_ = function (event) {\n\t    var slide = getSlide_(event.target);\n\t    if (slide) {\n\t      slide.classList.remove(_constants.IS_FOCUSED);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Emits a custeom 'select' event\n\t   * @param command\n\t   * @param keyCode\n\t   * @param slide\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.emitSelectEvent_ = function (command, keyCode, slide) {\n\t\n\t    if (slide) {\n\t      this.moveSlideIntoViewport_(slide);\n\t\n\t      var evt = new CustomEvent('select', {\n\t        bubbles: true,\n\t        cancelable: true,\n\t        detail: {\n\t          command: command,\n\t          keyCode: keyCode,\n\t          source: slide\n\t        }\n\t      });\n\t      this.element_.dispatchEvent(evt);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Get the first visible slide in component viewport\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.getSlidesInViewport_ = function () {\n\t    var carouselRect = this.element_.getBoundingClientRect();\n\t\n\t    var slidesInViewport = [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).filter(function (slide) {\n\t      var slideRect = slide.getBoundingClientRect();\n\t      return slideRect.left >= carouselRect.left && slideRect.right <= carouselRect.right;\n\t    });\n\t    return slidesInViewport;\n\t  };\n\t\n\t  /**\n\t   * Move slide into component viewport - if needed\n\t   * @param slide\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.moveSlideIntoViewport_ = function (slide) {\n\t    var carouselRect = this.element_.getBoundingClientRect();\n\t    var slideRect = slide.getBoundingClientRect();\n\t\n\t    if (slideRect.left < carouselRect.left) {\n\t      var x = this.element_.scrollLeft - (carouselRect.left - slideRect.left);\n\t      this.animateScroll_(x);\n\t    } else if (slideRect.right > carouselRect.right) {\n\t      var _x = this.element_.scrollLeft - (carouselRect.right - slideRect.right);\n\t      this.animateScroll_(_x);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Removes 'aria-selected' from all slides in carousel\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.setAriaSelected_ = function (slide) {\n\t    if (slide) {\n\t      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE + '[aria-selected]'))).forEach(function (slide) {\n\t        return slide.removeAttribute('aria-selected');\n\t      });\n\t      slide.setAttribute('aria-selected', '');\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Removes event listeners\n\t   * @private\n\t   */\n\t  MaterialExtCarousel.prototype.removeListeners_ = function () {\n\t    this.element_.removeEventListener('focus', this.focusHandler_);\n\t    this.element_.removeEventListener('blur', this.blurHandler_);\n\t    this.element_.removeEventListener('keydown', this.keyDownHandler_);\n\t    this.element_.removeEventListener('mousedown', this.dragHandler_);\n\t    this.element_.removeEventListener('touchstart', this.dragHandler_);\n\t    this.element_.removeEventListener('click', this.clickHandler_, false);\n\t    this.element_.removeEventListener('command', this.commandHandler_);\n\t    this.element_.removeEventListener('mdl-componentdowngraded', this.mdlDowngrade_);\n\t  };\n\t\n\t  // Helpers\n\t  var getSlide_ = function getSlide_(element) {\n\t    return element.closest('.' + SLIDE);\n\t  };\n\t\n\t  var setFocus_ = function setFocus_(slide) {\n\t    if (slide) {\n\t      slide.focus();\n\t    }\n\t  };\n\t\n\t  var addRipple_ = function addRipple_(slide) {\n\t    if (!slide.querySelector('.' + MDL_RIPPLE_CONTAINER)) {\n\t      var rippleContainer = document.createElement('span');\n\t      rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);\n\t      rippleContainer.classList.add(_constants.MDL_RIPPLE_EFFECT);\n\t      var ripple = document.createElement('span');\n\t      ripple.classList.add(_constants.MDL_RIPPLE);\n\t      rippleContainer.appendChild(ripple);\n\t\n\t      var img = slide.querySelector('img');\n\t      if (img) {\n\t        // rippleContainer blocks image title\n\t        rippleContainer.title = img.title;\n\t      }\n\t      slide.appendChild(rippleContainer);\n\t      componentHandler.upgradeElement(rippleContainer, _constants.MDL_RIPPLE_COMPONENT);\n\t    }\n\t  };\n\t  // End helpers\n\t\n\t\n\t  // Public methods.\n\t\n\t  /**\n\t   * Cancel animation - if running.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtCarousel.prototype.stopAnimation = function () {\n\t    this.config_.animationLoop.stop();\n\t  };\n\t  MaterialExtCarousel.prototype['stopAnimation'] = MaterialExtCarousel.prototype.stopAnimation;\n\t\n\t  /**\n\t   * Upgrade slides\n\t   * Use if more list elements are added later (dynamically)\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtCarousel.prototype.upgradeSlides = function () {\n\t    var _this5 = this;\n\t\n\t    var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);\n\t\n\t    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).forEach(function (slide) {\n\t\n\t      slide.setAttribute('role', SLIDE_ROLE);\n\t\n\t      if (_this5.config_.interactive) {\n\t        if (!slide.getAttribute('tabindex')) {\n\t          slide.setAttribute('tabindex', '0');\n\t        }\n\t        if (hasRippleEffect) {\n\t          addRipple_(slide);\n\t        }\n\t      } else {\n\t        slide.setAttribute('tabindex', '-1');\n\t      }\n\t    });\n\t  };\n\t  MaterialExtCarousel.prototype['upgradeSlides'] = MaterialExtCarousel.prototype.upgradeSlides;\n\t\n\t  /**\n\t   * Get config object\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtCarousel.prototype.getConfig = function () {\n\t    return this.config_;\n\t  };\n\t  MaterialExtCarousel.prototype['getConfig'] = MaterialExtCarousel.prototype.getConfig;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtCarousel.prototype.init = function () {\n\t\n\t    if (this.element_) {\n\t      // Config\n\t      if (this.element_.hasAttribute('data-config')) {\n\t        this.config_ = (0, _jsonUtils.jsonStringToObject)(this.element_.getAttribute('data-config'), this.config_);\n\t      }\n\t\n\t      // Wai-Aria\n\t      this.element_.setAttribute('role', ROLE);\n\t\n\t      // Prefer tabindex -1\n\t      if (!(0, _isInteger2.default)(this.element_.getAttribute('tabindex'))) {\n\t        this.element_.setAttribute('tabindex', -1);\n\t      }\n\t\n\t      // Remove listeners, just in case ...\n\t      this.removeListeners_();\n\t\n\t      if (this.config_.interactive) {\n\t\n\t        // Ripple\n\t        var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);\n\t        if (hasRippleEffect) {\n\t          this.element_.classList.add(_constants.MDL_RIPPLE_EFFECT_IGNORE_EVENTS);\n\t        }\n\t\n\t        // Listen to focus/blur events\n\t        this.element_.addEventListener('focus', this.focusHandler_.bind(this), true);\n\t        this.element_.addEventListener('blur', this.blurHandler_.bind(this), true);\n\t\n\t        // Listen to keyboard events\n\t        this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this), false);\n\t\n\t        // Listen to drag events\n\t        this.element_.addEventListener('mousedown', this.dragHandler_.bind(this), false);\n\t        this.element_.addEventListener('touchstart', this.dragHandler_.bind(this), false);\n\t\n\t        // Listen to click events\n\t        this.element_.addEventListener('click', this.clickHandler_.bind(this), false);\n\t      }\n\t\n\t      // Listen to custom 'command' event\n\t      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\t\n\t      // Listen to 'mdl-componentdowngraded' event\n\t      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n\t\n\t      // Slides collection\n\t      this.upgradeSlides();\n\t\n\t      // Set upgraded flag\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t\n\t      if (this.config_.autostart) {\n\t        // Start slideshow\n\t        this.startSlideShow_();\n\t      }\n\t    }\n\t  };\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   */\n\t  MaterialExtCarousel.prototype.mdlDowngrade_ = function () {\n\t    'use strict';\n\t    //console.log('***** MaterialExtCarousel.mdlDowngrade_');\n\t\n\t    // Stop animation - if any\n\t\n\t    this.stopAnimation();\n\t\n\t    // Remove listeners\n\t    this.removeListeners_();\n\t  };\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtCarousel,\n\t    classAsString: 'MaterialExtCarousel',\n\t    cssClass: 'mdlext-js-carousel',\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 51 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _classCallCheck2 = __webpack_require__(22);\n\t\n\tvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\t\n\tvar _createClass2 = __webpack_require__(23);\n\t\n\tvar _createClass3 = _interopRequireDefault(_createClass2);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tvar _stringUtils = __webpack_require__(15);\n\t\n\tvar _domUtils = __webpack_require__(21);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar JS_COLLAPSIBLE = 'mdlext-js-collapsible'; /**\n\t                                               * @license\n\t                                               * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n\t                                               *\n\t                                               * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t                                               * you may not use this file except in compliance with the License.\n\t                                               * You may obtain a copy of the License at\n\t                                               *\n\t                                               *      http://www.apache.org/licenses/LICENSE-2.0\n\t                                               *\n\t                                               * Unless required by applicable law or agreed to in writing, software\n\t                                               * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t                                               * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t                                               * See the License for the specific language governing permissions and\n\t                                               * limitations under the License.\n\t                                               *\n\t                                               * This code is built with Google Material Design Lite,\n\t                                               * which is Licensed under the Apache License, Version 2.0\n\t                                               */\n\t\n\t/**\n\t * A collapsible is a component to mark expandable and collapsible regions.\n\t * The component use the aria-expanded state to indicate whether regions of\n\t * the content are collapsible, and to expose whether a region is currently\n\t * expanded or collapsed.\n\t * @see https://www.w3.org/WAI/GL/wiki/Using_the_WAI-ARIA_aria-expanded_state_to_mark_expandable_and_collapsible_regions\n\t */\n\t\n\tvar COLLAPSIBLE_CONTROL_CLASS = 'mdlext-collapsible';\n\tvar COLLAPSIBLE_GROUP_CLASS = 'mdlext-collapsible-group';\n\tvar COLLAPSIBLE_REGION_CLASS = 'mdlext-collapsible-region';\n\t\n\t/**\n\t * The collapsible component\n\t */\n\t\n\tvar Collapsible = function () {\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {HTMLElement} element The element that this component is connected to.\n\t   */\n\t  function Collapsible(element) {\n\t    var _this = this;\n\t\n\t    (0, _classCallCheck3.default)(this, Collapsible);\n\t    this.element_ = null;\n\t    this.controlElement_ = null;\n\t\n\t    this.keyDownHandler = function (event) {\n\t      if (event.keyCode === _constants.VK_ENTER || event.keyCode === _constants.VK_SPACE) {\n\t        event.preventDefault();\n\t\n\t        // Trigger click\n\t        (event.target || _this.controlElement).dispatchEvent(new MouseEvent('click', {\n\t          bubbles: true,\n\t          cancelable: true,\n\t          view: window\n\t        }));\n\t      }\n\t    };\n\t\n\t    this.clickHandler = function (event) {\n\t      if (!_this.isDisabled) {\n\t        if (event.target !== _this.controlElement) {\n\t          // Do not toggle if a focusable element inside the control element triggered the event\n\t          var p = (0, _domUtils.getParentElements)(event.target, _this.controlElement);\n\t          p.push(event.target);\n\t          if (p.find(function (el) {\n\t            return (0, _domUtils.isFocusable)(el);\n\t          })) {\n\t            return;\n\t          }\n\t        }\n\t        _this.toggle();\n\t      }\n\t    };\n\t\n\t    this.element_ = element;\n\t    this.init();\n\t  }\n\t\n\t  (0, _createClass3.default)(Collapsible, [{\n\t    key: 'collapse',\n\t    value: function collapse() {\n\t      if (!this.isDisabled && this.isExpanded) {\n\t        if (this.dispatchToggleEvent('collapse')) {\n\t          this.controlElement.setAttribute('aria-expanded', 'false');\n\t          var regions = this.regionElements.slice(0);\n\t          for (var i = regions.length - 1; i >= 0; --i) {\n\t            regions[i].setAttribute('hidden', '');\n\t          }\n\t        }\n\t      }\n\t    }\n\t  }, {\n\t    key: 'expand',\n\t    value: function expand() {\n\t      if (!this.isDisabled && !this.isExpanded) {\n\t        if (this.dispatchToggleEvent('expand')) {\n\t          this.controlElement.setAttribute('aria-expanded', 'true');\n\t          this.regionElements.forEach(function (region) {\n\t            return region.removeAttribute('hidden');\n\t          });\n\t        }\n\t      }\n\t    }\n\t  }, {\n\t    key: 'toggle',\n\t    value: function toggle() {\n\t      if (this.isExpanded) {\n\t        this.collapse();\n\t      } else {\n\t        this.expand();\n\t      }\n\t    }\n\t  }, {\n\t    key: 'dispatchToggleEvent',\n\t    value: function dispatchToggleEvent(action) {\n\t      return this.element.dispatchEvent(new CustomEvent('toggle', {\n\t        bubbles: true,\n\t        cancelable: true,\n\t        detail: {\n\t          action: action\n\t        }\n\t      }));\n\t    }\n\t  }, {\n\t    key: 'disableToggle',\n\t    value: function disableToggle() {\n\t      this.controlElement.setAttribute('aria-disabled', true);\n\t    }\n\t  }, {\n\t    key: 'enableToggle',\n\t    value: function enableToggle() {\n\t      this.controlElement.removeAttribute('aria-disabled');\n\t    }\n\t  }, {\n\t    key: 'addRegionId',\n\t    value: function addRegionId(regionId) {\n\t      var ids = this.regionIds;\n\t      if (!ids.find(function (id) {\n\t        return regionId === id;\n\t      })) {\n\t        ids.push(regionId);\n\t        this.controlElement.setAttribute('aria-controls', ids.join(' '));\n\t      }\n\t    }\n\t  }, {\n\t    key: 'addRegionElement',\n\t    value: function addRegionElement(region) {\n\t      if (!(region.classList.contains(COLLAPSIBLE_GROUP_CLASS) || region.classList.contains(COLLAPSIBLE_REGION_CLASS))) {\n\t        region.classList.add(COLLAPSIBLE_GROUP_CLASS);\n\t      }\n\t\n\t      if (!region.hasAttribute('role')) {\n\t        var role = region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ? 'group' : 'region';\n\t        region.setAttribute('role', role);\n\t      }\n\t\n\t      if (!region.hasAttribute('id')) {\n\t        region.id = region.getAttribute('role') + '-' + (0, _stringUtils.randomString)();\n\t      }\n\t\n\t      if (this.isExpanded) {\n\t        region.removeAttribute('hidden');\n\t      } else {\n\t        region.setAttribute('hidden', '');\n\t      }\n\t      this.addRegionId(region.id);\n\t    }\n\t  }, {\n\t    key: 'removeRegionElement',\n\t    value: function removeRegionElement(region) {\n\t      if (region && region.id) {\n\t        var ids = this.regionIds.filter(function (id) {\n\t          return id === region.id;\n\t        });\n\t        this.controlElement.setAttribute('aria-controls', ids.join(' '));\n\t      }\n\t    }\n\t  }, {\n\t    key: 'removeListeners',\n\t    value: function removeListeners() {\n\t      this.controlElement.removeEventListener('keydown', this.keyDownHandler);\n\t      this.controlElement.removeEventListener('click', this.clickHandler);\n\t    }\n\t  }, {\n\t    key: 'init',\n\t    value: function init() {\n\t      var _this2 = this;\n\t\n\t      var initControl = function initControl() {\n\t        // Find the button element\n\t        _this2.controlElement_ = _this2.element.querySelector('.' + COLLAPSIBLE_CONTROL_CLASS) || _this2.element;\n\t\n\t        // Add \"aria-expanded\" attribute if not present\n\t        if (!_this2.controlElement.hasAttribute('aria-expanded')) {\n\t          _this2.controlElement.setAttribute('aria-expanded', 'false');\n\t        }\n\t\n\t        // Add role=button if control != <button>\n\t        if (_this2.controlElement.nodeName.toLowerCase() !== 'button') {\n\t          _this2.controlElement.setAttribute('role', 'button');\n\t        }\n\t\n\t        // Add tabindex\n\t        if (!(0, _domUtils.isFocusable)(_this2.controlElement) && !_this2.controlElement.hasAttribute('tabindex')) {\n\t          _this2.controlElement.setAttribute('tabindex', '0');\n\t        }\n\t      };\n\t\n\t      var initRegions = function initRegions() {\n\t        var regions = [];\n\t        if (!_this2.controlElement.hasAttribute('aria-controls')) {\n\t          // Add siblings as collapsible region(s)\n\t          var r = _this2.element.nextElementSibling;\n\t          while (r) {\n\t            if (r.classList.contains(COLLAPSIBLE_GROUP_CLASS) || r.classList.contains(COLLAPSIBLE_REGION_CLASS)) {\n\t              regions.push(r);\n\t            } else if (r.classList.contains(JS_COLLAPSIBLE)) {\n\t              // A new collapsible component\n\t              break;\n\t            }\n\t            r = r.nextElementSibling;\n\t          }\n\t        } else {\n\t          regions = _this2.regionElements;\n\t        }\n\t        regions.forEach(function (region) {\n\t          return _this2.addRegionElement(region);\n\t        });\n\t      };\n\t\n\t      var addListeners = function addListeners() {\n\t        _this2.controlElement.addEventListener('keydown', _this2.keyDownHandler);\n\t        _this2.controlElement.addEventListener('click', _this2.clickHandler);\n\t      };\n\t\n\t      initControl();\n\t      initRegions();\n\t      this.removeListeners();\n\t      addListeners();\n\t    }\n\t  }, {\n\t    key: 'downgrade',\n\t    value: function downgrade() {\n\t      this.removeListeners();\n\t    }\n\t  }, {\n\t    key: 'element',\n\t    get: function get() {\n\t      return this.element_;\n\t    }\n\t  }, {\n\t    key: 'controlElement',\n\t    get: function get() {\n\t      return this.controlElement_;\n\t    }\n\t  }, {\n\t    key: 'isDisabled',\n\t    get: function get() {\n\t      return this.controlElement.hasAttribute('disabled') && this.controlElement.getAttribute('disabled').toLowerCase() !== 'false' || this.controlElement.hasAttribute('aria-disabled') && this.controlElement.getAttribute('aria-disabled').toLowerCase() !== 'false';\n\t    }\n\t  }, {\n\t    key: 'isExpanded',\n\t    get: function get() {\n\t      return this.controlElement.hasAttribute('aria-expanded') && this.controlElement.getAttribute('aria-expanded').toLowerCase() === 'true';\n\t    }\n\t  }, {\n\t    key: 'regionIds',\n\t    get: function get() {\n\t      return this.controlElement.hasAttribute('aria-controls') ? this.controlElement.getAttribute('aria-controls').split(' ') : [];\n\t    }\n\t  }, {\n\t    key: 'regionElements',\n\t    get: function get() {\n\t      return this.regionIds.map(function (id) {\n\t        return document.querySelector('#' + id);\n\t      }).filter(function (el) {\n\t        return el != null;\n\t      });\n\t    }\n\t  }]);\n\t  return Collapsible;\n\t}();\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {HTMLElement} element The element that will be upgraded.\n\t   */\n\t\n\t  var MaterialExtCollapsible = function MaterialExtCollapsible(element) {\n\t    this.element_ = element;\n\t    this.collapsible = null;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtCollapsible'] = MaterialExtCollapsible;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtCollapsible.prototype.init = function () {\n\t    if (this.element_) {\n\t      this.collapsible = new Collapsible(this.element_);\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t\n\t      // Listen to 'mdl-componentdowngraded' event\n\t      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n\t    }\n\t  };\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   */\n\t  MaterialExtCollapsible.prototype.mdlDowngrade_ = function () {\n\t    this.collapsible.downgrade();\n\t  };\n\t\n\t  // Public methods.\n\t\n\t  /**\n\t   * Get control element.\n\t   * @return {HTMLElement} element The element that controls the collapsible region.\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.getControlElement = function () {\n\t    return this.collapsible.controlElement;\n\t  };\n\t  MaterialExtCollapsible.prototype['getControlElement'] = MaterialExtCollapsible.prototype.getControlElement;\n\t\n\t  /**\n\t   * Get region elements controlled by this collapsible\n\t   * @returns {Array<HTMLElement>} the collapsible region elements\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.getRegionElements = function () {\n\t    return this.collapsible.regionElements;\n\t  };\n\t  MaterialExtCollapsible.prototype['getRegionElements'] = MaterialExtCollapsible.prototype.getRegionElements;\n\t\n\t  /**\n\t   * Add region elements.\n\t   * @param {Array<HTMLElement>} elements The element that will be upgraded.\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.addRegionElements = function () {\n\t    var _this3 = this;\n\t\n\t    for (var _len = arguments.length, elements = Array(_len), _key = 0; _key < _len; _key++) {\n\t      elements[_key] = arguments[_key];\n\t    }\n\t\n\t    elements.forEach(function (element) {\n\t      return _this3.collapsible.addRegionElement(element);\n\t    });\n\t  };\n\t  MaterialExtCollapsible.prototype['addRegionElements'] = MaterialExtCollapsible.prototype.addRegionElements;\n\t\n\t  /**\n\t   * Remove collapsible region(s) from component.\n\t   * Note: This operation does not delete the element from the DOM tree.\n\t   * @param {Array<HTMLElement>} elements The element that will be upgraded.\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.removeRegionElements = function () {\n\t    var _this4 = this;\n\t\n\t    for (var _len2 = arguments.length, elements = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n\t      elements[_key2] = arguments[_key2];\n\t    }\n\t\n\t    elements.forEach(function (element) {\n\t      return _this4.collapsible.removeRegionElement(element);\n\t    });\n\t  };\n\t  MaterialExtCollapsible.prototype['removeRegionElements'] = MaterialExtCollapsible.prototype.removeRegionElements;\n\t\n\t  /**\n\t   * Expand collapsible region(s)\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.expand = function () {\n\t    this.collapsible.expand();\n\t  };\n\t  MaterialExtCollapsible.prototype['expand'] = MaterialExtCollapsible.prototype.expand;\n\t\n\t  /**\n\t   * Collapse collapsible region(s)\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.collapse = function () {\n\t    this.collapsible.collapse();\n\t  };\n\t  MaterialExtCollapsible.prototype['collapse'] = MaterialExtCollapsible.prototype.collapse;\n\t\n\t  /**\n\t   * Toggle collapsible region(s)\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.toggle = function () {\n\t    this.collapsible.toggle();\n\t  };\n\t  MaterialExtCollapsible.prototype['toggle'] = MaterialExtCollapsible.prototype.toggle;\n\t\n\t  /**\n\t   * Check whether component has aria-expanded state true\n\t   * @return {Boolean} true if aria-expanded=\"true\", otherwise false\n\t   */\n\t  MaterialExtCollapsible.prototype.isExpanded = function () {\n\t    return this.collapsible.isExpanded;\n\t  };\n\t  MaterialExtCollapsible.prototype['isExpanded'] = MaterialExtCollapsible.prototype.isExpanded;\n\t\n\t  /**\n\t   * Check whether component has aria-disabled state set to true\n\t   * @return {Boolean} true if aria-disabled=\"true\", otherwise false\n\t   */\n\t  MaterialExtCollapsible.prototype.isDisabled = function () {\n\t    return this.collapsible.isDisabled;\n\t  };\n\t  MaterialExtCollapsible.prototype['isDisabled'] = MaterialExtCollapsible.prototype.isDisabled;\n\t\n\t  /**\n\t   * Disables toggling of collapsible region(s)\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.disableToggle = function () {\n\t    this.collapsible.disableToggle();\n\t  };\n\t  MaterialExtCollapsible.prototype['disableToggle'] = MaterialExtCollapsible.prototype.disableToggle;\n\t\n\t  /**\n\t   * Enables toggling of collapsible region(s)\n\t   * @return {void}\n\t   * @public\n\t   */\n\t  MaterialExtCollapsible.prototype.enableToggle = function () {\n\t    this.collapsible.enableToggle();\n\t  };\n\t  MaterialExtCollapsible.prototype['enableToggle'] = MaterialExtCollapsible.prototype.enableToggle;\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtCollapsible,\n\t    classAsString: 'MaterialExtCollapsible',\n\t    cssClass: JS_COLLAPSIBLE,\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 52 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _classCallCheck2 = __webpack_require__(22);\n\t\n\tvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\t\n\tvar _createClass2 = __webpack_require__(23);\n\t\n\tvar _createClass3 = _interopRequireDefault(_createClass2);\n\t\n\tvar _class, _temp; /**\n\t                    * @license\n\t                    * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n\t                    *\n\t                    * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t                    * you may not use this file except in compliance with the License.\n\t                    * You may obtain a copy of the License at\n\t                    *\n\t                    *      http://www.apache.org/licenses/LICENSE-2.0\n\t                    *\n\t                    * Unless required by applicable law or agreed to in writing, software\n\t                    * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t                    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t                    * See the License for the specific language governing permissions and\n\t                    * limitations under the License.\n\t                    *\n\t                    * This code is built with Google Material Design Lite,\n\t                    * which is Licensed under the Apache License, Version 2.0\n\t                    */\n\t\n\tvar _jsonUtils = __webpack_require__(14);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar JS_FORMAT_FIELD = 'mdlext-js-formatfield';\n\tvar FORMAT_FIELD_COMPONENT = 'MaterialExtFormatfield';\n\t\n\t/**\n\t * Detect browser locale\n\t * @returns {string} the locale\n\t * @see http://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference\n\t */\n\tvar browserLanguage = function browserLanguage() {\n\t  return navigator.languages ? navigator.languages[0] : navigator.language || navigator.userLanguage;\n\t};\n\t\n\t/**\n\t * The formatfield  formats an input field  using language sensitive number formatting.\n\t */\n\t\n\tvar FormatField = (_temp = _class = function () {\n\t  function FormatField(element) {\n\t    var _this = this;\n\t\n\t    (0, _classCallCheck3.default)(this, FormatField);\n\t    this.options_ = {};\n\t\n\t    this.clickHandler = function () {\n\t      clearTimeout(FormatField.timer);\n\t    };\n\t\n\t    this.focusInHandler = function () {\n\t      if (!(_this.input.readOnly || _this.input.disabled)) {\n\t        _this.input.value = _this.unformatInput();\n\t        //setTimeout(() => this.input.setSelectionRange(0, this.input.value.length), 20);\n\t        FormatField.timer = setTimeout(function () {\n\t          return _this.input.select();\n\t        }, 200);\n\t      }\n\t    };\n\t\n\t    this.focusOutHandler = function () {\n\t      clearTimeout(FormatField.timer);\n\t\n\t      if (!(_this.input.readOnly || _this.input.disabled)) {\n\t        _this.formatValue();\n\t      }\n\t    };\n\t\n\t    this.element_ = element;\n\t    this.init();\n\t  }\n\t\n\t  (0, _createClass3.default)(FormatField, [{\n\t    key: 'stripSeparatorsFromValue',\n\t    value: function stripSeparatorsFromValue() {\n\t      var _this2 = this;\n\t\n\t      var doReplace = function doReplace() {\n\t        return _this2.input.value.replace(/\\s/g, '').replace(new RegExp(_this2.options.groupSeparator, 'g'), '').replace(_this2.options.decimalSeparator, '.');\n\t      };\n\t      //.replace(this.intlGroupSeparator_, ''),\n\t      //.replace(this.intlDecimalSeparator_, '.');\n\t\n\t      return this.input.value ? doReplace() : this.input.value;\n\t    }\n\t  }, {\n\t    key: 'fixSeparators',\n\t    value: function fixSeparators(value) {\n\t      var _this3 = this;\n\t\n\t      var doReplace = function doReplace() {\n\t        return value.replace(new RegExp(_this3.intlGroupSeparator_, 'g'), _this3.options.groupSeparator).replace(_this3.intlDecimalSeparator_, _this3.options.decimalSeparator);\n\t      };\n\t\n\t      return value ? doReplace() : value;\n\t    }\n\t  }, {\n\t    key: 'formatValue',\n\t    value: function formatValue() {\n\t      if (this.input.value) {\n\t        var v = new Intl.NumberFormat(this.options.locales, this.options).format(this.stripSeparatorsFromValue());\n\t\n\t        if ('NaN' !== v) {\n\t          this.input.value = this.fixSeparators(v);\n\t        }\n\t      }\n\t    }\n\t  }, {\n\t    key: 'unformat',\n\t    value: function unformat() {\n\t      var _this4 = this;\n\t\n\t      var doReplace = function doReplace() {\n\t        return _this4.input.value.replace(/\\s/g, '').replace(new RegExp(_this4.options.groupSeparator, 'g'), '').replace(_this4.options.decimalSeparator, '.');\n\t      };\n\t\n\t      return this.input.value ? doReplace() : this.input.value;\n\t    }\n\t  }, {\n\t    key: 'unformatInput',\n\t    value: function unformatInput() {\n\t      var _this5 = this;\n\t\n\t      var doReplace = function doReplace() {\n\t        return _this5.input.value.replace(/\\s/g, '').replace(new RegExp(_this5.options.groupSeparator, 'g'), '');\n\t      };\n\t\n\t      return this.input.value ? doReplace() : this.input.value;\n\t    }\n\t  }, {\n\t    key: 'removeListeners',\n\t    value: function removeListeners() {\n\t      this.input.removeEventListener('click', this.clickHandler);\n\t      this.input.removeEventListener('focusin', this.focusInHandler);\n\t      this.input.removeEventListener('focusout', this.focusOutHandler);\n\t    }\n\t  }, {\n\t    key: 'init',\n\t    value: function init() {\n\t      var _this6 = this;\n\t\n\t      var addListeners = function addListeners() {\n\t        _this6.input.addEventListener('click', _this6.clickHandler);\n\t        _this6.input.addEventListener('focusin', _this6.focusInHandler);\n\t        _this6.input.addEventListener('focusout', _this6.focusOutHandler);\n\t      };\n\t\n\t      var addOptions = function addOptions() {\n\t        var opts = _this6.element.getAttribute('data-formatfield-options') || _this6.input.getAttribute('data-formatfield-options');\n\t        if (opts) {\n\t          _this6.options_ = (0, _jsonUtils.jsonStringToObject)(opts, _this6.options);\n\t        }\n\t      };\n\t\n\t      var addLocale = function addLocale() {\n\t        if (!_this6.options.locales) {\n\t          _this6.options.locales = browserLanguage() || 'en-US'; //'nb-NO', //'en-US',\n\t        }\n\t      };\n\t\n\t      var addGrouping = function addGrouping() {\n\t        var s = 1234.5.toLocaleString(_this6.options.locales, {\n\t          style: 'decimal',\n\t          useGrouping: true,\n\t          minimumFractionDigits: 1,\n\t          maximumFractionDigits: 1\n\t        });\n\t\n\t        _this6.intlGroupSeparator_ = s.charAt(1);\n\t        _this6.intlDecimalSeparator_ = s.charAt(s.length - 2);\n\t        _this6.options.groupSeparator = _this6.options.groupSeparator || _this6.intlGroupSeparator_;\n\t        _this6.options.decimalSeparator = _this6.options.decimalSeparator || _this6.intlDecimalSeparator_;\n\t\n\t        if (_this6.options.groupSeparator === _this6.options.decimalSeparator) {\n\t          var e = 'Error! options.groupSeparator, \"' + _this6.options.groupSeparator + '\" ' + 'and options.decimalSeparator, ' + ('\"' + _this6.options.decimalSeparator + '\" should not be equal');\n\t          throw new Error(e);\n\t        }\n\t      };\n\t\n\t      this.input_ = this.element.querySelector('input') || this.element;\n\t\n\t      addOptions();\n\t      addLocale();\n\t      addGrouping();\n\t      this.formatValue();\n\t      addListeners();\n\t    }\n\t  }, {\n\t    key: 'downgrade',\n\t    value: function downgrade() {\n\t      this.removeListeners();\n\t    }\n\t  }, {\n\t    key: 'element',\n\t    get: function get() {\n\t      return this.element_;\n\t    }\n\t  }, {\n\t    key: 'input',\n\t    get: function get() {\n\t      return this.input_;\n\t    }\n\t  }, {\n\t    key: 'options',\n\t    get: function get() {\n\t      return this.options_;\n\t    }\n\t  }]);\n\t  return FormatField;\n\t}(), _class.timer = null, _temp);\n\t\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {HTMLElement} element The element that will be upgraded.\n\t   */\n\t\n\t  var MaterialExtFormatfield = function MaterialExtFormatfield(element) {\n\t    this.element_ = element;\n\t    this.formatField_ = null;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtFormatfield'] = MaterialExtFormatfield;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtFormatfield.prototype.init = function () {\n\t    if (this.element_) {\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t      this.formatField_ = new FormatField(this.element_);\n\t\n\t      // Listen to 'mdl-componentdowngraded' event\n\t      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Get options object\n\t   *\n\t   * @public\n\t   *\n\t   * @returns {Object} the options object\n\t   */\n\t  MaterialExtFormatfield.prototype.getOptions = function () {\n\t    return this.formatField_.options;\n\t  };\n\t  MaterialExtFormatfield.prototype['getOptions'] = MaterialExtFormatfield.prototype.getOptions;\n\t\n\t  /**\n\t   * A unformatted value is a string value where the locale specific decimal separator\n\t   * is replaced with a '.' separator and group separators are stripped.\n\t   * The returned value is suitable for parsing to a JavaScript numerical value.\n\t   *\n\t   * @example\n\t   * input.value = '1 234,5';\n\t   * inputElement.MaterialExtFormatfield.getUnformattedValue();\n\t   * // Returns '1234.5'\n\t   *\n\t   * @public\n\t   *\n\t   * @returns {String} the unformatted value\n\t   */\n\t  MaterialExtFormatfield.prototype.getUnformattedValue = function () {\n\t    return this.formatField_.unformat();\n\t  };\n\t  MaterialExtFormatfield.prototype['getUnformattedValue'] = MaterialExtFormatfield.prototype.getUnformattedValue;\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   */\n\t  MaterialExtFormatfield.prototype.mdlDowngrade_ = function () {\n\t    this.formatField_.downgrade();\n\t  };\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtFormatfield,\n\t    classAsString: FORMAT_FIELD_COMPONENT,\n\t    cssClass: JS_FORMAT_FIELD,\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 53 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t__webpack_require__(59);\n\t\n\t__webpack_require__(49);\n\t\n\t__webpack_require__(51);\n\t\n\t__webpack_require__(50);\n\t\n\t__webpack_require__(54);\n\t\n\t__webpack_require__(55);\n\t\n\t__webpack_require__(56);\n\t\n\t__webpack_require__(57);\n\t\n\t__webpack_require__(52);\n\t\n\t__webpack_require__(58);\n\n/***/ },\n/* 54 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _toConsumableArray2 = __webpack_require__(8);\n\t\n\tvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\tvar MDL_RIPPLE_CONTAINER = 'mdlext-lightboard__slide__ripple-container'; /**\n\t                                                                          * @license\n\t                                                                          * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t                                                                          *\n\t                                                                          * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t                                                                          * you may not use this file except in compliance with the License.\n\t                                                                          * You may obtain a copy of the License at\n\t                                                                          *\n\t                                                                          *      http://www.apache.org/licenses/LICENSE-2.0\n\t                                                                          *\n\t                                                                          * Unless required by applicable law or agreed to in writing, software\n\t                                                                          * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t                                                                          * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t                                                                          * See the License for the specific language governing permissions and\n\t                                                                          * limitations under the License.\n\t                                                                          *\n\t                                                                          * This code is built with Google Material Design Lite,\n\t                                                                          * which is Licensed under the Apache License, Version 2.0\n\t                                                                          */\n\t\n\t/**\n\t * A lightboard is a translucent surface illuminated from behind, used for situations\n\t * where a shape laid upon the surface needs to be seen with high contrast. In the \"old days\" of photography\n\t * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox\n\t * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.\n\t */\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  //const LIGHTBOARD = 'mdlext-lightboard';\n\t\n\t  var LIGHTBOARD_ROLE = 'grid';\n\t  var SLIDE = 'mdlext-lightboard__slide';\n\t  var SLIDE_ROLE = 'gridcell';\n\t  var SLIDE_TABSTOP = 'mdlext-lightboard__slide__frame';\n\t  /**\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtLightboard = function MaterialExtLightboard(element) {\n\t    // Stores the element.\n\t    this.element_ = element;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtLightboard'] = MaterialExtLightboard;\n\t\n\t  // Helpers\n\t  var getSlide = function getSlide(element) {\n\t    return element ? element.closest('.' + SLIDE) : null;\n\t  };\n\t\n\t  // Private methods.\n\t\n\t  /**\n\t   * Select a slide, i.e. set aria-selected=\"true\"\n\t   * @param element\n\t   * @private\n\t   */\n\t  MaterialExtLightboard.prototype.selectSlide_ = function (element) {\n\t    var slide = getSlide(element);\n\t    if (slide && !slide.hasAttribute('aria-selected')) {\n\t      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE + '[aria-selected=\"true\"]'))).forEach(function (selectedSlide) {\n\t        return selectedSlide.removeAttribute('aria-selected');\n\t      });\n\t\n\t      slide.setAttribute('aria-selected', 'true');\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Dispatch select event\n\t   * @param {Element} slide The slide that caused the event\n\t   * @private\n\t   */\n\t  MaterialExtLightboard.prototype.dispatchSelectEvent_ = function (slide) {\n\t    this.element_.dispatchEvent(new CustomEvent('select', {\n\t      bubbles: true,\n\t      cancelable: true,\n\t      detail: { source: slide }\n\t    }));\n\t  };\n\t\n\t  /**\n\t   * Handles custom command event, 'first', 'next', 'prev', 'last', 'select' or upgrade\n\t   * @param event. A custom event\n\t   * @private\n\t   */\n\t  MaterialExtLightboard.prototype.commandHandler_ = function (event) {\n\t    event.preventDefault();\n\t    event.stopPropagation();\n\t\n\t    if (event && event.detail) {\n\t      this.command(event.detail);\n\t    }\n\t  };\n\t\n\t  // Public methods\n\t\n\t  /**\n\t   * Initialize lightboard slides\n\t   * @public\n\t   */\n\t  MaterialExtLightboard.prototype.upgradeSlides = function () {\n\t\n\t    var addRipple = function addRipple(slide) {\n\t      // Use slide frame as ripple container\n\t      if (!slide.querySelector('.' + MDL_RIPPLE_CONTAINER)) {\n\t        var a = slide.querySelector('.' + SLIDE_TABSTOP);\n\t        if (a) {\n\t          var rippleContainer = a;\n\t          rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);\n\t          rippleContainer.classList.add(_constants.MDL_RIPPLE_EFFECT);\n\t          var ripple = document.createElement('span');\n\t          ripple.classList.add(_constants.MDL_RIPPLE);\n\t          rippleContainer.appendChild(ripple);\n\t          componentHandler.upgradeElement(rippleContainer, _constants.MDL_RIPPLE_COMPONENT);\n\t        }\n\t      }\n\t    };\n\t\n\t    var hasRippleEffect = this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT);\n\t\n\t    [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + SLIDE))).forEach(function (slide) {\n\t\n\t      slide.setAttribute('role', SLIDE_ROLE);\n\t\n\t      if (!slide.querySelector('a')) {\n\t        slide.setAttribute('tabindex', '0');\n\t      }\n\t      if (hasRippleEffect) {\n\t        addRipple(slide);\n\t      }\n\t    });\n\t  };\n\t  MaterialExtLightboard.prototype['upgradeSlides'] = MaterialExtLightboard.prototype.upgradeSlides;\n\t\n\t  /**\n\t   * Execute command\n\t   * @param detail\n\t   * @public\n\t   */\n\t  MaterialExtLightboard.prototype.command = function (detail) {\n\t    var _this = this;\n\t\n\t    var firstSlide = function firstSlide() {\n\t      return _this.element_.querySelector('.' + SLIDE + ':first-child');\n\t    };\n\t\n\t    var lastSlide = function lastSlide() {\n\t      return _this.element_.querySelector('.' + SLIDE + ':last-child');\n\t    };\n\t\n\t    var nextSlide = function nextSlide() {\n\t      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected=\"true\"]').nextElementSibling;\n\t      return slide ? slide : firstSlide();\n\t    };\n\t\n\t    var prevSlide = function prevSlide() {\n\t      var slide = _this.element_.querySelector('.' + SLIDE + '[aria-selected=\"true\"]').previousElementSibling;\n\t      return slide ? slide : lastSlide();\n\t    };\n\t\n\t    if (detail && detail.action) {\n\t      var action = detail.action,\n\t          target = detail.target;\n\t\n\t\n\t      var slide = void 0;\n\t      switch (action.toLowerCase()) {\n\t        case 'select':\n\t          slide = getSlide(target);\n\t          this.dispatchSelectEvent_(slide);\n\t          break;\n\t        case 'first':\n\t          slide = firstSlide();\n\t          break;\n\t        case 'next':\n\t          slide = nextSlide();\n\t          break;\n\t        case 'prev':\n\t          slide = prevSlide();\n\t          break;\n\t        case 'last':\n\t          slide = lastSlide();\n\t          break;\n\t        case 'upgrade':\n\t          this.upgradeSlides();\n\t          break;\n\t        default:\n\t          throw new Error('Unknown action \"' + action + '\". Action must be one of \"first\", \"next\", \"prev\", \"last\", \"select\" or \"upgrade\"');\n\t      }\n\t\n\t      if (slide) {\n\t        var a = slide.querySelector('a');\n\t        if (a) {\n\t          a.focus();\n\t        } else {\n\t          slide.focus();\n\t        }\n\t\n\t        // Workaround for JSDom testing:\n\t        // In JsDom 'element.focus()' does not trigger any focus event\n\t        if (!slide.hasAttribute('aria-selected')) {\n\t          this.selectSlide_(slide);\n\t        }\n\t      }\n\t    }\n\t  };\n\t  MaterialExtLightboard.prototype['command'] = MaterialExtLightboard.prototype.command;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtLightboard.prototype.init = function () {\n\t    var _this2 = this;\n\t\n\t    var keydownHandler = function keydownHandler(event) {\n\t\n\t      if (event.target !== _this2.element_) {\n\t        var action = void 0;\n\t        var target = void 0;\n\t        switch (event.keyCode) {\n\t          case _constants.VK_HOME:\n\t            action = 'first';\n\t            break;\n\t          case _constants.VK_END:\n\t            action = 'last';\n\t            break;\n\t          case _constants.VK_ARROW_UP:\n\t          case _constants.VK_ARROW_LEFT:\n\t            action = 'prev';\n\t            break;\n\t          case _constants.VK_ARROW_DOWN:\n\t          case _constants.VK_ARROW_RIGHT:\n\t            action = 'next';\n\t            break;\n\t          case _constants.VK_ENTER:\n\t          case _constants.VK_SPACE:\n\t            action = 'select';\n\t            target = event.target;\n\t            break;\n\t        }\n\t        if (action) {\n\t          event.preventDefault();\n\t          event.stopPropagation();\n\t          _this2.command({ action: action, target: target });\n\t        }\n\t      }\n\t    };\n\t\n\t    var clickHandler = function clickHandler(event) {\n\t      event.preventDefault();\n\t      event.stopPropagation();\n\t\n\t      if (event.target !== _this2.element_) {\n\t        _this2.command({ action: 'select', target: event.target });\n\t      }\n\t    };\n\t\n\t    var focusHandler = function focusHandler(event) {\n\t      event.preventDefault();\n\t      event.stopPropagation();\n\t\n\t      if (event.target !== _this2.element_) {\n\t        _this2.selectSlide_(event.target);\n\t      }\n\t    };\n\t\n\t    if (this.element_) {\n\t      this.element_.setAttribute('role', LIGHTBOARD_ROLE);\n\t\n\t      if (this.element_.classList.contains(_constants.MDL_RIPPLE_EFFECT)) {\n\t        this.element_.classList.add(_constants.MDL_RIPPLE_EFFECT_IGNORE_EVENTS);\n\t      }\n\t\n\t      // Remove listeners, just in case ...\n\t      this.element_.removeEventListener('command', this.commandHandler_);\n\t      this.element_.removeEventListener('keydown', keydownHandler);\n\t      this.element_.removeEventListener('click', clickHandler);\n\t      this.element_.removeEventListener('focus', focusHandler);\n\t\n\t      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\t      this.element_.addEventListener('keydown', keydownHandler, true);\n\t      this.element_.addEventListener('click', clickHandler, true);\n\t      this.element_.addEventListener('focus', focusHandler, true);\n\t\n\t      this.upgradeSlides();\n\t\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t    }\n\t  };\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  /* jshint undef:false */\n\t  componentHandler.register({\n\t    constructor: MaterialExtLightboard,\n\t    classAsString: 'MaterialExtLightboard',\n\t    cssClass: 'mdlext-js-lightboard',\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 55 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _toConsumableArray2 = __webpack_require__(8);\n\t\n\tvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\t\n\tvar _isInteger = __webpack_require__(32);\n\t\n\tvar _isInteger2 = _interopRequireDefault(_isInteger);\n\t\n\tvar _slicedToArray2 = __webpack_require__(67);\n\t\n\tvar _slicedToArray3 = _interopRequireDefault(_slicedToArray2);\n\t\n\tvar _entries = __webpack_require__(64);\n\t\n\tvar _entries2 = _interopRequireDefault(_entries);\n\t\n\tvar _getIterator2 = __webpack_require__(31);\n\t\n\tvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\t\n\tvar _fullThrottle = __webpack_require__(13);\n\t\n\tvar _fullThrottle2 = _interopRequireDefault(_fullThrottle);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * @license\n\t * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t *      http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t *\n\t * This code is built with Google Material Design Lite,\n\t * which is Licensed under the Apache License, Version 2.0\n\t */\n\t\n\t/**\n\t * Responsive Lightbox\n\t */\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  var LIGHTBOX = 'mdlext-lightbox';\n\t  var LIGHTBOX_SLIDER = 'mdlext-lightbox__slider';\n\t  var LIGHTBOX_SLIDER_SLIDE = 'mdlext-lightbox__slider__slide';\n\t  var STICKY_FOOTER = 'mdlext-lightbox--sticky-footer';\n\t  var BUTTON = 'mdl-button';\n\t\n\t  /**\n\t   * https://github.com/google/material-design-lite/issues/4205\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtLightbox = function MaterialExtLightbox(element) {\n\t    // Stores the element.\n\t    this.element_ = element;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtLightbox'] = MaterialExtLightbox;\n\t\n\t  /**\n\t   * Handle keypress\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtLightbox.prototype.keyDownHandler_ = function (event) {\n\t\n\t    if (event) {\n\t      if (event.keyCode === _constants.VK_ESC || event.keyCode === _constants.VK_SPACE || event.keyCode === _constants.VK_END || event.keyCode === _constants.VK_HOME || event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT || event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {\n\t\n\t        if (event.keyCode !== _constants.VK_ESC) {\n\t          event.preventDefault();\n\t          event.stopPropagation();\n\t        }\n\t\n\t        var action = 'first';\n\t        if (event.keyCode === _constants.VK_END) {\n\t          action = 'last';\n\t        } else if (event.keyCode === _constants.VK_ARROW_UP || event.keyCode === _constants.VK_ARROW_LEFT) {\n\t          action = 'prev';\n\t        } else if (event.keyCode === _constants.VK_ARROW_DOWN || event.keyCode === _constants.VK_ARROW_RIGHT) {\n\t          action = 'next';\n\t        } else if (event.keyCode === _constants.VK_SPACE) {\n\t          action = 'select';\n\t        } else if (event.keyCode === _constants.VK_ESC) {\n\t          action = 'cancel';\n\t        }\n\t\n\t        dispatchAction_(action, this);\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Handle button clicks\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtLightbox.prototype.buttonClickHandler_ = function (event) {\n\t\n\t    if (event) {\n\t      event.preventDefault();\n\t      event.stopPropagation();\n\t\n\t      dispatchAction_(this.getAttribute('data-action') || '', this);\n\t\n\t      var n = this.closest('.' + LIGHTBOX);\n\t      if (n) {\n\t        n.focus();\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Dispatches an action custom event\n\t   * @param action\n\t   * @param source\n\t   * @param target\n\t   * @private\n\t   */\n\t  var dispatchAction_ = function dispatchAction_(action, source) {\n\t    var target = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : source;\n\t\n\t\n\t    target.dispatchEvent(new CustomEvent('action', {\n\t      bubbles: true,\n\t      cancelable: true,\n\t      detail: {\n\t        action: action || '',\n\t        source: source\n\t      }\n\t    }));\n\t  };\n\t\n\t  /**\n\t   * Reposition dialog if component parent element is \"DIALOG\"\n\t   * @param lightboxElement\n\t   * @private\n\t   */\n\t  var repositionDialog_ = function repositionDialog_(lightboxElement) {\n\t    var footerHeight = function footerHeight(footer, isSticky) {\n\t      return isSticky && footer ? footer.offsetHeight : 0;\n\t    };\n\t\n\t    var reposition = function reposition(dialog, fh) {\n\t      if (window.getComputedStyle(dialog).position === 'absolute') {\n\t        var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;\n\t        var topValue = scrollTop + (window.innerHeight - dialog.offsetHeight - fh) / 2;\n\t        dialog.style.top = Math.max(scrollTop, topValue) + 'px';\n\t      }\n\t    };\n\t\n\t    var p = lightboxElement.parentNode;\n\t    var dialog = p && p.nodeName === 'DIALOG' ? p : null;\n\t\n\t    if (dialog && dialog.hasAttribute('open')) {\n\t      lightboxElement.style.width = 'auto';\n\t      lightboxElement.style.maxWidth = '100%';\n\t      var img = lightboxElement.querySelector('img');\n\t      if (img) {\n\t        lightboxElement.style.maxWidth = img.naturalWidth !== undefined ? img.naturalWidth + 'px' : img.width + 'px' || '100%';\n\t      }\n\t\n\t      var fh = footerHeight(lightboxElement.querySelector('footer'), lightboxElement.classList.contains(STICKY_FOOTER));\n\t      var vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - fh;\n\t      if (dialog.offsetHeight > vh) {\n\t        var n = 0;\n\t        while (dialog.offsetHeight > vh && ++n < 4) {\n\t          lightboxElement.style.width = lightboxElement.offsetWidth * vh / lightboxElement.offsetHeight + 'px';\n\t        }\n\t      }\n\t      reposition(dialog, fh);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Handle image load\n\t   * @param event\n\t   * @private\n\t   */\n\t\n\t  MaterialExtLightbox.prototype.imgLoadHandler_ = function () /*event*/{\n\t    repositionDialog_(this);\n\t  };\n\t\n\t  /**\n\t   * Handle image drag\n\t   * @param event\n\t   * @private\n\t     */\n\t  MaterialExtLightbox.prototype.imgDragHandler_ = function (event) {\n\t\n\t    var setStyles = function setStyles(element, properties) {\n\t      //noinspection JSAnnotator\n\t      var _iteratorNormalCompletion = true;\n\t      var _didIteratorError = false;\n\t      var _iteratorError = undefined;\n\t\n\t      try {\n\t        for (var _iterator = (0, _getIterator3.default)((0, _entries2.default)(properties)), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n\t          var _step$value = (0, _slicedToArray3.default)(_step.value, 2),\n\t              key = _step$value[0],\n\t              value = _step$value[1];\n\t\n\t          element.style[key] = value;\n\t        }\n\t        // ... or:\n\t        //for (const key in properties) {\n\t        //  element.style[key] = properties[key];\n\t        //}\n\t      } catch (err) {\n\t        _didIteratorError = true;\n\t        _iteratorError = err;\n\t      } finally {\n\t        try {\n\t          if (!_iteratorNormalCompletion && _iterator.return) {\n\t            _iterator.return();\n\t          }\n\t        } finally {\n\t          if (_didIteratorError) {\n\t            throw _iteratorError;\n\t          }\n\t        }\n\t      }\n\t    };\n\t\n\t    event.preventDefault();\n\t    //event.stopPropagation();\n\t\n\t    var x = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);\n\t\n\t    var img = this;\n\t    img.style.opacity = '0.2';\n\t\n\t    var slider = document.createElement('div');\n\t    slider.classList.add(LIGHTBOX_SLIDER);\n\t    setStyles(slider, { 'width': img.offsetWidth + 'px', 'height': img.offsetHeight + 'px' });\n\t\n\t    var slide = document.createElement('div');\n\t    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n\t    slide.textContent = '>';\n\t    setStyles(slide, {\n\t      'width': img.offsetWidth + 'px',\n\t      'height': img.offsetHeight + 'px',\n\t      'line-height': img.offsetHeight + 'px',\n\t      'font-size': img.offsetHeight / 4 + 'px',\n\t      'text-align': 'right',\n\t      'background-image': 'url(\"' + (img.getAttribute('data-img-url-prev') || '') + '\")'\n\t    });\n\t    slider.appendChild(slide);\n\t\n\t    slide = document.createElement('div');\n\t    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n\t    setStyles(slide, {\n\t      'width': img.offsetWidth + 'px',\n\t      'height': img.offsetHeight + 'px',\n\t      'background-image': 'url(\"' + img.src + '\")'\n\t    });\n\t    slider.appendChild(slide);\n\t\n\t    slide = document.createElement('div');\n\t    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n\t    slide.textContent = '<';\n\t    setStyles(slide, {\n\t      'width': img.offsetWidth + 'px',\n\t      'height': img.offsetHeight + 'px',\n\t      'line-height': img.offsetHeight + 'px',\n\t      'font-size': img.offsetHeight / 4 + 'px',\n\t      'text-align': 'left',\n\t      'background-image': 'url(\"' + (img.getAttribute('data-img-url-next') || '') + '\")'\n\t    });\n\t    slider.appendChild(slide);\n\t\n\t    img.parentNode.appendChild(slider);\n\t\n\t    // drag handler\n\t    var drag = function drag(e) {\n\t      e.preventDefault();\n\t      var dx = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0)) - x; // TODO: maybe rewrite to improve performance\n\t\n\t      if (slider.offsetWidth - Math.abs(dx) > 19) {\n\t        slider.style.left = dx + 'px';\n\t      }\n\t    };\n\t\n\t    // end drag handler\n\t    var endDrag = function endDrag(e) {\n\t      e.preventDefault();\n\t      //e.stopPropagation();\n\t\n\t      window.removeEventListener('mousemove', drag);\n\t      window.removeEventListener('touchmove', drag);\n\t      window.removeEventListener('mouseup', endDrag);\n\t      window.removeEventListener('touchend', endDrag);\n\t\n\t      var dx = slider.offsetLeft;\n\t      img.parentNode.removeChild(slider);\n\t      img.style.opacity = '1.0';\n\t\n\t      if (Math.abs(dx) > 19) {\n\t        dispatchAction_(dx > 0 ? 'prev' : 'next', img);\n\t      }\n\t    };\n\t\n\t    window.addEventListener('mousemove', drag);\n\t    window.addEventListener('touchmove', drag);\n\t    window.addEventListener('mouseup', endDrag);\n\t    window.addEventListener('touchend', endDrag);\n\t  };\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtLightbox.prototype.init = function () {\n\t    var _this = this;\n\t\n\t    if (this.element_) {\n\t      // Do the init required for this component to work\n\t      this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this.element_), true);\n\t\n\t      if (!(0, _isInteger2.default)(this.element_.getAttribute('tabindex'))) {\n\t        this.element_.setAttribute('tabindex', 1);\n\t      }\n\t\n\t      [].concat((0, _toConsumableArray3.default)(this.element_.querySelectorAll('.' + BUTTON))).forEach(function (button) {\n\t        return button.addEventListener('click', _this.buttonClickHandler_.bind(button), false);\n\t      });\n\t\n\t      var figcaption = this.element_.querySelector('figcaption');\n\t      if (figcaption) {\n\t        figcaption.addEventListener('click', this.buttonClickHandler_.bind(figcaption), false);\n\t      }\n\t\n\t      var footer = this.element_.querySelector('footer');\n\t      if (footer) {\n\t        footer.addEventListener('click', this.buttonClickHandler_.bind(footer), false);\n\t      }\n\t\n\t      var img = this.element_.querySelector('img');\n\t      if (img) {\n\t        img.addEventListener('load', this.imgLoadHandler_.bind(this.element_), false);\n\t        img.addEventListener('click', function (e) {\n\t          return e.preventDefault();\n\t        }, true);\n\t        img.addEventListener('mousedown', this.imgDragHandler_.bind(img), true);\n\t        img.addEventListener('touchstart', this.imgDragHandler_.bind(img), true);\n\t      }\n\t      window.addEventListener('resize', (0, _fullThrottle2.default)(function () {\n\t        return repositionDialog_(_this.element_);\n\t      }));\n\t      window.addEventListener('orientationchange', function () {\n\t        return repositionDialog_(_this.element_);\n\t      });\n\t\n\t      // Set upgraded flag\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t    }\n\t  };\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   *\n\t   * Nothing to downgrade\n\t   *\n\t  MaterialExtLightbox.prototype.mdlDowngrade_ = function() {\n\t  };\n\t  */\n\t\n\t  /**\n\t   * The component registers itself. It can assume componentHandler is available in the global scope.\n\t   */\n\t  /* jshint undef:false */\n\t  componentHandler.register({\n\t    constructor: MaterialExtLightbox,\n\t    classAsString: 'MaterialExtLightbox',\n\t    cssClass: 'mdlext-js-lightbox'\n\t  });\n\t})();\n\n/***/ },\n/* 56 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _classCallCheck2 = __webpack_require__(22);\n\t\n\tvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\t\n\tvar _createClass2 = __webpack_require__(23);\n\t\n\tvar _createClass3 = _interopRequireDefault(_createClass2);\n\t\n\tvar _toConsumableArray2 = __webpack_require__(8);\n\t\n\tvar _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);\n\t\n\tvar _stringUtils = __webpack_require__(15);\n\t\n\tvar _fullThrottle = __webpack_require__(13);\n\t\n\tvar _fullThrottle2 = _interopRequireDefault(_fullThrottle);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tvar _domUtils = __webpack_require__(21);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t/**\n\t * @license\n\t * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t *      http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t *\n\t * This code is built with Google Material Design Lite,\n\t * which is Licensed under the Apache License, Version 2.0\n\t */\n\t\n\t/**\n\t * A menu button is a button that opens a menu. It is often styled as a\n\t * typical push button with a downward pointing arrow or triangle to hint\n\t * that activating the button will display a menu.\n\t */\n\tvar JS_MENU_BUTTON = 'mdlext-js-menu-button';\n\tvar MENU_BUTTON_MENU = 'mdlext-menu';\n\tvar MENU_BUTTON_MENU_ITEM = 'mdlext-menu__item';\n\tvar MENU_BUTTON_MENU_ITEM_SEPARATOR = 'mdlext-menu__item-separator';\n\t//const MDL_LAYOUT_CONTENT = 'mdl-layout__content';\n\t\n\t/**\n\t * Creates the menu controlled by the menu button\n\t * @param element\n\t * @return {{element: Element, selected: Element, open: (function(*=)), removeListeners: (function()), downgrade: (function())}}\n\t */\n\t\n\tvar menuFactory = function menuFactory(element) {\n\t\n\t  var ariaControls = null;\n\t  var parentNode = null;\n\t\n\t  var removeAllSelected = function removeAllSelected() {\n\t    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM + '[aria-selected=\"true\"]'))).forEach(function (selectedItem) {\n\t      return selectedItem.removeAttribute('aria-selected');\n\t    });\n\t  };\n\t\n\t  var setSelected = function setSelected(item) {\n\t    var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\t\n\t    if (force || item && !item.hasAttribute('aria-selected')) {\n\t      removeAllSelected();\n\t      if (item) {\n\t        item.setAttribute('aria-selected', 'true');\n\t      }\n\t    }\n\t  };\n\t\n\t  var getSelected = function getSelected() {\n\t    return element.querySelector('.' + MENU_BUTTON_MENU_ITEM + '[aria-selected=\"true\"]');\n\t  };\n\t\n\t  var isDisabled = function isDisabled(item) {\n\t    return item && item.hasAttribute('disabled');\n\t  };\n\t\n\t  var isSeparator = function isSeparator(item) {\n\t    return item && item.classList.contains(MENU_BUTTON_MENU_ITEM_SEPARATOR);\n\t  };\n\t\n\t  var focus = function focus(item) {\n\t    if (item) {\n\t      item = item.closest('.' + MENU_BUTTON_MENU_ITEM);\n\t    }\n\t    if (item) {\n\t      item.focus();\n\t    }\n\t  };\n\t\n\t  var nextItem = function nextItem(current) {\n\t    var n = current.nextElementSibling;\n\t    if (!n) {\n\t      n = element.firstElementChild;\n\t    }\n\t    if (!isDisabled(n) && !isSeparator(n)) {\n\t      focus(n);\n\t    } else {\n\t      var i = element.children.length;\n\t      while (n && i-- > 0) {\n\t        if (isDisabled(n) || isSeparator(n)) {\n\t          n = n.nextElementSibling;\n\t          if (!n) {\n\t            n = element.firstElementChild;\n\t          }\n\t        } else {\n\t          focus(n);\n\t          break;\n\t        }\n\t      }\n\t    }\n\t  };\n\t\n\t  var previousItem = function previousItem(current) {\n\t    var p = current.previousElementSibling;\n\t    if (!p) {\n\t      p = element.lastElementChild;\n\t    }\n\t    if (!isDisabled(p) && !isSeparator(p)) {\n\t      focus(p);\n\t    } else {\n\t      var i = element.children.length;\n\t      while (p && i-- > 0) {\n\t        if (isDisabled(p) || isSeparator(p)) {\n\t          p = p.previousElementSibling;\n\t          if (!p) {\n\t            p = element.lastElementChild;\n\t          }\n\t        } else {\n\t          focus(p);\n\t          break;\n\t        }\n\t      }\n\t    }\n\t  };\n\t\n\t  var firstItem = function firstItem() {\n\t    var item = element.firstElementChild;\n\t    if (isDisabled(item) || isSeparator(item)) {\n\t      nextItem(item);\n\t    } else {\n\t      focus(item);\n\t    }\n\t  };\n\t\n\t  var lastItem = function lastItem() {\n\t    var item = element.lastElementChild;\n\t    if (isDisabled(item) || isSeparator(item)) {\n\t      previousItem(item);\n\t    } else {\n\t      focus(item);\n\t    }\n\t  };\n\t\n\t  var selectItem = function selectItem(item) {\n\t    if (item && !isDisabled(item) && !isSeparator(item)) {\n\t      setSelected(item);\n\t      close(true, item);\n\t    }\n\t  };\n\t\n\t  var keyDownHandler = function keyDownHandler(event) {\n\t\n\t    var item = event.target.closest('.' + MENU_BUTTON_MENU_ITEM);\n\t\n\t    switch (event.keyCode) {\n\t      case _constants.VK_ARROW_UP:\n\t      case _constants.VK_ARROW_LEFT:\n\t        if (item) {\n\t          previousItem(item);\n\t        } else {\n\t          firstItem();\n\t        }\n\t        break;\n\t\n\t      case _constants.VK_ARROW_DOWN:\n\t      case _constants.VK_ARROW_RIGHT:\n\t        if (item) {\n\t          nextItem(item);\n\t        } else {\n\t          lastItem();\n\t        }\n\t        break;\n\t\n\t      case _constants.VK_HOME:\n\t        firstItem();\n\t        break;\n\t\n\t      case _constants.VK_END:\n\t        lastItem();\n\t        break;\n\t\n\t      case _constants.VK_SPACE:\n\t      case _constants.VK_ENTER:\n\t        selectItem(item);\n\t        break;\n\t\n\t      case _constants.VK_ESC:\n\t        close(true);\n\t        break;\n\t\n\t      case _constants.VK_TAB:\n\t        // We do not have a \"natural\" tab order from menu, so the best we can do is to set focus back to the button\n\t        close(true);\n\t        break;\n\t\n\t      default:\n\t        return;\n\t    }\n\t    event.preventDefault();\n\t  };\n\t\n\t  var blurHandler = function blurHandler(event) {\n\t\n\t    // See: https://github.com/facebook/react/issues/2011\n\t    var t = event.relatedTarget || event.explicitOriginalTarget || // FF\n\t    document.activeElement; // IE11\n\t\n\t    //console.log('***** blur, target, relatedTarget', event.target, t);\n\t\n\t    try {\n\t      if (t) {\n\t        if (t.closest('.' + MENU_BUTTON_MENU) !== element && shouldClose(t)) {\n\t          close();\n\t        }\n\t      } else {\n\t        close();\n\t      }\n\t    } catch (err) {\n\t      // FF throws error: \"TypeError: n.closest is not a function\" if related target is a text node\n\t      close();\n\t    }\n\t  };\n\t\n\t  var clickHandler = function clickHandler(event) {\n\t    //console.log('***** click, target', event.target);\n\t\n\t    event.preventDefault();\n\t    var t = event.target;\n\t    if (t && t.closest('.' + MENU_BUTTON_MENU) === element) {\n\t      var item = t.closest('.' + MENU_BUTTON_MENU_ITEM);\n\t      if (item) {\n\t        selectItem(item);\n\t      }\n\t    } else {\n\t      if (shouldClose(t)) {\n\t        close();\n\t      }\n\t    }\n\t  };\n\t\n\t  var touchStartHandler = function touchStartHandler(event) {\n\t    //console.log('***** touchStart, target', event.target);\n\t\n\t    var t = event.target;\n\t    if (!(t && t.closest('.' + MENU_BUTTON_MENU) === element)) {\n\t      if (event.type === 'touchstart') {\n\t        event.preventDefault();\n\t      }\n\t      close();\n\t    }\n\t  };\n\t\n\t  var addListeners = function addListeners() {\n\t    element.addEventListener('keydown', keyDownHandler, false);\n\t    element.addEventListener('blur', blurHandler, true);\n\t    element.addEventListener('click', clickHandler, true);\n\t    document.documentElement.addEventListener('touchstart', touchStartHandler, true);\n\t  };\n\t\n\t  var _removeListeners = function _removeListeners() {\n\t    element.removeEventListener('keydown', keyDownHandler, false);\n\t    element.removeEventListener('blur', blurHandler, true);\n\t    element.removeEventListener('click', clickHandler, true);\n\t    document.documentElement.removeEventListener('touchstart', touchStartHandler, true);\n\t  };\n\t\n\t  var _open = function _open(controlElement) {\n\t    var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'first';\n\t\n\t\n\t    ariaControls = controlElement.closest('.' + JS_MENU_BUTTON);\n\t\n\t    element.style['min-width'] = Math.max(124, controlElement.getBoundingClientRect().width) + 'px';\n\t    element.removeAttribute('hidden');\n\t    (0, _domUtils.tether)(controlElement, element);\n\t\n\t    var item = void 0;\n\t    switch (position.toLowerCase()) {\n\t      case 'first':\n\t        firstItem();\n\t        break;\n\t\n\t      case 'last':\n\t        lastItem();\n\t        break;\n\t\n\t      case 'selected':\n\t        item = getSelected();\n\t        if (item && !item.hasAttribute('disabled')) {\n\t          focus(item);\n\t        } else {\n\t          firstItem();\n\t        }\n\t        break;\n\t    }\n\t\n\t    addListeners();\n\t  };\n\t\n\t  var shouldClose = function shouldClose(target) {\n\t    //console.log('***** shouldClose');\n\t\n\t    var result = false;\n\t    var btn = target && target.closest('.' + JS_MENU_BUTTON) || null;\n\t    if (!btn) {\n\t      result = true;\n\t    } else if (btn.getAttribute('aria-controls') === element.id) {\n\t      if (btn !== ariaControls) {\n\t        result = true;\n\t      }\n\t    } else {\n\t      result = true;\n\t    }\n\t    return result;\n\t  };\n\t\n\t  var close = function close() {\n\t    var forceFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\t    var item = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\t\n\t    _removeListeners();\n\t\n\t    element.dispatchEvent(new CustomEvent('_closemenu', {\n\t      bubbles: true,\n\t      cancelable: true,\n\t      detail: { forceFocus: forceFocus, item: item }\n\t    }));\n\t  };\n\t\n\t  var addWaiAria = function addWaiAria() {\n\t    if (!element.hasAttribute('id')) {\n\t      // Generate a random id\n\t      element.id = 'menu-button-' + (0, _stringUtils.randomString)();\n\t    }\n\t    element.setAttribute('tabindex', '-1');\n\t    element.setAttribute('role', 'menu');\n\t    element.setAttribute('hidden', '');\n\t\n\t    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM))).forEach(function (menuitem) {\n\t      menuitem.setAttribute('tabindex', '-1');\n\t      menuitem.setAttribute('role', 'menuitem');\n\t    });\n\t\n\t    [].concat((0, _toConsumableArray3.default)(element.querySelectorAll('.' + MENU_BUTTON_MENU_ITEM_SEPARATOR))).forEach(function (menuitem) {\n\t      menuitem.setAttribute('role', 'separator');\n\t    });\n\t  };\n\t\n\t  var init = function init() {\n\t    addWaiAria();\n\t    parentNode = element.parentNode;\n\t    element.classList.add('is-upgraded');\n\t  };\n\t\n\t  var _downgrade = function _downgrade() {\n\t    _removeListeners();\n\t    if (element.parentNode !== parentNode) {\n\t      parentNode.appendChild(element);\n\t    }\n\t    element.classList.remove('is-upgraded');\n\t  };\n\t\n\t  init();\n\t\n\t  return {\n\t    /**\n\t     * Get the menu element\n\t     * @returns {Element} the menu element\n\t     */\n\t    get element() {\n\t      return element;\n\t    },\n\t\n\t    /**\n\t     * Set selected menu item\n\t     * @param item\n\t     */\n\t    set selected(item) {\n\t      setSelected(item, true);\n\t    },\n\t\n\t    /**\n\t     * Open menu\n\t     * @param {Element} controlElement the element where the menu should be aligned to\n\t     * @param {String} position menuElement item to receive focus after menu element is opened\n\t     */\n\t    open: function open(controlElement) {\n\t      var position = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'first';\n\t      return _open(controlElement, position);\n\t    },\n\t\n\t    /**\n\t     * Remove event listeners.\n\t     */\n\t    removeListeners: function removeListeners() {\n\t      return _removeListeners();\n\t    },\n\t\n\t    /**\n\t     * Downgrade menu\n\t     */\n\t    downgrade: function downgrade() {\n\t      return _downgrade();\n\t    }\n\t  };\n\t};\n\t\n\t/**\n\t * The menubutton component\n\t */\n\t\n\tvar MenuButton = function () {\n\t  function MenuButton(element) {\n\t    var _this = this;\n\t\n\t    (0, _classCallCheck3.default)(this, MenuButton);\n\t\n\t    this.keyDownHandler = function (event) {\n\t      if (!_this.isDisabled()) {\n\t        switch (event.keyCode) {\n\t          case _constants.VK_ARROW_UP:\n\t            _this.openMenu('last');\n\t            break;\n\t\n\t          case _constants.VK_ARROW_DOWN:\n\t            _this.openMenu();\n\t            break;\n\t\n\t          case _constants.VK_SPACE:\n\t          case _constants.VK_ENTER:\n\t            _this.openMenu('selected');\n\t            break;\n\t\n\t          case _constants.VK_ESC:\n\t            _this.closeMenu();\n\t            break;\n\t\n\t          case _constants.VK_TAB:\n\t            _this.closeMenu();\n\t            return;\n\t\n\t          default:\n\t            return;\n\t        }\n\t      }\n\t      //event.stopPropagation();\n\t      event.preventDefault();\n\t    };\n\t\n\t    this.clickHandler = function () {\n\t      if (!_this.isDisabled()) {\n\t        if (_this.element.getAttribute('aria-expanded').toLowerCase() === 'true') {\n\t          _this.closeMenu(true);\n\t        } else {\n\t          _this.openMenu('selected');\n\t        }\n\t      }\n\t    };\n\t\n\t    this.recalcMenuPosition = (0, _fullThrottle2.default)(function () {\n\t      var c = _this.focusElement.getBoundingClientRect();\n\t      var dx = _this.focusElementLastScrollPosition.left - c.left;\n\t      var dy = _this.focusElementLastScrollPosition.top - c.top;\n\t      var left = (parseFloat(_this.menu.element.style.left) || 0) - dx;\n\t      var top = (parseFloat(_this.menu.element.style.top) || 0) - dy;\n\t\n\t      _this.menu.element.style.left = left + 'px';\n\t      _this.menu.element.style.top = top + 'px';\n\t      _this.focusElementLastScrollPosition = c;\n\t    });\n\t\n\t    this.positionChangeHandler = function () {\n\t      _this.recalcMenuPosition(_this);\n\t    };\n\t\n\t    this.closeMenuHandler = function (event) {\n\t      if (event && event.detail) {\n\t        if (event.detail.item && event.detail.item !== _this.selectedItem) {\n\t          _this.selectedItem = event.detail.item;\n\t          _this.dispatchMenuSelect();\n\t        }\n\t        _this.closeMenu(event.detail.forceFocus);\n\t      }\n\t    };\n\t\n\t    this.element = element;\n\t    this.focusElement = undefined;\n\t    this.focusElementLastScrollPosition = undefined;\n\t    this.scrollElements = [];\n\t    this.menu = undefined;\n\t    this.selectedItem = null;\n\t    this.init();\n\t  }\n\t\n\t  /**\n\t   * Re-position menu if content is scrolled, window is resized or orientation change\n\t   * @see https://javascriptweblog.wordpress.com/2015/11/02/of-classes-and-arrow-functions-a-cautionary-tale/\n\t   */\n\t\n\t\n\t  (0, _createClass3.default)(MenuButton, [{\n\t    key: 'dispatchMenuSelect',\n\t    value: function dispatchMenuSelect() {\n\t      this.element.dispatchEvent(new CustomEvent('menuselect', {\n\t        bubbles: true,\n\t        cancelable: true,\n\t        detail: { source: this.selectedItem }\n\t      }));\n\t    }\n\t  }, {\n\t    key: 'isDisabled',\n\t    value: function isDisabled() {\n\t      return this.element.hasAttribute('disabled');\n\t    }\n\t  }, {\n\t    key: 'removeListeners',\n\t    value: function removeListeners() {\n\t      this.element.removeEventListener('keydown', this.keyDownHandler);\n\t      this.element.removeEventListener('click', this.clickHandler);\n\t    }\n\t  }, {\n\t    key: 'openMenu',\n\t    value: function openMenu() {\n\t      var _this2 = this;\n\t\n\t      var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'first';\n\t\n\t\n\t      if (!this.isDisabled() && this.menu) {\n\t\n\t        // Close the menu if button position change\n\t        this.scrollElements = (0, _domUtils.getScrollParents)(this.element);\n\t        this.scrollElements.forEach(function (el) {\n\t          return el.addEventListener('scroll', _this2.positionChangeHandler);\n\t        });\n\t\n\t        window.addEventListener('resize', this.positionChangeHandler);\n\t        window.addEventListener('orientationchange', this.positionChangeHandler);\n\t        this.menu.element.addEventListener('_closemenu', this.closeMenuHandler);\n\t\n\t        this.menu.selected = this.selectedItem;\n\t        this.menu.open(this.focusElement, position);\n\t        this.element.setAttribute('aria-expanded', 'true');\n\t\n\t        this.focusElementLastScrollPosition = this.focusElement.getBoundingClientRect();\n\t      }\n\t    }\n\t  }, {\n\t    key: 'closeMenu',\n\t    value: function closeMenu() {\n\t      var _this3 = this;\n\t\n\t      var forceFocus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\t\n\t      if (this.menu) {\n\t        this.menu.removeListeners();\n\t        this.scrollElements.forEach(function (el) {\n\t          return el.removeEventListener('scroll', _this3.positionChangeHandler);\n\t        });\n\t        window.removeEventListener('resize', this.positionChangeHandler);\n\t        window.removeEventListener('orientationchange', this.positionChangeHandler);\n\t        this.menu.element.removeEventListener('_closemenu', this.closeMenuHandler);\n\t\n\t        if (forceFocus) {\n\t          this.focus();\n\t        }\n\t        this.element.setAttribute('aria-expanded', 'false');\n\t        this.menu.element.setAttribute('hidden', '');\n\t      }\n\t    }\n\t  }, {\n\t    key: 'focus',\n\t    value: function focus() {\n\t      if (!this.isDisabled()) {\n\t        this.focusElement.focus();\n\t      }\n\t    }\n\t  }, {\n\t    key: 'init',\n\t    value: function init() {\n\t      var _this4 = this;\n\t\n\t      var addListeners = function addListeners() {\n\t        _this4.element.addEventListener('keydown', _this4.keyDownHandler);\n\t        _this4.element.addEventListener('click', _this4.clickHandler);\n\t      };\n\t\n\t      var addWaiAria = function addWaiAria() {\n\t        _this4.element.setAttribute('role', 'button');\n\t        _this4.element.setAttribute('aria-expanded', 'false');\n\t        _this4.element.setAttribute('aria-haspopup', 'true');\n\t      };\n\t\n\t      var addFocusElement = function addFocusElement() {\n\t        _this4.focusElement = _this4.element.querySelector('input[type=\"text\"]');\n\t        if (!_this4.focusElement) {\n\t          _this4.focusElement = _this4.element;\n\t\n\t          if (!(_this4.focusElement.tagName.toLowerCase() === 'button' || _this4.focusElement.tagName.toLowerCase() === 'input')) {\n\t            if (!_this4.focusElement.hasAttribute('tabindex')) {\n\t              _this4.focusElement.setAttribute('tabindex', '0');\n\t            }\n\t          }\n\t        }\n\t      };\n\t\n\t      var moveElementToDocumentBody = function moveElementToDocumentBody(element) {\n\t        // To position an element on top of all other z-indexed elements, the element should be moved to document.body\n\t        //       See: https://philipwalton.com/articles/what-no-one-told-you-about-z-index/\n\t\n\t        if (element.parentNode !== document.body) {\n\t          return document.body.appendChild(element);\n\t        }\n\t        return element;\n\t      };\n\t\n\t      var findMenuElement = function findMenuElement() {\n\t        var menuElement = void 0;\n\t        var menuElementId = _this4.element.getAttribute('aria-controls');\n\t        if (menuElementId !== null) {\n\t          menuElement = document.querySelector('#' + menuElementId);\n\t        } else {\n\t          menuElement = _this4.element.parentNode.querySelector('.' + MENU_BUTTON_MENU);\n\t        }\n\t        return menuElement;\n\t      };\n\t\n\t      var addMenu = function addMenu() {\n\t        var menuElement = findMenuElement();\n\t        if (menuElement) {\n\t          if (menuElement.componentInstance) {\n\t            _this4.menu = menuElement.componentInstance;\n\t          } else {\n\t            _this4.menu = menuFactory(menuElement);\n\t            menuElement.componentInstance = _this4.menu;\n\t            moveElementToDocumentBody(menuElement);\n\t          }\n\t          _this4.element.setAttribute('aria-controls', _this4.menu.element.id);\n\t        }\n\t      };\n\t\n\t      addFocusElement();\n\t      addWaiAria();\n\t      addMenu();\n\t      this.removeListeners();\n\t      addListeners();\n\t    }\n\t  }, {\n\t    key: 'downgrade',\n\t    value: function downgrade() {\n\t      var _this5 = this;\n\t\n\t      if (this.menu) {\n\t        // Do not downgrade menu if there are other buttons sharing this menu\n\t        var related = [].concat((0, _toConsumableArray3.default)(document.querySelectorAll('.' + JS_MENU_BUTTON + '[aria-controls=\"' + this.element.getAttribute('aria-controls') + '\"]')));\n\t        if (related.filter(function (c) {\n\t          return c !== _this5.element && c.getAttribute('data-upgraded').indexOf('MaterialExtMenuButton') >= 0;\n\t        }).length === 0) {\n\t          this.menu.downgrade();\n\t        }\n\t      }\n\t      this.removeListeners();\n\t    }\n\t  }]);\n\t  return MenuButton;\n\t}();\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  /**\n\t   * https://github.com/google/material-design-lite/issues/4205\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t\n\t  var MaterialExtMenuButton = function MaterialExtMenuButton(element) {\n\t    this.element_ = element;\n\t    this.menuButton_ = null;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t  window['MaterialExtMenuButton'] = MaterialExtMenuButton;\n\t\n\t  // Public methods.\n\t\n\t  /**\n\t   * Get the menu element controlled by this button, null if no menu is controlled by this button\n\t   * @public\n\t   */\n\t  MaterialExtMenuButton.prototype.getMenuElement = function () {\n\t    return this.menuButton_.menu ? this.menuButton_.menu.element : null;\n\t  };\n\t  MaterialExtMenuButton.prototype['getMenuElement'] = MaterialExtMenuButton.prototype.getMenuElement;\n\t\n\t  /**\n\t   * Open menu\n\t   * @public\n\t   * @param {String} position one of \"first\", \"last\" or \"selected\"\n\t   */\n\t  MaterialExtMenuButton.prototype.openMenu = function (position) {\n\t    this.menuButton_.openMenu(position);\n\t  };\n\t  MaterialExtMenuButton.prototype['openMenu'] = MaterialExtMenuButton.prototype.openMenu;\n\t\n\t  /**\n\t   * Close menu\n\t   * @public\n\t   */\n\t  MaterialExtMenuButton.prototype.closeMenu = function () {\n\t    this.menuButton_.closeMenu(true);\n\t  };\n\t  MaterialExtMenuButton.prototype['closeMenu'] = MaterialExtMenuButton.prototype.closeMenu;\n\t\n\t  /**\n\t   * Get selected menu item\n\t   * @public\n\t   * @returns {Element} The selected menu item or null if no item selected\n\t   */\n\t  MaterialExtMenuButton.prototype.getSelectedMenuItem = function () {\n\t    return this.menuButton_.selectedItem;\n\t  };\n\t  MaterialExtMenuButton.prototype['getSelectedMenuItem'] = MaterialExtMenuButton.prototype.getSelectedMenuItem;\n\t\n\t  /**\n\t   * Set (default) selected menu item\n\t   * @param {Element} item\n\t   */\n\t  MaterialExtMenuButton.prototype.setSelectedMenuItem = function (item) {\n\t    this.menuButton_.selectedItem = item;\n\t  };\n\t  MaterialExtMenuButton.prototype['setSelectedMenuItem'] = MaterialExtMenuButton.prototype.setSelectedMenuItem;\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtMenuButton.prototype.init = function () {\n\t    if (this.element_) {\n\t      this.menuButton_ = new MenuButton(this.element_);\n\t      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n\t      this.element_.classList.add(_constants.IS_UPGRADED);\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   */\n\t  MaterialExtMenuButton.prototype.mdlDowngrade_ = function () {\n\t    this.menuButton_.downgrade();\n\t  };\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtMenuButton,\n\t    classAsString: 'MaterialExtMenuButton',\n\t    cssClass: JS_MENU_BUTTON,\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 57 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _stringUtils = __webpack_require__(15);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\t/**\n\t * @license\n\t * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t *      http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t *\n\t * This code is built with Google Material Design Lite,\n\t * which is Licensed under the Apache License, Version 2.0\n\t */\n\t\n\t/*\n\t * Copied/Modified from https://github.com/google/material-design-lite/tree/master/src/textfield\n\t */\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  var LABEL = 'mdlext-selectfield__label';\n\t  var INPUT = 'mdlext-selectfield__select';\n\t\n\t  /**\n\t   * Class constructor for Selectfield MDLEXT component.\n\t   * Implements MDL component design pattern defined at:\n\t   * https://github.com/jasonmayes/mdl-component-design-pattern\n\t   *\n\t   * @constructor\n\t   * @param {HTMLElement} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtSelectfield = function MaterialExtSelectfield(element) {\n\t    this.element_ = element;\n\t    this.init(); // Initialize instance.\n\t  };\n\t\n\t  window['MaterialExtSelectfield'] = MaterialExtSelectfield;\n\t\n\t  /**\n\t   * Handle focus.\n\t   *\n\t   * @param {Event} event The event that fired.\n\t   * @private\n\t   */\n\t  /*eslint no-unused-vars: 0*/\n\t  MaterialExtSelectfield.prototype.onFocus_ = function () /*event*/{\n\t    this.element_.classList.add(_constants.IS_FOCUSED);\n\t  };\n\t\n\t  /**\n\t   * Handle lost focus.\n\t   *\n\t   * @param {Event} event The event that fired.\n\t   * @private\n\t   */\n\t  /*eslint no-unused-vars: 0*/\n\t  MaterialExtSelectfield.prototype.onBlur_ = function () /*event*/{\n\t    this.element_.classList.remove(_constants.IS_FOCUSED);\n\t  };\n\t\n\t  /**\n\t   * Handle reset event from out side.\n\t   *\n\t   * @param {Event} event The event that fired.\n\t   * @private\n\t   */\n\t  MaterialExtSelectfield.prototype.onReset_ = function () /*event*/{\n\t    this.updateClasses_();\n\t  };\n\t\n\t  /**\n\t   * Handle class updates.\n\t   *\n\t   * @private\n\t   */\n\t  MaterialExtSelectfield.prototype.updateClasses_ = function () {\n\t    this.checkDisabled();\n\t    this.checkValidity();\n\t    this.checkDirty();\n\t    this.checkFocus();\n\t  };\n\t\n\t  // Public methods.\n\t\n\t  /**\n\t   * Check the disabled state and update field accordingly.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.checkDisabled = function () {\n\t    if (this.select_.disabled) {\n\t      this.element_.classList.add(_constants.IS_DISABLED);\n\t    } else {\n\t      this.element_.classList.remove(_constants.IS_DISABLED);\n\t    }\n\t  };\n\t  MaterialExtSelectfield.prototype['checkDisabled'] = MaterialExtSelectfield.prototype.checkDisabled;\n\t\n\t  /**\n\t   * Check the focus state and update field accordingly.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.checkFocus = function () {\n\t    // Note: element.querySelector(':focus') always return null in JsDom, even if select element has focus\n\t    /*eslint no-extra-boolean-cast: 0*/\n\t    if (Boolean(this.element_.querySelector(':focus'))) {\n\t      this.element_.classList.add(_constants.IS_FOCUSED);\n\t    } else {\n\t      this.element_.classList.remove(_constants.IS_FOCUSED);\n\t    }\n\t  };\n\t\n\t  MaterialExtSelectfield.prototype['checkFocus'] = MaterialExtSelectfield.prototype.checkFocus;\n\t\n\t  /**\n\t   * Check the validity state and update field accordingly.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.checkValidity = function () {\n\t\n\t    /* Don't think it makes any sense to check validity.\n\t       Tests I've done, so far, indicates that setting an illegal value via JS returns selectedIndex=0\n\t     if (this.select_.validity) {\n\t      if (this.select_.validity.valid) {\n\t        this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n\t      } else {\n\t        this.element_.classList.add(this.CssClasses_.IS_INVALID);\n\t      }\n\t    }\n\t    */\n\t  };\n\t\n\t  MaterialExtSelectfield.prototype['checkValidity'] = MaterialExtSelectfield.prototype.checkValidity;\n\t\n\t  /**\n\t   * Check the dirty state and update field accordingly.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.checkDirty = function () {\n\t    if (this.select_.value && this.select_.value.length > 0) {\n\t      this.element_.classList.add(_constants.IS_DIRTY);\n\t    } else {\n\t      this.element_.classList.remove(_constants.IS_DIRTY);\n\t    }\n\t  };\n\t\n\t  MaterialExtSelectfield.prototype['checkDirty'] = MaterialExtSelectfield.prototype.checkDirty;\n\t\n\t  /**\n\t   * Disable select field.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.disable = function () {\n\t    this.select_.disabled = true;\n\t    this.updateClasses_();\n\t  };\n\t\n\t  MaterialExtSelectfield.prototype['disable'] = MaterialExtSelectfield.prototype.disable;\n\t\n\t  /**\n\t   * Enable select field.\n\t   *\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.enable = function () {\n\t    this.select_.disabled = false;\n\t    this.updateClasses_();\n\t  };\n\t\n\t  MaterialExtSelectfield.prototype['enable'] = MaterialExtSelectfield.prototype.enable;\n\t\n\t  /**\n\t   * Update select field value.\n\t   *\n\t   * @param {string} value The value to which to set the control (optional).\n\t   * @public\n\t   */\n\t  MaterialExtSelectfield.prototype.change = function (value) {\n\t    this.select_.value = value || '';\n\t    this.updateClasses_();\n\t  };\n\t  MaterialExtSelectfield.prototype['change'] = MaterialExtSelectfield.prototype.change;\n\t\n\t  /**\n\t   * Initialize element.\n\t   */\n\t  MaterialExtSelectfield.prototype.init = function () {\n\t    if (this.element_) {\n\t      this.label_ = this.element_.querySelector('.' + LABEL);\n\t      this.select_ = this.element_.querySelector('.' + INPUT);\n\t\n\t      if (this.select_) {\n\t        // Remove listeners, just in case ...\n\t        this.select_.removeEventListener('change', this.updateClasses_);\n\t        this.select_.removeEventListener('focus', this.onFocus_);\n\t        this.select_.removeEventListener('blur', this.onBlur_);\n\t        this.select_.removeEventListener('reset', this.onReset_);\n\t\n\t        this.select_.addEventListener('change', this.updateClasses_.bind(this));\n\t        this.select_.addEventListener('focus', this.onFocus_.bind(this));\n\t        this.select_.addEventListener('blur', this.onBlur_.bind(this));\n\t        this.select_.addEventListener('reset', this.onReset_.bind(this));\n\t\n\t        if (this.label_) {\n\t          var id = void 0;\n\t          if (!this.select_.hasAttribute('id')) {\n\t            id = 'select-' + (0, _stringUtils.randomString)();\n\t            this.select_.id = id;\n\t          } else {\n\t            id = this.select_.id;\n\t          }\n\t\n\t          if (!this.label_.hasAttribute('for')) {\n\t            this.label_.setAttribute('for', id);\n\t          }\n\t        }\n\t\n\t        var invalid = this.element_.classList.contains(_constants.IS_INVALID);\n\t        this.updateClasses_();\n\t        this.element_.classList.add(_constants.IS_UPGRADED);\n\t\n\t        if (invalid) {\n\t          this.element_.classList.add(_constants.IS_INVALID);\n\t        }\n\t        if (this.select_.hasAttribute('autofocus')) {\n\t          this.element_.focus();\n\t          this.checkFocus();\n\t        }\n\t      }\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   *\n\t   * Nothing to downgrade\n\t   *\n\t  MaterialExtSelectfield.prototype.mdlDowngrade_ = function() {\n\t    'use strict';\n\t    console.log('***** MaterialExtSelectfield.mdlDowngrade ');\n\t  };\n\t  */\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /*eslint no-undef: 0*/\n\t  componentHandler.register({\n\t    constructor: MaterialExtSelectfield,\n\t    classAsString: 'MaterialExtSelectfield',\n\t    cssClass: 'mdlext-js-selectfield',\n\t    widget: true\n\t  });\n\t})();\n\n/***/ },\n/* 58 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tvar _fullThrottle = __webpack_require__(13);\n\t\n\tvar _fullThrottle2 = _interopRequireDefault(_fullThrottle);\n\t\n\tvar _jsonUtils = __webpack_require__(14);\n\t\n\tvar _constants = __webpack_require__(2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\t(function () {\n\t  'use strict';\n\t\n\t  var MDL_LAYOUT_CONTENT = 'mdl-layout__content';\n\t  var IS_SCROLL_CLASS = 'mdlext-is-scroll';\n\t\n\t  /**\n\t   * @constructor\n\t   * @param {Element} element The element that will be upgraded.\n\t   */\n\t  var MaterialExtStickyHeader = function MaterialExtStickyHeader(element) {\n\t    // Stores the element.\n\t    this.header_ = element;\n\t\n\t    // Heder listens to scroll events from content\n\t    this.content_ = null;\n\t    this.lastScrollTop_ = 0;\n\t\n\t    // Default config\n\t    this.config_ = {\n\t      visibleAtScrollEnd: false\n\t    };\n\t\n\t    this.mutationObserver_ = null;\n\t\n\t    this.drawing_ = false;\n\t\n\t    // Initialize instance.\n\t    this.init();\n\t  };\n\t\n\t  window['MaterialExtStickyHeader'] = MaterialExtStickyHeader;\n\t\n\t  /**\n\t   * Update header width\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.recalcWidth_ = function () {\n\t    this.header_.style.width = this.content_.clientWidth + 'px';\n\t  };\n\t\n\t  var throttleResize = (0, _fullThrottle2.default)(function (self) {\n\t    return self.recalcWidth_();\n\t  });\n\t\n\t  /**\n\t   * Adjust header width when window resizes or oreientation changes\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.resizeHandler_ = function () /* event */{\n\t    throttleResize(this);\n\t  };\n\t\n\t  /**\n\t   * Update header position\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.reposition_ = function () {\n\t\n\t    var currentContentScrollTop = this.content_.scrollTop;\n\t    var scrollDiff = this.lastScrollTop_ - currentContentScrollTop;\n\t\n\t    if (currentContentScrollTop <= 0) {\n\t      // Scrolled to the top. Header sticks to the top\n\t      this.header_.style.top = '0';\n\t      this.header_.classList.remove(IS_SCROLL_CLASS);\n\t    } else if (scrollDiff > 0) {\n\t\n\t      if (scrollDiff >= this.header_.offsetHeight) {\n\t\n\t        // Scrolled up. Header slides in\n\t        var headerTop = parseInt(window.getComputedStyle(this.header_).getPropertyValue('top')) || 0;\n\t        if (headerTop != 0) {\n\t          this.header_.style.top = '0';\n\t          this.header_.classList.add(IS_SCROLL_CLASS);\n\t        }\n\t        this.lastScrollTop_ = currentContentScrollTop;\n\t      }\n\t      return;\n\t    } else if (scrollDiff < 0) {\n\t      // Scrolled down\n\t      this.header_.classList.add(IS_SCROLL_CLASS);\n\t      var _headerTop = parseInt(window.getComputedStyle(this.header_).getPropertyValue('top')) || 0;\n\t\n\t      if (this.content_.scrollHeight - this.content_.scrollTop <= this.content_.offsetHeight) {\n\t        // Bottom of content\n\t        if (_headerTop != 0) {\n\t          this.header_.style.top = this.config_.visibleAtScrollEnd ? '0' : '-' + this.header_.offsetHeight + 'px';\n\t        }\n\t      } else {\n\t        _headerTop += scrollDiff;\n\t        var offsetHeight = this.header_.offsetHeight;\n\t        this.header_.style.top = (Math.abs(_headerTop) > offsetHeight ? -offsetHeight : _headerTop) + 'px';\n\t      }\n\t    }\n\t\n\t    this.lastScrollTop_ = currentContentScrollTop;\n\t  };\n\t\n\t  var throttleScroll = (0, _fullThrottle2.default)(function (self) {\n\t    return self.reposition_();\n\t  });\n\t\n\t  /**\n\t   * Scroll header when content scrolls\n\t   * @param event\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.scrollHandler_ = function () /* event */{\n\t    throttleScroll(this);\n\t  };\n\t\n\t  /**\n\t   * Init header position\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.updatePosition_ = function () /* event */{\n\t    this.recalcWidth_();\n\t    this.reposition_();\n\t  };\n\t\n\t  /**\n\t   * Add mutation observer\n\t   * @private\n\t   */\n\t  MaterialExtStickyHeader.prototype.addMutationObserver_ = function () {\n\t    var _this = this;\n\t\n\t    // jsdom does not support MutationObserver - so this is not testable\n\t    /* istanbul ignore next */\n\t    this.mutationObserver_ = new MutationObserver(function () /*mutations*/{\n\t      // Adjust header width if content changes (e.g. in a SPA)\n\t      _this.updatePosition_();\n\t    });\n\t\n\t    this.mutationObserver_.observe(this.content_, {\n\t      attributes: false,\n\t      childList: true,\n\t      characterData: false,\n\t      subtree: true\n\t    });\n\t  };\n\t\n\t  /**\n\t  * Removes event listeners\n\t  * @private\n\t  */\n\t  MaterialExtStickyHeader.prototype.removeListeners_ = function () {\n\t\n\t    window.removeEventListener('resize', this.resizeHandler_);\n\t    window.removeEventListener('orientationchange', this.resizeHandler_);\n\t\n\t    if (this.content_) {\n\t      this.content_.removeEventListener('scroll', this.scrollHandler_);\n\t    }\n\t\n\t    if (this.mutationObserver_) {\n\t      this.mutationObserver_.disconnect();\n\t      this.mutationObserver_ = null;\n\t    }\n\t  };\n\t\n\t  /**\n\t   * Initialize component\n\t   */\n\t  MaterialExtStickyHeader.prototype.init = function () {\n\t\n\t    if (this.header_) {\n\t\n\t      this.removeListeners_();\n\t\n\t      if (this.header_.hasAttribute('data-config')) {\n\t        this.config_ = (0, _jsonUtils.jsonStringToObject)(this.header_.getAttribute('data-config'));\n\t      }\n\t\n\t      this.content_ = this.header_.parentNode.querySelector('.' + MDL_LAYOUT_CONTENT) || null;\n\t\n\t      if (this.content_) {\n\t        this.content_.style.paddingTop = this.header_.offsetHeight + 'px'; // Make room for sticky header\n\t        this.lastScrollTop_ = this.content_.scrollTop;\n\t\n\t        this.content_.addEventListener('scroll', this.scrollHandler_.bind(this));\n\t        window.addEventListener('resize', this.resizeHandler_.bind(this));\n\t        window.addEventListener('orientationchange', this.resizeHandler_.bind(this));\n\t\n\t        this.addMutationObserver_();\n\t        this.updatePosition_();\n\t\n\t        // Set upgraded flag\n\t        this.header_.classList.add(_constants.IS_UPGRADED);\n\t      }\n\t    }\n\t  };\n\t\n\t  /*\n\t   * Downgrade component\n\t   * E.g remove listeners and clean up resources\n\t   *\n\t   * Nothing to clean\n\t   *\n\t   MaterialExtStickyHeader.prototype.mdlDowngrade_ = function() {\n\t     'use strict';\n\t     console.log('***** MaterialExtStickyHeader.prototype.mdlDowngrade_');\n\t   };\n\t   */\n\t\n\t  // The component registers itself. It can assume componentHandler is available\n\t  // in the global scope.\n\t  /* eslint no-undef: 0 */\n\t  componentHandler.register({\n\t    constructor: MaterialExtStickyHeader,\n\t    classAsString: 'MaterialExtStickyHeader',\n\t    cssClass: 'mdlext-js-sticky-header'\n\t  });\n\t})(); /**\n\t       * @license\n\t       * Copyright 2016 Leif Olsen. All Rights Reserved.\n\t       *\n\t       * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t       * you may not use this file except in compliance with the License.\n\t       * You may obtain a copy of the License at\n\t       *\n\t       *      http://www.apache.org/licenses/LICENSE-2.0\n\t       *\n\t       * Unless required by applicable law or agreed to in writing, software\n\t       * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t       * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t       * See the License for the specific language governing permissions and\n\t       * limitations under the License.\n\t       *\n\t       * This code is built with Google Material Design Lite,\n\t       * which is Licensed under the Apache License, Version 2.0\n\t       */\n\t\n\t/**\n\t * A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.\n\t * The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page and\n\t * bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.\n\t */\n\n/***/ },\n/* 59 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\t__webpack_require__(2);\n\t\n\t__webpack_require__(21);\n\t\n\t__webpack_require__(15);\n\t\n\t__webpack_require__(14);\n\t\n\t__webpack_require__(13);\n\t\n\t__webpack_require__(29);\n\t\n\t__webpack_require__(30);\n\n/***/ },\n/* 60 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(68), __esModule: true };\n\n/***/ },\n/* 61 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(70), __esModule: true };\n\n/***/ },\n/* 62 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(72), __esModule: true };\n\n/***/ },\n/* 63 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(74), __esModule: true };\n\n/***/ },\n/* 64 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(75), __esModule: true };\n\n/***/ },\n/* 65 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(76), __esModule: true };\n\n/***/ },\n/* 66 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = { \"default\": __webpack_require__(77), __esModule: true };\n\n/***/ },\n/* 67 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t\"use strict\";\n\t\n\texports.__esModule = true;\n\t\n\tvar _isIterable2 = __webpack_require__(61);\n\t\n\tvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\t\n\tvar _getIterator2 = __webpack_require__(31);\n\t\n\tvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\t\n\tfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\t\n\texports.default = function () {\n\t  function sliceIterator(arr, i) {\n\t    var _arr = [];\n\t    var _n = true;\n\t    var _d = false;\n\t    var _e = undefined;\n\t\n\t    try {\n\t      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n\t        _arr.push(_s.value);\n\t\n\t        if (i && _arr.length === i) break;\n\t      }\n\t    } catch (err) {\n\t      _d = true;\n\t      _e = err;\n\t    } finally {\n\t      try {\n\t        if (!_n && _i[\"return\"]) _i[\"return\"]();\n\t      } finally {\n\t        if (_d) throw _e;\n\t      }\n\t    }\n\t\n\t    return _arr;\n\t  }\n\t\n\t  return function (arr, i) {\n\t    if (Array.isArray(arr)) {\n\t      return arr;\n\t    } else if ((0, _isIterable3.default)(Object(arr))) {\n\t      return sliceIterator(arr, i);\n\t    } else {\n\t      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n\t    }\n\t  };\n\t}();\n\n/***/ },\n/* 68 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(28);\n\t__webpack_require__(104);\n\tmodule.exports = __webpack_require__(1).Array.from;\n\n/***/ },\n/* 69 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(48);\n\t__webpack_require__(28);\n\tmodule.exports = __webpack_require__(102);\n\n/***/ },\n/* 70 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(48);\n\t__webpack_require__(28);\n\tmodule.exports = __webpack_require__(103);\n\n/***/ },\n/* 71 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(106);\n\tmodule.exports = __webpack_require__(1).Number.isInteger;\n\n/***/ },\n/* 72 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(107);\n\tmodule.exports = __webpack_require__(1).Number.isNaN;\n\n/***/ },\n/* 73 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(108);\n\tmodule.exports = __webpack_require__(1).Object.assign;\n\n/***/ },\n/* 74 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(109);\n\tvar $Object = __webpack_require__(1).Object;\n\tmodule.exports = function defineProperty(it, key, desc){\n\t  return $Object.defineProperty(it, key, desc);\n\t};\n\n/***/ },\n/* 75 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(112);\n\tmodule.exports = __webpack_require__(1).Object.entries;\n\n/***/ },\n/* 76 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(110);\n\tmodule.exports = __webpack_require__(1).Object.keys;\n\n/***/ },\n/* 77 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t__webpack_require__(111);\n\tmodule.exports = __webpack_require__(1).Reflect.apply;\n\n/***/ },\n/* 78 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(){ /* empty */ };\n\n/***/ },\n/* 79 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// false -> Array#indexOf\n\t// true  -> Array#includes\n\tvar toIObject = __webpack_require__(19)\n\t  , toLength  = __webpack_require__(45)\n\t  , toIndex   = __webpack_require__(100);\n\tmodule.exports = function(IS_INCLUDES){\n\t  return function($this, el, fromIndex){\n\t    var O      = toIObject($this)\n\t      , length = toLength(O.length)\n\t      , index  = toIndex(fromIndex, length)\n\t      , value;\n\t    // Array#includes uses SameValueZero equality algorithm\n\t    if(IS_INCLUDES && el != el)while(length > index){\n\t      value = O[index++];\n\t      if(value != value)return true;\n\t    // Array#toIndex ignores holes, Array#includes - not\n\t    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n\t      if(O[index] === el)return IS_INCLUDES || index || 0;\n\t    } return !IS_INCLUDES && -1;\n\t  };\n\t};\n\n/***/ },\n/* 80 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar $defineProperty = __webpack_require__(12)\n\t  , createDesc      = __webpack_require__(25);\n\t\n\tmodule.exports = function(object, index, value){\n\t  if(index in object)$defineProperty.f(object, index, createDesc(0, value));\n\t  else object[index] = value;\n\t};\n\n/***/ },\n/* 81 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(5).document && document.documentElement;\n\n/***/ },\n/* 82 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = !__webpack_require__(9) && !__webpack_require__(10)(function(){\n\t  return Object.defineProperty(__webpack_require__(38)('div'), 'a', {get: function(){ return 7; }}).a != 7;\n\t});\n\n/***/ },\n/* 83 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// check on default Array iterator\n\tvar Iterators  = __webpack_require__(7)\n\t  , ITERATOR   = __webpack_require__(4)('iterator')\n\t  , ArrayProto = Array.prototype;\n\t\n\tmodule.exports = function(it){\n\t  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n\t};\n\n/***/ },\n/* 84 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 20.1.2.3 Number.isInteger(number)\n\tvar isObject = __webpack_require__(17)\n\t  , floor    = Math.floor;\n\tmodule.exports = function isInteger(it){\n\t  return !isObject(it) && isFinite(it) && floor(it) === it;\n\t};\n\n/***/ },\n/* 85 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// call something on iterator step with safe closing on error\n\tvar anObject = __webpack_require__(6);\n\tmodule.exports = function(iterator, fn, value, entries){\n\t  try {\n\t    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n\t  // 7.4.6 IteratorClose(iterator, completion)\n\t  } catch(e){\n\t    var ret = iterator['return'];\n\t    if(ret !== undefined)anObject(ret.call(iterator));\n\t    throw e;\n\t  }\n\t};\n\n/***/ },\n/* 86 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar create         = __webpack_require__(91)\n\t  , descriptor     = __webpack_require__(25)\n\t  , setToStringTag = __webpack_require__(43)\n\t  , IteratorPrototype = {};\n\t\n\t// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\n\t__webpack_require__(11)(IteratorPrototype, __webpack_require__(4)('iterator'), function(){ return this; });\n\t\n\tmodule.exports = function(Constructor, NAME, next){\n\t  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n\t  setToStringTag(Constructor, NAME + ' Iterator');\n\t};\n\n/***/ },\n/* 87 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar ITERATOR     = __webpack_require__(4)('iterator')\n\t  , SAFE_CLOSING = false;\n\t\n\ttry {\n\t  var riter = [7][ITERATOR]();\n\t  riter['return'] = function(){ SAFE_CLOSING = true; };\n\t  Array.from(riter, function(){ throw 2; });\n\t} catch(e){ /* empty */ }\n\t\n\tmodule.exports = function(exec, skipClosing){\n\t  if(!skipClosing && !SAFE_CLOSING)return false;\n\t  var safe = false;\n\t  try {\n\t    var arr  = [7]\n\t      , iter = arr[ITERATOR]();\n\t    iter.next = function(){ return {done: safe = true}; };\n\t    arr[ITERATOR] = function(){ return iter; };\n\t    exec(arr);\n\t  } catch(e){ /* empty */ }\n\t  return safe;\n\t};\n\n/***/ },\n/* 88 */\n/***/ function(module, exports) {\n\n\tmodule.exports = function(done, value){\n\t  return {value: value, done: !!done};\n\t};\n\n/***/ },\n/* 89 */\n/***/ function(module, exports) {\n\n\tmodule.exports = true;\n\n/***/ },\n/* 90 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t// 19.1.2.1 Object.assign(target, source, ...)\n\tvar getKeys  = __webpack_require__(18)\n\t  , gOPS     = __webpack_require__(93)\n\t  , pIE      = __webpack_require__(42)\n\t  , toObject = __webpack_require__(20)\n\t  , IObject  = __webpack_require__(40)\n\t  , $assign  = Object.assign;\n\t\n\t// should work with symbols and should have deterministic property order (V8 bug)\n\tmodule.exports = !$assign || __webpack_require__(10)(function(){\n\t  var A = {}\n\t    , B = {}\n\t    , S = Symbol()\n\t    , K = 'abcdefghijklmnopqrst';\n\t  A[S] = 7;\n\t  K.split('').forEach(function(k){ B[k] = k; });\n\t  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n\t}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n\t  var T     = toObject(target)\n\t    , aLen  = arguments.length\n\t    , index = 1\n\t    , getSymbols = gOPS.f\n\t    , isEnum     = pIE.f;\n\t  while(aLen > index){\n\t    var S      = IObject(arguments[index++])\n\t      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n\t      , length = keys.length\n\t      , j      = 0\n\t      , key;\n\t    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n\t  } return T;\n\t} : $assign;\n\n/***/ },\n/* 91 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n\tvar anObject    = __webpack_require__(6)\n\t  , dPs         = __webpack_require__(92)\n\t  , enumBugKeys = __webpack_require__(39)\n\t  , IE_PROTO    = __webpack_require__(26)('IE_PROTO')\n\t  , Empty       = function(){ /* empty */ }\n\t  , PROTOTYPE   = 'prototype';\n\t\n\t// Create object with fake `null` prototype: use iframe Object with cleared prototype\n\tvar createDict = function(){\n\t  // Thrash, waste and sodomy: IE GC bug\n\t  var iframe = __webpack_require__(38)('iframe')\n\t    , i      = enumBugKeys.length\n\t    , lt     = '<'\n\t    , gt     = '>'\n\t    , iframeDocument;\n\t  iframe.style.display = 'none';\n\t  __webpack_require__(81).appendChild(iframe);\n\t  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n\t  // createDict = iframe.contentWindow.Object;\n\t  // html.removeChild(iframe);\n\t  iframeDocument = iframe.contentWindow.document;\n\t  iframeDocument.open();\n\t  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n\t  iframeDocument.close();\n\t  createDict = iframeDocument.F;\n\t  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n\t  return createDict();\n\t};\n\t\n\tmodule.exports = Object.create || function create(O, Properties){\n\t  var result;\n\t  if(O !== null){\n\t    Empty[PROTOTYPE] = anObject(O);\n\t    result = new Empty;\n\t    Empty[PROTOTYPE] = null;\n\t    // add \"__proto__\" for Object.getPrototypeOf polyfill\n\t    result[IE_PROTO] = O;\n\t  } else result = createDict();\n\t  return Properties === undefined ? result : dPs(result, Properties);\n\t};\n\n\n/***/ },\n/* 92 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar dP       = __webpack_require__(12)\n\t  , anObject = __webpack_require__(6)\n\t  , getKeys  = __webpack_require__(18);\n\t\n\tmodule.exports = __webpack_require__(9) ? Object.defineProperties : function defineProperties(O, Properties){\n\t  anObject(O);\n\t  var keys   = getKeys(Properties)\n\t    , length = keys.length\n\t    , i = 0\n\t    , P;\n\t  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n\t  return O;\n\t};\n\n/***/ },\n/* 93 */\n/***/ function(module, exports) {\n\n\texports.f = Object.getOwnPropertySymbols;\n\n/***/ },\n/* 94 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\n\tvar has         = __webpack_require__(16)\n\t  , toObject    = __webpack_require__(20)\n\t  , IE_PROTO    = __webpack_require__(26)('IE_PROTO')\n\t  , ObjectProto = Object.prototype;\n\t\n\tmodule.exports = Object.getPrototypeOf || function(O){\n\t  O = toObject(O);\n\t  if(has(O, IE_PROTO))return O[IE_PROTO];\n\t  if(typeof O.constructor == 'function' && O instanceof O.constructor){\n\t    return O.constructor.prototype;\n\t  } return O instanceof Object ? ObjectProto : null;\n\t};\n\n/***/ },\n/* 95 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar has          = __webpack_require__(16)\n\t  , toIObject    = __webpack_require__(19)\n\t  , arrayIndexOf = __webpack_require__(79)(false)\n\t  , IE_PROTO     = __webpack_require__(26)('IE_PROTO');\n\t\n\tmodule.exports = function(object, names){\n\t  var O      = toIObject(object)\n\t    , i      = 0\n\t    , result = []\n\t    , key;\n\t  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n\t  // Don't enum bug & hidden keys\n\t  while(names.length > i)if(has(O, key = names[i++])){\n\t    ~arrayIndexOf(result, key) || result.push(key);\n\t  }\n\t  return result;\n\t};\n\n/***/ },\n/* 96 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// most Object methods by ES6 should accept primitives\n\tvar $export = __webpack_require__(3)\n\t  , core    = __webpack_require__(1)\n\t  , fails   = __webpack_require__(10);\n\tmodule.exports = function(KEY, exec){\n\t  var fn  = (core.Object || {})[KEY] || Object[KEY]\n\t    , exp = {};\n\t  exp[KEY] = exec(fn);\n\t  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n\t};\n\n/***/ },\n/* 97 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar getKeys   = __webpack_require__(18)\n\t  , toIObject = __webpack_require__(19)\n\t  , isEnum    = __webpack_require__(42).f;\n\tmodule.exports = function(isEntries){\n\t  return function(it){\n\t    var O      = toIObject(it)\n\t      , keys   = getKeys(O)\n\t      , length = keys.length\n\t      , i      = 0\n\t      , result = []\n\t      , key;\n\t    while(length > i)if(isEnum.call(O, key = keys[i++])){\n\t      result.push(isEntries ? [key, O[key]] : O[key]);\n\t    } return result;\n\t  };\n\t};\n\n/***/ },\n/* 98 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(11);\n\n/***/ },\n/* 99 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar toInteger = __webpack_require__(27)\n\t  , defined   = __webpack_require__(24);\n\t// true  -> String#at\n\t// false -> String#codePointAt\n\tmodule.exports = function(TO_STRING){\n\t  return function(that, pos){\n\t    var s = String(defined(that))\n\t      , i = toInteger(pos)\n\t      , l = s.length\n\t      , a, b;\n\t    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n\t    a = s.charCodeAt(i);\n\t    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n\t      ? TO_STRING ? s.charAt(i) : a\n\t      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n\t  };\n\t};\n\n/***/ },\n/* 100 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar toInteger = __webpack_require__(27)\n\t  , max       = Math.max\n\t  , min       = Math.min;\n\tmodule.exports = function(index, length){\n\t  index = toInteger(index);\n\t  return index < 0 ? max(index + length, 0) : min(index, length);\n\t};\n\n/***/ },\n/* 101 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 7.1.1 ToPrimitive(input [, PreferredType])\n\tvar isObject = __webpack_require__(17);\n\t// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n\t// and the second argument - flag - preferred type is a string\n\tmodule.exports = function(it, S){\n\t  if(!isObject(it))return it;\n\t  var fn, val;\n\t  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n\t  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n\t  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n\t  throw TypeError(\"Can't convert object to primitive value\");\n\t};\n\n/***/ },\n/* 102 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar anObject = __webpack_require__(6)\n\t  , get      = __webpack_require__(47);\n\tmodule.exports = __webpack_require__(1).getIterator = function(it){\n\t  var iterFn = get(it);\n\t  if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');\n\t  return anObject(iterFn.call(it));\n\t};\n\n/***/ },\n/* 103 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar classof   = __webpack_require__(35)\n\t  , ITERATOR  = __webpack_require__(4)('iterator')\n\t  , Iterators = __webpack_require__(7);\n\tmodule.exports = __webpack_require__(1).isIterable = function(it){\n\t  var O = Object(it);\n\t  return O[ITERATOR] !== undefined\n\t    || '@@iterator' in O\n\t    || Iterators.hasOwnProperty(classof(O));\n\t};\n\n/***/ },\n/* 104 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar ctx            = __webpack_require__(37)\n\t  , $export        = __webpack_require__(3)\n\t  , toObject       = __webpack_require__(20)\n\t  , call           = __webpack_require__(85)\n\t  , isArrayIter    = __webpack_require__(83)\n\t  , toLength       = __webpack_require__(45)\n\t  , createProperty = __webpack_require__(80)\n\t  , getIterFn      = __webpack_require__(47);\n\t\n\t$export($export.S + $export.F * !__webpack_require__(87)(function(iter){ Array.from(iter); }), 'Array', {\n\t  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n\t  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n\t    var O       = toObject(arrayLike)\n\t      , C       = typeof this == 'function' ? this : Array\n\t      , aLen    = arguments.length\n\t      , mapfn   = aLen > 1 ? arguments[1] : undefined\n\t      , mapping = mapfn !== undefined\n\t      , index   = 0\n\t      , iterFn  = getIterFn(O)\n\t      , length, result, step, iterator;\n\t    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n\t    // if object isn't iterable or it's array with default iterator - use simple case\n\t    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n\t      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n\t        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n\t      }\n\t    } else {\n\t      length = toLength(O.length);\n\t      for(result = new C(length); length > index; index++){\n\t        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n\t      }\n\t    }\n\t    result.length = index;\n\t    return result;\n\t  }\n\t});\n\n\n/***/ },\n/* 105 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\tvar addToUnscopables = __webpack_require__(78)\n\t  , step             = __webpack_require__(88)\n\t  , Iterators        = __webpack_require__(7)\n\t  , toIObject        = __webpack_require__(19);\n\t\n\t// 22.1.3.4 Array.prototype.entries()\n\t// 22.1.3.13 Array.prototype.keys()\n\t// 22.1.3.29 Array.prototype.values()\n\t// 22.1.3.30 Array.prototype[@@iterator]()\n\tmodule.exports = __webpack_require__(41)(Array, 'Array', function(iterated, kind){\n\t  this._t = toIObject(iterated); // target\n\t  this._i = 0;                   // next index\n\t  this._k = kind;                // kind\n\t// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n\t}, function(){\n\t  var O     = this._t\n\t    , kind  = this._k\n\t    , index = this._i++;\n\t  if(!O || index >= O.length){\n\t    this._t = undefined;\n\t    return step(1);\n\t  }\n\t  if(kind == 'keys'  )return step(0, index);\n\t  if(kind == 'values')return step(0, O[index]);\n\t  return step(0, [index, O[index]]);\n\t}, 'values');\n\t\n\t// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\n\tIterators.Arguments = Iterators.Array;\n\t\n\taddToUnscopables('keys');\n\taddToUnscopables('values');\n\taddToUnscopables('entries');\n\n/***/ },\n/* 106 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 20.1.2.3 Number.isInteger(number)\n\tvar $export = __webpack_require__(3);\n\t\n\t$export($export.S, 'Number', {isInteger: __webpack_require__(84)});\n\n/***/ },\n/* 107 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 20.1.2.4 Number.isNaN(number)\n\tvar $export = __webpack_require__(3);\n\t\n\t$export($export.S, 'Number', {\n\t  isNaN: function isNaN(number){\n\t    return number != number;\n\t  }\n\t});\n\n/***/ },\n/* 108 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.3.1 Object.assign(target, source)\n\tvar $export = __webpack_require__(3);\n\t\n\t$export($export.S + $export.F, 'Object', {assign: __webpack_require__(90)});\n\n/***/ },\n/* 109 */\n/***/ function(module, exports, __webpack_require__) {\n\n\tvar $export = __webpack_require__(3);\n\t// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n\t$export($export.S + $export.F * !__webpack_require__(9), 'Object', {defineProperty: __webpack_require__(12).f});\n\n/***/ },\n/* 110 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 19.1.2.14 Object.keys(O)\n\tvar toObject = __webpack_require__(20)\n\t  , $keys    = __webpack_require__(18);\n\t\n\t__webpack_require__(96)('keys', function(){\n\t  return function keys(it){\n\t    return $keys(toObject(it));\n\t  };\n\t});\n\n/***/ },\n/* 111 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\n\tvar $export   = __webpack_require__(3)\n\t  , aFunction = __webpack_require__(34)\n\t  , anObject  = __webpack_require__(6)\n\t  , rApply    = (__webpack_require__(5).Reflect || {}).apply\n\t  , fApply    = Function.apply;\n\t// MS Edge argumentsList argument is optional\n\t$export($export.S + $export.F * !__webpack_require__(10)(function(){\n\t  rApply(function(){});\n\t}), 'Reflect', {\n\t  apply: function apply(target, thisArgument, argumentsList){\n\t    var T = aFunction(target)\n\t      , L = anObject(argumentsList);\n\t    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n\t  }\n\t});\n\n/***/ },\n/* 112 */\n/***/ function(module, exports, __webpack_require__) {\n\n\t// https://github.com/tc39/proposal-object-values-entries\n\tvar $export  = __webpack_require__(3)\n\t  , $entries = __webpack_require__(97)(true);\n\t\n\t$export($export.S, 'Object', {\n\t  entries: function entries(it){\n\t    return $entries(it);\n\t  }\n\t});\n\n/***/ },\n/* 113 */\n/***/ function(module, exports) {\n\n\t// removed by extract-text-webpack-plugin\n\n/***/ }\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// mdl-ext.min.js"," \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\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\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.loaded = 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// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 82005ea981e272a97aa0","var core = module.exports = {version: '2.4.0'};\nif(typeof __e == 'number')__e = core; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_core.js\n// module id = 1\n// module chunks = 0 1","'use strict';\n\nconst VK_TAB         = 9;\nconst VK_ENTER       = 13;\nconst VK_ESC         = 27;\nconst VK_SPACE       = 32;\nconst VK_PAGE_UP     = 33;\nconst VK_PAGE_DOWN   = 34;\nconst VK_END         = 35;\nconst VK_HOME        = 36;\nconst VK_ARROW_LEFT  = 37;\nconst VK_ARROW_UP    = 38;\nconst VK_ARROW_RIGHT = 39;\nconst VK_ARROW_DOWN  = 40;\n\nconst ARIA_EXPANDED        = 'aria-expanded';\nconst ARIA_HIDDEN          = 'aria-hidden';\nconst ARIA_MULTISELECTABLE = 'aria-multiselectable';\nconst ARIA_SELECTED        = 'aria-selected';\n\nconst IS_DIRTY      = 'is-dirty';\nconst IS_DISABLED   = 'is-disabled';\nconst IS_EXPANDED   = 'is-expanded';\nconst IS_FOCUSED    = 'is-focused';\nconst IS_INVALID    = 'is-invalid';\nconst IS_UPGRADED   = 'is-upgraded';\nconst DATA_UPGRADED = 'data-upgraded';\n\nconst MDL_RIPPLE                      = 'mdl-ripple';\nconst MDL_RIPPLE_COMPONENT            = 'MaterialRipple';\nconst MDL_RIPPLE_EFFECT               = 'mdl-js-ripple-effect';\nconst MDL_RIPPLE_EFFECT_IGNORE_EVENTS = 'mdl-js-ripple-effect--ignore-events';\n\nexport {\n  VK_TAB,\n  VK_ENTER,\n  VK_ESC,\n  VK_SPACE,\n  VK_PAGE_UP,\n  VK_PAGE_DOWN ,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN ,\n  ARIA_EXPANDED,\n  ARIA_HIDDEN,\n  ARIA_MULTISELECTABLE,\n  ARIA_SELECTED,\n  IS_DIRTY,\n  IS_DISABLED,\n  IS_EXPANDED,\n  IS_FOCUSED,\n  IS_INVALID,\n  IS_UPGRADED,\n  DATA_UPGRADED ,\n  MDL_RIPPLE,\n  MDL_RIPPLE_COMPONENT,\n  MDL_RIPPLE_EFFECT,\n  MDL_RIPPLE_EFFECT_IGNORE_EVENTS\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/constants.js","var global    = require('./_global')\n  , core      = require('./_core')\n  , ctx       = require('./_ctx')\n  , hide      = require('./_hide')\n  , PROTOTYPE = 'prototype';\n\nvar $export = function(type, name, source){\n  var IS_FORCED = type & $export.F\n    , IS_GLOBAL = type & $export.G\n    , IS_STATIC = type & $export.S\n    , IS_PROTO  = type & $export.P\n    , IS_BIND   = type & $export.B\n    , IS_WRAP   = type & $export.W\n    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})\n    , expProto  = exports[PROTOTYPE]\n    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]\n    , key, own, out;\n  if(IS_GLOBAL)source = name;\n  for(key in source){\n    // contains in native\n    own = !IS_FORCED && target && target[key] !== undefined;\n    if(own && key in exports)continue;\n    // export native or passed\n    out = own ? target[key] : source[key];\n    // prevent global pollution for namespaces\n    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n    // bind timers to global for call from export context\n    : IS_BIND && own ? ctx(out, global)\n    // wrap global constructors for prevent change them in library\n    : IS_WRAP && target[key] == out ? (function(C){\n      var F = function(a, b, c){\n        if(this instanceof C){\n          switch(arguments.length){\n            case 0: return new C;\n            case 1: return new C(a);\n            case 2: return new C(a, b);\n          } return new C(a, b, c);\n        } return C.apply(this, arguments);\n      };\n      F[PROTOTYPE] = C[PROTOTYPE];\n      return F;\n    // make static versions for prototype methods\n    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n    if(IS_PROTO){\n      (exports.virtual || (exports.virtual = {}))[key] = out;\n      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);\n    }\n  }\n};\n// type bitmap\n$export.F = 1;   // forced\n$export.G = 2;   // global\n$export.S = 4;   // static\n$export.P = 8;   // proto\n$export.B = 16;  // bind\n$export.W = 32;  // wrap\n$export.U = 64;  // safe\n$export.R = 128; // real proto method for `library` \nmodule.exports = $export;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_export.js\n// module id = 3\n// module chunks = 0 1","var store      = require('./_shared')('wks')\n  , uid        = require('./_uid')\n  , Symbol     = require('./_global').Symbol\n  , USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function(name){\n  return store[name] || (store[name] =\n    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_wks.js\n// module id = 4\n// module chunks = 0 1","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();\nif(typeof __g == 'number')__g = global; // eslint-disable-line no-undef\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_global.js\n// module id = 5\n// module chunks = 0 1","var isObject = require('./_is-object');\nmodule.exports = function(it){\n  if(!isObject(it))throw TypeError(it + ' is not an object!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_an-object.js\n// module id = 6\n// module chunks = 0 1","module.exports = {};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iterators.js\n// module id = 7\n// module chunks = 0 1","\"use strict\";\n\nexports.__esModule = true;\n\nvar _from = require(\"../core-js/array/from\");\n\nvar _from2 = _interopRequireDefault(_from);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) {\n      arr2[i] = arr[i];\n    }\n\n    return arr2;\n  } else {\n    return (0, _from2.default)(arr);\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/toConsumableArray.js\n// module id = 8\n// module chunks = 0 1","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function(){\n  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_descriptors.js\n// module id = 9\n// module chunks = 0 1","module.exports = function(exec){\n  try {\n    return !!exec();\n  } catch(e){\n    return true;\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_fails.js\n// module id = 10\n// module chunks = 0 1","var dP         = require('./_object-dp')\n  , createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function(object, key, value){\n  return dP.f(object, key, createDesc(1, value));\n} : function(object, key, value){\n  object[key] = value;\n  return object;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_hide.js\n// module id = 11\n// module chunks = 0 1","var anObject       = require('./_an-object')\n  , IE8_DOM_DEFINE = require('./_ie8-dom-define')\n  , toPrimitive    = require('./_to-primitive')\n  , dP             = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes){\n  anObject(O);\n  P = toPrimitive(P, true);\n  anObject(Attributes);\n  if(IE8_DOM_DEFINE)try {\n    return dP(O, P, Attributes);\n  } catch(e){ /* empty */ }\n  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');\n  if('value' in Attributes)O[P] = Attributes.value;\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-dp.js\n// module id = 12\n// module chunks = 0 1","/**\n * Since some events can fire at a high rate, the event handler should be limited to execute computationally\n * expensive operations, such as DOM modifications, inside a single rendered frame.\n * When listening to e.g. scroll and resize events, the browser tends to fire off more events per\n * second than are actually useful. For instance, if your event listener sets some element positions, then it\n * is possible for those positions to be updated multiple times in a single rendered frame. In this case, all of\n * the layout calculations triggered by setting the elements' positions will be wasted except for the one time that\n * it runs immediately prior to the browser rendering the updated layout to the screen.\n * To avoid wasting cycles, we can use requestAnimationFrame to only run the event listener once just before the page\n * is rendered to the screen.\n * *\n * @param callback the function to throttle\n * @param context  optional context of this, default to global\n * @return {function(...[*])}\n */\nconst fullThrottle = (callback, context) => {\n\n  if (!context) {\n    context = this || window;\n  }\n\n  let throttling = false;\n\n  return (...args) => {\n    if(!throttling) {\n      throttling = true;\n      window.requestAnimationFrame( () => {\n        throttling = false;\n        return Reflect.apply(callback, context, args);\n      });\n    }\n  };\n};\n\nexport default fullThrottle;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/full-throttle.js","'use strict';\n\n/**\n * Converts a JSON string to object\n * @param jsonString\n * @param source\n */\nconst jsonStringToObject = (jsonString, source = {} ) => {\n  const s = jsonString.replace(/'/g, '\"');\n  try {\n    return Object.assign(source, JSON.parse(s));\n  }\n  catch (e) {\n    throw new Error(`Failed to parse json string: ${s}. Error: ${e.message}`);\n  }\n};\n\nexport { jsonStringToObject };\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/json-utils.js","'use strict';\n\n/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * A javascript utility for conditionally creating a list of strings.\n * The function takes any number of arguments which can be a string or object.\n * Inspired by (but not copied from) JedWatson/classnames, https://github.com/JedWatson/classnames\n *\n * @param  {*} args the strings and/or objects to\n * @return {Array} a list of strings\n * @example\n * // Returns ['foo', 'bar', 'baz', 'quux']\n * stringList(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });\n * @example see the tests for more examples\n */\nconst stringList = (...args) => {\n\n  const isString = str => str != null && typeof str === 'string';\n\n  const flatten = list => list.reduce((a, b) => a.concat(Array.isArray(b) ? flatten(b) : b), []);\n\n  const objectToStrings = arg =>\n    Object.keys(arg)\n      .filter(key => arg[key])\n      .map(key => key);\n\n  return args\n    .filter(arg => !!arg)\n    .map(arg => isString(arg) ? arg : objectToStrings(arg))\n    .reduce((result, arg) => result.concat(Array.isArray(arg) ? flatten(arg) : arg), []);\n};\n\n/**\n * A simple javascript utility for conditionally joining strings together.\n * The function takes a delimiter string and any number of arguments which can be a string or object.\n *\n * @param delimiter delimiter to separate joined strings\n * @param  {*} args the strings and/or objects to join\n * @return {String} the joined strings\n * @example\n * // Returns 'foo, bar, baz, quux'\n * joinStrings(', ', 'foo', { bar: true, duck: false }, 'baz', { quux: true });\n * @example see the tests for more examples\n */\nconst joinStrings = (delimiter = ' ', ...args) => stringList(...args).join(delimiter);\n\n/**\n * Generates a random string with a given length\n * @param n {Integer} length of generated string\n * @see http://stackoverflow.com/questions/1349404/generate-random-string-characters-in-javascript\n * @return {String} the random string\n * @example\n * // Returns e.g. 'pd781w0y'\n * randomString(8);\n * @example see the tests for more examples\n */\nconst randomString = ( n=12 ) => Array( n+1 ).join((`${Math.random().toString(36)}00000000000000000`).slice(2, 18)).slice(0, n);\n\nexport { joinStrings, randomString, stringList };\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/string-utils.js","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function(it, key){\n  return hasOwnProperty.call(it, key);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_has.js\n// module id = 16\n// module chunks = 0 1","module.exports = function(it){\n  return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-object.js\n// module id = 17\n// module chunks = 0 1","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys       = require('./_object-keys-internal')\n  , enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O){\n  return $keys(O, enumBugKeys);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-keys.js\n// module id = 18\n// module chunks = 0 1","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject')\n  , defined = require('./_defined');\nmodule.exports = function(it){\n  return IObject(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-iobject.js\n// module id = 19\n// module chunks = 0 1","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function(it){\n  return Object(defined(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-object.js\n// module id = 20\n// module chunks = 0 1","/**\n * Remove child element(s)\n * element.innerHTNL = '' has a performance penality!\n * @see http://jsperf.com/empty-an-element/16\n * @see http://jsperf.com/force-reflow\n * @param element\n * @param forceReflow\n */\nconst removeChildElements = (element, forceReflow = true) => {\n\n  // See: http://jsperf.com/empty-an-element/16\n  while (element.lastChild) {\n    element.removeChild(element.lastChild);\n  }\n  if(forceReflow) {\n    // See: http://jsperf.com/force-reflow\n    const d = element.style.display;\n\n    element.style.display = 'none';\n    element.style.display = d;\n  }\n};\n\n/**\n * Moves child elements from a DOM node to another dom node.\n * @param source {HTMLElement}\n * @param target {HTMLElement} If the target parameter is ommited, a document fragment is created\n * @return {HTMLElement} The target node\n *\n * @example\n * // Moves child elements from a DOM node to another dom node.\n * moveElements(source, destination);\n *\n * @example\n * // If the second parameter is ommited, a document fragment is created:\n * let fragment = moveElements(source);\n *\n * @See: https://github.com/webmodules/dom-move\n */\nconst moveElements = (source, target) => {\n  if (!target) {\n    target = source.ownerDocument.createDocumentFragment();\n  }\n  while (source.firstChild) {\n    target.appendChild(source.firstChild);\n  }\n  return target;\n};\n\n\n/**\n * Get the browser viewport dimensions\n * @see http://stackoverflow.com/questions/1248081/get-the-browser-viewport-dimensions-with-javascript\n * @return {{windowWidth: number, windowHeight: number}}\n */\nconst getWindowViewport = () => {\n  return {\n    viewportWidth: Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0),\n    viewportHeight: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0)\n  };\n};\n\n\n/**\n * Check whether an element is in the window viewport\n * @see http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport/\n * @param top\n * @param left\n * @param bottom\n * @param right\n * @return {boolean} true if rectangle is inside window viewport, otherwise false\n */\nconst isRectInsideWindowViewport = ({ top, left, bottom, right }) => {\n  const { viewportWidth, viewportHeight } = getWindowViewport();\n  return top >= 0 &&\n    left >= 0 &&\n    bottom <= viewportHeight &&\n    right <= viewportWidth;\n};\n\n\n/**\n * Get a list of parent elements that can possibly scroll\n * @param el the element to get parents for\n * @returns {Array}\n */\nconst getScrollParents = el => {\n  const elements = [];\n\n  /*\n  for (el = el.parentNode; el; el = el.parentNode) {\n    const cs = window.getComputedStyle(el);\n    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {\n      elements.unshift(el);\n    }\n    if(el === document.body) {\n      break;\n    }\n  }\n  */\n\n  let element = el.parentNode;\n  while (element) {\n    const cs = window.getComputedStyle(element);\n    if(!(cs.overflowY === 'hidden' && cs.overflowX === 'hidden')) {\n      elements.unshift(element);\n    }\n    if(element === document.body) {\n      break;\n    }\n    element = element.parentNode;\n  }\n\n  return elements;\n};\n\n/**\n * Get a list of parent elements, from a given element to a given element\n * @param {HTMLElement} from\n * @param {HTMLElement} to\n * @return {Array<HTMLElement>} the parent elements, not including from and to\n */\nconst getParentElements = (from, to) => {\n  const result = [];\n  let element = from.parentNode;\n  while (element) {\n    if(element === to) {\n      break;\n    }\n    result.unshift(element);\n    element = element.parentNode;\n  }\n  return result;\n};\n\n/**\n * Position element next to button\n *\n * Positioning strategy\n *  1. element.height > viewport.height\n *     let element.height = viewport.heigt\n *     let element.overflow-y = auto\n *  2. element.width > viewport.width\n *     let element.width = viewport.width\n *  3. position element below button, align left edge of element with button left\n *       done if element inside viewport\n *  4. position element below button, align right edge of element with button right\n *       done if element inside viewport\n *  5. positions element above button, aligns left edge of element with button left\n *       done if element inside viewport\n *  6. position element above the control element, aligned to its right.\n *       done if element inside viewport\n *  7. position element at button right hand side, aligns element top with button top\n *       done if element inside viewport\n *  8. position element at button left hand side, aligns element top with button top\n *       done if element inside viewport\n *  9. position element inside viewport\n *     1. position element at viewport bottom\n *     2. position element at button right hand side\n *        done if element inside viewport\n *     3. position element at button left hand side\n *       done if element inside viewport\n *     4. position element at viewport right\n * 10. done\n *\n */\nconst tether = (controlledBy, element) => {\n  const controlRect = controlledBy.getBoundingClientRect();\n\n  // 1. will element height fit inside window viewport?\n  const { viewportWidth, viewportHeight } = getWindowViewport();\n\n  element.style.height = 'auto';\n  //element.style.overflowY = 'hidden';\n  if(element.offsetHeight > viewportHeight) {\n    element.style.height = `${viewportHeight}px`;\n    element.style.overflowY = 'auto';\n  }\n\n  // 2. will element width fit inside window viewport?\n  element.style.width = 'auto';\n  if(element.offsetWidth > viewportWidth) {\n    element.style.width = `${viewportWidth}px`;\n  }\n\n  const elementRect = element.getBoundingClientRect();\n\n  // element to control distance\n  const dy = controlRect.top - elementRect.top;\n  const dx = controlRect.left - elementRect.left;\n\n  // element rect, window coordinates relative to top,left of control\n  const top = elementRect.top + dy;\n  const left = elementRect.left + dx;\n  const bottom = top + elementRect.height;\n  const right = left + elementRect.width;\n\n  // Position relative to control\n  let ddy = dy;\n  let ddx = dx;\n\n  if(isRectInsideWindowViewport({\n    top: top + controlRect.height,\n    left: left,\n    bottom: bottom + controlRect.height,\n    right: right\n  })) {\n    // 3 position element below the control element, aligned to its left\n    ddy = controlRect.height + dy;\n    //console.log('***** 3');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top + controlRect.height,\n    left: left + controlRect.width - elementRect.width,\n    bottom: bottom + controlRect.height,\n    right: left + controlRect.width\n  })) {\n    // 4 position element below the control element, aligned to its right\n    ddy = controlRect.height + dy;\n    ddx = dx + controlRect.width - elementRect.width;\n    //console.log('***** 4');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top - elementRect.height,\n    left: left,\n    bottom: bottom - elementRect.height,\n    right: right\n  })) {\n    // 5. position element above the control element, aligned to its left.\n    ddy = dy - elementRect.height;\n    //console.log('***** 5');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top - elementRect.height,\n    left: left + controlRect.width - elementRect.width,\n    bottom: bottom - elementRect.height,\n    right: left + controlRect.width\n  })) {\n    // 6. position element above the control element, aligned to its right.\n    ddy = dy - elementRect.height;\n    ddx = dx + controlRect.width - elementRect.width;\n    //console.log('***** 6');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top,\n    left: left + controlRect.width,\n    bottom: bottom,\n    right: right + controlRect.width\n  })) {\n    // 7. position element at button right hand side\n    ddx = controlRect.width + dx;\n    //console.log('***** 7');\n  }\n  else if(isRectInsideWindowViewport({\n    top: top,\n    left: left - controlRect.width,\n    bottom: bottom,\n    right: right - controlRect.width\n  })) {\n    // 8. position element at button left hand side\n    ddx = dx - elementRect.width;\n    //console.log('***** 8');\n  }\n  else {\n    // 9. position element inside viewport, near controlrect if possible\n    //console.log('***** 9');\n\n    // 9.1 position element near controlrect bottom\n    ddy =  dy - bottom + viewportHeight;\n    if(top + controlRect.height >= 0 && bottom + controlRect.height <= viewportHeight) {\n      ddy = controlRect.height + dy;\n    }\n    else if(top - elementRect.height >= 0 && bottom - elementRect.height <= viewportHeight) {\n      ddy = dy - elementRect.height;\n    }\n\n    if(left + elementRect.width + controlRect.width <= viewportWidth) {\n      // 9.2 Position element at button right hand side\n      ddx = controlRect.width + dx;\n      //console.log('***** 9.2');\n    }\n    else if(left - elementRect.width >= 0) {\n      // 9.3 Position element at button left hand side\n      ddx = dx - elementRect.width;\n      //console.log('***** 9.3');\n    }\n    else {\n      // 9.4 position element at (near) viewport right\n      const r = left + elementRect.width - viewportWidth;\n      ddx = dx - r;\n      //console.log('***** 9.4');\n    }\n  }\n\n  // 10. done\n  element.style.top = `${element.offsetTop + ddy}px`;\n  element.style.left = `${element.offsetLeft + ddx}px`;\n  //console.log('***** 10. done');\n};\n\n/**\n * Check if the given element can receive focus\n * @param {HTMLElement} element the element to check\n * @return {boolean} true if the element is focusable, otherwise false\n */\nconst isFocusable = (element) => {\n  // https://github.com/stephenmathieson/is-focusable/blob/master/index.js\n  // http://stackoverflow.com/questions/1599660/which-html-elements-can-receive-focus\n\n  if (element.hasAttribute('tabindex')) {\n    const tabindex = element.getAttribute('tabindex');\n    if (!Number.isNaN(tabindex)) {\n      return parseInt(tabindex) > -1;\n    }\n  }\n\n  if (element.hasAttribute('contenteditable') &&\n    element.getAttribute('contenteditable') !== 'false') {\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes#attr-contenteditable\n    return true;\n  }\n\n  // natively focusable, but only when enabled\n  const selector = /input|select|textarea|button|details/i;\n  const name = element.nodeName;\n  if (selector.test(name)) {\n    return element.type.toLowerCase() !== 'hidden' && !element.disabled;\n  }\n\n  // anchors and area must have an href\n  if (name === 'A' || name === 'AREA') {\n    return !!element.href;\n  }\n\n  if (name === 'IFRAME') {\n    // Check visible iframe\n    const cs = window.getComputedStyle(element);\n    return cs.getPropertyValue('display').toLowerCase() !== 'none';\n  }\n\n  return false;\n};\n\n\n/**\n * Get a list of offset parents for given element\n * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript\n * @param el the element\n * @return {Array} a list of offset parents\n */\n/*\nconst offsetParents = (el) => {\n  const elements = [];\n  for (; el; el = el.offsetParent) {\n    elements.unshift(el);\n  }\n  if(!elements.find(e => e === document.body)) {\n    elements.unshift(document.body);\n  }\n  return elements;\n};\n*/\n\n/**\n * Finds the common offset ancestor of two DOM nodes\n * @see https://www.benpickles.com/articles/51-finding-a-dom-nodes-common-ancestor-using-javascript\n * @see https://gist.github.com/benpickles/4059636\n * @param a\n * @param b\n * @return {Element} The common offset ancestor of a and b\n */\n/*\nconst commonOffsetAncestor = (a, b) => {\n  const parentsA = offsetParents(a);\n  const parentsB = offsetParents(b);\n\n  for (let i = 0; i < parentsA.length; i++) {\n    if (parentsA[i] !== parentsB[i]) return parentsA[i-1];\n  }\n};\n*/\n\n/**\n * Calculate position relative to a target element\n * @see http://stackoverflow.com/questions/21064101/understanding-offsetwidth-clientwidth-scrollwidth-and-height-respectively\n * @param target\n * @param el\n * @return {{top: number, left: number}}\n */\n/*\nconst calcPositionRelativeToTarget = (target, el) => {\n  let top = 0;\n  let left = 0;\n\n  while(el) {\n    top += (el.offsetTop - el.scrollTop + el.clientTop) || 0;\n    left += (el.offsetLeft - el.scrollLeft + el.clientLeft) || 0;\n    el = el.offsetParent;\n\n    if(el === target) {\n      break;\n    }\n  }\n  return { top: top, left: left };\n};\n*/\n\nexport {\n  getWindowViewport,\n  getParentElements,\n  getScrollParents,\n  isFocusable,\n  isRectInsideWindowViewport,\n  moveElements,\n  removeChildElements,\n  tether,\n};\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/dom-utils.js","\"use strict\";\n\nexports.__esModule = true;\n\nexports.default = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/classCallCheck.js\n// module id = 22\n// module chunks = 0 1","\"use strict\";\n\nexports.__esModule = true;\n\nvar _defineProperty = require(\"../core-js/object/define-property\");\n\nvar _defineProperty2 = _interopRequireDefault(_defineProperty);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      (0, _defineProperty2.default)(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/createClass.js\n// module id = 23\n// module chunks = 0 1","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function(it){\n  if(it == undefined)throw TypeError(\"Can't call method on  \" + it);\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_defined.js\n// module id = 24\n// module chunks = 0 1","module.exports = function(bitmap, value){\n  return {\n    enumerable  : !(bitmap & 1),\n    configurable: !(bitmap & 2),\n    writable    : !(bitmap & 4),\n    value       : value\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_property-desc.js\n// module id = 25\n// module chunks = 0 1","var shared = require('./_shared')('keys')\n  , uid    = require('./_uid');\nmodule.exports = function(key){\n  return shared[key] || (shared[key] = uid(key));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_shared-key.js\n// module id = 26\n// module chunks = 0 1","// 7.1.4 ToInteger\nvar ceil  = Math.ceil\n  , floor = Math.floor;\nmodule.exports = function(it){\n  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-integer.js\n// module id = 27\n// module chunks = 0 1","'use strict';\nvar $at  = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function(iterated){\n  this._t = String(iterated); // target\n  this._i = 0;                // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , index = this._i\n    , point;\n  if(index >= O.length)return {value: undefined, done: true};\n  point = $at(O, index);\n  this._i += point.length;\n  return {value: point, done: false};\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.string.iterator.js\n// module id = 28\n// module chunks = 0 1","'use strict';\n\n// See: http://robertpenner.com/easing/\n\nconst easeInOutQuad = (t, b, c, d) => {\n  t /= d / 2;\n  if(t < 1) return c / 2 * t * t + b;\n  t--;\n  return -c / 2 * (t * (t - 2) - 1) + b;\n};\n\nconst inOutQuintic = (t, b, c, d) => {\n  const ts = (t/=d)*t;\n  const tc = ts*t;\n  return b+c*(6*tc*ts + -15*ts*ts + 10*tc);\n};\n\nexport { easeInOutQuad, inOutQuintic };\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/easing.js","const MIN_INERVAL = 1000/60;\n\n/**\n * Trigger a callback at a given interval\n * @param interval defaults to 1000/60 ms\n * @return {function()} reference to start, stop, immediate and started\n */\n\nconst intervalFunction = ( interval = MIN_INERVAL ) => {\n\n  let lapse = interval < MIN_INERVAL ? MIN_INERVAL : interval;\n  let cb = undefined;\n  let next = null;\n  let timeElapsed = 0;\n\n  const execute = () => {\n    const f = cb(timeElapsed);\n    if (!f) {\n      cancel();\n    }\n  };\n\n  const cancel = () => {\n    if(next) {\n      window.cancelAnimationFrame(next);\n    }\n    next = null;\n    timeElapsed = 0;\n  };\n\n  const start = () => {\n    let timeStart = Date.now();\n\n    const loop = now => {\n      if (next) {\n        next = window.requestAnimationFrame( () => loop( Date.now() ));\n\n        timeElapsed += now - timeStart;\n\n        if(timeElapsed >= lapse) {\n          execute();\n          if( (timeElapsed -= lapse) > lapse) {\n            // time elapsed - interval_ > interval_ , indicates inactivity\n            // Could be due to browser minimized, tab changed, screen saver started, computer sleep, and so on\n            timeElapsed = 0;\n          }\n        }\n        timeStart = now;\n      }\n    };\n\n    next = 1;  // a truthy value for first loop\n    loop( timeStart );\n  };\n\n  return {\n    get started() {\n      return next != null;\n    },\n    get interval() {\n      return lapse;\n    },\n    set interval(value) {\n      lapse = value < MIN_INERVAL ? MIN_INERVAL : value;\n    },\n    start(callback) {\n      if(typeof callback !== 'function') {\n        throw new TypeError('callback parameter must be a function');\n      }\n      cb = callback;\n      start();\n    },\n    immediate() {\n      if(!cb) {\n        throw new ReferenceError('callback parameter is not defined. Call start before immediate.');\n      }\n      execute();\n    },\n    stop: () => cancel(),\n  };\n};\n\nexport default intervalFunction;\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/interval-function.js","module.exports = { \"default\": require(\"core-js/library/fn/get-iterator\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/get-iterator.js\n// module id = 31\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/number/is-integer\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/number/is-integer.js\n// module id = 32\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/assign\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/assign.js\n// module id = 33\n// module chunks = 0 1","module.exports = function(it){\n  if(typeof it != 'function')throw TypeError(it + ' is not a function!');\n  return it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_a-function.js\n// module id = 34\n// module chunks = 0 1","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof')\n  , TAG = require('./_wks')('toStringTag')\n  // ES3 wrong here\n  , ARG = cof(function(){ return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function(it, key){\n  try {\n    return it[key];\n  } catch(e){ /* empty */ }\n};\n\nmodule.exports = function(it){\n  var O, T, B;\n  return it === undefined ? 'Undefined' : it === null ? 'Null'\n    // @@toStringTag case\n    : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n    // builtinTag case\n    : ARG ? cof(O)\n    // ES3 arguments fallback\n    : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_classof.js\n// module id = 35\n// module chunks = 0 1","var toString = {}.toString;\n\nmodule.exports = function(it){\n  return toString.call(it).slice(8, -1);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_cof.js\n// module id = 36\n// module chunks = 0 1","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function(fn, that, length){\n  aFunction(fn);\n  if(that === undefined)return fn;\n  switch(length){\n    case 1: return function(a){\n      return fn.call(that, a);\n    };\n    case 2: return function(a, b){\n      return fn.call(that, a, b);\n    };\n    case 3: return function(a, b, c){\n      return fn.call(that, a, b, c);\n    };\n  }\n  return function(/* ...args */){\n    return fn.apply(that, arguments);\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_ctx.js\n// module id = 37\n// module chunks = 0 1","var isObject = require('./_is-object')\n  , document = require('./_global').document\n  // in old IE typeof document.createElement is 'object'\n  , is = isObject(document) && isObject(document.createElement);\nmodule.exports = function(it){\n  return is ? document.createElement(it) : {};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_dom-create.js\n// module id = 38\n// module chunks = 0 1","// IE 8- don't enum bug keys\nmodule.exports = (\n  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_enum-bug-keys.js\n// module id = 39\n// module chunks = 0 1","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){\n  return cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iobject.js\n// module id = 40\n// module chunks = 0 1","'use strict';\nvar LIBRARY        = require('./_library')\n  , $export        = require('./_export')\n  , redefine       = require('./_redefine')\n  , hide           = require('./_hide')\n  , has            = require('./_has')\n  , Iterators      = require('./_iterators')\n  , $iterCreate    = require('./_iter-create')\n  , setToStringTag = require('./_set-to-string-tag')\n  , getPrototypeOf = require('./_object-gpo')\n  , ITERATOR       = require('./_wks')('iterator')\n  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`\n  , FF_ITERATOR    = '@@iterator'\n  , KEYS           = 'keys'\n  , VALUES         = 'values';\n\nvar returnThis = function(){ return this; };\n\nmodule.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){\n  $iterCreate(Constructor, NAME, next);\n  var getMethod = function(kind){\n    if(!BUGGY && kind in proto)return proto[kind];\n    switch(kind){\n      case KEYS: return function keys(){ return new Constructor(this, kind); };\n      case VALUES: return function values(){ return new Constructor(this, kind); };\n    } return function entries(){ return new Constructor(this, kind); };\n  };\n  var TAG        = NAME + ' Iterator'\n    , DEF_VALUES = DEFAULT == VALUES\n    , VALUES_BUG = false\n    , proto      = Base.prototype\n    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]\n    , $default   = $native || getMethod(DEFAULT)\n    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined\n    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native\n    , methods, key, IteratorPrototype;\n  // Fix native\n  if($anyNative){\n    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));\n    if(IteratorPrototype !== Object.prototype){\n      // Set @@toStringTag to native iterators\n      setToStringTag(IteratorPrototype, TAG, true);\n      // fix for some old engines\n      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);\n    }\n  }\n  // fix Array#{values, @@iterator}.name in V8 / FF\n  if(DEF_VALUES && $native && $native.name !== VALUES){\n    VALUES_BUG = true;\n    $default = function values(){ return $native.call(this); };\n  }\n  // Define iterator\n  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){\n    hide(proto, ITERATOR, $default);\n  }\n  // Plug for library\n  Iterators[NAME] = $default;\n  Iterators[TAG]  = returnThis;\n  if(DEFAULT){\n    methods = {\n      values:  DEF_VALUES ? $default : getMethod(VALUES),\n      keys:    IS_SET     ? $default : getMethod(KEYS),\n      entries: $entries\n    };\n    if(FORCED)for(key in methods){\n      if(!(key in proto))redefine(proto, key, methods[key]);\n    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n  }\n  return methods;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-define.js\n// module id = 41\n// module chunks = 0 1","exports.f = {}.propertyIsEnumerable;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-pie.js\n// module id = 42\n// module chunks = 0 1","var def = require('./_object-dp').f\n  , has = require('./_has')\n  , TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function(it, tag, stat){\n  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_set-to-string-tag.js\n// module id = 43\n// module chunks = 0 1","var global = require('./_global')\n  , SHARED = '__core-js_shared__'\n  , store  = global[SHARED] || (global[SHARED] = {});\nmodule.exports = function(key){\n  return store[key] || (store[key] = {});\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_shared.js\n// module id = 44\n// module chunks = 0 1","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer')\n  , min       = Math.min;\nmodule.exports = function(it){\n  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-length.js\n// module id = 45\n// module chunks = 0 1","var id = 0\n  , px = Math.random();\nmodule.exports = function(key){\n  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_uid.js\n// module id = 46\n// module chunks = 0 1","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function(it){\n  if(it != undefined)return it[ITERATOR]\n    || it['@@iterator']\n    || Iterators[classof(it)];\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.get-iterator-method.js\n// module id = 47\n// module chunks = 0 1","require('./es6.array.iterator');\nvar global        = require('./_global')\n  , hide          = require('./_hide')\n  , Iterators     = require('./_iterators')\n  , TO_STRING_TAG = require('./_wks')('toStringTag');\n\nfor(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){\n  var NAME       = collections[i]\n    , Collection = global[NAME]\n    , proto      = Collection && Collection.prototype;\n  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);\n  Iterators[NAME] = Iterators.Array;\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/web.dom.iterable.js\n// module id = 48\n// module chunks = 0 1","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * A WAI-ARIA friendly accordion component.\n * An accordion is a collection of expandable panels associated with a common outer container. Panels consist\n * of a header and an associated content region or tabpanel. The primary use of an Accordion is to present multiple sections\n * of content on a single page without scrolling, where all of the sections are peers in the application or object hierarchy.\n * The general look is similar to a tree where each root tree node is an expandable accordion header. The user navigates\n * and makes the contents of each panel visible (or not) by interacting with the Accordion Header\n */\n\nimport {\n  VK_ENTER,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_EXPANDED,\n  IS_UPGRADED,\n  ARIA_MULTISELECTABLE,\n  ARIA_EXPANDED,\n  ARIA_HIDDEN,\n  ARIA_SELECTED\n} from '../utils/constants';\n\n\n(function() {\n  'use strict';\n  const ACCORDION            = 'mdlext-accordion';\n  const ACCORDION_VERTICAL   = 'mdlext-accordion--vertical';\n  const ACCORDION_HORIZONTAL = 'mdlext-accordion--horizontal';\n  const PANEL                = 'mdlext-accordion__panel';\n  const PANEL_ROLE           = 'presentation';\n  const TAB                  = 'mdlext-accordion__tab';\n  const TAB_CAPTION          = 'mdlext-accordion__tab__caption';\n  const TAB_ROLE             = 'tab';\n  const TABPANEL             = 'mdlext-accordion__tabpanel';\n  const TABPANEL_ROLE        = 'tabpanel';\n  const RIPPLE_EFFECT        = 'mdlext-js-ripple-effect';\n  const RIPPLE               = 'mdlext-accordion__tab--ripple';\n  const ANIMATION_EFFECT     = 'mdlext-js-animation-effect';\n  const ANIMATION            = 'mdlext-accordion__tabpanel--animation';\n\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtAccordion = function MaterialExtAccordion( element ) {\n\n    // Stores the Accordion HTML element.\n    this.element_ = element;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtAccordion'] = MaterialExtAccordion;\n\n\n  // Helpers\n  const accordionPanelElements = ( element ) => {\n    if(!element) {\n      return {\n        panel: null,\n        tab: null,\n        tabpanel: null\n      };\n    }\n    else if (element.classList.contains(PANEL)) {\n      return {\n        panel: element,\n        tab: element.querySelector(`.${TAB}`),\n        tabpanel: element.querySelector(`.${TABPANEL}`)\n      };\n    }\n    else {\n      return {\n        panel: element.parentNode,\n        tab: element.parentNode.querySelector(`.${TAB}`),\n        tabpanel: element.parentNode.querySelector(`.${TABPANEL}`)\n      };\n    }\n  };\n\n\n  // Private methods.\n\n  /**\n   * Handles custom command event, 'open', 'close', 'toggle' or upgrade\n   * @param event. A custom event\n   * @private\n   */\n  MaterialExtAccordion.prototype.commandHandler_ = function( event ) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if(event && event.detail) {\n      this.command(event.detail);\n    }\n  };\n\n  /**\n   * Dispatch toggle event\n   * @param {string} state\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.dispatchToggleEvent_ = function ( state, tab, tabpanel ) {\n    const ce = new CustomEvent('toggle', {\n      bubbles: true,\n      cancelable: true,\n      detail: { state: state, tab: tab, tabpanel: tabpanel }\n    });\n    this.element_.dispatchEvent(ce);\n  };\n\n  /**\n   * Open tab\n   * @param {Element} panel\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.openTab_ = function( panel, tab, tabpanel ) {\n    panel.classList.add(IS_EXPANDED);\n    tab.setAttribute(ARIA_EXPANDED, 'true');\n    tabpanel.removeAttribute('hidden');\n    tabpanel.setAttribute(ARIA_HIDDEN, 'false');\n    this.dispatchToggleEvent_('open', tab, tabpanel);\n  };\n\n  /**\n   * Close tab\n   * @param {Element} panel\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.closeTab_ = function( panel, tab, tabpanel ) {\n    panel.classList.remove(IS_EXPANDED);\n    tab.setAttribute(ARIA_EXPANDED, 'false');\n    tabpanel.setAttribute('hidden', '');\n    tabpanel.setAttribute(ARIA_HIDDEN, 'true');\n    this.dispatchToggleEvent_('close', tab, tabpanel);\n  };\n\n  /**\n   * Toggle tab\n   * @param {Element} panel\n   * @param {Element} tab\n   * @param {Element} tabpanel\n   * @private\n   */\n  MaterialExtAccordion.prototype.toggleTab_ = function( panel, tab, tabpanel ) {\n    if( !(this.element_.hasAttribute('disabled') || tab.hasAttribute('disabled')) ) {\n      if (tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {\n        this.closeTab_(panel, tab, tabpanel);\n      }\n      else {\n        if (this.element_.getAttribute(ARIA_MULTISELECTABLE).toLowerCase() !== 'true') {\n          this.closeTabs_();\n        }\n        this.openTab_(panel, tab, tabpanel);\n      }\n    }\n  };\n\n  /**\n   * Open tabs\n   * @private\n   */\n  MaterialExtAccordion.prototype.openTabs_ = function() {\n    if (this.element_.getAttribute(ARIA_MULTISELECTABLE).toLowerCase() === 'true') {\n      [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}`)]\n        .filter(panel => !panel.classList.contains(IS_EXPANDED))\n        .forEach(closedItem => {\n          const tab = closedItem.querySelector(`.${TAB}`);\n          if (!tab.hasAttribute('disabled')) {\n            this.openTab_(closedItem, tab, closedItem.querySelector(`.${TABPANEL}`));\n          }\n        });\n    }\n  };\n\n  /**\n   * Close tabs\n   * @private\n   */\n  MaterialExtAccordion.prototype.closeTabs_ = function() {\n    [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}.${IS_EXPANDED}`)]\n      .forEach( panel => {\n        const tab = panel.querySelector(`.${TAB}`);\n        if(!tab.hasAttribute('disabled')) {\n          this.closeTab_(panel, tab, panel.querySelector(`.${TABPANEL}`));\n        }\n      });\n  };\n\n\n  // Public methods.\n\n  /**\n   * Upgrade an individual accordion tab\n   * @public\n   * @param {Element} tabElement The HTML element for the accordion panel.\n   */\n  MaterialExtAccordion.prototype.upgradeTab = function( tabElement ) {\n\n    const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n\n    const disableTab = () => {\n      panel.classList.remove(IS_EXPANDED);\n      tab.setAttribute('tabindex', '-1');\n      tab.setAttribute(ARIA_EXPANDED, 'false');\n      tabpanel.setAttribute('hidden', '');\n      tabpanel.setAttribute(ARIA_HIDDEN, 'true');\n    };\n\n    const enableTab = () => {\n      if(!tab.hasAttribute(ARIA_EXPANDED)) {\n        tab.setAttribute(ARIA_EXPANDED, 'false');\n      }\n\n      tab.setAttribute('tabindex', '0');\n\n      if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {\n        panel.classList.add(IS_EXPANDED);\n        tabpanel.removeAttribute('hidden');\n        tabpanel.setAttribute(ARIA_HIDDEN, 'false');\n      }\n      else {\n        panel.classList.remove(IS_EXPANDED);\n        tabpanel.setAttribute('hidden', '');\n        tabpanel.setAttribute(ARIA_HIDDEN, 'true');\n      }\n    };\n\n    // In horizontal layout, caption must have a max-width defined to prevent pushing elements to the right of the caption out of view.\n    // In JsDom, offsetWidth and offsetHeight properties do not work, so this function is not testable.\n    /* istanbul ignore next */\n    const calcMaxTabCaptionWidth = () => {\n\n      const tabCaption = tab.querySelector(`.${TAB_CAPTION}`);\n      if(tabCaption !== null) {\n        const w = [...tab.children]\n          .filter( el => el.classList && !el.classList.contains(TAB_CAPTION) )\n          .reduce( (v, el) => v + el.offsetWidth, 0 );\n\n        const maxWidth = tab.clientHeight - w;\n        if(maxWidth > 0) {\n          tabCaption.style['max-width'] = `${maxWidth}px`;\n        }\n      }\n    };\n\n    const selectTab = () => {\n      if( !tab.hasAttribute(ARIA_SELECTED) ) {\n        [...this.element_.querySelectorAll(`.${TAB}[aria-selected=\"true\"]`)].forEach(\n          selectedTab => selectedTab.removeAttribute(ARIA_SELECTED)\n        );\n        tab.setAttribute(ARIA_SELECTED, 'true');\n      }\n    };\n\n    const tabClickHandler = () => {\n      this.toggleTab_(panel, tab, tabpanel);\n      selectTab();\n    };\n\n    const tabFocusHandler = () => {\n      selectTab();\n    };\n\n    const tabpanelClickHandler = () => {\n      selectTab();\n    };\n\n    const tabpanelFocusHandler = () => {\n      selectTab();\n    };\n\n    const tabKeydownHandler = e => {\n\n      if(this.element_.hasAttribute('disabled')) {\n        return;\n      }\n\n      if ( e.keyCode === VK_END        || e.keyCode === VK_HOME\n        || e.keyCode === VK_ARROW_UP   || e.keyCode === VK_ARROW_LEFT\n        || e.keyCode === VK_ARROW_DOWN || e.keyCode === VK_ARROW_RIGHT ) {\n\n        let nextTab = null;\n        let keyCode = e.keyCode;\n\n        if (keyCode === VK_HOME) {\n          nextTab = this.element_.querySelector(`.${PANEL}:first-child > .${TAB}`);\n          if(nextTab && nextTab.hasAttribute('disabled')) {\n            nextTab = null;\n            keyCode = VK_ARROW_DOWN;\n          }\n        }\n        else if (keyCode === VK_END) {\n          nextTab = this.element_.querySelector(`.${PANEL}:last-child > .${TAB}`);\n          if(nextTab && nextTab.hasAttribute('disabled')) {\n            nextTab = null;\n            keyCode = VK_ARROW_UP;\n          }\n        }\n\n        if(!nextTab) {\n          let nextPanel = panel;\n\n          do {\n            if (keyCode === VK_ARROW_UP || keyCode === VK_ARROW_LEFT) {\n              nextPanel = nextPanel.previousElementSibling;\n              if(!nextPanel) {\n                nextPanel = this.element_.querySelector(`.${PANEL}:last-child`);\n              }\n              if (nextPanel) {\n                nextTab = nextPanel.querySelector(`.${PANEL} > .${TAB}`);\n              }\n            }\n            else if (keyCode === VK_ARROW_DOWN || keyCode === VK_ARROW_RIGHT) {\n              nextPanel = nextPanel.nextElementSibling;\n              if(!nextPanel) {\n                nextPanel = this.element_.querySelector(`.${PANEL}:first-child`);\n              }\n              if (nextPanel) {\n                nextTab = nextPanel.querySelector(`.${PANEL} > .${TAB}`);\n              }\n            }\n\n            if(nextTab && nextTab.hasAttribute('disabled')) {\n              nextTab = null;\n            }\n            else {\n              break;\n            }\n          }\n          while(nextPanel !== panel);\n        }\n\n        if (nextTab) {\n          e.preventDefault();\n          e.stopPropagation();\n          nextTab.focus();\n\n          // Workaround for JSDom testing:\n          // In JsDom 'element.focus()' does not trigger any focus event\n          if(!nextTab.hasAttribute(ARIA_SELECTED)) {\n\n            [...this.element_.querySelectorAll(`.${TAB}[aria-selected=\"true\"]`)]\n              .forEach( selectedTab => selectedTab.removeAttribute(ARIA_SELECTED) );\n\n            nextTab.setAttribute(ARIA_SELECTED, 'true');\n          }\n        }\n      }\n      else if (e.keyCode === VK_ENTER || e.keyCode === VK_SPACE) {\n        e.preventDefault();\n        e.stopPropagation();\n        this.toggleTab_(panel, tab, tabpanel);\n      }\n    };\n\n    if(tab === null) {\n      throw new Error('There must be a tab element for each accordion panel.');\n    }\n\n    if(tabpanel === null) {\n      throw new Error('There must be a tabpanel element for each accordion panel.');\n    }\n\n    panel.setAttribute('role', PANEL_ROLE);\n    tab.setAttribute('role', TAB_ROLE);\n    tabpanel.setAttribute('role', TABPANEL_ROLE);\n\n    if(tab.hasAttribute('disabled')) {\n      disableTab();\n    }\n    else {\n      enableTab();\n    }\n\n    if( this.element_.classList.contains(ACCORDION_HORIZONTAL)) {\n      calcMaxTabCaptionWidth();\n    }\n\n    if (this.element_.classList.contains(RIPPLE_EFFECT)) {\n      tab.classList.add(RIPPLE);\n    }\n\n    if (this.element_.classList.contains(ANIMATION_EFFECT)) {\n      tabpanel.classList.add(ANIMATION);\n    }\n\n    // Remove listeners, just in case ...\n    tab.removeEventListener('click', tabClickHandler);\n    tab.removeEventListener('focus', tabFocusHandler);\n    tab.removeEventListener('keydown', tabKeydownHandler);\n    tabpanel.removeEventListener('click', tabpanelClickHandler);\n    tabpanel.removeEventListener('focus', tabpanelFocusHandler);\n\n    tab.addEventListener('click', tabClickHandler);\n    tab.addEventListener('focus', tabFocusHandler);\n    tab.addEventListener('keydown', tabKeydownHandler);\n    tabpanel.addEventListener('click', tabpanelClickHandler, true);\n    tabpanel.addEventListener('focus', tabpanelFocusHandler, true);\n  };\n  MaterialExtAccordion.prototype['upgradeTab'] = MaterialExtAccordion.prototype.upgradeTab;\n\n\n  /**\n   * Execute command\n   * @param detail\n   */\n  MaterialExtAccordion.prototype.command = function( detail ) {\n\n    const openTab = tabElement => {\n\n      if(tabElement === undefined) {\n        this.openTabs_();\n      }\n      else if(tabElement !== null) {\n        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n        if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() !== 'true') {\n          this.toggleTab_(panel, tab, tabpanel);\n        }\n      }\n    };\n\n    const closeTab = tabElement => {\n      if(tabElement === undefined) {\n        this.closeTabs_();\n      }\n      else if(tabElement !== null) {\n        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n\n        if(tab.getAttribute(ARIA_EXPANDED).toLowerCase() === 'true') {\n          this.toggleTab_(panel, tab, tabpanel);\n        }\n      }\n    };\n\n    const toggleTab = tabElement => {\n      if(tabElement) {\n        const { panel, tab, tabpanel } = accordionPanelElements( tabElement );\n        this.toggleTab_(panel, tab, tabpanel);\n      }\n    };\n\n\n    if(detail && detail.action) {\n      const { action, target } = detail;\n\n      switch (action.toLowerCase()) {\n        case 'open':\n          openTab(target);\n          break;\n        case 'close':\n          closeTab(target);\n          break;\n        case 'toggle':\n          toggleTab(target);\n          break;\n        case 'upgrade':\n          if(target) {\n            this.upgradeTab(target);\n          }\n          break;\n        default:\n          throw new Error(`Unknown action \"${action}\". Action must be one of \"open\", \"close\", \"toggle\" or \"upgrade\"`);\n      }\n    }\n  };\n  MaterialExtAccordion.prototype['command'] = MaterialExtAccordion.prototype.command;\n\n\n  /**\n   * Initialize component\n   */\n  MaterialExtAccordion.prototype.init = function() {\n    if (this.element_) {\n      // Do the init required for this component to work\n      if( !(this.element_.classList.contains(ACCORDION_HORIZONTAL) || this.element_.classList.contains(ACCORDION_VERTICAL))) {\n        throw new Error(`Accordion must have one of the classes \"${ACCORDION_HORIZONTAL}\" or \"${ACCORDION_VERTICAL}\"`);\n      }\n\n      this.element_.setAttribute('role', 'tablist');\n\n      if(!this.element_.hasAttribute(ARIA_MULTISELECTABLE)) {\n        this.element_.setAttribute(ARIA_MULTISELECTABLE, 'false');\n      }\n\n      this.element_.removeEventListener('command', this.commandHandler_);\n      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\n      [...this.element_.querySelectorAll(`.${ACCORDION} > .${PANEL}`)].forEach( panel => this.upgradeTab(panel) );\n\n      // Set upgraded flag\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to downgrade\n   *\n   MaterialExtAccordion.prototype.mdlDowngrade_ = function() {\n     'use strict';\n     console.log('***** MaterialExtAccordion.mdlDowngrade');\n   };\n   */\n\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtAccordion,\n    classAsString: 'MaterialExtAccordion',\n    cssClass: 'mdlext-js-accordion',\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/accordion/accordion.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * Image carousel\n */\n\nimport intervalFunction from '../utils/interval-function';\nimport { inOutQuintic } from '../utils/easing';\nimport { jsonStringToObject} from '../utils/json-utils';\nimport {\n  VK_TAB,\n  VK_ENTER,\n  VK_ESC,\n  VK_SPACE,\n  VK_PAGE_UP,\n  VK_PAGE_DOWN,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED,\n  IS_FOCUSED,\n  MDL_RIPPLE,\n  MDL_RIPPLE_COMPONENT,\n  MDL_RIPPLE_EFFECT,\n  MDL_RIPPLE_EFFECT_IGNORE_EVENTS\n} from '../utils/constants';\n\nconst MDL_RIPPLE_CONTAINER = 'mdlext-carousel__slide__ripple-container';\n\n\n(function() {\n  'use strict';\n\n  //const CAROUSEL = 'mdlext-carousel';\n  const SLIDE      = 'mdlext-carousel__slide';\n  const ROLE       = 'list';\n  const SLIDE_ROLE = 'listitem';\n\n\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtCarousel = function MaterialExtCarousel(element) {\n    // Stores the element.\n    this.element_ = element;\n\n    // Default config\n    this.config_ = {\n      interactive  : true,\n      autostart    : false,\n      type         : 'slide',\n      interval     : 1000,\n      animationLoop: intervalFunction(1000)\n    };\n\n    this.scrollAnimation_ = intervalFunction(33);\n\n    // Initialize instance.\n    this.init();\n  };\n\n  window['MaterialExtCarousel'] = MaterialExtCarousel;\n\n\n  /**\n   * Start slideshow animation\n   * @private\n   */\n  MaterialExtCarousel.prototype.startSlideShow_ = function() {\n\n    const nextSlide = () => {\n      let slide = this.element_.querySelector(`.${SLIDE}[aria-selected]`);\n      if(slide) {\n        slide.removeAttribute('aria-selected');\n        slide = slide.nextElementSibling;\n      }\n      if(!slide) {\n        slide = this.element_.querySelector(`.${SLIDE}:first-child`);\n        this.animateScroll_(0);\n      }\n      if(slide) {\n        this.moveSlideIntoViewport_(slide);\n        slide.setAttribute('aria-selected', '');\n        this.emitSelectEvent_('next', null, slide);\n        return true;\n      }\n      return false;\n    };\n\n    const nextScroll = direction => {\n      let nextDirection = direction;\n\n      if('next' === direction &&  this.element_.scrollLeft === this.element_.scrollWidth - this.element_.clientWidth) {\n        nextDirection = 'prev';\n      }\n      else if(this.element_.scrollLeft === 0) {\n        nextDirection = 'next';\n      }\n      const x = 'next' === nextDirection\n        ?  Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth)\n        :  Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);\n\n      this.animateScroll_(x, 1000);\n      return nextDirection;\n    };\n\n\n    if(!this.config_.animationLoop.started) {\n      this.config_.animationLoop.interval = this.config_.interval;\n      let direction = 'next';\n\n      if('scroll' === this.config_.type) {\n        this.config_.animationLoop.start( () => {\n          direction = nextScroll(direction);\n          return true; // It runs until cancelSlideShow_ is triggered\n        });\n      }\n      else {\n        nextSlide();\n        this.config_.animationLoop.start( () => {\n          return nextSlide(); // It runs until cancelSlideShow_ is triggered\n        });\n      }\n    }\n\n    // TODO: Pause animation when carousel is not in browser viewport or user changes tab\n  };\n\n  /**\n   * Cancel slideshow if running. Emmits a 'pause' event\n   * @private\n   */\n  MaterialExtCarousel.prototype.cancelSlideShow_ = function() {\n    if(this.config_.animationLoop.started) {\n      this.config_.animationLoop.stop();\n      this.emitSelectEvent_('pause', VK_ESC, this.element_.querySelector(`.${SLIDE}[aria-selected]`));\n    }\n  };\n\n  /**\n   * Animate scroll\n   * @param newPosition\n   * @param newDuration\n   * @param completedCallback\n   * @private\n   */\n  MaterialExtCarousel.prototype.animateScroll_ = function( newPosition, newDuration, completedCallback ) {\n\n    const start = this.element_.scrollLeft;\n    const distance = newPosition - start;\n\n    if(distance !== 0) {\n      const duration = Math.max(Math.min(Math.abs(distance), newDuration||400), 100); // duration is between 100 and newDuration||400ms||distance\n      let t = 0;\n      this.scrollAnimation_.stop();\n      this.scrollAnimation_.start( timeElapsed => {\n        t += timeElapsed;\n        if(t < duration) {\n          this.element_.scrollLeft = inOutQuintic(t, start, distance, duration);\n          return true;\n        }\n        else {\n          this.element_.scrollLeft = newPosition;\n          if(completedCallback) {\n            completedCallback();\n          }\n          return false;\n        }\n      });\n    }\n    else {\n      if(completedCallback) {\n        completedCallback();\n      }\n    }\n  };\n\n  /**\n   * Execute commend\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.command_ = function( event ) {\n    let x = 0;\n    let slide = null;\n    const a = event.detail.action.toLowerCase();\n\n    // Cancel slideshow if running\n    this.cancelSlideShow_();\n\n    switch (a) {\n      case 'first':\n        slide = this.element_.querySelector(`.${SLIDE}:first-child`);\n        break;\n\n      case 'last':\n        x = this.element_.scrollWidth - this.element_.clientWidth;\n        slide = this.element_.querySelector(`.${SLIDE}:last-child`);\n        break;\n\n      case 'scroll-prev':\n        x = Math.max(this.element_.scrollLeft - this.element_.clientWidth, 0);\n        break;\n\n      case 'scroll-next':\n        x = Math.min(this.element_.scrollLeft + this.element_.clientWidth, this.element_.scrollWidth - this.element_.clientWidth);\n        break;\n\n      case 'next':\n      case 'prev':\n        slide = this.element_.querySelector(`.${SLIDE}[aria-selected]`);\n        if(slide) {\n          slide = a === 'next' ? slide.nextElementSibling : slide.previousElementSibling;\n          this.setAriaSelected_(slide);\n          this.emitSelectEvent_(a, null,  slide);\n        }\n        return;\n\n      case 'play':\n        Object.assign(this.config_, event.detail);\n        this.startSlideShow_();\n        return;\n\n      case 'pause':\n        return;\n\n      default:\n        return;\n    }\n\n    this.animateScroll_(x, undefined, () => {\n      if ('scroll-next' === a || 'scroll-prev' === a) {\n        const slides = this.getSlidesInViewport_();\n        if (slides.length > 0) {\n          slide = 'scroll-next' === a ? slides[0] : slides[slides.length - 1];\n        }\n      }\n      this.setAriaSelected_(slide);\n      this.emitSelectEvent_(a, null, slide);\n    });\n  };\n\n  /**\n   * Handles custom command event, 'scroll-prev', 'scroll-next', 'first', 'last', next, prev, play, pause\n   * @param event. A custom event\n   * @private\n   */\n  MaterialExtCarousel.prototype.commandHandler_ = function( event ) {\n    event.preventDefault();\n    event.stopPropagation();\n    if(event.detail && event.detail.action) {\n      this.command_(event);\n    }\n  };\n\n  /**\n   * Handle keypress\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.keyDownHandler_ = function(event) {\n\n    if (event && event.target && event.target !== this.element_) {\n\n      let action = 'first';\n\n      if ( event.keyCode === VK_HOME    || event.keyCode === VK_END\n        || event.keyCode === VK_PAGE_UP || event.keyCode === VK_PAGE_DOWN) {\n\n        event.preventDefault();\n        if (event.keyCode === VK_END) {\n          action = 'last';\n        }\n        else if (event.keyCode === VK_PAGE_UP) {\n          action = 'scroll-prev';\n        }\n        else if (event.keyCode === VK_PAGE_DOWN) {\n          action = 'scroll-next';\n        }\n\n        const cmd = new CustomEvent('select', {\n          detail: {\n            action: action,\n          }\n        });\n        this.command_(cmd);\n      }\n      else if ( event.keyCode === VK_TAB\n        || event.keyCode === VK_ENTER      || event.keyCode === VK_SPACE\n        || event.keyCode === VK_ARROW_UP   || event.keyCode === VK_ARROW_LEFT\n        || event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {\n\n        let slide = getSlide_(event.target);\n\n        if(!slide) {\n          return;\n        }\n\n        // Cancel slideshow if running\n        this.cancelSlideShow_();\n\n        switch (event.keyCode) {\n          case VK_ARROW_UP:\n          case VK_ARROW_LEFT:\n            action = 'prev';\n            slide = slide.previousElementSibling;\n            break;\n\n          case VK_ARROW_DOWN:\n          case VK_ARROW_RIGHT:\n            action = 'next';\n            slide = slide.nextElementSibling;\n            break;\n\n          case VK_TAB:\n            if (event.shiftKey) {\n              action = 'prev';\n              slide = slide.previousElementSibling;\n            }\n            else {\n              action = 'next';\n              slide = slide.nextElementSibling;\n            }\n            break;\n\n          case VK_SPACE:\n          case VK_ENTER:\n            action = 'select';\n            break;\n        }\n\n        if(slide) {\n          event.preventDefault();\n          setFocus_(slide);\n          this.emitSelectEvent_(action, event.keyCode, slide);\n        }\n      }\n    }\n  };\n\n  /**\n   * Handle dragging\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.dragHandler_ = function(event) {\n    event.preventDefault();\n\n    // Cancel slideshow if running\n    this.cancelSlideShow_();\n\n    let updating = false;\n    let rAFDragId = 0;\n\n    const startX = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);\n    let prevX = startX;\n    const targetElement = event.target;\n\n    const update = e => {\n      const currentX = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0));\n      const dx = prevX - currentX;\n\n      if(dx < 0) {\n        this.element_.scrollLeft = Math.max(this.element_.scrollLeft + dx, 0);\n      }\n      else if(dx > 0) {\n        this.element_.scrollLeft = Math.min(this.element_.scrollLeft + dx, this.element_.scrollWidth - this.element_.clientWidth);\n      }\n\n      prevX = currentX;\n      updating = false;\n    };\n\n    // drag handler\n    const drag = e => {\n      e.preventDefault();\n\n      if(!updating) {\n        rAFDragId = window.requestAnimationFrame( () => update(e));\n        updating = true;\n      }\n    };\n\n    // end drag handler\n    const endDrag = e => {\n      e.preventDefault();\n\n      this.element_.removeEventListener('mousemove', drag);\n      this.element_.removeEventListener('touchmove', drag);\n      window.removeEventListener('mouseup', endDrag);\n      window.removeEventListener('touchend', endDrag);\n\n      // cancel any existing drag rAF, see: http://www.html5rocks.com/en/tutorials/speed/animations/\n      window.cancelAnimationFrame(rAFDragId);\n\n      const slide = getSlide_(targetElement);\n      setFocus_(slide);\n      this.emitSelectEvent_('click', null,  slide);\n    };\n\n    this.element_.addEventListener('mousemove', drag);\n    this.element_.addEventListener('touchmove', drag);\n    window.addEventListener('mouseup', endDrag);\n    window.addEventListener('touchend',endDrag);\n  };\n\n  /**\n   * Handle click\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.clickHandler_ = function(event) {\n    // Click is handled by drag\n    event.preventDefault();\n  };\n\n  /**\n   * Handle focus\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.focusHandler_ = function(event) {\n    const slide = getSlide_(event.target);\n    if(slide) {\n      // The last focused/selected slide has 'aria-selected', even if focus is lost\n      this.setAriaSelected_(slide);\n      slide.classList.add(IS_FOCUSED);\n    }\n  };\n\n  /**\n   * Handle blur\n   * @param event\n   * @private\n   */\n  MaterialExtCarousel.prototype.blurHandler_ = function(event) {\n    const slide = getSlide_(event.target);\n    if(slide) {\n      slide.classList.remove(IS_FOCUSED);\n    }\n  };\n\n  /**\n   * Emits a custeom 'select' event\n   * @param command\n   * @param keyCode\n   * @param slide\n   * @private\n   */\n  MaterialExtCarousel.prototype.emitSelectEvent_ = function(command, keyCode, slide) {\n\n    if(slide) {\n      this.moveSlideIntoViewport_(slide);\n\n      const evt = new CustomEvent('select', {\n        bubbles: true,\n        cancelable: true,\n        detail: {\n          command: command,\n          keyCode: keyCode,\n          source: slide\n        }\n      });\n      this.element_.dispatchEvent(evt);\n    }\n  };\n\n  /**\n   * Get the first visible slide in component viewport\n   * @private\n   */\n  MaterialExtCarousel.prototype.getSlidesInViewport_ = function() {\n    const carouselRect = this.element_.getBoundingClientRect();\n\n    const slidesInViewport = [...this.element_.querySelectorAll(`.${SLIDE}`)].filter( slide => {\n      const slideRect = slide.getBoundingClientRect();\n      return slideRect.left >= carouselRect.left && slideRect.right <= carouselRect.right;\n    });\n    return slidesInViewport;\n  };\n\n  /**\n   * Move slide into component viewport - if needed\n   * @param slide\n   * @private\n   */\n  MaterialExtCarousel.prototype.moveSlideIntoViewport_ = function(slide) {\n    const carouselRect = this.element_.getBoundingClientRect();\n    const slideRect = slide.getBoundingClientRect();\n\n    if(slideRect.left < carouselRect.left) {\n      const x = this.element_.scrollLeft - (carouselRect.left - slideRect.left);\n      this.animateScroll_(x);\n    }\n    else if(slideRect.right > carouselRect.right) {\n      const x = this.element_.scrollLeft - (carouselRect.right - slideRect.right);\n      this.animateScroll_(x);\n    }\n  };\n\n\n  /**\n   * Removes 'aria-selected' from all slides in carousel\n   * @private\n   */\n  MaterialExtCarousel.prototype.setAriaSelected_ = function(slide) {\n    if(slide) {\n      [...this.element_.querySelectorAll(`.${SLIDE}[aria-selected]`)].forEach(\n        slide => slide.removeAttribute('aria-selected')\n      );\n      slide.setAttribute('aria-selected', '');\n    }\n  };\n\n  /**\n   * Removes event listeners\n   * @private\n   */\n  MaterialExtCarousel.prototype.removeListeners_ = function() {\n    this.element_.removeEventListener('focus', this.focusHandler_);\n    this.element_.removeEventListener('blur', this.blurHandler_);\n    this.element_.removeEventListener('keydown', this.keyDownHandler_);\n    this.element_.removeEventListener('mousedown', this.dragHandler_);\n    this.element_.removeEventListener('touchstart', this.dragHandler_);\n    this.element_.removeEventListener('click', this.clickHandler_, false);\n    this.element_.removeEventListener('command', this.commandHandler_);\n    this.element_.removeEventListener('mdl-componentdowngraded', this.mdlDowngrade_);\n  };\n\n\n  // Helpers\n  const getSlide_ = element => {\n    return element.closest(`.${SLIDE}`);\n  };\n\n  const setFocus_ = slide => {\n    if(slide) {\n      slide.focus();\n    }\n  };\n\n  const addRipple_ = slide => {\n    if(!slide.querySelector(`.${MDL_RIPPLE_CONTAINER}`)) {\n      const rippleContainer = document.createElement('span');\n      rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);\n      rippleContainer.classList.add(MDL_RIPPLE_EFFECT);\n      const ripple = document.createElement('span');\n      ripple.classList.add(MDL_RIPPLE);\n      rippleContainer.appendChild(ripple);\n\n      const img = slide.querySelector('img');\n      if (img) {\n        // rippleContainer blocks image title\n        rippleContainer.title = img.title;\n      }\n      slide.appendChild(rippleContainer);\n      componentHandler.upgradeElement(rippleContainer, MDL_RIPPLE_COMPONENT);\n    }\n  };\n  // End helpers\n\n\n  // Public methods.\n\n  /**\n   * Cancel animation - if running.\n   *\n   * @public\n   */\n  MaterialExtCarousel.prototype.stopAnimation = function() {\n    this.config_.animationLoop.stop();\n  };\n  MaterialExtCarousel.prototype['stopAnimation'] = MaterialExtCarousel.prototype.stopAnimation;\n\n\n  /**\n   * Upgrade slides\n   * Use if more list elements are added later (dynamically)\n   *\n   * @public\n   */\n  MaterialExtCarousel.prototype.upgradeSlides = function() {\n\n    const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);\n\n    [...this.element_.querySelectorAll(`.${SLIDE}`)].forEach( slide => {\n\n      slide.setAttribute('role', SLIDE_ROLE);\n\n      if(this.config_.interactive) {\n        if(!slide.getAttribute('tabindex')) {\n          slide.setAttribute('tabindex', '0');\n        }\n        if (hasRippleEffect) {\n          addRipple_(slide);\n        }\n      }\n      else {\n        slide.setAttribute('tabindex', '-1');\n      }\n    });\n  };\n  MaterialExtCarousel.prototype['upgradeSlides'] = MaterialExtCarousel.prototype.upgradeSlides;\n\n\n  /**\n   * Get config object\n   *\n   * @public\n   */\n  MaterialExtCarousel.prototype.getConfig = function() {\n    return this.config_;\n  };\n  MaterialExtCarousel.prototype['getConfig'] = MaterialExtCarousel.prototype.getConfig;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtCarousel.prototype.init = function() {\n\n    if (this.element_) {\n      // Config\n      if(this.element_.hasAttribute('data-config')) {\n        this.config_ = jsonStringToObject(this.element_.getAttribute('data-config'), this.config_);\n      }\n\n      // Wai-Aria\n      this.element_.setAttribute('role', ROLE);\n\n      // Prefer tabindex -1\n      if(!Number.isInteger(this.element_.getAttribute('tabindex'))) {\n        this.element_.setAttribute('tabindex', -1);\n      }\n\n      // Remove listeners, just in case ...\n      this.removeListeners_();\n\n      if(this.config_.interactive) {\n\n        // Ripple\n        const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);\n        if (hasRippleEffect) {\n          this.element_.classList.add(MDL_RIPPLE_EFFECT_IGNORE_EVENTS);\n        }\n\n        // Listen to focus/blur events\n        this.element_.addEventListener('focus', this.focusHandler_.bind(this), true);\n        this.element_.addEventListener('blur', this.blurHandler_.bind(this), true);\n\n        // Listen to keyboard events\n        this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this), false);\n\n        // Listen to drag events\n        this.element_.addEventListener('mousedown', this.dragHandler_.bind(this), false);\n        this.element_.addEventListener('touchstart', this.dragHandler_.bind(this), false);\n\n        // Listen to click events\n        this.element_.addEventListener('click', this.clickHandler_.bind(this), false);\n      }\n\n      // Listen to custom 'command' event\n      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n\n      // Listen to 'mdl-componentdowngraded' event\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n\n      // Slides collection\n      this.upgradeSlides();\n\n      // Set upgraded flag\n      this.element_.classList.add(IS_UPGRADED);\n\n      if(this.config_.autostart) {\n        // Start slideshow\n        this.startSlideShow_();\n      }\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtCarousel.prototype.mdlDowngrade_ = function() {\n    'use strict';\n    //console.log('***** MaterialExtCarousel.mdlDowngrade_');\n\n    // Stop animation - if any\n    this.stopAnimation();\n\n    // Remove listeners\n    this.removeListeners_();\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtCarousel,\n    classAsString: 'MaterialExtCarousel',\n    cssClass: 'mdlext-js-carousel',\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/carousel/carousel.js","/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\n/**\n * A collapsible is a component to mark expandable and collapsible regions.\n * The component use the aria-expanded state to indicate whether regions of\n * the content are collapsible, and to expose whether a region is currently\n * expanded or collapsed.\n * @see https://www.w3.org/WAI/GL/wiki/Using_the_WAI-ARIA_aria-expanded_state_to_mark_expandable_and_collapsible_regions\n */\n\nimport {\n  IS_UPGRADED,\n  VK_SPACE,\n  VK_ENTER,\n} from '../utils/constants';\n\nimport { randomString } from '../utils/string-utils';\nimport { getParentElements, isFocusable } from '../utils/dom-utils';\n\nconst JS_COLLAPSIBLE = 'mdlext-js-collapsible';\nconst COLLAPSIBLE_CONTROL_CLASS = 'mdlext-collapsible';\nconst COLLAPSIBLE_GROUP_CLASS = 'mdlext-collapsible-group';\nconst COLLAPSIBLE_REGION_CLASS = 'mdlext-collapsible-region';\n\n/**\n * The collapsible component\n */\n\nclass Collapsible {\n  element_ = null;\n  controlElement_ = null;\n\n  /**\n   * @constructor\n   * @param {HTMLElement} element The element that this component is connected to.\n   */\n  constructor(element) {\n    this.element_ = element;\n    this.init();\n  }\n\n  keyDownHandler = event => {\n    if (event.keyCode === VK_ENTER || event.keyCode === VK_SPACE) {\n      event.preventDefault();\n\n      // Trigger click\n      (event.target || this.controlElement).dispatchEvent(\n        new MouseEvent('click', {\n          bubbles: true,\n          cancelable: true,\n          view: window\n        })\n      );\n    }\n  };\n\n  clickHandler = event => {\n    if(!this.isDisabled) {\n      if(event.target !== this.controlElement) {\n        // Do not toggle if a focusable element inside the control element triggered the event\n        const p = getParentElements(event.target, this.controlElement);\n        p.push(event.target);\n        if(p.find( el => isFocusable(el))) {\n          return;\n        }\n      }\n      this.toggle();\n    }\n  };\n\n  get element() {\n    return this.element_;\n  }\n\n  get controlElement() {\n    return this.controlElement_;\n  }\n\n  get isDisabled() {\n    return (this.controlElement.hasAttribute('disabled') &&\n      this.controlElement.getAttribute('disabled').toLowerCase() !== 'false') ||\n      (this.controlElement.hasAttribute('aria-disabled') &&\n      this.controlElement.getAttribute('aria-disabled').toLowerCase() !== 'false');\n  }\n\n  get isExpanded() {\n    return this.controlElement.hasAttribute('aria-expanded') &&\n      this.controlElement.getAttribute('aria-expanded').toLowerCase() === 'true';\n  }\n\n  get regionIds() {\n    return this.controlElement.hasAttribute('aria-controls')\n      ? this.controlElement.getAttribute('aria-controls').split(' ')\n      : [];\n  }\n\n  get regionElements() {\n    return this.regionIds\n      .map(id => document.querySelector(`#${id}`))\n      .filter( el => el != null);\n  }\n\n  collapse() {\n    if(!this.isDisabled && this.isExpanded) {\n      if(this.dispatchToggleEvent('collapse')) {\n        this.controlElement.setAttribute('aria-expanded', 'false');\n        const regions = this.regionElements.slice(0);\n        for (let i = regions.length - 1; i >= 0; --i) {\n          regions[i].setAttribute('hidden', '');\n        }\n      }\n    }\n  }\n\n  expand() {\n    if(!this.isDisabled && !this.isExpanded) {\n      if(this.dispatchToggleEvent('expand')) {\n        this.controlElement.setAttribute('aria-expanded', 'true');\n        this.regionElements.forEach(region => region.removeAttribute('hidden'));\n      }\n    }\n  }\n\n  toggle() {\n    if (this.isExpanded) {\n      this.collapse();\n    }\n    else {\n      this.expand();\n    }\n  }\n\n  dispatchToggleEvent(action) {\n    return this.element.dispatchEvent(\n      new CustomEvent('toggle', {\n        bubbles: true,\n        cancelable: true,\n        detail: {\n          action: action\n        }\n      })\n    );\n  }\n\n  disableToggle() {\n    this.controlElement.setAttribute('aria-disabled', true);\n  }\n\n  enableToggle() {\n    this.controlElement.removeAttribute('aria-disabled');\n  }\n\n  addRegionId(regionId) {\n    const ids = this.regionIds;\n    if(!ids.find(id => regionId === id)) {\n      ids.push(regionId);\n      this.controlElement.setAttribute('aria-controls', ids.join(' '));\n    }\n  }\n\n  addRegionElement(region) {\n    if(!(region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ||\n      region.classList.contains(COLLAPSIBLE_REGION_CLASS))) {\n      region.classList.add(COLLAPSIBLE_GROUP_CLASS);\n    }\n\n    if(!region.hasAttribute('role')) {\n      const role = region.classList.contains(COLLAPSIBLE_GROUP_CLASS) ? 'group' : 'region';\n      region.setAttribute('role', role);\n    }\n\n    if(!region.hasAttribute('id')) {\n      region.id = `${region.getAttribute('role')}-${randomString()}`;\n    }\n\n    if(this.isExpanded) {\n      region.removeAttribute('hidden');\n    }\n    else {\n      region.setAttribute('hidden', '');\n    }\n    this.addRegionId(region.id);\n  }\n\n  removeRegionElement(region) {\n    if(region && region.id) {\n      const ids = this.regionIds.filter(id => id === region.id);\n      this.controlElement.setAttribute('aria-controls', ids.join(' '));\n    }\n  }\n\n  removeListeners() {\n    this.controlElement.removeEventListener('keydown', this.keyDownHandler);\n    this.controlElement.removeEventListener('click', this.clickHandler);\n  }\n\n  init() {\n    const initControl = () => {\n      // Find the button element\n      this.controlElement_ = this.element.querySelector(`.${COLLAPSIBLE_CONTROL_CLASS}`) || this.element;\n\n      // Add \"aria-expanded\" attribute if not present\n      if(!this.controlElement.hasAttribute('aria-expanded')) {\n        this.controlElement.setAttribute('aria-expanded', 'false');\n      }\n\n      // Add role=button if control != <button>\n      if(this.controlElement.nodeName.toLowerCase() !== 'button') {\n        this.controlElement.setAttribute('role', 'button');\n      }\n\n      // Add tabindex\n      if(!isFocusable(this.controlElement) && !this.controlElement.hasAttribute('tabindex')) {\n        this.controlElement.setAttribute('tabindex', '0');\n      }\n    };\n\n    const initRegions = () => {\n      let regions = [];\n      if(!this.controlElement.hasAttribute('aria-controls')) {\n        // Add siblings as collapsible region(s)\n        let r = this.element.nextElementSibling;\n        while(r) {\n          if(r.classList.contains(COLLAPSIBLE_GROUP_CLASS) ||\n            r.classList.contains(COLLAPSIBLE_REGION_CLASS)) {\n            regions.push(r);\n          }\n          else if(r.classList.contains(JS_COLLAPSIBLE)) {\n            // A new collapsible component\n            break;\n          }\n          r = r.nextElementSibling;\n        }\n      }\n      else {\n        regions = this.regionElements;\n      }\n      regions.forEach(region => this.addRegionElement(region));\n    };\n\n    const addListeners = () => {\n      this.controlElement.addEventListener('keydown', this.keyDownHandler);\n      this.controlElement.addEventListener('click', this.clickHandler);\n    };\n\n    initControl();\n    initRegions();\n    this.removeListeners();\n    addListeners();\n  }\n\n  downgrade() {\n    this.removeListeners();\n  }\n\n}\n\n(function() {\n  'use strict';\n\n  /**\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\n  const MaterialExtCollapsible = function MaterialExtCollapsible(element) {\n    this.element_ = element;\n    this.collapsible = null;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtCollapsible'] = MaterialExtCollapsible;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtCollapsible.prototype.init = function() {\n    if (this.element_) {\n      this.collapsible = new Collapsible(this.element_);\n      this.element_.classList.add(IS_UPGRADED);\n\n      // Listen to 'mdl-componentdowngraded' event\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtCollapsible.prototype.mdlDowngrade_ = function() {\n    this.collapsible.downgrade();\n  };\n\n\n  // Public methods.\n\n  /**\n   * Get control element.\n   * @return {HTMLElement} element The element that controls the collapsible region.\n   * @public\n   */\n  MaterialExtCollapsible.prototype.getControlElement = function() {\n    return this.collapsible.controlElement;\n  };\n  MaterialExtCollapsible.prototype['getControlElement'] = MaterialExtCollapsible.prototype.getControlElement;\n\n  /**\n   * Get region elements controlled by this collapsible\n   * @returns {Array<HTMLElement>} the collapsible region elements\n   * @public\n   */\n  MaterialExtCollapsible.prototype.getRegionElements = function() {\n    return this.collapsible.regionElements;\n  };\n  MaterialExtCollapsible.prototype['getRegionElements'] = MaterialExtCollapsible.prototype.getRegionElements;\n\n  /**\n   * Add region elements.\n   * @param {Array<HTMLElement>} elements The element that will be upgraded.\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.addRegionElements = function(...elements) {\n    elements.forEach(element => this.collapsible.addRegionElement(element));\n  };\n  MaterialExtCollapsible.prototype['addRegionElements'] = MaterialExtCollapsible.prototype.addRegionElements;\n\n  /**\n   * Remove collapsible region(s) from component.\n   * Note: This operation does not delete the element from the DOM tree.\n   * @param {Array<HTMLElement>} elements The element that will be upgraded.\n   * @public\n   */\n  MaterialExtCollapsible.prototype.removeRegionElements = function(...elements) {\n    elements.forEach(element => this.collapsible.removeRegionElement(element));\n  };\n  MaterialExtCollapsible.prototype['removeRegionElements'] = MaterialExtCollapsible.prototype.removeRegionElements;\n\n  /**\n   * Expand collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.expand = function() {\n    this.collapsible.expand();\n  };\n  MaterialExtCollapsible.prototype['expand'] = MaterialExtCollapsible.prototype.expand;\n\n  /**\n   * Collapse collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.collapse = function() {\n    this.collapsible.collapse();\n  };\n  MaterialExtCollapsible.prototype['collapse'] = MaterialExtCollapsible.prototype.collapse;\n\n  /**\n   * Toggle collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.toggle = function() {\n    this.collapsible.toggle();\n  };\n  MaterialExtCollapsible.prototype['toggle'] = MaterialExtCollapsible.prototype.toggle;\n\n  /**\n   * Check whether component has aria-expanded state true\n   * @return {Boolean} true if aria-expanded=\"true\", otherwise false\n   */\n  MaterialExtCollapsible.prototype.isExpanded = function() {\n    return this.collapsible.isExpanded;\n  };\n  MaterialExtCollapsible.prototype['isExpanded'] = MaterialExtCollapsible.prototype.isExpanded;\n\n  /**\n   * Check whether component has aria-disabled state set to true\n   * @return {Boolean} true if aria-disabled=\"true\", otherwise false\n   */\n  MaterialExtCollapsible.prototype.isDisabled = function() {\n    return this.collapsible.isDisabled;\n  };\n  MaterialExtCollapsible.prototype['isDisabled'] = MaterialExtCollapsible.prototype.isDisabled;\n\n  /**\n   * Disables toggling of collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.disableToggle = function() {\n    this.collapsible.disableToggle();\n  };\n  MaterialExtCollapsible.prototype['disableToggle'] = MaterialExtCollapsible.prototype.disableToggle;\n\n  /**\n   * Enables toggling of collapsible region(s)\n   * @return {void}\n   * @public\n   */\n  MaterialExtCollapsible.prototype.enableToggle = function() {\n    this.collapsible.enableToggle();\n  };\n  MaterialExtCollapsible.prototype['enableToggle'] = MaterialExtCollapsible.prototype.enableToggle;\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtCollapsible,\n    classAsString: 'MaterialExtCollapsible',\n    cssClass: JS_COLLAPSIBLE,\n    widget: true\n  });\n\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/collapsible/collapsible.js","/**\n * @license\n * Copyright 2016-2017 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\nimport {jsonStringToObject} from '../utils/json-utils';\nimport {\n  IS_UPGRADED,\n} from '../utils/constants';\n\nconst JS_FORMAT_FIELD = 'mdlext-js-formatfield';\nconst FORMAT_FIELD_COMPONENT = 'MaterialExtFormatfield';\n\n/**\n * Detect browser locale\n * @returns {string} the locale\n * @see http://stackoverflow.com/questions/1043339/javascript-for-detecting-browser-language-preference\n */\nconst browserLanguage = () => {\n  return navigator.languages\n    ? navigator.languages[0]\n    : navigator.language || navigator.userLanguage;\n};\n\n/**\n * The formatfield  formats an input field  using language sensitive number formatting.\n */\n\nclass FormatField {\n  static timer = null;\n\n  element_;\n  input_;\n  options_ = {};\n  intlGroupSeparator_;\n  intlDecimalSeparator_;\n\n  constructor(element) {\n    this.element_ = element;\n    this.init();\n  }\n\n  clickHandler = () => {\n    clearTimeout(FormatField.timer);\n  };\n\n  focusInHandler = () => {\n    if(!(this.input.readOnly || this.input.disabled)) {\n      this.input.value = this.unformatInput();\n      //setTimeout(() => this.input.setSelectionRange(0, this.input.value.length), 20);\n      FormatField.timer = setTimeout(() => this.input.select(), 200);\n    }\n  };\n\n  focusOutHandler = () => {\n    clearTimeout(FormatField.timer);\n\n    if(!(this.input.readOnly || this.input.disabled)) {\n      this.formatValue();\n    }\n  };\n\n  get element() {\n    return this.element_;\n  }\n\n  get input() {\n    return this.input_;\n  }\n\n  get options() {\n    return this.options_;\n  }\n\n  stripSeparatorsFromValue() {\n    const doReplace = () => this.input.value\n      .replace(/\\s/g, '')\n      .replace(new RegExp(this.options.groupSeparator, 'g'), '')\n      .replace(this.options.decimalSeparator, '.');\n      //.replace(this.intlGroupSeparator_, ''),\n      //.replace(this.intlDecimalSeparator_, '.');\n\n    return this.input.value ? doReplace() : this.input.value;\n  }\n\n  fixSeparators(value) {\n    const doReplace = () => value\n      .replace(new RegExp(this.intlGroupSeparator_, 'g'), this.options.groupSeparator)\n      .replace(this.intlDecimalSeparator_, this.options.decimalSeparator);\n\n    return value ? doReplace() : value;\n  }\n\n  formatValue() {\n    if(this.input.value) {\n      const v = new Intl.NumberFormat(this.options.locales, this.options)\n        .format(this.stripSeparatorsFromValue());\n\n      if('NaN' !== v) {\n        this.input.value = this.fixSeparators(v);\n      }\n    }\n  }\n\n  unformat() {\n    const doReplace = () => this.input.value\n      .replace(/\\s/g, '')\n      .replace(new RegExp(this.options.groupSeparator, 'g'), '')\n      .replace(this.options.decimalSeparator, '.');\n\n    return this.input.value ? doReplace() : this.input.value;\n  }\n\n  unformatInput() {\n    const doReplace = () => this.input.value\n      .replace(/\\s/g, '')\n      .replace(new RegExp(this.options.groupSeparator, 'g'), '');\n\n    return this.input.value ? doReplace() : this.input.value;\n  }\n\n  removeListeners() {\n    this.input.removeEventListener('click', this.clickHandler);\n    this.input.removeEventListener('focusin', this.focusInHandler);\n    this.input.removeEventListener('focusout', this.focusOutHandler);\n  }\n\n  init() {\n    const addListeners = () => {\n      this.input.addEventListener('click', this.clickHandler);\n      this.input.addEventListener('focusin', this.focusInHandler);\n      this.input.addEventListener('focusout', this.focusOutHandler);\n    };\n\n    const addOptions = () => {\n      const opts = this.element.getAttribute('data-formatfield-options') ||\n        this.input.getAttribute('data-formatfield-options');\n      if(opts) {\n        this.options_ = jsonStringToObject(opts, this.options);\n      }\n    };\n\n    const addLocale = () => {\n      if(!this.options.locales) {\n        this.options.locales = browserLanguage() || 'en-US'; //'nb-NO', //'en-US',\n      }\n    };\n\n    const addGrouping = () => {\n      const s = (1234.5).toLocaleString(this.options.locales, {\n        style: 'decimal',\n        useGrouping: true,\n        minimumFractionDigits: 1,\n        maximumFractionDigits: 1\n      });\n\n      this.intlGroupSeparator_ = s.charAt(1);\n      this.intlDecimalSeparator_ = s.charAt(s.length-2);\n      this.options.groupSeparator = this.options.groupSeparator || this.intlGroupSeparator_;\n      this.options.decimalSeparator = this.options.decimalSeparator || this.intlDecimalSeparator_;\n\n      if(this.options.groupSeparator === this.options.decimalSeparator) {\n        const e = `Error! options.groupSeparator, \"${this.options.groupSeparator}\" ` +\n          'and options.decimalSeparator, ' +\n          `\"${this.options.decimalSeparator}\" should not be equal`;\n        throw new Error(e);\n      }\n    };\n\n    this.input_ = this.element.querySelector('input') || this.element;\n\n    addOptions();\n    addLocale();\n    addGrouping();\n    this.formatValue();\n    addListeners();\n  }\n\n  downgrade() {\n    this.removeListeners();\n  }\n\n}\n\n(function() {\n  'use strict';\n\n  /**\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\n  const MaterialExtFormatfield = function MaterialExtFormatfield(element) {\n    this.element_ = element;\n    this.formatField_ = null;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtFormatfield'] = MaterialExtFormatfield;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtFormatfield.prototype.init = function() {\n    if (this.element_) {\n      this.element_.classList.add(IS_UPGRADED);\n      this.formatField_ = new FormatField(this.element_);\n\n      // Listen to 'mdl-componentdowngraded' event\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n    }\n  };\n\n  /**\n   * Get options object\n   *\n   * @public\n   *\n   * @returns {Object} the options object\n   */\n  MaterialExtFormatfield.prototype.getOptions = function() {\n    return this.formatField_.options;\n  };\n  MaterialExtFormatfield.prototype['getOptions'] = MaterialExtFormatfield.prototype.getOptions;\n\n\n  /**\n   * A unformatted value is a string value where the locale specific decimal separator\n   * is replaced with a '.' separator and group separators are stripped.\n   * The returned value is suitable for parsing to a JavaScript numerical value.\n   *\n   * @example\n   * input.value = '1 234,5';\n   * inputElement.MaterialExtFormatfield.getUnformattedValue();\n   * // Returns '1234.5'\n   *\n   * @public\n   *\n   * @returns {String} the unformatted value\n   */\n  MaterialExtFormatfield.prototype.getUnformattedValue = function() {\n    return this.formatField_.unformat();\n  };\n  MaterialExtFormatfield.prototype['getUnformattedValue'] = MaterialExtFormatfield.prototype.getUnformattedValue;\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtFormatfield.prototype.mdlDowngrade_ = function() {\n    this.formatField_.downgrade();\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtFormatfield,\n    classAsString: FORMAT_FIELD_COMPONENT,\n    cssClass: JS_FORMAT_FIELD,\n    widget: true\n  });\n\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/formatfield/formatfield.js","import './utils';\nimport './accordion/accordion';\nimport './collapsible/collapsible';\nimport './carousel/carousel';\nimport './lightboard/lightboard';\nimport './lightbox/lightbox';\nimport './menu-button/menu-button';\nimport './selectfield/selectfield';\nimport './formatfield/formatfield';\nimport './sticky-header/sticky-header';\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * A lightboard is a translucent surface illuminated from behind, used for situations\n * where a shape laid upon the surface needs to be seen with high contrast. In the \"old days\" of photography\n * photograpers used a lightboard to get a quick view of their slides. The goal is to create a responsive lightbox\n * design, based on flex layout, similar to what is used in Adobe LightRoom to browse images.\n */\n\nimport {\n  VK_ENTER,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED,\n  MDL_RIPPLE,\n  MDL_RIPPLE_COMPONENT,\n  MDL_RIPPLE_EFFECT,\n  MDL_RIPPLE_EFFECT_IGNORE_EVENTS\n} from '../utils/constants';\n\nconst MDL_RIPPLE_CONTAINER = 'mdlext-lightboard__slide__ripple-container';\n\n(function() {\n  'use strict';\n\n  //const LIGHTBOARD = 'mdlext-lightboard';\n  const LIGHTBOARD_ROLE = 'grid';\n  const SLIDE = 'mdlext-lightboard__slide';\n  const SLIDE_ROLE  = 'gridcell';\n  const SLIDE_TABSTOP = 'mdlext-lightboard__slide__frame';\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtLightboard = function MaterialExtLightboard(element) {\n    // Stores the element.\n    this.element_ = element;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtLightboard'] = MaterialExtLightboard;\n\n\n  // Helpers\n  const getSlide = element => {\n    return element ? element.closest(`.${SLIDE}`) : null;\n  };\n\n\n\n  // Private methods.\n\n  /**\n   * Select a slide, i.e. set aria-selected=\"true\"\n   * @param element\n   * @private\n   */\n  MaterialExtLightboard.prototype.selectSlide_ = function(element) {\n    const slide = getSlide(element);\n    if( slide && !slide.hasAttribute('aria-selected') ) {\n      [...this.element_.querySelectorAll(`.${SLIDE}[aria-selected=\"true\"]`)]\n        .forEach(selectedSlide => selectedSlide.removeAttribute('aria-selected'));\n\n      slide.setAttribute('aria-selected', 'true');\n    }\n  };\n\n\n  /**\n   * Dispatch select event\n   * @param {Element} slide The slide that caused the event\n   * @private\n   */\n  MaterialExtLightboard.prototype.dispatchSelectEvent_ = function ( slide ) {\n    this.element_.dispatchEvent(\n      new CustomEvent('select', {\n        bubbles: true,\n        cancelable: true,\n        detail: { source: slide }\n      })\n    );\n  };\n\n  /**\n   * Handles custom command event, 'first', 'next', 'prev', 'last', 'select' or upgrade\n   * @param event. A custom event\n   * @private\n   */\n  MaterialExtLightboard.prototype.commandHandler_ = function( event ) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if(event && event.detail) {\n      this.command(event.detail);\n    }\n  };\n\n\n  // Public methods\n\n  /**\n   * Initialize lightboard slides\n   * @public\n   */\n  MaterialExtLightboard.prototype.upgradeSlides = function() {\n\n    const addRipple = slide => {\n      // Use slide frame as ripple container\n      if(!slide.querySelector(`.${MDL_RIPPLE_CONTAINER}`)) {\n        const a = slide.querySelector(`.${SLIDE_TABSTOP}`);\n        if(a) {\n          const rippleContainer = a;\n          rippleContainer.classList.add(MDL_RIPPLE_CONTAINER);\n          rippleContainer.classList.add(MDL_RIPPLE_EFFECT);\n          const ripple = document.createElement('span');\n          ripple.classList.add(MDL_RIPPLE);\n          rippleContainer.appendChild(ripple);\n          componentHandler.upgradeElement(rippleContainer, MDL_RIPPLE_COMPONENT);\n        }\n      }\n    };\n\n    const hasRippleEffect = this.element_.classList.contains(MDL_RIPPLE_EFFECT);\n\n    [...this.element_.querySelectorAll(`.${SLIDE}`)].forEach( slide => {\n\n      slide.setAttribute('role', SLIDE_ROLE);\n\n      if(!slide.querySelector('a')) {\n        slide.setAttribute('tabindex', '0');\n      }\n      if(hasRippleEffect) {\n        addRipple(slide);\n      }\n    });\n  };\n  MaterialExtLightboard.prototype['upgradeSlides'] = MaterialExtLightboard.prototype.upgradeSlides;\n\n\n  /**\n   * Execute command\n   * @param detail\n   * @public\n   */\n  MaterialExtLightboard.prototype.command = function( detail ) {\n\n    const firstSlide = () => {\n      return this.element_.querySelector(`.${SLIDE}:first-child`);\n    };\n\n    const lastSlide = () => {\n      return this.element_.querySelector(`.${SLIDE}:last-child`);\n    };\n\n    const nextSlide = () => {\n      const slide = this.element_.querySelector(`.${SLIDE}[aria-selected=\"true\"]`).nextElementSibling;\n      return slide ? slide : firstSlide();\n    };\n\n    const prevSlide = () => {\n      const slide = this.element_.querySelector(`.${SLIDE}[aria-selected=\"true\"]`).previousElementSibling;\n      return slide ? slide : lastSlide();\n    };\n\n    if(detail && detail.action) {\n\n      const { action, target } = detail;\n\n      let slide;\n      switch (action.toLowerCase()) {\n        case 'select':\n          slide = getSlide(target);\n          this.dispatchSelectEvent_(slide);\n          break;\n        case 'first':\n          slide = firstSlide();\n          break;\n        case 'next':\n          slide = nextSlide();\n          break;\n        case 'prev':\n          slide = prevSlide();\n          break;\n        case 'last':\n          slide = lastSlide();\n          break;\n        case 'upgrade':\n          this.upgradeSlides();\n          break;\n        default:\n          throw new Error(`Unknown action \"${action}\". Action must be one of \"first\", \"next\", \"prev\", \"last\", \"select\" or \"upgrade\"`);\n      }\n\n      if (slide) {\n        const a = slide.querySelector('a');\n        if (a) {\n          a.focus();\n        }\n        else {\n          slide.focus();\n        }\n\n        // Workaround for JSDom testing:\n        // In JsDom 'element.focus()' does not trigger any focus event\n        if(!slide.hasAttribute('aria-selected')) {\n          this.selectSlide_(slide);\n        }\n\n      }\n    }\n  };\n  MaterialExtLightboard.prototype['command'] = MaterialExtLightboard.prototype.command;\n\n\n  /**\n   * Initialize component\n   */\n  MaterialExtLightboard.prototype.init = function() {\n\n    const keydownHandler = event => {\n\n      if(event.target !== this.element_) {\n        let action;\n        let target;\n        switch (event.keyCode) {\n          case VK_HOME:\n            action = 'first';\n            break;\n          case VK_END:\n            action = 'last';\n            break;\n          case VK_ARROW_UP:\n          case VK_ARROW_LEFT:\n            action = 'prev';\n            break;\n          case VK_ARROW_DOWN:\n          case VK_ARROW_RIGHT:\n            action = 'next';\n            break;\n          case VK_ENTER:\n          case VK_SPACE:\n            action = 'select';\n            target = event.target;\n            break;\n        }\n        if(action)  {\n          event.preventDefault();\n          event.stopPropagation();\n          this.command( { action: action, target: target } );\n        }\n      }\n    };\n\n    const clickHandler = event => {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if(event.target !== this.element_) {\n        this.command( { action: 'select', target: event.target } );\n      }\n    };\n\n    const focusHandler = event => {\n      event.preventDefault();\n      event.stopPropagation();\n\n      if(event.target !== this.element_) {\n        this.selectSlide_(event.target);\n      }\n    };\n\n\n    if (this.element_) {\n      this.element_.setAttribute('role', LIGHTBOARD_ROLE);\n\n      if (this.element_.classList.contains(MDL_RIPPLE_EFFECT)) {\n        this.element_.classList.add(MDL_RIPPLE_EFFECT_IGNORE_EVENTS);\n      }\n\n      // Remove listeners, just in case ...\n      this.element_.removeEventListener('command', this.commandHandler_);\n      this.element_.removeEventListener('keydown', keydownHandler);\n      this.element_.removeEventListener('click', clickHandler);\n      this.element_.removeEventListener('focus', focusHandler);\n\n      this.element_.addEventListener('command', this.commandHandler_.bind(this), false);\n      this.element_.addEventListener('keydown', keydownHandler, true);\n      this.element_.addEventListener('click', clickHandler, true);\n      this.element_.addEventListener('focus', focusHandler, true);\n\n      this.upgradeSlides();\n\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  /* jshint undef:false */\n  componentHandler.register({\n    constructor: MaterialExtLightboard,\n    classAsString: 'MaterialExtLightboard',\n    cssClass: 'mdlext-js-lightboard',\n    widget: true\n  });\n\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/lightboard/lightboard.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\n/**\n * Responsive Lightbox\n */\n\nimport fullThrottle from '../utils/full-throttle';\nimport {\n  VK_ESC,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED\n} from '../utils/constants';\n\n(function() {\n  'use strict';\n\n  const LIGHTBOX = 'mdlext-lightbox';\n  const LIGHTBOX_SLIDER = 'mdlext-lightbox__slider';\n  const LIGHTBOX_SLIDER_SLIDE = 'mdlext-lightbox__slider__slide';\n  const STICKY_FOOTER = 'mdlext-lightbox--sticky-footer';\n  const BUTTON = 'mdl-button';\n\n  /**\n   * https://github.com/google/material-design-lite/issues/4205\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtLightbox = function MaterialExtLightbox(element) {\n    // Stores the element.\n    this.element_ = element;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtLightbox'] = MaterialExtLightbox;\n\n\n  /**\n   * Handle keypress\n   * @param event\n   * @private\n   */\n  MaterialExtLightbox.prototype.keyDownHandler_ = function(event) {\n\n    if (event) {\n      if ( event.keyCode === VK_ESC || event.keyCode === VK_SPACE\n        || event.keyCode === VK_END || event.keyCode === VK_HOME\n        || event.keyCode === VK_ARROW_UP || event.keyCode === VK_ARROW_LEFT\n        || event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {\n\n        if(event.keyCode !== VK_ESC) {\n          event.preventDefault();\n          event.stopPropagation();\n        }\n\n        let action = 'first';\n        if (event.keyCode === VK_END) {\n          action = 'last';\n        }\n        else if (event.keyCode === VK_ARROW_UP || event.keyCode === VK_ARROW_LEFT) {\n          action = 'prev';\n        }\n        else if (event.keyCode === VK_ARROW_DOWN || event.keyCode === VK_ARROW_RIGHT) {\n          action = 'next';\n        }\n        else if (event.keyCode === VK_SPACE) {\n          action = 'select';\n        }\n        else if (event.keyCode === VK_ESC) {\n          action = 'cancel';\n        }\n\n        dispatchAction_(action, this);\n      }\n    }\n  };\n\n  /**\n   * Handle button clicks\n   * @param event\n   * @private\n   */\n  MaterialExtLightbox.prototype.buttonClickHandler_ = function(event) {\n\n    if (event) {\n      event.preventDefault();\n      event.stopPropagation();\n\n      dispatchAction_(this.getAttribute('data-action') || '', this);\n\n      const n = this.closest(`.${LIGHTBOX}`);\n      if(n) {\n        n.focus();\n      }\n    }\n  };\n\n  /**\n   * Dispatches an action custom event\n   * @param action\n   * @param source\n   * @param target\n   * @private\n   */\n  const dispatchAction_ = (action, source, target = source) => {\n\n    target.dispatchEvent(new CustomEvent('action', {\n      bubbles: true,\n      cancelable: true,\n      detail: {\n        action: action || '',\n        source: source\n      }\n    }));\n  };\n\n  /**\n   * Reposition dialog if component parent element is \"DIALOG\"\n   * @param lightboxElement\n   * @private\n   */\n  const repositionDialog_ = lightboxElement => {\n    const footerHeight = (footer, isSticky) => isSticky && footer ? footer.offsetHeight : 0;\n\n    const reposition = (dialog, fh) => {\n      if (window.getComputedStyle(dialog).position === 'absolute') {\n        const scrollTop = document.body.scrollTop || document.documentElement.scrollTop;\n        const topValue = scrollTop + (window.innerHeight - dialog.offsetHeight - fh) / 2;\n        dialog.style.top = `${Math.max(scrollTop, topValue)}px`;\n      }\n    };\n\n    const p = lightboxElement.parentNode;\n    const dialog = p && p.nodeName === 'DIALOG' ? p : null;\n\n    if(dialog && dialog.hasAttribute('open')) {\n      lightboxElement.style.width = 'auto';\n      lightboxElement.style.maxWidth = '100%';\n      const img = lightboxElement.querySelector('img');\n      if(img) {\n        lightboxElement.style.maxWidth = img.naturalWidth !== undefined ? `${img.naturalWidth}px` : `${img.width}px` || '100%';\n      }\n\n      const fh = footerHeight(lightboxElement.querySelector('footer'), lightboxElement.classList.contains(STICKY_FOOTER));\n      const vh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0) - fh;\n      if (dialog.offsetHeight > vh) {\n        let n = 0;\n        while(dialog.offsetHeight > vh && ++n < 4) {\n          lightboxElement.style.width = `${lightboxElement.offsetWidth * vh / lightboxElement.offsetHeight}px`;\n        }\n      }\n      reposition(dialog, fh);\n    }\n  };\n\n  /**\n   * Handle image load\n   * @param event\n   * @private\n   */\n\n  MaterialExtLightbox.prototype.imgLoadHandler_ = function( /*event*/ ) {\n    repositionDialog_(this);\n  };\n\n\n  /**\n   * Handle image drag\n   * @param event\n   * @private\n     */\n  MaterialExtLightbox.prototype.imgDragHandler_ = function(event ) {\n\n    const setStyles = ( element, properties ) => {\n      //noinspection JSAnnotator\n      for(const [key, value] of Object.entries(properties)) {\n        element.style[key] = value;\n      }\n      // ... or:\n      //for (const key in properties) {\n      //  element.style[key] = properties[key];\n      //}\n    };\n\n    event.preventDefault();\n    //event.stopPropagation();\n\n    const x = event.clientX || (event.touches !== undefined ? event.touches[0].clientX : 0);\n\n    const img = this;\n    img.style.opacity = '0.2';\n\n    const slider = document.createElement('div');\n    slider.classList.add(LIGHTBOX_SLIDER);\n    setStyles(slider, {'width': `${img.offsetWidth}px`, 'height': `${img.offsetHeight}px`} );\n\n    let slide  = document.createElement('div');\n    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n    slide.textContent = '>';\n    setStyles(slide, {\n      'width'           : `${img.offsetWidth}px`,\n      'height'          : `${img.offsetHeight}px`,\n      'line-height'     : `${img.offsetHeight}px`,\n      'font-size'       : `${img.offsetHeight/4}px`,\n      'text-align'      : 'right',\n      'background-image': `url(\"${img.getAttribute('data-img-url-prev') || ''}\")`\n    });\n    slider.appendChild(slide);\n\n    slide  = document.createElement('div');\n    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n    setStyles(slide, {\n      'width'           : `${img.offsetWidth}px`,\n      'height'          : `${img.offsetHeight}px`,\n      'background-image': `url(\"${img.src}\")`\n    });\n    slider.appendChild(slide);\n\n    slide  = document.createElement('div');\n    slide.classList.add(LIGHTBOX_SLIDER_SLIDE);\n    slide.textContent = '<';\n    setStyles(slide, {\n      'width'           : `${img.offsetWidth}px`,\n      'height'          : `${img.offsetHeight}px`,\n      'line-height'     : `${img.offsetHeight}px`,\n      'font-size'       : `${img.offsetHeight/4}px`,\n      'text-align'      : 'left',\n      'background-image': `url(\"${img.getAttribute('data-img-url-next') || ''}\")`\n    });\n    slider.appendChild(slide);\n\n    img.parentNode.appendChild(slider);\n\n\n    // drag handler\n    const drag = e => {\n      e.preventDefault();\n      const dx = (e.clientX || (e.touches !== undefined ? e.touches[0].clientX : 0)) - x; // TODO: maybe rewrite to improve performance\n\n      if(slider.offsetWidth - Math.abs(dx) > 19) {\n        slider.style.left = `${dx}px`;\n      }\n    };\n\n    // end drag handler\n    const endDrag = e => {\n      e.preventDefault();\n      //e.stopPropagation();\n\n      window.removeEventListener('mousemove', drag);\n      window.removeEventListener('touchmove', drag);\n      window.removeEventListener('mouseup', endDrag);\n      window.removeEventListener('touchend', endDrag);\n\n      const dx = slider.offsetLeft;\n      img.parentNode.removeChild(slider);\n      img.style.opacity = '1.0';\n\n      if(Math.abs(dx) > 19) {\n        dispatchAction_( (dx > 0 ? 'prev' : 'next') , img);\n      }\n    };\n\n    window.addEventListener('mousemove', drag);\n    window.addEventListener('touchmove', drag);\n    window.addEventListener('mouseup', endDrag);\n    window.addEventListener('touchend',endDrag);\n  };\n\n\n  /**\n   * Initialize component\n   */\n  MaterialExtLightbox.prototype.init = function() {\n\n    if (this.element_) {\n      // Do the init required for this component to work\n      this.element_.addEventListener('keydown', this.keyDownHandler_.bind(this.element_), true);\n\n      if(!Number.isInteger(this.element_.getAttribute('tabindex'))) {\n        this.element_.setAttribute('tabindex', 1);\n      }\n\n      [...this.element_.querySelectorAll(`.${BUTTON}`)].forEach( button =>\n        button.addEventListener('click', this.buttonClickHandler_.bind(button), false)\n      );\n\n      const figcaption = this.element_.querySelector('figcaption');\n      if(figcaption) {\n        figcaption.addEventListener('click', this.buttonClickHandler_.bind(figcaption), false);\n      }\n\n      const footer = this.element_.querySelector('footer');\n      if(footer) {\n        footer.addEventListener('click', this.buttonClickHandler_.bind(footer), false);\n      }\n\n      const img = this.element_.querySelector('img');\n      if(img) {\n        img.addEventListener('load', this.imgLoadHandler_.bind(this.element_), false);\n        img.addEventListener('click', e => e.preventDefault(), true);\n        img.addEventListener('mousedown', this.imgDragHandler_.bind(img), true);\n        img.addEventListener('touchstart', this.imgDragHandler_.bind(img), true);\n      }\n      window.addEventListener('resize', fullThrottle( () => repositionDialog_(this.element_) ));\n      window.addEventListener('orientationchange', () => repositionDialog_(this.element_));\n\n      // Set upgraded flag\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to downgrade\n   *\n  MaterialExtLightbox.prototype.mdlDowngrade_ = function() {\n  };\n  */\n\n  /**\n   * The component registers itself. It can assume componentHandler is available in the global scope.\n   */\n  /* jshint undef:false */\n  componentHandler.register({\n    constructor: MaterialExtLightbox,\n    classAsString: 'MaterialExtLightbox',\n    cssClass: 'mdlext-js-lightbox'\n  });\n\n})();\n\n\n\n\n// WEBPACK FOOTER //\n// ./src/lightbox/lightbox.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n\n/**\n * A menu button is a button that opens a menu. It is often styled as a\n * typical push button with a downward pointing arrow or triangle to hint\n * that activating the button will display a menu.\n */\nimport { randomString } from '../utils/string-utils';\nimport fullThrottle from '../utils/full-throttle';\nimport {\n  VK_TAB,\n  VK_ENTER,\n  VK_ESC,\n  VK_SPACE,\n  VK_END,\n  VK_HOME,\n  VK_ARROW_LEFT,\n  VK_ARROW_UP,\n  VK_ARROW_RIGHT,\n  VK_ARROW_DOWN,\n  IS_UPGRADED,\n} from '../utils/constants';\n\nimport { getScrollParents, tether } from '../utils/dom-utils';\n\nconst JS_MENU_BUTTON = 'mdlext-js-menu-button';\nconst MENU_BUTTON_MENU = 'mdlext-menu';\nconst MENU_BUTTON_MENU_ITEM = 'mdlext-menu__item';\nconst MENU_BUTTON_MENU_ITEM_SEPARATOR = 'mdlext-menu__item-separator';\n//const MDL_LAYOUT_CONTENT = 'mdl-layout__content';\n\n/**\n * Creates the menu controlled by the menu button\n * @param element\n * @return {{element: Element, selected: Element, open: (function(*=)), removeListeners: (function()), downgrade: (function())}}\n */\n\nconst menuFactory = element => {\n\n  let ariaControls = null;\n  let parentNode = null;\n\n  const removeAllSelected = () => {\n    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM}[aria-selected=\"true\"]`)]\n      .forEach(selectedItem => selectedItem.removeAttribute('aria-selected'));\n  };\n\n  const setSelected = (item, force=false) => {\n    if(force || (item && !item.hasAttribute('aria-selected'))) {\n      removeAllSelected();\n      if(item) {\n        item.setAttribute('aria-selected', 'true');\n      }\n    }\n  };\n\n  const getSelected = () => {\n    return element.querySelector(`.${MENU_BUTTON_MENU_ITEM}[aria-selected=\"true\"]`);\n  };\n\n  const isDisabled = item => item && item.hasAttribute('disabled');\n\n  const isSeparator = item => item && item.classList.contains(MENU_BUTTON_MENU_ITEM_SEPARATOR);\n\n  const focus = item => {\n    if(item) {\n      item = item.closest(`.${MENU_BUTTON_MENU_ITEM}`);\n    }\n    if(item) {\n      item.focus();\n    }\n  };\n\n  const nextItem = current => {\n    let n = current.nextElementSibling;\n    if(!n) {\n      n = element.firstElementChild;\n    }\n    if(!isDisabled(n) && !isSeparator(n)) {\n      focus(n);\n    }\n    else {\n      let i = element.children.length;\n      while(n && i-- > 0) {\n        if(isDisabled(n) || isSeparator(n)) {\n          n = n.nextElementSibling;\n          if(!n) {\n            n = element.firstElementChild;\n          }\n        }\n        else {\n          focus(n);\n          break;\n        }\n      }\n    }\n  };\n\n  const previousItem = current => {\n    let p = current.previousElementSibling;\n    if(!p) {\n      p = element.lastElementChild;\n    }\n    if(!isDisabled(p) && !isSeparator(p)) {\n      focus(p);\n    }\n    else {\n      let i = element.children.length;\n      while(p && i-- > 0) {\n        if(isDisabled(p) || isSeparator(p)) {\n          p = p.previousElementSibling;\n          if(!p) {\n            p = element.lastElementChild;\n          }\n        }\n        else {\n          focus(p);\n          break;\n        }\n      }\n    }\n  };\n\n  const firstItem = () => {\n    const item = element.firstElementChild;\n    if(isDisabled(item) || isSeparator(item) ) {\n      nextItem(item);\n    }\n    else {\n      focus(item);\n    }\n  };\n\n  const lastItem = () => {\n    const item = element.lastElementChild;\n    if(isDisabled(item) || isSeparator(item)) {\n      previousItem(item);\n    }\n    else {\n      focus(item);\n    }\n  };\n\n  const selectItem = item => {\n    if(item && !isDisabled(item) && !isSeparator(item)) {\n      setSelected(item);\n      close(true, item);\n    }\n  };\n\n  const keyDownHandler = event => {\n\n    const item = event.target.closest(`.${MENU_BUTTON_MENU_ITEM}`);\n\n    switch (event.keyCode) {\n      case VK_ARROW_UP:\n      case VK_ARROW_LEFT:\n        if(item) {\n          previousItem(item);\n        }\n        else {\n          firstItem();\n        }\n        break;\n\n      case VK_ARROW_DOWN:\n      case VK_ARROW_RIGHT:\n        if(item) {\n          nextItem(item);\n        }\n        else {\n          lastItem();\n        }\n        break;\n\n      case VK_HOME:\n        firstItem();\n        break;\n\n      case VK_END:\n        lastItem();\n        break;\n\n      case VK_SPACE:\n      case VK_ENTER:\n        selectItem(item);\n        break;\n\n      case VK_ESC:\n        close(true);\n        break;\n\n      case VK_TAB:\n        // We do not have a \"natural\" tab order from menu, so the best we can do is to set focus back to the button\n        close(true);\n        break;\n\n      default:\n        return;\n    }\n    event.preventDefault();\n  };\n\n\n  const blurHandler = event => {\n\n    // See: https://github.com/facebook/react/issues/2011\n    const t = event.relatedTarget ||\n      event.explicitOriginalTarget || // FF\n      document.activeElement;         // IE11\n\n    //console.log('***** blur, target, relatedTarget', event.target, t);\n\n    try {\n      if (t) {\n        if (t.closest(`.${MENU_BUTTON_MENU}`) !== element && shouldClose(t)) {\n          close();\n        }\n      }\n      else {\n        close();\n      }\n    }\n    catch(err) {\n      // FF throws error: \"TypeError: n.closest is not a function\" if related target is a text node\n      close();\n    }\n  };\n\n  const clickHandler = event => {\n    //console.log('***** click, target', event.target);\n\n    event.preventDefault();\n    const t = event.target;\n    if (t && t.closest(`.${MENU_BUTTON_MENU}`) === element) {\n      const item = t.closest(`.${MENU_BUTTON_MENU_ITEM}`);\n      if (item) {\n        selectItem(item);\n      }\n    }\n    else {\n      if (shouldClose(t)) {\n        close();\n      }\n    }\n  };\n\n  const touchStartHandler = event => {\n    //console.log('***** touchStart, target', event.target);\n\n    const t = event.target;\n    if(!(t && t.closest(`.${MENU_BUTTON_MENU}`) === element)) {\n      if (event.type === 'touchstart') {\n        event.preventDefault();\n      }\n      close();\n    }\n  };\n\n  const addListeners = () => {\n    element.addEventListener('keydown', keyDownHandler, false);\n    element.addEventListener('blur', blurHandler, true);\n    element.addEventListener('click', clickHandler, true);\n    document.documentElement.addEventListener('touchstart', touchStartHandler, true);\n  };\n\n  const removeListeners = () => {\n    element.removeEventListener('keydown', keyDownHandler, false);\n    element.removeEventListener('blur', blurHandler, true);\n    element.removeEventListener('click', clickHandler, true);\n    document.documentElement.removeEventListener('touchstart', touchStartHandler, true);\n  };\n\n  const open = (controlElement, position='first') => {\n\n    ariaControls = controlElement.closest(`.${JS_MENU_BUTTON}`);\n\n    element.style['min-width'] = `${Math.max(124, controlElement.getBoundingClientRect().width)}px`;\n    element.removeAttribute('hidden');\n    tether(controlElement, element);\n\n    let item;\n    switch (position.toLowerCase()) {\n      case 'first':\n        firstItem();\n        break;\n\n      case 'last':\n        lastItem();\n        break;\n\n      case 'selected':\n        item = getSelected();\n        if(item && !item.hasAttribute('disabled')) {\n          focus(item);\n        }\n        else {\n          firstItem();\n        }\n        break;\n    }\n\n    addListeners();\n  };\n\n\n  const shouldClose = target => {\n    //console.log('***** shouldClose');\n\n    let result = false;\n    const btn = (target && target.closest(`.${JS_MENU_BUTTON}`)) || null;\n    if(!btn) {\n      result = true;\n    }\n    else if(btn.getAttribute('aria-controls') === element.id) {\n      if(btn !== ariaControls) {\n        result = true;\n      }\n    }\n    else {\n      result = true;\n    }\n    return result;\n  };\n\n  const close = (forceFocus = false, item = null) => {\n    removeListeners();\n\n    element.dispatchEvent(\n      new CustomEvent('_closemenu', {\n        bubbles: true,\n        cancelable: true,\n        detail: { forceFocus: forceFocus, item: item }\n      })\n    );\n  };\n\n  const addWaiAria = () => {\n    if (!element.hasAttribute('id')) {\n      // Generate a random id\n      element.id = `menu-button-${randomString()}`;\n    }\n    element.setAttribute('tabindex', '-1');\n    element.setAttribute('role', 'menu');\n    element.setAttribute('hidden', '');\n\n    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM}`)].forEach( menuitem => {\n      menuitem.setAttribute('tabindex', '-1');\n      menuitem.setAttribute('role', 'menuitem');\n    });\n\n    [...element.querySelectorAll(`.${MENU_BUTTON_MENU_ITEM_SEPARATOR}`)].forEach( menuitem => {\n      menuitem.setAttribute('role', 'separator');\n    });\n  };\n\n  const init = () => {\n    addWaiAria();\n    parentNode = element.parentNode;\n    element.classList.add('is-upgraded');\n  };\n\n  const downgrade = () => {\n    removeListeners();\n    if(element.parentNode !== parentNode) {\n      parentNode.appendChild(element);\n    }\n    element.classList.remove('is-upgraded');\n  };\n\n  init();\n\n  return {\n    /**\n     * Get the menu element\n     * @returns {Element} the menu element\n     */\n    get element() {\n      return element;\n    },\n\n    /**\n     * Set selected menu item\n     * @param item\n     */\n    set selected(item) {\n      setSelected(item, true);\n    },\n\n    /**\n     * Open menu\n     * @param {Element} controlElement the element where the menu should be aligned to\n     * @param {String} position menuElement item to receive focus after menu element is opened\n     */\n    open: (controlElement, position='first') => open(controlElement, position),\n\n    /**\n     * Remove event listeners.\n     */\n    removeListeners: () => removeListeners(),\n\n    /**\n     * Downgrade menu\n     */\n    downgrade: () => downgrade(),\n  };\n};\n\n\n/**\n * The menubutton component\n */\n\nclass MenuButton {\n\n  constructor(element) {\n    this.element = element;\n    this.focusElement = undefined;\n    this.focusElementLastScrollPosition = undefined;\n    this.scrollElements = [];\n    this.menu = undefined;\n    this.selectedItem = null;\n    this.init();\n  }\n\n  keyDownHandler = event => {\n    if(!this.isDisabled()) {\n      switch (event.keyCode) {\n        case VK_ARROW_UP:\n          this.openMenu('last');\n          break;\n\n        case VK_ARROW_DOWN:\n          this.openMenu();\n          break;\n\n        case VK_SPACE:\n        case VK_ENTER:\n          this.openMenu('selected');\n          break;\n\n        case VK_ESC:\n          this.closeMenu();\n          break;\n\n        case VK_TAB:\n          this.closeMenu();\n          return;\n\n        default:\n          return;\n      }\n    }\n    //event.stopPropagation();\n    event.preventDefault();\n  };\n\n  clickHandler = () => {\n    if(!this.isDisabled()) {\n      if(this.element.getAttribute('aria-expanded').toLowerCase() === 'true') {\n        this.closeMenu(true);\n      }\n      else {\n        this.openMenu('selected');\n      }\n    }\n  };\n\n  /**\n   * Re-position menu if content is scrolled, window is resized or orientation change\n   * @see https://javascriptweblog.wordpress.com/2015/11/02/of-classes-and-arrow-functions-a-cautionary-tale/\n   */\n  recalcMenuPosition = fullThrottle( () => {\n    const c = this.focusElement.getBoundingClientRect();\n    const dx = this.focusElementLastScrollPosition.left - c.left;\n    const dy = this.focusElementLastScrollPosition.top - c.top;\n    const left = (parseFloat(this.menu.element.style.left) || 0) - dx;\n    const top = (parseFloat(this.menu.element.style.top) || 0) - dy;\n\n    this.menu.element.style.left = `${left}px`;\n    this.menu.element.style.top = `${top}px`;\n    this.focusElementLastScrollPosition = c;\n  });\n\n\n  positionChangeHandler = () => {\n    this.recalcMenuPosition(this);\n  };\n\n  closeMenuHandler = event => {\n    if(event && event.detail) {\n      if(event.detail.item && event.detail.item !== this.selectedItem) {\n        this.selectedItem = event.detail.item;\n        this.dispatchMenuSelect();\n      }\n      this.closeMenu(event.detail.forceFocus);\n    }\n  };\n\n  dispatchMenuSelect() {\n    this.element.dispatchEvent(\n      new CustomEvent('menuselect', {\n        bubbles: true,\n        cancelable: true,\n        detail: { source: this.selectedItem }\n      })\n    );\n  }\n\n  isDisabled() {\n    return this.element.hasAttribute('disabled');\n  }\n\n  removeListeners() {\n    this.element.removeEventListener('keydown', this.keyDownHandler);\n    this.element.removeEventListener('click', this.clickHandler);\n  }\n\n  openMenu(position='first') {\n\n    if(!this.isDisabled() && this.menu) {\n\n      // Close the menu if button position change\n      this.scrollElements = getScrollParents(this.element);\n      this.scrollElements.forEach(el => el.addEventListener('scroll', this.positionChangeHandler));\n\n      window.addEventListener('resize', this.positionChangeHandler);\n      window.addEventListener('orientationchange', this.positionChangeHandler);\n      this.menu.element.addEventListener('_closemenu', this.closeMenuHandler);\n\n      this.menu.selected = this.selectedItem;\n      this.menu.open(this.focusElement, position);\n      this.element.setAttribute('aria-expanded', 'true');\n\n      this.focusElementLastScrollPosition = this.focusElement.getBoundingClientRect();\n    }\n  }\n\n  closeMenu(forceFocus = false) {\n    if(this.menu) {\n      this.menu.removeListeners();\n      this.scrollElements.forEach(el => el.removeEventListener('scroll', this.positionChangeHandler));\n      window.removeEventListener('resize', this.positionChangeHandler);\n      window.removeEventListener('orientationchange', this.positionChangeHandler);\n      this.menu.element.removeEventListener('_closemenu', this.closeMenuHandler);\n\n      if (forceFocus) {\n        this.focus();\n      }\n      this.element.setAttribute('aria-expanded', 'false');\n      this.menu.element.setAttribute('hidden', '');\n    }\n  }\n\n  focus() {\n    if(!this.isDisabled()) {\n      this.focusElement.focus();\n    }\n  }\n\n  init() {\n    const addListeners = () => {\n      this.element.addEventListener('keydown', this.keyDownHandler);\n      this.element.addEventListener('click', this.clickHandler);\n    };\n\n    const addWaiAria = () => {\n      this.element.setAttribute('role', 'button');\n      this.element.setAttribute('aria-expanded', 'false');\n      this.element.setAttribute('aria-haspopup', 'true');\n    };\n\n    const addFocusElement = () => {\n      this.focusElement = this.element.querySelector('input[type=\"text\"]');\n      if(!this.focusElement) {\n        this.focusElement = this.element;\n\n        if(!(this.focusElement.tagName.toLowerCase() === 'button' || this.focusElement.tagName.toLowerCase() === 'input')) {\n          if (!this.focusElement.hasAttribute('tabindex')) {\n            this.focusElement.setAttribute('tabindex', '0');\n          }\n        }\n      }\n    };\n\n    const moveElementToDocumentBody = (element) => {\n      // To position an element on top of all other z-indexed elements, the element should be moved to document.body\n      //       See: https://philipwalton.com/articles/what-no-one-told-you-about-z-index/\n\n      if(element.parentNode !== document.body) {\n        return document.body.appendChild(element);\n      }\n      return element;\n    };\n\n    const findMenuElement = () => {\n      let menuElement;\n      const menuElementId = this.element.getAttribute('aria-controls');\n      if(menuElementId !== null) {\n        menuElement = document.querySelector(`#${menuElementId }`);\n      }\n      else {\n        menuElement = this.element.parentNode.querySelector(`.${MENU_BUTTON_MENU}`);\n      }\n      return menuElement;\n    };\n\n    const addMenu = () => {\n      const menuElement = findMenuElement();\n      if(menuElement) {\n        if(menuElement.componentInstance) {\n          this.menu = menuElement.componentInstance;\n        }\n        else {\n          this.menu = menuFactory(menuElement);\n          menuElement.componentInstance = this.menu;\n          moveElementToDocumentBody(menuElement);\n        }\n        this.element.setAttribute('aria-controls', this.menu.element.id);\n      }\n    };\n\n    addFocusElement();\n    addWaiAria();\n    addMenu();\n    this.removeListeners();\n    addListeners();\n  }\n\n  downgrade() {\n    if(this.menu) {\n      // Do not downgrade menu if there are other buttons sharing this menu\n      const related = [...document.querySelectorAll(`.${JS_MENU_BUTTON}[aria-controls=\"${this.element.getAttribute('aria-controls')}\"]`)];\n      if(related.filter( c => c !== this.element && c.getAttribute('data-upgraded').indexOf('MaterialExtMenuButton') >= 0).length === 0) {\n        this.menu.downgrade();\n      }\n    }\n    this.removeListeners();\n  }\n\n}\n\n(function() {\n  'use strict';\n\n  /**\n   * https://github.com/google/material-design-lite/issues/4205\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtMenuButton = function MaterialExtMenuButton(element) {\n    this.element_ = element;\n    this.menuButton_ = null;\n\n    // Initialize instance.\n    this.init();\n  };\n  window['MaterialExtMenuButton'] = MaterialExtMenuButton;\n\n\n  // Public methods.\n\n  /**\n   * Get the menu element controlled by this button, null if no menu is controlled by this button\n   * @public\n   */\n  MaterialExtMenuButton.prototype.getMenuElement = function() {\n    return this.menuButton_.menu ? this.menuButton_.menu.element : null;\n  };\n  MaterialExtMenuButton.prototype['getMenuElement'] = MaterialExtMenuButton.prototype.getMenuElement;\n\n  /**\n   * Open menu\n   * @public\n   * @param {String} position one of \"first\", \"last\" or \"selected\"\n   */\n  MaterialExtMenuButton.prototype.openMenu = function(position) {\n    this.menuButton_.openMenu(position);\n  };\n  MaterialExtMenuButton.prototype['openMenu'] = MaterialExtMenuButton.prototype.openMenu;\n\n  /**\n   * Close menu\n   * @public\n   */\n  MaterialExtMenuButton.prototype.closeMenu = function() {\n    this.menuButton_.closeMenu(true);\n  };\n  MaterialExtMenuButton.prototype['closeMenu'] = MaterialExtMenuButton.prototype.closeMenu;\n\n  /**\n   * Get selected menu item\n   * @public\n   * @returns {Element} The selected menu item or null if no item selected\n   */\n  MaterialExtMenuButton.prototype.getSelectedMenuItem = function() {\n    return this.menuButton_.selectedItem;\n  };\n  MaterialExtMenuButton.prototype['getSelectedMenuItem'] = MaterialExtMenuButton.prototype.getSelectedMenuItem;\n\n\n  /**\n   * Set (default) selected menu item\n   * @param {Element} item\n   */\n  MaterialExtMenuButton.prototype.setSelectedMenuItem = function(item) {\n    this.menuButton_.selectedItem = item;\n  };\n  MaterialExtMenuButton.prototype['setSelectedMenuItem'] = MaterialExtMenuButton.prototype.setSelectedMenuItem;\n\n  /**\n   * Initialize component\n   */\n  MaterialExtMenuButton.prototype.init = function() {\n    if (this.element_) {\n      this.menuButton_ = new MenuButton(this.element_);\n      this.element_.addEventListener('mdl-componentdowngraded', this.mdlDowngrade_.bind(this));\n      this.element_.classList.add(IS_UPGRADED);\n    }\n  };\n\n  /**\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   */\n  MaterialExtMenuButton.prototype.mdlDowngrade_ = function() {\n    this.menuButton_.downgrade();\n  };\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtMenuButton,\n    classAsString: 'MaterialExtMenuButton',\n    cssClass: JS_MENU_BUTTON,\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/menu-button/menu-button.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/*\n * Copied/Modified from https://github.com/google/material-design-lite/tree/master/src/textfield\n */\n\nimport { randomString } from '../utils/string-utils';\nimport {\n  IS_DIRTY,\n  IS_FOCUSED,\n  IS_DISABLED,\n  IS_INVALID,\n  IS_UPGRADED\n} from '../utils/constants';\n\n(function() {\n  'use strict';\n  const LABEL = 'mdlext-selectfield__label';\n  const INPUT = 'mdlext-selectfield__select';\n\n  /**\n   * Class constructor for Selectfield MDLEXT component.\n   * Implements MDL component design pattern defined at:\n   * https://github.com/jasonmayes/mdl-component-design-pattern\n   *\n   * @constructor\n   * @param {HTMLElement} element The element that will be upgraded.\n   */\n  const MaterialExtSelectfield = function MaterialExtSelectfield(element) {\n    this.element_ = element;\n    this.init(); // Initialize instance.\n  };\n\n  window['MaterialExtSelectfield'] = MaterialExtSelectfield;\n\n  /**\n   * Handle focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\n  /*eslint no-unused-vars: 0*/\n  MaterialExtSelectfield.prototype.onFocus_ = function( /*event*/ ) {\n    this.element_.classList.add(IS_FOCUSED);\n  };\n\n  /**\n   * Handle lost focus.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\n  /*eslint no-unused-vars: 0*/\n  MaterialExtSelectfield.prototype.onBlur_ = function( /*event*/ ) {\n    this.element_.classList.remove(IS_FOCUSED);\n  };\n\n  /**\n   * Handle reset event from out side.\n   *\n   * @param {Event} event The event that fired.\n   * @private\n   */\n  MaterialExtSelectfield.prototype.onReset_ = function( /*event*/ ) {\n    this.updateClasses_();\n  };\n\n  /**\n   * Handle class updates.\n   *\n   * @private\n   */\n  MaterialExtSelectfield.prototype.updateClasses_ = function() {\n    this.checkDisabled();\n    this.checkValidity();\n    this.checkDirty();\n    this.checkFocus();\n  };\n\n  // Public methods.\n\n  /**\n   * Check the disabled state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkDisabled = function() {\n    if (this.select_.disabled) {\n      this.element_.classList.add(IS_DISABLED);\n    } else {\n      this.element_.classList.remove(IS_DISABLED);\n    }\n  };\n  MaterialExtSelectfield.prototype['checkDisabled'] = MaterialExtSelectfield.prototype.checkDisabled;\n\n\n  /**\n   * Check the focus state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkFocus = function() {\n    // Note: element.querySelector(':focus') always return null in JsDom, even if select element has focus\n    /*eslint no-extra-boolean-cast: 0*/\n    if (Boolean(this.element_.querySelector(':focus'))) {\n      this.element_.classList.add(IS_FOCUSED);\n    } else {\n      this.element_.classList.remove(IS_FOCUSED);\n    }\n  };\n\n  MaterialExtSelectfield.prototype['checkFocus'] = MaterialExtSelectfield.prototype.checkFocus;\n\n\n  /**\n   * Check the validity state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkValidity = function() {\n\n    /* Don't think it makes any sense to check validity.\n       Tests I've done, so far, indicates that setting an illegal value via JS returns selectedIndex=0\n\n    if (this.select_.validity) {\n      if (this.select_.validity.valid) {\n        this.element_.classList.remove(this.CssClasses_.IS_INVALID);\n      } else {\n        this.element_.classList.add(this.CssClasses_.IS_INVALID);\n      }\n    }\n    */\n  };\n\n  MaterialExtSelectfield.prototype['checkValidity'] = MaterialExtSelectfield.prototype.checkValidity;\n\n  /**\n   * Check the dirty state and update field accordingly.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.checkDirty = function() {\n    if (this.select_.value && this.select_.value.length > 0) {\n      this.element_.classList.add(IS_DIRTY);\n    } else {\n      this.element_.classList.remove(IS_DIRTY);\n    }\n  };\n\n  MaterialExtSelectfield.prototype['checkDirty'] = MaterialExtSelectfield.prototype.checkDirty;\n\n  /**\n   * Disable select field.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.disable = function() {\n    this.select_.disabled = true;\n    this.updateClasses_();\n  };\n\n  MaterialExtSelectfield.prototype['disable'] = MaterialExtSelectfield.prototype.disable;\n\n  /**\n   * Enable select field.\n   *\n   * @public\n   */\n  MaterialExtSelectfield.prototype.enable = function() {\n    this.select_.disabled = false;\n    this.updateClasses_();\n  };\n\n  MaterialExtSelectfield.prototype['enable'] = MaterialExtSelectfield.prototype.enable;\n\n  /**\n   * Update select field value.\n   *\n   * @param {string} value The value to which to set the control (optional).\n   * @public\n   */\n  MaterialExtSelectfield.prototype.change = function(value) {\n    this.select_.value = value || '';\n    this.updateClasses_();\n  };\n  MaterialExtSelectfield.prototype['change'] = MaterialExtSelectfield.prototype.change;\n\n  /**\n   * Initialize element.\n   */\n  MaterialExtSelectfield.prototype.init = function() {\n    if (this.element_) {\n      this.label_ = this.element_.querySelector(`.${LABEL}`);\n      this.select_ = this.element_.querySelector(`.${INPUT}`);\n\n      if (this.select_) {\n        // Remove listeners, just in case ...\n        this.select_.removeEventListener('change', this.updateClasses_);\n        this.select_.removeEventListener('focus', this.onFocus_);\n        this.select_.removeEventListener('blur', this.onBlur_);\n        this.select_.removeEventListener('reset', this.onReset_);\n\n        this.select_.addEventListener('change', this.updateClasses_.bind(this));\n        this.select_.addEventListener('focus', this.onFocus_.bind(this));\n        this.select_.addEventListener('blur', this.onBlur_.bind(this));\n        this.select_.addEventListener('reset', this.onReset_.bind(this));\n\n        if(this.label_) {\n          let id;\n          if(!this.select_.hasAttribute('id')) {\n            id = `select-${randomString()}`;\n            this.select_.id = id;\n          }\n          else {\n            id = this.select_.id;\n          }\n\n          if(!this.label_.hasAttribute('for')) {\n            this.label_.setAttribute('for', id);\n          }\n        }\n\n        const invalid = this.element_.classList.contains(IS_INVALID);\n        this.updateClasses_();\n        this.element_.classList.add(IS_UPGRADED);\n\n        if (invalid) {\n          this.element_.classList.add(IS_INVALID);\n        }\n        if (this.select_.hasAttribute('autofocus')) {\n          this.element_.focus();\n          this.checkFocus();\n        }\n      }\n    }\n  };\n\n  /**\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to downgrade\n   *\n  MaterialExtSelectfield.prototype.mdlDowngrade_ = function() {\n    'use strict';\n    console.log('***** MaterialExtSelectfield.mdlDowngrade ');\n  };\n  */\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /*eslint no-undef: 0*/\n  componentHandler.register({\n    constructor: MaterialExtSelectfield,\n    classAsString: 'MaterialExtSelectfield',\n    cssClass: 'mdlext-js-selectfield',\n    widget: true\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/selectfield/selectfield.js","/**\n * @license\n * Copyright 2016 Leif Olsen. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * This code is built with Google Material Design Lite,\n * which is Licensed under the Apache License, Version 2.0\n */\n\n/**\n * A sticky header makes site navigation easily accessible anywhere on the page and saves content space at the same.\n * The header should auto-hide, i.e. hiding the header automatically when a user starts scrolling down the page and\n * bringing the header back when a user might need it: they reach the bottom of the page or start scrolling up.\n */\n\nimport fullThrottle from '../utils/full-throttle';\nimport { jsonStringToObject } from '../utils/json-utils';\nimport {\n  IS_UPGRADED\n} from '../utils/constants';\n\n\n(function() {\n  'use strict';\n  const MDL_LAYOUT_CONTENT  = 'mdl-layout__content';\n  const IS_SCROLL_CLASS  = 'mdlext-is-scroll';\n\n\n  /**\n   * @constructor\n   * @param {Element} element The element that will be upgraded.\n   */\n  const MaterialExtStickyHeader = function MaterialExtStickyHeader(element) {\n    // Stores the element.\n    this.header_ = element;\n\n    // Heder listens to scroll events from content\n    this.content_ = null;\n    this.lastScrollTop_ = 0;\n\n    // Default config\n    this.config_ = {\n      visibleAtScrollEnd: false\n    };\n\n    this.mutationObserver_ = null;\n\n    this.drawing_ = false;\n\n    // Initialize instance.\n    this.init();\n  };\n\n  window['MaterialExtStickyHeader'] = MaterialExtStickyHeader;\n\n\n  /**\n   * Update header width\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.recalcWidth_ = function() {\n    this.header_.style.width = `${this.content_.clientWidth}px`;\n  };\n\n  const throttleResize = fullThrottle(self => self.recalcWidth_() );\n\n  /**\n   * Adjust header width when window resizes or oreientation changes\n   * @param event\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.resizeHandler_ = function( /* event */ ) {\n    throttleResize(this);\n  };\n\n\n  /**\n   * Update header position\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.reposition_ = function() {\n\n    const currentContentScrollTop = this.content_.scrollTop;\n    const scrollDiff = this.lastScrollTop_ - currentContentScrollTop;\n\n    if(currentContentScrollTop <= 0) {\n      // Scrolled to the top. Header sticks to the top\n      this.header_.style.top = '0';\n      this.header_.classList.remove(IS_SCROLL_CLASS);\n    }\n    else if(scrollDiff > 0) {\n\n      if(scrollDiff >= this.header_.offsetHeight) {\n\n        // Scrolled up. Header slides in\n        const headerTop = (parseInt( window.getComputedStyle( this.header_ ).getPropertyValue( 'top' ) ) || 0);\n        if(headerTop != 0) {\n          this.header_.style.top = '0';\n          this.header_.classList.add(IS_SCROLL_CLASS);\n        }\n        this.lastScrollTop_ = currentContentScrollTop;\n      }\n      return;\n    }\n    else if(scrollDiff < 0) {\n      // Scrolled down\n      this.header_.classList.add(IS_SCROLL_CLASS);\n      let headerTop = (parseInt( window.getComputedStyle( this.header_ ).getPropertyValue( 'top' ) ) || 0);\n\n      if (this.content_.scrollHeight - this.content_.scrollTop <= this.content_.offsetHeight) {\n        // Bottom of content\n        if(headerTop != 0) {\n          this.header_.style.top = this.config_.visibleAtScrollEnd ? '0' : `-${this.header_.offsetHeight}px`;\n        }\n      }\n      else {\n        headerTop += scrollDiff;\n        const offsetHeight = this.header_.offsetHeight;\n        this.header_.style.top = `${( Math.abs( headerTop ) > offsetHeight ? -offsetHeight : headerTop )}px`;\n      }\n    }\n\n    this.lastScrollTop_ = currentContentScrollTop;\n  };\n\n\n  const throttleScroll = fullThrottle((self) => self.reposition_());\n\n  /**\n   * Scroll header when content scrolls\n   * @param event\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.scrollHandler_ = function( /* event */ ) {\n    throttleScroll(this);\n  };\n\n  /**\n   * Init header position\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.updatePosition_ = function( /* event */ ) {\n    this.recalcWidth_();\n    this.reposition_();\n  };\n\n  /**\n   * Add mutation observer\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.addMutationObserver_ = function() {\n\n    // jsdom does not support MutationObserver - so this is not testable\n    /* istanbul ignore next */\n    this.mutationObserver_ = new MutationObserver( ( /*mutations*/ ) => {\n      // Adjust header width if content changes (e.g. in a SPA)\n      this.updatePosition_();\n    });\n\n    this.mutationObserver_.observe( this.content_, {\n      attributes: false,\n      childList: true,\n      characterData: false,\n      subtree: true\n    });\n  };\n\n    /**\n   * Removes event listeners\n   * @private\n   */\n  MaterialExtStickyHeader.prototype.removeListeners_ = function() {\n\n    window.removeEventListener('resize', this.resizeHandler_);\n    window.removeEventListener('orientationchange', this.resizeHandler_);\n\n    if(this.content_) {\n      this.content_.removeEventListener('scroll', this.scrollHandler_);\n    }\n\n    if(this.mutationObserver_) {\n      this.mutationObserver_.disconnect();\n      this.mutationObserver_ = null;\n    }\n  };\n\n  /**\n   * Initialize component\n   */\n  MaterialExtStickyHeader.prototype.init = function() {\n\n    if (this.header_) {\n\n      this.removeListeners_();\n\n      if(this.header_.hasAttribute('data-config')) {\n        this.config_ = jsonStringToObject(this.header_.getAttribute('data-config'));\n      }\n\n      this.content_ = this.header_.parentNode.querySelector(`.${MDL_LAYOUT_CONTENT}`) || null;\n\n      if(this.content_) {\n        this.content_.style.paddingTop = `${this.header_.offsetHeight}px`;  // Make room for sticky header\n        this.lastScrollTop_ = this.content_.scrollTop;\n\n        this.content_.addEventListener('scroll', this.scrollHandler_.bind(this));\n        window.addEventListener('resize', this.resizeHandler_.bind(this));\n        window.addEventListener('orientationchange', this.resizeHandler_.bind(this));\n\n        this.addMutationObserver_();\n        this.updatePosition_();\n\n        // Set upgraded flag\n        this.header_.classList.add(IS_UPGRADED);\n      }\n    }\n  };\n\n  /*\n   * Downgrade component\n   * E.g remove listeners and clean up resources\n   *\n   * Nothing to clean\n   *\n   MaterialExtStickyHeader.prototype.mdlDowngrade_ = function() {\n     'use strict';\n     console.log('***** MaterialExtStickyHeader.prototype.mdlDowngrade_');\n   };\n   */\n\n\n  // The component registers itself. It can assume componentHandler is available\n  // in the global scope.\n  /* eslint no-undef: 0 */\n  componentHandler.register({\n    constructor: MaterialExtStickyHeader,\n    classAsString: 'MaterialExtStickyHeader',\n    cssClass: 'mdlext-js-sticky-header'\n  });\n})();\n\n\n\n// WEBPACK FOOTER //\n// ./src/sticky-header/sticky-header.js","import './constants';\nimport './dom-utils';\nimport './string-utils';\nimport './json-utils';\nimport './full-throttle';\nimport './easing';\nimport './interval-function';\n\n\n\n// WEBPACK FOOTER //\n// ./src/utils/index.js","module.exports = { \"default\": require(\"core-js/library/fn/array/from\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/array/from.js\n// module id = 60\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/is-iterable\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/is-iterable.js\n// module id = 61\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/number/is-nan\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/number/is-nan.js\n// module id = 62\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/define-property\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/define-property.js\n// module id = 63\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/entries\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/entries.js\n// module id = 64\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/object/keys\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/object/keys.js\n// module id = 65\n// module chunks = 0 1","module.exports = { \"default\": require(\"core-js/library/fn/reflect/apply\"), __esModule: true };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/core-js/reflect/apply.js\n// module id = 66\n// module chunks = 0 1","\"use strict\";\n\nexports.__esModule = true;\n\nvar _isIterable2 = require(\"../core-js/is-iterable\");\n\nvar _isIterable3 = _interopRequireDefault(_isIterable2);\n\nvar _getIterator2 = require(\"../core-js/get-iterator\");\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = function () {\n  function sliceIterator(arr, i) {\n    var _arr = [];\n    var _n = true;\n    var _d = false;\n    var _e = undefined;\n\n    try {\n      for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {\n        _arr.push(_s.value);\n\n        if (i && _arr.length === i) break;\n      }\n    } catch (err) {\n      _d = true;\n      _e = err;\n    } finally {\n      try {\n        if (!_n && _i[\"return\"]) _i[\"return\"]();\n      } finally {\n        if (_d) throw _e;\n      }\n    }\n\n    return _arr;\n  }\n\n  return function (arr, i) {\n    if (Array.isArray(arr)) {\n      return arr;\n    } else if ((0, _isIterable3.default)(Object(arr))) {\n      return sliceIterator(arr, i);\n    } else {\n      throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n    }\n  };\n}();\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/helpers/slicedToArray.js\n// module id = 67\n// module chunks = 0 1","require('../../modules/es6.string.iterator');\nrequire('../../modules/es6.array.from');\nmodule.exports = require('../../modules/_core').Array.from;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/array/from.js\n// module id = 68\n// module chunks = 0 1","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.get-iterator');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/get-iterator.js\n// module id = 69\n// module chunks = 0 1","require('../modules/web.dom.iterable');\nrequire('../modules/es6.string.iterator');\nmodule.exports = require('../modules/core.is-iterable');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/is-iterable.js\n// module id = 70\n// module chunks = 0 1","require('../../modules/es6.number.is-integer');\nmodule.exports = require('../../modules/_core').Number.isInteger;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/number/is-integer.js\n// module id = 71\n// module chunks = 0 1","require('../../modules/es6.number.is-nan');\nmodule.exports = require('../../modules/_core').Number.isNaN;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/number/is-nan.js\n// module id = 72\n// module chunks = 0 1","require('../../modules/es6.object.assign');\nmodule.exports = require('../../modules/_core').Object.assign;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/assign.js\n// module id = 73\n// module chunks = 0 1","require('../../modules/es6.object.define-property');\nvar $Object = require('../../modules/_core').Object;\nmodule.exports = function defineProperty(it, key, desc){\n  return $Object.defineProperty(it, key, desc);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/define-property.js\n// module id = 74\n// module chunks = 0 1","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/entries.js\n// module id = 75\n// module chunks = 0 1","require('../../modules/es6.object.keys');\nmodule.exports = require('../../modules/_core').Object.keys;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/object/keys.js\n// module id = 76\n// module chunks = 0 1","require('../../modules/es6.reflect.apply');\nmodule.exports = require('../../modules/_core').Reflect.apply;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/fn/reflect/apply.js\n// module id = 77\n// module chunks = 0 1","module.exports = function(){ /* empty */ };\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_add-to-unscopables.js\n// module id = 78\n// module chunks = 0 1","// false -> Array#indexOf\n// true  -> Array#includes\nvar toIObject = require('./_to-iobject')\n  , toLength  = require('./_to-length')\n  , toIndex   = require('./_to-index');\nmodule.exports = function(IS_INCLUDES){\n  return function($this, el, fromIndex){\n    var O      = toIObject($this)\n      , length = toLength(O.length)\n      , index  = toIndex(fromIndex, length)\n      , value;\n    // Array#includes uses SameValueZero equality algorithm\n    if(IS_INCLUDES && el != el)while(length > index){\n      value = O[index++];\n      if(value != value)return true;\n    // Array#toIndex ignores holes, Array#includes - not\n    } else for(;length > index; index++)if(IS_INCLUDES || index in O){\n      if(O[index] === el)return IS_INCLUDES || index || 0;\n    } return !IS_INCLUDES && -1;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_array-includes.js\n// module id = 79\n// module chunks = 0 1","'use strict';\nvar $defineProperty = require('./_object-dp')\n  , createDesc      = require('./_property-desc');\n\nmodule.exports = function(object, index, value){\n  if(index in object)$defineProperty.f(object, index, createDesc(0, value));\n  else object[index] = value;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_create-property.js\n// module id = 80\n// module chunks = 0 1","module.exports = require('./_global').document && document.documentElement;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_html.js\n// module id = 81\n// module chunks = 0 1","module.exports = !require('./_descriptors') && !require('./_fails')(function(){\n  return Object.defineProperty(require('./_dom-create')('div'), 'a', {get: function(){ return 7; }}).a != 7;\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_ie8-dom-define.js\n// module id = 82\n// module chunks = 0 1","// check on default Array iterator\nvar Iterators  = require('./_iterators')\n  , ITERATOR   = require('./_wks')('iterator')\n  , ArrayProto = Array.prototype;\n\nmodule.exports = function(it){\n  return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-array-iter.js\n// module id = 83\n// module chunks = 0 1","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object')\n  , floor    = Math.floor;\nmodule.exports = function isInteger(it){\n  return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_is-integer.js\n// module id = 84\n// module chunks = 0 1","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function(iterator, fn, value, entries){\n  try {\n    return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n  // 7.4.6 IteratorClose(iterator, completion)\n  } catch(e){\n    var ret = iterator['return'];\n    if(ret !== undefined)anObject(ret.call(iterator));\n    throw e;\n  }\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-call.js\n// module id = 85\n// module chunks = 0 1","'use strict';\nvar create         = require('./_object-create')\n  , descriptor     = require('./_property-desc')\n  , setToStringTag = require('./_set-to-string-tag')\n  , IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function(){ return this; });\n\nmodule.exports = function(Constructor, NAME, next){\n  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});\n  setToStringTag(Constructor, NAME + ' Iterator');\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-create.js\n// module id = 86\n// module chunks = 0 1","var ITERATOR     = require('./_wks')('iterator')\n  , SAFE_CLOSING = false;\n\ntry {\n  var riter = [7][ITERATOR]();\n  riter['return'] = function(){ SAFE_CLOSING = true; };\n  Array.from(riter, function(){ throw 2; });\n} catch(e){ /* empty */ }\n\nmodule.exports = function(exec, skipClosing){\n  if(!skipClosing && !SAFE_CLOSING)return false;\n  var safe = false;\n  try {\n    var arr  = [7]\n      , iter = arr[ITERATOR]();\n    iter.next = function(){ return {done: safe = true}; };\n    arr[ITERATOR] = function(){ return iter; };\n    exec(arr);\n  } catch(e){ /* empty */ }\n  return safe;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-detect.js\n// module id = 87\n// module chunks = 0 1","module.exports = function(done, value){\n  return {value: value, done: !!done};\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_iter-step.js\n// module id = 88\n// module chunks = 0 1","module.exports = true;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_library.js\n// module id = 89\n// module chunks = 0 1","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar getKeys  = require('./_object-keys')\n  , gOPS     = require('./_object-gops')\n  , pIE      = require('./_object-pie')\n  , toObject = require('./_to-object')\n  , IObject  = require('./_iobject')\n  , $assign  = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function(){\n  var A = {}\n    , B = {}\n    , S = Symbol()\n    , K = 'abcdefghijklmnopqrst';\n  A[S] = 7;\n  K.split('').forEach(function(k){ B[k] = k; });\n  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source){ // eslint-disable-line no-unused-vars\n  var T     = toObject(target)\n    , aLen  = arguments.length\n    , index = 1\n    , getSymbols = gOPS.f\n    , isEnum     = pIE.f;\n  while(aLen > index){\n    var S      = IObject(arguments[index++])\n      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)\n      , length = keys.length\n      , j      = 0\n      , key;\n    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];\n  } return T;\n} : $assign;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-assign.js\n// module id = 90\n// module chunks = 0 1","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject    = require('./_an-object')\n  , dPs         = require('./_object-dps')\n  , enumBugKeys = require('./_enum-bug-keys')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , Empty       = function(){ /* empty */ }\n  , PROTOTYPE   = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function(){\n  // Thrash, waste and sodomy: IE GC bug\n  var iframe = require('./_dom-create')('iframe')\n    , i      = enumBugKeys.length\n    , lt     = '<'\n    , gt     = '>'\n    , iframeDocument;\n  iframe.style.display = 'none';\n  require('./_html').appendChild(iframe);\n  iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n  // createDict = iframe.contentWindow.Object;\n  // html.removeChild(iframe);\n  iframeDocument = iframe.contentWindow.document;\n  iframeDocument.open();\n  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n  iframeDocument.close();\n  createDict = iframeDocument.F;\n  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];\n  return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties){\n  var result;\n  if(O !== null){\n    Empty[PROTOTYPE] = anObject(O);\n    result = new Empty;\n    Empty[PROTOTYPE] = null;\n    // add \"__proto__\" for Object.getPrototypeOf polyfill\n    result[IE_PROTO] = O;\n  } else result = createDict();\n  return Properties === undefined ? result : dPs(result, Properties);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-create.js\n// module id = 91\n// module chunks = 0 1","var dP       = require('./_object-dp')\n  , anObject = require('./_an-object')\n  , getKeys  = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties){\n  anObject(O);\n  var keys   = getKeys(Properties)\n    , length = keys.length\n    , i = 0\n    , P;\n  while(length > i)dP.f(O, P = keys[i++], Properties[P]);\n  return O;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-dps.js\n// module id = 92\n// module chunks = 0 1","exports.f = Object.getOwnPropertySymbols;\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-gops.js\n// module id = 93\n// module chunks = 0 1","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has         = require('./_has')\n  , toObject    = require('./_to-object')\n  , IE_PROTO    = require('./_shared-key')('IE_PROTO')\n  , ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function(O){\n  O = toObject(O);\n  if(has(O, IE_PROTO))return O[IE_PROTO];\n  if(typeof O.constructor == 'function' && O instanceof O.constructor){\n    return O.constructor.prototype;\n  } return O instanceof Object ? ObjectProto : null;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-gpo.js\n// module id = 94\n// module chunks = 0 1","var has          = require('./_has')\n  , toIObject    = require('./_to-iobject')\n  , arrayIndexOf = require('./_array-includes')(false)\n  , IE_PROTO     = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function(object, names){\n  var O      = toIObject(object)\n    , i      = 0\n    , result = []\n    , key;\n  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);\n  // Don't enum bug & hidden keys\n  while(names.length > i)if(has(O, key = names[i++])){\n    ~arrayIndexOf(result, key) || result.push(key);\n  }\n  return result;\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-keys-internal.js\n// module id = 95\n// module chunks = 0 1","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export')\n  , core    = require('./_core')\n  , fails   = require('./_fails');\nmodule.exports = function(KEY, exec){\n  var fn  = (core.Object || {})[KEY] || Object[KEY]\n    , exp = {};\n  exp[KEY] = exec(fn);\n  $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-sap.js\n// module id = 96\n// module chunks = 0 1","var getKeys   = require('./_object-keys')\n  , toIObject = require('./_to-iobject')\n  , isEnum    = require('./_object-pie').f;\nmodule.exports = function(isEntries){\n  return function(it){\n    var O      = toIObject(it)\n      , keys   = getKeys(O)\n      , length = keys.length\n      , i      = 0\n      , result = []\n      , key;\n    while(length > i)if(isEnum.call(O, key = keys[i++])){\n      result.push(isEntries ? [key, O[key]] : O[key]);\n    } return result;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_object-to-array.js\n// module id = 97\n// module chunks = 0 1","module.exports = require('./_hide');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_redefine.js\n// module id = 98\n// module chunks = 0 1","var toInteger = require('./_to-integer')\n  , defined   = require('./_defined');\n// true  -> String#at\n// false -> String#codePointAt\nmodule.exports = function(TO_STRING){\n  return function(that, pos){\n    var s = String(defined(that))\n      , i = toInteger(pos)\n      , l = s.length\n      , a, b;\n    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;\n    a = s.charCodeAt(i);\n    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n      ? TO_STRING ? s.charAt(i) : a\n      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n  };\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_string-at.js\n// module id = 99\n// module chunks = 0 1","var toInteger = require('./_to-integer')\n  , max       = Math.max\n  , min       = Math.min;\nmodule.exports = function(index, length){\n  index = toInteger(index);\n  return index < 0 ? max(index + length, 0) : min(index, length);\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-index.js\n// module id = 100\n// module chunks = 0 1","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function(it, S){\n  if(!isObject(it))return it;\n  var fn, val;\n  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;\n  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;\n  throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/_to-primitive.js\n// module id = 101\n// module chunks = 0 1","var anObject = require('./_an-object')\n  , get      = require('./core.get-iterator-method');\nmodule.exports = require('./_core').getIterator = function(it){\n  var iterFn = get(it);\n  if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!');\n  return anObject(iterFn.call(it));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.get-iterator.js\n// module id = 102\n// module chunks = 0 1","var classof   = require('./_classof')\n  , ITERATOR  = require('./_wks')('iterator')\n  , Iterators = require('./_iterators');\nmodule.exports = require('./_core').isIterable = function(it){\n  var O = Object(it);\n  return O[ITERATOR] !== undefined\n    || '@@iterator' in O\n    || Iterators.hasOwnProperty(classof(O));\n};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/core.is-iterable.js\n// module id = 103\n// module chunks = 0 1","'use strict';\nvar ctx            = require('./_ctx')\n  , $export        = require('./_export')\n  , toObject       = require('./_to-object')\n  , call           = require('./_iter-call')\n  , isArrayIter    = require('./_is-array-iter')\n  , toLength       = require('./_to-length')\n  , createProperty = require('./_create-property')\n  , getIterFn      = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function(iter){ Array.from(iter); }), 'Array', {\n  // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n  from: function from(arrayLike/*, mapfn = undefined, thisArg = undefined*/){\n    var O       = toObject(arrayLike)\n      , C       = typeof this == 'function' ? this : Array\n      , aLen    = arguments.length\n      , mapfn   = aLen > 1 ? arguments[1] : undefined\n      , mapping = mapfn !== undefined\n      , index   = 0\n      , iterFn  = getIterFn(O)\n      , length, result, step, iterator;\n    if(mapping)mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n    // if object isn't iterable or it's array with default iterator - use simple case\n    if(iterFn != undefined && !(C == Array && isArrayIter(iterFn))){\n      for(iterator = iterFn.call(O), result = new C; !(step = iterator.next()).done; index++){\n        createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n      }\n    } else {\n      length = toLength(O.length);\n      for(result = new C(length); length > index; index++){\n        createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n      }\n    }\n    result.length = index;\n    return result;\n  }\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.array.from.js\n// module id = 104\n// module chunks = 0 1","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables')\n  , step             = require('./_iter-step')\n  , Iterators        = require('./_iterators')\n  , toIObject        = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function(iterated, kind){\n  this._t = toIObject(iterated); // target\n  this._i = 0;                   // next index\n  this._k = kind;                // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function(){\n  var O     = this._t\n    , kind  = this._k\n    , index = this._i++;\n  if(!O || index >= O.length){\n    this._t = undefined;\n    return step(1);\n  }\n  if(kind == 'keys'  )return step(0, index);\n  if(kind == 'values')return step(0, O[index]);\n  return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.array.iterator.js\n// module id = 105\n// module chunks = 0 1","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {isInteger: require('./_is-integer')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.number.is-integer.js\n// module id = 106\n// module chunks = 0 1","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n  isNaN: function isNaN(number){\n    return number != number;\n  }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.number.is-nan.js\n// module id = 107\n// module chunks = 0 1","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', {assign: require('./_object-assign')});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.assign.js\n// module id = 108\n// module chunks = 0 1","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', {defineProperty: require('./_object-dp').f});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.define-property.js\n// module id = 109\n// module chunks = 0 1","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object')\n  , $keys    = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function(){\n  return function keys(it){\n    return $keys(toObject(it));\n  };\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.object.keys.js\n// module id = 110\n// module chunks = 0 1","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export   = require('./_export')\n  , aFunction = require('./_a-function')\n  , anObject  = require('./_an-object')\n  , rApply    = (require('./_global').Reflect || {}).apply\n  , fApply    = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function(){\n  rApply(function(){});\n}), 'Reflect', {\n  apply: function apply(target, thisArgument, argumentsList){\n    var T = aFunction(target)\n      , L = anObject(argumentsList);\n    return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n  }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es6.reflect.apply.js\n// module id = 111\n// module chunks = 0 1","// https://github.com/tc39/proposal-object-values-entries\nvar $export  = require('./_export')\n  , $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n  entries: function entries(it){\n    return $entries(it);\n  }\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/babel-runtime/~/core-js/library/modules/es7.object.entries.js\n// module id = 112\n// module chunks = 0 1"],"sourceRoot":""}
\ No newline at end of file