{"version":3,"sources":["webpack:///article-video-loop-bundle-v2-69f1813fc7db818dad04.js","webpack:///webpack/bootstrap a81d912aa6d0966acfde","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/domready/ready.js","webpack:///./src/lib/nodelistToArray.js","webpack:///./src/lib/uuid.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/axios/index.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./src/article/client.videoLoop.js","webpack:///./node_modules/@nrk/dh-basis-levende-stillbilde/dh-basis-levende-stillbilde.esm.js","webpack:///./node_modules/@nrk/dh-basis-levende-stillbilde/node_modules/@nrk/dh-basis-common/dh-basis-common.esm.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./node_modules/@nrk/dh-basis-common/dh-basis-common.esm.js","webpack:///./src/article/components/VideoLoop.css","webpack:///./node_modules/@webcomponents/custom-elements/custom-elements.min.js","webpack:///./node_modules/intersection-observer/intersection-observer.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","isArray","val","toString","isUndefined","isBuffer","constructor","isArrayBuffer","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isObject","_typeof","isDate","isFile","isBlob","isFunction","isStream","pipe","isURLSearchParams","URLSearchParams","trim","str","replace","isStandardBrowserEnv","navigator","product","window","document","forEach","obj","fn","length","key","merge","assignValue","result","arguments","deepMerge","extend","a","b","thisArg","bind","Symbol","iterator","definition","listener","fns","doc","hack","documentElement","doScroll","loaded","test","readyState","addEventListener","removeEventListener","shift","setTimeout","push","nodelistToArray","nodeList","slice","value","uuid","Math","random","substr","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","e","this","runClearTimeout","marker","cachedClearTimeout","clearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","timeout","len","run","Item","array","noop","process","nextTick","args","Array","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","encode","encodeURIComponent","utils","url","params","paramsSerializer","serializedParams","parts","v","toISOString","JSON","stringify","join","hashmarkIndex","indexOf","__CANCEL__","setContentTypeIfUnset","headers","normalizeHeaderName","DEFAULT_CONTENT_TYPE","Content-Type","defaults","adapter","XMLHttpRequest","transformRequest","data","transformResponse","parse","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","status","common","Accept","method","settle","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","config","Promise","resolve","reject","requestData","requestHeaders","request","auth","username","password","Authorization","btoa","fullPath","baseURL","open","toUpperCase","onreadystatechange","responseURL","responseHeaders","getAllResponseHeaders","responseData","responseType","response","responseText","statusText","onabort","onerror","ontimeout","timeoutErrorMessage","cookies","xsrfValue","withCredentials","read","undefined","toLowerCase","setRequestHeader","onDownloadProgress","onUploadProgress","upload","cancelToken","promise","then","cancel","abort","send","enhanceError","message","code","error","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","prop","axiosKeys","otherKeys","keys","filter","Cancel","_interopRequireDefault","default","init","initCustomElements","_nodelistToArray","getElementsByClassName","rootElementClassName","el","isInitialized","id","_uuid","mount","getAttribute","preloadedState","insideCover","Boolean","querySelector","captionEl","parentNode","replaceChild","headingCaption","altText","byline","videoWrapperElement","_dhBasisCommon","ElementIntersectionObserver","intersections","element","elementViewportPosition","VIEWPORT_POSITION_ATTR","isIntersecting","setAttribute","err","captionContainer","createElement","innerHTML","_VideoLoop2","customElements","define","_dhBasisLevendeStillbilde2","_domready","_domready2","_dhBasisLevendeStillbilde","_VideoLoop","isDhSentryInitiated","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","ReferenceError","_inherits","subClass","superClass","create","writable","setPrototypeOf","__proto__","_CustomElement","Reflect","construct","HTMLElement","_createClass","defineProperties","target","props","descriptor","protoProps","staticProps","isVisible","child","offsetWidth","offsetHeight","LevendeStillbilde","_CustomElement2","_this","getPrototypeOf","_disconnecting","_handlePlayChange","isPaused","visibleVideoElement","paused","_updatePlayState","_shouldPlay","_playVideo","_pauseVideo","_handleResize","_preload","_setVideoAttributes","_setEventListeners","_removeEventListeners","prevValue","newValue","reducedMotion","testReducedMotion","valueChanged","_this2","videoElements","_this3","disableForcedAttributes","state","viewportPosition","_this4","videoElement","autoplayBlocked","play","catch","console","pause","find","toArray","querySelectorAll","hasAttribute","set","removeAttribute","toggleAttribute","_toConsumableArray","arr","arr2","from","asyncGeneratorStep","gen","_next","_throw","arg","info","done","_asyncToGenerator","_defineProperty","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","source","getOwnPropertyDescriptors","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","propertyIsEnumerable","boolValue","nextValue","addStyle","nodeName","css","min","getElementById","head","insertAdjacentHTML","dispatchEvent","event","detail","ignore","CustomEvent","bubbles","cancelable","createEvent","initCustomEvent","easeOutQuint","t","matchMedia","matches","pngFragment","options","aspectRatios","map","ratio","sizes","quality","jpgFragment","size","createQuery","imageObjects","images","getImageIds","createBase","getImage","some","image","reduce","format","advanced","IMAGE_PROPS","_ref","_ref$format","transformId","containsJpg","containsPng","transformBackId","res","fromEntries","items","_ref6","_slicedToArray","traverse","entries","_ref2","_ref7","_ref3","_ref8","item","acc","prefetchImageData","_x","_x2","_prefetchImageData","_callee2","query","regeneratorRuntime","wrap","_context2","prev","next","type","startsWith","gqlApiUrl","abrupt","gqlApi","stop","mergeImageProps","imageUrls","_ref4","_ref9","imageProps","mergeVideoloopProps","_mergeVideoloopProps","_callee4","objects","_context4","all","_callee3","_context3","t0","t1","t2","getVideoSrc","t3","sent","t4","videos","_x4","accumulator","current","_getVideoSrc","_callee5","videoObj","hasVideoUrl","basePath","_context5","getVideos","extractBasePathFromUrl","video","getTypeFromHeight","height","poster","stillFileName","aspectRatio","displayAspectRatio","sources","mp4","videoFileName","decodedUrl","lastIndexOf","_x3","_getVideos","_callee6","videoPayload","_context6","getVideoPayload","movingStills","_axios2","mergeMapProps","_mergeMapProps","_callee7","rest","_context7","getMapDefinition","_getMapDefinition","_callee8","_context8","fromEntries$1","_ref10","mergeMediaProps","_mergeMediaProps","_callee10","imageData","mergedOptions","imageDataStored","mergedProps","mappedEntries","_context10","defaultOptions","_callee9","_ref11","mergedArray","_context9","withinRange","start","MAX_SAFE_INTEGER","withinStops","currentTime","stops","targetStop","nrOfStops","uniqueStops","unique","targetTime","index","closest","VerticalScroll","HorizontalScroll","sliceIterator","_arr","_n","_d","_e","_s","_i","_axios","defaultConfig","rootMargin","threshold","elements","onChange","intersectionObserver","IntersectionObserver","entry","idx","splice","intersectionRatio","elm","observe","unobserve","disconnect","proto","Element","match","msMatchesSelector","webkitMatchesSelector","parentElement","container","top","duration","scrollTop","distance","startTime","loop","timeElapsed","requestAnimationFrame","left","callback","scrollLeft","npm_package_name","npm_package_version","_callee","_ref5","errors","_context","variables","User-Agent","createInstance","context","Axios","mergeConfig","axios","instanceConfig","CancelToken","isCancel","promises","spread","interceptors","InterceptorManager","dispatchRequest","chain","interceptor","unshift","fulfilled","rejected","getUri","handlers","use","eject","h","throwIfCancellationRequested","throwIfRequested","transformData","reason","normalizedName","isAxiosError","toJSON","description","number","fileName","lineNumber","columnNumber","stack","isAbsoluteURL","combineURLs","requestedURL","relativeURL","ignoreDuplicateOf","parsed","split","line","resolveURL","href","msie","urlParsingNode","protocol","host","search","hash","hostname","port","pathname","charAt","originURL","userAgent","location","requestURL","write","expires","path","domain","secure","cookie","Date","toGMTString","RegExp","decodeURIComponent","remove","now","executor","resolvePromise","token","standaloneVideo","small","medium","large","horizontalVideo","verticalVideo","videoLoop","videoLoop__fallbackImage","wrapper","videoLoop--played","ra","qa","has","I","isConnected","sa","__CE_isImportDocument","Document","ShadowRoot","J","children","firstChild","nextSibling","nodeType","Node","ELEMENT_NODE","K","L","f","localName","import","Set","add","__CE_shadowRoot","M","ta","N","MutationObserver","childList","subtree","ua","va","wa","O","Map","g","j","xa","SyntaxError","P","za","w","Function","k","observedAttributes","constructorFunction","connectedCallback","disconnectedCallback","adoptedCallback","attributeChangedCallback","constructionStack","ya","upgrade","__CE_state","Q","delete","R","S","T","noDocumentConstructionObserver","shadyDomFastWalk","U","ShadyDOM","inUse","nativeMethods","Aa","Ba","V","W","__CE_patched","X","Y","__CE_registry","__CE_documentLoadHandled","ownerDocument","defaultView","pop","__CE_definition","hasAttributes","Ca","namespaceURI","HTMLUnknownElement","sourceURL","column","ErrorEvent","initErrorEvent","filename","lineno","colno","preventDefault","defaultPrevented","Ea","Da","na","Z","DocumentFragment","prepend","append","Fa","aa","ba","ca","Ga","TEXT_NODE","childNodes","r","q","u","x","COMMENT_NODE","textContent","createTextNode","Ha","ja","ka","la","ma","Ia","previousSibling","lastChild","String","y","z","H","content","B","A","E","D","C","F","oa","G","pa","fa","ha","ia","Ja","da","ea","createElementNS","importNode","cloneNode","appendChild","insertBefore","removeChild","attachShadow","getAttributeNS","setAttributeNS","removeAttributeNS","insertAdjacentElement","before","after","replaceWith","contains","addedNodes","whenDefined","polyfillWrapFlushCallback","CustomElementRegistry","polyfillDefineLazy","forcePolyfill","__CE_installPolyfill","getFrameElement","frameElement","IntersectionObserverEntry","time","rootBounds","ensureDOMRect","boundingClientRect","intersectionRect","getEmptyRect","targetRect","targetArea","width","intersectionArea","Number","toFixed","opt_options","root","_checkForIntersections","throttle","THROTTLE_TIMEOUT","_callback","_observationTargets","_queuedEntries","_rootMarginValues","_parseRootMargin","thresholds","_initThresholds","margin","unit","_monitoringDocuments","_monitoringUnsubscribes","performance","timer","addEvent","node","opt_useCapture","attachEvent","removeEvent","detatchEvent","computeRectIntersection","rect1","rect2","max","bottom","right","getBoundingClientRect","rect","convertFromParentRect","parentBoundingRect","parentIntersectionRect","containsDeep","parent","getParentNode","assignedSlot","startDoc","frame","registry","crossOriginUpdater","crossOriginRect","POLL_INTERVAL","USE_MUTATION_OBSERVER","_setupCrossOriginUpdater","observer","_resetCrossOriginUpdater","_registerInstance","_monitorIntersections","_unmonitorIntersections","_unregisterInstance","_unmonitorAllIntersections","takeRecords","records","opt_threshold","sort","isNaN","opt_rootMargin","marginString","margins","exec","parseFloat","win","monitoringInterval","domObserver","setInterval","attributes","characterData","clearInterval","rootDoc","itemDoc","unsubscribe","unsubscribes","rootIsInDom","_rootIsInDom","rootRect","_getRootRect","rootContainsTarget","_rootContainsTarget","oldEntry","_computeTargetAndRootIntersection","newEntry","_hasCrossedThreshold","getComputedStyle","display","atRoot","parentRect","parentComputedStyle","frameRect","frameIntersect","body","overflow","html","clientWidth","clientHeight","_expandRectByRootMargin","newRect","oldRatio","newRatio"],"mappings":"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","file":"article-video-loop-bundle-v2-69f1813fc7db818dad04.js","sourcesContent":["/******/ (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/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/static/\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 15);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar bind = __webpack_require__(7);\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return typeof FormData !== 'undefined' && val instanceof FormData;\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n result = ArrayBuffer.isView(val);\n } else {\n result = val && val.buffer && val.buffer instanceof ArrayBuffer;\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) {\n return false;\n }\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge() /* obj1, obj2, obj3, ... */{\n var result = {};\n function assignValue(val, key) {\n if (_typeof(result[key]) === 'object' && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge() /* obj1, obj2, obj3, ... */{\n var result = {};\n function assignValue(val, key) {\n if (_typeof(result[key]) === 'object' && (typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if ((typeof val === 'undefined' ? 'undefined' : _typeof(val)) === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/*!\n * domready (c) Dustin Diaz 2014 - License MIT\n */\n!function (name, definition) {\n\n if (true) module.exports = definition();else if (typeof define == 'function' && _typeof(define.amd) == 'object') define(definition);else this[name] = definition();\n}('domready', function () {\n\n var fns = [],\n _listener,\n doc = document,\n hack = doc.documentElement.doScroll,\n domContentLoaded = 'DOMContentLoaded',\n loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState);\n\n if (!loaded) doc.addEventListener(domContentLoaded, _listener = function listener() {\n doc.removeEventListener(domContentLoaded, _listener);\n loaded = 1;\n while (_listener = fns.shift()) {\n _listener();\n }\n });\n\n return function (fn) {\n loaded ? setTimeout(fn, 0) : fns.push(fn);\n };\n});\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.nodelistToArray = nodelistToArray;\nfunction nodelistToArray(nodeList) {\n return [].slice.call(nodeList);\n}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.uuid = uuid;\nfunction uuid() {\n return \"_\" + Math.random().toString(36).substr(2, 9);\n}\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout() {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n})();\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e) {\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e) {\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while (len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n return [];\n};\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n return '/';\n};\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function () {\n return 0;\n};\n\n/***/ }),\n/* 5 */,\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = __webpack_require__(19);\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\n\nfunction encode(val) {\n return encodeURIComponent(val).replace(/%40/gi, '@').replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(process) {\n\nvar utils = __webpack_require__(0);\nvar normalizeHeaderName = __webpack_require__(24);\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = __webpack_require__(11);\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = __webpack_require__(11);\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) {/* Ignore */}\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\nvar settle = __webpack_require__(25);\nvar buildURL = __webpack_require__(8);\nvar buildFullPath = __webpack_require__(27);\nvar parseHeaders = __webpack_require__(30);\nvar isURLSameOrigin = __webpack_require__(31);\nvar createError = __webpack_require__(12);\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = __webpack_require__(32);\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar enhanceError = __webpack_require__(26);\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'params', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy'];\n var defaultToConfig2Keys = ['baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer', 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName', 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent', 'httpsAgent', 'cancelToken', 'socketPath'];\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n var axiosKeys = valueFromConfig2Keys.concat(mergeDeepPropertiesKeys).concat(defaultToConfig2Keys);\n\n var otherKeys = Object.keys(config2).filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n return config;\n};\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\n\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(16);\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _domready = __webpack_require__(1);\n\nvar _domready2 = _interopRequireDefault(_domready);\n\nvar _nodelistToArray = __webpack_require__(2);\n\nvar _uuid = __webpack_require__(3);\n\nvar _dhBasisLevendeStillbilde = __webpack_require__(17);\n\nvar _dhBasisLevendeStillbilde2 = _interopRequireDefault(_dhBasisLevendeStillbilde);\n\nvar _dhBasisCommon = __webpack_require__(35);\n\nvar _VideoLoop = __webpack_require__(36);\n\nvar _VideoLoop2 = _interopRequireDefault(_VideoLoop);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar rootElementClassName = 'article-levende-stillbilde-root';\n\nwindow[rootElementClassName] = window[rootElementClassName] || {};\nwindow.isDhSentryInitiated = false;\n\nvar VIEWPORT_POSITION_ATTR = 'data-viewport-position';\n\nfunction init() {\n initCustomElements();\n\n var elementsArray = (0, _nodelistToArray.nodelistToArray)(document.getElementsByClassName(rootElementClassName));\n elementsArray.filter(function (el) {\n return !isInitialized(el);\n }).forEach(function (el) {\n el.id = (0, _uuid.uuid)();\n window[rootElementClassName][el.id] = true;\n\n // Extract preloaded state sent from server\n var preloadedState = JSON.parse(el.getAttribute('data-preloaded-state'));\n mount(el, preloadedState);\n });\n}\n\nfunction mount(el, preloadedState) {\n try {\n // Checks to see whether or not the video element is inside the a feature article cover\n var insideCover = Boolean(document.querySelector('.article-feature__cover #' + el.id));\n var captionEl = document.querySelector('#' + el.id + ' [data-caption]');\n if (insideCover && captionEl) {\n captionEl.parentNode.replaceChild(headingCaption(preloadedState.altText, preloadedState.byline), captionEl);\n }\n\n var videoWrapperElement = el.querySelector('.dh-video-wrapper');\n\n // eslint-disable-next-line no-unused-vars\n var elementObserver = new _dhBasisCommon.ElementIntersectionObserver([videoWrapperElement], function (intersections) {\n var element = intersections[0];\n var elementViewportPosition = videoWrapperElement.getAttribute(VIEWPORT_POSITION_ATTR);\n if (element.isIntersecting && elementViewportPosition === 'OUT-OF-VIEWPORT') {\n videoWrapperElement.setAttribute(VIEWPORT_POSITION_ATTR, 'IN-VIEWPORT');\n }\n if (!element.isIntersecting && elementViewportPosition === 'IN-VIEWPORT') {\n videoWrapperElement.setAttribute(VIEWPORT_POSITION_ATTR, 'OUT-OF-VIEWPORT');\n }\n });\n } catch (err) {\n // fail silently\n }\n}\n\nfunction headingCaption(altText, byline) {\n var captionContainer = document.createElement('div');\n captionContainer.innerHTML = '' + altText + '' + byline + '';\n captionContainer.setAttribute('class', _VideoLoop2.default['byline']);\n captionContainer.setAttribute('data-caption', true);\n return captionContainer;\n}\n\nfunction initCustomElements() {\n if (typeof customElements.get('dh-lvs-basis-levende-stillbilde') === 'undefined') {\n customElements.define('dh-lvs-basis-levende-stillbilde', _dhBasisLevendeStillbilde2.default);\n }\n}\n\nfunction isInitialized(el) {\n return el.id && window[rootElementClassName][el.id];\n}\n\n(0, _domready2.default)(function () {\n if (!('customElements' in window)) {\n __webpack_require__(37);\n }\n if (!('IntersectionObserver' in window)) {\n __webpack_require__(38);\n }\n init();\n});\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dhBasisCommon = __webpack_require__(18);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _CustomElement() {\n return Reflect.construct(HTMLElement, [], this.__proto__.constructor);\n}\n\n;\nObject.setPrototypeOf(_CustomElement.prototype, HTMLElement.prototype);\nObject.setPrototypeOf(_CustomElement, HTMLElement);\n\n\nvar STATE_ATTR = 'data-state';\nvar VIEWPORT_POSITION_ATTR = 'data-viewport-position';\nvar DISABLE_FORCED_ATTRIBUTES_ATTR = 'disable-forced-attributes';\nvar IS_PAUSED = 'is-paused';\nvar AUTOPLAY_BLOCKED = 'autoplay-blocked';\n\nvar isVisible = function isVisible(child) {\n return child.offsetWidth > 0 || child.offsetHeight > 0;\n};\n\nvar LevendeStillbilde = function (_CustomElement2) {\n _inherits(LevendeStillbilde, _CustomElement2);\n\n function LevendeStillbilde() {\n _classCallCheck(this, LevendeStillbilde);\n\n var _this = _possibleConstructorReturn(this, (LevendeStillbilde.__proto__ || Object.getPrototypeOf(LevendeStillbilde)).apply(this, arguments));\n\n _this._disconnecting = false;\n\n _this._handlePlayChange = function () {\n _this.isPaused = _this.visibleVideoElement.paused;\n };\n\n _this._updatePlayState = function () {\n if (!_this.visibleVideoElement) {\n return;\n }\n\n if (_this._shouldPlay()) {\n _this._playVideo();\n } else {\n _this._pauseVideo();\n }\n };\n\n _this._handleResize = function () {\n _this._updatePlayState();\n\n _this._preload();\n };\n return _this;\n }\n\n _createClass(LevendeStillbilde, [{\n key: 'connectedCallback',\n value: function connectedCallback() {\n this._setVideoAttributes();\n\n this._setEventListeners();\n\n this._updatePlayState();\n }\n }, {\n key: 'disconnectedCallback',\n value: function disconnectedCallback() {\n this._disconnecting = true;\n\n this._removeEventListeners();\n }\n }, {\n key: 'attributeChangedCallback',\n value: function attributeChangedCallback(name, prevValue, newValue) {\n var reducedMotion = (0, _dhBasisCommon.testReducedMotion)();\n var valueChanged = prevValue !== newValue;\n\n if ((name === STATE_ATTR || name === VIEWPORT_POSITION_ATTR) && !reducedMotion) {\n if (valueChanged) {\n this._updatePlayState();\n\n if (name === VIEWPORT_POSITION_ATTR && newValue === 'IN-VIEWPORT') {\n this._preload();\n }\n }\n }\n }\n }, {\n key: '_setEventListeners',\n value: function _setEventListeners() {\n var _this2 = this;\n\n window.addEventListener('resize', this._handleResize);\n this.videoElements.forEach(function (el) {\n el.addEventListener('pause', _this2._handlePlayChange);\n el.addEventListener('play', _this2._handlePlayChange);\n el.addEventListener('loadedmetadata', _this2._updatePlayState);\n });\n }\n }, {\n key: '_removeEventListeners',\n value: function _removeEventListeners() {\n var _this3 = this;\n\n window.removeEventListener('resize', this._handleResize);\n this.videoElements.forEach(function (el) {\n el.removeEventListener('pause', _this3._handlePlayChange);\n el.removeEventListener('play', _this3._handlePlayChange);\n el.removeEventListener('loadedmetadata', _this3._updatePlayState);\n });\n }\n }, {\n key: '_setVideoAttributes',\n value: function _setVideoAttributes() {\n if (!this.disableForcedAttributes) {\n this.videoElements.forEach(function (el) {\n el.setAttribute('playsInline', '');\n el.setAttribute('loop', '');\n el.setAttribute('disableRemotePlayback', '');\n el.setAttribute('x-webkit-airplay', 'deny');\n });\n }\n }\n }, {\n key: '_shouldPlay',\n value: function _shouldPlay() {\n return this.visibleVideoElement.readyState >= 1 && this.state === 'ACTIVE' && this.viewportPosition === 'IN-VIEWPORT';\n }\n }, {\n key: '_preload',\n value: function _preload() {\n if (this.visibleVideoElement.getAttribute('preload') !== 'auto') {\n this.visibleVideoElement.setAttribute('preload', 'auto');\n }\n }\n }, {\n key: '_playVideo',\n value: function _playVideo() {\n var _this4 = this;\n\n var videoElement = this.visibleVideoElement;\n\n if (videoElement.paused && !this.autoplayBlocked) {\n var playPromise = videoElement.play() || Promise.resolve();\n playPromise.catch(function (e) {\n console.error(e);\n _this4.autoplayBlocked = true;\n });\n }\n }\n }, {\n key: '_pauseVideo',\n value: function _pauseVideo() {\n var videoElement = this.visibleVideoElement;\n\n if (!videoElement.paused) {\n videoElement.pause();\n }\n }\n }, {\n key: 'visibleVideoElement',\n get: function get() {\n return this.videoElements.find(isVisible);\n }\n }, {\n key: 'videoElements',\n get: function get() {\n return (0, _dhBasisCommon.toArray)(this.querySelectorAll('video'));\n }\n }, {\n key: 'disableForcedAttributes',\n get: function get() {\n return this.hasAttribute(DISABLE_FORCED_ATTRIBUTES_ATTR);\n }\n }, {\n key: 'state',\n get: function get() {\n return this.getAttribute(STATE_ATTR);\n },\n set: function set(val) {\n this.setAttribute(STATE_ATTR, val);\n }\n }, {\n key: 'isPaused',\n get: function get() {\n return this.getAttribute(IS_PAUSED);\n },\n set: function set(val) {\n if (val) {\n this.setAttribute(IS_PAUSED, '');\n } else {\n this.removeAttribute(IS_PAUSED);\n }\n }\n }, {\n key: 'autoplayBlocked',\n get: function get() {\n return this.hasAttribute(AUTOPLAY_BLOCKED) || false;\n },\n set: function set(val) {\n (0, _dhBasisCommon.toggleAttribute)(this, AUTOPLAY_BLOCKED, val);\n }\n }, {\n key: 'viewportPosition',\n get: function get() {\n return this.getAttribute(VIEWPORT_POSITION_ATTR);\n },\n set: function set(val) {\n this.setAttribute(VIEWPORT_POSITION_ATTR, val);\n }\n }], [{\n key: 'observedAttributes',\n get: function get() {\n return [STATE_ATTR, DISABLE_FORCED_ATTRIBUTES_ATTR, VIEWPORT_POSITION_ATTR];\n }\n }]);\n\n return LevendeStillbilde;\n}(_CustomElement);\n\nexports.default = LevendeStillbilde;\n//# sourceMappingURL=dh-basis-levende-stillbilde.esm.js.map\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(process) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.withinStops = exports.withinRange = exports.toggleAttribute = exports.toArray = exports.testReducedMotion = exports.setAttribute = exports.mergeVideoloopProps = exports.mergeMediaProps = exports.mergeMapProps = exports.mergeImageProps = exports.dispatchEvent = exports.closest = exports.addStyle = exports.VerticalScroll = exports.HorizontalScroll = exports.ElementIntersectionObserver = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _axios = __webpack_require__(6);\n\nvar _axios2 = _interopRequireDefault(_axios);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n/* eslint-disable compat/compat */\nvar defaultConfig = {\n rootMargin: '0px 0px 0px 0px',\n threshold: [0, 0.5, 1]\n};\n\nvar ElementIntersectionObserver = function () {\n function ElementIntersectionObserver(elements, onChange, config) {\n var _this = this;\n\n _classCallCheck(this, ElementIntersectionObserver);\n\n this.intersections = void 0;\n this.elements = void 0;\n this.elements = elements.slice(0);\n this.intersections = elements.map(function (target) {\n return {\n target: target,\n isIntersecting: false,\n ratio: null\n };\n });\n this.intersectionObserver = new IntersectionObserver(function (entries) {\n var intersections = _this.intersections.slice(0);\n entries.forEach(function (entry) {\n var idx = elements.indexOf(entry.target);\n intersections.splice(idx, 1, {\n target: entry.target,\n isIntersecting: entry.isIntersecting,\n ratio: entry.intersectionRatio\n });\n });\n _this.intersections = intersections;\n onChange(_this.intersections);\n }, _objectSpread2({}, defaultConfig, {}, config));\n elements.forEach(function (elm) {\n return _this.intersectionObserver.observe(elm);\n });\n }\n\n _createClass(ElementIntersectionObserver, [{\n key: \"disconnect\",\n value: function disconnect() {\n var _this2 = this;\n\n // Unregister trigger elements\n this.elements.forEach(function (elm) {\n return _this2.intersectionObserver.unobserve(elm);\n }); // Disconnect intersection observer\n\n this.intersectionObserver.disconnect();\n }\n }]);\n\n return ElementIntersectionObserver;\n}();\n\nfunction toggleAttribute(el, name, boolValue) {\n if (!el) {\n return;\n }\n\n var nextValue;\n\n if (typeof boolValue !== 'undefined') {\n nextValue = !!boolValue;\n } else {\n nextValue = el.hasAttribute(name);\n }\n\n if (nextValue) {\n el.setAttribute(name, '');\n } else {\n el.removeAttribute(name);\n }\n}\nfunction setAttribute(el, name, nextValue) {\n if (!el) {\n return;\n }\n\n if (nextValue) {\n el.setAttribute(name, nextValue);\n } else {\n el.removeAttribute(name);\n }\n}\nvar closest = function () {\n var proto = typeof window === 'undefined' ? {} : window.Element.prototype;\n var match = proto.matches || proto.msMatchesSelector || proto.webkitMatchesSelector;\n\n if (proto.closest) {\n return function (el, css) {\n return el.closest(css);\n };\n } else {\n return function (el, css) {\n for (; el; el = el.parentElement) {\n if (match.call(el, css)) return el;\n }\n\n return null;\n };\n }\n}();\nfunction addStyle(nodeName, css) {\n var key = \"style-\".concat(nodeName.toLowerCase());\n var min = css.replace(/\\/\\*[^!][^*]*\\*\\//g, '').replace(/\\s*(^|[:;,{}]|$)\\s*/g, '$1');\n document.getElementById(key) || document.head.insertAdjacentHTML('afterbegin', \"\"));\n}\nfunction toArray(nodeList) {\n return [].slice.call(nodeList);\n}\nfunction dispatchEvent(element, name) {\n var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var ignore = \"prevent_recursive_dispatch_maximum_callstack\".concat(name);\n var event;\n if (element[ignore]) return true; // We are already processing this event, so skip sending a new one\n else element[ignore] = true; // Add name to dispatching ignore\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: detail\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(name, true, true, detail);\n } // IE reports incorrect event.defaultPrevented\n // but correct return value on element.dispatchEvent\n\n\n var result = element.dispatchEvent(event);\n element[ignore] = null; // Remove name from dispatching ignore\n\n return result; // Follow W3C standard for return value\n}\n\nfunction easeOutQuint(t) {\n return 1 + --t * t * t * t * t;\n}\n\nvar VerticalScroll = function () {\n function VerticalScroll(container) {\n _classCallCheck(this, VerticalScroll);\n\n this.container = void 0;\n this.container = container;\n }\n\n _createClass(VerticalScroll, [{\n key: \"to\",\n value: function to(top) {\n var _this3 = this;\n\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var from = this.container.scrollTop;\n var distance = top - from;\n var startTime = null;\n\n var loop = function loop(currentTime) {\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n _this3.container.scrollTop = from + distance * easeOutQuint(timeElapsed / duration);\n\n if (timeElapsed < duration) {\n window.requestAnimationFrame(loop);\n } else {\n _this3.container.scrollTop = top;\n }\n };\n\n window.requestAnimationFrame(loop);\n }\n }]);\n\n return VerticalScroll;\n}();\n\nvar HorizontalScroll = function () {\n function HorizontalScroll(container) {\n _classCallCheck(this, HorizontalScroll);\n\n this.container = void 0;\n this.container = container;\n }\n\n _createClass(HorizontalScroll, [{\n key: \"to\",\n value: function to(left) {\n var _this4 = this;\n\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var callback = arguments.length > 2 ? arguments[2] : undefined;\n var from = this.container.scrollLeft;\n var distance = left - from;\n var startTime = null;\n\n var loop = function loop(currentTime) {\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n _this4.container.scrollLeft = from + distance * easeOutQuint(timeElapsed / duration);\n\n if (timeElapsed < duration) {\n window.requestAnimationFrame(loop);\n } else {\n _this4.container.scrollLeft = left;\n callback && callback();\n }\n };\n\n window.requestAnimationFrame(loop);\n }\n }]);\n\n return HorizontalScroll;\n}();\n\nfunction testReducedMotion() {\n if (typeof window !== 'undefined') {\n return !!window.matchMedia && window.matchMedia('(prefers-reduced-motion)').matches;\n }\n\n return false;\n}\n\nvar name = process.env.npm_package_name;\nvar version = process.env.npm_package_version;\n\nfunction createGqlApi() {\n return {\n get: function get(query, url) {\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n var _ref5, data, errors;\n\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return (0, _axios2.default)({\n method: 'POST',\n url: url,\n data: {\n query: query,\n variables: null\n },\n timeout: 7500,\n headers: {\n 'User-Agent': \"\".concat(name, \"/\").concat(version, \" (node/isomorphic-fetch)\"),\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n }\n }).then(function (res) {\n return res.data;\n });\n\n case 2:\n _ref5 = _context.sent;\n data = _ref5.data;\n errors = _ref5.errors;\n\n if (!(errors && errors.length)) {\n _context.next = 7;\n break;\n }\n\n throw Error(errors);\n\n case 7:\n return _context.abrupt(\"return\", transformResponse(data));\n\n case 8:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }))();\n }\n };\n}\n\nvar gqlApi = createGqlApi();\n\nfunction pngFragment(options) {\n var aspects = options.aspectRatios.map(function (ratio) {\n var sizes = ratio.sizes.map(function (s) {\n return \"w\".concat(s, \": url(quality: \").concat(ratio.quality || '0.7', \", width: \").concat(s, \", format: png)\");\n }).join('\\n');\n return \"\".concat(ratio.id, \": crop(aspect: \").concat(ratio.id, \") {\\n \").concat(ratio.id === 'original' ? 'aspect' : '', \"\\n \").concat(sizes, \"\\n }\");\n }).join('\\n');\n return \"\\nfragment imageCropsPng on Image {\\n title,\\n creators,\\n credit,\\n category,\\n \".concat(aspects, \"\\n}\\n\");\n}\n\nfunction jpgFragment(options) {\n var aspects = options.aspectRatios.map(function (ratio) {\n var sizes = ratio.sizes.map(function (size) {\n return \"w\".concat(size, \": url(quality: \").concat(ratio.quality || '0.7', \", width: \").concat(size, \")\");\n }).join('\\n');\n return \"\".concat(ratio.id, \": crop(aspect: \").concat(ratio.id, \") {\\n \").concat(ratio.id === 'original' ? 'aspect' : '', \"\\n \").concat(sizes, \"\\n }\");\n }).join('\\n');\n return \"\\nfragment imageCropsJpg on Image {\\n title,\\n creators,\\n credit,\\n category,\\n \".concat(aspects, \"\\n}\\n\");\n}\n/**\n * Transforms a series of image sections to a Polopoly GraphQL API query\n */\n\nfunction createQuery(imageObjects, options) {\n var images = getImageIds(imageObjects);\n return \"\\n \".concat(createBase(images, options), \"\\n query {\\n \").concat(images.map(getImage).join('\\n'), \"\\n }\");\n}\nvar IMAGE_PROPS = ['vertical', 'horizontal'];\n\nfunction getImageIds(imageObjects) {\n if (imageObjects.some(function (image) {\n return !image;\n })) {\n throw new Error('Undefined image object');\n }\n\n return imageObjects.reduce(function (result, image) {\n var format = image.format || image.advanced && image.advanced.format || 'jpg';\n /* Image can be stored directly on image object */\n\n if (image.id && !result.find(function (el) {\n return el.id === image.id;\n })) {\n result.push({\n id: image.id,\n format: format\n });\n }\n /* or on a predefined set of image properties */\n\n IMAGE_PROPS.forEach(function (prop) {\n var value = image[prop];\n\n if (value && value.id && !result.find(function (el) {\n return el.id === value.id;\n })) {\n result.push({\n id: value.id,\n format: format\n });\n }\n });\n return result;\n }, []);\n}\n\nfunction getImage(_ref) {\n var id = _ref.id,\n _ref$format = _ref.format,\n format = _ref$format === undefined ? 'jpg' : _ref$format;\n\n\n if (format === 'png') {\n return \"\".concat(transformId(id), \": model(id: \\\"\").concat(id, \"\\\") {\\n ...imageCropsPng\\n }\");\n }\n\n return \"\".concat(transformId(id), \": model(id: \\\"\").concat(id, \"\\\") {\\n ...imageCropsJpg\\n }\");\n}\n\nfunction createBase(imageObjects, options) {\n var containsJpg = imageObjects.filter(function (el) {\n return el.format === 'jpg';\n }).length > 0;\n var containsPng = imageObjects.filter(function (el) {\n return el.format === 'png';\n }).length > 0;\n return \"\\n \".concat(containsJpg ? jpgFragment(options) : '', \"\\n \").concat(containsPng ? pngFragment(options) : '', \"\\n \");\n}\n/**\n * Transforns a polopoly id to something that can be used as a key in a GraphQL query\n * Example: '1.14252981' -> 'id_1_14252981'\n */\n\nfunction transformId(id) {\n return \"id\".concat(id.replace(/\\./g, '__'));\n}\n/**\n * Transforns an already transformed polopoly id back to a regular polopoly id\n * Example: ''id_1_14252981' -> 1.14252981'\n */\n\nfunction transformBackId(id) {\n return id.replace('id', '').replace(/__/g, '.');\n}\n\nfunction transformResponse(response) {\n return Object.keys(response).reduce(function (res, key) {\n var transformedKey = transformBackId(key);\n res[transformedKey] = response[key];\n return res;\n }, {});\n}\n\nfunction fromEntries(items) {\n return [].concat(_toConsumableArray(items)).reduce(function (obj, _ref) {\n var _ref6 = _slicedToArray(_ref, 2),\n key = _ref6[0],\n val = _ref6[1];\n\n obj[key] = val;\n return obj;\n }, {});\n}\n\nfunction traverse(obj, filter) {\n var matches = [];\n\n if (filter(obj)) {\n /* Object is a match, returning */\n matches.push(obj);\n }\n\n return [].concat(matches, _toConsumableArray(Object.entries(obj).filter(function (_ref2) {\n var _ref7 = _slicedToArray(_ref2, 2),\n _ = _ref7[0],\n value = _ref7[1];\n\n return !!value;\n }).map(function (_ref3) {\n var _ref8 = _slicedToArray(_ref3, 2),\n _ = _ref8[0],\n value = _ref8[1];\n\n if (Array.isArray(value)) {\n return value.map(function (item) {\n return traverse(item, filter);\n }).reduce(function (acc, val) {\n return acc.concat(val);\n }, []);\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) === 'object') {\n return traverse(value, filter);\n } else {\n return null;\n }\n }).reduce(function (acc, val) {\n return acc.concat(val);\n }, []).filter(Boolean)));\n}\n/*\n * Traverses the props tree and fetches data for all image objects\n * */\n\nfunction prefetchImageData(_x, _x2) {\n return _prefetchImageData.apply(this, arguments);\n}\n\nfunction _prefetchImageData() {\n _prefetchImageData = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(props, options) {\n var imageObjects, query;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n imageObjects = traverse(props, function (value) {\n return value.type && value.type.startsWith('image');\n });\n\n if (!(imageObjects.length > 0)) {\n _context2.next = 6;\n break;\n }\n\n if (options.gqlApiUrl) {\n _context2.next = 4;\n break;\n }\n\n throw new Error(\"Missing option 'gqlApiUrl'\");\n\n case 4:\n query = createQuery(imageObjects, options);\n return _context2.abrupt(\"return\", gqlApi.get(query, options.gqlApiUrl));\n\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n return _prefetchImageData.apply(this, arguments);\n}\n\nvar imageProps = ['vertical', 'horizontal'];\nfunction mergeImageProps(props, imageUrls) {\n if ('id' in props) {\n return _objectSpread2({}, props, {}, imageUrls[props.id]);\n } else {\n return fromEntries(Object.entries(props).map(function (_ref4) {\n var _ref9 = _slicedToArray(_ref4, 2),\n key = _ref9[0],\n value = _ref9[1];\n\n if (imageProps.indexOf(key) !== -1) {\n return [key, mergeImageProps(value, imageUrls)];\n } else {\n return [key, value];\n }\n }));\n }\n}\n\nfunction mergeVideoloopProps(_x) {\n return _mergeVideoloopProps.apply(this, arguments);\n}\n\nfunction _mergeVideoloopProps() {\n _mergeVideoloopProps = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(props) {\n var objects;\n return regeneratorRuntime.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return Promise.all(Object.keys(props).map(\n /*#__PURE__*/\n function () {\n var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(key) {\n return regeneratorRuntime.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(key === 'horizontal' || key === 'vertical')) {\n _context3.next = 9;\n break;\n }\n\n _context3.t0 = _objectSpread2;\n _context3.t1 = {\n id: key\n };\n _context3.t2 = props[key];\n _context3.next = 6;\n return getVideoSrc(props[key]);\n\n case 6:\n _context3.t3 = _context3.sent;\n _context3.t4 = {\n videos: _context3.t3\n };\n return _context3.abrupt(\"return\", (0, _context3.t0)(_context3.t1, _context3.t2, _context3.t4));\n\n case 9:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x4) {\n return _ref2.apply(this, arguments);\n };\n }()));\n\n case 2:\n objects = _context4.sent;\n return _context4.abrupt(\"return\", _objectSpread2({}, props, {}, objects.filter(Boolean).reduce(function (accumulator, current) {\n accumulator[current.id] = current;\n delete accumulator[current.id].id;\n return accumulator;\n }, {})));\n\n case 4:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n return _mergeVideoloopProps.apply(this, arguments);\n}\n\nfunction getVideoSrc(_x2) {\n return _getVideoSrc.apply(this, arguments);\n}\n\nfunction _getVideoSrc() {\n _getVideoSrc = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5(videoObj) {\n var hasVideoUrl, videos, basePath;\n return regeneratorRuntime.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n hasVideoUrl = videoObj && videoObj !== 'null';\n\n if (!hasVideoUrl) {\n _context5.next = 9;\n break;\n }\n\n _context5.next = 4;\n return getVideos(videoObj.url);\n\n case 4:\n videos = _context5.sent;\n basePath = extractBasePathFromUrl(videoObj.url);\n return _context5.abrupt(\"return\", videos.map(function (video) {\n return {\n type: getTypeFromHeight(video.height),\n poster: \"\".concat(basePath, \"/\").concat(video.stillFileName),\n aspectRatio: video.displayAspectRatio,\n height: video.height,\n sources: {\n mp4: \"\".concat(basePath, \"/\").concat(video.videoFileName)\n }\n };\n }));\n\n case 9:\n return _context5.abrupt(\"return\", null);\n\n case 10:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n return _getVideoSrc.apply(this, arguments);\n}\n\nfunction extractBasePathFromUrl(url) {\n var decodedUrl = url.replace(/%2F/g, '/');\n return decodedUrl.substr(0, decodedUrl.lastIndexOf('/'));\n}\n\nfunction getVideos(_x3) {\n return _getVideos.apply(this, arguments);\n}\n\nfunction _getVideos() {\n _getVideos = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6(url) {\n var videoPayload;\n return regeneratorRuntime.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return getVideoPayload(url);\n\n case 2:\n videoPayload = _context6.sent;\n return _context6.abrupt(\"return\", videoPayload.movingStills);\n\n case 4:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n return _getVideos.apply(this, arguments);\n}\n\nfunction getVideoPayload(url) {\n return _axios2.default.get(url, {\n timeout: 2000\n }).then(function (_ref) {\n var data = _ref.data;\n\n return data;\n });\n}\n\nfunction getTypeFromHeight(height) {\n switch (height) {\n case 360:\n return 'small';\n\n case 720:\n return 'medium';\n\n case 1080:\n return 'large';\n\n default:\n return 'large';\n }\n}\n\nfunction mergeMapProps(_x) {\n return _mergeMapProps.apply(this, arguments);\n}\n\nfunction _mergeMapProps() {\n _mergeMapProps = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee7(props) {\n var id, rest;\n return regeneratorRuntime.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n id = props.id, rest = _objectWithoutProperties(props, [\"id\"]);\n _context7.t0 = _objectSpread2;\n _context7.t1 = {\n id: id\n };\n _context7.t2 = rest;\n _context7.next = 6;\n return getMapDefinition(id);\n\n case 6:\n _context7.t3 = _context7.sent;\n _context7.t4 = {\n definition: _context7.t3\n };\n return _context7.abrupt(\"return\", (0, _context7.t0)(_context7.t1, _context7.t2, _context7.t4));\n\n case 9:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n return _mergeMapProps.apply(this, arguments);\n}\n\nfunction getMapDefinition(_x2) {\n return _getMapDefinition.apply(this, arguments);\n}\n\nfunction _getMapDefinition() {\n _getMapDefinition = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee8(id) {\n return regeneratorRuntime.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (id) {\n _context8.next = 2;\n break;\n }\n\n return _context8.abrupt(\"return\");\n\n case 2:\n return _context8.abrupt(\"return\", _axios2.default.get(\"https://dh.nrk.no/atlas/v1/definition?id=\".concat(id), {\n timeout: 2000\n }).then(function (_ref) {\n var data = _ref.data;\n\n return data;\n }));\n\n case 3:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n return _getMapDefinition.apply(this, arguments);\n}\n\nfunction fromEntries$1(items) {\n return [].concat(_toConsumableArray(items)).reduce(function (obj, _ref) {\n var _ref10 = _slicedToArray(_ref, 2),\n key = _ref10[0],\n val = _ref10[1];\n\n obj[key] = val;\n return obj;\n }, {});\n}\n\nvar defaultOptions = {\n image: {\n gqlApiUrl: 'https://www.nrk.no/api/graphql',\n aspectRatios: [{\n id: 'F11',\n sizes: ['450', '768', '1280']\n }, {\n id: 'F34',\n sizes: ['450', '768', '1280']\n }, {\n id: 'F169',\n sizes: ['900', '1280', '2400']\n }, {\n id: 'original',\n sizes: ['450', '768', '1280', '2400']\n }]\n }\n};\nfunction mergeMediaProps(_x, _x2, _x3) {\n return _mergeMediaProps.apply(this, arguments);\n}\n\nfunction _mergeMediaProps() {\n _mergeMediaProps = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee10(props, options, imageData) {\n var mergedOptions, type, imageDataStored, mergedProps, mappedEntries;\n return regeneratorRuntime.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n mergedOptions = {\n image: _objectSpread2({}, defaultOptions.image, {}, options === null || options === void 0 ? void 0 : options.image)\n };\n type = props.type;\n _context10.t0 = imageData;\n\n if (_context10.t0) {\n _context10.next = 7;\n break;\n }\n\n _context10.next = 6;\n return prefetchImageData(props, mergedOptions.image);\n\n case 6:\n _context10.t0 = _context10.sent;\n\n case 7:\n imageDataStored = _context10.t0;\n mergedProps = props;\n\n if (!(type && type.startsWith('videoloop'))) {\n _context10.next = 15;\n break;\n }\n\n _context10.next = 12;\n return mergeVideoloopProps(props);\n\n case 12:\n mergedProps = _context10.sent;\n _context10.next = 25;\n break;\n\n case 15:\n if (!(type && type.startsWith('image'))) {\n _context10.next = 21;\n break;\n }\n\n _context10.next = 18;\n return mergeImageProps(props, imageDataStored);\n\n case 18:\n mergedProps = _context10.sent;\n _context10.next = 25;\n break;\n\n case 21:\n if (!(type && type.startsWith('map'))) {\n _context10.next = 25;\n break;\n }\n\n _context10.next = 24;\n return mergeMapProps(props, imageDataStored);\n\n case 24:\n mergedProps = _context10.sent;\n\n case 25:\n _context10.next = 27;\n return Promise.all(Object.entries(mergedProps).map(\n /*#__PURE__*/\n function () {\n var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee9(_ref3) {\n var _ref11, key, value, mergedArray;\n\n return regeneratorRuntime.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n _ref11 = _slicedToArray(_ref3, 2), key = _ref11[0], value = _ref11[1];\n\n if (!Array.isArray(value)) {\n _context9.next = 8;\n break;\n }\n\n _context9.next = 4;\n return Promise.all(value.map(function (item) {\n return mergeMediaProps(item, options, imageDataStored);\n }));\n\n case 4:\n mergedArray = _context9.sent;\n return _context9.abrupt(\"return\", [key, mergedArray]);\n\n case 8:\n if (!((typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) === 'object' && value !== null)) {\n _context9.next = 16;\n break;\n }\n\n _context9.t0 = key;\n _context9.next = 12;\n return mergeMediaProps(value, options, imageDataStored);\n\n case 12:\n _context9.t1 = _context9.sent;\n return _context9.abrupt(\"return\", [_context9.t0, _context9.t1]);\n\n case 16:\n return _context9.abrupt(\"return\", [key, value]);\n\n case 17:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9, this);\n }));\n\n return function (_x4) {\n return _ref2.apply(this, arguments);\n };\n }()));\n\n case 27:\n mappedEntries = _context10.sent;\n return _context10.abrupt(\"return\", fromEntries$1(mappedEntries));\n\n case 29:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10, this);\n }));\n return _mergeMediaProps.apply(this, arguments);\n}\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\nfunction withinRange(current) {\n var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var stop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : MAX_SAFE_INTEGER;\n return current >= start && current <= stop;\n}\nfunction withinStops(currentTime, stops, targetStop) {\n var nrOfStops = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n var uniqueStops = stops.filter(unique);\n var targetTime = stops[targetStop];\n var prevTime = uniqueStops[uniqueStops.indexOf(targetTime) - nrOfStops];\n var nextTime = uniqueStops[uniqueStops.indexOf(targetTime) + nrOfStops];\n return withinRange(currentTime, prevTime, nextTime);\n}\n\nfunction unique(value, index, self) {\n return self.indexOf(value) === index;\n}\n\nexports.ElementIntersectionObserver = ElementIntersectionObserver;\nexports.HorizontalScroll = HorizontalScroll;\nexports.VerticalScroll = VerticalScroll;\nexports.addStyle = addStyle;\nexports.closest = closest;\nexports.dispatchEvent = dispatchEvent;\nexports.mergeImageProps = mergeImageProps;\nexports.mergeMapProps = mergeMapProps;\nexports.mergeMediaProps = mergeMediaProps;\nexports.mergeVideoloopProps = mergeVideoloopProps;\nexports.setAttribute = setAttribute;\nexports.testReducedMotion = testReducedMotion;\nexports.toArray = toArray;\nexports.toggleAttribute = toggleAttribute;\nexports.withinRange = withinRange;\nexports.withinStops = withinStops;\n//# sourceMappingURL=dh-basis-common.esm.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\nvar bind = __webpack_require__(7);\nvar Axios = __webpack_require__(20);\nvar mergeConfig = __webpack_require__(13);\nvar defaults = __webpack_require__(10);\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = __webpack_require__(14);\naxios.CancelToken = __webpack_require__(33);\naxios.isCancel = __webpack_require__(9);\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = __webpack_require__(34);\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\nvar buildURL = __webpack_require__(8);\nvar InterceptorManager = __webpack_require__(21);\nvar dispatchRequest = __webpack_require__(22);\nvar mergeConfig = __webpack_require__(13);\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function (url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\nvar transformData = __webpack_require__(23);\nvar isCancel = __webpack_require__(9);\nvar defaults = __webpack_require__(10);\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(config.data, config.headers, config.transformRequest);\n\n // Flatten headers\n config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers);\n\n utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function cleanHeaderConfig(method) {\n delete config.headers[method];\n });\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(response.data, response.headers, config.transformResponse);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(reason.response.data, reason.response.headers, config.transformResponse);\n }\n }\n\n return Promise.reject(reason);\n });\n};\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar createError = __webpack_require__(12);\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError('Request failed with status code ' + response.status, response.config, null, response.request, response));\n }\n};\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\n\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function () {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar isAbsoluteURL = __webpack_require__(28);\nvar combineURLs = __webpack_require__(29);\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\n\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return (/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url)\n );\n};\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\n\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '') : baseURL;\n};\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = ['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent'];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) {\n return parsed;\n }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\n\nmodule.exports = utils.isStandardBrowserEnv() ?\n\n// Standard browser envs have full support of the APIs needed to test\n// whether the request URL is of the same origin as current location.\nfunction standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL;\n return parsed.protocol === originURL.protocol && parsed.host === originURL.host;\n };\n}() :\n\n// Non standard browser envs (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n}();\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar utils = __webpack_require__(0);\n\nmodule.exports = utils.isStandardBrowserEnv() ?\n\n// Standard browser envs support document.cookie\nfunction standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return match ? decodeURIComponent(match[3]) : null;\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n}() :\n\n// Non standard browser env (web workers, react-native) lack needed support.\nfunction nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() {\n return null;\n },\n remove: function remove() {}\n };\n}();\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar Cancel = __webpack_require__(14);\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\n\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(process) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.withinRange = exports.toggleAttribute = exports.toArray = exports.testReducedMotion = exports.setAttribute = exports.mergeVideoloopProps = exports.mergeMediaProps = exports.mergeMapProps = exports.mergeImageProps = exports.dispatchEvent = exports.closest = exports.addStyle = exports.VerticalScroll = exports.HorizontalScroll = exports.ElementIntersectionObserver = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _axios = __webpack_require__(6);\n\nvar _axios2 = _interopRequireDefault(_axios);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n/* eslint-disable compat/compat */\nvar defaultConfig = {\n rootMargin: '0px 0px 0px 0px',\n threshold: [0, 0.5, 1]\n};\n\nvar ElementIntersectionObserver = function () {\n function ElementIntersectionObserver(elements, onChange, config) {\n var _this = this;\n\n _classCallCheck(this, ElementIntersectionObserver);\n\n this.intersections = void 0;\n this.elements = void 0;\n this.elements = elements.slice(0);\n this.intersections = elements.map(function (target) {\n return {\n target: target,\n isIntersecting: false,\n ratio: null\n };\n });\n this.intersectionObserver = new IntersectionObserver(function (entries) {\n var intersections = _this.intersections.slice(0);\n entries.forEach(function (entry) {\n var idx = elements.indexOf(entry.target);\n intersections.splice(idx, 1, {\n target: entry.target,\n isIntersecting: entry.isIntersecting,\n ratio: entry.intersectionRatio\n });\n });\n _this.intersections = intersections;\n onChange(_this.intersections);\n }, _objectSpread2({}, defaultConfig, {}, config));\n elements.forEach(function (elm) {\n return _this.intersectionObserver.observe(elm);\n });\n }\n\n _createClass(ElementIntersectionObserver, [{\n key: \"disconnect\",\n value: function disconnect() {\n var _this2 = this;\n\n // Unregister trigger elements\n this.elements.forEach(function (elm) {\n return _this2.intersectionObserver.unobserve(elm);\n }); // Disconnect intersection observer\n\n this.intersectionObserver.disconnect();\n }\n }]);\n\n return ElementIntersectionObserver;\n}();\n\nfunction toggleAttribute(el, name, boolValue) {\n if (!el) {\n return;\n }\n\n var nextValue;\n\n if (typeof boolValue !== 'undefined') {\n nextValue = !!boolValue;\n } else {\n nextValue = el.hasAttribute(name);\n }\n\n if (nextValue) {\n el.setAttribute(name, '');\n } else {\n el.removeAttribute(name);\n }\n}\nfunction setAttribute(el, name, nextValue) {\n if (!el) {\n return;\n }\n\n if (nextValue) {\n el.setAttribute(name, nextValue);\n } else {\n el.removeAttribute(name);\n }\n}\nvar closest = function () {\n var proto = typeof window === 'undefined' ? {} : window.Element.prototype;\n var match = proto.matches || proto.msMatchesSelector || proto.webkitMatchesSelector;\n\n if (proto.closest) {\n return function (el, css) {\n return el.closest(css);\n };\n } else {\n return function (el, css) {\n for (; el; el = el.parentElement) {\n if (match.call(el, css)) return el;\n }\n\n return null;\n };\n }\n}();\nfunction addStyle(nodeName, css) {\n var key = \"style-\".concat(nodeName.toLowerCase());\n var min = css.replace(/\\/\\*[^!][^*]*\\*\\//g, '').replace(/\\s*(^|[:;,{}]|$)\\s*/g, '$1');\n document.getElementById(key) || document.head.insertAdjacentHTML('afterbegin', \"\"));\n}\nfunction toArray(nodeList) {\n return [].slice.call(nodeList);\n}\nfunction dispatchEvent(element, name) {\n var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var ignore = \"prevent_recursive_dispatch_maximum_callstack\".concat(name);\n var event;\n if (element[ignore]) return true; // We are already processing this event, so skip sending a new one\n else element[ignore] = true; // Add name to dispatching ignore\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: detail\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(name, true, true, detail);\n } // IE reports incorrect event.defaultPrevented\n // but correct return value on element.dispatchEvent\n\n\n var result = element.dispatchEvent(event);\n element[ignore] = null; // Remove name from dispatching ignore\n\n return result; // Follow W3C standard for return value\n}\n\nfunction easeOutQuint(t) {\n return 1 + --t * t * t * t * t;\n}\n\nvar VerticalScroll = function () {\n function VerticalScroll(container) {\n _classCallCheck(this, VerticalScroll);\n\n this.container = void 0;\n this.container = container;\n }\n\n _createClass(VerticalScroll, [{\n key: \"to\",\n value: function to(top) {\n var _this3 = this;\n\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var from = this.container.scrollTop;\n var distance = top - from;\n var startTime = null;\n\n var loop = function loop(currentTime) {\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n _this3.container.scrollTop = from + distance * easeOutQuint(timeElapsed / duration);\n\n if (timeElapsed < duration) {\n window.requestAnimationFrame(loop);\n } else {\n _this3.container.scrollTop = top;\n }\n };\n\n window.requestAnimationFrame(loop);\n }\n }]);\n\n return VerticalScroll;\n}();\n\nvar HorizontalScroll = function () {\n function HorizontalScroll(container) {\n _classCallCheck(this, HorizontalScroll);\n\n this.container = void 0;\n this.container = container;\n }\n\n _createClass(HorizontalScroll, [{\n key: \"to\",\n value: function to(left) {\n var _this4 = this;\n\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var callback = arguments.length > 2 ? arguments[2] : undefined;\n var from = this.container.scrollLeft;\n var distance = left - from;\n var startTime = null;\n\n var loop = function loop(currentTime) {\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n _this4.container.scrollLeft = from + distance * easeOutQuint(timeElapsed / duration);\n\n if (timeElapsed < duration) {\n window.requestAnimationFrame(loop);\n } else {\n _this4.container.scrollLeft = left;\n callback && callback();\n }\n };\n\n window.requestAnimationFrame(loop);\n }\n }]);\n\n return HorizontalScroll;\n}();\n\nfunction testReducedMotion() {\n if (typeof window !== 'undefined') {\n return !!window.matchMedia && window.matchMedia('(prefers-reduced-motion)').matches;\n }\n\n return false;\n}\n\nvar name = process.env.npm_package_name;\nvar version = process.env.npm_package_version;\n\nfunction createGqlApi() {\n return {\n get: function get(query, url) {\n return _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {\n var _ref5, data, errors;\n\n return regeneratorRuntime.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return (0, _axios2.default)({\n method: 'POST',\n url: url,\n data: {\n query: query,\n variables: null\n },\n timeout: 7500,\n headers: {\n 'User-Agent': \"\".concat(name, \"/\").concat(version, \" (node/isomorphic-fetch)\"),\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n }\n }).then(function (res) {\n return res.data;\n });\n\n case 2:\n _ref5 = _context.sent;\n data = _ref5.data;\n errors = _ref5.errors;\n\n if (!(errors && errors.length)) {\n _context.next = 7;\n break;\n }\n\n throw Error(errors);\n\n case 7:\n return _context.abrupt(\"return\", transformResponse(data));\n\n case 8:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }))();\n }\n };\n}\n\nvar gqlApi = createGqlApi();\n\nfunction pngFragment(options) {\n var aspects = options.aspectRatios.map(function (ratio) {\n var sizes = ratio.sizes.map(function (s) {\n return \"w\".concat(s, \": url(quality: \").concat(ratio.quality || '0.7', \", width: \").concat(s, \", format: png)\");\n }).join('\\n');\n return \"\".concat(ratio.id, \": crop(aspect: \").concat(ratio.id, \") {\\n \").concat(ratio.id === 'original' ? 'aspect' : '', \"\\n \").concat(sizes, \"\\n }\");\n }).join('\\n');\n return \"\\nfragment imageCropsPng on Image {\\n title,\\n creators,\\n credit,\\n category,\\n \".concat(aspects, \"\\n}\\n\");\n}\n\nfunction jpgFragment(options) {\n var aspects = options.aspectRatios.map(function (ratio) {\n var sizes = ratio.sizes.map(function (size) {\n return \"w\".concat(size, \": url(quality: \").concat(ratio.quality || '0.7', \", width: \").concat(size, \")\");\n }).join('\\n');\n return \"\".concat(ratio.id, \": crop(aspect: \").concat(ratio.id, \") {\\n \").concat(ratio.id === 'original' ? 'aspect' : '', \"\\n \").concat(sizes, \"\\n }\");\n }).join('\\n');\n return \"\\nfragment imageCropsJpg on Image {\\n title,\\n creators,\\n credit,\\n category,\\n \".concat(aspects, \"\\n}\\n\");\n}\n/**\n * Transforms a series of image sections to a Polopoly GraphQL API query\n */\n\nfunction createQuery(imageObjects, options) {\n var images = getImageIds(imageObjects);\n return \"\\n \".concat(createBase(images, options), \"\\n query {\\n \").concat(images.map(getImage).join('\\n'), \"\\n }\");\n}\nvar IMAGE_PROPS = ['vertical', 'horizontal'];\n\nfunction getImageIds(imageObjects) {\n if (imageObjects.some(function (image) {\n return !image;\n })) {\n throw new Error('Undefined image object');\n }\n\n return imageObjects.reduce(function (result, image) {\n var format = image.advanced && image.advanced.format || 'jpg';\n /* Image can be stored directly on image object */\n\n if (image.id && !result.find(function (el) {\n return el.id === image.id;\n })) {\n result.push({\n id: image.id,\n format: format\n });\n }\n /* or on a predefined set of image properties */\n\n IMAGE_PROPS.forEach(function (prop) {\n var value = image[prop];\n\n if (value && value.id && !result.find(function (el) {\n return el.id === value.id;\n })) {\n result.push({\n id: value.id,\n format: format\n });\n }\n });\n return result;\n }, []);\n}\n\nfunction getImage(_ref) {\n var id = _ref.id,\n _ref$format = _ref.format,\n format = _ref$format === undefined ? 'jpg' : _ref$format;\n\n\n if (format === 'png') {\n return \"\".concat(transformId(id), \": model(id: \\\"\").concat(id, \"\\\") {\\n ...imageCropsPng\\n }\");\n }\n\n return \"\".concat(transformId(id), \": model(id: \\\"\").concat(id, \"\\\") {\\n ...imageCropsJpg\\n }\");\n}\n\nfunction createBase(imageObjects, options) {\n var containsJpg = imageObjects.filter(function (el) {\n return el.format === 'jpg';\n }).length > 0;\n var containsPng = imageObjects.filter(function (el) {\n return el.format === 'png';\n }).length > 0;\n return \"\\n \".concat(containsJpg ? jpgFragment(options) : '', \"\\n \").concat(containsPng ? pngFragment(options) : '', \"\\n \");\n}\n/**\n * Transforns a polopoly id to something that can be used as a key in a GraphQL query\n * Example: '1.14252981' -> 'id_1_14252981'\n */\n\nfunction transformId(id) {\n return \"id\".concat(id.replace(/\\./g, '__'));\n}\n/**\n * Transforns an already transformed polopoly id back to a regular polopoly id\n * Example: ''id_1_14252981' -> 1.14252981'\n */\n\nfunction transformBackId(id) {\n return id.replace('id', '').replace(/__/g, '.');\n}\n\nfunction transformResponse(response) {\n return Object.keys(response).reduce(function (res, key) {\n var transformedKey = transformBackId(key);\n res[transformedKey] = response[key];\n return res;\n }, {});\n}\n\nfunction fromEntries(items) {\n return [].concat(_toConsumableArray(items)).reduce(function (obj, _ref) {\n var _ref6 = _slicedToArray(_ref, 2),\n key = _ref6[0],\n val = _ref6[1];\n\n obj[key] = val;\n return obj;\n }, {});\n}\n\nfunction traverse(obj, filter) {\n if (filter(obj)) {\n /* Object is a match, returning */\n return [obj];\n } else {\n return Object.entries(obj).filter(function (_ref2) {\n var _ref7 = _slicedToArray(_ref2, 2),\n _ = _ref7[0],\n value = _ref7[1];\n\n return !!value;\n }).map(function (_ref3) {\n var _ref8 = _slicedToArray(_ref3, 2),\n _ = _ref8[0],\n value = _ref8[1];\n\n if (Array.isArray(value)) {\n return value.map(function (item) {\n return traverse(item, filter);\n }).reduce(function (acc, val) {\n return acc.concat(val);\n }, []);\n } else if ((typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) === 'object') {\n return traverse(value, filter);\n } else {\n return null;\n }\n }).reduce(function (acc, val) {\n return acc.concat(val);\n }, []).filter(Boolean);\n }\n}\n/*\n * Traverses the props tree and fetches data for all image objects\n * */\n\nfunction prefetchImageData(_x, _x2) {\n return _prefetchImageData.apply(this, arguments);\n}\n\nfunction _prefetchImageData() {\n _prefetchImageData = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(props, options) {\n var imageObjects, query;\n return regeneratorRuntime.wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n imageObjects = traverse(props, function (value) {\n return value.type === 'image';\n });\n\n if (!(imageObjects.length > 0)) {\n _context2.next = 6;\n break;\n }\n\n if (options.gqlApiUrl) {\n _context2.next = 4;\n break;\n }\n\n throw new Error(\"Missing option 'gqlApiUrl'\");\n\n case 4:\n query = createQuery(imageObjects, options);\n return _context2.abrupt(\"return\", gqlApi.get(query, options.gqlApiUrl));\n\n case 6:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n return _prefetchImageData.apply(this, arguments);\n}\n\nvar imageProps = ['vertical', 'horizontal'];\nfunction mergeImageProps(props, imageUrls) {\n if ('id' in props) {\n return _objectSpread2({}, props, {}, imageUrls[props.id]);\n } else {\n return fromEntries(Object.entries(props).map(function (_ref4) {\n var _ref9 = _slicedToArray(_ref4, 2),\n key = _ref9[0],\n value = _ref9[1];\n\n if (imageProps.indexOf(key) !== -1) {\n return [key, mergeImageProps(value, imageUrls)];\n } else {\n return [key, value];\n }\n }));\n }\n}\n\nfunction mergeVideoloopProps(_x) {\n return _mergeVideoloopProps.apply(this, arguments);\n}\n\nfunction _mergeVideoloopProps() {\n _mergeVideoloopProps = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee4(props) {\n var objects;\n return regeneratorRuntime.wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n _context4.next = 2;\n return Promise.all(Object.keys(props).map(\n /*#__PURE__*/\n function () {\n var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(key) {\n return regeneratorRuntime.wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(key === 'horizontal' || key === 'vertical')) {\n _context3.next = 9;\n break;\n }\n\n _context3.t0 = _objectSpread2;\n _context3.t1 = {\n id: key\n };\n _context3.t2 = props[key];\n _context3.next = 6;\n return getVideoSrc(props[key]);\n\n case 6:\n _context3.t3 = _context3.sent;\n _context3.t4 = {\n videos: _context3.t3\n };\n return _context3.abrupt(\"return\", (0, _context3.t0)(_context3.t1, _context3.t2, _context3.t4));\n\n case 9:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x4) {\n return _ref2.apply(this, arguments);\n };\n }()));\n\n case 2:\n objects = _context4.sent;\n return _context4.abrupt(\"return\", _objectSpread2({}, props, {}, objects.filter(Boolean).reduce(function (accumulator, current) {\n accumulator[current.id] = current;\n delete accumulator[current.id].id;\n return accumulator;\n }, {})));\n\n case 4:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n return _mergeVideoloopProps.apply(this, arguments);\n}\n\nfunction getVideoSrc(_x2) {\n return _getVideoSrc.apply(this, arguments);\n}\n\nfunction _getVideoSrc() {\n _getVideoSrc = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee5(videoObj) {\n var hasVideoUrl, videos, basePath;\n return regeneratorRuntime.wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n hasVideoUrl = videoObj && videoObj !== 'null';\n\n if (!hasVideoUrl) {\n _context5.next = 9;\n break;\n }\n\n _context5.next = 4;\n return getVideos(videoObj.url);\n\n case 4:\n videos = _context5.sent;\n basePath = extractBasePathFromUrl(videoObj.url);\n return _context5.abrupt(\"return\", videos.map(function (video) {\n return {\n type: getTypeFromHeight(video.height),\n poster: \"\".concat(basePath, \"/\").concat(video.stillFileName),\n aspectRatio: video.displayAspectRatio,\n height: video.height,\n sources: {\n mp4: \"\".concat(basePath, \"/\").concat(video.videoFileName)\n }\n };\n }));\n\n case 9:\n return _context5.abrupt(\"return\", null);\n\n case 10:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n return _getVideoSrc.apply(this, arguments);\n}\n\nfunction extractBasePathFromUrl(url) {\n var decodedUrl = url.replace(/%2F/g, '/');\n return decodedUrl.substr(0, decodedUrl.lastIndexOf('/'));\n}\n\nfunction getVideos(_x3) {\n return _getVideos.apply(this, arguments);\n}\n\nfunction _getVideos() {\n _getVideos = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee6(url) {\n var videoPayload;\n return regeneratorRuntime.wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n _context6.next = 2;\n return getVideoPayload(url);\n\n case 2:\n videoPayload = _context6.sent;\n return _context6.abrupt(\"return\", videoPayload.movingStills);\n\n case 4:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n return _getVideos.apply(this, arguments);\n}\n\nfunction getVideoPayload(url) {\n return _axios2.default.get(url, {\n timeout: 2000\n }).then(function (_ref) {\n var data = _ref.data;\n\n return data;\n });\n}\n\nfunction getTypeFromHeight(height) {\n switch (height) {\n case 360:\n return 'small';\n\n case 720:\n return 'medium';\n\n case 1080:\n return 'large';\n\n default:\n return 'large';\n }\n}\n\nfunction mergeMapProps(_x) {\n return _mergeMapProps.apply(this, arguments);\n}\n\nfunction _mergeMapProps() {\n _mergeMapProps = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee7(props) {\n var id, rest;\n return regeneratorRuntime.wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n id = props.id, rest = _objectWithoutProperties(props, [\"id\"]);\n _context7.t0 = _objectSpread2;\n _context7.t1 = {\n id: id\n };\n _context7.t2 = rest;\n _context7.next = 6;\n return getMapDefinition(id);\n\n case 6:\n _context7.t3 = _context7.sent;\n _context7.t4 = {\n definition: _context7.t3\n };\n return _context7.abrupt(\"return\", (0, _context7.t0)(_context7.t1, _context7.t2, _context7.t4));\n\n case 9:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n return _mergeMapProps.apply(this, arguments);\n}\n\nfunction getMapDefinition(_x2) {\n return _getMapDefinition.apply(this, arguments);\n}\n\nfunction _getMapDefinition() {\n _getMapDefinition = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee8(id) {\n return regeneratorRuntime.wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (id) {\n _context8.next = 2;\n break;\n }\n\n return _context8.abrupt(\"return\");\n\n case 2:\n return _context8.abrupt(\"return\", _axios2.default.get(\"https://dh.nrk.no/atlas/v1/definition?id=\".concat(id), {\n timeout: 2000\n }).then(function (_ref) {\n var data = _ref.data;\n\n return data;\n }));\n\n case 3:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n return _getMapDefinition.apply(this, arguments);\n}\n\nfunction fromEntries$1(items) {\n return [].concat(_toConsumableArray(items)).reduce(function (obj, _ref) {\n var _ref10 = _slicedToArray(_ref, 2),\n key = _ref10[0],\n val = _ref10[1];\n\n obj[key] = val;\n return obj;\n }, {});\n}\n\nvar defaultOptions = {\n image: {\n gqlApiUrl: 'https://www.nrk.no/api/graphql',\n aspectRatios: [{\n id: 'F11',\n sizes: ['450', '768', '1280']\n }, {\n id: 'F34',\n sizes: ['450', '768', '1280']\n }, {\n id: 'F169',\n sizes: ['900', '1280', '2400']\n }, {\n id: 'original',\n sizes: ['450', '768', '1280', '2400']\n }]\n }\n};\nfunction mergeMediaProps(_x, _x2, _x3) {\n return _mergeMediaProps.apply(this, arguments);\n}\n\nfunction _mergeMediaProps() {\n _mergeMediaProps = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee10(props, options, imageData) {\n var mergedOptions, imageDataStored, mappedEntries;\n return regeneratorRuntime.wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n mergedOptions = {\n image: _objectSpread2({}, defaultOptions.image, {}, options === null || options === void 0 ? void 0 : options.image)\n };\n _context10.t0 = imageData;\n\n if (_context10.t0) {\n _context10.next = 6;\n break;\n }\n\n _context10.next = 5;\n return prefetchImageData(props, mergedOptions.image);\n\n case 5:\n _context10.t0 = _context10.sent;\n\n case 6:\n imageDataStored = _context10.t0;\n\n if (!(props.type === 'videoloop')) {\n _context10.next = 11;\n break;\n }\n\n return _context10.abrupt(\"return\", mergeVideoloopProps(props));\n\n case 11:\n if (!(props.type === 'image')) {\n _context10.next = 15;\n break;\n }\n\n return _context10.abrupt(\"return\", mergeImageProps(props, imageDataStored));\n\n case 15:\n if (!(props.type === 'map')) {\n _context10.next = 19;\n break;\n }\n\n return _context10.abrupt(\"return\", mergeMapProps(props, imageDataStored));\n\n case 19:\n _context10.next = 21;\n return Promise.all(Object.entries(props).map(\n /*#__PURE__*/\n function () {\n var _ref3 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee9(_ref2) {\n var _ref11, key, value, mergedArray;\n\n return regeneratorRuntime.wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n _ref11 = _slicedToArray(_ref2, 2), key = _ref11[0], value = _ref11[1];\n\n if (!Array.isArray(value)) {\n _context9.next = 8;\n break;\n }\n\n _context9.next = 4;\n return Promise.all(value.map(function (item) {\n return mergeMediaProps(item, options, imageDataStored);\n }));\n\n case 4:\n mergedArray = _context9.sent;\n return _context9.abrupt(\"return\", [key, mergedArray]);\n\n case 8:\n if (!((typeof value === \"undefined\" ? \"undefined\" : _typeof(value)) === 'object' && value !== null)) {\n _context9.next = 16;\n break;\n }\n\n _context9.t0 = key;\n _context9.next = 12;\n return mergeMediaProps(value, options, imageDataStored);\n\n case 12:\n _context9.t1 = _context9.sent;\n return _context9.abrupt(\"return\", [_context9.t0, _context9.t1]);\n\n case 16:\n return _context9.abrupt(\"return\", [key, value]);\n\n case 17:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9, this);\n }));\n\n return function (_x4) {\n return _ref3.apply(this, arguments);\n };\n }()));\n\n case 21:\n mappedEntries = _context10.sent;\n return _context10.abrupt(\"return\", fromEntries$1(mappedEntries));\n\n case 23:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10, this);\n }));\n return _mergeMediaProps.apply(this, arguments);\n}\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\nfunction withinRange(current) {\n var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var stop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : MAX_SAFE_INTEGER;\n return current >= start && current <= stop;\n}\n\nexports.ElementIntersectionObserver = ElementIntersectionObserver;\nexports.HorizontalScroll = HorizontalScroll;\nexports.VerticalScroll = VerticalScroll;\nexports.addStyle = addStyle;\nexports.closest = closest;\nexports.dispatchEvent = dispatchEvent;\nexports.mergeImageProps = mergeImageProps;\nexports.mergeMapProps = mergeMapProps;\nexports.mergeMediaProps = mergeMediaProps;\nexports.mergeVideoloopProps = mergeVideoloopProps;\nexports.setAttribute = setAttribute;\nexports.testReducedMotion = testReducedMotion;\nexports.toArray = toArray;\nexports.toggleAttribute = toggleAttribute;\nexports.withinRange = withinRange;\n//# sourceMappingURL=dh-basis-common.esm.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports) {\n\n// removed by extract-text-webpack-plugin\nmodule.exports = {\"standaloneVideo\":\"dh-video-standaloneVideo\",\"small\":\"dh-video-small\",\"medium\":\"dh-video-medium\",\"large\":\"dh-video-large\",\"horizontalVideo\":\"dh-video-horizontalVideo\",\"verticalVideo\":\"dh-video-verticalVideo\",\"videoLoop\":\"dh-video-videoLoop\",\"videoLoop__fallbackImage\":\"dh-video-videoLoop__fallbackImage\",\"wrapper\":\"dh-video-wrapper\",\"byline\":\"dh-video-byline\",\"videoLoop--played\":\"dh-video-videoLoop--played\"};\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\n(function () {\n /*\n \n Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n Code distributed by Google as part of the polymer project is also\n subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n 'use strict';\n var n = window.Document.prototype.createElement,\n p = window.Document.prototype.createElementNS,\n aa = window.Document.prototype.importNode,\n ba = window.Document.prototype.prepend,\n ca = window.Document.prototype.append,\n da = window.DocumentFragment.prototype.prepend,\n ea = window.DocumentFragment.prototype.append,\n q = window.Node.prototype.cloneNode,\n r = window.Node.prototype.appendChild,\n t = window.Node.prototype.insertBefore,\n u = window.Node.prototype.removeChild,\n v = window.Node.prototype.replaceChild,\n x = Object.getOwnPropertyDescriptor(window.Node.prototype, \"textContent\"),\n y = window.Element.prototype.attachShadow,\n z = Object.getOwnPropertyDescriptor(window.Element.prototype, \"innerHTML\"),\n A = window.Element.prototype.getAttribute,\n B = window.Element.prototype.setAttribute,\n C = window.Element.prototype.removeAttribute,\n D = window.Element.prototype.getAttributeNS,\n E = window.Element.prototype.setAttributeNS,\n F = window.Element.prototype.removeAttributeNS,\n G = window.Element.prototype.insertAdjacentElement,\n fa = window.Element.prototype.insertAdjacentHTML,\n ha = window.Element.prototype.prepend,\n ia = window.Element.prototype.append,\n ja = window.Element.prototype.before,\n ka = window.Element.prototype.after,\n la = window.Element.prototype.replaceWith,\n ma = window.Element.prototype.remove,\n na = window.HTMLElement,\n H = Object.getOwnPropertyDescriptor(window.HTMLElement.prototype, \"innerHTML\"),\n oa = window.HTMLElement.prototype.insertAdjacentElement,\n pa = window.HTMLElement.prototype.insertAdjacentHTML;var qa = new Set();\"annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph\".split(\" \").forEach(function (a) {\n return qa.add(a);\n });function ra(a) {\n var b = qa.has(a);a = /^[a-z][.0-9_a-z]*-[\\-.0-9_a-z]*$/.test(a);return !b && a;\n }var sa = document.contains ? document.contains.bind(document) : document.documentElement.contains.bind(document.documentElement);\n function I(a) {\n var b = a.isConnected;if (void 0 !== b) return b;if (sa(a)) return !0;for (; a && !(a.__CE_isImportDocument || a instanceof Document);) {\n a = a.parentNode || (window.ShadowRoot && a instanceof ShadowRoot ? a.host : void 0);\n }return !(!a || !(a.__CE_isImportDocument || a instanceof Document));\n }function J(a) {\n var b = a.children;if (b) return Array.prototype.slice.call(b);b = [];for (a = a.firstChild; a; a = a.nextSibling) {\n a.nodeType === Node.ELEMENT_NODE && b.push(a);\n }return b;\n }\n function K(a, b) {\n for (; b && b !== a && !b.nextSibling;) {\n b = b.parentNode;\n }return b && b !== a ? b.nextSibling : null;\n }\n function L(a, b, c) {\n for (var f = a; f;) {\n if (f.nodeType === Node.ELEMENT_NODE) {\n var d = f;b(d);var e = d.localName;if (\"link\" === e && \"import\" === d.getAttribute(\"rel\")) {\n f = d.import;void 0 === c && (c = new Set());if (f instanceof Node && !c.has(f)) for (c.add(f), f = f.firstChild; f; f = f.nextSibling) {\n L(f, b, c);\n }f = K(a, d);continue;\n } else if (\"template\" === e) {\n f = K(a, d);continue;\n }if (d = d.__CE_shadowRoot) for (d = d.firstChild; d; d = d.nextSibling) {\n L(d, b, c);\n }\n }f = f.firstChild ? f.firstChild : K(a, f);\n }\n }function M(a, b, c) {\n a[b] = c;\n };function ta(a) {\n var b = document;this.c = a;this.a = b;this.b = void 0;N(this.c, this.a);\"loading\" === this.a.readyState && (this.b = new MutationObserver(this.f.bind(this)), this.b.observe(this.a, { childList: !0, subtree: !0 }));\n }function ua(a) {\n a.b && a.b.disconnect();\n }ta.prototype.f = function (a) {\n var b = this.a.readyState;\"interactive\" !== b && \"complete\" !== b || ua(this);for (b = 0; b < a.length; b++) {\n for (var c = a[b].addedNodes, f = 0; f < c.length; f++) {\n N(this.c, c[f]);\n }\n }\n };function va() {\n var a = this;this.b = this.a = void 0;this.c = new Promise(function (b) {\n a.b = b;a.a && b(a.a);\n });\n }function wa(a) {\n if (a.a) throw Error(\"Already resolved.\");a.a = void 0;a.b && a.b(void 0);\n };function O(a) {\n this.f = new Map();this.g = new Map();this.l = new Map();this.i = !1;this.b = a;this.j = new Map();this.c = function (b) {\n return b();\n };this.a = !1;this.h = [];this.m = a.f ? new ta(a) : void 0;\n }O.prototype.o = function (a, b) {\n var c = this;if (!(b instanceof Function)) throw new TypeError(\"Custom element constructor getters must be functions.\");xa(this, a);this.f.set(a, b);this.h.push(a);this.a || (this.a = !0, this.c(function () {\n return ya(c);\n }));\n };\n O.prototype.define = function (a, b) {\n var c = this;if (!(b instanceof Function)) throw new TypeError(\"Custom element constructors must be functions.\");xa(this, a);za(this, a, b);this.h.push(a);this.a || (this.a = !0, this.c(function () {\n return ya(c);\n }));\n };function xa(a, b) {\n if (!ra(b)) throw new SyntaxError(\"The element name '\" + b + \"' is not valid.\");if (P(a, b)) throw Error(\"A custom element with name '\" + b + \"' has already been defined.\");if (a.i) throw Error(\"A custom element is already being defined.\");\n }\n function za(a, b, c) {\n a.i = !0;var f;try {\n var d = function d(m) {\n var w = e[m];if (void 0 !== w && !(w instanceof Function)) throw Error(\"The '\" + m + \"' callback must be a function.\");return w;\n },\n e = c.prototype;if (!(e instanceof Object)) throw new TypeError(\"The custom element constructor's prototype is not an object.\");var g = d(\"connectedCallback\");var h = d(\"disconnectedCallback\");var k = d(\"adoptedCallback\");var l = (f = d(\"attributeChangedCallback\")) && c.observedAttributes || [];\n } catch (m) {\n throw m;\n } finally {\n a.i = !1;\n }c = { localName: b, constructorFunction: c,\n connectedCallback: g, disconnectedCallback: h, adoptedCallback: k, attributeChangedCallback: f, observedAttributes: l, constructionStack: [] };a.g.set(b, c);a.l.set(c.constructorFunction, c);return c;\n }O.prototype.upgrade = function (a) {\n N(this.b, a);\n };\n function ya(a) {\n if (!1 !== a.a) {\n a.a = !1;for (var b = [], c = a.h, f = new Map(), d = 0; d < c.length; d++) {\n f.set(c[d], []);\n }N(a.b, document, { upgrade: function upgrade(k) {\n if (void 0 === k.__CE_state) {\n var l = k.localName,\n m = f.get(l);m ? m.push(k) : a.g.has(l) && b.push(k);\n }\n } });for (d = 0; d < b.length; d++) {\n Q(a.b, b[d]);\n }for (d = 0; d < c.length; d++) {\n for (var e = c[d], g = f.get(e), h = 0; h < g.length; h++) {\n Q(a.b, g[h]);\n }(e = a.j.get(e)) && wa(e);\n }c.length = 0;\n }\n }O.prototype.get = function (a) {\n if (a = P(this, a)) return a.constructorFunction;\n };\n O.prototype.whenDefined = function (a) {\n if (!ra(a)) return Promise.reject(new SyntaxError(\"'\" + a + \"' is not a valid custom element name.\"));var b = this.j.get(a);if (b) return b.c;b = new va();this.j.set(a, b);var c = this.g.has(a) || this.f.has(a);a = -1 === this.h.indexOf(a);c && a && wa(b);return b.c;\n };O.prototype.polyfillWrapFlushCallback = function (a) {\n this.m && ua(this.m);var b = this.c;this.c = function (c) {\n return a(function () {\n return b(c);\n });\n };\n };\n function P(a, b) {\n var c = a.g.get(b);if (c) return c;if (c = a.f.get(b)) {\n a.f.delete(b);try {\n return za(a, b, c());\n } catch (f) {\n R(f);\n }\n }\n }window.CustomElementRegistry = O;O.prototype.define = O.prototype.define;O.prototype.upgrade = O.prototype.upgrade;O.prototype.get = O.prototype.get;O.prototype.whenDefined = O.prototype.whenDefined;O.prototype.polyfillDefineLazy = O.prototype.o;O.prototype.polyfillWrapFlushCallback = O.prototype.polyfillWrapFlushCallback;function S() {\n var a = T && T.noDocumentConstructionObserver,\n b = T && T.shadyDomFastWalk;this.b = [];this.c = [];this.a = !1;this.shadyDomFastWalk = b;this.f = !a;\n }function U(a, b, c, f) {\n var d = window.ShadyDOM;if (a.shadyDomFastWalk && d && d.inUse) {\n if (b.nodeType === Node.ELEMENT_NODE && c(b), b.querySelectorAll) for (a = d.nativeMethods.querySelectorAll.call(b, \"*\"), b = 0; b < a.length; b++) {\n c(a[b]);\n }\n } else L(b, c, f);\n }function Aa(a, b) {\n a.a = !0;a.b.push(b);\n }function Ba(a, b) {\n a.a = !0;a.c.push(b);\n }function V(a, b) {\n a.a && U(a, b, function (c) {\n return W(a, c);\n });\n }\n function W(a, b) {\n if (a.a && !b.__CE_patched) {\n b.__CE_patched = !0;for (var c = 0; c < a.b.length; c++) {\n a.b[c](b);\n }for (c = 0; c < a.c.length; c++) {\n a.c[c](b);\n }\n }\n }function X(a, b) {\n var c = [];U(a, b, function (d) {\n return c.push(d);\n });for (b = 0; b < c.length; b++) {\n var f = c[b];1 === f.__CE_state ? a.connectedCallback(f) : Q(a, f);\n }\n }function Y(a, b) {\n var c = [];U(a, b, function (d) {\n return c.push(d);\n });for (b = 0; b < c.length; b++) {\n var f = c[b];1 === f.__CE_state && a.disconnectedCallback(f);\n }\n }\n function N(a, b, c) {\n c = void 0 === c ? {} : c;var f = c.s,\n d = c.upgrade || function (g) {\n return Q(a, g);\n },\n e = [];U(a, b, function (g) {\n a.a && W(a, g);if (\"link\" === g.localName && \"import\" === g.getAttribute(\"rel\")) {\n var h = g.import;h instanceof Node && (h.__CE_isImportDocument = !0, h.__CE_registry = document.__CE_registry);h && \"complete\" === h.readyState ? h.__CE_documentLoadHandled = !0 : g.addEventListener(\"load\", function () {\n var k = g.import;if (!k.__CE_documentLoadHandled) {\n k.__CE_documentLoadHandled = !0;var l = new Set();f && (f.forEach(function (m) {\n return l.add(m);\n }), l.delete(k));N(a, k, { s: l, upgrade: d });\n }\n });\n } else e.push(g);\n }, f);for (b = 0; b < e.length; b++) {\n d(e[b]);\n }\n }\n function Q(a, b) {\n try {\n var c = b.ownerDocument,\n f = c.__CE_registry;var d = f && (c.defaultView || c.__CE_isImportDocument) ? P(f, b.localName) : void 0;if (d && void 0 === b.__CE_state) {\n d.constructionStack.push(b);try {\n try {\n if (new d.constructorFunction() !== b) throw Error(\"The custom element constructor did not produce the element being upgraded.\");\n } finally {\n d.constructionStack.pop();\n }\n } catch (k) {\n throw b.__CE_state = 2, k;\n }b.__CE_state = 1;b.__CE_definition = d;if (d.attributeChangedCallback && b.hasAttributes()) {\n var e = d.observedAttributes;\n for (d = 0; d < e.length; d++) {\n var g = e[d],\n h = b.getAttribute(g);null !== h && a.attributeChangedCallback(b, g, null, h, null);\n }\n }I(b) && a.connectedCallback(b);\n }\n } catch (k) {\n R(k);\n }\n }S.prototype.connectedCallback = function (a) {\n var b = a.__CE_definition;if (b.connectedCallback) try {\n b.connectedCallback.call(a);\n } catch (c) {\n R(c);\n }\n };S.prototype.disconnectedCallback = function (a) {\n var b = a.__CE_definition;if (b.disconnectedCallback) try {\n b.disconnectedCallback.call(a);\n } catch (c) {\n R(c);\n }\n };\n S.prototype.attributeChangedCallback = function (a, b, c, f, d) {\n var e = a.__CE_definition;if (e.attributeChangedCallback && -1 < e.observedAttributes.indexOf(b)) try {\n e.attributeChangedCallback.call(a, b, c, f, d);\n } catch (g) {\n R(g);\n }\n };\n function Ca(a, b, c, f) {\n var d = b.__CE_registry;if (d && (null === f || \"http://www.w3.org/1999/xhtml\" === f) && (d = P(d, c))) try {\n var e = new d.constructorFunction();if (void 0 === e.__CE_state || void 0 === e.__CE_definition) throw Error(\"Failed to construct '\" + c + \"': The returned value was not constructed with the HTMLElement constructor.\");if (\"http://www.w3.org/1999/xhtml\" !== e.namespaceURI) throw Error(\"Failed to construct '\" + c + \"': The constructed element's namespace must be the HTML namespace.\");if (e.hasAttributes()) throw Error(\"Failed to construct '\" + c + \"': The constructed element must not have any attributes.\");if (null !== e.firstChild) throw Error(\"Failed to construct '\" + c + \"': The constructed element must not have any children.\");if (null !== e.parentNode) throw Error(\"Failed to construct '\" + c + \"': The constructed element must not have a parent node.\");if (e.ownerDocument !== b) throw Error(\"Failed to construct '\" + c + \"': The constructed element's owner document is incorrect.\");if (e.localName !== c) throw Error(\"Failed to construct '\" + c + \"': The constructed element's local name is incorrect.\");\n return e;\n } catch (g) {\n return R(g), b = null === f ? n.call(b, c) : p.call(b, f, c), Object.setPrototypeOf(b, HTMLUnknownElement.prototype), b.__CE_state = 2, b.__CE_definition = void 0, W(a, b), b;\n }b = null === f ? n.call(b, c) : p.call(b, f, c);W(a, b);return b;\n }\n function R(a) {\n var b = a.message,\n c = a.sourceURL || a.fileName || \"\",\n f = a.line || a.lineNumber || 0,\n d = a.column || a.columnNumber || 0,\n e = void 0;void 0 === ErrorEvent.prototype.initErrorEvent ? e = new ErrorEvent(\"error\", { cancelable: !0, message: b, filename: c, lineno: f, colno: d, error: a }) : (e = document.createEvent(\"ErrorEvent\"), e.initErrorEvent(\"error\", !1, !0, b, c, f), e.preventDefault = function () {\n Object.defineProperty(this, \"defaultPrevented\", { configurable: !0, get: function get() {\n return !0;\n } });\n });void 0 === e.error && Object.defineProperty(e, \"error\", { configurable: !0, enumerable: !0, get: function get() {\n return a;\n } });window.dispatchEvent(e);e.defaultPrevented || console.error(a);\n };var Da = new function () {}();function Ea(a) {\n window.HTMLElement = function () {\n function b() {\n var c = this.constructor;var f = document.__CE_registry.l.get(c);if (!f) throw Error(\"Failed to construct a custom element: The constructor was not registered with `customElements`.\");var d = f.constructionStack;if (0 === d.length) return d = n.call(document, f.localName), Object.setPrototypeOf(d, c.prototype), d.__CE_state = 1, d.__CE_definition = f, W(a, d), d;var e = d.length - 1,\n g = d[e];if (g === Da) throw Error(\"Failed to construct '\" + f.localName + \"': This element was already constructed.\");\n d[e] = Da;Object.setPrototypeOf(g, c.prototype);W(a, g);return g;\n }b.prototype = na.prototype;Object.defineProperty(b.prototype, \"constructor\", { writable: !0, configurable: !0, enumerable: !1, value: b });return b;\n }();\n };function Z(a, b, c) {\n function f(d) {\n return function (e) {\n for (var g = [], h = 0; h < arguments.length; ++h) {\n g[h] = arguments[h];\n }h = [];for (var k = [], l = 0; l < g.length; l++) {\n var m = g[l];m instanceof Element && I(m) && k.push(m);if (m instanceof DocumentFragment) for (m = m.firstChild; m; m = m.nextSibling) {\n h.push(m);\n } else h.push(m);\n }d.apply(this, g);for (g = 0; g < k.length; g++) {\n Y(a, k[g]);\n }if (I(this)) for (g = 0; g < h.length; g++) {\n k = h[g], k instanceof Element && X(a, k);\n }\n };\n }void 0 !== c.prepend && M(b, \"prepend\", f(c.prepend));void 0 !== c.append && M(b, \"append\", f(c.append));\n }\n ;function Fa(a) {\n M(Document.prototype, \"createElement\", function (b) {\n return Ca(a, this, b, null);\n });M(Document.prototype, \"importNode\", function (b, c) {\n b = aa.call(this, b, !!c);this.__CE_registry ? N(a, b) : V(a, b);return b;\n });M(Document.prototype, \"createElementNS\", function (b, c) {\n return Ca(a, this, c, b);\n });Z(a, Document.prototype, { prepend: ba, append: ca });\n };function Ga(a) {\n function b(c, f) {\n Object.defineProperty(c, \"textContent\", { enumerable: f.enumerable, configurable: !0, get: f.get, set: function set(d) {\n if (this.nodeType === Node.TEXT_NODE) f.set.call(this, d);else {\n var e = void 0;if (this.firstChild) {\n var g = this.childNodes,\n h = g.length;if (0 < h && I(this)) {\n e = Array(h);for (var k = 0; k < h; k++) {\n e[k] = g[k];\n }\n }\n }f.set.call(this, d);if (e) for (d = 0; d < e.length; d++) {\n Y(a, e[d]);\n }\n }\n } });\n }M(Node.prototype, \"insertBefore\", function (c, f) {\n if (c instanceof DocumentFragment) {\n var d = J(c);c = t.call(this, c, f);if (I(this)) for (f = 0; f < d.length; f++) {\n X(a, d[f]);\n }return c;\n }d = c instanceof Element && I(c);f = t.call(this, c, f);d && Y(a, c);I(this) && X(a, c);return f;\n });M(Node.prototype, \"appendChild\", function (c) {\n if (c instanceof DocumentFragment) {\n var f = J(c);c = r.call(this, c);if (I(this)) for (var d = 0; d < f.length; d++) {\n X(a, f[d]);\n }return c;\n }f = c instanceof Element && I(c);d = r.call(this, c);f && Y(a, c);I(this) && X(a, c);return d;\n });M(Node.prototype, \"cloneNode\", function (c) {\n c = q.call(this, !!c);this.ownerDocument.__CE_registry ? N(a, c) : V(a, c);return c;\n });M(Node.prototype, \"removeChild\", function (c) {\n var f = c instanceof Element && I(c),\n d = u.call(this, c);f && Y(a, c);return d;\n });M(Node.prototype, \"replaceChild\", function (c, f) {\n if (c instanceof DocumentFragment) {\n var d = J(c);c = v.call(this, c, f);if (I(this)) for (Y(a, f), f = 0; f < d.length; f++) {\n X(a, d[f]);\n }return c;\n }d = c instanceof Element && I(c);var e = v.call(this, c, f),\n g = I(this);g && Y(a, f);d && Y(a, c);g && X(a, c);return e;\n });x && x.get ? b(Node.prototype, x) : Aa(a, function (c) {\n b(c, { enumerable: !0, configurable: !0, get: function get() {\n for (var f = [], d = this.firstChild; d; d = d.nextSibling) {\n d.nodeType !== Node.COMMENT_NODE && f.push(d.textContent);\n }return f.join(\"\");\n }, set: function set(f) {\n for (; this.firstChild;) {\n u.call(this, this.firstChild);\n }null != f && \"\" !== f && r.call(this, document.createTextNode(f));\n } });\n });\n };function Ha(a) {\n function b(f) {\n return function (d) {\n for (var e = [], g = 0; g < arguments.length; ++g) {\n e[g] = arguments[g];\n }g = [];for (var h = [], k = 0; k < e.length; k++) {\n var l = e[k];l instanceof Element && I(l) && h.push(l);if (l instanceof DocumentFragment) for (l = l.firstChild; l; l = l.nextSibling) {\n g.push(l);\n } else g.push(l);\n }f.apply(this, e);for (e = 0; e < h.length; e++) {\n Y(a, h[e]);\n }if (I(this)) for (e = 0; e < g.length; e++) {\n h = g[e], h instanceof Element && X(a, h);\n }\n };\n }var c = Element.prototype;void 0 !== ja && M(c, \"before\", b(ja));void 0 !== ka && M(c, \"after\", b(ka));void 0 !== la && M(c, \"replaceWith\", function (f) {\n for (var d = [], e = 0; e < arguments.length; ++e) {\n d[e] = arguments[e];\n }e = [];for (var g = [], h = 0; h < d.length; h++) {\n var k = d[h];k instanceof Element && I(k) && g.push(k);if (k instanceof DocumentFragment) for (k = k.firstChild; k; k = k.nextSibling) {\n e.push(k);\n } else e.push(k);\n }h = I(this);la.apply(this, d);for (d = 0; d < g.length; d++) {\n Y(a, g[d]);\n }if (h) for (Y(a, this), d = 0; d < e.length; d++) {\n g = e[d], g instanceof Element && X(a, g);\n }\n });void 0 !== ma && M(c, \"remove\", function () {\n var f = I(this);ma.call(this);f && Y(a, this);\n });\n };function Ia(a) {\n function b(d, e) {\n Object.defineProperty(d, \"innerHTML\", { enumerable: e.enumerable, configurable: !0, get: e.get, set: function set(g) {\n var h = this,\n k = void 0;I(this) && (k = [], U(a, this, function (w) {\n w !== h && k.push(w);\n }));e.set.call(this, g);if (k) for (var l = 0; l < k.length; l++) {\n var m = k[l];1 === m.__CE_state && a.disconnectedCallback(m);\n }this.ownerDocument.__CE_registry ? N(a, this) : V(a, this);return g;\n } });\n }function c(d, e) {\n M(d, \"insertAdjacentElement\", function (g, h) {\n var k = I(h);g = e.call(this, g, h);k && Y(a, h);I(g) && X(a, h);return g;\n });\n }\n function f(d, e) {\n function g(h, k) {\n for (var l = []; h !== k; h = h.nextSibling) {\n l.push(h);\n }for (k = 0; k < l.length; k++) {\n N(a, l[k]);\n }\n }M(d, \"insertAdjacentHTML\", function (h, k) {\n h = h.toLowerCase();if (\"beforebegin\" === h) {\n var l = this.previousSibling;e.call(this, h, k);g(l || this.parentNode.firstChild, this);\n } else if (\"afterbegin\" === h) l = this.firstChild, e.call(this, h, k), g(this.firstChild, l);else if (\"beforeend\" === h) l = this.lastChild, e.call(this, h, k), g(l || this.firstChild, null);else if (\"afterend\" === h) l = this.nextSibling, e.call(this, h, k), g(this.nextSibling, l);else throw new SyntaxError(\"The value provided (\" + String(h) + \") is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.\");\n });\n }y && M(Element.prototype, \"attachShadow\", function (d) {\n d = y.call(this, d);if (a.a && !d.__CE_patched) {\n d.__CE_patched = !0;for (var e = 0; e < a.b.length; e++) {\n a.b[e](d);\n }\n }return this.__CE_shadowRoot = d;\n });z && z.get ? b(Element.prototype, z) : H && H.get ? b(HTMLElement.prototype, H) : Ba(a, function (d) {\n b(d, { enumerable: !0, configurable: !0, get: function get() {\n return q.call(this, !0).innerHTML;\n }, set: function set(e) {\n var g = \"template\" === this.localName,\n h = g ? this.content : this,\n k = p.call(document, this.namespaceURI, this.localName);for (k.innerHTML = e; 0 < h.childNodes.length;) {\n u.call(h, h.childNodes[0]);\n }for (e = g ? k.content : k; 0 < e.childNodes.length;) {\n r.call(h, e.childNodes[0]);\n }\n } });\n });M(Element.prototype, \"setAttribute\", function (d, e) {\n if (1 !== this.__CE_state) return B.call(this, d, e);var g = A.call(this, d);B.call(this, d, e);e = A.call(this, d);a.attributeChangedCallback(this, d, g, e, null);\n });M(Element.prototype, \"setAttributeNS\", function (d, e, g) {\n if (1 !== this.__CE_state) return E.call(this, d, e, g);var h = D.call(this, d, e);E.call(this, d, e, g);g = D.call(this, d, e);a.attributeChangedCallback(this, e, h, g, d);\n });M(Element.prototype, \"removeAttribute\", function (d) {\n if (1 !== this.__CE_state) return C.call(this, d);var e = A.call(this, d);C.call(this, d);null !== e && a.attributeChangedCallback(this, d, e, null, null);\n });M(Element.prototype, \"removeAttributeNS\", function (d, e) {\n if (1 !== this.__CE_state) return F.call(this, d, e);var g = D.call(this, d, e);F.call(this, d, e);var h = D.call(this, d, e);g !== h && a.attributeChangedCallback(this, e, g, h, d);\n });oa ? c(HTMLElement.prototype, oa) : G && c(Element.prototype, G);pa ? f(HTMLElement.prototype, pa) : fa && f(Element.prototype, fa);Z(a, Element.prototype, { prepend: ha, append: ia });Ha(a);\n };var T = window.customElements;function Ja() {\n var a = new S();Ea(a);Fa(a);Z(a, DocumentFragment.prototype, { prepend: da, append: ea });Ga(a);Ia(a);a = new O(a);document.__CE_registry = a;Object.defineProperty(window, \"customElements\", { configurable: !0, enumerable: !0, value: a });\n }T && !T.forcePolyfill && \"function\" == typeof T.define && \"function\" == typeof T.get || Ja();window.__CE_installPolyfill = Ja;\n}).call(self);\n\n//# sourceMappingURL=custom-elements.min.js.map\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\n/**\n * Copyright 2016 Google Inc. All Rights Reserved.\n *\n * Licensed under the W3C SOFTWARE AND DOCUMENT NOTICE AND LICENSE.\n *\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n */\n(function () {\n 'use strict';\n\n // Exit early if we're not running in a browser.\n\n if ((typeof window === 'undefined' ? 'undefined' : _typeof(window)) !== 'object') {\n return;\n }\n\n // Exit early if all IntersectionObserver and IntersectionObserverEntry\n // features are natively supported.\n if ('IntersectionObserver' in window && 'IntersectionObserverEntry' in window && 'intersectionRatio' in window.IntersectionObserverEntry.prototype) {\n\n // Minimal polyfill for Edge 15's lack of `isIntersecting`\n // See: https://github.com/w3c/IntersectionObserver/issues/211\n if (!('isIntersecting' in window.IntersectionObserverEntry.prototype)) {\n Object.defineProperty(window.IntersectionObserverEntry.prototype, 'isIntersecting', {\n get: function get() {\n return this.intersectionRatio > 0;\n }\n });\n }\n return;\n }\n\n /**\n * Returns the embedding frame element, if any.\n * @param {!Document} doc\n * @return {!Element}\n */\n function getFrameElement(doc) {\n try {\n return doc.defaultView && doc.defaultView.frameElement || null;\n } catch (e) {\n // Ignore the error.\n return null;\n }\n }\n\n /**\n * A local reference to the root document.\n */\n var document = function (startDoc) {\n var doc = startDoc;\n var frame = getFrameElement(doc);\n while (frame) {\n doc = frame.ownerDocument;\n frame = getFrameElement(doc);\n }\n return doc;\n }(window.document);\n\n /**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\n var registry = [];\n\n /**\n * The signal updater for cross-origin intersection. When not null, it means\n * that the polyfill is configured to work in a cross-origin mode.\n * @type {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\n var crossOriginUpdater = null;\n\n /**\n * The current cross-origin intersection. Only used in the cross-origin mode.\n * @type {DOMRect|ClientRect}\n */\n var crossOriginRect = null;\n\n /**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\n function IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = ensureDOMRect(entry.rootBounds);\n this.boundingClientRect = ensureDOMRect(entry.boundingClientRect);\n this.intersectionRect = ensureDOMRect(entry.intersectionRect || getEmptyRect());\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n // Round the intersection ratio to avoid floating point math issues:\n // https://github.com/w3c/IntersectionObserver/issues/324\n this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n }\n\n /**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\n function IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (options.root && options.root.nodeType != 1) {\n throw new Error('root must be an Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function (margin) {\n return margin.value + margin.unit;\n }).join(' ');\n\n /** @private @const {!Array} */\n this._monitoringDocuments = [];\n /** @private @const {!Array} */\n this._monitoringUnsubscribes = [];\n }\n\n /**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\n IntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n /**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\n IntersectionObserver.prototype.POLL_INTERVAL = null;\n\n /**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\n IntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n /**\n * Sets up the polyfill in the cross-origin mode. The result is the\n * updater function that accepts two arguments: `boundingClientRect` and\n * `intersectionRect` - just as these fields would be available to the\n * parent via `IntersectionObserverEntry`. This function should be called\n * each time the iframe receives intersection information from the parent\n * window, e.g. via messaging.\n * @return {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\n IntersectionObserver._setupCrossOriginUpdater = function () {\n if (!crossOriginUpdater) {\n /**\n * @param {DOMRect|ClientRect} boundingClientRect\n * @param {DOMRect|ClientRect} intersectionRect\n */\n crossOriginUpdater = function crossOriginUpdater(boundingClientRect, intersectionRect) {\n if (!boundingClientRect || !intersectionRect) {\n crossOriginRect = getEmptyRect();\n } else {\n crossOriginRect = convertFromParentRect(boundingClientRect, intersectionRect);\n }\n registry.forEach(function (observer) {\n observer._checkForIntersections();\n });\n };\n }\n return crossOriginUpdater;\n };\n\n /**\n * Resets the cross-origin mode.\n */\n IntersectionObserver._resetCrossOriginUpdater = function () {\n crossOriginUpdater = null;\n crossOriginRect = null;\n };\n\n /**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\n IntersectionObserver.prototype.observe = function (target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function (item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({ element: target, entry: null });\n this._monitorIntersections(target.ownerDocument);\n this._checkForIntersections();\n };\n\n /**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\n IntersectionObserver.prototype.unobserve = function (target) {\n this._observationTargets = this._observationTargets.filter(function (item) {\n return item.element != target;\n });\n this._unmonitorIntersections(target.ownerDocument);\n if (this._observationTargets.length == 0) {\n this._unregisterInstance();\n }\n };\n\n /**\n * Stops observing all target elements for intersection changes.\n */\n IntersectionObserver.prototype.disconnect = function () {\n this._observationTargets = [];\n this._unmonitorAllIntersections();\n this._unregisterInstance();\n };\n\n /**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\n IntersectionObserver.prototype.takeRecords = function () {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n };\n\n /**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\n IntersectionObserver.prototype._initThresholds = function (opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function (t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n };\n\n /**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array} An array of margin objects with the keys\n * value and unit.\n */\n IntersectionObserver.prototype._parseRootMargin = function (opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function (margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return { value: parseFloat(parts[1]), unit: parts[2] };\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n };\n\n /**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @param {!Document} doc\n * @private\n */\n IntersectionObserver.prototype._monitorIntersections = function (doc) {\n var win = doc.defaultView;\n if (!win) {\n // Already destroyed.\n return;\n }\n if (this._monitoringDocuments.indexOf(doc) != -1) {\n // Already monitoring.\n return;\n }\n\n // Private state for monitoring.\n var callback = this._checkForIntersections;\n var monitoringInterval = null;\n var domObserver = null;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n monitoringInterval = win.setInterval(callback, this.POLL_INTERVAL);\n } else {\n addEvent(win, 'resize', callback, true);\n addEvent(doc, 'scroll', callback, true);\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in win) {\n domObserver = new win.MutationObserver(callback);\n domObserver.observe(doc, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n\n this._monitoringDocuments.push(doc);\n this._monitoringUnsubscribes.push(function () {\n // Get the window object again. When a friendly iframe is destroyed, it\n // will be null.\n var win = doc.defaultView;\n\n if (win) {\n if (monitoringInterval) {\n win.clearInterval(monitoringInterval);\n }\n removeEvent(win, 'resize', callback, true);\n }\n\n removeEvent(doc, 'scroll', callback, true);\n if (domObserver) {\n domObserver.disconnect();\n }\n });\n\n // Also monitor the parent.\n if (doc != (this.root && this.root.ownerDocument || document)) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._monitorIntersections(frame.ownerDocument);\n }\n }\n };\n\n /**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\n IntersectionObserver.prototype._unmonitorIntersections = function (doc) {\n var index = this._monitoringDocuments.indexOf(doc);\n if (index == -1) {\n return;\n }\n\n var rootDoc = this.root && this.root.ownerDocument || document;\n\n // Check if any dependent targets are still remaining.\n var hasDependentTargets = this._observationTargets.some(function (item) {\n var itemDoc = item.element.ownerDocument;\n // Target is in this context.\n if (itemDoc == doc) {\n return true;\n }\n // Target is nested in this context.\n while (itemDoc && itemDoc != rootDoc) {\n var frame = getFrameElement(itemDoc);\n itemDoc = frame && frame.ownerDocument;\n if (itemDoc == doc) {\n return true;\n }\n }\n return false;\n });\n if (hasDependentTargets) {\n return;\n }\n\n // Unsubscribe.\n var unsubscribe = this._monitoringUnsubscribes[index];\n this._monitoringDocuments.splice(index, 1);\n this._monitoringUnsubscribes.splice(index, 1);\n unsubscribe();\n\n // Also unmonitor the parent.\n if (doc != rootDoc) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._unmonitorIntersections(frame.ownerDocument);\n }\n }\n };\n\n /**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\n IntersectionObserver.prototype._unmonitorAllIntersections = function () {\n var unsubscribes = this._monitoringUnsubscribes.slice(0);\n this._monitoringDocuments.length = 0;\n this._monitoringUnsubscribes.length = 0;\n for (var i = 0; i < unsubscribes.length; i++) {\n unsubscribes[i]();\n }\n };\n\n /**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\n IntersectionObserver.prototype._checkForIntersections = function () {\n if (!this.root && crossOriginUpdater && !crossOriginRect) {\n // Cross origin monitoring, but no initial data available yet.\n return;\n }\n\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function (item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget && this._computeTargetAndRootIntersection(target, targetRect, rootRect);\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: crossOriginUpdater && !this.root ? null : rootRect,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n };\n\n /**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} targetRect The bounding rect of the target.\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\n IntersectionObserver.prototype._computeTargetAndRootIntersection = function (target, targetRect, rootRect) {\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot && parent) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ? window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return null;\n\n if (parent == this.root || parent.nodeType == /* DOCUMENT */9) {\n atRoot = true;\n if (parent == this.root || parent == document) {\n if (crossOriginUpdater && !this.root) {\n if (!crossOriginRect || crossOriginRect.width == 0 && crossOriginRect.height == 0) {\n // A 0-size cross-origin intersection means no-intersection.\n parent = null;\n parentRect = null;\n intersectionRect = null;\n } else {\n parentRect = crossOriginRect;\n }\n } else {\n parentRect = rootRect;\n }\n } else {\n // Check if there's a frame that can be navigated to.\n var frame = getParentNode(parent);\n var frameRect = frame && getBoundingClientRect(frame);\n var frameIntersect = frame && this._computeTargetAndRootIntersection(frame, frameRect, rootRect);\n if (frameRect && frameIntersect) {\n parent = frame;\n parentRect = convertFromParentRect(frameRect, frameIntersect);\n } else {\n parent = null;\n intersectionRect = null;\n }\n }\n } else {\n // If the element has a non-visible overflow, and it's not the \n // or element, update the intersection rect.\n // Note: and cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n var doc = parent.ownerDocument;\n if (parent != doc.body && parent != doc.documentElement && parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n }\n if (!intersectionRect) break;\n parent = parent && getParentNode(parent);\n }\n return intersectionRect;\n };\n\n /**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {ClientRect} The expanded root rect.\n * @private\n */\n IntersectionObserver.prototype._getRootRect = function () {\n var rootRect;\n if (this.root) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use / instead of window since scroll bars affect size.\n var html = document.documentElement;\n var body = document.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n };\n\n /**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {DOMRect|ClientRect} rect The rect object to expand.\n * @return {ClientRect} The expanded rect.\n * @private\n */\n IntersectionObserver.prototype._expandRectByRootMargin = function (rect) {\n var margins = this._rootMarginValues.map(function (margin, i) {\n return margin.unit == 'px' ? margin.value : margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n };\n\n /**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\n IntersectionObserver.prototype._hasCrossedThreshold = function (oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ? oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ? newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio || threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n };\n\n /**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\n IntersectionObserver.prototype._rootIsInDom = function () {\n return !this.root || containsDeep(document, this.root);\n };\n\n /**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\n IntersectionObserver.prototype._rootContainsTarget = function (target) {\n return containsDeep(this.root || document, target) && (!this.root || this.root.ownerDocument == target.ownerDocument);\n };\n\n /**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\n IntersectionObserver.prototype._registerInstance = function () {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n };\n\n /**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\n IntersectionObserver.prototype._unregisterInstance = function () {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n };\n\n /**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\n function now() {\n return window.performance && performance.now && performance.now();\n }\n\n /**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\n function throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function () {\n fn();\n timer = null;\n }, timeout);\n }\n };\n }\n\n /**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\n function addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n } else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n }\n\n /**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\n function removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n } else if (typeof node.detatchEvent == 'function') {\n node.detatchEvent('on' + event, fn);\n }\n }\n\n /**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object|?ClientRect} The intersection rect or undefined if no\n * intersection is found.\n */\n function computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return width >= 0 && height >= 0 && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n } || null;\n }\n\n /**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {DOMRect|ClientRect} The (possibly shimmed) rect of the element.\n */\n function getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n }\n\n /**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {ClientRect} The empty rect.\n */\n function getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n }\n\n /**\n * Ensure that the result has all of the necessary fields of the DOMRect.\n * Specifically this ensures that `x` and `y` fields are set.\n *\n * @param {?DOMRect|?ClientRect} rect\n * @return {?DOMRect}\n */\n function ensureDOMRect(rect) {\n // A `DOMRect` object has `x` and `y` fields.\n if (!rect || 'x' in rect) {\n return rect;\n }\n // A IE's `ClientRect` type does not have `x` and `y`. The same is the case\n // for internally calculated Rect objects. For the purposes of\n // `IntersectionObserver`, it's sufficient to simply mirror `left` and `top`\n // for these fields.\n return {\n top: rect.top,\n y: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n };\n }\n\n /**\n * Inverts the intersection and bounding rect from the parent (frame) BCR to\n * the local BCR space.\n * @param {DOMRect|ClientRect} parentBoundingRect The parent's bound client rect.\n * @param {DOMRect|ClientRect} parentIntersectionRect The parent's own intersection rect.\n * @return {ClientRect} The local root bounding rect for the parent's children.\n */\n function convertFromParentRect(parentBoundingRect, parentIntersectionRect) {\n var top = parentIntersectionRect.top - parentBoundingRect.top;\n var left = parentIntersectionRect.left - parentBoundingRect.left;\n return {\n top: top,\n left: left,\n height: parentIntersectionRect.height,\n width: parentIntersectionRect.width,\n bottom: top + parentIntersectionRect.height,\n right: left + parentIntersectionRect.width\n };\n }\n\n /**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\n function containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n }\n\n /**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\n function getParentNode(node) {\n var parent = node.parentNode;\n\n if (node.nodeType == /* DOCUMENT */9 && node != document) {\n // If this node is a document node, look for the embedding frame.\n return getFrameElement(node);\n }\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n\n if (parent && parent.assignedSlot) {\n // If the parent is distributed in a , return the parent of a slot.\n return parent.assignedSlot.parentNode;\n }\n\n return parent;\n }\n\n // Exposes the constructors globally.\n window.IntersectionObserver = IntersectionObserver;\n window.IntersectionObserverEntry = IntersectionObserverEntry;\n})();\n\n/***/ })\n/******/ ]);\n\n\n// WEBPACK FOOTER //\n// article-video-loop-bundle-v2-69f1813fc7db818dad04.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 \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/static/\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 15);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap a81d912aa6d0966acfde","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/utils.js","/*!\n * domready (c) Dustin Diaz 2014 - License MIT\n */\n!function (name, definition) {\n\n if (typeof module != 'undefined') module.exports = definition()\n else if (typeof define == 'function' && typeof define.amd == 'object') define(definition)\n else this[name] = definition()\n\n}('domready', function () {\n\n var fns = [], listener\n , doc = document\n , hack = doc.documentElement.doScroll\n , domContentLoaded = 'DOMContentLoaded'\n , loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState)\n\n\n if (!loaded)\n doc.addEventListener(domContentLoaded, listener = function () {\n doc.removeEventListener(domContentLoaded, listener)\n loaded = 1\n while (listener = fns.shift()) listener()\n })\n\n return function (fn) {\n loaded ? setTimeout(fn, 0) : fns.push(fn)\n }\n\n});\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/domready/ready.js","export function nodelistToArray (nodeList) {\n return [].slice.call(nodeList)\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/nodelistToArray.js","export function uuid () {\n return `_${Math.random().toString(36).substr(2, 9)}`\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/lib/uuid.js","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/process/browser.js","module.exports = require('./lib/axios');\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/index.js","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/helpers/bind.js","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/helpers/buildURL.js","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/cancel/isCancel.js","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/defaults.js","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/adapters/xhr.js","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/core/createError.js","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'params', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy'];\n var defaultToConfig2Keys = [\n 'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress',\n 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath'\n ];\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys);\n\n var otherKeys = Object\n .keys(config2)\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n return config;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/core/mergeConfig.js","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/cancel/Cancel.js","import domready from 'domready'\nimport { nodelistToArray } from '../lib/nodelistToArray'\nimport { uuid } from '../lib/uuid'\nimport levendeStillbilde from '@nrk/dh-basis-levende-stillbilde'\nimport { ElementIntersectionObserver } from '@nrk/dh-basis-common'\nimport styles from './components/VideoLoop.css'\n\nconst rootElementClassName = 'article-levende-stillbilde-root'\n\nwindow[rootElementClassName] = window[rootElementClassName] || {}\nwindow.isDhSentryInitiated = false\n\nconst VIEWPORT_POSITION_ATTR = 'data-viewport-position'\n\nfunction init () {\n initCustomElements()\n\n const elementsArray = nodelistToArray(document.getElementsByClassName(rootElementClassName))\n elementsArray\n .filter(el => !isInitialized(el))\n .forEach(el => {\n el.id = uuid()\n window[rootElementClassName][el.id] = true\n\n // Extract preloaded state sent from server\n const preloadedState = JSON.parse(el.getAttribute('data-preloaded-state'))\n mount(el, preloadedState)\n })\n}\n\nfunction mount (el, preloadedState) {\n try {\n // Checks to see whether or not the video element is inside the a feature article cover\n const insideCover = Boolean(document.querySelector(`.article-feature__cover #${el.id}`))\n const captionEl = document.querySelector(`#${el.id} [data-caption]`)\n if (insideCover && captionEl) {\n captionEl.parentNode.replaceChild(\n headingCaption(preloadedState.altText, preloadedState.byline),\n captionEl\n )\n }\n\n const videoWrapperElement = el.querySelector('.dh-video-wrapper')\n\n // eslint-disable-next-line no-unused-vars\n const elementObserver = new ElementIntersectionObserver([videoWrapperElement], (intersections) => {\n const element = intersections[0]\n const elementViewportPosition = videoWrapperElement.getAttribute(VIEWPORT_POSITION_ATTR)\n if (element.isIntersecting && elementViewportPosition === 'OUT-OF-VIEWPORT') {\n videoWrapperElement.setAttribute(VIEWPORT_POSITION_ATTR, 'IN-VIEWPORT')\n }\n if (!element.isIntersecting && elementViewportPosition === 'IN-VIEWPORT') {\n videoWrapperElement.setAttribute(VIEWPORT_POSITION_ATTR, 'OUT-OF-VIEWPORT')\n }\n })\n } catch (err) {\n // fail silently\n }\n}\n\nfunction headingCaption (altText, byline) {\n const captionContainer = document.createElement('div')\n captionContainer.innerHTML = `${altText}${byline}`\n captionContainer.setAttribute('class', styles['byline'])\n captionContainer.setAttribute('data-caption', true)\n return captionContainer\n}\n\nfunction initCustomElements () {\n if (typeof customElements.get('dh-lvs-basis-levende-stillbilde') === 'undefined') {\n customElements.define('dh-lvs-basis-levende-stillbilde', levendeStillbilde)\n }\n}\n\nfunction isInitialized (el) {\n return el.id && window[rootElementClassName][el.id]\n}\n\ndomready(() => {\n if (!('customElements' in window)) {\n require('@webcomponents/custom-elements')\n }\n if (!('IntersectionObserver' in window)) {\n require('intersection-observer')\n }\n init()\n})\n\n\n\n// WEBPACK FOOTER //\n// ./src/article/client.videoLoop.js","import { testReducedMotion, toArray, toggleAttribute } from '@nrk/dh-basis-common';\n\nvar STATE_ATTR = 'data-state';\nvar VIEWPORT_POSITION_ATTR = 'data-viewport-position';\nvar DISABLE_FORCED_ATTRIBUTES_ATTR = 'disable-forced-attributes';\nvar IS_PAUSED = 'is-paused';\nvar AUTOPLAY_BLOCKED = 'autoplay-blocked';\n\nvar isVisible = child => child.offsetWidth > 0 || child.offsetHeight > 0;\n\nclass LevendeStillbilde extends HTMLElement {\n constructor() {\n super(...arguments);\n this._disconnecting = false;\n\n this._handlePlayChange = () => {\n this.isPaused = this.visibleVideoElement.paused;\n };\n\n this._updatePlayState = () => {\n if (!this.visibleVideoElement) {\n return;\n }\n\n if (this._shouldPlay()) {\n this._playVideo();\n } else {\n this._pauseVideo();\n }\n };\n\n this._handleResize = () => {\n this._updatePlayState();\n\n this._preload();\n };\n }\n\n static get observedAttributes() {\n return [STATE_ATTR, DISABLE_FORCED_ATTRIBUTES_ATTR, VIEWPORT_POSITION_ATTR];\n }\n\n connectedCallback() {\n this._setVideoAttributes();\n\n this._setEventListeners();\n\n this._updatePlayState();\n }\n\n disconnectedCallback() {\n this._disconnecting = true;\n\n this._removeEventListeners();\n }\n\n attributeChangedCallback(name, prevValue, newValue) {\n var reducedMotion = testReducedMotion();\n var valueChanged = prevValue !== newValue;\n\n if ((name === STATE_ATTR || name === VIEWPORT_POSITION_ATTR) && !reducedMotion) {\n if (valueChanged) {\n this._updatePlayState();\n\n if (name === VIEWPORT_POSITION_ATTR && newValue === 'IN-VIEWPORT') {\n this._preload();\n }\n }\n }\n }\n\n _setEventListeners() {\n window.addEventListener('resize', this._handleResize);\n this.videoElements.forEach(el => {\n el.addEventListener('pause', this._handlePlayChange);\n el.addEventListener('play', this._handlePlayChange);\n el.addEventListener('loadedmetadata', this._updatePlayState);\n });\n }\n\n _removeEventListeners() {\n window.removeEventListener('resize', this._handleResize);\n this.videoElements.forEach(el => {\n el.removeEventListener('pause', this._handlePlayChange);\n el.removeEventListener('play', this._handlePlayChange);\n el.removeEventListener('loadedmetadata', this._updatePlayState);\n });\n }\n\n _setVideoAttributes() {\n if (!this.disableForcedAttributes) {\n this.videoElements.forEach(el => {\n el.setAttribute('playsInline', '');\n el.setAttribute('loop', '');\n el.setAttribute('disableRemotePlayback', '');\n el.setAttribute('x-webkit-airplay', 'deny');\n });\n }\n }\n\n _shouldPlay() {\n return this.visibleVideoElement.readyState >= 1 && this.state === 'ACTIVE' && this.viewportPosition === 'IN-VIEWPORT';\n }\n\n _preload() {\n if (this.visibleVideoElement.getAttribute('preload') !== 'auto') {\n this.visibleVideoElement.setAttribute('preload', 'auto');\n }\n }\n\n _playVideo() {\n var videoElement = this.visibleVideoElement;\n\n if (videoElement.paused && !this.autoplayBlocked) {\n var playPromise = videoElement.play() || Promise.resolve();\n playPromise.catch(e => {\n console.error(e);\n this.autoplayBlocked = true;\n });\n }\n }\n\n _pauseVideo() {\n var videoElement = this.visibleVideoElement;\n\n if (!videoElement.paused) {\n videoElement.pause();\n }\n }\n\n get visibleVideoElement() {\n return this.videoElements.find(isVisible);\n }\n\n get videoElements() {\n return toArray(this.querySelectorAll('video'));\n }\n\n get disableForcedAttributes() {\n return this.hasAttribute(DISABLE_FORCED_ATTRIBUTES_ATTR);\n }\n\n get state() {\n return this.getAttribute(STATE_ATTR);\n }\n\n set state(val) {\n this.setAttribute(STATE_ATTR, val);\n }\n\n get isPaused() {\n return this.getAttribute(IS_PAUSED);\n }\n\n set isPaused(val) {\n if (val) {\n this.setAttribute(IS_PAUSED, '');\n } else {\n this.removeAttribute(IS_PAUSED);\n }\n }\n\n get autoplayBlocked() {\n return this.hasAttribute(AUTOPLAY_BLOCKED) || false;\n }\n\n set autoplayBlocked(val) {\n toggleAttribute(this, AUTOPLAY_BLOCKED, val);\n }\n\n get viewportPosition() {\n return this.getAttribute(VIEWPORT_POSITION_ATTR);\n }\n\n set viewportPosition(val) {\n this.setAttribute(VIEWPORT_POSITION_ATTR, val);\n }\n\n}\n\nexport default LevendeStillbilde;\n//# sourceMappingURL=dh-basis-levende-stillbilde.esm.js.map\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@nrk/dh-basis-levende-stillbilde/dh-basis-levende-stillbilde.esm.js","import axios from 'axios';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n/* eslint-disable compat/compat */\nvar defaultConfig = {\n rootMargin: '0px 0px 0px 0px',\n threshold: [0, 0.5, 1]\n};\nclass ElementIntersectionObserver {\n constructor(elements, onChange, config) {\n this.intersections = void 0;\n this.elements = void 0;\n this.elements = elements.slice(0);\n this.intersections = elements.map(target => ({\n target,\n isIntersecting: false,\n ratio: null\n }));\n this.intersectionObserver = new IntersectionObserver(entries => {\n var intersections = this.intersections.slice(0);\n entries.forEach(entry => {\n var idx = elements.indexOf(entry.target);\n intersections.splice(idx, 1, {\n target: entry.target,\n isIntersecting: entry.isIntersecting,\n ratio: entry.intersectionRatio\n });\n });\n this.intersections = intersections;\n onChange(this.intersections);\n }, _objectSpread2({}, defaultConfig, {}, config));\n elements.forEach(elm => this.intersectionObserver.observe(elm));\n }\n\n disconnect() {\n // Unregister trigger elements\n this.elements.forEach(elm => this.intersectionObserver.unobserve(elm)); // Disconnect intersection observer\n\n this.intersectionObserver.disconnect();\n }\n\n}\n\nfunction toggleAttribute(el, name, boolValue) {\n if (!el) {\n return;\n }\n\n var nextValue;\n\n if (typeof boolValue !== 'undefined') {\n nextValue = !!boolValue;\n } else {\n nextValue = el.hasAttribute(name);\n }\n\n if (nextValue) {\n el.setAttribute(name, '');\n } else {\n el.removeAttribute(name);\n }\n}\nfunction setAttribute(el, name, nextValue) {\n if (!el) {\n return;\n }\n\n if (nextValue) {\n el.setAttribute(name, nextValue);\n } else {\n el.removeAttribute(name);\n }\n}\nvar closest = (() => {\n var proto = typeof window === 'undefined' ? {} : window.Element.prototype;\n var match = proto.matches || proto.msMatchesSelector || proto.webkitMatchesSelector;\n\n if (proto.closest) {\n return (el, css) => el.closest(css);\n } else {\n return (el, css) => {\n for (; el; el = el.parentElement) {\n if (match.call(el, css)) return el;\n }\n\n return null;\n };\n }\n})();\nfunction addStyle(nodeName, css) {\n var key = \"style-\".concat(nodeName.toLowerCase());\n var min = css.replace(/\\/\\*[^!][^*]*\\*\\//g, '').replace(/\\s*(^|[:;,{}]|$)\\s*/g, '$1');\n document.getElementById(key) || document.head.insertAdjacentHTML('afterbegin', \"\"));\n}\nfunction toArray(nodeList) {\n return [].slice.call(nodeList);\n}\nfunction dispatchEvent(element, name) {\n var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var ignore = \"prevent_recursive_dispatch_maximum_callstack\".concat(name);\n var event;\n if (element[ignore]) return true; // We are already processing this event, so skip sending a new one\n else element[ignore] = true; // Add name to dispatching ignore\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(name, true, true, detail);\n } // IE reports incorrect event.defaultPrevented\n // but correct return value on element.dispatchEvent\n\n\n var result = element.dispatchEvent(event);\n element[ignore] = null; // Remove name from dispatching ignore\n\n return result; // Follow W3C standard for return value\n}\n\nfunction easeOutQuint(t) {\n return 1 + --t * t * t * t * t;\n}\n\nclass VerticalScroll {\n constructor(container) {\n this.container = void 0;\n this.container = container;\n }\n\n to(top) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var from = this.container.scrollTop;\n var distance = top - from;\n var startTime = null;\n\n var loop = currentTime => {\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n this.container.scrollTop = from + distance * easeOutQuint(timeElapsed / duration);\n\n if (timeElapsed < duration) {\n window.requestAnimationFrame(loop);\n } else {\n this.container.scrollTop = top;\n }\n };\n\n window.requestAnimationFrame(loop);\n }\n\n}\nclass HorizontalScroll {\n constructor(container) {\n this.container = void 0;\n this.container = container;\n }\n\n to(left) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var callback = arguments.length > 2 ? arguments[2] : undefined;\n var from = this.container.scrollLeft;\n var distance = left - from;\n var startTime = null;\n\n var loop = currentTime => {\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n this.container.scrollLeft = from + distance * easeOutQuint(timeElapsed / duration);\n\n if (timeElapsed < duration) {\n window.requestAnimationFrame(loop);\n } else {\n this.container.scrollLeft = left;\n callback && callback();\n }\n };\n\n window.requestAnimationFrame(loop);\n }\n\n}\n\nfunction testReducedMotion() {\n if (typeof window !== 'undefined') {\n return !!window.matchMedia && window.matchMedia('(prefers-reduced-motion)').matches;\n }\n\n return false;\n}\n\nvar name = process.env.npm_package_name;\nvar version = process.env.npm_package_version;\n\nfunction createGqlApi() {\n return {\n get(query, url) {\n return _asyncToGenerator(function* () {\n var {\n data,\n errors\n } = yield axios({\n method: 'POST',\n url,\n data: {\n query,\n variables: null\n },\n timeout: 7500,\n headers: {\n 'User-Agent': \"\".concat(name, \"/\").concat(version, \" (node/isomorphic-fetch)\"),\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n }\n }).then(res => res.data);\n\n if (errors && errors.length) {\n throw Error(errors);\n }\n\n return transformResponse(data);\n })();\n }\n\n };\n}\n\nvar gqlApi = createGqlApi();\n\nfunction pngFragment(options) {\n var aspects = options.aspectRatios.map(ratio => {\n var sizes = ratio.sizes.map(s => \"w\".concat(s, \": url(quality: \").concat(ratio.quality || '0.7', \", width: \").concat(s, \", format: png)\")).join('\\n');\n return \"\".concat(ratio.id, \": crop(aspect: \").concat(ratio.id, \") {\\n \").concat(ratio.id === 'original' ? 'aspect' : '', \"\\n \").concat(sizes, \"\\n }\");\n }).join('\\n');\n return \"\\nfragment imageCropsPng on Image {\\n title,\\n creators,\\n credit,\\n category,\\n \".concat(aspects, \"\\n}\\n\");\n}\n\nfunction jpgFragment(options) {\n var aspects = options.aspectRatios.map(ratio => {\n var sizes = ratio.sizes.map(size => \"w\".concat(size, \": url(quality: \").concat(ratio.quality || '0.7', \", width: \").concat(size, \")\")).join('\\n');\n return \"\".concat(ratio.id, \": crop(aspect: \").concat(ratio.id, \") {\\n \").concat(ratio.id === 'original' ? 'aspect' : '', \"\\n \").concat(sizes, \"\\n }\");\n }).join('\\n');\n return \"\\nfragment imageCropsJpg on Image {\\n title,\\n creators,\\n credit,\\n category,\\n \".concat(aspects, \"\\n}\\n\");\n}\n/**\n * Transforms a series of image sections to a Polopoly GraphQL API query\n */\n\n\nfunction createQuery(imageObjects, options) {\n var images = getImageIds(imageObjects);\n return \"\\n \".concat(createBase(images, options), \"\\n query {\\n \").concat(images.map(getImage).join('\\n'), \"\\n }\");\n}\nvar IMAGE_PROPS = ['vertical', 'horizontal'];\n\nfunction getImageIds(imageObjects) {\n if (imageObjects.some(image => !image)) {\n throw new Error('Undefined image object');\n }\n\n return imageObjects.reduce((result, image) => {\n var format = image.format || image.advanced && image.advanced.format || 'jpg';\n /* Image can be stored directly on image object */\n\n if (image.id && !result.find(el => el.id === image.id)) {\n result.push({\n id: image.id,\n format\n });\n }\n /* or on a predefined set of image properties */\n\n\n IMAGE_PROPS.forEach(prop => {\n var value = image[prop];\n\n if (value && value.id && !result.find(el => el.id === value.id)) {\n result.push({\n id: value.id,\n format\n });\n }\n });\n return result;\n }, []);\n}\n\nfunction getImage(_ref) {\n var {\n id,\n format = 'jpg'\n } = _ref;\n\n if (format === 'png') {\n return \"\".concat(transformId(id), \": model(id: \\\"\").concat(id, \"\\\") {\\n ...imageCropsPng\\n }\");\n }\n\n return \"\".concat(transformId(id), \": model(id: \\\"\").concat(id, \"\\\") {\\n ...imageCropsJpg\\n }\");\n}\n\nfunction createBase(imageObjects, options) {\n var containsJpg = imageObjects.filter(el => el.format === 'jpg').length > 0;\n var containsPng = imageObjects.filter(el => el.format === 'png').length > 0;\n return \"\\n \".concat(containsJpg ? jpgFragment(options) : '', \"\\n \").concat(containsPng ? pngFragment(options) : '', \"\\n \");\n}\n/**\n * Transforns a polopoly id to something that can be used as a key in a GraphQL query\n * Example: '1.14252981' -> 'id_1_14252981'\n */\n\n\nfunction transformId(id) {\n return \"id\".concat(id.replace(/\\./g, '__'));\n}\n/**\n * Transforns an already transformed polopoly id back to a regular polopoly id\n * Example: ''id_1_14252981' -> 1.14252981'\n */\n\n\nfunction transformBackId(id) {\n return id.replace('id', '').replace(/__/g, '.');\n}\n\nfunction transformResponse(response) {\n return Object.keys(response).reduce((res, key) => {\n var transformedKey = transformBackId(key);\n res[transformedKey] = response[key];\n return res;\n }, {});\n}\n\nfunction fromEntries(items) {\n return [...items].reduce((obj, _ref) => {\n var [key, val] = _ref;\n obj[key] = val;\n return obj;\n }, {});\n}\n\nfunction traverse(obj, filter) {\n var matches = [];\n\n if (filter(obj)) {\n /* Object is a match, returning */\n matches.push(obj);\n }\n\n return [...matches, ...Object.entries(obj).filter((_ref2) => {\n var [_, value] = _ref2;\n return !!value;\n }).map((_ref3) => {\n var [_, value] = _ref3;\n\n if (Array.isArray(value)) {\n return value.map(item => traverse(item, filter)).reduce((acc, val) => acc.concat(val), []);\n } else if (typeof value === 'object') {\n return traverse(value, filter);\n } else {\n return null;\n }\n }).reduce((acc, val) => acc.concat(val), []).filter(Boolean)];\n}\n/*\n * Traverses the props tree and fetches data for all image objects\n * */\n\n\nfunction prefetchImageData(_x, _x2) {\n return _prefetchImageData.apply(this, arguments);\n}\n\nfunction _prefetchImageData() {\n _prefetchImageData = _asyncToGenerator(function* (props, options) {\n var imageObjects = traverse(props, value => value.type && value.type.startsWith('image'));\n\n if (imageObjects.length > 0) {\n if (!options.gqlApiUrl) {\n throw new Error(\"Missing option 'gqlApiUrl'\");\n }\n\n var query = createQuery(imageObjects, options);\n return gqlApi.get(query, options.gqlApiUrl);\n }\n });\n return _prefetchImageData.apply(this, arguments);\n}\n\nvar imageProps = ['vertical', 'horizontal'];\nfunction mergeImageProps(props, imageUrls) {\n if ('id' in props) {\n return _objectSpread2({}, props, {}, imageUrls[props.id]);\n } else {\n return fromEntries(Object.entries(props).map((_ref4) => {\n var [key, value] = _ref4;\n\n if (imageProps.indexOf(key) !== -1) {\n return [key, mergeImageProps(value, imageUrls)];\n } else {\n return [key, value];\n }\n }));\n }\n}\n\nfunction mergeVideoloopProps(_x) {\n return _mergeVideoloopProps.apply(this, arguments);\n}\n\nfunction _mergeVideoloopProps() {\n _mergeVideoloopProps = _asyncToGenerator(function* (props) {\n var objects = yield Promise.all(Object.keys(props).map(\n /*#__PURE__*/\n function () {\n var _ref2 = _asyncToGenerator(function* (key) {\n if (key === 'horizontal' || key === 'vertical') {\n return _objectSpread2({\n id: key\n }, props[key], {\n videos: yield getVideoSrc(props[key])\n });\n }\n });\n\n return function (_x4) {\n return _ref2.apply(this, arguments);\n };\n }()));\n return _objectSpread2({}, props, {}, objects.filter(Boolean).reduce((accumulator, current) => {\n accumulator[current.id] = current;\n delete accumulator[current.id].id;\n return accumulator;\n }, {}));\n });\n return _mergeVideoloopProps.apply(this, arguments);\n}\n\nfunction getVideoSrc(_x2) {\n return _getVideoSrc.apply(this, arguments);\n}\n\nfunction _getVideoSrc() {\n _getVideoSrc = _asyncToGenerator(function* (videoObj) {\n var hasVideoUrl = videoObj && videoObj !== 'null';\n\n if (hasVideoUrl) {\n var videos = yield getVideos(videoObj.url);\n var basePath = extractBasePathFromUrl(videoObj.url);\n return videos.map(video => ({\n type: getTypeFromHeight(video.height),\n poster: \"\".concat(basePath, \"/\").concat(video.stillFileName),\n aspectRatio: video.displayAspectRatio,\n height: video.height,\n sources: {\n mp4: \"\".concat(basePath, \"/\").concat(video.videoFileName)\n }\n }));\n } else {\n return null;\n }\n });\n return _getVideoSrc.apply(this, arguments);\n}\n\nfunction extractBasePathFromUrl(url) {\n var decodedUrl = url.replace(/%2F/g, '/');\n return decodedUrl.substr(0, decodedUrl.lastIndexOf('/'));\n}\n\nfunction getVideos(_x3) {\n return _getVideos.apply(this, arguments);\n}\n\nfunction _getVideos() {\n _getVideos = _asyncToGenerator(function* (url) {\n var videoPayload = yield getVideoPayload(url);\n return videoPayload.movingStills;\n });\n return _getVideos.apply(this, arguments);\n}\n\nfunction getVideoPayload(url) {\n return axios.get(url, {\n timeout: 2000\n }).then((_ref) => {\n var {\n data\n } = _ref;\n return data;\n });\n}\n\nfunction getTypeFromHeight(height) {\n switch (height) {\n case 360:\n return 'small';\n\n case 720:\n return 'medium';\n\n case 1080:\n return 'large';\n\n default:\n return 'large';\n }\n}\n\nfunction mergeMapProps(_x) {\n return _mergeMapProps.apply(this, arguments);\n}\n\nfunction _mergeMapProps() {\n _mergeMapProps = _asyncToGenerator(function* (props) {\n var {\n id\n } = props,\n rest = _objectWithoutProperties(props, [\"id\"]);\n\n return _objectSpread2({\n id\n }, rest, {\n definition: yield getMapDefinition(id)\n });\n });\n return _mergeMapProps.apply(this, arguments);\n}\n\nfunction getMapDefinition(_x2) {\n return _getMapDefinition.apply(this, arguments);\n}\n\nfunction _getMapDefinition() {\n _getMapDefinition = _asyncToGenerator(function* (id) {\n if (!id) {\n return;\n }\n\n return axios.get(\"https://dh.nrk.no/atlas/v1/definition?id=\".concat(id), {\n timeout: 2000\n }).then((_ref) => {\n var {\n data\n } = _ref;\n return data;\n });\n });\n return _getMapDefinition.apply(this, arguments);\n}\n\nfunction fromEntries$1(items) {\n return [...items].reduce((obj, _ref) => {\n var [key, val] = _ref;\n obj[key] = val;\n return obj;\n }, {});\n}\n\nvar defaultOptions = {\n image: {\n gqlApiUrl: 'https://www.nrk.no/api/graphql',\n aspectRatios: [{\n id: 'F11',\n sizes: ['450', '768', '1280']\n }, {\n id: 'F34',\n sizes: ['450', '768', '1280']\n }, {\n id: 'F169',\n sizes: ['900', '1280', '2400']\n }, {\n id: 'original',\n sizes: ['450', '768', '1280', '2400']\n }]\n }\n};\nfunction mergeMediaProps(_x, _x2, _x3) {\n return _mergeMediaProps.apply(this, arguments);\n}\n\nfunction _mergeMediaProps() {\n _mergeMediaProps = _asyncToGenerator(function* (props, options, imageData) {\n var mergedOptions = {\n image: _objectSpread2({}, defaultOptions.image, {}, options === null || options === void 0 ? void 0 : options.image)\n };\n var type = props.type;\n var imageDataStored = imageData || (yield prefetchImageData(props, mergedOptions.image));\n var mergedProps = props;\n\n if (type && type.startsWith('videoloop')) {\n mergedProps = yield mergeVideoloopProps(props);\n } else if (type && type.startsWith('image')) {\n mergedProps = yield mergeImageProps(props, imageDataStored);\n } else if (type && type.startsWith('map')) {\n mergedProps = yield mergeMapProps(props, imageDataStored);\n }\n\n var mappedEntries = yield Promise.all(Object.entries(mergedProps).map(\n /*#__PURE__*/\n function () {\n var _ref2 = _asyncToGenerator(function* (_ref3) {\n var [key, value] = _ref3;\n\n if (Array.isArray(value)) {\n var mergedArray = yield Promise.all(value.map(item => mergeMediaProps(item, options, imageDataStored)));\n return [key, mergedArray];\n } else if (typeof value === 'object' && value !== null) {\n return [key, yield mergeMediaProps(value, options, imageDataStored)];\n } else {\n return [key, value];\n }\n });\n\n return function (_x4) {\n return _ref2.apply(this, arguments);\n };\n }()));\n return fromEntries$1(mappedEntries);\n });\n return _mergeMediaProps.apply(this, arguments);\n}\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\nfunction withinRange(current) {\n var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var stop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : MAX_SAFE_INTEGER;\n return current >= start && current <= stop;\n}\nfunction withinStops(currentTime, stops, targetStop) {\n var nrOfStops = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n var uniqueStops = stops.filter(unique);\n var targetTime = stops[targetStop];\n var prevTime = uniqueStops[uniqueStops.indexOf(targetTime) - nrOfStops];\n var nextTime = uniqueStops[uniqueStops.indexOf(targetTime) + nrOfStops];\n return withinRange(currentTime, prevTime, nextTime);\n}\n\nfunction unique(value, index, self) {\n return self.indexOf(value) === index;\n}\n\nexport { ElementIntersectionObserver, HorizontalScroll, VerticalScroll, addStyle, closest, dispatchEvent, mergeImageProps, mergeMapProps, mergeMediaProps, mergeVideoloopProps, setAttribute, testReducedMotion, toArray, toggleAttribute, withinRange, withinStops };\n//# sourceMappingURL=dh-basis-common.esm.js.map\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@nrk/dh-basis-levende-stillbilde/node_modules/@nrk/dh-basis-common/dh-basis-common.esm.js","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/axios.js","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/core/Axios.js","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/core/InterceptorManager.js","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/core/dispatchRequest.js","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/core/transformData.js","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/helpers/normalizeHeaderName.js","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/core/settle.js","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/core/enhanceError.js","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/core/buildFullPath.js","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/helpers/isAbsoluteURL.js","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/helpers/combineURLs.js","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/helpers/parseHeaders.js","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/helpers/isURLSameOrigin.js","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/helpers/cookies.js","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/cancel/CancelToken.js","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/axios/lib/helpers/spread.js","import axios from 'axios';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(source, true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(source).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n/* eslint-disable compat/compat */\nvar defaultConfig = {\n rootMargin: '0px 0px 0px 0px',\n threshold: [0, 0.5, 1]\n};\nclass ElementIntersectionObserver {\n constructor(elements, onChange, config) {\n this.intersections = void 0;\n this.elements = void 0;\n this.elements = elements.slice(0);\n this.intersections = elements.map(target => ({\n target,\n isIntersecting: false,\n ratio: null\n }));\n this.intersectionObserver = new IntersectionObserver(entries => {\n var intersections = this.intersections.slice(0);\n entries.forEach(entry => {\n var idx = elements.indexOf(entry.target);\n intersections.splice(idx, 1, {\n target: entry.target,\n isIntersecting: entry.isIntersecting,\n ratio: entry.intersectionRatio\n });\n });\n this.intersections = intersections;\n onChange(this.intersections);\n }, _objectSpread2({}, defaultConfig, {}, config));\n elements.forEach(elm => this.intersectionObserver.observe(elm));\n }\n\n disconnect() {\n // Unregister trigger elements\n this.elements.forEach(elm => this.intersectionObserver.unobserve(elm)); // Disconnect intersection observer\n\n this.intersectionObserver.disconnect();\n }\n\n}\n\nfunction toggleAttribute(el, name, boolValue) {\n if (!el) {\n return;\n }\n\n var nextValue;\n\n if (typeof boolValue !== 'undefined') {\n nextValue = !!boolValue;\n } else {\n nextValue = el.hasAttribute(name);\n }\n\n if (nextValue) {\n el.setAttribute(name, '');\n } else {\n el.removeAttribute(name);\n }\n}\nfunction setAttribute(el, name, nextValue) {\n if (!el) {\n return;\n }\n\n if (nextValue) {\n el.setAttribute(name, nextValue);\n } else {\n el.removeAttribute(name);\n }\n}\nvar closest = (() => {\n var proto = typeof window === 'undefined' ? {} : window.Element.prototype;\n var match = proto.matches || proto.msMatchesSelector || proto.webkitMatchesSelector;\n\n if (proto.closest) {\n return (el, css) => el.closest(css);\n } else {\n return (el, css) => {\n for (; el; el = el.parentElement) {\n if (match.call(el, css)) return el;\n }\n\n return null;\n };\n }\n})();\nfunction addStyle(nodeName, css) {\n var key = \"style-\".concat(nodeName.toLowerCase());\n var min = css.replace(/\\/\\*[^!][^*]*\\*\\//g, '').replace(/\\s*(^|[:;,{}]|$)\\s*/g, '$1');\n document.getElementById(key) || document.head.insertAdjacentHTML('afterbegin', \"\"));\n}\nfunction toArray(nodeList) {\n return [].slice.call(nodeList);\n}\nfunction dispatchEvent(element, name) {\n var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var ignore = \"prevent_recursive_dispatch_maximum_callstack\".concat(name);\n var event;\n if (element[ignore]) return true; // We are already processing this event, so skip sending a new one\n else element[ignore] = true; // Add name to dispatching ignore\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(name, true, true, detail);\n } // IE reports incorrect event.defaultPrevented\n // but correct return value on element.dispatchEvent\n\n\n var result = element.dispatchEvent(event);\n element[ignore] = null; // Remove name from dispatching ignore\n\n return result; // Follow W3C standard for return value\n}\n\nfunction easeOutQuint(t) {\n return 1 + --t * t * t * t * t;\n}\n\nclass VerticalScroll {\n constructor(container) {\n this.container = void 0;\n this.container = container;\n }\n\n to(top) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var from = this.container.scrollTop;\n var distance = top - from;\n var startTime = null;\n\n var loop = currentTime => {\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n this.container.scrollTop = from + distance * easeOutQuint(timeElapsed / duration);\n\n if (timeElapsed < duration) {\n window.requestAnimationFrame(loop);\n } else {\n this.container.scrollTop = top;\n }\n };\n\n window.requestAnimationFrame(loop);\n }\n\n}\nclass HorizontalScroll {\n constructor(container) {\n this.container = void 0;\n this.container = container;\n }\n\n to(left) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var callback = arguments.length > 2 ? arguments[2] : undefined;\n var from = this.container.scrollLeft;\n var distance = left - from;\n var startTime = null;\n\n var loop = currentTime => {\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n this.container.scrollLeft = from + distance * easeOutQuint(timeElapsed / duration);\n\n if (timeElapsed < duration) {\n window.requestAnimationFrame(loop);\n } else {\n this.container.scrollLeft = left;\n callback && callback();\n }\n };\n\n window.requestAnimationFrame(loop);\n }\n\n}\n\nfunction testReducedMotion() {\n if (typeof window !== 'undefined') {\n return !!window.matchMedia && window.matchMedia('(prefers-reduced-motion)').matches;\n }\n\n return false;\n}\n\nvar name = process.env.npm_package_name;\nvar version = process.env.npm_package_version;\n\nfunction createGqlApi() {\n return {\n get(query, url) {\n return _asyncToGenerator(function* () {\n var {\n data,\n errors\n } = yield axios({\n method: 'POST',\n url,\n data: {\n query,\n variables: null\n },\n timeout: 7500,\n headers: {\n 'User-Agent': \"\".concat(name, \"/\").concat(version, \" (node/isomorphic-fetch)\"),\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n }\n }).then(res => res.data);\n\n if (errors && errors.length) {\n throw Error(errors);\n }\n\n return transformResponse(data);\n })();\n }\n\n };\n}\n\nvar gqlApi = createGqlApi();\n\nfunction pngFragment(options) {\n var aspects = options.aspectRatios.map(ratio => {\n var sizes = ratio.sizes.map(s => \"w\".concat(s, \": url(quality: \").concat(ratio.quality || '0.7', \", width: \").concat(s, \", format: png)\")).join('\\n');\n return \"\".concat(ratio.id, \": crop(aspect: \").concat(ratio.id, \") {\\n \").concat(ratio.id === 'original' ? 'aspect' : '', \"\\n \").concat(sizes, \"\\n }\");\n }).join('\\n');\n return \"\\nfragment imageCropsPng on Image {\\n title,\\n creators,\\n credit,\\n category,\\n \".concat(aspects, \"\\n}\\n\");\n}\n\nfunction jpgFragment(options) {\n var aspects = options.aspectRatios.map(ratio => {\n var sizes = ratio.sizes.map(size => \"w\".concat(size, \": url(quality: \").concat(ratio.quality || '0.7', \", width: \").concat(size, \")\")).join('\\n');\n return \"\".concat(ratio.id, \": crop(aspect: \").concat(ratio.id, \") {\\n \").concat(ratio.id === 'original' ? 'aspect' : '', \"\\n \").concat(sizes, \"\\n }\");\n }).join('\\n');\n return \"\\nfragment imageCropsJpg on Image {\\n title,\\n creators,\\n credit,\\n category,\\n \".concat(aspects, \"\\n}\\n\");\n}\n/**\n * Transforms a series of image sections to a Polopoly GraphQL API query\n */\n\n\nfunction createQuery(imageObjects, options) {\n var images = getImageIds(imageObjects);\n return \"\\n \".concat(createBase(images, options), \"\\n query {\\n \").concat(images.map(getImage).join('\\n'), \"\\n }\");\n}\nvar IMAGE_PROPS = ['vertical', 'horizontal'];\n\nfunction getImageIds(imageObjects) {\n if (imageObjects.some(image => !image)) {\n throw new Error('Undefined image object');\n }\n\n return imageObjects.reduce((result, image) => {\n var format = image.advanced && image.advanced.format || 'jpg';\n /* Image can be stored directly on image object */\n\n if (image.id && !result.find(el => el.id === image.id)) {\n result.push({\n id: image.id,\n format\n });\n }\n /* or on a predefined set of image properties */\n\n\n IMAGE_PROPS.forEach(prop => {\n var value = image[prop];\n\n if (value && value.id && !result.find(el => el.id === value.id)) {\n result.push({\n id: value.id,\n format\n });\n }\n });\n return result;\n }, []);\n}\n\nfunction getImage(_ref) {\n var {\n id,\n format = 'jpg'\n } = _ref;\n\n if (format === 'png') {\n return \"\".concat(transformId(id), \": model(id: \\\"\").concat(id, \"\\\") {\\n ...imageCropsPng\\n }\");\n }\n\n return \"\".concat(transformId(id), \": model(id: \\\"\").concat(id, \"\\\") {\\n ...imageCropsJpg\\n }\");\n}\n\nfunction createBase(imageObjects, options) {\n var containsJpg = imageObjects.filter(el => el.format === 'jpg').length > 0;\n var containsPng = imageObjects.filter(el => el.format === 'png').length > 0;\n return \"\\n \".concat(containsJpg ? jpgFragment(options) : '', \"\\n \").concat(containsPng ? pngFragment(options) : '', \"\\n \");\n}\n/**\n * Transforns a polopoly id to something that can be used as a key in a GraphQL query\n * Example: '1.14252981' -> 'id_1_14252981'\n */\n\n\nfunction transformId(id) {\n return \"id\".concat(id.replace(/\\./g, '__'));\n}\n/**\n * Transforns an already transformed polopoly id back to a regular polopoly id\n * Example: ''id_1_14252981' -> 1.14252981'\n */\n\n\nfunction transformBackId(id) {\n return id.replace('id', '').replace(/__/g, '.');\n}\n\nfunction transformResponse(response) {\n return Object.keys(response).reduce((res, key) => {\n var transformedKey = transformBackId(key);\n res[transformedKey] = response[key];\n return res;\n }, {});\n}\n\nfunction fromEntries(items) {\n return [...items].reduce((obj, _ref) => {\n var [key, val] = _ref;\n obj[key] = val;\n return obj;\n }, {});\n}\n\nfunction traverse(obj, filter) {\n if (filter(obj)) {\n /* Object is a match, returning */\n return [obj];\n } else {\n return Object.entries(obj).filter((_ref2) => {\n var [_, value] = _ref2;\n return !!value;\n }).map((_ref3) => {\n var [_, value] = _ref3;\n\n if (Array.isArray(value)) {\n return value.map(item => traverse(item, filter)).reduce((acc, val) => acc.concat(val), []);\n } else if (typeof value === 'object') {\n return traverse(value, filter);\n } else {\n return null;\n }\n }).reduce((acc, val) => acc.concat(val), []).filter(Boolean);\n }\n}\n/*\n * Traverses the props tree and fetches data for all image objects\n * */\n\n\nfunction prefetchImageData(_x, _x2) {\n return _prefetchImageData.apply(this, arguments);\n}\n\nfunction _prefetchImageData() {\n _prefetchImageData = _asyncToGenerator(function* (props, options) {\n var imageObjects = traverse(props, value => value.type === 'image');\n\n if (imageObjects.length > 0) {\n if (!options.gqlApiUrl) {\n throw new Error(\"Missing option 'gqlApiUrl'\");\n }\n\n var query = createQuery(imageObjects, options);\n return gqlApi.get(query, options.gqlApiUrl);\n }\n });\n return _prefetchImageData.apply(this, arguments);\n}\n\nvar imageProps = ['vertical', 'horizontal'];\nfunction mergeImageProps(props, imageUrls) {\n if ('id' in props) {\n return _objectSpread2({}, props, {}, imageUrls[props.id]);\n } else {\n return fromEntries(Object.entries(props).map((_ref4) => {\n var [key, value] = _ref4;\n\n if (imageProps.indexOf(key) !== -1) {\n return [key, mergeImageProps(value, imageUrls)];\n } else {\n return [key, value];\n }\n }));\n }\n}\n\nfunction mergeVideoloopProps(_x) {\n return _mergeVideoloopProps.apply(this, arguments);\n}\n\nfunction _mergeVideoloopProps() {\n _mergeVideoloopProps = _asyncToGenerator(function* (props) {\n var objects = yield Promise.all(Object.keys(props).map(\n /*#__PURE__*/\n function () {\n var _ref2 = _asyncToGenerator(function* (key) {\n if (key === 'horizontal' || key === 'vertical') {\n return _objectSpread2({\n id: key\n }, props[key], {\n videos: yield getVideoSrc(props[key])\n });\n }\n });\n\n return function (_x4) {\n return _ref2.apply(this, arguments);\n };\n }()));\n return _objectSpread2({}, props, {}, objects.filter(Boolean).reduce((accumulator, current) => {\n accumulator[current.id] = current;\n delete accumulator[current.id].id;\n return accumulator;\n }, {}));\n });\n return _mergeVideoloopProps.apply(this, arguments);\n}\n\nfunction getVideoSrc(_x2) {\n return _getVideoSrc.apply(this, arguments);\n}\n\nfunction _getVideoSrc() {\n _getVideoSrc = _asyncToGenerator(function* (videoObj) {\n var hasVideoUrl = videoObj && videoObj !== 'null';\n\n if (hasVideoUrl) {\n var videos = yield getVideos(videoObj.url);\n var basePath = extractBasePathFromUrl(videoObj.url);\n return videos.map(video => ({\n type: getTypeFromHeight(video.height),\n poster: \"\".concat(basePath, \"/\").concat(video.stillFileName),\n aspectRatio: video.displayAspectRatio,\n height: video.height,\n sources: {\n mp4: \"\".concat(basePath, \"/\").concat(video.videoFileName)\n }\n }));\n } else {\n return null;\n }\n });\n return _getVideoSrc.apply(this, arguments);\n}\n\nfunction extractBasePathFromUrl(url) {\n var decodedUrl = url.replace(/%2F/g, '/');\n return decodedUrl.substr(0, decodedUrl.lastIndexOf('/'));\n}\n\nfunction getVideos(_x3) {\n return _getVideos.apply(this, arguments);\n}\n\nfunction _getVideos() {\n _getVideos = _asyncToGenerator(function* (url) {\n var videoPayload = yield getVideoPayload(url);\n return videoPayload.movingStills;\n });\n return _getVideos.apply(this, arguments);\n}\n\nfunction getVideoPayload(url) {\n return axios.get(url, {\n timeout: 2000\n }).then((_ref) => {\n var {\n data\n } = _ref;\n return data;\n });\n}\n\nfunction getTypeFromHeight(height) {\n switch (height) {\n case 360:\n return 'small';\n\n case 720:\n return 'medium';\n\n case 1080:\n return 'large';\n\n default:\n return 'large';\n }\n}\n\nfunction mergeMapProps(_x) {\n return _mergeMapProps.apply(this, arguments);\n}\n\nfunction _mergeMapProps() {\n _mergeMapProps = _asyncToGenerator(function* (props) {\n var {\n id\n } = props,\n rest = _objectWithoutProperties(props, [\"id\"]);\n\n return _objectSpread2({\n id\n }, rest, {\n definition: yield getMapDefinition(id)\n });\n });\n return _mergeMapProps.apply(this, arguments);\n}\n\nfunction getMapDefinition(_x2) {\n return _getMapDefinition.apply(this, arguments);\n}\n\nfunction _getMapDefinition() {\n _getMapDefinition = _asyncToGenerator(function* (id) {\n if (!id) {\n return;\n }\n\n return axios.get(\"https://dh.nrk.no/atlas/v1/definition?id=\".concat(id), {\n timeout: 2000\n }).then((_ref) => {\n var {\n data\n } = _ref;\n return data;\n });\n });\n return _getMapDefinition.apply(this, arguments);\n}\n\nfunction fromEntries$1(items) {\n return [...items].reduce((obj, _ref) => {\n var [key, val] = _ref;\n obj[key] = val;\n return obj;\n }, {});\n}\n\nvar defaultOptions = {\n image: {\n gqlApiUrl: 'https://www.nrk.no/api/graphql',\n aspectRatios: [{\n id: 'F11',\n sizes: ['450', '768', '1280']\n }, {\n id: 'F34',\n sizes: ['450', '768', '1280']\n }, {\n id: 'F169',\n sizes: ['900', '1280', '2400']\n }, {\n id: 'original',\n sizes: ['450', '768', '1280', '2400']\n }]\n }\n};\nfunction mergeMediaProps(_x, _x2, _x3) {\n return _mergeMediaProps.apply(this, arguments);\n}\n\nfunction _mergeMediaProps() {\n _mergeMediaProps = _asyncToGenerator(function* (props, options, imageData) {\n var mergedOptions = {\n image: _objectSpread2({}, defaultOptions.image, {}, options === null || options === void 0 ? void 0 : options.image)\n };\n var imageDataStored = imageData || (yield prefetchImageData(props, mergedOptions.image));\n\n if (props.type === 'videoloop') {\n return mergeVideoloopProps(props);\n } else if (props.type === 'image') {\n return mergeImageProps(props, imageDataStored);\n } else if (props.type === 'map') {\n return mergeMapProps(props, imageDataStored);\n } else {\n var mappedEntries = yield Promise.all(Object.entries(props).map(\n /*#__PURE__*/\n function () {\n var _ref3 = _asyncToGenerator(function* (_ref2) {\n var [key, value] = _ref2;\n\n if (Array.isArray(value)) {\n var mergedArray = yield Promise.all(value.map(item => mergeMediaProps(item, options, imageDataStored)));\n return [key, mergedArray];\n } else if (typeof value === 'object' && value !== null) {\n return [key, yield mergeMediaProps(value, options, imageDataStored)];\n } else {\n return [key, value];\n }\n });\n\n return function (_x4) {\n return _ref3.apply(this, arguments);\n };\n }()));\n return fromEntries$1(mappedEntries);\n }\n });\n return _mergeMediaProps.apply(this, arguments);\n}\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\nfunction withinRange(current) {\n var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var stop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : MAX_SAFE_INTEGER;\n return current >= start && current <= stop;\n}\n\nexport { ElementIntersectionObserver, HorizontalScroll, VerticalScroll, addStyle, closest, dispatchEvent, mergeImageProps, mergeMapProps, mergeMediaProps, mergeVideoloopProps, setAttribute, testReducedMotion, toArray, toggleAttribute, withinRange };\n//# sourceMappingURL=dh-basis-common.esm.js.map\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/@nrk/dh-basis-common/dh-basis-common.esm.js","// removed by extract-text-webpack-plugin\nmodule.exports = {\"standaloneVideo\":\"dh-video-standaloneVideo\",\"small\":\"dh-video-small\",\"medium\":\"dh-video-medium\",\"large\":\"dh-video-large\",\"horizontalVideo\":\"dh-video-horizontalVideo\",\"verticalVideo\":\"dh-video-verticalVideo\",\"videoLoop\":\"dh-video-videoLoop\",\"videoLoop__fallbackImage\":\"dh-video-videoLoop__fallbackImage\",\"wrapper\":\"dh-video-wrapper\",\"byline\":\"dh-video-byline\",\"videoLoop--played\":\"dh-video-videoLoop--played\"};\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/article/components/VideoLoop.css\n// module id = 36\n// module chunks = 0","(function(){\n/*\n\n Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n Code distributed by Google as part of the polymer project is also\n subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';var n=window.Document.prototype.createElement,p=window.Document.prototype.createElementNS,aa=window.Document.prototype.importNode,ba=window.Document.prototype.prepend,ca=window.Document.prototype.append,da=window.DocumentFragment.prototype.prepend,ea=window.DocumentFragment.prototype.append,q=window.Node.prototype.cloneNode,r=window.Node.prototype.appendChild,t=window.Node.prototype.insertBefore,u=window.Node.prototype.removeChild,v=window.Node.prototype.replaceChild,x=Object.getOwnPropertyDescriptor(window.Node.prototype,\n\"textContent\"),y=window.Element.prototype.attachShadow,z=Object.getOwnPropertyDescriptor(window.Element.prototype,\"innerHTML\"),A=window.Element.prototype.getAttribute,B=window.Element.prototype.setAttribute,C=window.Element.prototype.removeAttribute,D=window.Element.prototype.getAttributeNS,E=window.Element.prototype.setAttributeNS,F=window.Element.prototype.removeAttributeNS,G=window.Element.prototype.insertAdjacentElement,fa=window.Element.prototype.insertAdjacentHTML,ha=window.Element.prototype.prepend,\nia=window.Element.prototype.append,ja=window.Element.prototype.before,ka=window.Element.prototype.after,la=window.Element.prototype.replaceWith,ma=window.Element.prototype.remove,na=window.HTMLElement,H=Object.getOwnPropertyDescriptor(window.HTMLElement.prototype,\"innerHTML\"),oa=window.HTMLElement.prototype.insertAdjacentElement,pa=window.HTMLElement.prototype.insertAdjacentHTML;var qa=new Set;\"annotation-xml color-profile font-face font-face-src font-face-uri font-face-format font-face-name missing-glyph\".split(\" \").forEach(function(a){return qa.add(a)});function ra(a){var b=qa.has(a);a=/^[a-z][.0-9_a-z]*-[\\-.0-9_a-z]*$/.test(a);return!b&&a}var sa=document.contains?document.contains.bind(document):document.documentElement.contains.bind(document.documentElement);\nfunction I(a){var b=a.isConnected;if(void 0!==b)return b;if(sa(a))return!0;for(;a&&!(a.__CE_isImportDocument||a instanceof Document);)a=a.parentNode||(window.ShadowRoot&&a instanceof ShadowRoot?a.host:void 0);return!(!a||!(a.__CE_isImportDocument||a instanceof Document))}function J(a){var b=a.children;if(b)return Array.prototype.slice.call(b);b=[];for(a=a.firstChild;a;a=a.nextSibling)a.nodeType===Node.ELEMENT_NODE&&b.push(a);return b}\nfunction K(a,b){for(;b&&b!==a&&!b.nextSibling;)b=b.parentNode;return b&&b!==a?b.nextSibling:null}\nfunction L(a,b,c){for(var f=a;f;){if(f.nodeType===Node.ELEMENT_NODE){var d=f;b(d);var e=d.localName;if(\"link\"===e&&\"import\"===d.getAttribute(\"rel\")){f=d.import;void 0===c&&(c=new Set);if(f instanceof Node&&!c.has(f))for(c.add(f),f=f.firstChild;f;f=f.nextSibling)L(f,b,c);f=K(a,d);continue}else if(\"template\"===e){f=K(a,d);continue}if(d=d.__CE_shadowRoot)for(d=d.firstChild;d;d=d.nextSibling)L(d,b,c)}f=f.firstChild?f.firstChild:K(a,f)}}function M(a,b,c){a[b]=c};function ta(a){var b=document;this.c=a;this.a=b;this.b=void 0;N(this.c,this.a);\"loading\"===this.a.readyState&&(this.b=new MutationObserver(this.f.bind(this)),this.b.observe(this.a,{childList:!0,subtree:!0}))}function ua(a){a.b&&a.b.disconnect()}ta.prototype.f=function(a){var b=this.a.readyState;\"interactive\"!==b&&\"complete\"!==b||ua(this);for(b=0;b 0;\n }\n });\n }\n return;\n}\n\n/**\n * Returns the embedding frame element, if any.\n * @param {!Document} doc\n * @return {!Element}\n */\nfunction getFrameElement(doc) {\n try {\n return doc.defaultView && doc.defaultView.frameElement || null;\n } catch (e) {\n // Ignore the error.\n return null;\n }\n}\n\n/**\n * A local reference to the root document.\n */\nvar document = (function(startDoc) {\n var doc = startDoc;\n var frame = getFrameElement(doc);\n while (frame) {\n doc = frame.ownerDocument;\n frame = getFrameElement(doc);\n }\n return doc;\n})(window.document);\n\n/**\n * An IntersectionObserver registry. This registry exists to hold a strong\n * reference to IntersectionObserver instances currently observing a target\n * element. Without this registry, instances without another reference may be\n * garbage collected.\n */\nvar registry = [];\n\n/**\n * The signal updater for cross-origin intersection. When not null, it means\n * that the polyfill is configured to work in a cross-origin mode.\n * @type {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nvar crossOriginUpdater = null;\n\n/**\n * The current cross-origin intersection. Only used in the cross-origin mode.\n * @type {DOMRect|ClientRect}\n */\nvar crossOriginRect = null;\n\n\n/**\n * Creates the global IntersectionObserverEntry constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-entry\n * @param {Object} entry A dictionary of instance properties.\n * @constructor\n */\nfunction IntersectionObserverEntry(entry) {\n this.time = entry.time;\n this.target = entry.target;\n this.rootBounds = ensureDOMRect(entry.rootBounds);\n this.boundingClientRect = ensureDOMRect(entry.boundingClientRect);\n this.intersectionRect = ensureDOMRect(entry.intersectionRect || getEmptyRect());\n this.isIntersecting = !!entry.intersectionRect;\n\n // Calculates the intersection ratio.\n var targetRect = this.boundingClientRect;\n var targetArea = targetRect.width * targetRect.height;\n var intersectionRect = this.intersectionRect;\n var intersectionArea = intersectionRect.width * intersectionRect.height;\n\n // Sets intersection ratio.\n if (targetArea) {\n // Round the intersection ratio to avoid floating point math issues:\n // https://github.com/w3c/IntersectionObserver/issues/324\n this.intersectionRatio = Number((intersectionArea / targetArea).toFixed(4));\n } else {\n // If area is zero and is intersecting, sets to 1, otherwise to 0\n this.intersectionRatio = this.isIntersecting ? 1 : 0;\n }\n}\n\n\n/**\n * Creates the global IntersectionObserver constructor.\n * https://w3c.github.io/IntersectionObserver/#intersection-observer-interface\n * @param {Function} callback The function to be invoked after intersection\n * changes have queued. The function is not invoked if the queue has\n * been emptied by calling the `takeRecords` method.\n * @param {Object=} opt_options Optional configuration options.\n * @constructor\n */\nfunction IntersectionObserver(callback, opt_options) {\n\n var options = opt_options || {};\n\n if (typeof callback != 'function') {\n throw new Error('callback must be a function');\n }\n\n if (options.root && options.root.nodeType != 1) {\n throw new Error('root must be an Element');\n }\n\n // Binds and throttles `this._checkForIntersections`.\n this._checkForIntersections = throttle(\n this._checkForIntersections.bind(this), this.THROTTLE_TIMEOUT);\n\n // Private properties.\n this._callback = callback;\n this._observationTargets = [];\n this._queuedEntries = [];\n this._rootMarginValues = this._parseRootMargin(options.rootMargin);\n\n // Public properties.\n this.thresholds = this._initThresholds(options.threshold);\n this.root = options.root || null;\n this.rootMargin = this._rootMarginValues.map(function(margin) {\n return margin.value + margin.unit;\n }).join(' ');\n\n /** @private @const {!Array} */\n this._monitoringDocuments = [];\n /** @private @const {!Array} */\n this._monitoringUnsubscribes = [];\n}\n\n\n/**\n * The minimum interval within which the document will be checked for\n * intersection changes.\n */\nIntersectionObserver.prototype.THROTTLE_TIMEOUT = 100;\n\n\n/**\n * The frequency in which the polyfill polls for intersection changes.\n * this can be updated on a per instance basis and must be set prior to\n * calling `observe` on the first target.\n */\nIntersectionObserver.prototype.POLL_INTERVAL = null;\n\n/**\n * Use a mutation observer on the root element\n * to detect intersection changes.\n */\nIntersectionObserver.prototype.USE_MUTATION_OBSERVER = true;\n\n\n/**\n * Sets up the polyfill in the cross-origin mode. The result is the\n * updater function that accepts two arguments: `boundingClientRect` and\n * `intersectionRect` - just as these fields would be available to the\n * parent via `IntersectionObserverEntry`. This function should be called\n * each time the iframe receives intersection information from the parent\n * window, e.g. via messaging.\n * @return {function(DOMRect|ClientRect, DOMRect|ClientRect)}\n */\nIntersectionObserver._setupCrossOriginUpdater = function() {\n if (!crossOriginUpdater) {\n /**\n * @param {DOMRect|ClientRect} boundingClientRect\n * @param {DOMRect|ClientRect} intersectionRect\n */\n crossOriginUpdater = function(boundingClientRect, intersectionRect) {\n if (!boundingClientRect || !intersectionRect) {\n crossOriginRect = getEmptyRect();\n } else {\n crossOriginRect = convertFromParentRect(boundingClientRect, intersectionRect);\n }\n registry.forEach(function(observer) {\n observer._checkForIntersections();\n });\n };\n }\n return crossOriginUpdater;\n};\n\n\n/**\n * Resets the cross-origin mode.\n */\nIntersectionObserver._resetCrossOriginUpdater = function() {\n crossOriginUpdater = null;\n crossOriginRect = null;\n};\n\n\n/**\n * Starts observing a target element for intersection changes based on\n * the thresholds values.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.observe = function(target) {\n var isTargetAlreadyObserved = this._observationTargets.some(function(item) {\n return item.element == target;\n });\n\n if (isTargetAlreadyObserved) {\n return;\n }\n\n if (!(target && target.nodeType == 1)) {\n throw new Error('target must be an Element');\n }\n\n this._registerInstance();\n this._observationTargets.push({element: target, entry: null});\n this._monitorIntersections(target.ownerDocument);\n this._checkForIntersections();\n};\n\n\n/**\n * Stops observing a target element for intersection changes.\n * @param {Element} target The DOM element to observe.\n */\nIntersectionObserver.prototype.unobserve = function(target) {\n this._observationTargets =\n this._observationTargets.filter(function(item) {\n return item.element != target;\n });\n this._unmonitorIntersections(target.ownerDocument);\n if (this._observationTargets.length == 0) {\n this._unregisterInstance();\n }\n};\n\n\n/**\n * Stops observing all target elements for intersection changes.\n */\nIntersectionObserver.prototype.disconnect = function() {\n this._observationTargets = [];\n this._unmonitorAllIntersections();\n this._unregisterInstance();\n};\n\n\n/**\n * Returns any queue entries that have not yet been reported to the\n * callback and clears the queue. This can be used in conjunction with the\n * callback to obtain the absolute most up-to-date intersection information.\n * @return {Array} The currently queued entries.\n */\nIntersectionObserver.prototype.takeRecords = function() {\n var records = this._queuedEntries.slice();\n this._queuedEntries = [];\n return records;\n};\n\n\n/**\n * Accepts the threshold value from the user configuration object and\n * returns a sorted array of unique threshold values. If a value is not\n * between 0 and 1 and error is thrown.\n * @private\n * @param {Array|number=} opt_threshold An optional threshold value or\n * a list of threshold values, defaulting to [0].\n * @return {Array} A sorted list of unique and valid threshold values.\n */\nIntersectionObserver.prototype._initThresholds = function(opt_threshold) {\n var threshold = opt_threshold || [0];\n if (!Array.isArray(threshold)) threshold = [threshold];\n\n return threshold.sort().filter(function(t, i, a) {\n if (typeof t != 'number' || isNaN(t) || t < 0 || t > 1) {\n throw new Error('threshold must be a number between 0 and 1 inclusively');\n }\n return t !== a[i - 1];\n });\n};\n\n\n/**\n * Accepts the rootMargin value from the user configuration object\n * and returns an array of the four margin values as an object containing\n * the value and unit properties. If any of the values are not properly\n * formatted or use a unit other than px or %, and error is thrown.\n * @private\n * @param {string=} opt_rootMargin An optional rootMargin value,\n * defaulting to '0px'.\n * @return {Array} An array of margin objects with the keys\n * value and unit.\n */\nIntersectionObserver.prototype._parseRootMargin = function(opt_rootMargin) {\n var marginString = opt_rootMargin || '0px';\n var margins = marginString.split(/\\s+/).map(function(margin) {\n var parts = /^(-?\\d*\\.?\\d+)(px|%)$/.exec(margin);\n if (!parts) {\n throw new Error('rootMargin must be specified in pixels or percent');\n }\n return {value: parseFloat(parts[1]), unit: parts[2]};\n });\n\n // Handles shorthand.\n margins[1] = margins[1] || margins[0];\n margins[2] = margins[2] || margins[0];\n margins[3] = margins[3] || margins[1];\n\n return margins;\n};\n\n\n/**\n * Starts polling for intersection changes if the polling is not already\n * happening, and if the page's visibility state is visible.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._monitorIntersections = function(doc) {\n var win = doc.defaultView;\n if (!win) {\n // Already destroyed.\n return;\n }\n if (this._monitoringDocuments.indexOf(doc) != -1) {\n // Already monitoring.\n return;\n }\n\n // Private state for monitoring.\n var callback = this._checkForIntersections;\n var monitoringInterval = null;\n var domObserver = null;\n\n // If a poll interval is set, use polling instead of listening to\n // resize and scroll events or DOM mutations.\n if (this.POLL_INTERVAL) {\n monitoringInterval = win.setInterval(callback, this.POLL_INTERVAL);\n } else {\n addEvent(win, 'resize', callback, true);\n addEvent(doc, 'scroll', callback, true);\n if (this.USE_MUTATION_OBSERVER && 'MutationObserver' in win) {\n domObserver = new win.MutationObserver(callback);\n domObserver.observe(doc, {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true\n });\n }\n }\n\n this._monitoringDocuments.push(doc);\n this._monitoringUnsubscribes.push(function() {\n // Get the window object again. When a friendly iframe is destroyed, it\n // will be null.\n var win = doc.defaultView;\n\n if (win) {\n if (monitoringInterval) {\n win.clearInterval(monitoringInterval);\n }\n removeEvent(win, 'resize', callback, true);\n }\n\n removeEvent(doc, 'scroll', callback, true);\n if (domObserver) {\n domObserver.disconnect();\n }\n });\n\n // Also monitor the parent.\n if (doc != (this.root && this.root.ownerDocument || document)) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._monitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorIntersections = function(doc) {\n var index = this._monitoringDocuments.indexOf(doc);\n if (index == -1) {\n return;\n }\n\n var rootDoc = (this.root && this.root.ownerDocument || document);\n\n // Check if any dependent targets are still remaining.\n var hasDependentTargets =\n this._observationTargets.some(function(item) {\n var itemDoc = item.element.ownerDocument;\n // Target is in this context.\n if (itemDoc == doc) {\n return true;\n }\n // Target is nested in this context.\n while (itemDoc && itemDoc != rootDoc) {\n var frame = getFrameElement(itemDoc);\n itemDoc = frame && frame.ownerDocument;\n if (itemDoc == doc) {\n return true;\n }\n }\n return false;\n });\n if (hasDependentTargets) {\n return;\n }\n\n // Unsubscribe.\n var unsubscribe = this._monitoringUnsubscribes[index];\n this._monitoringDocuments.splice(index, 1);\n this._monitoringUnsubscribes.splice(index, 1);\n unsubscribe();\n\n // Also unmonitor the parent.\n if (doc != rootDoc) {\n var frame = getFrameElement(doc);\n if (frame) {\n this._unmonitorIntersections(frame.ownerDocument);\n }\n }\n};\n\n\n/**\n * Stops polling for intersection changes.\n * @param {!Document} doc\n * @private\n */\nIntersectionObserver.prototype._unmonitorAllIntersections = function() {\n var unsubscribes = this._monitoringUnsubscribes.slice(0);\n this._monitoringDocuments.length = 0;\n this._monitoringUnsubscribes.length = 0;\n for (var i = 0; i < unsubscribes.length; i++) {\n unsubscribes[i]();\n }\n};\n\n\n/**\n * Scans each observation target for intersection changes and adds them\n * to the internal entries queue. If new entries are found, it\n * schedules the callback to be invoked.\n * @private\n */\nIntersectionObserver.prototype._checkForIntersections = function() {\n if (!this.root && crossOriginUpdater && !crossOriginRect) {\n // Cross origin monitoring, but no initial data available yet.\n return;\n }\n\n var rootIsInDom = this._rootIsInDom();\n var rootRect = rootIsInDom ? this._getRootRect() : getEmptyRect();\n\n this._observationTargets.forEach(function(item) {\n var target = item.element;\n var targetRect = getBoundingClientRect(target);\n var rootContainsTarget = this._rootContainsTarget(target);\n var oldEntry = item.entry;\n var intersectionRect = rootIsInDom && rootContainsTarget &&\n this._computeTargetAndRootIntersection(target, targetRect, rootRect);\n\n var newEntry = item.entry = new IntersectionObserverEntry({\n time: now(),\n target: target,\n boundingClientRect: targetRect,\n rootBounds: crossOriginUpdater && !this.root ? null : rootRect,\n intersectionRect: intersectionRect\n });\n\n if (!oldEntry) {\n this._queuedEntries.push(newEntry);\n } else if (rootIsInDom && rootContainsTarget) {\n // If the new entry intersection ratio has crossed any of the\n // thresholds, add a new entry.\n if (this._hasCrossedThreshold(oldEntry, newEntry)) {\n this._queuedEntries.push(newEntry);\n }\n } else {\n // If the root is not in the DOM or target is not contained within\n // root but the previous entry for this target had an intersection,\n // add a new record indicating removal.\n if (oldEntry && oldEntry.isIntersecting) {\n this._queuedEntries.push(newEntry);\n }\n }\n }, this);\n\n if (this._queuedEntries.length) {\n this._callback(this.takeRecords(), this);\n }\n};\n\n\n/**\n * Accepts a target and root rect computes the intersection between then\n * following the algorithm in the spec.\n * TODO(philipwalton): at this time clip-path is not considered.\n * https://w3c.github.io/IntersectionObserver/#calculate-intersection-rect-algo\n * @param {Element} target The target DOM element\n * @param {Object} targetRect The bounding rect of the target.\n * @param {Object} rootRect The bounding rect of the root after being\n * expanded by the rootMargin value.\n * @return {?Object} The final intersection rect object or undefined if no\n * intersection is found.\n * @private\n */\nIntersectionObserver.prototype._computeTargetAndRootIntersection =\n function(target, targetRect, rootRect) {\n // If the element isn't displayed, an intersection can't happen.\n if (window.getComputedStyle(target).display == 'none') return;\n\n var intersectionRect = targetRect;\n var parent = getParentNode(target);\n var atRoot = false;\n\n while (!atRoot && parent) {\n var parentRect = null;\n var parentComputedStyle = parent.nodeType == 1 ?\n window.getComputedStyle(parent) : {};\n\n // If the parent isn't displayed, an intersection can't happen.\n if (parentComputedStyle.display == 'none') return null;\n\n if (parent == this.root || parent.nodeType == /* DOCUMENT */ 9) {\n atRoot = true;\n if (parent == this.root || parent == document) {\n if (crossOriginUpdater && !this.root) {\n if (!crossOriginRect ||\n crossOriginRect.width == 0 && crossOriginRect.height == 0) {\n // A 0-size cross-origin intersection means no-intersection.\n parent = null;\n parentRect = null;\n intersectionRect = null;\n } else {\n parentRect = crossOriginRect;\n }\n } else {\n parentRect = rootRect;\n }\n } else {\n // Check if there's a frame that can be navigated to.\n var frame = getParentNode(parent);\n var frameRect = frame && getBoundingClientRect(frame);\n var frameIntersect =\n frame &&\n this._computeTargetAndRootIntersection(frame, frameRect, rootRect);\n if (frameRect && frameIntersect) {\n parent = frame;\n parentRect = convertFromParentRect(frameRect, frameIntersect);\n } else {\n parent = null;\n intersectionRect = null;\n }\n }\n } else {\n // If the element has a non-visible overflow, and it's not the \n // or element, update the intersection rect.\n // Note: and cannot be clipped to a rect that's not also\n // the document rect, so no need to compute a new intersection.\n var doc = parent.ownerDocument;\n if (parent != doc.body &&\n parent != doc.documentElement &&\n parentComputedStyle.overflow != 'visible') {\n parentRect = getBoundingClientRect(parent);\n }\n }\n\n // If either of the above conditionals set a new parentRect,\n // calculate new intersection data.\n if (parentRect) {\n intersectionRect = computeRectIntersection(parentRect, intersectionRect);\n }\n if (!intersectionRect) break;\n parent = parent && getParentNode(parent);\n }\n return intersectionRect;\n};\n\n\n/**\n * Returns the root rect after being expanded by the rootMargin value.\n * @return {ClientRect} The expanded root rect.\n * @private\n */\nIntersectionObserver.prototype._getRootRect = function() {\n var rootRect;\n if (this.root) {\n rootRect = getBoundingClientRect(this.root);\n } else {\n // Use / instead of window since scroll bars affect size.\n var html = document.documentElement;\n var body = document.body;\n rootRect = {\n top: 0,\n left: 0,\n right: html.clientWidth || body.clientWidth,\n width: html.clientWidth || body.clientWidth,\n bottom: html.clientHeight || body.clientHeight,\n height: html.clientHeight || body.clientHeight\n };\n }\n return this._expandRectByRootMargin(rootRect);\n};\n\n\n/**\n * Accepts a rect and expands it by the rootMargin value.\n * @param {DOMRect|ClientRect} rect The rect object to expand.\n * @return {ClientRect} The expanded rect.\n * @private\n */\nIntersectionObserver.prototype._expandRectByRootMargin = function(rect) {\n var margins = this._rootMarginValues.map(function(margin, i) {\n return margin.unit == 'px' ? margin.value :\n margin.value * (i % 2 ? rect.width : rect.height) / 100;\n });\n var newRect = {\n top: rect.top - margins[0],\n right: rect.right + margins[1],\n bottom: rect.bottom + margins[2],\n left: rect.left - margins[3]\n };\n newRect.width = newRect.right - newRect.left;\n newRect.height = newRect.bottom - newRect.top;\n\n return newRect;\n};\n\n\n/**\n * Accepts an old and new entry and returns true if at least one of the\n * threshold values has been crossed.\n * @param {?IntersectionObserverEntry} oldEntry The previous entry for a\n * particular target element or null if no previous entry exists.\n * @param {IntersectionObserverEntry} newEntry The current entry for a\n * particular target element.\n * @return {boolean} Returns true if a any threshold has been crossed.\n * @private\n */\nIntersectionObserver.prototype._hasCrossedThreshold =\n function(oldEntry, newEntry) {\n\n // To make comparing easier, an entry that has a ratio of 0\n // but does not actually intersect is given a value of -1\n var oldRatio = oldEntry && oldEntry.isIntersecting ?\n oldEntry.intersectionRatio || 0 : -1;\n var newRatio = newEntry.isIntersecting ?\n newEntry.intersectionRatio || 0 : -1;\n\n // Ignore unchanged ratios\n if (oldRatio === newRatio) return;\n\n for (var i = 0; i < this.thresholds.length; i++) {\n var threshold = this.thresholds[i];\n\n // Return true if an entry matches a threshold or if the new ratio\n // and the old ratio are on the opposite sides of a threshold.\n if (threshold == oldRatio || threshold == newRatio ||\n threshold < oldRatio !== threshold < newRatio) {\n return true;\n }\n }\n};\n\n\n/**\n * Returns whether or not the root element is an element and is in the DOM.\n * @return {boolean} True if the root element is an element and is in the DOM.\n * @private\n */\nIntersectionObserver.prototype._rootIsInDom = function() {\n return !this.root || containsDeep(document, this.root);\n};\n\n\n/**\n * Returns whether or not the target element is a child of root.\n * @param {Element} target The target element to check.\n * @return {boolean} True if the target element is a child of root.\n * @private\n */\nIntersectionObserver.prototype._rootContainsTarget = function(target) {\n return containsDeep(this.root || document, target) &&\n (!this.root || this.root.ownerDocument == target.ownerDocument);\n};\n\n\n/**\n * Adds the instance to the global IntersectionObserver registry if it isn't\n * already present.\n * @private\n */\nIntersectionObserver.prototype._registerInstance = function() {\n if (registry.indexOf(this) < 0) {\n registry.push(this);\n }\n};\n\n\n/**\n * Removes the instance from the global IntersectionObserver registry.\n * @private\n */\nIntersectionObserver.prototype._unregisterInstance = function() {\n var index = registry.indexOf(this);\n if (index != -1) registry.splice(index, 1);\n};\n\n\n/**\n * Returns the result of the performance.now() method or null in browsers\n * that don't support the API.\n * @return {number} The elapsed time since the page was requested.\n */\nfunction now() {\n return window.performance && performance.now && performance.now();\n}\n\n\n/**\n * Throttles a function and delays its execution, so it's only called at most\n * once within a given time period.\n * @param {Function} fn The function to throttle.\n * @param {number} timeout The amount of time that must pass before the\n * function can be called again.\n * @return {Function} The throttled function.\n */\nfunction throttle(fn, timeout) {\n var timer = null;\n return function () {\n if (!timer) {\n timer = setTimeout(function() {\n fn();\n timer = null;\n }, timeout);\n }\n };\n}\n\n\n/**\n * Adds an event handler to a DOM node ensuring cross-browser compatibility.\n * @param {Node} node The DOM node to add the event handler to.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to add.\n * @param {boolean} opt_useCapture Optionally adds the even to the capture\n * phase. Note: this only works in modern browsers.\n */\nfunction addEvent(node, event, fn, opt_useCapture) {\n if (typeof node.addEventListener == 'function') {\n node.addEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.attachEvent == 'function') {\n node.attachEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Removes a previously added event handler from a DOM node.\n * @param {Node} node The DOM node to remove the event handler from.\n * @param {string} event The event name.\n * @param {Function} fn The event handler to remove.\n * @param {boolean} opt_useCapture If the event handler was added with this\n * flag set to true, it should be set to true here in order to remove it.\n */\nfunction removeEvent(node, event, fn, opt_useCapture) {\n if (typeof node.removeEventListener == 'function') {\n node.removeEventListener(event, fn, opt_useCapture || false);\n }\n else if (typeof node.detatchEvent == 'function') {\n node.detatchEvent('on' + event, fn);\n }\n}\n\n\n/**\n * Returns the intersection between two rect objects.\n * @param {Object} rect1 The first rect.\n * @param {Object} rect2 The second rect.\n * @return {?Object|?ClientRect} The intersection rect or undefined if no\n * intersection is found.\n */\nfunction computeRectIntersection(rect1, rect2) {\n var top = Math.max(rect1.top, rect2.top);\n var bottom = Math.min(rect1.bottom, rect2.bottom);\n var left = Math.max(rect1.left, rect2.left);\n var right = Math.min(rect1.right, rect2.right);\n var width = right - left;\n var height = bottom - top;\n\n return (width >= 0 && height >= 0) && {\n top: top,\n bottom: bottom,\n left: left,\n right: right,\n width: width,\n height: height\n } || null;\n}\n\n\n/**\n * Shims the native getBoundingClientRect for compatibility with older IE.\n * @param {Element} el The element whose bounding rect to get.\n * @return {DOMRect|ClientRect} The (possibly shimmed) rect of the element.\n */\nfunction getBoundingClientRect(el) {\n var rect;\n\n try {\n rect = el.getBoundingClientRect();\n } catch (err) {\n // Ignore Windows 7 IE11 \"Unspecified error\"\n // https://github.com/w3c/IntersectionObserver/pull/205\n }\n\n if (!rect) return getEmptyRect();\n\n // Older IE\n if (!(rect.width && rect.height)) {\n rect = {\n top: rect.top,\n right: rect.right,\n bottom: rect.bottom,\n left: rect.left,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n }\n return rect;\n}\n\n\n/**\n * Returns an empty rect object. An empty rect is returned when an element\n * is not in the DOM.\n * @return {ClientRect} The empty rect.\n */\nfunction getEmptyRect() {\n return {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n width: 0,\n height: 0\n };\n}\n\n\n/**\n * Ensure that the result has all of the necessary fields of the DOMRect.\n * Specifically this ensures that `x` and `y` fields are set.\n *\n * @param {?DOMRect|?ClientRect} rect\n * @return {?DOMRect}\n */\nfunction ensureDOMRect(rect) {\n // A `DOMRect` object has `x` and `y` fields.\n if (!rect || 'x' in rect) {\n return rect;\n }\n // A IE's `ClientRect` type does not have `x` and `y`. The same is the case\n // for internally calculated Rect objects. For the purposes of\n // `IntersectionObserver`, it's sufficient to simply mirror `left` and `top`\n // for these fields.\n return {\n top: rect.top,\n y: rect.top,\n bottom: rect.bottom,\n left: rect.left,\n x: rect.left,\n right: rect.right,\n width: rect.width,\n height: rect.height\n };\n}\n\n\n/**\n * Inverts the intersection and bounding rect from the parent (frame) BCR to\n * the local BCR space.\n * @param {DOMRect|ClientRect} parentBoundingRect The parent's bound client rect.\n * @param {DOMRect|ClientRect} parentIntersectionRect The parent's own intersection rect.\n * @return {ClientRect} The local root bounding rect for the parent's children.\n */\nfunction convertFromParentRect(parentBoundingRect, parentIntersectionRect) {\n var top = parentIntersectionRect.top - parentBoundingRect.top;\n var left = parentIntersectionRect.left - parentBoundingRect.left;\n return {\n top: top,\n left: left,\n height: parentIntersectionRect.height,\n width: parentIntersectionRect.width,\n bottom: top + parentIntersectionRect.height,\n right: left + parentIntersectionRect.width\n };\n}\n\n\n/**\n * Checks to see if a parent element contains a child element (including inside\n * shadow DOM).\n * @param {Node} parent The parent element.\n * @param {Node} child The child element.\n * @return {boolean} True if the parent node contains the child node.\n */\nfunction containsDeep(parent, child) {\n var node = child;\n while (node) {\n if (node == parent) return true;\n\n node = getParentNode(node);\n }\n return false;\n}\n\n\n/**\n * Gets the parent node of an element or its host element if the parent node\n * is a shadow root.\n * @param {Node} node The node whose parent to get.\n * @return {Node|null} The parent node or null if no parent exists.\n */\nfunction getParentNode(node) {\n var parent = node.parentNode;\n\n if (node.nodeType == /* DOCUMENT */ 9 && node != document) {\n // If this node is a document node, look for the embedding frame.\n return getFrameElement(node);\n }\n\n if (parent && parent.nodeType == 11 && parent.host) {\n // If the parent is a shadow root, return the host element.\n return parent.host;\n }\n\n if (parent && parent.assignedSlot) {\n // If the parent is distributed in a , return the parent of a slot.\n return parent.assignedSlot.parentNode;\n }\n\n return parent;\n}\n\n\n// Exposes the constructors globally.\nwindow.IntersectionObserver = IntersectionObserver;\nwindow.IntersectionObserverEntry = IntersectionObserverEntry;\n\n}());\n\n\n\n// WEBPACK FOOTER //\n// ./node_modules/intersection-observer/intersection-observer.js"],"sourceRoot":""}