{"version":3,"file":"main-03596a471e665e9875c3.esm.js","mappings":"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","sources":["webpack://dh-animasjonsscroll/webpack/runtime/create fake namespace object","webpack://dh-animasjonsscroll/webpack/runtime/import chunk loading","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-basis-common/dh-basis-common.esm.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-server-libs/base-element.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-server-libs/get-element-tag.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-server-libs/src/base-element.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-server-libs/src/get-context-id.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-server-libs/src/get-element-tag.js","webpack://dh-animasjonsscroll/./node_modules/bezier-easing/src/index.js","webpack://dh-animasjonsscroll/./node_modules/debounce/index.js","webpack://dh-animasjonsscroll/./node_modules/scrollparent/scrollparent.js","webpack://dh-animasjonsscroll/webpack/bootstrap","webpack://dh-animasjonsscroll/webpack/runtime/amd options","webpack://dh-animasjonsscroll/webpack/runtime/compat get default export","webpack://dh-animasjonsscroll/webpack/runtime/define property getters","webpack://dh-animasjonsscroll/webpack/runtime/ensure chunk","webpack://dh-animasjonsscroll/webpack/runtime/get javascript chunk filename","webpack://dh-animasjonsscroll/webpack/runtime/get mini-css chunk filename","webpack://dh-animasjonsscroll/webpack/runtime/hasOwnProperty shorthand","webpack://dh-animasjonsscroll/webpack/runtime/make namespace object","webpack://dh-animasjonsscroll/webpack/runtime/publicPath","webpack://dh-animasjonsscroll/webpack/runtime/css loading","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js","webpack://dh-animasjonsscroll/./node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-basis-scrollanimasjon/dh-basis-scrollanimasjon.esm.js","webpack://dh-animasjonsscroll/./node_modules/@nrk/dh-basis-mixins/dh-basis-mixins.esm.js","webpack://dh-animasjonsscroll/./src/components/animasjonsscroll.module.css?9e8b","webpack://dh-animasjonsscroll/./src/components/animasjonsscroll.js","webpack://dh-animasjonsscroll/./src/components/media/prosentvis-video.js","webpack://dh-animasjonsscroll/./src/components/media/easing/easing-functions.ts","webpack://dh-animasjonsscroll/./src/components/media/prosentvis-bilde.ts","webpack://dh-animasjonsscroll/./src/components/media/easing/interpolation.ts","webpack://dh-animasjonsscroll/./src/components/media/prosentvis-overgang.module.css?94f2","webpack://dh-animasjonsscroll/./src/components/media/overgang/canvas-manager.js","webpack://dh-animasjonsscroll/./src/components/media/prosentvis-overgang.js","webpack://dh-animasjonsscroll/./src/client.css?f833","webpack://dh-animasjonsscroll/./src/client.js"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\nvar installChunk = (data) => {\n\tvar {ids, modules, runtime} = data;\n\t// add \"modules\" to the modules object,\n\t// then flag all \"ids\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tfor(moduleId in modules) {\n\t\tif(__webpack_require__.o(modules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = modules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\tfor(;i < ids.length; i++) {\n\t\tchunkId = ids[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[ids[i]] = 0;\n\t}\n\n}\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// import() chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[1]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = import(\"./\" + __webpack_require__.u(chunkId)).then(installChunk, (e) => {\n\t\t\t\t\t\tif(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t});\n\t\t\t\t\tvar promise = Promise.race([promise, new Promise((resolve) => (installedChunkData = installedChunks[chunkId] = [resolve]))])\n\t\t\t\t\tpromises.push(installedChunkData[1] = promise);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no external install chunk\n\n// no on chunks loaded","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 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(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; }\n\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 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\n _defineProperty(this, \"elements\", void 0);\n\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\n disconnect() {\n // Unregister trigger elements\n this.elements.forEach(elm => this.intersectionObserver.unobserve(elm)); // Disconnect intersection observer\n\n this.intersectionObserver.disconnect();\n }\n\n}\n\nfunction toggleAttribute(el, name, boolValue) {\n if (!el) {\n return;\n }\n\n var nextValue;\n\n if (typeof boolValue !== 'undefined') {\n nextValue = !!boolValue;\n } else {\n nextValue = el.hasAttribute(name);\n }\n\n if (nextValue) {\n el.setAttribute(name, '');\n } else {\n el.removeAttribute(name);\n }\n}\nfunction setAttribute(el, name, nextValue) {\n if (!el) {\n return;\n }\n\n if (nextValue) {\n el.setAttribute(name, nextValue);\n } else {\n el.removeAttribute(name);\n }\n}\nvar closest = (() => {\n var proto = typeof window === 'undefined' ? {} : window.Element.prototype;\n var match = proto.matches || proto.msMatchesSelector || proto.webkitMatchesSelector;\n\n if (proto.closest) {\n return (el, css) => el.closest(css);\n } else {\n return (el, css) => {\n for (; el; el = el.parentElement) {\n if (match.call(el, css)) return el;\n }\n\n return null;\n };\n }\n})();\nfunction addStyle(nodeName, css) {\n var key = \"style-\".concat(nodeName.toLowerCase());\n var min = css.replace(/\\/\\*[^!][^*]*\\*\\//g, '').replace(/\\s*(^|[:;,{}]|$)\\s*/g, '$1');\n document.getElementById(key) || document.head.insertAdjacentHTML('afterbegin', \"\"));\n}\nfunction toArray(nodeList) {\n return [].slice.call(nodeList);\n}\nfunction dispatchEvent(element, name) {\n var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var ignore = \"prevent_recursive_dispatch_maximum_callstack\".concat(name);\n var event;\n if (element[ignore]) return true; // We are already processing this event, so skip sending a new one\n else element[ignore] = true; // Add name to dispatching ignore\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(name, true, true, detail);\n } // IE reports incorrect event.defaultPrevented\n // but correct return value on element.dispatchEvent\n\n\n var result = element.dispatchEvent(event);\n element[ignore] = null; // Remove name from dispatching ignore\n\n return result; // Follow W3C standard for return value\n}\n\nfunction easeOutQuint(t) {\n return 1 + --t * t * t * t * t;\n}\n\nclass VerticalScroll {\n constructor(container) {\n _defineProperty(this, \"container\", void 0);\n\n this.container = container;\n }\n\n cancel() {\n this._cancelled = true;\n }\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\n var loop = currentTime => {\n if (this._cancelled) {\n return;\n }\n\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n\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 window.requestAnimationFrame(loop);\n }\n\n}\nclass HorizontalScroll {\n constructor(container) {\n _defineProperty(this, \"container\", void 0);\n\n this.container = container;\n }\n\n cancel() {\n this._cancelled = true;\n }\n\n to(left) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var callback = arguments.length > 2 ? arguments[2] : undefined;\n var from = this.container.scrollLeft;\n var distance = left - from;\n var startTime = null;\n\n var loop = currentTime => {\n if (this._cancelled) {\n return;\n }\n\n if (!startTime) {\n startTime = currentTime - 1;\n }\n\n var timeElapsed = currentTime - startTime;\n\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 window.requestAnimationFrame(loop);\n }\n\n}\n\nfunction testReducedMotion() {\n if (typeof window !== 'undefined') {\n return !!window.matchMedia && window.matchMedia('(prefers-reduced-motion)').matches;\n }\n\n return false;\n}\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\nfunction withinRange(current) {\n var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var stop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : MAX_SAFE_INTEGER;\n return current >= start && current <= stop;\n}\nfunction withinStops(currentTime, stops, targetStop) {\n var nrOfStops = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n var uniqueStops = stops.filter(unique);\n var targetTime = stops[targetStop];\n var prevTime = uniqueStops[uniqueStops.indexOf(targetTime) - nrOfStops];\n var nextTime = uniqueStops[uniqueStops.indexOf(targetTime) + nrOfStops];\n return withinRange(currentTime, prevTime, nextTime);\n}\n\nfunction unique(value, index, self) {\n return self.indexOf(value) === index;\n}\n\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 * */\n\nfunction loadImage(image) {\n if (image.loading === 'lazy') {\n image.loading = 'eager';\n }\n}\n\nfunction connectScrollContainerLazyLoad(container, images) {\n var containerIntersecting = false;\n var deferredImages = []; // eslint-disable-next-line compat/compat\n\n var containerObserver = new IntersectionObserver(entries => {\n containerIntersecting = entries === null || entries === void 0 ? void 0 : entries[0].isIntersecting;\n\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); // eslint-disable-next-line compat/compat\n\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\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\n for (var image of images) {\n imageObserver.observe(image);\n }\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\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=dh-basis-common.esm.js.map\n","module.exports = require('./src/base-element.js')\n","module.exports = require('./src/get-element-tag')\n","const { getContextId } = require('./get-context-id')\n\nlet _coreAnalyticsPromise = undefined\nfunction getCoreAnalytics() {\n if (!_coreAnalyticsPromise) {\n if ('coreAnalytics' in window) {\n _coreAnalyticsPromise = Promise.resolve(window['coreAnalytics'])\n } else {\n _coreAnalyticsPromise = import('@nrk/core-analytics' /* webpackChunkName: \"ca\" */).then(\n (m) => m.default\n )\n }\n }\n return _coreAnalyticsPromise\n}\n\nclass BaseElement extends HTMLElement {\n constructor() {\n super()\n this.sendError = this.sendError.bind(this)\n this.sendGaEvent = this.sendGaEvent.bind(this)\n }\n connectedCallback() {\n if (!this.name) throw Error('Name not provided')\n this.setupTracker()\n if (typeof this.render === 'function') this.render()\n }\n\n setupTracker() {\n this.coreAnalyticsTracker = new Promise((resolve) => {\n getCoreAnalytics().then((coreAnalytics) => {\n const tracker = coreAnalytics.create()\n\n tracker('initialize', {\n container: this,\n parentId: this.metadata.parentId || getContextId(window.location.href),\n ga: this.dataset.gaPropertyId,\n })\n\n tracker('context', {\n title: this.metadata.title,\n contentId: this.metadata.selfId,\n publishDate: this.metadata.published,\n })\n\n resolve(tracker)\n })\n })\n }\n\n async sendError(message) {\n // error reporter has been removed\n }\n\n async sendGaEvent(event) {\n const tracker = await this.coreAnalyticsTracker\n tracker('event', {\n ga: {\n eventCategory: `dh-modul-${this.name}`,\n ...event,\n },\n })\n }\n\n get metadata() {\n return this.dataset.metadata ? JSON.parse(this.dataset.metadata) : {}\n }\n\n get preloadedState() {\n return this.dataset.preloadedState ? JSON.parse(this.dataset.preloadedState) : null\n }\n\n get errorTracking() {\n return {\n url: '',\n enabled: false,\n }\n }\n}\n\nmodule.exports.BaseElement = BaseElement\n","const POLOPOLY_ID_REGEX = /[1-9]{1,2}\\.\\d+/g\n\nfunction extractPolopolyIdFromString(str) {\n const matches = str.match(POLOPOLY_ID_REGEX)\n if (matches && matches.length) {\n return matches[0]\n }\n return null\n}\n\nfunction getContextId(url) {\n return extractPolopolyIdFromString(url)\n}\n\nmodule.exports.getContextId = getContextId\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","/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nfunction A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\nfunction B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; }\nfunction C (aA1) { return 3.0 * aA1; }\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\nfunction binarySubdivide (aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate (aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing (x) {\n return x;\n}\n\nmodule.exports = function bezier (mX1, mY1, mX2, mY2) {\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if (mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX (aX) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing (x) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if (x === 0) {\n return 0;\n }\n if (x === 1) {\n return 1;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n};\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","(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 var regex = /(auto|scroll)/;\n\n var parents = function (node, ps) {\n if (node.parentNode === null) { return ps; }\n\n return parents(node.parentNode, ps.concat([node]));\n };\n\n var style = function (node, prop) {\n return getComputedStyle(node, null).getPropertyValue(prop);\n };\n\n var overflow = function (node) {\n return style(node, \"overflow\") + style(node, \"overflow-y\") + style(node, \"overflow-x\");\n };\n\n var scroll = function (node) {\n return regex.test(overflow(node));\n };\n\n var scrollParent = function (node) {\n if (!(node instanceof HTMLElement || node instanceof SVGElement)) {\n return ;\n }\n\n var ps = parents(node.parentNode, []);\n\n for (var i = 0; i < ps.length; i += 1) {\n if (scroll(ps[i])) {\n return ps[i];\n }\n }\n\n return document.scrollingElement || document.documentElement;\n };\n\n return scrollParent;\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\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"208\":\"dh-prosentvis-lottie\",\"371\":\"dh-preview-iframe\",\"462\":\"dh-prosentvis-gltf\",\"537\":\"ca\"}[chunkId] || chunkId) + \"-chunk-\" + {\"208\":\"3d3f1027215a6581824c\",\"371\":\"ad54d3173a24da251316\",\"446\":\"62995f8f5675f744d7a2\",\"462\":\"98ba5c2d62bf764a1cb7\",\"537\":\"e825284dcb78d0ca0efc\",\"608\":\"4fbe2d0539c801267155\"}[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 + \"-\" + \"663e3d56e30d6b744574\" + \".css\";\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"https://static.nrk.no/dh/module/animasjonsscroll/static/\";","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 === 'load' ? 'missing' : 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(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.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\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\t179: 0\n};\n\n__webpack_require__.f.miniCss = (chunkId, promises) => {\n\tvar cssChunks = {\"371\":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","export default function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) {\n return typeof obj;\n } : function (obj) {\n return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n }, _typeof(obj);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\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}","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}","import _defineProperty from '@babel/runtime/helpers/defineProperty';\nimport _classPrivateFieldGet from '@babel/runtime/helpers/classPrivateFieldGet';\nimport _classPrivateFieldSet from '@babel/runtime/helpers/classPrivateFieldSet';\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\n var edge;\n\n if (offset.match(/start/)) {\n edge = 'start';\n } else if (offset.match(/end/)) {\n edge = 'end';\n }\n\n var threshold;\n var componentValue = (_offset$match = offset.match(/\\d+\\.?\\d*/)) === null || _offset$match === void 0 ? void 0 : _offset$match[0];\n\n if (componentValue) {\n threshold = parseFloat(componentValue);\n }\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\n var writingMode = getComputedStyle(source)['writing-mode'];\n var blockAxis = writingMode === 'horizontal-tb' ? 'vertical' : 'horizontal';\n\n if (direction === 'block') {\n return blockAxis === 'vertical' ? verticalProperties : horizontalProperties;\n } else if (direction === 'inline') {\n return blockAxis === 'vertical' ? horizontalProperties : verticalProperties;\n }\n\n return verticalProperties;\n}\n\nvar scrollOverflowRegex = /(auto|scroll)/;\n/*\n * Parse effective scroll offsets as defined in\n * https://drafts.csswg.org/scroll-animations-1/#effective-scroll-offsets-algorithm\n * */\n\nfunction calculateEffectiveScrollOffsets(scrollOffsets, source, direction, scrollPadding) {\n var effectiveScrollOffsets = [];\n var firstOffset = true;\n\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\n if (scrollOffsets.length === 1) {\n effectiveScrollOffsets.push(calculateEffectiveOffset(source, 'auto', direction, scrollPadding, firstOffset));\n firstOffset = false;\n }\n\n for (var scrollOffset of scrollOffsets) {\n var effectiveOffset = calculateEffectiveOffset(source, scrollOffset, direction, scrollPadding, firstOffset);\n\n if (effectiveOffset === null) {\n return [];\n }\n\n effectiveScrollOffsets.push(effectiveOffset);\n firstOffset = false;\n }\n\n return effectiveScrollOffsets;\n}\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\n return null;\n}\n/*\n * Calculate container based offset as defiened in\n * https://drafts.csswg.org/scroll-animations-1/#container-based-offset-section\n */\n\n\nfunction calculateContainerBasedOffset(source, offset, direction, first) {\n if (!source || !hasLayoutBox(source)) {\n return null;\n }\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/* 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 * */\n\nfunction calculateElementBasedOffset(source, offset, direction, scrollPadding) {\n var {\n target,\n edge,\n threshold\n } = offset;\n var props = getDirectionPropNames(direction, source);\n\n if (!source || !hasLayoutBox(source)) {\n console.log('Missing or hidden source');\n return null;\n }\n\n if (!isScrollContainer(source) || !target || !hasLayoutBox(target)) {\n return null;\n }\n\n var ancestor = getNearestScrollContainerAncestor(target);\n\n if (!isSameScrollcontainer(ancestor, source)) {\n console.warn('Target does not have source as nearest scrollport', source, ancestor);\n return null;\n }\n\n var targetBox = getAxisAlignedTargetBox(source, target);\n var scrollOffset;\n\n if (edge === 'start') {\n var _scrollPadding$props$;\n\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\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\n return clamp(scrollOffset, getSourceStart(), getSourceEnd(source, direction));\n}\n\nfunction isSameScrollcontainer(a, b) {\n return a === b || // eslint-disable-next-line compat/compat\n a === document.documentElement && b === document.scrollingElement || // eslint-disable-next-line compat/compat\n a === document.scrollingElement && b === document.documentElement;\n}\n\nfunction getAxisAlignedTargetBox(source, target) {\n var targetRect = target.getBoundingClientRect();\n\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}\n\nfunction clamp(value, min, max) {\n return Math.max(Math.min(value, max), min);\n}\n\nfunction getSourceStart() {\n return 0;\n}\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}\n\nfunction getSourceEnd(source, direction) {\n var propNames = getDirectionPropNames(direction);\n var clientDimension = getClientDimension(source, propNames);\n return source[propNames.scrollDimension] - clientDimension;\n}\n\nfunction hasLayoutBox(element) {\n return Boolean(element.offsetWidth && element.offsetHeight);\n}\n/* Caches the result and does not update if styles change */\n\n\nfunction getNearestScrollContainerAncestor(target) {\n return scrollParent(target);\n}\n\nfunction isScrollContainer(source) {\n var computed = getComputedStyle(source);\n var overflowString = computed.overflow + computed['overflow-x'] + computed['overflow-y']; // eslint-disable-next-line compat/compat\n\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 /* Ranges outside the first and last offset is not covered in the spec for progress. Clamping */\n\n var lastOffset = scrollOffsets[scrollOffsets.length - 1];\n\n if (offset < firstOffset) {\n return 0;\n } else if (offset >= lastOffset) {\n return 1;\n }\n\n var offsetIndex;\n\n for (var i = 0; i < scrollOffsets.length; i++) {\n var scrollOffset = scrollOffsets[i];\n\n if (scrollOffset <= offset) {\n offsetIndex = i;\n }\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\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\n if (value.endsWith('%')) {\n var p = parseFloat(value.substring(0, value.length - 1));\n\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\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\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(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; }\n\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; }\n\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\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 */\n\nfunction ScrollanimasjonMixin(Base) {\n var _effectiveScrollPaddings, _effectiveScrollTimelines, _isWatching, _reducedMotion, _observer, _debouncedUpdateOffsets, _targetPositions, _createIntersectionObserver, _disconnectIntersectionObserver, _handleVisibilityChange, _getTargetPositions, _needsEffectiveOffsetUpdate, _updateEffectiveOffsets, _startWatching, _stopWatching;\n\n return _effectiveScrollPaddings = /*#__PURE__*/new WeakMap(), _effectiveScrollTimelines = /*#__PURE__*/new WeakMap(), _isWatching = /*#__PURE__*/new WeakMap(), _reducedMotion = /*#__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\n _classPrivateMethodInitSpec(this, _stopWatching);\n\n _classPrivateMethodInitSpec(this, _startWatching);\n\n _classPrivateMethodInitSpec(this, _needsEffectiveOffsetUpdate);\n\n _classPrivateMethodInitSpec(this, _getTargetPositions);\n\n _classPrivateMethodInitSpec(this, _disconnectIntersectionObserver);\n\n _classPrivateMethodInitSpec(this, _createIntersectionObserver);\n\n _classPrivateFieldInitSpec(this, _effectiveScrollPaddings, {\n writable: true,\n value: void 0\n });\n\n _classPrivateFieldInitSpec(this, _effectiveScrollTimelines, {\n writable: true,\n value: []\n });\n\n _classPrivateFieldInitSpec(this, _isWatching, {\n writable: true,\n value: false\n });\n\n _classPrivateFieldInitSpec(this, _reducedMotion, {\n writable: true,\n value: testReducedMotion()\n });\n\n _classPrivateFieldInitSpec(this, _observer, {\n writable: true,\n value: void 0\n });\n\n _classPrivateFieldInitSpec(this, _debouncedUpdateOffsets, {\n writable: true,\n value: void 0\n });\n\n _classPrivateFieldInitSpec(this, _targetPositions, {\n writable: true,\n value: []\n });\n\n _classPrivateFieldInitSpec(this, _handleVisibilityChange, {\n writable: true,\n value: _ref => {\n var [containerIntersection] = _ref;\n\n if (containerIntersection.isIntersecting) {\n _classPrivateMethodGet(this, _startWatching, _startWatching2).call(this);\n } else {\n _classPrivateMethodGet(this, _stopWatching, _stopWatching2).call(this);\n }\n }\n });\n\n _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\n _classPrivateFieldSet(this, _effectiveScrollPaddings, calculateEffectiveScrollPaddings(this.scrollPadding, this.source));\n\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\n connectedCallback() {\n var _super$connectedCallb;\n\n (_super$connectedCallb = super.connectedCallback) === null || _super$connectedCallb === void 0 ? void 0 : _super$connectedCallb.call(this); // eslint-disable-next-line compat/compat\n\n var isSupported = !!document.scrollingElement;\n\n if (!isSupported) {\n return;\n }\n\n _classPrivateFieldSet(this, _reducedMotion, testReducedMotion());\n\n if (_classPrivateFieldGet(this, _reducedMotion)) {\n // Default to timeline end if user request reduced motion\n for (var timeline of this.timelines) {\n this.timelineUpdatedCallback(timeline.id, 1);\n }\n\n return;\n }\n\n _classPrivateFieldGet(this, _updateEffectiveOffsets).call(this);\n\n _classPrivateFieldSet(this, _debouncedUpdateOffsets, debounce(_classPrivateFieldGet(this, _updateEffectiveOffsets), 200));\n\n window.addEventListener('resize', _classPrivateFieldGet(this, _debouncedUpdateOffsets));\n this.addEventListener('dh-basis-size-changed', _classPrivateFieldGet(this, _debouncedUpdateOffsets));\n\n _classPrivateMethodGet(this, _createIntersectionObserver, _createIntersectionObserver2).call(this);\n }\n\n disconnectedCallback() {\n var _super$disconnectedCa;\n\n (_super$disconnectedCa = super.disconnectedCallback) === null || _super$disconnectedCa === void 0 ? void 0 : _super$disconnectedCa.call(this);\n window.removeEventListener('resize', _classPrivateFieldGet(this, _debouncedUpdateOffsets));\n this.removeEventListener('dh-basis-size-changed', _classPrivateFieldGet(this, _debouncedUpdateOffsets));\n\n _classPrivateMethodGet(this, _disconnectIntersectionObserver, _disconnectIntersectionObserver2).call(this);\n\n _classPrivateMethodGet(this, _stopWatching, _stopWatching2).call(this);\n }\n\n /* Override this method to perform updates */\n timelineUpdatedCallback(timelineId, progress) {\n console.log(timelineId, progress.toFixed(3));\n }\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\n get source() {\n // eslint-disable-next-line compat/compat\n return document.scrollingElement;\n }\n\n get direction() {\n /* block, inline, horizontal, vertical */\n return 'vertical';\n }\n /*\n * Set scroll padding as defined in https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-padding\n */\n\n\n get scrollPadding() {\n var paddingString = this.getAttribute('scroll-padding') || '0px 0px 0px 0px';\n return parseScrollPadding(paddingString);\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\n _classPrivateFieldGet(this, _observer).observe(this);\n }\n\n function _disconnectIntersectionObserver2() {\n if (_classPrivateFieldGet(this, _observer)) {\n _classPrivateFieldGet(this, _observer).disconnect();\n }\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\n function _needsEffectiveOffsetUpdate2() {\n var currentTargetPositions = _classPrivateMethodGet(this, _getTargetPositions, _getTargetPositions2).call(this);\n\n for (var [index, position] of currentTargetPositions.entries()) {\n if (_classPrivateFieldGet(this, _targetPositions)[index] !== position) {\n return true;\n }\n }\n }\n\n function _startWatching2() {\n if (_classPrivateFieldGet(this, _isWatching)) {\n return;\n }\n\n if (_classPrivateMethodGet(this, _needsEffectiveOffsetUpdate, _needsEffectiveOffsetUpdate2).call(this)) {\n _classPrivateFieldGet(this, _updateEffectiveOffsets).call(this);\n }\n\n var loop = () => {\n if (_classPrivateFieldGet(this, _isWatching)) {\n requestAnimationFrame(loop);\n } else {\n return;\n }\n\n for (var timeline of _classPrivateFieldGet(this, _effectiveScrollTimelines)) {\n var progress = calculateScrollProgress(this.source, timeline.effectiveScrollOffsets, this.direction);\n\n if (progress !== timeline.progress) {\n this.timelineUpdatedCallback(timeline.id, progress);\n }\n\n timeline.progress = progress;\n }\n };\n\n _classPrivateFieldSet(this, _isWatching, true);\n\n requestAnimationFrame(loop);\n }\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\n (_this$targetElement = this.targetElement) === null || _this$targetElement === void 0 ? void 0 : _this$targetElement.setAttribute('data-percent', progress);\n }\n\n get targetElement() {\n return this.querySelector('[data-percent]');\n }\n\n get timelines() {\n return [{\n id: 'scrollprosent',\n scrollOffsets: this.scrollOffsets\n }];\n }\n /*\n Get scroll offsets according to @scroll-timeline definition.\n */\n\n\n get scrollOffsets() {\n var _this$getAttribute;\n\n var offsetString = (_this$getAttribute = this.getAttribute('scroll-offsets')) !== null && _this$getAttribute !== void 0 ? _this$getAttribute : '';\n return parseOffsetString(offsetString, this);\n }\n\n}\n\nexport { ScrollanimasjonMixin, Scrollprosent, parseOffsetString };\n//# sourceMappingURL=dh-basis-scrollanimasjon.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; }\n\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; }\n\nvar dedupeId = 0;\n/**\n * @template {HTMLElement} BaseClass\n * @param {(base: BaseClass) => BaseClass} mixin\n */\n\nfunction dedupeMixin(mixin) {\n var mixinId = dedupeId++;\n return base => {\n var _base$_appliedMixins, _base$_appliedMixins2;\n\n if ((_base$_appliedMixins = base._appliedMixins) !== null && _base$_appliedMixins !== void 0 && _base$_appliedMixins[mixinId]) {\n return base;\n }\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); }\n\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration$1(obj, privateMap); privateMap.set(obj, value); }\n\nfunction _checkPrivateRedeclaration$1(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\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 * 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 */\n\nfunction isViewport(viewportContainer) {\n return (// eslint-disable-next-line compat/compat\n viewportContainer === document.scrollingElement || viewportContainer === document.documentElement\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 */\n\n\nfunction _ViewportPositionMixin(Base) {\n var _observer, _createIntersectionObserver, _disconnectIntersectionObserver, _handleIntersectionChange;\n\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\n _classPrivateMethodInitSpec$1(this, _disconnectIntersectionObserver);\n\n _classPrivateMethodInitSpec$1(this, _createIntersectionObserver);\n\n _classPrivateFieldInitSpec(this, _observer, {\n writable: true,\n value: void 0\n });\n\n _classPrivateFieldInitSpec(this, _handleIntersectionChange, {\n writable: true,\n value: _ref => {\n var [intersection] = _ref;\n\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 bottom = this.getBoundingClientRect().bottom;\n var isAbove = bottom <= 0;\n this.viewportPosition = isAbove ? VIEWPORT_POSITIONS.aboveViewport : VIEWPORT_POSITIONS.belowViewport;\n }\n }\n }\n });\n }\n\n static get observedAttributes() {\n var _super$observedAttrib;\n\n return [...((_super$observedAttrib = super.observedAttributes) !== null && _super$observedAttrib !== void 0 ? _super$observedAttrib : []), VIEWPORT_POSITION_ATTR];\n }\n\n connectedCallback() {\n var _super$connectedCallb;\n\n (_super$connectedCallb = super.connectedCallback) === null || _super$connectedCallb === void 0 ? void 0 : _super$connectedCallb.call(this);\n\n _classPrivateMethodGet$1(this, _createIntersectionObserver, _createIntersectionObserver2).call(this);\n }\n\n disconnectedCallback() {\n var _super$disconnectedCa;\n\n (_super$disconnectedCa = super.disconnectedCallback) === null || _super$disconnectedCa === void 0 ? void 0 : _super$disconnectedCa.call(this);\n\n _classPrivateMethodGet$1(this, _disconnectIntersectionObserver, _disconnectIntersectionObserver2).call(this);\n }\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 /*\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 // eslint-disable-next-line compat/compat\n return (_document$scrollingEl = document.scrollingElement) !== null && _document$scrollingEl !== void 0 ? _document$scrollingEl : document.documentElement;\n }\n /**\n * Get the intersection root\n * @returns {null|Element|HTMLElement|Document}\n */\n\n\n get viewportIntersectionRoot() {\n var viewportContainer = this.viewportContainer;\n\n if (isViewport(viewportContainer)) {\n var isIFrame = window.location !== window.parent.location;\n\n if (isIFrame) {\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 * Position of this element relative to the viewport.\n *\n * @type {'ABOVE-VIEWPORT' | 'IN-VIEWPORT' | 'BELOW-VIEWPORT' }\n */\n\n\n set viewportPosition(value) {\n var currentValue = this.getAttribute(VIEWPORT_POSITION_ATTR);\n\n if (value !== currentValue) {\n this.setAttribute(VIEWPORT_POSITION_ATTR, value);\n }\n }\n /**\n * Position of this element relative to the viewport.\n *\n * @type {'ABOVE-VIEWPORT' | 'IN-VIEWPORT' | 'BELOW-VIEWPORT' }\n */\n\n\n get viewportPosition() {\n return this.getAttribute(VIEWPORT_POSITION_ATTR);\n }\n\n };\n\n function _createIntersectionObserver2() {\n // eslint-disable-next-line compat/compat\n _classPrivateFieldSet(this, _observer, new IntersectionObserver(_classPrivateFieldGet(this, _handleIntersectionChange), {\n threshold: [0, 0.1, 0.5, 0.9, 1],\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\n _classPrivateFieldGet(this, _observer).observe(this);\n }\n\n function _disconnectIntersectionObserver2() {\n var _classPrivateFieldGet2, _classPrivateFieldGet3;\n\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 * @template {HTMLElement} BaseClass\n * @param {BaseClass} Base */\n\n\nvar ViewportPositionMixin = dedupeMixin(_ViewportPositionMixin);\n\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\n\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\"Cannot initialize the same private elements twice on an object\"); } }\n\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\"attempted to get private field on non-instance\"); } return fn; }\n\nfunction _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, \"get\"); return _classApplyDescriptorGet(receiver, descriptor); }\n\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\n\nfunction _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, \"set\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\n\nfunction _classCheckPrivateStaticFieldDescriptor(descriptor, action) { if (descriptor === undefined) { throw new TypeError(\"attempted to \" + action + \" private static field before its declaration\"); } }\n\nfunction _classCheckPrivateStaticAccess(receiver, classConstructor) { if (receiver !== classConstructor) { throw new TypeError(\"Private static access of wrong provenance\"); } }\n\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 * @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 */\n\nfunction _AttributeBindingMixin(Base) {\n var _class, _getTargetElements, _boundAttributes;\n\n return _getTargetElements = /*#__PURE__*/new WeakSet(), (_class = class AttributeBindingMixinDef extends Base {\n constructor() {\n super(...arguments);\n\n _classPrivateMethodInitSpec(this, _getTargetElements);\n }\n\n /**\n * Configure the bound attributes.\n *\n * @returns {BoundAttributeConfig[]}\n */\n static get boundAttributes() {\n return [];\n }\n\n static get observedAttributes() {\n var _super$observedAttrib;\n\n var boundAttributes = {}; // Parse and store configuration for faster lookup\n\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\n var [sourceAttribute, targetAttribute = sourceAttribute] = attribute.split(':');\n boundAttributes[sourceAttribute] = {\n sourceAttributeName: sourceAttribute,\n targetAttributeName: targetAttribute,\n targets\n };\n }\n\n _classStaticPrivateFieldSpecSet(AttributeBindingMixinDef, _class, _boundAttributes, boundAttributes); // Observe bound attributes\n\n\n return [...((_super$observedAttrib = super.observedAttributes) !== null && _super$observedAttrib !== void 0 ? _super$observedAttrib : []), ...Object.keys(boundAttributes)];\n }\n\n attributeChangedCallback(name, oldValue, newValue) {\n var _super$attributeChang;\n\n (_super$attributeChang = super.attributeChangedCallback) === null || _super$attributeChang === void 0 ? void 0 : _super$attributeChang.call(this, name, oldValue, newValue);\n\n if (newValue === oldValue) {\n return;\n }\n\n var boundAttributes = _classStaticPrivateFieldSpecGet(AttributeBindingMixinDef, _class, _boundAttributes);\n\n if (name in boundAttributes) {\n var configuration = boundAttributes[name];\n var targets = configuration.targets;\n\n var targetElements = _classPrivateMethodGet(this, _getTargetElements, _getTargetElements2).call(this, targets);\n\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\n }, _boundAttributes = {\n writable: true,\n value: void 0\n }, _class);\n\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 * @template {HTMLElement} BaseClass\n * @param {BaseClass} Base\n */\n\n\nvar AttributeBindingMixin = dedupeMixin(_AttributeBindingMixin);\n\nexport { AttributeBindingMixin, VIEWPORT_POSITIONS, VIEWPORT_POSITION_ATTR, ViewportPositionMixin };\n//# sourceMappingURL=dh-basis-mixins.esm.js.map\n","// extracted by mini-css-extract-plugin\nexport default {\"animasjonsscroll\":\"dh-ans-animasjonsscroll--eJ4sF\",\"vertical\":\"dh-ans-vertical--ag8pn\",\"horizontal\":\"dh-ans-horizontal--HcKWL\"};","import { Scrollprosent } from '@nrk/dh-basis-scrollanimasjon'\nimport { ViewportPositionMixin } from '@nrk/dh-basis-mixins'\nimport styles from './animasjonsscroll.module.css'\nimport './animasjonsscroll.template-adjustments.module.css'\n\nexport default class Animasjonsscroll extends ViewportPositionMixin(Scrollprosent) {\n connectedCallback() {\n super.connectedCallback()\n this._class = styles.animasjonsscroll\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n }\n}\n","/* eslint-disable promise/catch-or-return, promise/always-return */\nimport { testReducedMotion, toArray } from '@nrk/dh-basis-common'\n\nconst isVisible = (child) => child.offsetWidth > 0 || child.offsetHeight > 0\n\nexport default class ProsentvisVideo extends HTMLElement {\n #intersectionObserver\n\n static get observedAttributes() {\n return ['data-percent']\n }\n\n connectedCallback() {\n this._reducedMotion = testReducedMotion()\n\n /* Preload video when close to viewport */\n this.#intersectionObserver = new IntersectionObserver(\n (intersectionEntries) => {\n if (intersectionEntries?.[0]?.isIntersecting) {\n const videos = this.querySelectorAll('video')\n for (const video of videos) {\n if (window.getComputedStyle(video).display !== 'none') {\n video.setAttribute('preload', 'auto')\n }\n }\n\n this.#intersectionObserver.disconnect()\n this.#intersectionObserver = null\n }\n },\n {\n threshold: 0,\n rootMargin: '3000px',\n }\n )\n this.#intersectionObserver.observe(this)\n }\n\n disconnectedCallback() {\n this.#intersectionObserver?.disconnect()\n }\n\n attributeChangedCallback(name, prevValue, newValue) {\n const valueChanged = prevValue !== newValue\n if (!valueChanged) {\n return\n }\n\n if (name === 'data-percent') {\n this._prosentChanged()\n }\n }\n\n async _prosentChanged() {\n await this._enableSeek()\n const videoElement = this.videoElement\n\n if (!videoElement || !videoElement.duration || this._reducedMotion) {\n return\n }\n\n videoElement.currentTime = this.prosent * videoElement.duration\n }\n\n _enableSeek() {\n const videoElement = this.videoElement\n if (videoElement.hasAttribute('data-seek-enabled')) {\n return Promise.resolve()\n }\n\n return (\n (videoElement.play() || Promise.resolve(true))\n .then(() => {\n videoElement.pause()\n videoElement.setAttribute('data-seek-enabled', 'true')\n })\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n .catch((e) => {\n // Ignore error\n })\n )\n }\n\n get videoElement() {\n return toArray(this.children)\n .filter((child) => child.nodeName === 'VIDEO')\n .find(isVisible)\n }\n\n get prosent() {\n return parseFloat(this.getAttribute('data-percent') || '0.0')\n }\n\n set prosent(val) {\n this.setAttribute('data-percent', val.toFixed(2))\n }\n}\n","import bezierEasing from 'bezier-easing'\nimport { Easing, JumpTerm } from '../../../types/prosentvis-bilde'\nexport function getEasing(easing: Easing = { type: 'linear' }) {\n switch (easing.type) {\n case 'ease':\n return bezierEasing(0.25, 0.1, 0.25, 1.0)\n case 'ease-in':\n return bezierEasing(0.42, 0, 1.0, 1.0)\n case 'ease-out':\n return bezierEasing(0, 0, 0.58, 1.0)\n case 'ease-in-out':\n return bezierEasing(0.42, 0, 0.58, 1.0)\n case 'cubic-bezier':\n return bezierEasing(easing.x1, easing.y1, easing.x2, easing.y2)\n case 'steps':\n return stepEasing(easing.n, easing.jumpterm)\n case 'linear':\n default:\n return bezierEasing(0.0, 0.0, 1.0, 1.0)\n }\n}\n\nconst stepConfig = {\n 'jump-start': {\n extraRise: 0,\n roundingFunction: Math.ceil,\n },\n 'jump-end': {\n extraRise: 0,\n roundingFunction: Math.floor,\n },\n 'jump-none': {\n extraRise: -1,\n roundingFunction: Math.floor,\n },\n 'jump-both': {\n extraRise: 1,\n roundingFunction: Math.ceil,\n },\n}\n\nexport function stepEasing(steps: number, jumpterm: JumpTerm) {\n const config = stepConfig[jumpterm]\n\n const stepLength = 1 / steps\n const stepHeight = 1 / (steps + config.extraRise)\n\n return (t) => {\n if (t === 0 || t === 1) {\n return t\n }\n const numberOfSteps = config.roundingFunction(t / stepLength)\n return numberOfSteps * stepHeight\n }\n}\n","import './prosentvis-bilde.module.css'\nimport { testReducedMotion, toArray, closest } from '@nrk/dh-basis-common'\nimport { calculateValue } from './easing/interpolation'\nimport { LayerAnimation, PropertyType } from '../../types/prosentvis-bilde'\n\nexport default class ProsentvisBilde extends HTMLElement {\n private _reducedMotion = false\n\n static get observedAttributes() {\n return ['data-percent']\n }\n\n connectedCallback() {\n this.#updateSizes()\n this._reducedMotion = testReducedMotion()\n this._prosentChanged()\n }\n\n attributeChangedCallback(name, prevValue, newValue) {\n const valueChanged = prevValue !== newValue\n if (!valueChanged) {\n return\n }\n\n if (name === 'data-percent') {\n this._prosentChanged()\n }\n }\n\n #isFullWidth() {\n return (\n closest(this, 'article')?.classList?.contains('article-feature') &&\n closest(this, '.remoterenderedcontent-reference')?.classList.contains('fc')\n )\n }\n\n #updateSizes() {\n if (this.#isFullWidth()) {\n this.keyframedElements.forEach((elm) => elm.setAttribute('sizes', '100vw'))\n }\n }\n\n _prosentChanged() {\n const keyframedElements = this.keyframedElements\n const percent = this.percent * 100\n\n if (this._reducedMotion && percent !== 0) {\n return\n }\n\n keyframedElements.forEach((elm) => {\n const animation: LayerAnimation = JSON.parse(elm.getAttribute('data-layer-animation'))\n\n const scale = getScaleTransform(animation, percent)\n const rotate = getRotateTransform(animation, percent)\n const translateX = getTranslateTransform('translateX', animation, percent)\n const translateY = getTranslateTransform('translateY', animation, percent)\n elm.style.transform = [translateX, translateY, rotate, scale].filter(Boolean).join(' ')\n\n const opacity = getAnimationValue('opacity', animation, percent)\n if (isNumber(opacity)) {\n elm.style.opacity = opacity\n }\n })\n }\n\n get keyframedElements() {\n return toArray(this.querySelectorAll('[data-layer-animation]'))\n }\n\n get percent() {\n return parseFloat(this.getAttribute('data-percent') || '0.0')\n }\n\n set percent(val) {\n this.setAttribute('data-percent', val.toFixed(2))\n }\n}\n\nfunction getAnimationValue(propType: PropertyType, animation: LayerAnimation, percentage: number) {\n const property = animation.find((p) => p.type === propType)\n return property ? calculateValue(property.keyframes, percentage) : undefined\n}\n\nfunction getRotateTransform(animation: LayerAnimation, percentage: number) {\n const rotate = getAnimationValue('rotate', animation, percentage)\n return isNumber(rotate) ? `rotate(${rotate}deg)` : ''\n}\n\nfunction getScaleTransform(animation: LayerAnimation, percentage: number) {\n const scale = getAnimationValue('scale', animation, percentage)\n return isNumber(scale) ? `scale(${scale})` : ''\n}\n\nfunction getTranslateTransform(\n prop: 'translateX' | 'translateY',\n animation: LayerAnimation,\n percentage: number\n) {\n const translate = getAnimationValue(prop, animation, percentage)\n return isNumber(translate) ? `${prop}(${translate}%)` : ''\n}\n\nfunction isNumber(n: unknown): n is number {\n return typeof n === 'number'\n}\n","import { KeyFrame } from '../../../types/prosentvis-bilde'\nimport { getEasing } from './easing-functions'\n\nexport function calculateValue(keyframes: KeyFrame[], percent: number): number {\n let indexOfNext = keyframes.findIndex((keyframe) => keyframe.percent >= percent)\n\n if (indexOfNext === -1) {\n indexOfNext = keyframes.length\n }\n\n const indexOfPrev = indexOfNext - 1\n const prev = keyframes[indexOfPrev]\n const next = keyframes[indexOfNext]\n\n if (!prev && next) {\n return next.value\n } else if (prev && !next) {\n return prev.value\n } else if (prev && next) {\n if (prev.percent === next.percent) {\n return prev.value\n }\n\n const dist = next.percent - prev.percent\n const pos = percent - prev.percent\n const easingFunction = getEasing(prev.easing)\n const t = easingFunction(pos / dist)\n return interpolate(prev.value, next.value, t)\n }\n\n return 0\n}\n\nexport function interpolate(a: number, b: number, t: number) {\n return t * b + (1 - t) * a\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"prosentvisOvergang\":\"dh-ans-prosentvisOvergang--eSU5P\",\"mask\":\"dh-ans-mask--jYOQw\",\"image\":\"dh-ans-image--idkYb\",\"fade-in\":\"dh-ans-fade-in--CVGrO\",\"fadeIn\":\"dh-ans-fade-in--CVGrO\",\"background\":\"dh-ans-background--tnUZo\"};","const MAX_CANVAS_AREA = 1000000\n\nexport class CanvasManager {\n constructor(canvas) {\n this._canvas = canvas\n }\n\n async updateImages(image, mask) {\n this._image = image\n this._mask = mask\n this._updateCanvasWidth()\n }\n\n updateDpr(canvasWidth, canvasHeight, dpr) {\n const canvas = this._canvas\n\n /* Limit canvas area to MAX_CANVAS_AREA to improve performance */\n let effectiveDpr = dpr\n const potentialArea = dpr * dpr * canvasWidth * canvasHeight\n if (potentialArea > MAX_CANVAS_AREA) {\n effectiveDpr = Math.sqrt(MAX_CANVAS_AREA / (canvasWidth * canvasHeight))\n }\n\n canvas.width = canvasWidth * effectiveDpr\n canvas.height = canvasHeight * effectiveDpr\n }\n\n _updateCanvasWidth() {\n const canvas = this._canvas\n this._context = canvas.getContext('2d')\n\n /* Save image as ImageData */\n this._context.clearRect(0, 0, canvas.width, canvas.height)\n this._context.drawImage(this._image, 0, 0, canvas.width, canvas.height)\n this._imageData = this._context.getImageData(0, 0, canvas.width, canvas.height)\n\n /* Save mask as ImageData */\n this._context.clearRect(0, 0, canvas.width, canvas.height)\n this._context.drawImage(this._mask, 0, 0, canvas.width, canvas.height)\n this._maskData = this._context.getImageData(0, 0, canvas.width, canvas.height)\n\n /* Save create image data as ImageData */\n this._context.clearRect(0, 0, canvas.width, canvas.height)\n this._drawData = this._context.getImageData(0, 0, canvas.width, canvas.height)\n\n this._ready = true\n }\n\n updateMask(percent, range) {\n if (!this._ready) {\n return\n }\n // Distance to move black and white point during scroll\n const distance = 255 + range\n const blackPoint = 255 - distance * percent\n\n const data = this._drawData.data\n const imageData = this._imageData.data\n const maskData = this._maskData.data\n for (let i = 0; i < data.length; i += 4) {\n const greyValue = 0.2126 * maskData[i] + 0.7152 * maskData[i + 1] + 0.0722 * maskData[i + 2]\n const leveledValue = ((greyValue - blackPoint) * 255.0) / range\n const a = clamp(leveledValue / 255.0, 0, 1)\n\n data[i] = imageData[i]\n data[i + 1] = imageData[i + 1]\n data[i + 2] = imageData[i + 2]\n data[i + 3] = imageData[i + 3] * a\n }\n this._context.putImageData(this._drawData, 0, 0)\n }\n}\n\nfunction clamp(value, min, max) {\n return Math.max(Math.min(value, max), min)\n}\n","import styles from './prosentvis-overgang.module.css'\nimport { debounce } from 'debounce'\n\n// eslint-disable-next-line import/default\nimport { CanvasManager } from './overgang/canvas-manager'\n\nexport default class ProsentvisOvergang extends HTMLElement {\n static get observedAttributes() {\n return ['data-percent']\n }\n\n connectedCallback() {\n this.appendChild(document.createElement('canvas'))\n /*\n Disabling workers as webpack 5 does not support inline workers:\n https://github.com/webpack/webpack/discussions/14066\n */\n /*\n if ('OffscreenCanvas' in window) {\n this._worker = new Worker(\n new URL('./overgang/prosentvis-overgang.worker.js', import.meta.url)\n )\n const offscreen = this.canvas.transferControlToOffscreen()\n this._worker.postMessage({ canvas: offscreen }, [offscreen])\n }\n */\n\n this._debouncedUpdateCanvasWidth = debounce(this._updateCanvasWidth, 300)\n this._manager = new CanvasManager(this.canvas)\n\n window.addEventListener('resize', this._debouncedUpdateCanvasWidth)\n this._debouncedUpdateCanvasWidth()\n\n setTimeout(() => {\n this.querySelectorAll('img').forEach((img) => {\n img.addEventListener('load', this._debouncedUpdateCanvasWidth)\n })\n })\n }\n\n disconnectedCallback() {\n window.removeEventListener('resize', this._debouncedUpdateCanvasWidth)\n }\n\n attributeChangedCallback(name, prevValue, newValue) {\n const valueChanged = prevValue !== newValue\n if (!valueChanged) {\n return\n }\n\n if (name === 'data-percent') {\n this._prosentChanged()\n }\n }\n\n _prosentChanged() {\n this._updateMask()\n }\n\n _updateCanvasWidth = async () => {\n const canvas = this.canvas\n const images = this.images\n if (\n images.length < 2 ||\n images.some((image) => !image.complete) ||\n canvas.offsetWidth === this._currentCanvasWidth ||\n this.image.clientHeight === 0 ||\n this.mask.clientHeight === 0\n ) {\n return\n }\n this._currentCanvasWidth = canvas.offsetWidth\n /* We're loaded */\n const dpr = Math.min(window.devicePixelRatio, 2)\n if (this._worker) {\n const image = await createImageBitmap(this.image)\n const mask = await createImageBitmap(this.mask)\n this._worker.postMessage(\n {\n image,\n mask,\n canvasWidth: canvas.offsetWidth,\n canvasHeight: canvas.offsetHeight,\n dpr,\n },\n [image, mask]\n )\n } else {\n this._manager.updateDpr(canvas.offsetWidth, canvas.offsetHeight, dpr)\n this._manager.updateImages(this.image, this.mask)\n }\n this._ready = true\n this._updateMask()\n }\n\n _updateMask = () => {\n if (!this._ready) {\n return\n }\n\n if (this._worker) {\n this._worker.postMessage({ percent: this.percent, range: this.range })\n if (this.canvas.style.visibility !== 'visible') {\n /* Hide image and show canvas */\n this.canvas.style.visibility = 'visible'\n this.image.style.visibility = 'hidden'\n }\n } else {\n if (this._animationFrame) {\n return // Already painting\n }\n this._animationFrame = requestAnimationFrame(() => {\n const percent = this.percent\n const range = this.range\n this._manager.updateMask(percent, range)\n\n delete this._animationFrame\n if (this.canvas.style.visibility !== 'visible') {\n /* Hide image and show canvas */\n this.canvas.style.visibility = 'visible'\n this.image.style.visibility = 'hidden'\n }\n })\n }\n }\n\n get image() {\n return this.querySelector(`.${styles.image}`)\n }\n\n get mask() {\n return this.querySelector(`.${styles.mask}`)\n }\n\n get images() {\n /* eslint-disable compat/compat */\n return Array.from(this.querySelectorAll('img'))\n }\n\n get canvas() {\n return this.querySelector('canvas')\n }\n\n get percent() {\n return parseFloat(this.getAttribute('data-percent') || '0.0')\n }\n\n /* Range between black and white point */\n get range() {\n return parseFloat(this.getAttribute('range') || '1.0')\n }\n\n set percent(val) {\n this.setAttribute('data-percent', val.toFixed(2))\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"root\"};","/* eslint-disable promise/catch-or-return, promise/always-return */\nimport { BaseElement } from '@nrk/dh-server-libs/base-element'\nimport { getElementTag } from '@nrk/dh-server-libs/get-element-tag'\nimport Animasjonsscroll from './components/animasjonsscroll'\nimport ProsentvisVideo from './components/media/prosentvis-video'\nimport ProsentvisBilde from './components/media/prosentvis-bilde'\nimport ProsentvisOvergang from './components/media/prosentvis-overgang'\n\nimport './components/animasjonsscroll.module.css'\nimport './client.css'\n\nconst tag = getElementTag(__APP_NAME__, __APP_VERSION__)\n\nfunction safeDefine(elementName, constructor) {\n if (typeof customElements.get(elementName) === 'undefined') {\n customElements.define(elementName, constructor)\n }\n}\n\nexport class AppElement extends BaseElement {\n name = tag\n\n connectedCallback() {\n super.connectedCallback()\n\n if (this.features.sanityPreview) {\n import(\n './components/preview/preview-iframe-api' /* webpackChunkName: \"dh-preview-iframe\" */\n ).then((module) => module.initPreview(tag))\n }\n }\n\n async render() {\n safeDefine('dh-animasjonsscroll', Animasjonsscroll)\n safeDefine('dh-prosentvis-video', ProsentvisVideo)\n safeDefine('dh-prosentvis-bilde', ProsentvisBilde)\n safeDefine('dh-prosentvis-overgang', ProsentvisOvergang)\n\n if (this.features.lottie && typeof customElements.get('dh-prosentvis-lottie') === 'undefined') {\n const prosentvisLottie = (\n await import(\n './components/media/prosentvis-lottie' /* webpackChunkName: \"dh-prosentvis-lottie\" */\n )\n ).default\n safeDefine('dh-prosentvis-lottie', prosentvisLottie)\n }\n\n if (this.features.gltf && typeof customElements.get('dh-prosentvis-gltf') === 'undefined') {\n const prosentvisGLTF = (\n await import(\n './components/media/prosentvis-gltf' /* webpackChunkName: \"dh-prosentvis-gltf\" */\n )\n ).default\n safeDefine('dh-prosentvis-gltf', prosentvisGLTF)\n }\n }\n\n get features() {\n return JSON.parse(this.getAttribute('features') || '{}')\n }\n}\n\nsafeDefine(tag, AppElement)\n"],"names":["leafPrototypes","getProto","installedChunks","installChunk","proto","match","closest","window","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","el","css","parentElement","call","toArray","nodeList","slice","dispatchEvent","element","name","event","detail","arguments","length","undefined","ignore","concat","CustomEvent","bubbles","cancelable","document","createEvent","initCustomEvent","result","testReducedMotion","matchMedia","debounce","fn","delay","timeout","_len","args","Array","_key","clearTimeout","setTimeout","module","exports","getContextId","_coreAnalyticsPromise","BaseElement","HTMLElement","constructor","super","this","sendError","bind","sendGaEvent","connectedCallback","Error","setupTracker","render","coreAnalyticsTracker","Promise","resolve","then","m","default","coreAnalytics","tracker","create","container","parentId","metadata","location","href","ga","dataset","gaPropertyId","title","contentId","selfId","publishDate","published","async","message","eventCategory","JSON","parse","preloadedState","errorTracking","url","enabled","POLOPOLY_ID_REGEX","str","extractPolopolyIdFromString","getElementTag","version","split","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","Float32Array","A","aA1","aA2","B","C","calcBezier","aT","getSlope","LinearEasing","x","mX1","mY1","mX2","mY2","sampleValues","i","getTForX","aX","intervalStart","currentSample","lastSample","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","Math","abs","binarySubdivide","func","wait","immediate","context","timestamp","later","last","Date","now","apply","debounced","callNow","clear","flush","regex","parents","node","ps","parentNode","style","prop","getComputedStyle","getPropertyValue","overflow","scroll","test","SVGElement","scrollingElement","documentElement","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdO","n","getter","__esModule","d","a","Object","getPrototypeOf","obj","t","value","mode","ns","r","def","current","indexOf","getOwnPropertyNames","forEach","key","definition","o","defineProperty","enumerable","get","f","e","chunkId","all","keys","reduce","promises","u","miniCssF","hasOwnProperty","Symbol","toStringTag","p","loadStylesheet","reject","fullhref","existingLinkTags","getElementsByTagName","dataHref","tag","getAttribute","rel","existingStyleTags","findStylesheet","oldTag","linkTag","createElement","type","onerror","onload","errorType","realHref","target","err","code","request","removeChild","insertBefore","nextSibling","head","appendChild","createStylesheet","installedCssChunks","miniCss","push","data","ids","modules","runtime","j","installedChunkData","promise","import","race","_typeof","iterator","_toPropertyKey","arg","input","hint","prim","toPrimitive","res","TypeError","String","Number","_defineProperty","configurable","writable","_classExtractFieldDescriptor","receiver","privateMap","action","has","_classPrivateFieldGet","descriptor","_classPrivateFieldSet","set","horizontalProperties","dimension","position","scrollDimension","clientDimension","scrollPosition","scrollPaddingStart","scrollPaddingEnd","verticalProperties","getDirectionPropNames","direction","source","blockAxis","scrollOverflowRegex","calculateEffectiveScrollOffsets","scrollOffsets","scrollPadding","effectiveScrollOffsets","firstOffset","scrollOffset","calculateEffectiveOffset","effectiveOffset","offset","first","hasLayoutBox","isScrollContainer","getSourceEnd","endsWith","parseFloat","substring","calculateContainerBasedOffset","edge","threshold","props","console","log","ancestor","getNearestScrollContainerAncestor","b","warn","targetBox","targetRect","getBoundingClientRect","top","scrollTop","left","scrollLeft","width","height","containerRect","getAxisAlignedTargetBox","_scrollPadding$props$","_scrollPadding$props$2","getClientDimension","min","max","calculateElementBasedOffset","propNames","Boolean","offsetWidth","offsetHeight","computed","overflowString","calculateScrollProgress","offsetIndex","lastOffset","startOffset","getScrollportHeight","innerHeight","clientHeight","getScrollportWidth","innerWidth","clientWidth","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","_objectSpread","getOwnPropertyDescriptors","defineProperties","_classPrivateMethodInitSpec","privateSet","_checkPrivateRedeclaration","add","_classPrivateFieldInitSpec","privateCollection","_classPrivateMethodGet","ScrollanimasjonMixin","Base","_effectiveScrollPaddings","_effectiveScrollTimelines","_isWatching","_reducedMotion","_observer","_debouncedUpdateOffsets","_targetPositions","_createIntersectionObserver","_disconnectIntersectionObserver","_handleVisibilityChange","_getTargetPositions","_needsEffectiveOffsetUpdate","_updateEffectiveOffsets","_startWatching","_stopWatching","WeakMap","WeakSet","_ref","containerIntersection","isIntersecting","_startWatching2","_stopWatching2","_getTargetPositions2","scrollPaddings","entries","includes","calculateEffectiveScrollPaddings","timelines","map","timeline","_super$connectedCallb","timelineUpdatedCallback","id","addEventListener","_createIntersectionObserver2","disconnectedCallback","_super$disconnectedCa","removeEventListener","_disconnectIntersectionObserver2","timelineId","progress","toFixed","padding","scrollPaddingTop","scrollPaddingRight","scrollPaddingBottom","scrollPaddingLeft","vertical","horizontal","_horizontal","bottom","_top","right","_bottom","parseScrollPadding","IntersectionObserver","root","observe","disconnect","flatMap","_needsEffectiveOffsetUpdate2","currentTargetPositions","index","loop","requestAnimationFrame","Scrollprosent","_this$targetElement","targetElement","setAttribute","querySelector","_this$getAttribute","offsetString","trim","_offset$match","componentValue","parseOffsetString","dedupeId","dedupeMixin","mixin","mixinId","base","_base$_appliedMixins","_base$_appliedMixins2","_appliedMixins","extended","_classPrivateMethodInitSpec$1","_checkPrivateRedeclaration$1","_classPrivateMethodGet$1","VIEWPORT_POSITION_ATTR","VIEWPORT_POSITIONS","aboveViewport","inViewport","belowViewport","ViewportPositionMixin","_handleIntersectionChange","intersection","viewportPosition","isAbove","observedAttributes","_super$observedAttrib","viewportContainer","_document$scrollingEl","viewportIntersectionRoot","isViewport","parent","rootMargin","_classPrivateFieldGet2","_classPrivateFieldGet3","unobserve","_classStaticPrivateFieldSpecSet","classConstructor","_classCheckPrivateStaticAccess","_classCheckPrivateStaticFieldDescriptor","_class","_getTargetElements","_boundAttributes","AttributeBindingMixinDef","boundAttributes","attribute","targets","sourceAttribute","targetAttribute","sourceAttributeName","targetAttributeName","attributeChangedCallback","oldValue","newValue","_super$attributeChang","configuration","targetElements","_getTargetElements2","removeAttribute","from","querySelectorAll","Animasjonsscroll","styles","isVisible","child","ProsentvisVideo","intersectionEntries","videos","video","display","prevValue","_prosentChanged","_enableSeek","videoElement","duration","currentTime","prosent","hasAttribute","play","pause","catch","children","nodeName","find","val","getEasing","easing","bezierEasing","x1","y1","x2","y2","steps","jumpterm","config","stepConfig","stepLength","stepHeight","extraRise","roundingFunction","stepEasing","ceil","floor","ProsentvisBilde","keyframedElements","percent","elm","animation","scale","percentage","getAnimationValue","isNumber","getScaleTransform","rotate","getRotateTransform","translateX","getTranslateTransform","translateY","transform","join","opacity","classList","contains","propType","property","keyframes","indexOfNext","findIndex","keyframe","prev","next","dist","pos","easingFunction","interpolate","calculateValue","translate","MAX_CANVAS_AREA","CanvasManager","canvas","_canvas","image","mask","_image","_mask","_updateCanvasWidth","updateDpr","canvasWidth","canvasHeight","dpr","effectiveDpr","sqrt","_context","getContext","clearRect","drawImage","_imageData","getImageData","_maskData","_drawData","_ready","updateMask","range","blackPoint","imageData","maskData","greyValue","putImageData","ProsentvisOvergang","images","some","complete","_currentCanvasWidth","devicePixelRatio","_worker","createImageBitmap","postMessage","_manager","updateImages","_updateMask","visibility","_animationFrame","_debouncedUpdateCanvasWidth","img","__APP_NAME__","__APP_VERSION__","safeDefine","elementName","customElements","define","AppElement","features","sanityPreview","initPreview","lottie","gltf"],"sourceRoot":""}