{"version":3,"file":"main-2e093f92c9cdc9e09a47.esm.js","mappings":"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","sources":["webpack://dh-animasjonsscroll/webpack/runtime/import chunk loading","webpack://dh-animasjonsscroll/./node_modules/cuid/index.js","webpack://dh-animasjonsscroll/./node_modules/cuid/lib/fingerprint.browser.js","webpack://dh-animasjonsscroll/./node_modules/cuid/lib/getRandomValue.browser.js","webpack://dh-animasjonsscroll/./node_modules/cuid/lib/pad.js","webpack://dh-animasjonsscroll/./node_modules/debounce/index.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-server-libs/get-element-tag.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-server-libs/src/get-element-tag.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-basis-common/dist/index.esm.js","webpack://dh-animasjonsscroll/webpack/bootstrap","webpack://dh-animasjonsscroll/webpack/runtime/amd options","webpack://dh-animasjonsscroll/webpack/runtime/compat get default export","webpack://dh-animasjonsscroll/webpack/runtime/define property getters","webpack://dh-animasjonsscroll/webpack/runtime/ensure chunk","webpack://dh-animasjonsscroll/webpack/runtime/get javascript chunk filename","webpack://dh-animasjonsscroll/webpack/runtime/get mini-css chunk filename","webpack://dh-animasjonsscroll/webpack/runtime/hasOwnProperty shorthand","webpack://dh-animasjonsscroll/webpack/runtime/make namespace object","webpack://dh-animasjonsscroll/webpack/runtime/publicPath","webpack://dh-animasjonsscroll/./node_modules/@nrk/nrkno-snowplow/node_modules/@nrk/snowplow-web/index.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/nrkno-snowplow/build-npm/nrkno-snowplow.package.mjs","webpack://dh-animasjonsscroll/./node_modules/@nrk/snowplow-web/index.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-snowplow/dist/index.mjs","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-snowplow/dist/shared/dh-snowplow.1ee613bf.mjs","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/assertClassBrand.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-basis-scrollanimasjon/dist/index.esm.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-basis-mixins/dist/index.esm.js","webpack://dh-animasjonsscroll/./src/components/animasjonsscroll.module.css?9e8b","webpack://dh-animasjonsscroll/./src/components/animasjonsscroll.js","webpack://dh-animasjonsscroll/./src/components/media/prosentvis-video.js","webpack://dh-animasjonsscroll/./src/components/media/prosentvis-bilde.ts","webpack://dh-animasjonsscroll/./src/components/media/prosentvis-overgang.module.css?94f2","webpack://dh-animasjonsscroll/./src/components/media/overgang/canvas-manager.js","webpack://dh-animasjonsscroll/./src/components/media/prosentvis-overgang.js","webpack://dh-animasjonsscroll/./src/client.js"],"sourcesContent":["// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t792: 0\n};\n\nvar installChunk = (data) => {\n\tvar {ids, modules, runtime} = data;\n\t// add \"modules\" to the modules object,\n\t// then flag all \"ids\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tfor(moduleId in modules) {\n\t\tif(__webpack_require__.o(modules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = modules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\tfor(;i < ids.length; i++) {\n\t\tchunkId = ids[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[ids[i]] = 0;\n\t}\n\n}\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// import() chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[1]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = import(\"./\" + __webpack_require__.u(chunkId)).then(installChunk, (e) => {\n\t\t\t\t\t\tif(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t});\n\t\t\t\t\tvar promise = Promise.race([promise, new Promise((resolve) => (installedChunkData = installedChunks[chunkId] = [resolve]))])\n\t\t\t\t\tpromises.push(installedChunkData[1] = promise);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no external install chunk\n\n// no on chunks loaded","/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n\nvar fingerprint = require('./lib/fingerprint.js');\nvar pad = require('./lib/pad.js');\nvar getRandomValue = require('./lib/getRandomValue.js');\n\nvar c = 0,\n blockSize = 4,\n base = 36,\n discreteValues = Math.pow(base, blockSize);\n\nfunction randomBlock () {\n return pad((getRandomValue() *\n discreteValues << 0)\n .toString(base), blockSize);\n}\n\nfunction safeCounter () {\n c = c < discreteValues ? c : 0;\n c++; // this is not subliminal\n return c - 1;\n}\n\nfunction cuid () {\n // Starting with a lowercase letter makes\n // it HTML element ID friendly.\n var letter = 'c', // hard-coded allows for sequential access\n\n // timestamp\n // warning: this exposes the exact date and time\n // that the uid was created.\n timestamp = (new Date().getTime()).toString(base),\n\n // Prevent same-machine collisions.\n counter = pad(safeCounter().toString(base), blockSize),\n\n // A few chars to generate distinct ids for different\n // clients (so different computers are far less\n // likely to generate the same id)\n print = fingerprint(),\n\n // Grab some more chars from Math.random()\n random = randomBlock() + randomBlock();\n\n return letter + timestamp + counter + print + random;\n}\n\ncuid.slug = function slug () {\n var date = new Date().getTime().toString(36),\n counter = safeCounter().toString(36).slice(-4),\n print = fingerprint().slice(0, 1) +\n fingerprint().slice(-1),\n random = randomBlock().slice(-2);\n\n return date.slice(-2) +\n counter + print + random;\n};\n\ncuid.isCuid = function isCuid (stringToCheck) {\n if (typeof stringToCheck !== 'string') return false;\n if (stringToCheck.startsWith('c')) return true;\n return false;\n};\n\ncuid.isSlug = function isSlug (stringToCheck) {\n if (typeof stringToCheck !== 'string') return false;\n var stringLength = stringToCheck.length;\n if (stringLength >= 7 && stringLength <= 10) return true;\n return false;\n};\n\ncuid.fingerprint = fingerprint;\n\nmodule.exports = cuid;\n","var pad = require('./pad.js');\n\nvar env = typeof window === 'object' ? window : self;\nvar globalCount = Object.keys(env).length;\nvar mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;\nvar clientId = pad((mimeTypesLength +\n navigator.userAgent.length).toString(36) +\n globalCount.toString(36), 4);\n\nmodule.exports = function fingerprint () {\n return clientId;\n};\n","\nvar getRandomValue;\n\nvar crypto = typeof window !== 'undefined' &&\n (window.crypto || window.msCrypto) ||\n typeof self !== 'undefined' &&\n self.crypto;\n\nif (crypto) {\n var lim = Math.pow(2, 32) - 1;\n getRandomValue = function () {\n return Math.abs(crypto.getRandomValues(new Uint32Array(1))[0] / lim);\n };\n} else {\n getRandomValue = Math.random;\n}\n\nmodule.exports = getRandomValue;\n","module.exports = function pad (num, size) {\n var s = '000000000' + num;\n return s.substr(s.length - size);\n};\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","module.exports = require('./src/get-element-tag')\n","/**\n * Creates a valid custom element name that is versioned (major)\n */\nfunction getElementTag(name, version) {\n const formattedVersion = version ? `-v${version.split('.')[0]}` : ''\n return name + formattedVersion\n}\n\nmodule.exports.getElementTag = getElementTag\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\n\n/* eslint-disable compat/compat */\nfunction getDefaultRoot() {\n /*\n Use document if supported\n IntersectionObserver will otherwise default to top level document,\n and IntersectionObserver will not work as expected in an iframe.\n https://github.com/w3c/IntersectionObserver/issues/372\n */\n\n /*\n Safari does not throw error on root: document, but does not trigger events as expected\n returning null for now until better feature detection is possible\n */\n return null;\n\n /*\n try {\n // eslint-disable-next-line no-new\n new IntersectionObserver(() => {}, { root: document })\n return document\n } catch (e) {\n return null\n }\n */\n}\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nvar defaultConfig = {\n rootMargin: '0px 0px 0px 0px',\n threshold: [0, 0.5, 1],\n root: getDefaultRoot()\n};\nclass ElementIntersectionObserver {\n constructor(elements, onChange, config) {\n _defineProperty(this, \"intersections\", void 0);\n _defineProperty(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 }, _objectSpread(_objectSpread({}, defaultConfig), config));\n elements.forEach(elm => this.intersectionObserver.observe(elm));\n }\n disconnect() {\n // Unregister trigger elements\n this.elements.forEach(elm => this.intersectionObserver.unobserve(elm));\n\n // Disconnect intersection observer\n this.intersectionObserver.disconnect();\n }\n}\n\nfunction toggleAttribute(el, name, boolValue) {\n if (!el) {\n return;\n }\n var nextValue;\n if (typeof boolValue !== 'undefined') {\n nextValue = !!boolValue;\n } else {\n nextValue = el.hasAttribute(name);\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 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 if (proto.closest) {\n return (el, css) => el.closest(css);\n } else {\n return (el, css) => {\n for (; el; el = el.parentElement) if (match.call(el, css)) return el;\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;\n // 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 }\n // IE reports incorrect event.defaultPrevented\n // but correct return value on element.dispatchEvent\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}\nclass VerticalScroll {\n constructor(container) {\n _defineProperty(this, \"container\", void 0);\n this.container = container;\n }\n cancel() {\n this._cancelled = true;\n }\n to(top) {\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.scrollTop;\n var distance = top - from;\n var startTime = null;\n var loop = currentTime => {\n if (this._cancelled) {\n return;\n }\n if (!startTime) {\n startTime = currentTime - 1;\n }\n var timeElapsed = currentTime - startTime;\n if (timeElapsed < duration) {\n this.container.scrollTop = from + distance * easeOutQuint(timeElapsed / duration);\n window.requestAnimationFrame(loop);\n } else {\n this.container.scrollTop = top;\n callback && callback();\n }\n };\n\n // eslint-disable-next-line compat/compat\n window.requestAnimationFrame(loop);\n }\n}\nclass HorizontalScroll {\n constructor(container) {\n _defineProperty(this, \"container\", void 0);\n this.container = container;\n }\n cancel() {\n this._cancelled = true;\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 var loop = currentTime => {\n if (this._cancelled) {\n return;\n }\n if (!startTime) {\n startTime = currentTime - 1;\n }\n var timeElapsed = currentTime - startTime;\n if (timeElapsed < duration) {\n this.container.scrollLeft = from + distance * easeOutQuint(timeElapsed / duration);\n window.requestAnimationFrame(loop);\n } else {\n this.container.scrollLeft = left;\n callback && callback();\n }\n };\n\n // eslint-disable-next-line compat/compat\n window.requestAnimationFrame(loop);\n }\n}\n\nfunction testReducedMotion() {\n if (typeof window !== 'undefined') {\n return !!window.matchMedia && window.matchMedia('(prefers-reduced-motion)').matches;\n }\n return false;\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}\nfunction unique(value, index, self) {\n return self.indexOf(value) === index;\n}\n\n/*\n * 'loading=\"lazy\"' is defined in terms of IntersectionObserver and the initial root.\n * As a result images with 'loading=\"lazy\"' inside a scroll container will not load\n * until they at least have one pixel visible in the viewport.\n *\n * This will hopefully fixed in a future version of the spec:\n * https://github.com/w3c/IntersectionObserver/issues/431\n *\n * scroll-container-lazy-load observes images and a scroll container.\n * Once images are close to intersecting it will change 'loading=\"lazy\"' to 'loading=\"eager\"'.\n * */\nfunction loadImage(image) {\n if (image.loading === 'lazy') {\n image.loading = 'eager';\n }\n}\nfunction connectScrollContainerLazyLoad(container, images) {\n var containerIntersecting = false;\n var deferredImages = [];\n\n // eslint-disable-next-line compat/compat\n var containerObserver = new IntersectionObserver(entries => {\n containerIntersecting = entries === null || entries === void 0 ? void 0 : entries[0].isIntersecting;\n if (containerIntersecting) {\n deferredImages.forEach(image => loadImage(image));\n deferredImages = [];\n }\n }, {\n root: getDefaultRoot(),\n threshold: [0.0]\n });\n containerObserver.observe(container);\n\n // eslint-disable-next-line compat/compat\n var imageObserver = new IntersectionObserver(entries => {\n for (var entry of entries) {\n if (entry.isIntersecting) {\n var image = entry.target;\n imageObserver.unobserve(image);\n if (containerIntersecting) {\n loadImage(image);\n } else {\n /* Defer loading of if the container is not intersecting the viewport */\n deferredImages.push(image);\n }\n }\n }\n }, {\n root: container,\n rootMargin: '300px',\n threshold: 0.0\n });\n for (var image of images) {\n imageObserver.observe(image);\n }\n return () => {\n containerObserver.disconnect();\n imageObserver.disconnect();\n };\n}\n\nfunction debounce(fn, delay) {\n var timeout;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n clearTimeout(timeout);\n timeout = setTimeout(() => fn(...args), delay);\n };\n}\n\nexport { ElementIntersectionObserver, HorizontalScroll, VerticalScroll, addStyle, closest, connectScrollContainerLazyLoad, debounce, dispatchEvent, setAttribute, testReducedMotion, toArray, toggleAttribute, withinRange, withinStops };\n//# sourceMappingURL=index.esm.js.map\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"45\":\"dh-prosentvis-lottie\",\"251\":\"dh-prosentvis-gltf\"}[chunkId] || chunkId) + \"-chunk-\" + {\"45\":\"39c81c994912e5d82d5e\",\"251\":\"8802feed49ef736c3c75\",\"630\":\"1e6b9fcd51097803cd14\",\"834\":\"6d20ff2fd7dc6f18c04b\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"https://static.nrk.no/dh/module/animasjonsscroll/static/\";","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/nrk-types.ts\nvar ClickEventKind = /* @__PURE__ */ ((ClickEventKind2) => {\n ClickEventKind2[\"Content\"] = \"content\";\n ClickEventKind2[\"Other\"] = \"other\";\n return ClickEventKind2;\n})(ClickEventKind || {});\nvar ImpressionEventKind = /* @__PURE__ */ ((ImpressionEventKind2) => {\n ImpressionEventKind2[\"Impression\"] = \"impression\";\n return ImpressionEventKind2;\n})(ImpressionEventKind || {});\nvar PlaybackEventKind = /* @__PURE__ */ ((PlaybackEventKind2) => {\n PlaybackEventKind2[\"Complete\"] = \"complete\";\n PlaybackEventKind2[\"Exit\"] = \"exit\";\n PlaybackEventKind2[\"Progress\"] = \"progress\";\n PlaybackEventKind2[\"Start\"] = \"start\";\n return PlaybackEventKind2;\n})(PlaybackEventKind || {});\nvar SearchSource = /* @__PURE__ */ ((SearchSource2) => {\n SearchSource2[\"PopularSearch\"] = \"popular-search\";\n SearchSource2[\"PreviousResult\"] = \"previous-result\";\n SearchSource2[\"Search\"] = \"search\";\n return SearchSource2;\n})(SearchSource || {});\nvar ViewportEventKind = /* @__PURE__ */ ((ViewportEventKind2) => {\n ViewportEventKind2[\"Entry\"] = \"entry\";\n ViewportEventKind2[\"Exit\"] = \"exit\";\n return ViewportEventKind2;\n})(ViewportEventKind || {});\nvar EventSchema = /* @__PURE__ */ ((EventSchema3) => {\n EventSchema3[\"BackstageEvent\"] = \"iglu:no.nrk.innlogging/backstage-event/jsonschema/1-0-0\";\n EventSchema3[\"ClickEvent\"] = \"iglu:no.nrk/click-event/jsonschema/1-0-0\";\n EventSchema3[\"FrontstageServerEvent\"] = \"iglu:no.nrk.innlogging/frontstage-server-event/jsonschema/1-0-0\";\n EventSchema3[\"ImpressionEvent\"] = \"iglu:no.nrk/impression-event/jsonschema/1-0-0\";\n EventSchema3[\"LoginRegisterFlowEvent\"] = \"iglu:no.nrk.innlogging/login-register-flow-event/jsonschema/1-0-0\";\n EventSchema3[\"PlaybackEvent\"] = \"iglu:no.nrk/playback-event/jsonschema/1-0-0\";\n EventSchema3[\"ProfilePageEvent\"] = \"iglu:no.nrk.innlogging/profile-page-event/jsonschema/1-0-0\";\n EventSchema3[\"RadioEvent\"] = \"iglu:no.nrk.radio/radio-event/jsonschema/1-0-0\";\n EventSchema3[\"SearchEvent\"] = \"iglu:no.nrk/search-event/jsonschema/1-0-0\";\n EventSchema3[\"StepEvent\"] = \"iglu:no.nrk.dh/step-event/jsonschema/1-0-0\";\n EventSchema3[\"TimeSpentEvent\"] = \"iglu:no.nrk/time-spent-event/jsonschema/1-0-0\";\n EventSchema3[\"ViewportEvent\"] = \"iglu:no.nrk.dh/viewport-event/jsonschema/1-0-0\";\n return EventSchema3;\n})(EventSchema || {});\nvar EntitySchema = /* @__PURE__ */ ((EntitySchema2) => {\n EntitySchema2[\"ClientID\"] = \"iglu:no.nrk.innlogging/client-id/jsonschema/1-0-0\";\n EntitySchema2[\"Content\"] = \"iglu:no.nrk/content/jsonschema/1-0-1\";\n EntitySchema2[\"Experiment\"] = \"iglu:no.nrk/experiment/jsonschema/1-0-0\";\n EntitySchema2[\"Link\"] = \"iglu:no.nrk/link/jsonschema/2-0-0\";\n EntitySchema2[\"NrkSession\"] = \"iglu:no.nrk/nrk-session/jsonschema/1-0-0\";\n EntitySchema2[\"NrkUser\"] = \"iglu:no.nrk/nrk-user/jsonschema/1-0-0\";\n EntitySchema2[\"Plug\"] = \"iglu:no.nrk/plug/jsonschema/3-0-0\";\n EntitySchema2[\"PreviousWebPage\"] = \"iglu:no.nrk/previous-web-page/jsonschema/1-0-0\";\n EntitySchema2[\"RegistrationContext\"] = \"iglu:no.nrk.innlogging/registration-context/jsonschema/1-0-0\";\n EntitySchema2[\"SearchResult\"] = \"iglu:no.nrk/search-result/jsonschema/1-0-1\";\n EntitySchema2[\"Service\"] = \"iglu:no.nrk/service/jsonschema/2-0-0\";\n EntitySchema2[\"Application\"] = \"iglu:com.snowplowanalytics.mobile/application/jsonschema/1-0-0\";\n return EntitySchema2;\n})(EntitySchema || {});\n\n// src/nrk-base-tracker.ts\nimport cuid from \"cuid\";\nvar NrkBaseTracker = class {\n constructor(snowplow, config) {\n this.sharedEntities = {};\n var _a, _b, _c;\n this.snowplow = snowplow;\n this.trackerId = (_a = config.trackerId) != null ? _a : cuid.slug();\n this.setSharedEntity(\"iglu:no.nrk/service/jsonschema/2-0-0\" /* Service */, { id: config.serviceId, environment: (_b = config.environment) != null ? _b : null });\n if (config.appVersion && config.appBuild) {\n this.setSharedEntity(\"iglu:com.snowplowanalytics.mobile/application/jsonschema/1-0-0\" /* Application */, { build: config.appBuild, version: config.appVersion });\n }\n snowplow.newTracker(this.trackerId, config.collectorUrl, {\n postPath: \"/nrk/wd6\",\n appId: config.appId,\n plugins: config.plugins,\n platform: (_c = config.platform) != null ? _c : \"web\",\n contexts: {\n webPage: config.disableWebContext !== true\n },\n stateStorageStrategy: config.disableLocalStorage ? \"cookie\" : void 0\n });\n }\n /**\n * Track page view.\n */\n trackPageView(contentEntity) {\n if (contentEntity) {\n this.snowplow.trackPageView(\n {\n context: entitiesToContexts(__spreadProps(__spreadValues({}, this.sharedEntities), {\n [\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */]: contentEntity\n }))\n },\n [this.trackerId]\n );\n } else {\n this.snowplow.trackPageView({ context: entitiesToContexts(this.sharedEntities) }, [this.trackerId]);\n }\n }\n /**\n * Generic track event for custom schemas, typed up to only support NRK\n * events and entities. All shared entities are included, and can be\n * overridden by specified entities.\n */\n trackSchemaEvent(schema, data, entities) {\n const context = entitiesToContexts(__spreadValues(__spreadValues({}, this.sharedEntities), entities));\n this.snowplow.trackSelfDescribingEvent(\n {\n event: { schema, data: __spreadValues({}, data) },\n context\n },\n [this.trackerId]\n );\n }\n /**\n * Send a standard structured event.\n */\n trackEvent(data, entities) {\n const context = entitiesToContexts(__spreadValues(__spreadValues({}, this.sharedEntities), entities));\n this.snowplow.trackStructEvent(__spreadProps(__spreadValues({}, data), { context }), [this.trackerId]);\n }\n /**\n * Set the logged in user.\n */\n setUser(userId) {\n this.snowplow.setUserId(userId, [this.trackerId]);\n this.setSharedEntity(\"iglu:no.nrk/nrk-user/jsonschema/1-0-0\" /* NrkUser */, { id: userId });\n }\n /**\n * Clear the user when logged out.\n */\n clearUser() {\n this.snowplow.setUserId(null, [this.trackerId]);\n this.removeSharedEntity(\"iglu:no.nrk/nrk-user/jsonschema/1-0-0\" /* NrkUser */);\n }\n /**\n * Add a plugin to the tracker.\n */\n addPlugin(configuration) {\n this.snowplow.addPlugin(configuration, [this.trackerId]);\n }\n /**\n * Set data for a shared entity for all events of this tracker.\n *\n * The `snowplow.addGlobalContexts()` method could potentially be used, but\n * `removeGlobalContexts()` requires the data as argument as well (awkward),\n * and there's no `getGlobalContexts()` to help with that.\n */\n setSharedEntity(schema, data) {\n this.sharedEntities[schema] = data;\n }\n /**\n * Returns any shared entities for an entity schema.\n */\n getSharedEntity(schema) {\n return this.sharedEntities[schema];\n }\n /**\n * Remove all shared entities for an entity schema.\n */\n removeSharedEntity(schema) {\n if (schema in this.sharedEntities) {\n delete this.sharedEntities[schema];\n }\n }\n};\nfunction entitiesToContexts(entities) {\n const contexts = [];\n Object.entries(entities).forEach(([schema, data]) => {\n const dataList = Array.isArray(data) ? data : [data];\n for (const entityData of dataList) {\n contexts.push({ schema, data: __spreadValues({}, entityData) });\n }\n });\n return contexts;\n}\n\n// src/nrk-player-tracker.ts\nvar NrkPlayerTracker = class extends NrkBaseTracker {\n /**\n * Tell the tracker what the current media is.\n */\n setMedia(mediaId, details) {\n const content = { id: mediaId };\n if (details == null ? void 0 : details.source) {\n content.source = details == null ? void 0 : details.source;\n }\n if (details == null ? void 0 : details.kind) {\n content.kind = details == null ? void 0 : details.kind;\n }\n this.setSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */, content);\n if (details == null ? void 0 : details.channelId) {\n this.channelId = details.channelId;\n }\n if (details && \"autoplay\" in details && details.autoplay !== void 0) {\n this.autoplay = details.autoplay;\n }\n }\n /**\n * Set autoplay for the current media.\n */\n setMediaAutoplay(autoplay) {\n this.autoplay = autoplay;\n }\n /**\n * Tell the tracker that media is unknown (like for gaps in the EPG).\n */\n setUnknownMedia(channelId) {\n this.setSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */, { id: \"unknown\", kind: \"unknown\" });\n this.channelId = channelId;\n }\n /**\n * Send a playback event of kind 'start'.\n *\n * Should be called when time starts running:\n * - After changing media.\n * - After user pauses playback.\n * - At replay.\n */\n sendStartEvent(startTime, live) {\n if (this.getSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */) === void 0) {\n throw new Error(\"Must use setMedia() first!\");\n }\n const start = Math.max(0, Math.floor(startTime));\n this.trackSchemaEvent(\"iglu:no.nrk/playback-event/jsonschema/1-0-0\" /* PlaybackEvent */, {\n kind: \"start\" /* Start */,\n startTime: start,\n endTime: start,\n autoplay: this.autoplay,\n live,\n channelId: this.channelId\n });\n }\n /**\n * Send a playback event of kind 'progress'.\n *\n * Should be called when time stops for any reason other than complete or\n * exit.\n */\n sendProgressEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"progress\" /* Progress */, startTime, endTime, live);\n }\n /**\n * Send a playback event of kind 'complete'.\n *\n * Should be called when:\n * - Playback reaches the end (100%) of the media (for ODM it stops, for\n * channels it continues to play the next program in the EPG).\n * - When a skip-to-next media function is invoked when binging.\n */\n sendCompleteEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"complete\" /* Complete */, startTime, endTime != null ? endTime : startTime, live);\n }\n /**\n * Send a playback event of kind 'exit'.\n *\n * Should be called when leaving the media before a 'complete'-event is sent,\n * including when seeking away from a program in the EPG to another.\n */\n sendExitEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"exit\" /* Exit */, startTime, endTime != null ? endTime : startTime, live);\n }\n sendPlaybackEvent(kind, startTime, endTime, live) {\n const start = Math.max(0, Math.floor(startTime));\n const end = Math.max(0, Math.floor(endTime));\n if (start === end && kind === \"progress\" /* Progress */) {\n return;\n }\n if (start > end) {\n throw new Error(`Start time can't be after end time (${start} vs ${end}). Event was ${kind}`);\n }\n this.trackSchemaEvent(\"iglu:no.nrk/playback-event/jsonschema/1-0-0\" /* PlaybackEvent */, {\n kind,\n startTime: start,\n endTime: end,\n live,\n channelId: this.channelId\n });\n }\n};\n\n// src/service-id.ts\nvar ServiceID = /* @__PURE__ */ ((ServiceID2) => {\n ServiceID2[\"Embed\"] = \"embed\";\n ServiceID2[\"Nrkbeta\"] = \"nrkbeta\";\n ServiceID2[\"Nrkinnlogging\"] = \"nrkinnlogging\";\n ServiceID2[\"Nrkno\"] = \"nrkno\";\n ServiceID2[\"Nrkp3\"] = \"nrkp3\";\n ServiceID2[\"Nrkradio\"] = \"nrkradio\";\n ServiceID2[\"Nrksuper\"] = \"nrksuper\";\n ServiceID2[\"Nrktv\"] = \"nrktv\";\n ServiceID2[\"Yr\"] = \"yr\";\n return ServiceID2;\n})(ServiceID || {});\n\n// src/snowplow-global.ts\nvar SnowplowGlobal = class {\n constructor() {\n this.snowplow = window.snowplow;\n if (this.snowplow === void 0) {\n throw new Error(\"There is no global Snowplow function.\");\n }\n }\n /**\n * Check if the global API is available (provided by the \"Snowplow tag\"). No\n * distinction is made between sp.js and sp.lite.js.\n */\n static isAvailable() {\n return window.snowplow !== void 0;\n }\n /**\n * Modify newTracker() to support adding plugins via the tracker\n * configuration. See \"Creating your own plugins\" in the JavaScript tracker\n * Snowplow docs.\n *\n * Note: The tracker configuration hasn't been thoroughly checked for\n * inconsistencies between the global API and @snowplow/browser-tracker.\n * There might be issues.\n */\n newTracker(trackerId, collectorUrl, configuration) {\n this.snowplow(\"newTracker\", trackerId, collectorUrl, configuration);\n if ((configuration == null ? void 0 : configuration.plugins) !== void 0) {\n configuration.plugins.forEach((plugin) => {\n this.addPlugin({ plugin }, [trackerId]);\n });\n }\n }\n setUserId(...args) {\n this.proxy(\"setUserId\", args, 2);\n }\n trackPageView(...args) {\n this.proxy(\"trackPageView\", args, 2);\n }\n trackSelfDescribingEvent(...args) {\n this.proxy(\"trackSelfDescribingEvent\", args, 2);\n }\n trackStructEvent(...args) {\n this.proxy(\"trackStructEvent\", args, 2);\n }\n preservePageViewId(...args) {\n this.proxy(\"preservePageViewId\", args, 1);\n }\n addPlugin(config, trackers) {\n const args = [{ Plugin: () => config.plugin }, \"Plugin\", trackers];\n this.proxy(\"addPlugin\", args, args.length);\n }\n /**\n * Make a call to the global Snowplow API, with the specified method and\n * arguments. It only supports methods which have a `trackers` argument as\n * the last (optional) argument.\n *\n * The `trackers` argument of the Snowplow methods is optional and not always\n * in the same position. The `maxArgs` argument specifies the maximum number\n * of arguments the method supports and so in which position the `trackers`\n * argument is, when present. This is necessary in order to transform the use\n * of `trackers` between the Snowplow API and the global API. So if\n * `Args['length']` is `1 | 2`, then `maxArgs` should be 2.\n */\n proxy(method, args, maxArgs) {\n const trackerIds = args.length === maxArgs ? args.pop() : void 0;\n if (trackerIds && trackerIds.length > 0) {\n trackerIds.forEach((trackerId) => {\n this.snowplow(`${method}:${trackerId}`, ...args);\n });\n } else {\n this.snowplow(method, ...args);\n }\n }\n};\nexport {\n ClickEventKind,\n EntitySchema,\n EventSchema,\n ImpressionEventKind,\n NrkBaseTracker,\n NrkPlayerTracker,\n PlaybackEventKind,\n SearchSource,\n ServiceID,\n SnowplowGlobal,\n ViewportEventKind,\n entitiesToContexts\n};\n","import { EntitySchema, EventSchema } from '@nrk/snowplow-web';\n\n/**\n * Root path to snowplow bundle on static.nrk.no.\n */\nvar staticSnowplowRoot = \"https://static.nrk.no/nrkno-snowplow\";\n/**\n * The current major version\n */\nvar staticSnowplowMajorVersion = \"1\";\n\n//@ts-expect-error post-fix version to allow multiple versions to co-exists at the same time\nvar globalKey = \"nrknoOnTrackerReady-\" + staticSnowplowMajorVersion;\n\n/**\n * Modified version of @nrk/snowplow-web. Does not allow array or undefined\n */\n\n/**\n * Typecheck and generate `{schema, data}`\n */\nfunction getTyped(schema, data) {\n return {\n schema,\n data\n };\n}\n\n/**\n * No-op type check\n */\nfunction isTypedContext(_schema, _data) {}\n/**\n * No-op type check\n */\nfunction isTypedEvent(_schema, _data) {}\n/**\n * No-op type check\n */\nfunction isTyped(_schema, _data) {}\n\n/**\n * No-op type check\n */\nfunction isTypedArray(_schema, _data) {}\n\n/**\n * Typechecks a context and return the Snowplow type\n */\nfunction asSnowplowContext(data) {\n return data;\n}\nfunction asSnowplowEntity(data) {\n return data;\n}\n\nvar typeUtil = /*#__PURE__*/Object.freeze({\n __proto__: null,\n EntitySchema: EntitySchema,\n EventSchema: EventSchema,\n asSnowplowContext: asSnowplowContext,\n asSnowplowEntity: asSnowplowEntity,\n getTyped: getTyped,\n isTyped: isTyped,\n isTypedArray: isTypedArray,\n isTypedContext: isTypedContext,\n isTypedEvent: isTypedEvent\n});\n\n/// \n/**\n * Takes a callback that will be called with the bundled JS when ready.\n *\n * This function will load the major version (defined above in JS file) from `static.nrk.no`\n * @note the callback will never be called if a network error occurs.\n */\nfunction getBundle(callback) {\n // Add callback queue placeholder if needed\n if (globalThis[globalKey] === undefined) {\n //@ts-expect-error `q` is next line\n globalThis[globalKey] = function (cb) {\n globalThis[globalKey].q.push(cb);\n };\n globalThis[globalKey].q = [];\n }\n {\n // load script if needed\n loadOnce(staticSnowplowRoot + \"/major/\" + staticSnowplowMajorVersion + \"/nrkno-snowplow-entry.js\");\n }\n\n // add callback\n globalThis[globalKey](callback);\n}\n/**\n * loadOnce loads the given script IFF it is not already present in the DOM.\n * @param {string} src URL for script\n * @returns {undefined}\n */\nfunction loadOnce(src) {\n var hasScript = document.querySelector(\"script[src=\\\"\" + src + \"\\\"]\");\n if (hasScript) {\n return;\n }\n var script = document.createElement('script');\n script.async = true;\n script.src = src;\n document.head.appendChild(script);\n}\n\nexport { typeUtil as TypeUtils, getBundle };\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/nrk-types.ts\nvar ClickEventKind = /* @__PURE__ */ ((ClickEventKind2) => {\n ClickEventKind2[\"Content\"] = \"content\";\n ClickEventKind2[\"Other\"] = \"other\";\n return ClickEventKind2;\n})(ClickEventKind || {});\nvar ImpressionEventKind = /* @__PURE__ */ ((ImpressionEventKind2) => {\n ImpressionEventKind2[\"Impression\"] = \"impression\";\n return ImpressionEventKind2;\n})(ImpressionEventKind || {});\nvar PlaybackEventKind = /* @__PURE__ */ ((PlaybackEventKind2) => {\n PlaybackEventKind2[\"Complete\"] = \"complete\";\n PlaybackEventKind2[\"Exit\"] = \"exit\";\n PlaybackEventKind2[\"Progress\"] = \"progress\";\n PlaybackEventKind2[\"Start\"] = \"start\";\n return PlaybackEventKind2;\n})(PlaybackEventKind || {});\nvar SearchSource = /* @__PURE__ */ ((SearchSource2) => {\n SearchSource2[\"PopularSearch\"] = \"popular-search\";\n SearchSource2[\"PreviousResult\"] = \"previous-result\";\n SearchSource2[\"Search\"] = \"search\";\n return SearchSource2;\n})(SearchSource || {});\nvar ViewportEventKind = /* @__PURE__ */ ((ViewportEventKind2) => {\n ViewportEventKind2[\"Entry\"] = \"entry\";\n ViewportEventKind2[\"Exit\"] = \"exit\";\n return ViewportEventKind2;\n})(ViewportEventKind || {});\nvar EventSchema = /* @__PURE__ */ ((EventSchema3) => {\n EventSchema3[\"BackstageEvent\"] = \"iglu:no.nrk.innlogging/backstage-event/jsonschema/1-0-0\";\n EventSchema3[\"ClickEvent\"] = \"iglu:no.nrk/click-event/jsonschema/1-0-0\";\n EventSchema3[\"FrontstageServerEvent\"] = \"iglu:no.nrk.innlogging/frontstage-server-event/jsonschema/1-0-0\";\n EventSchema3[\"ImpressionEvent\"] = \"iglu:no.nrk/impression-event/jsonschema/1-0-0\";\n EventSchema3[\"LoginRegisterFlowEvent\"] = \"iglu:no.nrk.innlogging/login-register-flow-event/jsonschema/1-0-0\";\n EventSchema3[\"PlaybackEvent\"] = \"iglu:no.nrk/playback-event/jsonschema/1-0-0\";\n EventSchema3[\"ProfilePageEvent\"] = \"iglu:no.nrk.innlogging/profile-page-event/jsonschema/1-0-0\";\n EventSchema3[\"RadioEvent\"] = \"iglu:no.nrk.radio/radio-event/jsonschema/1-0-0\";\n EventSchema3[\"SearchEvent\"] = \"iglu:no.nrk/search-event/jsonschema/1-0-0\";\n EventSchema3[\"StepEvent\"] = \"iglu:no.nrk.dh/step-event/jsonschema/1-0-0\";\n EventSchema3[\"TimeSpentEvent\"] = \"iglu:no.nrk/time-spent-event/jsonschema/1-0-0\";\n EventSchema3[\"ViewportEvent\"] = \"iglu:no.nrk.dh/viewport-event/jsonschema/1-0-0\";\n return EventSchema3;\n})(EventSchema || {});\nvar EntitySchema = /* @__PURE__ */ ((EntitySchema2) => {\n EntitySchema2[\"ClientID\"] = \"iglu:no.nrk.innlogging/client-id/jsonschema/1-0-0\";\n EntitySchema2[\"Content\"] = \"iglu:no.nrk/content/jsonschema/1-0-1\";\n EntitySchema2[\"Experiment\"] = \"iglu:no.nrk/experiment/jsonschema/1-0-0\";\n EntitySchema2[\"Link\"] = \"iglu:no.nrk/link/jsonschema/2-0-0\";\n EntitySchema2[\"NrkSession\"] = \"iglu:no.nrk/nrk-session/jsonschema/1-0-0\";\n EntitySchema2[\"NrkUser\"] = \"iglu:no.nrk/nrk-user/jsonschema/1-0-0\";\n EntitySchema2[\"Plug\"] = \"iglu:no.nrk/plug/jsonschema/3-0-0\";\n EntitySchema2[\"PreviousWebPage\"] = \"iglu:no.nrk/previous-web-page/jsonschema/1-0-0\";\n EntitySchema2[\"RegistrationContext\"] = \"iglu:no.nrk.innlogging/registration-context/jsonschema/1-0-0\";\n EntitySchema2[\"SearchResult\"] = \"iglu:no.nrk/search-result/jsonschema/1-0-1\";\n EntitySchema2[\"Service\"] = \"iglu:no.nrk/service/jsonschema/2-0-0\";\n EntitySchema2[\"Application\"] = \"iglu:com.snowplowanalytics.mobile/application/jsonschema/1-0-0\";\n return EntitySchema2;\n})(EntitySchema || {});\n\n// src/nrk-base-tracker.ts\nimport cuid from \"cuid\";\nvar NrkBaseTracker = class {\n constructor(snowplow, config) {\n this.sharedEntities = {};\n var _a, _b, _c;\n this.snowplow = snowplow;\n this.trackerId = (_a = config.trackerId) != null ? _a : cuid.slug();\n this.setSharedEntity(\"iglu:no.nrk/service/jsonschema/2-0-0\" /* Service */, { id: config.serviceId, environment: (_b = config.environment) != null ? _b : null });\n if (config.appVersion && config.appBuild) {\n this.setSharedEntity(\"iglu:com.snowplowanalytics.mobile/application/jsonschema/1-0-0\" /* Application */, { build: config.appBuild, version: config.appVersion });\n }\n snowplow.newTracker(this.trackerId, config.collectorUrl, {\n postPath: \"/nrk/wd6\",\n appId: config.appId,\n plugins: config.plugins,\n platform: (_c = config.platform) != null ? _c : \"web\",\n contexts: {\n webPage: config.disableWebContext !== true\n },\n stateStorageStrategy: config.disableLocalStorage ? \"cookie\" : void 0\n });\n }\n /**\n * Track page view.\n */\n trackPageView(contentEntity) {\n if (contentEntity) {\n this.snowplow.trackPageView(\n {\n context: entitiesToContexts(__spreadProps(__spreadValues({}, this.sharedEntities), {\n [\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */]: contentEntity\n }))\n },\n [this.trackerId]\n );\n } else {\n this.snowplow.trackPageView({ context: entitiesToContexts(this.sharedEntities) }, [this.trackerId]);\n }\n }\n /**\n * Generic track event for custom schemas, typed up to only support NRK\n * events and entities. All shared entities are included, and can be\n * overridden by specified entities.\n */\n trackSchemaEvent(schema, data, entities) {\n const context = entitiesToContexts(__spreadValues(__spreadValues({}, this.sharedEntities), entities));\n this.snowplow.trackSelfDescribingEvent(\n {\n event: { schema, data: __spreadValues({}, data) },\n context\n },\n [this.trackerId]\n );\n }\n /**\n * Send a standard structured event.\n */\n trackEvent(data, entities) {\n const context = entitiesToContexts(__spreadValues(__spreadValues({}, this.sharedEntities), entities));\n this.snowplow.trackStructEvent(__spreadProps(__spreadValues({}, data), { context }), [this.trackerId]);\n }\n /**\n * Set the logged in user.\n */\n setUser(userId) {\n this.snowplow.setUserId(userId, [this.trackerId]);\n this.setSharedEntity(\"iglu:no.nrk/nrk-user/jsonschema/1-0-0\" /* NrkUser */, { id: userId });\n }\n /**\n * Clear the user when logged out.\n */\n clearUser() {\n this.snowplow.setUserId(null, [this.trackerId]);\n this.removeSharedEntity(\"iglu:no.nrk/nrk-user/jsonschema/1-0-0\" /* NrkUser */);\n }\n /**\n * Add a plugin to the tracker.\n */\n addPlugin(configuration) {\n this.snowplow.addPlugin(configuration, [this.trackerId]);\n }\n /**\n * Set data for a shared entity for all events of this tracker.\n *\n * The `snowplow.addGlobalContexts()` method could potentially be used, but\n * `removeGlobalContexts()` requires the data as argument as well (awkward),\n * and there's no `getGlobalContexts()` to help with that.\n */\n setSharedEntity(schema, data) {\n this.sharedEntities[schema] = data;\n }\n /**\n * Returns any shared entities for an entity schema.\n */\n getSharedEntity(schema) {\n return this.sharedEntities[schema];\n }\n /**\n * Remove all shared entities for an entity schema.\n */\n removeSharedEntity(schema) {\n if (schema in this.sharedEntities) {\n delete this.sharedEntities[schema];\n }\n }\n};\nfunction entitiesToContexts(entities) {\n const contexts = [];\n Object.entries(entities).forEach(([schema, data]) => {\n const dataList = Array.isArray(data) ? data : [data];\n for (const entityData of dataList) {\n contexts.push({ schema, data: __spreadValues({}, entityData) });\n }\n });\n return contexts;\n}\n\n// src/nrk-player-tracker.ts\nvar NrkPlayerTracker = class extends NrkBaseTracker {\n /**\n * Tell the tracker what the current media is.\n */\n setMedia(mediaId, details) {\n const content = { id: mediaId };\n if (details == null ? void 0 : details.source) {\n content.source = details == null ? void 0 : details.source;\n }\n if (details == null ? void 0 : details.kind) {\n content.kind = details == null ? void 0 : details.kind;\n }\n this.setSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */, content);\n if (details == null ? void 0 : details.channelId) {\n this.channelId = details.channelId;\n }\n if (details && \"autoplay\" in details && details.autoplay !== void 0) {\n this.autoplay = details.autoplay;\n }\n }\n /**\n * Set autoplay for the current media.\n */\n setMediaAutoplay(autoplay) {\n this.autoplay = autoplay;\n }\n /**\n * Tell the tracker that media is unknown (like for gaps in the EPG).\n */\n setUnknownMedia(channelId) {\n this.setSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */, { id: \"unknown\", kind: \"unknown\" });\n this.channelId = channelId;\n }\n /**\n * Send a playback event of kind 'start'.\n *\n * Should be called when time starts running:\n * - After changing media.\n * - After user pauses playback.\n * - At replay.\n */\n sendStartEvent(startTime, live) {\n if (this.getSharedEntity(\"iglu:no.nrk/content/jsonschema/1-0-1\" /* Content */) === void 0) {\n throw new Error(\"Must use setMedia() first!\");\n }\n const start = Math.max(0, Math.floor(startTime));\n this.trackSchemaEvent(\"iglu:no.nrk/playback-event/jsonschema/1-0-0\" /* PlaybackEvent */, {\n kind: \"start\" /* Start */,\n startTime: start,\n endTime: start,\n autoplay: this.autoplay,\n live,\n channelId: this.channelId\n });\n }\n /**\n * Send a playback event of kind 'progress'.\n *\n * Should be called when time stops for any reason other than complete or\n * exit.\n */\n sendProgressEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"progress\" /* Progress */, startTime, endTime, live);\n }\n /**\n * Send a playback event of kind 'complete'.\n *\n * Should be called when:\n * - Playback reaches the end (100%) of the media (for ODM it stops, for\n * channels it continues to play the next program in the EPG).\n * - When a skip-to-next media function is invoked when binging.\n */\n sendCompleteEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"complete\" /* Complete */, startTime, endTime != null ? endTime : startTime, live);\n }\n /**\n * Send a playback event of kind 'exit'.\n *\n * Should be called when leaving the media before a 'complete'-event is sent,\n * including when seeking away from a program in the EPG to another.\n */\n sendExitEvent(startTime, endTime, live) {\n this.sendPlaybackEvent(\"exit\" /* Exit */, startTime, endTime != null ? endTime : startTime, live);\n }\n sendPlaybackEvent(kind, startTime, endTime, live) {\n const start = Math.max(0, Math.floor(startTime));\n const end = Math.max(0, Math.floor(endTime));\n if (start === end && kind === \"progress\" /* Progress */) {\n return;\n }\n if (start > end) {\n throw new Error(`Start time can't be after end time (${start} vs ${end}). Event was ${kind}`);\n }\n this.trackSchemaEvent(\"iglu:no.nrk/playback-event/jsonschema/1-0-0\" /* PlaybackEvent */, {\n kind,\n startTime: start,\n endTime: end,\n live,\n channelId: this.channelId\n });\n }\n};\n\n// src/service-id.ts\nvar ServiceID = /* @__PURE__ */ ((ServiceID2) => {\n ServiceID2[\"Embed\"] = \"embed\";\n ServiceID2[\"Nrkbeta\"] = \"nrkbeta\";\n ServiceID2[\"Nrkinnlogging\"] = \"nrkinnlogging\";\n ServiceID2[\"Nrkno\"] = \"nrkno\";\n ServiceID2[\"Nrkp3\"] = \"nrkp3\";\n ServiceID2[\"Nrkradio\"] = \"nrkradio\";\n ServiceID2[\"Nrksuper\"] = \"nrksuper\";\n ServiceID2[\"Nrktv\"] = \"nrktv\";\n ServiceID2[\"Yr\"] = \"yr\";\n return ServiceID2;\n})(ServiceID || {});\n\n// src/snowplow-global.ts\nvar SnowplowGlobal = class {\n constructor() {\n this.snowplow = window.snowplow;\n if (this.snowplow === void 0) {\n throw new Error(\"There is no global Snowplow function.\");\n }\n }\n /**\n * Check if the global API is available (provided by the \"Snowplow tag\"). No\n * distinction is made between sp.js and sp.lite.js.\n */\n static isAvailable() {\n return window.snowplow !== void 0;\n }\n /**\n * Modify newTracker() to support adding plugins via the tracker\n * configuration. See \"Creating your own plugins\" in the JavaScript tracker\n * Snowplow docs.\n *\n * Note: The tracker configuration hasn't been thoroughly checked for\n * inconsistencies between the global API and @snowplow/browser-tracker.\n * There might be issues.\n */\n newTracker(trackerId, collectorUrl, configuration) {\n this.snowplow(\"newTracker\", trackerId, collectorUrl, configuration);\n if ((configuration == null ? void 0 : configuration.plugins) !== void 0) {\n configuration.plugins.forEach((plugin) => {\n this.addPlugin({ plugin }, [trackerId]);\n });\n }\n }\n setUserId(...args) {\n this.proxy(\"setUserId\", args, 2);\n }\n trackPageView(...args) {\n this.proxy(\"trackPageView\", args, 2);\n }\n trackSelfDescribingEvent(...args) {\n this.proxy(\"trackSelfDescribingEvent\", args, 2);\n }\n trackStructEvent(...args) {\n this.proxy(\"trackStructEvent\", args, 2);\n }\n preservePageViewId(...args) {\n this.proxy(\"preservePageViewId\", args, 1);\n }\n addPlugin(config, trackers) {\n const args = [{ Plugin: () => config.plugin }, \"Plugin\", trackers];\n this.proxy(\"addPlugin\", args, args.length);\n }\n /**\n * Make a call to the global Snowplow API, with the specified method and\n * arguments. It only supports methods which have a `trackers` argument as\n * the last (optional) argument.\n *\n * The `trackers` argument of the Snowplow methods is optional and not always\n * in the same position. The `maxArgs` argument specifies the maximum number\n * of arguments the method supports and so in which position the `trackers`\n * argument is, when present. This is necessary in order to transform the use\n * of `trackers` between the Snowplow API and the global API. So if\n * `Args['length']` is `1 | 2`, then `maxArgs` should be 2.\n */\n proxy(method, args, maxArgs) {\n const trackerIds = args.length === maxArgs ? args.pop() : void 0;\n if (trackerIds && trackerIds.length > 0) {\n trackerIds.forEach((trackerId) => {\n this.snowplow(`${method}:${trackerId}`, ...args);\n });\n } else {\n this.snowplow(method, ...args);\n }\n }\n};\nexport {\n ClickEventKind,\n EntitySchema,\n EventSchema,\n ImpressionEventKind,\n NrkBaseTracker,\n NrkPlayerTracker,\n PlaybackEventKind,\n SearchSource,\n ServiceID,\n SnowplowGlobal,\n ViewportEventKind,\n entitiesToContexts\n};\n","import { getBundle } from '@nrk/nrkno-snowplow';\nimport { EntitySchema } from '@nrk/snowplow-web';\nimport { g as getHost } from './shared/dh-snowplow.1ee613bf.mjs';\n\nconst APP_ID = \"no.nrk.dh\";\nfunction resolveOrTimeout(promise, wait) {\n return Promise.race([\n promise.then(() => true),\n new Promise((resolve) => {\n setTimeout(() => {\n resolve(false);\n }, wait);\n })\n ]);\n}\nfunction createTracker(trackerId, { environment, contentContext }) {\n let trackerReady = false;\n let bundle;\n const host = getHost(environment);\n const eventQueue = [];\n const contexts = [\"service\", \"user\"];\n const trackOrQueue = (callback) => {\n if (trackerReady) {\n callback(bundle);\n } else {\n eventQueue.push(callback);\n }\n };\n const trackStructuredEvent = (event) => trackOrQueue(({ NrknoUtils, Snowplow }) => {\n Snowplow.trackStructEvent(\n {\n ...event,\n context: NrknoUtils.context.collect(contexts)\n },\n [trackerId]\n );\n });\n const trackSelfDescribingEvent = (event) => trackOrQueue(\n ({ NrknoUtils, Snowplow }) => Snowplow.trackSelfDescribingEvent(\n {\n event,\n context: NrknoUtils.context.collect(contexts)\n },\n [trackerId]\n )\n );\n getBundle((nrknoBundle) => {\n bundle = nrknoBundle;\n const { NrknoUtils } = nrknoBundle;\n NrknoUtils.newTracker(trackerId, APP_ID, host);\n if (contentContext) {\n const contentContextId = `${trackerId}-${contentContext.id}`;\n contexts.push(contentContextId);\n NrknoUtils.context.set(contentContextId, EntitySchema.Content, {\n source: contentContext.source,\n id: contentContext.id\n });\n }\n resolveOrTimeout(NrknoUtils.trackers.whenReady(\"main-tracker\"), 1e3).then((isResolved) => {\n trackerReady = true;\n if (isResolved === false) {\n console.warn(\"nrkno tracker not available\");\n }\n while (eventQueue.length) {\n const fn = eventQueue.pop();\n fn(bundle);\n }\n return;\n }).catch(console.error);\n });\n return {\n trackSelfDescribingEvent,\n trackStructuredEvent\n };\n}\n\nexport { createTracker, getHost };\n","function getHost(environment = \"development\") {\n if (environment === \"production\") {\n return \"https://data.nrk.no\";\n }\n return \"https://no-nrk-prod1.mini.snplow.net\";\n}\n\nexport { getHost as g };\n","import assertClassBrand from \"./assertClassBrand.js\";\nexport default function _classPrivateFieldGet2(s, a) {\n return s.get(assertClassBrand(s, a));\n}","export default function _assertClassBrand(e, t, n) {\n if (\"function\" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n;\n throw new TypeError(\"Private element is not present on this object\");\n}","import classApplyDescriptorGet from \"./classApplyDescriptorGet.js\";\nimport classPrivateFieldGet2 from \"./classPrivateFieldGet2.js\";\nexport default function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = classPrivateFieldGet2(privateMap, receiver);\n return classApplyDescriptorGet(receiver, descriptor);\n}","export default function _classApplyDescriptorGet(receiver, descriptor) {\n if (descriptor.get) {\n return descriptor.get.call(receiver);\n }\n return descriptor.value;\n}","import classApplyDescriptorSet from \"./classApplyDescriptorSet.js\";\nimport classPrivateFieldGet2 from \"./classPrivateFieldGet2.js\";\nexport default function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = classPrivateFieldGet2(privateMap, receiver);\n classApplyDescriptorSet(receiver, descriptor, value);\n return value;\n}","export default function _classApplyDescriptorSet(receiver, descriptor, value) {\n if (descriptor.set) {\n descriptor.set.call(receiver, value);\n } else {\n if (!descriptor.writable) {\n throw new TypeError(\"attempted to set read only private field\");\n }\n descriptor.value = value;\n }\n}","import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';\nimport _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';\nimport { testReducedMotion } from '@nrk/dh-basis-common';\n\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\n\n/*\n * Mixin for custom elements\n *\n * Keeps track of multiple scroll timelines and calls updatedCallback whenever\n * progress in a scroll timeline has changed.\n *\n * Inspired by https://drafts.csswg.org/scroll-animations-1/\n */\nfunction ScrollanimasjonMixin(Base) {\n var _isWatching, _observer, _animation, _progress, _timeline, _createIntersectionObserver, _disconnectIntersectionObserver, _handleVisibilityChange, _startWatching, _stopWatching;\n return _isWatching = /*#__PURE__*/new WeakMap(), _observer = /*#__PURE__*/new WeakMap(), _animation = /*#__PURE__*/new WeakMap(), _progress = /*#__PURE__*/new WeakMap(), _timeline = /*#__PURE__*/new WeakMap(), _createIntersectionObserver = /*#__PURE__*/new WeakSet(), _disconnectIntersectionObserver = /*#__PURE__*/new WeakSet(), _handleVisibilityChange = /*#__PURE__*/new WeakMap(), _startWatching = /*#__PURE__*/new WeakSet(), _stopWatching = /*#__PURE__*/new WeakSet(), class extends Base {\n constructor() {\n super(...arguments);\n _classPrivateMethodInitSpec(this, _stopWatching);\n _classPrivateMethodInitSpec(this, _startWatching);\n _classPrivateMethodInitSpec(this, _disconnectIntersectionObserver);\n _classPrivateMethodInitSpec(this, _createIntersectionObserver);\n _classPrivateFieldInitSpec(this, _isWatching, {\n writable: true,\n value: false\n });\n _classPrivateFieldInitSpec(this, _observer, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _animation, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _progress, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _timeline, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _handleVisibilityChange, {\n writable: true,\n value: _ref => {\n var [containerIntersection] = _ref;\n if (containerIntersection.isIntersecting) {\n _classPrivateMethodGet(this, _startWatching, _startWatching2).call(this);\n } else {\n _classPrivateMethodGet(this, _stopWatching, _stopWatching2).call(this);\n }\n }\n });\n }\n connectedCallback() {\n var _super$connectedCallb;\n (_super$connectedCallb = super.connectedCallback) === null || _super$connectedCallb === void 0 || _super$connectedCallb.call(this);\n var userPrefersReducedMotion = testReducedMotion();\n if (this.reduceMotion.type === 'auto' && userPrefersReducedMotion) {\n this.progressUpdatedCallback(this.reduceMotion.defaultValue);\n return;\n }\n _classPrivateFieldSet(this, _timeline, new ViewTimeline({\n subject: this,\n axis: this.axis,\n inset: this.inset\n }));\n _classPrivateFieldSet(this, _animation, this.animate({}, {\n timeline: _classPrivateFieldGet(this, _timeline),\n rangeStart: this.rangeStart,\n rangeEnd: this.rangeEnd\n }));\n _classPrivateMethodGet(this, _createIntersectionObserver, _createIntersectionObserver2).call(this);\n }\n disconnectedCallback() {\n var _super$disconnectedCa;\n (_super$disconnectedCa = super.disconnectedCallback) === null || _super$disconnectedCa === void 0 || _super$disconnectedCa.call(this);\n _classPrivateMethodGet(this, _disconnectIntersectionObserver, _disconnectIntersectionObserver2).call(this);\n _classPrivateMethodGet(this, _stopWatching, _stopWatching2).call(this);\n }\n /* Override this method to perform updates */\n progressUpdatedCallback(progress) {\n console.log(progress.toFixed(3));\n }\n get axis() {\n var _this$getAttribute;\n return (_this$getAttribute = this.getAttribute('axis')) !== null && _this$getAttribute !== void 0 ? _this$getAttribute : 'block';\n }\n get inset() {\n var _this$getAttribute2;\n return (_this$getAttribute2 = this.getAttribute('inset')) !== null && _this$getAttribute2 !== void 0 ? _this$getAttribute2 : '0px 0px';\n }\n get rangeStart() {\n var _this$getAttribute3;\n return (_this$getAttribute3 = this.getAttribute('range-start')) !== null && _this$getAttribute3 !== void 0 ? _this$getAttribute3 : 'contain';\n }\n get rangeEnd() {\n var _this$getAttribute4;\n return (_this$getAttribute4 = this.getAttribute('range-end')) !== null && _this$getAttribute4 !== void 0 ? _this$getAttribute4 : 'contain';\n }\n get reduceMotion() {\n var attributeValue = this.getAttribute('reduce-motion') || 'auto 1';\n if (attributeValue === 'never') {\n return {\n type: 'never'\n };\n } else if (attributeValue.startsWith('auto')) {\n var [type, value = '1'] = attributeValue.trim().split(' ');\n try {\n var defaultValue = parseFloat(value);\n return {\n type,\n defaultValue: Math.min(Math.max(defaultValue, 0), 1)\n };\n } catch (_unused) {\n console.warn(\"reduceMotion must be either: \\\"none\\\" or \\\"auto N\\\" with N = number [0..1] number input is \".concat(value));\n return {\n type: 'auto',\n defaultValue: 1\n };\n }\n } else {\n console.warn(\"reduceMotion must be either: \\\"none\\\" or \\\"auto N\\\" with N = number [0..1] type input is(\".concat(attributeValue, \")\"));\n return {\n type: 'auto',\n defaultValue: 1\n };\n }\n }\n get timeline() {\n return _classPrivateFieldGet(this, _timeline);\n }\n };\n function _createIntersectionObserver2() {\n // eslint-disable-next-line compat/compat\n _classPrivateFieldSet(this, _observer, new IntersectionObserver(_classPrivateFieldGet(this, _handleVisibilityChange), {\n /*\n Use document as root, so that intersections are tracked against iframe scrolling viewport if embedded (polopoly-preview).\n (No root would use the viewport, even when embedded in iframe)\n https://w3c.github.io/IntersectionObserver/#dom-intersectionobserver-root\n Currently disabled due to a bug in Chrome: https://issues.chromium.org/issues/40895558\n Todo: enable once chrome bug is fixed\n root: document,\n */\n threshold: [0]\n }));\n _classPrivateFieldGet(this, _observer).observe(this);\n }\n function _disconnectIntersectionObserver2() {\n if (_classPrivateFieldGet(this, _observer)) {\n _classPrivateFieldGet(this, _observer).disconnect();\n }\n }\n function _startWatching2() {\n if (_classPrivateFieldGet(this, _isWatching)) {\n return;\n }\n var loop = () => {\n if (_classPrivateFieldGet(this, _isWatching)) {\n requestAnimationFrame(loop);\n } else {\n return;\n }\n var progress;\n var currentTime = _classPrivateFieldGet(this, _animation).currentTime;\n if (currentTime.unit === 'percent') {\n // https://github.com/w3c/csswg-drafts/issues/8799\n var rangeProgress = _classPrivateFieldGet(this, _animation).currentTime.value / _classPrivateFieldGet(this, _animation).effect.getComputedTiming().endTime.value;\n progress = Math.max(0, Math.min(rangeProgress, 1));\n }\n if (_classPrivateFieldGet(this, _progress) !== progress) {\n this.progressUpdatedCallback(progress);\n _classPrivateFieldSet(this, _progress, progress);\n }\n };\n _classPrivateFieldSet(this, _isWatching, true);\n // eslint-disable-next-line compat/compat\n requestAnimationFrame(loop);\n }\n function _stopWatching2() {\n _classPrivateFieldSet(this, _isWatching, false);\n }\n}\n\nclass Scrollprogress extends ScrollanimasjonMixin(HTMLElement) {\n progressUpdatedCallback(progress) {\n var _this$targetElement;\n (_this$targetElement = this.targetElement) === null || _this$targetElement === void 0 || _this$targetElement.setAttribute('data-progress', progress.toFixed(4));\n }\n get targetElement() {\n return this.querySelector('[data-progress]');\n }\n}\n\nexport { ScrollanimasjonMixin, Scrollprogress };\n//# sourceMappingURL=index.esm.js.map\n","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}","import _typeof from \"./typeof.js\";\nexport default function toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\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 return obj;\n}","import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';\nimport _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';\nimport _defineProperty from '@babel/runtime/helpers/defineProperty';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar dedupeId = 0;\n\n/**\n * @template {HTMLElement} BaseClass\n * @param {(base: BaseClass) => BaseClass} mixin\n */\nfunction dedupeMixin(mixin) {\n var mixinId = dedupeId++;\n return base => {\n var _base$_appliedMixins, _base$_appliedMixins2;\n if ((_base$_appliedMixins = base._appliedMixins) !== null && _base$_appliedMixins !== void 0 && _base$_appliedMixins[mixinId]) {\n return base;\n }\n var extended = mixin(base);\n extended._appliedMixins = _objectSpread({}, (_base$_appliedMixins2 = base._appliedMixins) !== null && _base$_appliedMixins2 !== void 0 ? _base$_appliedMixins2 : {});\n extended._appliedMixins[mixinId] = true;\n return extended;\n };\n}\n\nfunction _classPrivateMethodInitSpec$1(obj, privateSet) { _checkPrivateRedeclaration$1(obj, privateSet); privateSet.add(obj); }\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration$1(obj, privateMap); privateMap.set(obj, value); }\nfunction _checkPrivateRedeclaration$1(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet$1(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nvar VIEWPORT_POSITION_ATTR = 'viewport-position';\nvar VIEWPORT_POSITIONS = {\n aboveViewport: 'ABOVE-VIEWPORT',\n inViewport: 'IN-VIEWPORT',\n belowViewport: 'BELOW-VIEWPORT'\n};\n\n/**\n * Check if element represents the browser viewport\n *\n * @param viewportContainer Element to check\n * @returns {boolean} True if element represents the browser viewport and not a scroll container\n */\nfunction isViewport(viewportContainer) {\n return (\n // eslint-disable-next-line compat/compat\n viewportContainer === document.scrollingElement || viewportContainer === document.documentElement\n );\n}\n\n/**\n * Custom Element mixin.\n *\n * Updates the `viewport-position` attribute according to whether the element is in the viewport or not.\n * Possible values for the attribute is `IN-VIEWPORT`, `ABOVE-VIEWPORT` and `BELOW-VIEWPORT`\n *\n * @template {HTMLElement} BaseClass\n * @param {BaseClass} Base\n */\nfunction _ViewportPositionMixin(Base) {\n var _observer, _createIntersectionObserver, _disconnectIntersectionObserver, _handleIntersectionChange;\n return _observer = /*#__PURE__*/new WeakMap(), _createIntersectionObserver = /*#__PURE__*/new WeakSet(), _disconnectIntersectionObserver = /*#__PURE__*/new WeakSet(), _handleIntersectionChange = /*#__PURE__*/new WeakMap(), class extends Base {\n constructor() {\n super(...arguments);\n _classPrivateMethodInitSpec$1(this, _disconnectIntersectionObserver);\n _classPrivateMethodInitSpec$1(this, _createIntersectionObserver);\n _classPrivateFieldInitSpec(this, _observer, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _handleIntersectionChange, {\n writable: true,\n value: _ref => {\n var [intersection] = _ref;\n if (intersection.isIntersecting) {\n if (this.viewportPosition !== VIEWPORT_POSITIONS.inViewport) {\n this.viewportPosition = VIEWPORT_POSITIONS.inViewport;\n }\n } else {\n if (!this.viewportPosition || this.viewportPosition === VIEWPORT_POSITIONS.inViewport) {\n var {\n top,\n bottom\n } = this.getBoundingClientRect();\n\n // The latest chrome reports bcr.bottom to be 0.5\n // Instead of checking that the bottom is outside the viewport\n // we check that the top of the element is above the viewport,\n // and that the bottom of the element is above the bottom of the viewport\n var isAbove = top <= 0 && bottom <= window.innerHeight;\n this.viewportPosition = isAbove ? VIEWPORT_POSITIONS.aboveViewport : VIEWPORT_POSITIONS.belowViewport;\n }\n }\n }\n });\n }\n static get observedAttributes() {\n var _super$observedAttrib;\n return [...((_super$observedAttrib = super.observedAttributes) !== null && _super$observedAttrib !== void 0 ? _super$observedAttrib : []), VIEWPORT_POSITION_ATTR];\n }\n connectedCallback() {\n var _super$connectedCallb;\n (_super$connectedCallb = super.connectedCallback) === null || _super$connectedCallb === void 0 ? void 0 : _super$connectedCallb.call(this);\n _classPrivateMethodGet$1(this, _createIntersectionObserver, _createIntersectionObserver2).call(this);\n }\n disconnectedCallback() {\n var _super$disconnectedCa;\n (_super$disconnectedCa = super.disconnectedCallback) === null || _super$disconnectedCa === void 0 ? void 0 : _super$disconnectedCa.call(this);\n _classPrivateMethodGet$1(this, _disconnectIntersectionObserver, _disconnectIntersectionObserver2).call(this);\n }\n /**\n * Get the viewport or the scroll container element that is used as a replacement for the viewport.\n *\n * @returns {Element|HTMLElement} viewportContainer\n */\n get viewportContainer() {\n var _document$scrollingEl;\n /*\n * Using root/document.scrollingElement to represent the viewport,\n * as this presents a unified API for scrolling for both the viewport and scrolling elements.\n * (scrollTop, scrollLeft, scrollTo)\n *\n * Some API's such as IntersectionObserver use different values for the viewport\n * (such as null and document), so take care.\n */\n\n // eslint-disable-next-line compat/compat\n return (_document$scrollingEl = document.scrollingElement) !== null && _document$scrollingEl !== void 0 ? _document$scrollingEl : document.documentElement;\n }\n\n /**\n * Get the intersection root\n * @returns {null|Element|HTMLElement|Document}\n */\n get viewportIntersectionRoot() {\n var viewportContainer = this.viewportContainer;\n if (isViewport(viewportContainer)) {\n var _navigator, _navigator$userAgent, _navigator$userAgent$;\n var isIFrame = window.location !== window.parent.location;\n var isChrome = (_navigator = navigator) === null || _navigator === void 0 ? void 0 : (_navigator$userAgent = _navigator.userAgent) === null || _navigator$userAgent === void 0 ? void 0 : (_navigator$userAgent$ = _navigator$userAgent.includes) === null || _navigator$userAgent$ === void 0 ? void 0 : _navigator$userAgent$.call(_navigator$userAgent, 'Chrome');\n // Chrome has a bug when using document in as IntersectionObserver root: https://bugs.chromium.org/p/chromium/issues/detail?id=1420155\n if (isIFrame && !isChrome) {\n /* Use document as intersection root in iframes */\n return document;\n } else {\n return null;\n }\n } else {\n return viewportContainer;\n }\n }\n\n /**\n * Position of this element relative to the viewport.\n *\n * @type {'ABOVE-VIEWPORT' | 'IN-VIEWPORT' | 'BELOW-VIEWPORT' }\n */\n set viewportPosition(value) {\n var currentValue = this.getAttribute(VIEWPORT_POSITION_ATTR);\n if (value !== currentValue) {\n this.setAttribute(VIEWPORT_POSITION_ATTR, value);\n }\n }\n\n /**\n * Position of this element relative to the viewport.\n *\n * @type {'ABOVE-VIEWPORT' | 'IN-VIEWPORT' | 'BELOW-VIEWPORT' }\n */\n get viewportPosition() {\n return this.getAttribute(VIEWPORT_POSITION_ATTR);\n }\n };\n function _createIntersectionObserver2() {\n // eslint-disable-next-line compat/compat\n _classPrivateFieldSet(this, _observer, new IntersectionObserver(_classPrivateFieldGet(this, _handleIntersectionChange), {\n threshold: [0],\n // Intersection observer uses null or document for regular viewport\n root: this.viewportIntersectionRoot,\n // Scroll snapping elements trigger intersection when they are perfectly aligned with the screen,\n // both above and below the viewport. Using -1px as root margin to prevent intersection.\n rootMargin: '-1px 0px -1px 0px'\n }));\n _classPrivateFieldGet(this, _observer).observe(this);\n }\n function _disconnectIntersectionObserver2() {\n var _classPrivateFieldGet2, _classPrivateFieldGet3;\n (_classPrivateFieldGet2 = _classPrivateFieldGet(this, _observer)) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.unobserve(this);\n (_classPrivateFieldGet3 = _classPrivateFieldGet(this, _observer)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.disconnect();\n }\n}\n\n/**\n * @template {HTMLElement} BaseClass\n * @param {BaseClass} Base */\nvar ViewportPositionMixin = dedupeMixin(_ViewportPositionMixin);\n\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\nfunction _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\nfunction _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\nfunction _classCheckPrivateStaticFieldDescriptor(descriptor, action) { if (descriptor === undefined) { throw new TypeError(\"attempted to \" + action + \" private static field before its declaration\"); } }\nfunction _classCheckPrivateStaticAccess(receiver, classConstructor) { if (receiver !== classConstructor) { throw new TypeError(\"Private static access of wrong provenance\"); } }\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\"attempted to set read only private field\"); } descriptor.value = value; } }\n\n/**\n * @typedef BoundAttributeConfig\n * @property {string} attribute – name of attribute to bind, or name of source and target attributes separated with a semicolon\n * @property {string | function } targets – selector string or function that takes element as argument and returns list of target elements\n */\n\n/**\n * Custom element mixin that creates a one way binding between an attribute on\n * the custom element and a given attribute on it's children.\n *\n * @template {HTMLElement} BaseClass\n * @param {BaseClass} Base\n */\nfunction _AttributeBindingMixin(Base) {\n var _class, _getTargetElements, _boundAttributes;\n return _getTargetElements = /*#__PURE__*/new WeakSet(), (_class = class AttributeBindingMixinDef extends Base {\n constructor() {\n super(...arguments);\n _classPrivateMethodInitSpec(this, _getTargetElements);\n }\n /**\n * Configure the bound attributes.\n *\n * @returns {BoundAttributeConfig[]}\n */\n static get boundAttributes() {\n return [];\n }\n static get observedAttributes() {\n var _super$observedAttrib;\n var boundAttributes = {};\n\n // Parse and store configuration for faster lookup\n for (var {\n attribute,\n targets\n } of this.boundAttributes) {\n if (typeof attribute !== 'string') {\n throw Error('Bound attribute configuration must have `attribute` property of string type');\n }\n var [sourceAttribute, targetAttribute = sourceAttribute] = attribute.split(':');\n boundAttributes[sourceAttribute] = {\n sourceAttributeName: sourceAttribute,\n targetAttributeName: targetAttribute,\n targets\n };\n }\n _classStaticPrivateFieldSpecSet(AttributeBindingMixinDef, _class, _boundAttributes, boundAttributes);\n\n // Observe bound attributes\n return [...((_super$observedAttrib = super.observedAttributes) !== null && _super$observedAttrib !== void 0 ? _super$observedAttrib : []), ...Object.keys(boundAttributes)];\n }\n attributeChangedCallback(name, oldValue, newValue) {\n var _super$attributeChang;\n (_super$attributeChang = super.attributeChangedCallback) === null || _super$attributeChang === void 0 ? void 0 : _super$attributeChang.call(this, name, oldValue, newValue);\n if (newValue === oldValue) {\n return;\n }\n var boundAttributes = _classStaticPrivateFieldSpecGet(AttributeBindingMixinDef, _class, _boundAttributes);\n if (name in boundAttributes) {\n var configuration = boundAttributes[name];\n var targets = configuration.targets;\n var targetElements = _classPrivateMethodGet(this, _getTargetElements, _getTargetElements2).call(this, targets);\n for (var element of targetElements) {\n if (newValue !== null) {\n element.setAttribute(configuration.targetAttributeName, newValue);\n } else {\n element.removeAttribute(configuration.targetAttributeName);\n }\n }\n }\n }\n }, _boundAttributes = {\n writable: true,\n value: void 0\n }, _class);\n function _getTargetElements2(targets) {\n if (typeof targets === 'function') {\n return targets(this);\n } else if (typeof targets === 'string') {\n return Array.from(this.querySelectorAll(targets));\n } else {\n throw new Error(\"Unsupported targets type: \".concat(typeof targets));\n }\n }\n}\n\n/**\n * @template {HTMLElement} BaseClass\n * @param {BaseClass} Base\n */\nvar AttributeBindingMixin = dedupeMixin(_AttributeBindingMixin);\n\nexport { AttributeBindingMixin, VIEWPORT_POSITIONS, VIEWPORT_POSITION_ATTR, ViewportPositionMixin };\n//# sourceMappingURL=index.esm.js.map\n","// extracted by mini-css-extract-plugin\nexport default {\"animasjonsscroll\":\"dhans__animasjonsscroll--eJ4sF\",\"vertical\":\"dhans__vertical--ag8pn\",\"horizontal\":\"dhans__horizontal--HcKWL\",\"figure\":\"dhans__figure--VR4sS\"};","import { Scrollprogress } from '@nrk/dh-basis-scrollanimasjon'\nimport { ViewportPositionMixin } from '@nrk/dh-basis-mixins'\nimport styles from './animasjonsscroll.module.css'\nimport './animasjonsscroll.template-adjustments.module.css'\n\nexport default class Animasjonsscroll extends ViewportPositionMixin(Scrollprogress) {\n connectedCallback() {\n super.connectedCallback()\n this._class = styles.animasjonsscroll\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n }\n\n get defaultProgress() {\n if (this.reduceMotion?.type === 'auto') {\n return this.reduceMotion.defaultValue\n } else {\n return 1\n }\n }\n}\n","/* eslint-disable promise/catch-or-return, promise/always-return */\nimport { testReducedMotion, toArray } from '@nrk/dh-basis-common'\n\nconst isVisible = (child) => child.offsetWidth > 0 || child.offsetHeight > 0\n\nexport default class ProsentvisVideo extends HTMLElement {\n #intersectionObserver\n\n static get observedAttributes() {\n return ['data-progress']\n }\n\n connectedCallback() {\n this._reducedMotion = testReducedMotion()\n\n /* Preload video when close to viewport */\n this.#intersectionObserver = new IntersectionObserver(\n (intersectionEntries) => {\n if (intersectionEntries?.[0]?.isIntersecting) {\n const videos = this.querySelectorAll('video')\n for (const video of videos) {\n if (window.getComputedStyle(video).display !== 'none') {\n video.setAttribute('preload', 'auto')\n }\n }\n\n this.#intersectionObserver.disconnect()\n this.#intersectionObserver = null\n }\n },\n {\n threshold: 0,\n rootMargin: '3000px',\n },\n )\n this.#intersectionObserver.observe(this)\n }\n\n disconnectedCallback() {\n this.#intersectionObserver?.disconnect()\n }\n\n attributeChangedCallback(name, prevValue, newValue) {\n const valueChanged = prevValue !== newValue\n if (!valueChanged) {\n return\n }\n\n if (name === 'data-progress') {\n this.#progressChanged()\n }\n }\n\n async #progressChanged() {\n const seekEnabled = await this.#checkSeek()\n if (!seekEnabled) {\n return\n }\n const videoElement = this.videoElement\n\n if (!videoElement || !videoElement.duration || this._reducedMotion) {\n return\n }\n\n videoElement.currentTime = this.progress * videoElement.duration\n }\n\n async #checkSeek() {\n const videoElement = this.videoElement\n if (videoElement.hasAttribute('data-seek-enabled')) {\n return videoElement.getAttribute('data-seek-enabled') === 'true'\n }\n\n try {\n await (videoElement.play() || Promise.resolve(true))\n videoElement.pause()\n videoElement.setAttribute('data-seek-enabled', 'true')\n return true\n } catch {\n videoElement.setAttribute('data-seek-enabled', 'false')\n return false\n }\n }\n\n get videoElement() {\n return toArray(this.children)\n .filter((child) => child.nodeName === 'VIDEO')\n .find(isVisible)\n }\n\n get progress() {\n return parseFloat(this.getAttribute('data-progress') || '0.0')\n }\n\n set progress(val) {\n this.setAttribute('data-progress', val.toFixed(4))\n }\n}\n","/* eslint-disable no-redeclare */\nimport { toArray, closest } from '@nrk/dh-basis-common'\nimport type {\n LayerAnimation,\n Easing,\n PropertyValues,\n PropertyType,\n AnimationProperty,\n} from '../../types/prosentvis-bilde.d.ts'\nimport './prosentvis-bilde.module.css'\n\nconst SYNTHETIC_DURATION = 10_000\n\nexport default class ProsentvisBilde extends HTMLElement {\n connectedCallback() {\n this.#updateSizes()\n\n const animasjonsscroll = this.closest('dh-animasjonsscroll')\n if (animasjonsscroll) {\n this.#animateLayers(\n // @ts-ignore\n animasjonsscroll.timeline,\n // @ts-ignore\n animasjonsscroll.rangeStart,\n // @ts-ignore\n animasjonsscroll.rangeEnd,\n // @ts-ignore\n animasjonsscroll.defaultProgress,\n )\n }\n }\n\n #isFullWidth() {\n return (\n closest(this, 'article')?.classList?.contains('article-feature') &&\n closest(this, '.remoterenderedcontent-reference')?.classList.contains('fc')\n )\n }\n\n #updateSizes() {\n if (this.#isFullWidth()) {\n this.layers.forEach((elm) => elm.setAttribute('sizes', '100vw'))\n }\n }\n\n #animateLayers(timeline, rangeStart, rangeEnd, defaultProgress) {\n if (!('Animation' in window)) {\n return\n }\n // Currently we need to set up one animation per property per layer.\n // In the future is should be possible to combine these keyframe effects into one grouped effect.\n // And use only one animation to drive that effect.\n //\n // TODO: Switch to GroupEffect once supported (for easier debugging)\n for (const layer of this.layers) {\n const layerAnim = JSON.parse(layer.getAttribute('data-layer-animation'))\n const keyframeEffects = toKeyframeEffects(layerAnim, layer)\n\n // TODO: Switch to GroupEffect once supported (for easier debugging)\n /*layer.animate(keyframes, {\n timeline,\n rangeStart,\n rangeEnd,\n fill: 'both',\n composite: i === 0 ? 'replace' : 'accumulate',\n })*/\n for (const keyframeEffect of keyframeEffects) {\n if (timeline) {\n // eslint-disable-next-line compat/compat\n const animation = new Animation(keyframeEffect, timeline)\n // @ts-ignore\n animation.rangeStart = rangeStart\n // @ts-ignore\n animation.rangeEnd = rangeEnd\n animation.play()\n } else {\n // When user prefers reduced motion no timeline is available.\n // Set the progress to default progress\n // eslint-disable-next-line compat/compat\n const animation = new Animation(keyframeEffect)\n animation.currentTime = defaultProgress * SYNTHETIC_DURATION\n }\n }\n }\n }\n\n get layers() {\n return toArray(this.querySelectorAll('[data-layer-animation]'))\n }\n\n get progress() {\n return parseFloat(this.getAttribute('data-progress') || '0.0')\n }\n\n set progress(val) {\n this.setAttribute('data-progress', val.toFixed(4))\n }\n}\n\nfunction toKeyframe(\n type: T,\n value: PropertyValues[T],\n offset: number,\n easing: string,\n): Keyframe {\n const keyframe = { offset, easing }\n switch (type) {\n case 'rotate':\n return { ...keyframe, rotate: `${value}deg` }\n case 'scale':\n return { ...keyframe, scale: `${value}` }\n case 'translateX':\n return { ...keyframe, translate: `${value}% 0%`, composite: 'add' }\n case 'translateY':\n return { ...keyframe, translate: `0% ${value}%`, composite: 'add' }\n case 'translate':\n return {\n ...keyframe,\n translate: `${(value as PropertyValues['translate']).x}% ${(value as PropertyValues['translate']).y}%`,\n composite: 'add',\n }\n case 'opacity':\n return { ...keyframe, opacity: value as number }\n }\n}\n\nfunction toEasingString(easing: Easing): string {\n switch (easing.type) {\n case 'ease':\n case 'ease-in':\n case 'ease-out':\n case 'ease-in-out':\n case 'linear':\n return easing.type\n case 'steps':\n return `steps(${easing.n}, ${easing.jumpterm})`\n case 'cubic-bezier':\n return `cubic-bezier(${easing.x1}, ${easing.y1}, ${easing.x2}, ${easing.y2})`\n default:\n return 'none'\n }\n}\n\nfunction toKeyframeEffects(animation: LayerAnimation, target: Element): KeyframeEffect[] {\n return animation.map((property: AnimationProperty) => {\n // TODO: Switch to one KeyframeEffect per property once GroupEffect is supported\n\n const keyframes = property.keyframes.map((keyframe) => {\n return toKeyframe(\n property.type,\n keyframe.value,\n keyframe.percent / 100,\n toEasingString(keyframe.easing),\n )\n })\n // eslint-disable-next-line compat/compat\n return new KeyframeEffect(target, keyframes, { fill: 'both', duration: SYNTHETIC_DURATION })\n })\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"prosentvis-overgang\":\"dhans__prosentvis-overgang--Dk35C\",\"prosentvisOvergang\":\"dhans__prosentvis-overgang--Dk35C\",\"mask\":\"dhans__mask--jYOQw\",\"image\":\"dhans__image--idkYb\",\"fade-in\":\"dhans__fade-in--CVGrO\",\"fadeIn\":\"dhans__fade-in--CVGrO\",\"background\":\"dhans__background--tnUZo\"};","const MAX_CANVAS_AREA = 1000000\n\nexport class CanvasManager {\n constructor(canvas) {\n this._canvas = canvas\n }\n\n async updateImages(image, mask) {\n this._image = image\n this._mask = mask\n this._updateCanvasWidth()\n }\n\n updateDpr(canvasWidth, canvasHeight, dpr) {\n const canvas = this._canvas\n\n /* Limit canvas area to MAX_CANVAS_AREA to improve performance */\n let effectiveDpr = dpr\n const potentialArea = dpr * dpr * canvasWidth * canvasHeight\n if (potentialArea > MAX_CANVAS_AREA) {\n effectiveDpr = Math.sqrt(MAX_CANVAS_AREA / (canvasWidth * canvasHeight))\n }\n\n canvas.width = canvasWidth * effectiveDpr\n canvas.height = canvasHeight * effectiveDpr\n }\n\n _updateCanvasWidth() {\n const canvas = this._canvas\n this._context = canvas.getContext('2d', {\n willReadFrequently: true,\n })\n\n /* Save image as ImageData */\n this._context.clearRect(0, 0, canvas.width, canvas.height)\n this._context.drawImage(this._image, 0, 0, canvas.width, canvas.height)\n this._imageData = this._context.getImageData(0, 0, canvas.width, canvas.height)\n\n /* Save mask as ImageData */\n this._context.clearRect(0, 0, canvas.width, canvas.height)\n this._context.drawImage(this._mask, 0, 0, canvas.width, canvas.height)\n this._maskData = this._context.getImageData(0, 0, canvas.width, canvas.height)\n\n /* Save create image data as ImageData */\n this._context.clearRect(0, 0, canvas.width, canvas.height)\n this._drawData = this._context.getImageData(0, 0, canvas.width, canvas.height)\n\n this._ready = true\n }\n\n updateMask(progress, range) {\n if (!this._ready) {\n return\n }\n // Distance to move black and white point during scroll\n const distance = 255 + range\n const blackPoint = 255 - distance * progress\n\n const data = this._drawData.data\n const imageData = this._imageData.data\n const maskData = this._maskData.data\n for (let i = 0; i < data.length; i += 4) {\n const greyValue = 0.2126 * maskData[i] + 0.7152 * maskData[i + 1] + 0.0722 * maskData[i + 2]\n const leveledValue = ((greyValue - blackPoint) * 255.0) / range\n const a = clamp(leveledValue / 255.0, 0, 1)\n\n data[i] = imageData[i]\n data[i + 1] = imageData[i + 1]\n data[i + 2] = imageData[i + 2]\n data[i + 3] = imageData[i + 3] * a\n }\n this._context.putImageData(this._drawData, 0, 0)\n }\n}\n\nfunction clamp(value, min, max) {\n return Math.max(Math.min(value, max), min)\n}\n","import styles from './prosentvis-overgang.module.css'\nimport { debounce } from 'debounce'\n\n// eslint-disable-next-line import/default\nimport { CanvasManager } from './overgang/canvas-manager.js'\n\nexport default class ProsentvisOvergang extends HTMLElement {\n static get observedAttributes() {\n return ['data-progress']\n }\n\n connectedCallback() {\n this.appendChild(document.createElement('canvas'))\n /*\n Disabling workers as webpack 5 does not support inline workers:\n https://github.com/webpack/webpack/discussions/14066\n */\n /*\n if ('OffscreenCanvas' in window) {\n this._worker = new Worker(\n new URL('./overgang/prosentvis-overgang.worker.js', import.meta.url)\n )\n const offscreen = this.canvas.transferControlToOffscreen()\n this._worker.postMessage({ canvas: offscreen }, [offscreen])\n }\n */\n\n this._debouncedUpdateCanvasWidth = debounce(this._updateCanvasWidth, 300)\n this._manager = new CanvasManager(this.canvas)\n\n window.addEventListener('resize', this._debouncedUpdateCanvasWidth)\n this._debouncedUpdateCanvasWidth()\n\n setTimeout(() => {\n this.querySelectorAll('img').forEach((img) => {\n img.addEventListener('load', this._debouncedUpdateCanvasWidth)\n })\n })\n }\n\n disconnectedCallback() {\n window.removeEventListener('resize', this._debouncedUpdateCanvasWidth)\n }\n\n attributeChangedCallback(name, prevValue, newValue) {\n const valueChanged = prevValue !== newValue\n if (!valueChanged) {\n return\n }\n\n if (name === 'data-progress') {\n this._prosentChanged()\n }\n }\n\n _prosentChanged() {\n this._updateMask()\n }\n\n _updateCanvasWidth = async () => {\n const canvas = this.canvas\n const images = this.images\n if (\n images.length < 2 ||\n images.some((image) => !image.complete) ||\n canvas.offsetWidth === this._currentCanvasWidth ||\n this.image.clientHeight === 0 ||\n this.mask.clientHeight === 0 ||\n this.image.naturalHeight === 0 ||\n this.mask.naturalHeight === 0\n ) {\n return\n }\n this._currentCanvasWidth = canvas.offsetWidth\n /* We're loaded */\n const dpr = Math.min(window.devicePixelRatio, 2)\n if (this._worker) {\n const image = await createImageBitmap(this.image)\n const mask = await createImageBitmap(this.mask)\n this._worker.postMessage(\n {\n image,\n mask,\n canvasWidth: canvas.offsetWidth,\n canvasHeight: canvas.offsetHeight,\n dpr,\n },\n [image, mask],\n )\n } else {\n this._manager.updateDpr(canvas.offsetWidth, canvas.offsetHeight, dpr)\n this._manager.updateImages(this.image, this.mask)\n }\n this._ready = true\n this._updateMask()\n }\n\n _updateMask = () => {\n if (!this._ready) {\n return\n }\n\n if (this._worker) {\n this._worker.postMessage({ progress: this.progress, range: this.range })\n if (this.canvas.style.visibility !== 'visible') {\n /* Hide image and show canvas */\n this.canvas.style.visibility = 'visible'\n this.image.style.visibility = 'hidden'\n }\n } else {\n if (this._animationFrame) {\n return // Already painting\n }\n this._animationFrame = requestAnimationFrame(() => {\n const progress = this.progress\n const range = this.range\n this._manager.updateMask(progress, range)\n\n delete this._animationFrame\n if (this.canvas.style.visibility !== 'visible') {\n /* Hide image and show canvas */\n this.canvas.style.visibility = 'visible'\n this.image.style.visibility = 'hidden'\n }\n })\n }\n }\n\n get image() {\n return this.querySelector(`.${styles.image}`)\n }\n\n get mask() {\n return this.querySelector(`.${styles.mask}`)\n }\n\n get images() {\n /* eslint-disable compat/compat */\n return Array.from(this.querySelectorAll('img'))\n }\n\n get canvas() {\n return this.querySelector('canvas')\n }\n\n get progress() {\n return parseFloat(this.getAttribute('data-progress') || '0.0')\n }\n\n /* Range between black and white point */\n get range() {\n return parseFloat(this.getAttribute('range') || '1.0')\n }\n\n set progress(val) {\n this.setAttribute('data-progress', val.toFixed(4))\n }\n}\n","/* eslint-disable promise/catch-or-return, promise/always-return */\nimport { getElementTag } from '@nrk/dh-server-libs/get-element-tag.js'\nimport { createTracker } from '@nrk/dh-snowplow'\nimport { EventSchema, ViewportEventKind } from '@nrk/snowplow-web'\nimport Animasjonsscroll from './components/animasjonsscroll.js'\nimport ProsentvisVideo from './components/media/prosentvis-video.js'\nimport ProsentvisBilde from './components/media/prosentvis-bilde.ts'\nimport ProsentvisOvergang from './components/media/prosentvis-overgang.js'\nimport './lib/scroll-timeline.js'\n\nimport './components/animasjonsscroll.module.css'\nimport './client.css'\n\nconst tag = getElementTag(__APP_NAME__, __APP_VERSION__)\n\nfunction safeDefine(elementName, constructor) {\n if (typeof customElements.get(elementName) === 'undefined') {\n customElements.define(elementName, constructor)\n }\n}\n\nexport class AppElement extends HTMLElement {\n name = tag\n #entryObserver\n #exitObserver\n #tracker\n\n connectedCallback() {\n this.#defineCustomElements()\n this.#createTracker()\n this.#startViewportLogger()\n }\n\n disconnectedCallback() {\n this.#stopViewportLogger()\n }\n\n async #defineCustomElements() {\n safeDefine('dh-animasjonsscroll', Animasjonsscroll)\n safeDefine('dh-prosentvis-video', ProsentvisVideo)\n safeDefine('dh-prosentvis-bilde', ProsentvisBilde)\n safeDefine('dh-prosentvis-overgang', ProsentvisOvergang)\n\n if (this.features.lottie && typeof customElements.get('dh-prosentvis-lottie') === 'undefined') {\n const prosentvisLottie = (\n await import(\n './components/media/prosentvis-lottie.js' /* webpackChunkName: \"dh-prosentvis-lottie\" */\n )\n ).default\n safeDefine('dh-prosentvis-lottie', prosentvisLottie)\n }\n\n if (this.features.gltf && typeof customElements.get('dh-prosentvis-gltf') === 'undefined') {\n const prosentvisGLTF = (\n await import(\n './components/media/prosentvis-gltf.js' /* webpackChunkName: \"dh-prosentvis-gltf\" */\n )\n ).default\n safeDefine('dh-prosentvis-gltf', prosentvisGLTF)\n }\n }\n\n #createTracker() {\n if (process.env.DEV) {\n import('@nrk/dh-snowplow/mock').then(({ mock }) => mock()).catch(console.error)\n }\n\n this.tracker = createTracker('dh-animasjonsscroll', {\n environment: process.env.ENVIRONMENT,\n contentContext: {\n source: 'pp',\n id: this.dataset.selfId,\n },\n })\n }\n\n #startViewportLogger() {\n this.#entryObserver = new IntersectionObserver((entries) => {\n if (!entries[0]?.isIntersecting) {\n return\n }\n this.#entryObserver.disconnect()\n this.#exitObserver.observe(this)\n this.tracker.trackSelfDescribingEvent({\n schema: EventSchema.ViewportEvent,\n data: {\n kind: ViewportEventKind.Entry,\n },\n })\n }, {})\n\n this.#exitObserver = new IntersectionObserver(\n (entries) => {\n if (!entries[0]?.isIntersecting) {\n return\n }\n this.#exitObserver.disconnect()\n this.tracker.trackSelfDescribingEvent({\n schema: EventSchema.ViewportEvent,\n data: {\n kind: ViewportEventKind.Exit,\n },\n })\n },\n { threshold: [1], rootMargin: '3000px 0px -100% 0px' },\n )\n\n this.#entryObserver.observe(this)\n }\n\n #stopViewportLogger() {\n this.#entryObserver?.disconnect()\n this.#exitObserver?.disconnect()\n }\n\n get features() {\n return JSON.parse(this.getAttribute('features') || '{}')\n }\n}\n\nsafeDefine(tag, AppElement)\n"],"names":["installedChunks","installChunk","fingerprint","pad","getRandomValue","c","blockSize","base","discreteValues","Math","pow","randomBlock","toString","safeCounter","cuid","Date","getTime","slug","date","counter","slice","print","random","isCuid","stringToCheck","startsWith","isSlug","stringLength","length","module","exports","env","window","self","globalCount","Object","keys","clientId","navigator","mimeTypes","userAgent","crypto","msCrypto","lim","abs","getRandomValues","Uint32Array","num","size","s","substr","debounce","func","wait","immediate","timeout","args","context","timestamp","result","later","last","now","setTimeout","apply","debounced","this","arguments","callNow","clear","clearTimeout","flush","getElementTag","name","version","split","proto","match","closest","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","el","css","parentElement","call","toArray","nodeList","dispatchEvent","element","event","detail","undefined","ignore","concat","CustomEvent","bubbles","cancelable","document","createEvent","initCustomEvent","testReducedMotion","matchMedia","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","m","amdO","n","getter","__esModule","d","a","definition","key","o","defineProperty","enumerable","get","f","e","chunkId","Promise","all","reduce","promises","u","miniCssF","obj","prop","hasOwnProperty","r","Symbol","toStringTag","value","p","data","ids","modules","runtime","i","j","installedChunkData","push","promise","import","then","race","resolve","defineProperties","getOwnPropertyDescriptors","getOwnPropertySymbols","propertyIsEnumerable","staticSnowplowRoot","staticSnowplowMajorVersion","globalKey","getBundle","callback","globalThis","cb","q","src","querySelector","script","createElement","async","head","appendChild","loadOnce","ViewportEventKind2","EventSchema3","EntitySchema2","APP_ID","createTracker","trackerId","environment","contentContext","bundle","trackerReady","host","getHost","eventQueue","contexts","trackOrQueue","nrknoBundle","NrknoUtils","newTracker","contentContextId","id","set","Content","source","trackers","whenReady","isResolved","console","warn","pop","fn","catch","error","trackSelfDescribingEvent","Snowplow","collect","trackStructuredEvent","trackStructEvent","_classPrivateFieldGet2","t","has","TypeError","_classPrivateFieldGet","receiver","privateMap","descriptor","_classPrivateFieldSet","writable","_classPrivateMethodInitSpec","privateSet","_checkPrivateRedeclaration","add","_classPrivateFieldInitSpec","privateCollection","_classPrivateMethodGet","Scrollprogress","Base","_isWatching","_observer","_animation","_progress","_timeline","_createIntersectionObserver","_disconnectIntersectionObserver","_handleVisibilityChange","_startWatching","_stopWatching","WeakMap","WeakSet","constructor","super","_ref","containerIntersection","isIntersecting","_startWatching2","_stopWatching2","connectedCallback","_super$connectedCallb","userPrefersReducedMotion","reduceMotion","type","progressUpdatedCallback","defaultValue","ViewTimeline","subject","axis","inset","animate","timeline","rangeStart","rangeEnd","_createIntersectionObserver2","disconnectedCallback","_super$disconnectedCa","_disconnectIntersectionObserver2","progress","log","toFixed","_this$getAttribute","getAttribute","_this$getAttribute2","_this$getAttribute3","_this$getAttribute4","attributeValue","trim","parseFloat","min","max","_unused","IntersectionObserver","threshold","observe","disconnect","loop","requestAnimationFrame","currentTime","unit","rangeProgress","effect","getComputedTiming","endTime","ScrollanimasjonMixin","HTMLElement","_this$targetElement","targetElement","setAttribute","_typeof","iterator","toPropertyKey","toPrimitive","String","Number","_defineProperty","configurable","ownKeys","object","enumerableOnly","symbols","filter","sym","getOwnPropertyDescriptor","dedupeId","dedupeMixin","mixin","mixinId","_base$_appliedMixins","_base$_appliedMixins2","_appliedMixins","extended","target","forEach","_objectSpread","_classPrivateMethodInitSpec$1","_checkPrivateRedeclaration$1","_classPrivateMethodGet$1","VIEWPORT_POSITION_ATTR","VIEWPORT_POSITIONS","ViewportPositionMixin","_handleIntersectionChange","intersection","viewportPosition","top","bottom","getBoundingClientRect","isAbove","innerHeight","observedAttributes","_super$observedAttrib","viewportContainer","_document$scrollingEl","scrollingElement","documentElement","viewportIntersectionRoot","isViewport","_navigator","_navigator$userAgent","_navigator$userAgent$","isIFrame","location","parent","isChrome","includes","root","rootMargin","_classPrivateFieldGet3","unobserve","_classStaticPrivateFieldSpecSet","classConstructor","_classCheckPrivateStaticAccess","_classCheckPrivateStaticFieldDescriptor","action","_class","_getTargetElements","_boundAttributes","AttributeBindingMixinDef","boundAttributes","attribute","targets","Error","sourceAttribute","targetAttribute","sourceAttributeName","targetAttributeName","attributeChangedCallback","oldValue","newValue","_super$attributeChang","configuration","targetElements","_getTargetElements2","removeAttribute","Array","from","querySelectorAll","Animasjonsscroll","styles","defaultProgress","_this$reduceMotion","isVisible","child","offsetWidth","offsetHeight","_intersectionObserver","_classPrivateFieldLooseKey","_progressChanged","_checkSeek","ProsentvisVideo","_checkSeek2","_progressChanged2","_reducedMotion","_classPrivateFieldLooseBase","intersectionEntries","_intersectionEntries$","videos","video","getComputedStyle","display","_classPrivateFieldLoo","prevValue","videoElement","children","nodeName","find","val","duration","hasAttribute","play","pause","SYNTHETIC_DURATION","_isFullWidth","_updateSizes","_animateLayers","ProsentvisBilde","_animateLayers2","_updateSizes2","_isFullWidth2","animasjonsscroll","layers","_closest","_closest2","classList","contains","elm","layer","keyframeEffects","toKeyframeEffects","JSON","parse","keyframeEffect","animation","Animation","map","property","keyframes","keyframe","offset","easing","rotate","scale","translate","composite","x","y","opacity","toKeyframe","percent","jumpterm","x1","y1","x2","y2","toEasingString","KeyframeEffect","fill","MAX_CANVAS_AREA","CanvasManager","canvas","_canvas","updateImages","image","mask","_image","_mask","_updateCanvasWidth","updateDpr","canvasWidth","canvasHeight","dpr","effectiveDpr","sqrt","width","height","_context","getContext","willReadFrequently","clearRect","drawImage","_imageData","getImageData","_maskData","_drawData","_ready","updateMask","range","blackPoint","imageData","maskData","greyValue","putImageData","ProsentvisOvergang","images","some","complete","_currentCanvasWidth","clientHeight","naturalHeight","devicePixelRatio","_worker","createImageBitmap","postMessage","_manager","_updateMask","style","visibility","_animationFrame","_debouncedUpdateCanvasWidth","addEventListener","img","removeEventListener","_prosentChanged","tag","__APP_NAME__","__APP_VERSION__","safeDefine","elementName","customElements","define","_entryObserver","_exitObserver","_tracker","_defineCustomElements","_createTracker","_startViewportLogger","_stopViewportLogger","AppElement","_stopViewportLogger2","_startViewportLogger2","_createTracker2","_defineCustomElements2","features","lottie","default","gltf","tracker","process","dataset","selfId","entries","_entries$","schema","EventSchema","ViewportEvent","kind","ViewportEventKind","Entry","_entries$2","Exit","_classPrivateFieldLoo2"],"sourceRoot":""}