{"version":3,"file":"main-0fb5e37c4179abb7d7f3.esm.js","mappings":"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","sources":["webpack://dh-historiescroll/webpack/runtime/import chunk loading","webpack://dh-historiescroll/./node_modules/cuid/index.js","webpack://dh-historiescroll/./node_modules/cuid/lib/fingerprint.browser.js","webpack://dh-historiescroll/./node_modules/cuid/lib/getRandomValue.browser.js","webpack://dh-historiescroll/./node_modules/cuid/lib/pad.js","webpack://dh-historiescroll/./node_modules/scrollparent/scrollparent.js","webpack://dh-historiescroll/./node_modules/@nrk/dh-server-libs/get-element-tag.js","webpack://dh-historiescroll/./node_modules/@nrk/dh-server-libs/src/get-element-tag.js","webpack://dh-historiescroll/./node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js","webpack://dh-historiescroll/./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js","webpack://dh-historiescroll/./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js","webpack://dh-historiescroll/./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js","webpack://dh-historiescroll/./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js","webpack://dh-historiescroll/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://dh-historiescroll/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://dh-historiescroll/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://dh-historiescroll/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://dh-historiescroll/./node_modules/@nrk/dh-basis-common/dist/index.esm.js","webpack://dh-historiescroll/./node_modules/@nrk/snowplow-web/index.js","webpack://dh-historiescroll/webpack/bootstrap","webpack://dh-historiescroll/webpack/runtime/amd options","webpack://dh-historiescroll/webpack/runtime/compat get default export","webpack://dh-historiescroll/webpack/runtime/define property getters","webpack://dh-historiescroll/webpack/runtime/ensure chunk","webpack://dh-historiescroll/webpack/runtime/get javascript chunk filename","webpack://dh-historiescroll/webpack/runtime/get mini-css chunk filename","webpack://dh-historiescroll/webpack/runtime/global","webpack://dh-historiescroll/webpack/runtime/hasOwnProperty shorthand","webpack://dh-historiescroll/webpack/runtime/make namespace object","webpack://dh-historiescroll/webpack/runtime/node module decorator","webpack://dh-historiescroll/webpack/runtime/publicPath","webpack://dh-historiescroll/webpack/runtime/css loading","webpack://dh-historiescroll/./node_modules/@nrk/dh-vh/dist/index.mjs","webpack://dh-historiescroll/./src/polyfills.js","webpack://dh-historiescroll/./node_modules/@nrk/nrkno-snowplow/node_modules/@nrk/snowplow-web/index.js","webpack://dh-historiescroll/./node_modules/@nrk/nrkno-snowplow/build-npm/nrkno-snowplow.package.mjs","webpack://dh-historiescroll/./node_modules/@nrk/dh-snowplow/dist/index.mjs","webpack://dh-historiescroll/./node_modules/@nrk/dh-snowplow/dist/shared/dh-snowplow.1ee613bf.mjs","webpack://dh-historiescroll/./node_modules/@nrk/dh-basis-levende-stillbilde/dist/index.esm.js","webpack://dh-historiescroll/./node_modules/@nrk/dh-basis-stegvis-video/dist/index.esm.js","webpack://dh-historiescroll/./node_modules/@nrk/dh-basis-mixins/dist/index.esm.js","webpack://dh-historiescroll/./node_modules/@nrk/dh-basis-scrollhistorie/dist/index.esm.js","webpack://dh-historiescroll/./node_modules/@nrk/dh-basis-scrollanimasjon/dist/index.esm.js","webpack://dh-historiescroll/./src/components/media/shared/scroll-progress.module.css?5d5d","webpack://dh-historiescroll/./src/components/cards/alt-text.module.css?2333","webpack://dh-historiescroll/./src/components/app.ts","webpack://dh-historiescroll/./src/client.ts"],"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(158 != chunkId) {\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} else installedChunks[chunkId] = 0;\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","(function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define([], factory);\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory();\n } else {\n root.Scrollparent = factory();\n }\n}(this, function () {\n function isScrolling(node) {\n var overflow = getComputedStyle(node, null).getPropertyValue(\"overflow\");\n\n return overflow.indexOf(\"scroll\") > -1 || overflow.indexOf(\"auto\") > - 1;\n }\n\n function scrollParent(node) {\n if (!(node instanceof HTMLElement || node instanceof SVGElement)) {\n return undefined;\n }\n\n var current = node.parentNode;\n while (current.parentNode) {\n if (isScrolling(current)) {\n return current;\n }\n\n current = current.parentNode;\n }\n\n return document.scrollingElement || document.documentElement;\n }\n\n return scrollParent;\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","export default function _classExtractFieldDescriptor(receiver, privateMap, action) {\n if (!privateMap.has(receiver)) {\n throw new TypeError(\"attempted to \" + action + \" private field on non-instance\");\n }\n return privateMap.get(receiver);\n}","import classApplyDescriptorGet from \"./classApplyDescriptorGet.js\";\nimport classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldGet(receiver, privateMap) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"get\");\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 classExtractFieldDescriptor from \"./classExtractFieldDescriptor.js\";\nexport default function _classPrivateFieldSet(receiver, privateMap, value) {\n var descriptor = classExtractFieldDescriptor(receiver, privateMap, \"set\");\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}","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 : String(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 _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","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","// 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\tid: moduleId,\n\t\tloaded: false,\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// Flag the module as loaded\n\tmodule.loaded = true;\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 \"\" + ({\"199\":\"dh-karthistorie\",\"582\":\"dhhs-video\",\"667\":\"dh-stegvis-lottie\"}[chunkId] || chunkId) + \"-chunk-\" + {\"158\":\"ebf8a4c80d57bf85c40d\",\"199\":\"fa6d7dadfb6d42d33180\",\"289\":\"5a9257fd39fae5f35e0e\",\"407\":\"7c3a3d39edcf20ef7d03\",\"582\":\"d2f078af356a9738003f\",\"667\":\"5047a14058431e284e92\",\"876\":\"06813fedecea6acc7af9\"}[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 \"\" + chunkId + \"-\" + {\"158\":\"74fed5474ea749dc3267\",\"407\":\"1f712ce7fe2997b8e000\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\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__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"https://static.nrk.no/dh/module/historiescroll/static/\";","if (typeof document === \"undefined\") return;\nvar createStylesheet = (chunkId, fullhref, oldTag, resolve, reject) => {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = (event) => {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && event.type;\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + errorType + \": \" + realHref + \")\");\n\t\t\terr.name = \"ChunkLoadError\";\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tif (linkTag.parentNode) linkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\n\tif (oldTag) {\n\t\toldTag.parentNode.insertBefore(linkTag, oldTag.nextSibling);\n\t} else {\n\t\tdocument.head.appendChild(linkTag);\n\t}\n\treturn linkTag;\n};\nvar findStylesheet = (href, fullhref) => {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = (chunkId) => {\n\treturn new Promise((resolve, reject) => {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, null, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t792: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"158\":1,\"407\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(() => {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, (e) => {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","function t(){var t,e=navigator.userAgent||navigator.vendor||window.opera,i=e.toLowerCase();return!!e&&(!!navigator.platform&&/iPad|iPhone|iPod/.test(navigator.platform)&&(t=/fban|fbav|instagram|firefox|opera|fxios/),t&&t.test(i))}var e={ssrOrientation:null,mode:\"max\"},i=function(t){var i,n,o;void 0===t&&(t={}),this.destroyed=!1,this.mounted=!1,this.listeners=[],this.value={portrait:0,landscape:0},this.opts=Object.assign({},e,t),this.orientation=this.getOrientation(),this.update(),this.handleUpdate=this.handleUpdate.bind(this),this.throttledUpdate=(i=this.handleUpdate,function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=this;o?(clearTimeout(n),n=setTimeout(function(){Date.now()-o>=100&&(i.apply(r,t),o=Date.now())},100-(Date.now()-o))):(i.apply(r,t),o=Date.now())})};function n(){var t=new i;return t.listen(function(t){try{document.getElementsByTagName(\"html\")[0].style.setProperty(\"--dh-vh\",t+\"px\")}catch(t){console.error(t)}}),t}function o(){return\"Dh Vh\"}i.prototype.mount=function(){\"undefined\"!=typeof window&&(window.addEventListener(\"resize\",this.throttledUpdate),window.addEventListener(\"orientationchange\",this.handleUpdate)),this.mounted=!0},i.prototype.destroy=function(){\"undefined\"!=typeof window&&(window.removeEventListener(\"resize\",this.throttledUpdate),window.removeEventListener(\"orientationchange\",this.handleUpdate)),this.mounted=!1},i.prototype.getOrientation=function(){return\"undefined\"!=typeof window?window.innerHeight>window.innerWidth?\"portrait\":\"landscape\":this.opts.ssrOrientation},i.prototype.handleUpdate=function(){this.update()},i.prototype.listen=function(t){var e=this;return this.listeners.push(t),!1===this.mounted&&this.mount(),function(){e.listeners=e.listeners.filter(function(e){return e!==t})}},i.prototype.emit=function(){var t=this,e=this.getVh(),i=this.getHeight();this.listeners.forEach(function(n){return n(e,i,t.orientation)})},i.prototype.getHeight=function(){return this.orientation?this.value[this.orientation]:0},i.prototype.getVh=function(){return this.orientation?this.value[this.orientation]/100:0},i.prototype.update=function(){var t=this.orientation;if(this.orientation=this.getOrientation(),this.orientation){var e=this.value[this.orientation],i=window.innerHeight;t!==this.orientation?(i>e&&(this.value[this.orientation]=i),this.emit()):i>e&&(this.value[this.orientation]=i,this.emit())}};export{o as test,t as checkHasVhBug,n as fixVhBug};\n//# sourceMappingURL=index.mjs.map\n","import { checkHasVhBug, fixVhBug } from '@nrk/dh-vh'\n\nif (checkHasVhBug()) {\n fixVhBug()\n}\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 { 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","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 _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport { dispatchEvent, testReducedMotion, toArray, toggleAttribute } from '@nrk/dh-basis-common';\n\nvar STATE_ATTR = 'data-state';\nvar VIEWPORT_POSITION_ATTR = 'data-viewport-position';\nvar DISABLE_FORCED_ATTRIBUTES_ATTR = 'disable-forced-attributes';\nvar IS_PAUSED = 'is-paused';\nvar AUTOPLAY_BLOCKED = 'autoplay-blocked';\nvar READY_STATE = {\n HAVE_NOTHING: 0,\n HAVE_METADATA: 1,\n HAVE_CURRENT_DATA: 2,\n HAVE_FUTURE_DATA: 3,\n HAVE_ENOUGH_DATA: 4 // Can play through\n};\nvar isVisible = child => !!child.offsetParent;\nclass LevendeStillbilde extends HTMLElement {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"_disconnecting\", false);\n _defineProperty(this, \"_visibleVideoElement\", void 0);\n _defineProperty(this, \"_handlePlayChange\", e => {\n if (e.type === 'play') {\n dispatchEvent(this, 'dh-basis-autoplay-succeeded');\n }\n if (e.target === this._visibleVideoElement) {\n this.isPaused = this._visibleVideoElement.paused;\n }\n });\n _defineProperty(this, \"_updatePlayState\", () => {\n if (!this._visibleVideoElement) {\n return;\n }\n if (this._shouldPlay()) {\n this._playVideo();\n } else {\n this._pauseVideo();\n }\n });\n _defineProperty(this, \"_handleResize\", () => {\n this._updateVisibleVideoElement();\n });\n }\n static get observedAttributes() {\n return [STATE_ATTR, DISABLE_FORCED_ATTRIBUTES_ATTR, VIEWPORT_POSITION_ATTR];\n }\n connectedCallback() {\n this._setVideoAttributes();\n this._setEventListeners();\n this._updateVisibleVideoElement();\n }\n disconnectedCallback() {\n this._disconnecting = true;\n this._removeEventListeners();\n }\n attributeChangedCallback(name, prevValue, newValue) {\n var valueChanged = prevValue !== newValue;\n if (name === STATE_ATTR || name === VIEWPORT_POSITION_ATTR) {\n if (valueChanged) {\n this._updateVisibleVideoElement();\n this._updatePlayState();\n if (name === VIEWPORT_POSITION_ATTR && newValue === 'IN-VIEWPORT') {\n this._preload();\n }\n }\n }\n }\n _setEventListeners() {\n window.addEventListener('resize', this._handleResize);\n this.videoElements.forEach(el => {\n el.addEventListener('pause', this._handlePlayChange);\n el.addEventListener('play', this._handlePlayChange);\n el.addEventListener('canplaythrough', this._updatePlayState);\n });\n }\n _removeEventListeners() {\n window.removeEventListener('resize', this._handleResize);\n this.videoElements.forEach(el => {\n el.removeEventListener('pause', this._handlePlayChange);\n el.removeEventListener('play', this._handlePlayChange);\n el.removeEventListener('canplaythrough', this._updatePlayState);\n });\n }\n _updateVisibleVideoElement() {\n // eslint-disable-next-line compat/compat\n requestAnimationFrame(() => {\n var nextVisibleVideo = this.videoElements.find(isVisible);\n if (nextVisibleVideo !== this._visibleVideoElement) {\n // Pause previous video\n this._pauseVideo();\n this._visibleVideoElement = nextVisibleVideo;\n if (this._shouldPreload()) {\n this._preload();\n }\n this._updatePlayState();\n }\n });\n }\n _setVideoAttributes() {\n if (!this.disableForcedAttributes) {\n this.videoElements.forEach(el => {\n el.setAttribute('playsInline', '');\n el.setAttribute('loop', '');\n el.setAttribute('disableRemotePlayback', '');\n el.setAttribute('x-webkit-airplay', 'deny');\n });\n }\n }\n _shouldPlay() {\n var _this$_visibleVideoEl;\n /*\n * Safari 14-15.5 hides poster on play, leaving a transparent element until enough data is available to play through.\n * We have to wait for the canplaythrough event and readystate = READY_STATE.HAVE_ENOUGH_DATA before calling `.play()`\n * */\n return ((_this$_visibleVideoEl = this._visibleVideoElement) === null || _this$_visibleVideoEl === void 0 ? void 0 : _this$_visibleVideoEl.readyState) >= READY_STATE.HAVE_ENOUGH_DATA && this.state === 'ACTIVE' && this.viewportPosition === 'IN-VIEWPORT';\n }\n _shouldPreload() {\n return this.viewportPosition === 'IN-VIEWPORT';\n }\n _preload() {\n var _this$_visibleVideoEl2;\n if (((_this$_visibleVideoEl2 = this._visibleVideoElement) === null || _this$_visibleVideoEl2 === void 0 ? void 0 : _this$_visibleVideoEl2.readyState) < READY_STATE.HAVE_ENOUGH_DATA) {\n var _this$_visibleVideoEl3;\n (_this$_visibleVideoEl3 = this._visibleVideoElement) === null || _this$_visibleVideoEl3 === void 0 || _this$_visibleVideoEl3.load();\n }\n }\n _playVideo() {\n dispatchEvent(this, 'dh-basis-autoplay-attempted');\n var reducedMotion = testReducedMotion();\n var videoElement = this._visibleVideoElement;\n if (videoElement.paused && !reducedMotion && !this.autoplayBlocked) {\n var playPromise = videoElement.play() || Promise.resolve();\n playPromise.catch(e => {\n console.error(e);\n this.autoplayBlocked = true;\n });\n }\n }\n _pauseVideo() {\n var videoElement = this._visibleVideoElement;\n if (videoElement && !videoElement.paused) {\n videoElement.pause();\n }\n }\n get videoElements() {\n return toArray(this.querySelectorAll('video'));\n }\n get disableForcedAttributes() {\n return this.hasAttribute(DISABLE_FORCED_ATTRIBUTES_ATTR);\n }\n get state() {\n return this.getAttribute(STATE_ATTR);\n }\n set state(val) {\n this.setAttribute(STATE_ATTR, val);\n }\n get isPaused() {\n return this.getAttribute(IS_PAUSED);\n }\n set isPaused(val) {\n if (val) {\n this.setAttribute(IS_PAUSED, '');\n } else {\n this.removeAttribute(IS_PAUSED);\n }\n }\n get autoplayBlocked() {\n return this.hasAttribute(AUTOPLAY_BLOCKED) || false;\n }\n set autoplayBlocked(val) {\n toggleAttribute(this, AUTOPLAY_BLOCKED, val);\n }\n get viewportPosition() {\n return this.getAttribute(VIEWPORT_POSITION_ATTR);\n }\n set viewportPosition(val) {\n this.setAttribute(VIEWPORT_POSITION_ATTR, val);\n }\n}\n\nexport { LevendeStillbilde as default };\n//# sourceMappingURL=index.esm.js.map\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport { closest, testReducedMotion, withinStops, toArray, setAttribute, toggleAttribute, withinRange } from '@nrk/dh-basis-common';\n\nvar STOPS_ATTR = 'stops';\nvar TARGET_STOP_ATTR = 'target-stop';\nvar AUTOPLAY_BLOCKED = 'autoplay-blocked';\nvar STATE_ATTR = 'data-state'; // Data attribute, so that it can be used on other elements\nvar VIEWPORT_POSITION_ATTR = 'data-viewport-position';\nvar READY_STATE = {\n HAVE_NOTHING: 0,\n HAVE_METADATA: 1,\n HAVE_CURRENT_DATA: 2,\n HAVE_FUTURE_DATA: 3,\n HAVE_ENOUGH_DATA: 4 // Can play through\n};\n\n// Most videos have a frame-rate of 25 fps, but not all. Use with care.\n// Used to calculate target zone.\nvar FRAME_RATE = 25;\nvar isVisible = child => child.offsetWidth > 0 || child.offsetHeight > 0;\n\n/* Ponyfill Math.sign */\nfunction sign(val) {\n return val >= 0 ? 1 : -1;\n}\nfunction round(num, decimals) {\n var multiplier = Math.pow(10.0, decimals);\n return Math.round(num * multiplier) / multiplier;\n}\nclass StegvisVideo extends HTMLElement {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"_paused\", true);\n _defineProperty(this, \"_disconnecting\", false);\n _defineProperty(this, \"_reducedMotionSeekEnabled\", false);\n _defineProperty(this, \"_onReadyStateChange\", e => {\n if (isVisible(e.target) && e.target.readyState >= READY_STATE.HAVE_ENOUGH_DATA) {\n this._startSeek();\n }\n });\n _defineProperty(this, \"_handleClick\", e => {\n var btn = closest(e.target, 'button');\n if (!btn) {\n return;\n }\n\n /* Triggers play if autoplay was blocked */\n var videoElement = this.videoElement;\n if (videoElement !== null && videoElement !== void 0 && videoElement.paused) {\n var playPromise = videoElement.play() || Promise.resolve();\n playPromise.then(() => {\n this.autoplayBlocked = false;\n });\n }\n });\n }\n static get observedAttributes() {\n return [TARGET_STOP_ATTR, STATE_ATTR, VIEWPORT_POSITION_ATTR];\n }\n connectedCallback() {\n this.addEventListener('click', this._handleClick);\n this.videoElements.forEach(videoElement => videoElement.addEventListener('canplaythrough', this._onReadyStateChange));\n }\n disconnectedCallback() {\n this._disconnecting = true;\n this.removeEventListener('click', this._handleClick);\n this.videoElements.forEach(videoElement => videoElement.removeEventListener('canplaythrough', this._onReadyStateChange));\n }\n attributeChangedCallback(name, prevValue, newValue) {\n var hasValue = newValue !== null;\n var valueChanged = prevValue !== newValue;\n if (!valueChanged) {\n return;\n }\n if (name === STATE_ATTR) {\n this._stateChanged(prevValue, newValue);\n } else if (name === VIEWPORT_POSITION_ATTR) {\n this._viewportChanged(newValue);\n } else if (name === TARGET_STOP_ATTR) {\n hasValue && this._startSeek();\n }\n }\n _stateChanged(prevState, nextState) {\n if (nextState === 'ACTIVE') {\n if (prevState === 'NEXT') {\n this._gotoStart();\n } else if (prevState === 'PREV') {\n this._gotoEnd();\n }\n this._startSeek();\n } else {\n this._paused = true;\n }\n }\n _viewportChanged(newValue) {\n if (newValue === 'IN-VIEWPORT') {\n this._preload();\n this._startSeek();\n } else if (newValue === 'ABOVE-VIEWPORT') {\n this._paused = true;\n this._gotoEnd();\n } else if (newValue === 'BELOW-VIEWPORT') {\n this._paused = true;\n this._gotoStart();\n }\n }\n _shouldPlay() {\n var _this$videoElement;\n var inViewport = typeof this.viewportPosition === 'undefined' || this.viewportPosition === 'IN-VIEWPORT';\n return ((_this$videoElement = this.videoElement) === null || _this$videoElement === void 0 ? void 0 : _this$videoElement.readyState) >= READY_STATE.HAVE_ENOUGH_DATA && inViewport && this.state === 'ACTIVE';\n }\n _preload() {\n var videoElement = this.videoElement;\n if ((videoElement === null || videoElement === void 0 ? void 0 : videoElement.readyState) < READY_STATE.HAVE_ENOUGH_DATA) {\n videoElement === null || videoElement === void 0 || videoElement.load();\n }\n }\n _gotoStart() {\n if (this.autoplayBlocked) {\n return;\n }\n var videoElement = this.videoElement;\n if (videoElement && videoElement.currentTime !== 0) {\n videoElement.currentTime = 0;\n }\n }\n _gotoEnd() {\n if (this.autoplayBlocked) {\n return;\n }\n var videoElement = this.videoElement;\n var duration = videoElement === null || videoElement === void 0 ? void 0 : videoElement.duration;\n if (Number.isFinite(duration)) {\n videoElement.currentTime = duration;\n }\n }\n _enableSeekOnReducedMotion() {\n var videoElement = this.videoElement;\n if (this._reducedMotionSeekEnabled || !videoElement) {\n return Promise.resolve();\n }\n return (videoElement.play() || Promise.resolve(true)).then(() => {\n videoElement.pause();\n this._reducedMotionSeekEnabled = true;\n }).catch(e => {\n // Ignore error\n });\n }\n _startSeek() {\n if (!this._paused || !this._shouldPlay()) {\n return;\n }\n var reducedMotion = testReducedMotion();\n this._paused = false;\n var prevTime;\n var loop = timestamp => {\n var videoElement = this.videoElement;\n var targetTime = this.stops[this.targetStop];\n if (this._disconnecting || this._paused || !videoElement || !isFinite(targetTime)) {\n this._paused = true;\n videoElement === null || videoElement === void 0 || videoElement.pause();\n return;\n }\n if (!prevTime) {\n prevTime = timestamp;\n }\n this.invisibleVideoElements.filter(video => !video.paused).forEach(invisibleVideo => invisibleVideo.pause());\n var dt = (timestamp - prevTime) / 1000;\n var framesPerTick = Math.max(Math.ceil(Math.abs(dt * FRAME_RATE)), 1);\n var buffer = 0.5 * framesPerTick / FRAME_RATE;\n var currentTime = videoElement.currentTime;\n var atTargetStop = withinRange(currentTime, targetTime - buffer, targetTime + buffer);\n if (atTargetStop) {\n if (videoElement.currentTime !== targetTime) {\n videoElement.currentTime = targetTime;\n }\n this._paused = true;\n videoElement.pause();\n } else if (reducedMotion) {\n this._enableSeekOnReducedMotion().then(() => {\n videoElement.currentTime = targetTime;\n this._paused = true;\n });\n } else {\n var speed = this._calculateSpeed(currentTime);\n var direction = sign(targetTime - currentTime);\n if (this.autoplayBlocked) ; else if (direction === 1) {\n // Use normal playback for forward playback\n videoElement.playbackRate = speed;\n if (videoElement.paused) {\n var playPromise = videoElement.play() || Promise.resolve();\n playPromise.catch(e => {\n console.error(e);\n this.autoplayBlocked = true;\n });\n }\n } else {\n // Use seeking for reverse playback:\n // https://github.com/whatwg/html/issues/3754\n videoElement.pause();\n var nextTime = round(currentTime + dt * speed * direction, 2.0);\n if (currentTime !== nextTime) {\n videoElement.currentTime = nextTime;\n }\n }\n prevTime = timestamp;\n requestAnimationFrame(loop);\n }\n };\n // eslint-disable-next-line compat/compat\n requestAnimationFrame(loop);\n }\n _calculateSpeed(currentTime) {\n return withinStops(currentTime, this.stops, this.targetStop, 1) ? 1 : 3;\n }\n get videoElement() {\n return this.videoElements.find(isVisible);\n }\n get invisibleVideoElements() {\n return this.videoElements.filter(child => !isVisible(child));\n }\n get videoElements() {\n return toArray(this.children).filter(child => child.nodeName === 'VIDEO');\n }\n get stops() {\n var stopString = this.getAttribute(STOPS_ATTR) || '';\n return stopString.replace(/[[\\]]/g, '').split(',').map(s => s.trim()).filter(Boolean).map(s => Number(s));\n }\n set stops(val) {\n this.setAttribute(STOPS_ATTR, val.map(num => num.toFixed(2)).join(','));\n }\n get targetStop() {\n return Number(this.getAttribute(TARGET_STOP_ATTR) || 0);\n }\n set targetStop(val) {\n this.setAttribute(TARGET_STOP_ATTR, val);\n }\n get state() {\n return this.getAttribute(STATE_ATTR);\n }\n set state(val) {\n setAttribute(this, STATE_ATTR, val);\n }\n get viewportPosition() {\n return this.getAttribute(VIEWPORT_POSITION_ATTR);\n }\n set viewportPosition(val) {\n this.setAttribute(VIEWPORT_POSITION_ATTR, val);\n }\n get autoplayBlocked() {\n return this.hasAttribute(AUTOPLAY_BLOCKED) || false;\n }\n set autoplayBlocked(val) {\n toggleAttribute(this, AUTOPLAY_BLOCKED, val);\n }\n}\n\nexport { StegvisVideo as default };\n//# sourceMappingURL=index.esm.js.map\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","import _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';\nimport _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';\nimport { toArray, setAttribute, dispatchEvent, ElementIntersectionObserver } from '@nrk/dh-basis-common';\nimport { ViewportPositionMixin, AttributeBindingMixin, VIEWPORT_POSITION_ATTR, VIEWPORT_POSITIONS } from '@nrk/dh-basis-mixins';\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/* Attributes */\n// VIEWPORT_POSITION_ATTR – Added by ViewportPositionMixin\nvar ACTIVE_BACKGROUND_ATTR = 'active-background-id';\nvar ROOT_MARGIN_ATTR = 'root-margin';\n\n/* Child attributes */\nvar BG_ID_ATTR = 'data-background-id';\nvar SHOW_BACKGROUND_ATTR = 'data-show-background';\nvar ATTRIBUTE_NAME = 'data-attribute-name';\nvar ATTRIBUTE_VALUE = 'data-attribute-value';\nvar STATE_ATTR = 'data-state';\nvar VIEWPORT_POSITION_DATA_ATTR = 'data-viewport-position';\n\n/* Events */\nvar TRIGGER_ACTIVATED_EVENT = 'dh-basis-scrollhistorie-trigger-activated';\nfunction isTrigger(elm) {\n return elm.hasAttribute(SHOW_BACKGROUND_ATTR);\n}\nfunction isBackground(elm) {\n return elm.hasAttribute(BG_ID_ATTR);\n}\n\n/**\n * Custom element that manages a set of background and trigger elements.\n *\n * Background elements are annotated with a `data-background-id` attribute.\n *\n * Trigger elements are annotated with a `data-show-background` attribute,\n * `data-attribute-name` and `data-attribute-value` attributes.\n *\n *\n * When a trigger element comes into view it will set the `data-state` attribute\n * of the corresponding background to `ACTIVE`.\n * The previous and next background will get `data-state`=`PREV` and `NEXT`.\n */\nvar _activeTriggerIndex = /*#__PURE__*/new WeakMap();\nvar _observer = /*#__PURE__*/new WeakMap();\nvar _createIntersectionObserver = /*#__PURE__*/new WeakSet();\nvar _disconnectIntersectionObserver = /*#__PURE__*/new WeakSet();\nvar _handleTriggerChange = /*#__PURE__*/new WeakMap();\nvar _prepareBackgrounds = /*#__PURE__*/new WeakSet();\nvar _updateBackgrounds = /*#__PURE__*/new WeakSet();\nvar _getBackgroundId = /*#__PURE__*/new WeakSet();\nclass Scrollhistorie extends ViewportPositionMixin(AttributeBindingMixin(HTMLElement)) {\n constructor() {\n super(...arguments);\n _classPrivateMethodInitSpec(this, _getBackgroundId);\n _classPrivateMethodInitSpec(this, _updateBackgrounds);\n _classPrivateMethodInitSpec(this, _prepareBackgrounds);\n _classPrivateMethodInitSpec(this, _disconnectIntersectionObserver);\n _classPrivateMethodInitSpec(this, _createIntersectionObserver);\n _classPrivateFieldInitSpec(this, _activeTriggerIndex, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _observer, {\n writable: true,\n value: void 0\n });\n _classPrivateFieldInitSpec(this, _handleTriggerChange, {\n writable: true,\n value: intersections => {\n var activeIntersection = intersections.filter(i => i.isIntersecting).pop();\n if (!activeIntersection || !activeIntersection.target) {\n _classPrivateFieldSet(this, _activeTriggerIndex, null);\n return;\n }\n var triggerElement = activeIntersection.target;\n\n // Set active background\n this.activeBackgroundId = triggerElement.getAttribute(SHOW_BACKGROUND_ATTR);\n\n // Update attribute on active background\n var attributeName = triggerElement.getAttribute(ATTRIBUTE_NAME);\n var attributeValue = triggerElement.getAttribute(ATTRIBUTE_VALUE);\n if (attributeName) {\n var _this$activeBackgroun;\n (_this$activeBackgroun = this.activeBackground) === null || _this$activeBackgroun === void 0 || _this$activeBackgroun.setAttribute(attributeName, attributeValue);\n }\n this.triggerElements.forEach(elm => setAttribute(elm, STATE_ATTR, elm === triggerElement ? 'ACTIVE' : undefined));\n var triggerIndex = this.triggerElements.indexOf(triggerElement);\n if (triggerIndex !== _classPrivateFieldGet(this, _activeTriggerIndex)) {\n _classPrivateFieldSet(this, _activeTriggerIndex, triggerIndex);\n dispatchEvent(this, TRIGGER_ACTIVATED_EVENT, {\n triggerIndex,\n backgroundId: this.activeBackgroundId,\n attributeName,\n attributeValue\n });\n }\n }\n });\n }\n static get observedAttributes() {\n return [...super.observedAttributes, ROOT_MARGIN_ATTR, ACTIVE_BACKGROUND_ATTR];\n }\n\n // Binding VIEWPORT-POSITION attribute to background DATA-VIEWPORT-POSITION attribute\n static get boundAttributes() {\n return [{\n attribute: \"\".concat(VIEWPORT_POSITION_ATTR, \":\").concat(VIEWPORT_POSITION_DATA_ATTR),\n targets: instance => instance.backgrounds\n }];\n }\n connectedCallback() {\n super.connectedCallback();\n _classPrivateMethodGet(this, _updateBackgrounds, _updateBackgrounds2).call(this);\n _classPrivateMethodGet(this, _createIntersectionObserver, _createIntersectionObserver2).call(this);\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n _classPrivateMethodGet(this, _disconnectIntersectionObserver, _disconnectIntersectionObserver2).call(this);\n }\n attributeChangedCallback(name, oldValue, newValue) {\n super.attributeChangedCallback(name, oldValue, newValue);\n if (name === ROOT_MARGIN_ATTR) {\n _classPrivateMethodGet(this, _disconnectIntersectionObserver, _disconnectIntersectionObserver2).call(this);\n _classPrivateMethodGet(this, _createIntersectionObserver, _createIntersectionObserver2).call(this);\n } else if (name === VIEWPORT_POSITION_ATTR) {\n _classPrivateMethodGet(this, _prepareBackgrounds, _prepareBackgrounds2).call(this);\n _classPrivateMethodGet(this, _updateBackgrounds, _updateBackgrounds2).call(this);\n } else if (name === ACTIVE_BACKGROUND_ATTR) {\n _classPrivateMethodGet(this, _updateBackgrounds, _updateBackgrounds2).call(this);\n }\n }\n get triggerElements() {\n return toArray(this.children).filter(isTrigger);\n }\n get backgrounds() {\n return toArray(this.children).filter(isBackground);\n }\n\n /* Mirrored attributes: */\n\n get rootMargin() {\n return this.getAttribute(ROOT_MARGIN_ATTR) || '0px 0px 0px 0px';\n }\n set rootMargin(val) {\n this.setAttribute(ROOT_MARGIN_ATTR, val || '0px 0px 0px 0px');\n }\n set activeBackgroundId(value) {\n if (value !== this.activeBackgroundId) {\n this.setAttribute(ACTIVE_BACKGROUND_ATTR, value);\n }\n }\n get activeBackgroundId() {\n return this.getAttribute(ACTIVE_BACKGROUND_ATTR);\n }\n get activeBackground() {\n return this.querySelector(\"[\".concat(BG_ID_ATTR, \"=\\\"\").concat(this.activeBackgroundId, \"\\\"]\"));\n }\n}\nfunction _createIntersectionObserver2() {\n _classPrivateFieldSet(this, _observer, new ElementIntersectionObserver(this.triggerElements, _classPrivateFieldGet(this, _handleTriggerChange), {\n root: this.viewportIntersectionRoot,\n rootMargin: this.rootMargin\n }));\n}\nfunction _disconnectIntersectionObserver2() {\n if (_classPrivateFieldGet(this, _observer)) {\n _classPrivateFieldGet(this, _observer).disconnect();\n }\n}\nfunction _prepareBackgrounds2() {\n var viewportPosition = this.viewportPosition;\n if (viewportPosition === VIEWPORT_POSITIONS.aboveViewport || viewportPosition === VIEWPORT_POSITIONS.belowViewport) {\n var triggerElements = this.triggerElements;\n if (triggerElements.length > 0) {\n var triggerIndex = viewportPosition === VIEWPORT_POSITIONS.aboveViewport ? triggerElements.length - 1 : 0;\n this.activeBackgroundId = triggerElements[triggerIndex].getAttribute(SHOW_BACKGROUND_ATTR);\n }\n }\n}\nfunction _updateBackgrounds2() {\n var activeBackgroundId = this.activeBackgroundId;\n var backgrounds = this.backgrounds;\n backgrounds.forEach((background, idx) => {\n var backgroundId = background.getAttribute(BG_ID_ATTR);\n var isActive = backgroundId === activeBackgroundId;\n var nextActive = _classPrivateMethodGet(this, _getBackgroundId, _getBackgroundId2).call(this, backgrounds, idx + 1) === activeBackgroundId;\n var prevActive = _classPrivateMethodGet(this, _getBackgroundId, _getBackgroundId2).call(this, backgrounds, idx - 1) === activeBackgroundId;\n var state;\n if (isActive) {\n state = 'ACTIVE';\n } else if (nextActive) {\n state = 'PREV';\n } else if (prevActive) {\n state = 'NEXT';\n }\n var currentState = background.getAttribute(STATE_ATTR);\n if (state !== currentState) {\n setAttribute(background, STATE_ATTR, state);\n }\n });\n}\nfunction _getBackgroundId2(backgrounds, index) {\n if (backgrounds[index]) {\n return backgrounds[index].getAttribute(BG_ID_ATTR);\n }\n}\n\nexport { Scrollhistorie as default };\n//# sourceMappingURL=index.esm.js.map\n","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';\nimport _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';\nimport { testReducedMotion, debounce } from '@nrk/dh-basis-common';\nimport scrollParent from 'scrollparent';\n\nfunction parseOffsetString(offsetString, target) {\n return offsetString.split(',').map(offset => offset.trim()).map(offset => {\n if (offset === '' || offset === 'auto') {\n return 'auto';\n } else if (offset.match(/^\\d*%$/)) {\n return offset;\n } else if (offset.match(/^(\\d*)px$/)) {\n return offset;\n } else {\n var _offset$match;\n var edge;\n if (offset.match(/start/)) {\n edge = 'start';\n } else if (offset.match(/end/)) {\n edge = 'end';\n }\n var threshold;\n var componentValue = (_offset$match = offset.match(/\\d+\\.?\\d*/)) === null || _offset$match === void 0 ? void 0 : _offset$match[0];\n if (componentValue) {\n threshold = parseFloat(componentValue);\n }\n return {\n target,\n edge,\n threshold\n };\n }\n });\n}\n\nvar horizontalProperties = {\n dimension: 'width',\n position: 'left',\n scrollDimension: 'scrollWidth',\n clientDimension: 'clientWidth',\n scrollPosition: 'scrollLeft',\n scrollPaddingStart: 'scrollPaddingLeft',\n scrollPaddingEnd: 'scrollPaddingRight'\n};\nvar verticalProperties = {\n dimension: 'height',\n position: 'top',\n scrollDimension: 'scrollHeight',\n clientDimension: 'clientHeight',\n scrollPosition: 'scrollTop',\n scrollPaddingStart: 'scrollPaddingTop',\n scrollPaddingEnd: 'scrollPaddingBottom'\n};\nfunction getDirectionPropNames(direction, source) {\n if (direction === 'horizontal') {\n return horizontalProperties;\n } else if (direction === 'vertical') {\n return verticalProperties;\n }\n var writingMode = getComputedStyle(source)['writing-mode'];\n var blockAxis = writingMode === 'horizontal-tb' ? 'vertical' : 'horizontal';\n if (direction === 'block') {\n return blockAxis === 'vertical' ? verticalProperties : horizontalProperties;\n } else if (direction === 'inline') {\n return blockAxis === 'vertical' ? horizontalProperties : verticalProperties;\n }\n return verticalProperties;\n}\n\nvar scrollOverflowRegex = /(auto|scroll)/;\n\n/*\n * Parse effective scroll offsets as defined in\n * https://drafts.csswg.org/scroll-animations-1/#effective-scroll-offsets-algorithm\n * */\nfunction calculateEffectiveScrollOffsets(scrollOffsets, source, direction, scrollPadding) {\n var effectiveScrollOffsets = [];\n var firstOffset = true;\n if (scrollOffsets.length === 0) {\n effectiveScrollOffsets.push(calculateEffectiveOffset(source, 'auto', direction, scrollPadding, firstOffset));\n firstOffset = false;\n effectiveScrollOffsets.push(calculateEffectiveOffset(source, 'auto', direction, scrollPadding, firstOffset));\n }\n if (scrollOffsets.length === 1) {\n effectiveScrollOffsets.push(calculateEffectiveOffset(source, 'auto', direction, scrollPadding, firstOffset));\n firstOffset = false;\n }\n for (var scrollOffset of scrollOffsets) {\n var effectiveOffset = calculateEffectiveOffset(source, scrollOffset, direction, scrollPadding, firstOffset);\n if (effectiveOffset === null) {\n return [];\n }\n effectiveScrollOffsets.push(effectiveOffset);\n firstOffset = false;\n }\n return effectiveScrollOffsets;\n}\nfunction calculateEffectiveOffset(source, offset, direction, scrollPadding, first) {\n if (typeof offset === 'string') {\n return calculateContainerBasedOffset(source, offset, direction, first);\n } else if (offset !== null && offset !== void 0 && offset.target) {\n return calculateElementBasedOffset(source, offset, direction, scrollPadding);\n }\n return null;\n}\n\n/*\n * Calculate container based offset as defiened in\n * https://drafts.csswg.org/scroll-animations-1/#container-based-offset-section\n */\nfunction calculateContainerBasedOffset(source, offset, direction, first) {\n if (!source || !hasLayoutBox(source)) {\n return null;\n }\n if (!isScrollContainer(source)) {\n return null;\n } else if (offset === 'auto') {\n if (first) {\n return getSourceStart();\n } else {\n return getSourceEnd(source, direction);\n }\n } else if (typeof offset === 'string' && offset.endsWith('px')) {\n return parseFloat(offset.substring(0, offset.length - 2));\n } else if (typeof offset === 'string' && offset.endsWith('%')) {\n var percentValue = parseFloat(offset.substring(0, offset.length - 1));\n var scrollRange = getSourceEnd(source, direction);\n return percentValue * scrollRange / 100.0;\n }\n}\n\n/* Calculate element based offsets as defined in\n * https://drafts.csswg.org/scroll-animations-1/#element-based-offset-section\n *\n * Deviating from standard by supporting scroll-padding\n * */\nfunction calculateElementBasedOffset(source, offset, direction, scrollPadding) {\n var {\n target,\n edge,\n threshold\n } = offset;\n var props = getDirectionPropNames(direction, source);\n if (!source || !hasLayoutBox(source)) {\n console.log('Missing or hidden source');\n return null;\n }\n if (!isScrollContainer(source) || !target || !hasLayoutBox(target)) {\n return null;\n }\n var ancestor = getNearestScrollContainerAncestor(target);\n if (!isSameScrollcontainer(ancestor, source)) {\n console.warn('Target does not have source as nearest scrollport', source, ancestor);\n return null;\n }\n var targetBox = getAxisAlignedTargetBox(source, target);\n var scrollOffset;\n if (edge === 'start') {\n var _scrollPadding$props$;\n var startEdge = targetBox[props.position] + targetBox[props.dimension] - ((_scrollPadding$props$ = scrollPadding === null || scrollPadding === void 0 ? void 0 : scrollPadding[props.scrollPaddingStart]) !== null && _scrollPadding$props$ !== void 0 ? _scrollPadding$props$ : 0);\n scrollOffset = startEdge - threshold * targetBox[props.dimension];\n } else if (edge === 'end') {\n var _scrollPadding$props$2;\n var endEdge = targetBox[props.position] - getClientDimension(source, props) + ((_scrollPadding$props$2 = scrollPadding === null || scrollPadding === void 0 ? void 0 : scrollPadding[props.scrollPaddingEnd]) !== null && _scrollPadding$props$2 !== void 0 ? _scrollPadding$props$2 : 0);\n scrollOffset = endEdge + threshold * targetBox[props.dimension];\n }\n return scrollOffset;\n}\nfunction isSameScrollcontainer(a, b) {\n return a === b ||\n // eslint-disable-next-line compat/compat\n a === document.documentElement && b === document.scrollingElement ||\n // eslint-disable-next-line compat/compat\n a === document.scrollingElement && b === document.documentElement;\n}\nfunction getAxisAlignedTargetBox(source, target) {\n var targetRect = target.getBoundingClientRect();\n if (source === document.scrollingElement) {\n return {\n top: targetRect.top + source.scrollTop,\n left: targetRect.left + source.scrollLeft,\n width: targetRect.width,\n height: targetRect.height\n };\n } else {\n var containerRect = source.getBoundingClientRect();\n return {\n top: targetRect.top - containerRect.top + source.scrollTop,\n left: targetRect.left - containerRect.left + source.scrollLeft,\n width: targetRect.width,\n height: targetRect.height\n };\n }\n}\nfunction getSourceStart() {\n return 0;\n}\nfunction getClientDimension(source, propNames) {\n if (source === document.scrollingElement) {\n // In Safari <=12 body is the scrolling element, while client height can be found on the root.\n return Math.min(document.scrollingElement[propNames.clientDimension], document.documentElement[propNames.clientDimension]);\n } else {\n return source[propNames.clientDimension];\n }\n}\nfunction getSourceEnd(source, direction) {\n var propNames = getDirectionPropNames(direction);\n var clientDimension = getClientDimension(source, propNames);\n return source[propNames.scrollDimension] - clientDimension;\n}\nfunction hasLayoutBox(element) {\n return Boolean(element.offsetWidth && element.offsetHeight);\n}\n\n/* Caches the result and does not update if styles change */\nfunction getNearestScrollContainerAncestor(target) {\n return scrollParent(target);\n}\nfunction isScrollContainer(source) {\n var computed = getComputedStyle(source);\n var overflowString = computed.overflow + computed['overflow-x'] + computed['overflow-y'];\n\n // eslint-disable-next-line compat/compat\n var rootScrollElement = document.scrollingElement || document.documentElement;\n return source === rootScrollElement || scrollOverflowRegex.test(overflowString);\n}\n\nfunction calculateScrollProgress(source, scrollOffsets, direction) {\n var propNames = getDirectionPropNames(direction, source);\n var offset = source[propNames.scrollPosition];\n var firstOffset = scrollOffsets[0];\n\n /* Ranges outside the first and last offset is not covered in the spec for progress. Clamping */\n var lastOffset = scrollOffsets[scrollOffsets.length - 1];\n if (offset < firstOffset) {\n return 0;\n } else if (offset >= lastOffset) {\n return 1;\n }\n var offsetIndex;\n for (var i = 0; i < scrollOffsets.length; i++) {\n var scrollOffset = scrollOffsets[i];\n if (scrollOffset <= offset) {\n offsetIndex = i;\n }\n }\n var startOffset = scrollOffsets[offsetIndex];\n var endOffset = scrollOffsets[offsetIndex + 1];\n var offsetWeight = 1 / (scrollOffsets.length - 1);\n var intervalProgress = (offset - startOffset) / (endOffset - startOffset);\n return (offsetIndex + intervalProgress) * offsetWeight;\n}\n\nfunction getScrollportHeight(source) {\n if (source === document.scrollingElement || source === document.documentElement) {\n // Use innerHeight when source is root element\n return window.innerHeight;\n } else {\n return source.clientHeight;\n }\n}\nfunction getScrollportWidth(source) {\n if (source === document.scrollingElement || source === document.documentElement) {\n // Use innerHeight when source is root element\n return window.innerWidth;\n } else {\n return source.clientWidth;\n }\n}\n\n/*\n * Calculate effective scroll paddings as pixel values.\n * Supports pixel and percentage values resolved relative to source.\n *\n * Viewport units are not supporteds\n *\n * https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-padding\n **/\nfunction calculateEffectiveScrollPaddings(scrollPaddings, source) {\n var result = {};\n for (var [key, value] of Object.entries(scrollPaddings)) {\n if (value.endsWith('px')) {\n result[key] = parseFloat(value.substring(0, value.length - 2));\n }\n if (value.endsWith('%')) {\n var p = parseFloat(value.substring(0, value.length - 1));\n if (['scrollPaddingTop', 'scrollPaddingBottom'].includes(key)) {\n result[key] = p * getScrollportHeight(source) / 100.0;\n } else if (['scrollPaddingLeft', 'scrollPaddingRight'].includes(key)) {\n result[key] = p * getScrollportWidth(source) / 100.0;\n }\n }\n }\n return result;\n}\n\n/*\n * Parse scroll padding shorthand string the same way padding strings:\n *\n * https://drafts.csswg.org/css-box-4/#propdef-padding\n * */\nfunction parseScrollPadding() {\n var paddingString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var padding = paddingString.split(' ').filter(Boolean);\n if (padding.length === 0) {\n return {\n scrollPaddingTop: '0px',\n scrollPaddingRight: '0px',\n scrollPaddingBottom: '0px',\n scrollPaddingLeft: '0px'\n };\n } else if (padding.length === 1) {\n return {\n scrollPaddingTop: padding[0],\n scrollPaddingRight: padding[0],\n scrollPaddingBottom: padding[0],\n scrollPaddingLeft: padding[0]\n };\n } else if (padding.length === 2) {\n var [vertical, horizontal] = padding;\n return {\n scrollPaddingTop: vertical,\n scrollPaddingRight: horizontal,\n scrollPaddingBottom: vertical,\n scrollPaddingLeft: horizontal\n };\n } else if (padding.length === 3) {\n var [top, _horizontal, bottom] = padding;\n return {\n scrollPaddingTop: top,\n scrollPaddingRight: _horizontal,\n scrollPaddingBottom: bottom,\n scrollPaddingLeft: _horizontal\n };\n } else if (padding.length === 4) {\n var [_top, right, _bottom, left] = padding;\n return {\n scrollPaddingTop: _top,\n scrollPaddingRight: right,\n scrollPaddingBottom: _bottom,\n scrollPaddingLeft: left\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; }\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 _effectiveScrollPaddings, _effectiveScrollTimelines, _isWatching, _observer, _debouncedUpdateOffsets, _targetPositions, _createIntersectionObserver, _disconnectIntersectionObserver, _handleVisibilityChange, _getTargetPositions, _needsEffectiveOffsetUpdate, _updateEffectiveOffsets, _startWatching, _stopWatching;\n return _effectiveScrollPaddings = /*#__PURE__*/new WeakMap(), _effectiveScrollTimelines = /*#__PURE__*/new WeakMap(), _isWatching = /*#__PURE__*/new WeakMap(), _observer = /*#__PURE__*/new WeakMap(), _debouncedUpdateOffsets = /*#__PURE__*/new WeakMap(), _targetPositions = /*#__PURE__*/new WeakMap(), _createIntersectionObserver = /*#__PURE__*/new WeakSet(), _disconnectIntersectionObserver = /*#__PURE__*/new WeakSet(), _handleVisibilityChange = /*#__PURE__*/new WeakMap(), _getTargetPositions = /*#__PURE__*/new WeakSet(), _needsEffectiveOffsetUpdate = /*#__PURE__*/new WeakSet(), _updateEffectiveOffsets = /*#__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 /*\n * Check if scroll offset targets has been affected by layout changes.\n */\n _classPrivateMethodInitSpec(this, _needsEffectiveOffsetUpdate);\n _classPrivateMethodInitSpec(this, _getTargetPositions);\n _classPrivateMethodInitSpec(this, _disconnectIntersectionObserver);\n _classPrivateMethodInitSpec(this, _createIntersectionObserver);\n // Padding around viewport from where scroll offsets start and end\n _classPrivateFieldInitSpec(this, _effectiveScrollPaddings, {\n writable: true,\n value: void 0\n });\n // Timelines the component keeps track of\n _classPrivateFieldInitSpec(this, _effectiveScrollTimelines, {\n writable: true,\n value: []\n });\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, _debouncedUpdateOffsets, {\n writable: true,\n value: void 0\n });\n // Cache of target positions. Used to check if layout has been changed.\n _classPrivateFieldInitSpec(this, _targetPositions, {\n writable: true,\n value: []\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 /* Update offsets for scroll linked animations */\n _classPrivateFieldInitSpec(this, _updateEffectiveOffsets, {\n writable: true,\n value: () => {\n // Record offset target positions so that we can detect changes in layout.\n _classPrivateFieldSet(this, _targetPositions, _classPrivateMethodGet(this, _getTargetPositions, _getTargetPositions2).call(this));\n _classPrivateFieldSet(this, _effectiveScrollPaddings, calculateEffectiveScrollPaddings(this.scrollPadding, this.source));\n _classPrivateFieldSet(this, _effectiveScrollTimelines, this.timelines.map(timeline => {\n return _objectSpread(_objectSpread({}, timeline), {}, {\n effectiveScrollOffsets: calculateEffectiveScrollOffsets(timeline.scrollOffsets, this.source, this.direction, _classPrivateFieldGet(this, _effectiveScrollPaddings))\n });\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 // eslint-disable-next-line compat/compat\n var isSupported = !!document.scrollingElement;\n if (!isSupported) {\n return;\n }\n var userPrefersReducedMotion = testReducedMotion();\n if (this.reduceMotion.type === 'auto' && userPrefersReducedMotion) {\n // Default to timeline end if user request reduced motion\n for (var timeline of this.timelines) {\n this.timelineUpdatedCallback(timeline.id, this.reduceMotion.defaultValue);\n }\n return;\n }\n _classPrivateFieldGet(this, _updateEffectiveOffsets).call(this);\n _classPrivateFieldSet(this, _debouncedUpdateOffsets, debounce(_classPrivateFieldGet(this, _updateEffectiveOffsets), 200));\n window.addEventListener('resize', _classPrivateFieldGet(this, _debouncedUpdateOffsets));\n this.addEventListener('dh-basis-size-changed', _classPrivateFieldGet(this, _debouncedUpdateOffsets));\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 window.removeEventListener('resize', _classPrivateFieldGet(this, _debouncedUpdateOffsets));\n this.removeEventListener('dh-basis-size-changed', _classPrivateFieldGet(this, _debouncedUpdateOffsets));\n _classPrivateMethodGet(this, _disconnectIntersectionObserver, _disconnectIntersectionObserver2).call(this);\n _classPrivateMethodGet(this, _stopWatching, _stopWatching2).call(this);\n }\n /* Override this method to perform updates */\n timelineUpdatedCallback(timelineId, progress) {\n console.log(timelineId, progress.toFixed(3));\n }\n get timelines() {\n return [{\n id: 'scrollprosent',\n scrollOffsets: [{\n target: this,\n edge: 'end',\n threshold: 0\n }, {\n target: this,\n edge: 'start',\n threshold: 0\n }]\n }];\n }\n get source() {\n // eslint-disable-next-line compat/compat\n return document.scrollingElement;\n }\n get direction() {\n /* block, inline, horizontal, vertical */\n return 'vertical';\n }\n\n /*\n * Set scroll padding as defined in https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-padding\n */\n get scrollPadding() {\n var paddingString = this.getAttribute('scroll-padding') || '0px 0px 0px 0px';\n return parseScrollPadding(paddingString);\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 };\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 */\n root: document,\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 _getTargetPositions2() {\n return this.timelines.flatMap(timeline => timeline.scrollOffsets).map(scrollOffset => scrollOffset.target).map(target => {\n var propNames = getDirectionPropNames(this.direction, this.source);\n return target.getBoundingClientRect()[propNames.position] + this.source[propNames.scrollPosition];\n });\n }\n function _needsEffectiveOffsetUpdate2() {\n var currentTargetPositions = _classPrivateMethodGet(this, _getTargetPositions, _getTargetPositions2).call(this);\n for (var [index, position] of currentTargetPositions.entries()) {\n if (_classPrivateFieldGet(this, _targetPositions)[index] !== position) {\n return true;\n }\n }\n }\n function _startWatching2() {\n if (_classPrivateFieldGet(this, _isWatching)) {\n return;\n }\n if (_classPrivateMethodGet(this, _needsEffectiveOffsetUpdate, _needsEffectiveOffsetUpdate2).call(this)) {\n _classPrivateFieldGet(this, _updateEffectiveOffsets).call(this);\n }\n var loop = () => {\n if (_classPrivateFieldGet(this, _isWatching)) {\n requestAnimationFrame(loop);\n } else {\n return;\n }\n for (var timeline of _classPrivateFieldGet(this, _effectiveScrollTimelines)) {\n var progress = calculateScrollProgress(this.source, timeline.effectiveScrollOffsets, this.direction);\n if (progress !== timeline.progress) {\n this.timelineUpdatedCallback(timeline.id, progress);\n }\n timeline.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 Scrollprosent extends ScrollanimasjonMixin(HTMLElement) {\n timelineUpdatedCallback(timelineId, progress) {\n var _this$targetElement;\n (_this$targetElement = this.targetElement) === null || _this$targetElement === void 0 || _this$targetElement.setAttribute('data-percent', progress);\n }\n get targetElement() {\n return this.querySelector('[data-percent]');\n }\n get timelines() {\n return [{\n id: 'scrollprosent',\n scrollOffsets: this.scrollOffsets\n }];\n }\n\n /*\n Get scroll offsets according to @scroll-timeline definition.\n */\n get scrollOffsets() {\n var _this$getAttribute;\n var offsetString = (_this$getAttribute = this.getAttribute('scroll-offsets')) !== null && _this$getAttribute !== void 0 ? _this$getAttribute : '';\n return parseOffsetString(offsetString, this);\n }\n}\n\nexport { ScrollanimasjonMixin, Scrollprosent, parseOffsetString };\n//# sourceMappingURL=index.esm.js.map\n","// extracted by mini-css-extract-plugin\nexport default {\"scroll-progress\":\"dhhs__scroll-progress\",\"scrollProgress\":\"dhhs__scroll-progress\"};","// extracted by mini-css-extract-plugin\nexport default {\"alt-text\":\"dhhs__alt-text\",\"altText\":\"dhhs__alt-text\"};","import Scrollhistorie from '@nrk/dh-basis-scrollhistorie'\nimport { closest } from '@nrk/dh-basis-common'\nimport { ScrollanimasjonMixin, parseOffsetString } from '@nrk/dh-basis-scrollanimasjon'\nimport scrollStyles from './media/shared/scroll-progress.module.css'\nimport altStyles from './cards/alt-text.module.css'\n\nexport class HistorieScroll extends ScrollanimasjonMixin(Scrollhistorie) {\n #scrollingTimeout\n\n connectedCallback() {\n super.connectedCallback()\n document.addEventListener('scroll', this.#handleScroll)\n this.addEventListener('focus', this.#handleFocus, true)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n document.removeEventListener('scroll', this.#handleScroll)\n this.removeEventListener('focus', this.#handleFocus, true)\n }\n\n #handleScroll = () => {\n if (this.#scrollingTimeout) {\n clearTimeout(this.#scrollingTimeout)\n } else {\n this.setAttribute('scrolling', '')\n }\n\n this.#scrollingTimeout = setTimeout(() => {\n this.removeAttribute('scrolling')\n this.#scrollingTimeout = null\n }, 300)\n }\n\n #handleFocus = (e) => {\n const backgroundElement = closest(e.target, '[data-background-id]')\n const altTextElement = e.target && closest(e.target, `.${altStyles.altText}`)\n let triggerElement\n if (backgroundElement) {\n const backgroundId = backgroundElement.getAttribute('data-background-id')\n if (this.activeBackgroundId !== backgroundId) {\n triggerElement = this.triggerElements.find(\n (elm) => elm.getAttribute('data-show-background') === backgroundId,\n )\n }\n } else if (altTextElement) {\n triggerElement = altTextElement.nextElementSibling\n }\n\n if (triggerElement && triggerElement.getAttribute('data-state') !== 'ACTIVE') {\n triggerElement.scrollIntoView({ behavior: 'smooth' })\n }\n }\n\n /*\n * Handle scroll animation timeline update.\n */\n timelineUpdatedCallback(timelineId, progress) {\n const elements = this.querySelectorAll(\n `[data-background-id=\"${timelineId}\"] .${scrollStyles.scrollProgress}`,\n )\n for (let element of elements) {\n if (element instanceof HTMLElement) {\n element.style.setProperty('--dhhs-progress', progress.toFixed(2))\n }\n }\n }\n\n /*\n * Define scroll animation timelines.\n * Placeholder cards with no text generates an animation timeline that starts when the card\n * enters the screen and ends when the card leaves the screen. The offsets are defined on the\n * card itself using a `data-scroll-offsets` attribute.\n *\n * Scroll offsets are defined based on the scroll animations draft:\n * https://drafts.csswg.org/scroll-animations-1/#scroll-timeline-offset-section\n *\n * The offset target is set to the element with `data-scroll-offsets` attribute.\n *\n * Ex: `end 0.0, start 1.0`.\n */\n public get timelines() {\n return Array.from(this.querySelectorAll('[data-scroll-offsets]'))\n .map((element: HTMLElement) => ({\n id: element.getAttribute('data-scroll-timeline'),\n scrollOffsets: parseOffsetString(element.getAttribute('data-scroll-offsets'), element),\n }))\n .reduce(groupOffsetsByTimeline, [])\n }\n}\n\nfunction groupOffsetsByTimeline(list, { id, scrollOffsets }) {\n let timeline = list.find((el) => el.id === id)\n if (!timeline) {\n timeline = {\n id,\n scrollOffsets: [],\n }\n list.push(timeline)\n }\n timeline.scrollOffsets.push(...scrollOffsets)\n return list\n}\n","import './polyfills.js'\nimport { getElementTag } from '@nrk/dh-server-libs/get-element-tag'\nimport { createTracker, Environment } from '@nrk/dh-snowplow'\nimport { EventSchema, ViewportEventKind } from '@nrk/snowplow-web'\nimport LevendeStillbilde from '@nrk/dh-basis-levende-stillbilde'\nimport StegvisVideo from '@nrk/dh-basis-stegvis-video'\n\nimport { HistorieScroll } from './components/app.ts'\n\nimport './components/vars.module.css'\nimport './components/app.module.css'\nimport './components/app.template-adjustments.module.css'\nimport './components/media/media.module.css'\nimport './components/media/media-types.module.css'\nimport './components/media/shared/object-fit.module.css'\nimport './components/media/shared/scroll-progress.module.css'\nimport './components/cards/cards.module.css'\nimport './components/cards/alt-text.module.css'\n\nfunction safeDefine(elementName, constructor) {\n if (typeof customElements.get(elementName) === 'undefined') {\n customElements.define(elementName, constructor)\n }\n}\n\nconst tag = getElementTag(__APP_NAME__, __APP_VERSION__)\n\nclass AppElement extends HTMLElement {\n name = tag\n #tracker\n #entryObserver\n #exitObserver\n\n connectedCallback() {\n this.#defineCustomElements()\n this.#createTracker()\n this.#startViewportLogger()\n this.addEventListener('dh-basis-scrollhistorie-trigger-activated', this.#handleTriggerActivated)\n }\n\n disconnectedCallback() {\n this.removeEventListener(\n 'dh-basis-scrollhistorie-trigger-activated',\n this.#handleTriggerActivated,\n )\n this.#stopViewportLogger()\n }\n\n async #defineCustomElements() {\n // Register custom elements as needed\n safeDefine('dhhs-scrollhistorie', HistorieScroll)\n safeDefine('dhhs-levende-stillbilde', LevendeStillbilde)\n safeDefine('dhhs-stegvis-video', StegvisVideo)\n\n if (\n this.features.video &&\n (typeof customElements.get('dhhs-article-player') === 'undefined' ||\n typeof customElements.get('dhhs-video') === 'undefined')\n ) {\n const { AutoplayOnActivePlayerElement, Video } = await import(\n './components/media/video.ts' /* webpackChunkName: \"dhhs-video\" */\n )\n safeDefine('dhhs-article-player', AutoplayOnActivePlayerElement)\n safeDefine('dhhs-video', Video)\n }\n\n if (this.features.lottie && typeof customElements.get('dhhs-stegvis-lottie') === 'undefined') {\n const stegvisLottie = (\n await import('@nrk/dh-basis-stegvis-lottie' /* webpackChunkName: \"dh-stegvis-lottie\" */)\n ).default\n\n safeDefine('dhhs-stegvis-lottie', stegvisLottie)\n }\n\n if (this.features.kart && typeof customElements.get('dhhs-kart') === 'undefined') {\n const kart = (\n await import('./lib/karthistorie-chunk.js' /* webpackChunkName: \"dh-karthistorie\" */)\n ).default\n\n safeDefine('dhhs-kart', kart)\n }\n }\n\n #createTracker() {\n if (process.env.DEV) {\n // @ts-ignore\n import('@nrk/dh-snowplow/mock').then(({ mock }) => mock()).catch(console.error)\n }\n\n this.#tracker = createTracker('dh-historiescroll', {\n environment: process.env.ENVIRONMENT as Environment,\n contentContext: {\n source: 'pp',\n id: this.dataset.selfId,\n },\n })\n }\n\n #handleTriggerActivated = (e) => {\n this.#tracker.trackSelfDescribingEvent({\n schema: EventSchema.StepEvent,\n data: {\n current: e.detail.triggerIndex + 1,\n total: this.cards.length,\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: '99000px 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 get cards() {\n return this.querySelectorAll('[data-show-background]')\n }\n}\n\nif (!customElements.get(tag)) {\n customElements.define(tag, AppElement)\n}\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","isScrolling","node","overflow","getComputedStyle","getPropertyValue","indexOf","scrollParent","HTMLElement","SVGElement","current","parentNode","document","scrollingElement","documentElement","getElementTag","name","version","split","_classExtractFieldDescriptor","receiver","privateMap","action","has","TypeError","get","_classPrivateFieldGet","descriptor","call","value","classExtractFieldDescriptor","_classPrivateFieldSet","set","writable","_typeof","o","Symbol","iterator","constructor","prototype","toPropertyKey","t","i","r","e","toPrimitive","String","Number","_defineProperty","obj","key","defineProperty","enumerable","configurable","ownKeys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","push","apply","_objectSpread","arguments","forEach","getOwnPropertyDescriptors","defineProperties","defaultConfig","rootMargin","threshold","root","ElementIntersectionObserver","elements","onChange","config","this","intersections","map","target","isIntersecting","ratio","intersectionObserver","IntersectionObserver","entries","entry","idx","splice","intersectionRatio","elm","observe","disconnect","unobserve","toggleAttribute","el","boolValue","hasAttribute","setAttribute","removeAttribute","nextValue","proto","match","closest","Element","matches","msMatchesSelector","webkitMatchesSelector","css","parentElement","toArray","nodeList","dispatchEvent","element","event","detail","undefined","ignore","concat","CustomEvent","bubbles","cancelable","createEvent","initCustomEvent","result","testReducedMotion","matchMedia","MAX_SAFE_INTEGER","withinRange","withinStops","currentTime","stops","targetStop","nrOfStops","uniqueStops","unique","targetTime","index","debounce","fn","delay","timeout","_len","args","Array","_key","clearTimeout","setTimeout","__defProp","__defProps","__getOwnPropDescs","__getOwnPropSymbols","__hasOwnProp","hasOwnProperty","__propIsEnum","propertyIsEnumerable","__defNormalProp","__spreadValues","a","b","prop","__spreadProps","ViewportEventKind","ViewportEventKind2","EventSchema","EventSchema3","EntitySchema","EntitySchema2","NrkBaseTracker","snowplow","_a","_b","_c","sharedEntities","trackerId","setSharedEntity","id","serviceId","environment","appVersion","appBuild","build","newTracker","collectorUrl","postPath","appId","plugins","platform","contexts","webPage","disableWebContext","stateStorageStrategy","disableLocalStorage","trackPageView","contentEntity","context","entitiesToContexts","trackSchemaEvent","schema","data","entities","trackSelfDescribingEvent","trackEvent","trackStructEvent","setUser","userId","setUserId","clearUser","removeSharedEntity","addPlugin","configuration","getSharedEntity","dataList","isArray","entityData","NrkPlayerTracker","setMedia","mediaId","details","content","source","kind","channelId","autoplay","setMediaAutoplay","setUnknownMedia","sendStartEvent","startTime","live","Error","start","max","floor","endTime","sendProgressEvent","sendPlaybackEvent","sendCompleteEvent","sendExitEvent","end","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","loaded","__webpack_modules__","m","amdO","n","getter","__esModule","d","definition","f","chunkId","Promise","all","reduce","promises","u","miniCssF","g","globalThis","Function","toStringTag","nmd","paths","children","p","loadStylesheet","resolve","reject","href","fullhref","existingLinkTags","getElementsByTagName","dataHref","tag","getAttribute","rel","existingStyleTags","findStylesheet","oldTag","linkTag","createElement","type","onerror","onload","errorType","realHref","err","code","request","removeChild","insertBefore","nextSibling","head","appendChild","createStylesheet","installedCssChunks","miniCss","then","ids","modules","runtime","j","installedChunkData","promise","import","race","ssrOrientation","mode","destroyed","mounted","listeners","portrait","landscape","opts","assign","orientation","getOrientation","update","handleUpdate","bind","throttledUpdate","now","mount","addEventListener","destroy","removeEventListener","innerHeight","innerWidth","listen","emit","getVh","getHeight","vendor","opera","toLowerCase","test","checkHasVhBug","style","setProperty","console","error","fixVhBug","staticSnowplowRoot","staticSnowplowMajorVersion","globalKey","getBundle","callback","cb","q","src","querySelector","script","async","loadOnce","APP_ID","createTracker","contentContext","bundle","trackerReady","host","getHost","eventQueue","trackOrQueue","nrknoBundle","NrknoUtils","contentContextId","Content","wait","trackers","whenReady","isResolved","warn","pop","catch","Snowplow","collect","trackStructuredEvent","STATE_ATTR","VIEWPORT_POSITION_ATTR","DISABLE_FORCED_ATTRIBUTES_ATTR","IS_PAUSED","AUTOPLAY_BLOCKED","READY_STATE","isVisible","child","offsetParent","LevendeStillbilde","super","_visibleVideoElement","isPaused","paused","_shouldPlay","_playVideo","_pauseVideo","_updateVisibleVideoElement","observedAttributes","connectedCallback","_setVideoAttributes","_setEventListeners","disconnectedCallback","_disconnecting","_removeEventListeners","attributeChangedCallback","prevValue","newValue","_updatePlayState","_preload","_handleResize","videoElements","_handlePlayChange","requestAnimationFrame","nextVisibleVideo","find","_shouldPreload","disableForcedAttributes","_this$_visibleVideoEl","readyState","state","viewportPosition","_this$_visibleVideoEl2","_this$_visibleVideoEl3","load","reducedMotion","videoElement","autoplayBlocked","play","pause","querySelectorAll","val","STOPS_ATTR","TARGET_STOP_ATTR","offsetWidth","offsetHeight","StegvisVideo","_startSeek","_handleClick","_onReadyStateChange","hasValue","_stateChanged","_viewportChanged","prevState","nextState","_gotoStart","_gotoEnd","_paused","_this$videoElement","inViewport","duration","isFinite","_enableSeekOnReducedMotion","_reducedMotionSeekEnabled","prevTime","loop","timestamp","invisibleVideoElements","video","invisibleVideo","decimals","multiplier","dt","buffer","ceil","speed","_calculateSpeed","direction","playbackRate","nextTime","round","nodeName","replace","trim","Boolean","toFixed","join","object","enumerableOnly","symbols","sym","dedupeId","dedupeMixin","mixin","mixinId","_base$_appliedMixins","_base$_appliedMixins2","_appliedMixins","extended","_classPrivateMethodInitSpec$1","privateSet","_checkPrivateRedeclaration$1","add","_classPrivateFieldInitSpec","privateCollection","_classPrivateMethodGet$1","VIEWPORT_POSITIONS","ViewportPositionMixin","Base","_observer","_createIntersectionObserver","_disconnectIntersectionObserver","_handleIntersectionChange","WeakMap","WeakSet","_ref","intersection","top","bottom","getBoundingClientRect","isAbove","_super$observedAttrib","_super$connectedCallb","_createIntersectionObserver2","_super$disconnectedCa","_disconnectIntersectionObserver2","viewportContainer","_document$scrollingEl","viewportIntersectionRoot","isViewport","_navigator","_navigator$userAgent","_navigator$userAgent$","isIFrame","location","parent","isChrome","includes","_classPrivateFieldGet2","_classPrivateFieldGet3","_classPrivateMethodInitSpec","_checkPrivateRedeclaration","_classStaticPrivateFieldSpecSet","classConstructor","_classCheckPrivateStaticAccess","_classCheckPrivateStaticFieldDescriptor","_classApplyDescriptorSet","AttributeBindingMixin","_class","_getTargetElements","_boundAttributes","AttributeBindingMixinDef","boundAttributes","attribute","targets","sourceAttribute","targetAttribute","sourceAttributeName","targetAttributeName","oldValue","_super$attributeChang","_classApplyDescriptorGet","targetElements","_classPrivateMethodGet","_getTargetElements2","from","ACTIVE_BACKGROUND_ATTR","ROOT_MARGIN_ATTR","BG_ID_ATTR","SHOW_BACKGROUND_ATTR","isTrigger","isBackground","_activeTriggerIndex","_handleTriggerChange","_prepareBackgrounds","_updateBackgrounds","_getBackgroundId","Scrollhistorie","activeIntersection","triggerElement","activeBackgroundId","_this$activeBackgroun","attributeName","attributeValue","activeBackground","triggerElements","triggerIndex","backgroundId","instance","backgrounds","_updateBackgrounds2","_prepareBackgrounds2","background","isActive","nextActive","_getBackgroundId2","prevActive","parseOffsetString","offsetString","offset","_offset$match","edge","componentValue","parseFloat","horizontalProperties","dimension","position","scrollDimension","clientDimension","scrollPosition","scrollPaddingStart","scrollPaddingEnd","verticalProperties","getDirectionPropNames","blockAxis","scrollOverflowRegex","calculateEffectiveScrollOffsets","scrollOffsets","scrollPadding","effectiveScrollOffsets","firstOffset","scrollOffset","calculateEffectiveOffset","effectiveOffset","first","hasLayoutBox","isScrollContainer","getSourceEnd","endsWith","substring","calculateContainerBasedOffset","props","log","ancestor","getNearestScrollContainerAncestor","targetBox","targetRect","scrollTop","left","scrollLeft","width","height","containerRect","getAxisAlignedTargetBox","_scrollPadding$props$","_scrollPadding$props$2","getClientDimension","calculateElementBasedOffset","propNames","min","computed","overflowString","calculateScrollProgress","offsetIndex","lastOffset","startOffset","getScrollportHeight","clientHeight","getScrollportWidth","clientWidth","ScrollanimasjonMixin","_effectiveScrollPaddings","_effectiveScrollTimelines","_isWatching","_debouncedUpdateOffsets","_targetPositions","_handleVisibilityChange","_getTargetPositions","_needsEffectiveOffsetUpdate","_updateEffectiveOffsets","_startWatching","_stopWatching","containerIntersection","_startWatching2","_stopWatching2","_getTargetPositions2","scrollPaddings","calculateEffectiveScrollPaddings","timelines","timeline","userPrefersReducedMotion","reduceMotion","timelineUpdatedCallback","defaultValue","timelineId","progress","padding","scrollPaddingTop","scrollPaddingRight","scrollPaddingBottom","scrollPaddingLeft","vertical","horizontal","_horizontal","_top","right","_bottom","parseScrollPadding","_unused","flatMap","_needsEffectiveOffsetUpdate2","currentTargetPositions","_scrollingTimeout","_classPrivateFieldLooseKey","_handleScroll","_handleFocus","HistorieScroll","_classPrivateFieldLooseBase","backgroundElement","altTextElement","altStyles","nextElementSibling","scrollIntoView","behavior","scrollStyles","groupOffsetsByTimeline","list","safeDefine","elementName","customElements","define","__APP_NAME__","__APP_VERSION__","_tracker","_entryObserver","_exitObserver","_defineCustomElements","_createTracker","_handleTriggerActivated","_startViewportLogger","_stopViewportLogger","AppElement","_stopViewportLogger2","_startViewportLogger2","_createTracker2","_defineCustomElements2","StepEvent","total","cards","features","JSON","parse","AutoplayOnActivePlayerElement","Video","lottie","default","kart","process","dataset","selfId","_entries$","ViewportEvent","Entry","_entries$2","Exit","_classPrivateFieldLoo","_classPrivateFieldLoo2"],"sourceRoot":""}