{"version":3,"file":"main-846e6b10c531afdae712.esm.js","mappings":"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","sources":["webpack://dh-fargelegging/webpack/runtime/create fake namespace object","webpack://dh-fargelegging/webpack/runtime/import chunk loading","webpack://dh-fargelegging/./node_modules/@nrk/dh-server-libs/base-element.js","webpack://dh-fargelegging/./node_modules/@nrk/dh-server-libs/get-element-tag.js","webpack://dh-fargelegging/./node_modules/@nrk/dh-server-libs/src/base-element.js","webpack://dh-fargelegging/./node_modules/@nrk/dh-server-libs/src/get-context-id.js","webpack://dh-fargelegging/./node_modules/@nrk/dh-server-libs/src/get-element-tag.js","webpack://dh-fargelegging/webpack/bootstrap","webpack://dh-fargelegging/webpack/runtime/define property getters","webpack://dh-fargelegging/webpack/runtime/ensure chunk","webpack://dh-fargelegging/webpack/runtime/get javascript chunk filename","webpack://dh-fargelegging/webpack/runtime/get mini-css chunk filename","webpack://dh-fargelegging/webpack/runtime/hasOwnProperty shorthand","webpack://dh-fargelegging/webpack/runtime/make namespace object","webpack://dh-fargelegging/webpack/runtime/publicPath","webpack://dh-fargelegging/./node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://dh-fargelegging/./node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://dh-fargelegging/./node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://dh-fargelegging/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://dh-fargelegging/./node_modules/@nrk/dh-basis-common/dist/index.esm.js","webpack://dh-fargelegging/./node_modules/canvas-size/dist/canvas-size.esm.js","webpack://dh-fargelegging/./src/components/fargelegg.module.css?1f44","webpack://dh-fargelegging/./src/components/fargelegg.js","webpack://dh-fargelegging/./src/lib/utils.js","webpack://dh-fargelegging/./src/client.css?e609","webpack://dh-fargelegging/./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, 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}\n\t\t\t}\n\t\t}\n};\n\n// no external install chunk\n\n// no on chunks loaded","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","// 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](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","// 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 \"\" + \"ca\" + \"-chunk-\" + \"7f46a9303f533c62a4a1\" + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"https://static.nrk.no/dh/module/fargelegging/static/\";","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}","import _defineProperty from '@babel/runtime/helpers/defineProperty';\n\n/* eslint-disable compat/compat */\nfunction getDefaultRoot() {\n /*\n Use document if supported\n IntersectionObserver will otherwise default to top level document,\n and IntersectionObserver will not work as expected in an iframe.\n https://github.com/w3c/IntersectionObserver/issues/372\n */\n\n /*\n Safari does not throw error on root: document, but does not trigger events as expected\n returning null for now until better feature detection is possible\n */\n return null;\n\n /*\n try {\n // eslint-disable-next-line no-new\n new IntersectionObserver(() => {}, { root: document })\n return document\n } catch (e) {\n return null\n }\n */\n}\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nvar defaultConfig = {\n rootMargin: '0px 0px 0px 0px',\n threshold: [0, 0.5, 1],\n root: getDefaultRoot()\n};\nclass ElementIntersectionObserver {\n constructor(elements, onChange, config) {\n _defineProperty(this, \"intersections\", void 0);\n _defineProperty(this, \"elements\", void 0);\n this.elements = elements.slice(0);\n this.intersections = elements.map(target => ({\n target,\n isIntersecting: false,\n ratio: null\n }));\n this.intersectionObserver = new IntersectionObserver(entries => {\n var intersections = this.intersections.slice(0);\n entries.forEach(entry => {\n var idx = elements.indexOf(entry.target);\n intersections.splice(idx, 1, {\n target: entry.target,\n isIntersecting: entry.isIntersecting,\n ratio: entry.intersectionRatio\n });\n });\n this.intersections = intersections;\n onChange(this.intersections);\n }, _objectSpread(_objectSpread({}, defaultConfig), config));\n elements.forEach(elm => this.intersectionObserver.observe(elm));\n }\n disconnect() {\n // Unregister trigger elements\n this.elements.forEach(elm => this.intersectionObserver.unobserve(elm));\n\n // Disconnect intersection observer\n this.intersectionObserver.disconnect();\n }\n}\n\nfunction toggleAttribute(el, name, boolValue) {\n if (!el) {\n return;\n }\n var nextValue;\n if (typeof boolValue !== 'undefined') {\n nextValue = !!boolValue;\n } else {\n nextValue = el.hasAttribute(name);\n }\n if (nextValue) {\n el.setAttribute(name, '');\n } else {\n el.removeAttribute(name);\n }\n}\nfunction setAttribute(el, name, nextValue) {\n if (!el) {\n return;\n }\n if (nextValue) {\n el.setAttribute(name, nextValue);\n } else {\n el.removeAttribute(name);\n }\n}\nvar closest = (() => {\n var proto = typeof window === 'undefined' ? {} : window.Element.prototype;\n var match = proto.matches || proto.msMatchesSelector || proto.webkitMatchesSelector;\n if (proto.closest) {\n return (el, css) => el.closest(css);\n } else {\n return (el, css) => {\n for (; el; el = el.parentElement) if (match.call(el, css)) return el;\n return null;\n };\n }\n})();\nfunction addStyle(nodeName, css) {\n var key = \"style-\".concat(nodeName.toLowerCase());\n var min = css.replace(/\\/\\*[^!][^*]*\\*\\//g, '').replace(/\\s*(^|[:;,{}]|$)\\s*/g, '$1');\n document.getElementById(key) || document.head.insertAdjacentHTML('afterbegin', \"\"));\n}\nfunction toArray(nodeList) {\n return [].slice.call(nodeList);\n}\nfunction dispatchEvent(element, name) {\n var detail = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var ignore = \"prevent_recursive_dispatch_maximum_callstack\".concat(name);\n var event;\n if (element[ignore]) return true;\n // We are already processing this event, so skip sending a new one\n else element[ignore] = true; // Add name to dispatching ignore\n\n if (typeof window.CustomEvent === 'function') {\n event = new window.CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail\n });\n } else {\n event = document.createEvent('CustomEvent');\n event.initCustomEvent(name, true, true, detail);\n }\n // IE reports incorrect event.defaultPrevented\n // but correct return value on element.dispatchEvent\n var result = element.dispatchEvent(event);\n element[ignore] = null; // Remove name from dispatching ignore\n\n return result; // Follow W3C standard for return value\n}\n\nfunction easeOutQuint(t) {\n return 1 + --t * t * t * t * t;\n}\nclass VerticalScroll {\n constructor(container) {\n _defineProperty(this, \"container\", void 0);\n this.container = container;\n }\n cancel() {\n this._cancelled = true;\n }\n to(top) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var callback = arguments.length > 2 ? arguments[2] : undefined;\n var from = this.container.scrollTop;\n var distance = top - from;\n var startTime = null;\n var loop = currentTime => {\n if (this._cancelled) {\n return;\n }\n if (!startTime) {\n startTime = currentTime - 1;\n }\n var timeElapsed = currentTime - startTime;\n if (timeElapsed < duration) {\n this.container.scrollTop = from + distance * easeOutQuint(timeElapsed / duration);\n window.requestAnimationFrame(loop);\n } else {\n this.container.scrollTop = top;\n callback && callback();\n }\n };\n window.requestAnimationFrame(loop);\n }\n}\nclass HorizontalScroll {\n constructor(container) {\n _defineProperty(this, \"container\", void 0);\n this.container = container;\n }\n cancel() {\n this._cancelled = true;\n }\n to(left) {\n var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var callback = arguments.length > 2 ? arguments[2] : undefined;\n var from = this.container.scrollLeft;\n var distance = left - from;\n var startTime = null;\n var loop = currentTime => {\n if (this._cancelled) {\n return;\n }\n if (!startTime) {\n startTime = currentTime - 1;\n }\n var timeElapsed = currentTime - startTime;\n if (timeElapsed < duration) {\n this.container.scrollLeft = from + distance * easeOutQuint(timeElapsed / duration);\n window.requestAnimationFrame(loop);\n } else {\n this.container.scrollLeft = left;\n callback && callback();\n }\n };\n window.requestAnimationFrame(loop);\n }\n}\n\nfunction testReducedMotion() {\n if (typeof window !== 'undefined') {\n return !!window.matchMedia && window.matchMedia('(prefers-reduced-motion)').matches;\n }\n return false;\n}\n\nvar MAX_SAFE_INTEGER = 9007199254740991;\nfunction withinRange(current) {\n var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var stop = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : MAX_SAFE_INTEGER;\n return current >= start && current <= stop;\n}\nfunction withinStops(currentTime, stops, targetStop) {\n var nrOfStops = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1;\n var uniqueStops = stops.filter(unique);\n var targetTime = stops[targetStop];\n var prevTime = uniqueStops[uniqueStops.indexOf(targetTime) - nrOfStops];\n var nextTime = uniqueStops[uniqueStops.indexOf(targetTime) + nrOfStops];\n return withinRange(currentTime, prevTime, nextTime);\n}\nfunction unique(value, index, self) {\n return self.indexOf(value) === index;\n}\n\n/*\n * 'loading=\"lazy\"' is defined in terms of IntersectionObserver and the initial root.\n * As a result images with 'loading=\"lazy\"' inside a scroll container will not load\n * until they at least have one pixel visible in the viewport.\n *\n * This will hopefully fixed in a future version of the spec:\n * https://github.com/w3c/IntersectionObserver/issues/431\n *\n * scroll-container-lazy-load observes images and a scroll container.\n * Once images are close to intersecting it will change 'loading=\"lazy\"' to 'loading=\"eager\"'.\n * */\nfunction loadImage(image) {\n if (image.loading === 'lazy') {\n image.loading = 'eager';\n }\n}\nfunction connectScrollContainerLazyLoad(container, images) {\n var containerIntersecting = false;\n var deferredImages = [];\n\n // eslint-disable-next-line compat/compat\n var containerObserver = new IntersectionObserver(entries => {\n containerIntersecting = entries === null || entries === void 0 ? void 0 : entries[0].isIntersecting;\n if (containerIntersecting) {\n deferredImages.forEach(image => loadImage(image));\n deferredImages = [];\n }\n }, {\n root: getDefaultRoot(),\n threshold: [0.0]\n });\n containerObserver.observe(container);\n\n // eslint-disable-next-line compat/compat\n var imageObserver = new IntersectionObserver(entries => {\n for (var entry of entries) {\n if (entry.isIntersecting) {\n var image = entry.target;\n imageObserver.unobserve(image);\n if (containerIntersecting) {\n loadImage(image);\n } else {\n /* Defer loading of if the container is not intersecting the viewport */\n deferredImages.push(image);\n }\n }\n }\n }, {\n root: container,\n rootMargin: '300px',\n threshold: 0.0\n });\n for (var image of images) {\n imageObserver.observe(image);\n }\n return () => {\n containerObserver.disconnect();\n imageObserver.disconnect();\n };\n}\n\nfunction debounce(fn, delay) {\n var timeout;\n return function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n clearTimeout(timeout);\n timeout = setTimeout(() => fn(...args), delay);\n };\n}\n\nexport { ElementIntersectionObserver, HorizontalScroll, VerticalScroll, addStyle, closest, connectScrollContainerLazyLoad, debounce, dispatchEvent, setAttribute, testReducedMotion, toArray, toggleAttribute, withinRange, withinStops };\n//# sourceMappingURL=index.esm.js.map\n","/*!\n * canvas-size\n * v1.2.6\n * https://github.com/jhildenbiddle/canvas-size\n * (c) 2015-2023 John Hildenbiddle \n * MIT license\n */\nfunction _iterableToArrayLimit(arr, i) {\n var _i = null == arr ? null : \"undefined\" != typeof Symbol && arr[Symbol.iterator] || arr[\"@@iterator\"];\n if (null != _i) {\n var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1;\n try {\n if (_x = (_i = _i.call(arr)).next, 0 === i) {\n if (Object(_i) !== _i) return;\n _n = !1;\n } else for (;!(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0) ;\n } catch (err) {\n _d = !0, _e = err;\n } finally {\n try {\n if (!_n && null != _i.return && (_r = _i.return(), Object(_r) !== _r)) return;\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter((function(sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n }))), keys.push.apply(keys, symbols);\n }\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach((function(key) {\n _defineProperty(target, key, source[key]);\n })) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach((function(key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n }));\n }\n return target;\n}\n\nfunction _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}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _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}\n\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nfunction canvasTest(settings) {\n var size = settings.sizes.shift();\n var width = Math.max(Math.ceil(size[0]), 1);\n var height = Math.max(Math.ceil(size[1]), 1);\n var fill = [ width - 1, height - 1, 1, 1 ];\n var job = Date.now();\n var isWorker = typeof WorkerGlobalScope !== \"undefined\" && self instanceof WorkerGlobalScope;\n var cropCvs, testCvs;\n if (isWorker) {\n cropCvs = new OffscreenCanvas(1, 1);\n testCvs = new OffscreenCanvas(width, height);\n } else {\n cropCvs = document.createElement(\"canvas\");\n cropCvs.width = 1;\n cropCvs.height = 1;\n testCvs = document.createElement(\"canvas\");\n testCvs.width = width;\n testCvs.height = height;\n }\n var cropCtx = cropCvs.getContext(\"2d\");\n var testCtx = testCvs.getContext(\"2d\");\n if (testCtx) {\n testCtx.fillRect.apply(testCtx, fill);\n cropCtx.drawImage(testCvs, width - 1, height - 1, 1, 1, 0, 0, 1, 1);\n }\n var isTestPass = cropCtx && cropCtx.getImageData(0, 0, 1, 1).data[3] !== 0;\n var benchmark = Date.now() - job;\n [ cropCvs, testCvs ].forEach((function(cvs) {\n cvs.height = 0;\n cvs.width = 0;\n }));\n if (isWorker) {\n postMessage({\n width: width,\n height: height,\n benchmark: benchmark,\n isTestPass: isTestPass\n });\n if (!isTestPass && settings.sizes.length) {\n canvasTest(settings);\n }\n } else if (isTestPass) {\n settings.onSuccess(width, height, benchmark);\n } else {\n settings.onError(width, height, benchmark);\n if (settings.sizes.length) {\n canvasTest(settings);\n }\n }\n return isTestPass;\n}\n\nvar testSizes = {\n area: [ 16384, 14188, 11402, 11180, 10836, 8192, 4096, 1 ],\n height: [ 8388607, 65535, 32767, 16384, 8192, 4096, 1 ],\n width: [ 4194303, 65535, 32767, 16384, 8192, 4096, 1 ]\n};\n\nvar _excluded = [ \"onError\", \"onSuccess\" ];\n\nvar defaults = {\n max: null,\n min: 1,\n sizes: [],\n step: 1024,\n usePromise: false,\n useWorker: false,\n onError: Function.prototype,\n onSuccess: Function.prototype\n};\n\nvar workerJobs = {};\n\nfunction createSizesArray(settings) {\n var isArea = settings.width === settings.height;\n var isWidth = settings.height === 1;\n var isHeight = settings.width === 1;\n var sizes = [];\n if (!settings.width || !settings.height) {\n settings.sizes.forEach((function(testSize) {\n var width = isArea || isWidth ? testSize : 1;\n var height = isArea || isHeight ? testSize : 1;\n sizes.push([ width, height ]);\n }));\n } else {\n var testMin = settings.min || defaults.min;\n var testStep = settings.step || defaults.step;\n var testSize = Math.max(settings.width, settings.height);\n while (testSize >= testMin) {\n var width = isArea || isWidth ? testSize : 1;\n var height = isArea || isHeight ? testSize : 1;\n sizes.push([ width, height ]);\n testSize -= testStep;\n }\n }\n return sizes;\n}\n\nfunction handleMethod(settings) {\n var hasCanvasSupport = window && \"HTMLCanvasElement\" in window;\n var hasOffscreenCanvasSupport = window && \"OffscreenCanvas\" in window;\n var jobID = Date.now();\n var _onError = settings.onError, _onSuccess = settings.onSuccess, settingsWithoutCallbacks = _objectWithoutProperties(settings, _excluded);\n var worker = null;\n if (!hasCanvasSupport) {\n return false;\n }\n if (settings.useWorker && hasOffscreenCanvasSupport) {\n var js = \"\\n var canvasTest = \".concat(canvasTest.toString(), \";\\n onmessage = function(e) {\\n canvasTest(e.data);\\n };\\n \");\n var blob = new Blob([ js ], {\n type: \"application/javascript\"\n });\n var blobURL = URL.createObjectURL(blob);\n worker = new Worker(blobURL);\n URL.revokeObjectURL(blobURL);\n worker.onmessage = function(e) {\n var _e$data = e.data, width = _e$data.width, height = _e$data.height, benchmark = _e$data.benchmark, isTestPass = _e$data.isTestPass;\n if (isTestPass) {\n workerJobs[jobID].onSuccess(width, height, benchmark);\n delete workerJobs[jobID];\n } else {\n workerJobs[jobID].onError(width, height, benchmark);\n }\n };\n }\n if (settings.usePromise) {\n return new Promise((function(resolve, reject) {\n var promiseSettings = _objectSpread2(_objectSpread2({}, settings), {}, {\n onError: function onError(width, height, benchmark) {\n var isLastTest;\n if (settings.sizes.length === 0) {\n isLastTest = true;\n } else {\n var _settings$sizes$slice = settings.sizes.slice(-1), _settings$sizes$slice2 = _slicedToArray(_settings$sizes$slice, 1), _settings$sizes$slice3 = _slicedToArray(_settings$sizes$slice2[0], 2), lastWidth = _settings$sizes$slice3[0], lastHeight = _settings$sizes$slice3[1];\n isLastTest = width === lastWidth && height === lastHeight;\n }\n _onError(width, height, benchmark);\n if (isLastTest) {\n reject({\n width: width,\n height: height,\n benchmark: benchmark\n });\n }\n },\n onSuccess: function onSuccess(width, height, benchmark) {\n _onSuccess(width, height, benchmark);\n resolve({\n width: width,\n height: height,\n benchmark: benchmark\n });\n }\n });\n if (worker) {\n var onError = promiseSettings.onError, onSuccess = promiseSettings.onSuccess;\n workerJobs[jobID] = {\n onError: onError,\n onSuccess: onSuccess\n };\n worker.postMessage(settingsWithoutCallbacks);\n } else {\n canvasTest(promiseSettings);\n }\n }));\n } else {\n if (worker) {\n workerJobs[jobID] = {\n onError: _onError,\n onSuccess: _onSuccess\n };\n worker.postMessage(settingsWithoutCallbacks);\n } else {\n return canvasTest(settings);\n }\n }\n}\n\nvar canvasSize = {\n maxArea: function maxArea() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var sizes = createSizesArray({\n width: options.max,\n height: options.max,\n min: options.min,\n step: options.step,\n sizes: _toConsumableArray(testSizes.area)\n });\n var settings = _objectSpread2(_objectSpread2(_objectSpread2({}, defaults), options), {}, {\n sizes: sizes\n });\n return handleMethod(settings);\n },\n maxHeight: function maxHeight() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var sizes = createSizesArray({\n width: 1,\n height: options.max,\n min: options.min,\n step: options.step,\n sizes: _toConsumableArray(testSizes.height)\n });\n var settings = _objectSpread2(_objectSpread2(_objectSpread2({}, defaults), options), {}, {\n sizes: sizes\n });\n return handleMethod(settings);\n },\n maxWidth: function maxWidth() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var sizes = createSizesArray({\n width: options.max,\n height: 1,\n min: options.min,\n step: options.step,\n sizes: _toConsumableArray(testSizes.width)\n });\n var settings = _objectSpread2(_objectSpread2(_objectSpread2({}, defaults), options), {}, {\n sizes: sizes\n });\n return handleMethod(settings);\n },\n test: function test() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var settings = _objectSpread2(_objectSpread2({}, defaults), options);\n settings.sizes = _toConsumableArray(settings.sizes);\n if (settings.width && settings.height) {\n settings.sizes = [ [ settings.width, settings.height ] ];\n }\n return handleMethod(settings);\n }\n};\n\nexport { canvasSize as default };\n//# sourceMappingURL=canvas-size.esm.js.map\n","// extracted by mini-css-extract-plugin\nexport default {\"fargelegg\":\"dhfgl__fargelegg--GCMRf\",\"fargelegg-container\":\"dhfgl__fargelegg-container--UufA5\",\"fargeleggContainer\":\"dhfgl__fargelegg-container--UufA5\",\"drawing-canvas\":\"dhfgl__drawing-canvas--e4toI\",\"drawingCanvas\":\"dhfgl__drawing-canvas--e4toI\",\"temp-canvas\":\"dhfgl__temp-canvas--Z7ins\",\"tempCanvas\":\"dhfgl__temp-canvas--Z7ins\",\"menu\":\"dhfgl__menu--a7n_w\",\"menu-color\":\"dhfgl__menu-color--Be5O1\",\"menuColor\":\"dhfgl__menu-color--Be5O1\",\"menu-mode\":\"dhfgl__menu-mode--KuKwz\",\"menuMode\":\"dhfgl__menu-mode--KuKwz\",\"menu-paint\":\"dhfgl__menu-paint--RYRCX\",\"menuPaint\":\"dhfgl__menu-paint--RYRCX\"};","import { closest, ElementIntersectionObserver, toArray } from '@nrk/dh-basis-common'\nimport canvasSize from 'canvas-size'\nimport styles from './fargelegg.module.css'\nimport { debounce } from '../lib/utils.js'\n\nconst lineWidths = {\n 1: 7,\n 2: 15,\n 3: 25,\n}\n\n// const CANVAS_MAX_AREA = 16777216\n\nexport default class Fargelegg extends HTMLElement {\n path = []\n image = new Image()\n _imageData\n noImageDataBug = false\n _dpr\n\n static get observedAttributes() {\n return ['mode', 'color']\n }\n\n connectedCallback() {\n const debouncedUpdateCanvasWidth = debounce(this._updateCanvasWidth, { delay: 500 })\n if (this._isFullWidth() || this._isFeatureCover()) {\n const images = toArray(this.querySelectorAll('img'))\n images.forEach((image) => {\n image.setAttribute('sizes', '100vw')\n })\n }\n if ('PointerEvent' in window) {\n document.body.addEventListener('pointerdown', this._handlePointerDown)\n } else if ('ontouchstart' in document.documentElement) {\n document.body.addEventListener('touchstart', this._handlePointerDown)\n document.body.addEventListener('touchmove', this._preventScrollInOldTouchDevices, {\n passive: false,\n })\n } else {\n document.body.addEventListener('mousedown', this._handlePointerDown)\n }\n this.fargeleggContainer.addEventListener('click', this._handleClick)\n debouncedUpdateCanvasWidth()\n\n window.addEventListener('resize', debouncedUpdateCanvasWidth)\n this.querySelectorAll('img').forEach((img) =>\n img.addEventListener('load', debouncedUpdateCanvasWidth),\n )\n\n toArray(this.querySelectorAll('button[data-size]')).forEach((button) => {\n button.addEventListener('click', (e) => {\n this.size = e.target.getAttribute('data-size')\n })\n })\n\n toArray(this.querySelectorAll('button[data-color]')).forEach((button) => {\n button.addEventListener('click', (e) => {\n this.color = e.target.getAttribute('data-color')\n })\n })\n\n this.querySelector('button[data-download]').addEventListener('click', this._download)\n\n toArray(this.querySelectorAll('button[data-mode]')).forEach((button) => {\n button.addEventListener('click', (e) => {\n this.mode = e.target.getAttribute('data-mode')\n })\n })\n\n this._createIntersectionObserver()\n }\n\n disconnectedCallback() {\n if ('PointerEvent' in window) {\n document.body.removeEventListener('pointerdown', this._handlePointerDown)\n } else if ('ontouchstart' in document.documentElement) {\n document.body.removeEventListener('touchstart', this._handlePointerDown)\n document.body.removeEventListener('touchmove', this._preventScrollInOldTouchDevices, {\n passive: false,\n })\n } else {\n document.body.removeEventListener('mousedown', this._handlePointerDown)\n }\n this._disconnectIntersectionObserver()\n }\n\n attributeChangedCallback(name) {\n switch (name) {\n case 'mode':\n this._updateMode()\n break\n case 'color':\n this._updateColor()\n }\n }\n\n _createIntersectionObserver = () => {\n this.observer = new ElementIntersectionObserver([this.menu], this._handleIntersectionChange, {\n threshold: [0.1, 0.9],\n })\n }\n\n _handleIntersectionChange = ([item]) => {\n if (item.isIntersecting && item.ratio > 0.9) {\n this.menuVisible = true\n } else {\n this.menuVisible = false\n }\n }\n\n _disconnectIntersectionObserver = () => {\n if (this.observer) {\n this.observer.disconnect()\n }\n }\n\n _preventScrollInOldTouchDevices = (e) => {\n if (!('PointerEvent' in window) && this.mode === 'paint') {\n e.preventDefault()\n }\n }\n\n _updateMode() {\n if (this.mode === 'paint') {\n this.fargeleggContainer.style.setProperty('touch-action', 'none')\n } else {\n this.fargeleggContainer.style.setProperty('touch-action', 'manipulation')\n }\n }\n\n _updateColor() {\n const currentColor = this.color\n toArray(this.querySelectorAll('button[data-color]')).forEach((button) => {\n const buttonColor = button.getAttribute('data-color')\n if (buttonColor === currentColor) {\n button.setAttribute('data-selected', '')\n } else {\n button.removeAttribute('data-selected')\n }\n })\n }\n\n _getDpr() {\n return this._dpr\n }\n\n _updateCanvasWidth = async () => {\n const canvas = this.drawingCanvas\n const drawing = this.drawing\n\n if (!drawing.complete) {\n return\n }\n\n const dpr = await findDPR(canvas.offsetWidth, canvas.offsetHeight, this.noImageDataBug)\n\n if (this._dpr === dpr && canvas.offsetWidth === this._currentCanvasWidth) {\n return\n }\n this._dpr = dpr\n\n canvas.width = canvas.offsetWidth * this._dpr\n canvas.height = canvas.offsetHeight * this._dpr\n this.drawingContext = canvas.getContext('2d')\n this.drawingContext.clearRect(0, 0, this.drawingCanvas.width, this.drawingCanvas.height)\n if (this.image && this.image.currentSrc) {\n this.drawingContext.drawImage(\n this.image,\n 0,\n 0,\n this.image.width,\n this.image.height,\n 0,\n 0,\n canvas.width,\n canvas.height,\n )\n }\n\n const tempCanvas = this.tempCanvas\n tempCanvas.width = tempCanvas.offsetWidth\n tempCanvas.height = tempCanvas.offsetHeight\n this.tempContext = tempCanvas.getContext('2d')\n this.tempContext.clearRect(0, 0, this.tempCanvas.width, this.tempCanvas.height)\n\n this._currentCanvasWidth = canvas.offsetWidth\n\n // Image data for fill function\n setTimeout(() => {\n let imageData\n try {\n imageData = this._getImageData()\n } catch (e) {\n // Newer versions of safari throws error when canvas is too big\n imageData = null\n }\n\n if (isValid(imageData)) {\n this._imageData = imageData\n } else if (!this.noImageDataBug) {\n // We test the size of the canvas.\n // However, sometimes the browser will refuse to write and read to the canvas.\n // We flag noImageDataBug and retry\n this.noImageDataBug = true\n setTimeout(this._updateCanvasWidth, 100)\n } else {\n // 2nd try, give up\n this._imageData = imageData\n }\n }, 100)\n }\n\n _isFullWidth() {\n const remoterendered = closest(this, '.remoterenderedcontent-reference')\n return remoterendered && remoterendered.classList.contains('fc')\n }\n\n _isFeatureCover() {\n const cover = closest(this, '.article-feature__cover')\n return !!cover\n }\n\n _handleClick = (e) => {\n e.preventDefault()\n\n const container = closest(e.target, `.${styles.fargeleggContainer}`)\n if (!container) {\n return\n }\n if (this.mode !== 'fill') {\n return\n }\n\n const { offsetX, offsetY } = e\n setTimeout(() => {\n this._fillArea(offsetX, offsetY)\n }, 0)\n }\n\n _handlePointerDown = (e) => {\n const container = closest(e.target, `.${styles.fargeleggContainer}`)\n if (!container) {\n return\n }\n if (this.mode !== 'paint') {\n return\n }\n e.preventDefault()\n e.stopImmediatePropagation()\n this.path = []\n if ('PointerEvent' in window) {\n document.body.addEventListener('pointermove', this._handlePointerMove)\n document.body.addEventListener('pointerup', this._handlePointerUp)\n document.body.addEventListener('pointercancel', this._handlePointerUp)\n } else if ('ontouchstart' in document.documentElement) {\n document.body.addEventListener('touchmove', this._handlePointerMove, { passive: false })\n document.body.addEventListener('touchend', this._handlePointerUp)\n document.body.addEventListener('touchcancel', this._handlePointerUp)\n } else {\n document.body.addEventListener('mousemove', this._handlePointerMove)\n document.body.addEventListener('mouseup', this._handlePointerUp)\n }\n this._handlePointerMove(e)\n this._handlePointerMove(e)\n }\n\n _handlePointerMove = (e) => {\n e.preventDefault()\n e.stopImmediatePropagation()\n const container = closest(e.target, `.${styles.fargeleggContainer}`)\n let offsetX\n let offsetY\n if (!container) {\n offsetX = -1\n offsetY = -1\n } else if ('PointerEvent' in window) {\n offsetX = e.offsetX\n offsetY = e.offsetY\n } else if ('ontouchstart' in document.documentElement) {\n offsetX = e.targetTouches[0].pageX - container.offsetLeft\n offsetY = e.targetTouches[0].pageY - container.offsetTop\n } else {\n offsetX = e.offsetX\n offsetY = e.offsetY\n }\n this.path.push({ offsetX, offsetY })\n this._drawLine(this.tempContext, this.prevPos, { offsetX, offsetY }, 1)\n this.prevPos = { offsetX, offsetY }\n }\n\n _drawLine(ctx, prevPos, nextPos, dpr) {\n const innerWidth = Math.min(1200, this.offsetWidth)\n const lineWidth = lineWidths[this.size] + 0.005 * innerWidth\n const { width, height } = ctx.canvas\n\n ctx.save()\n ctx.strokeStyle = this.color\n ctx.lineWidth = lineWidth * dpr\n ctx.lineCap = 'round'\n\n if (\n prevPos &&\n nextPos &&\n prevPos.offsetX > 0 &&\n prevPos.offsetX < width &&\n prevPos.offsetY > 0 &&\n prevPos.offsetY < height &&\n nextPos.offsetX > 0 &&\n nextPos.offsetX < width &&\n nextPos.offsetY > 0 &&\n nextPos.offsetY < height\n ) {\n ctx.beginPath()\n ctx.moveTo(prevPos.offsetX * dpr, prevPos.offsetY * dpr)\n ctx.lineTo(nextPos.offsetX * dpr, nextPos.offsetY * dpr)\n ctx.stroke()\n }\n ctx.restore()\n }\n\n _handlePointerUp = () => {\n delete this.prevPos\n this.image.src = this.drawingCanvas.toDataURL()\n if ('PointerEvent' in window) {\n document.body.removeEventListener('pointermove', this._handlePointerMove)\n document.body.removeEventListener('pointerup', this._handlePointerUp)\n document.body.removeEventListener('pointercancel', this._handlePointerUp)\n } else if ('ontouchstart' in document.documentElement) {\n document.body.removeEventListener('touchmove', this._handlePointerMove, false)\n document.body.removeEventListener('touchend', this._handlePointerUp)\n document.body.removeEventListener('touchcancel', this._handlePointerUp)\n } else {\n document.body.removeEventListener('mousemove', this._handlePointerMove)\n document.body.removeEventListener('mouseup', this._handlePointerUp)\n }\n\n const dpr = this._getDpr()\n let prev\n this.path.forEach((pos) => {\n this._drawLine(this.drawingContext, prev, pos, dpr)\n prev = pos\n })\n this.tempContext.clearRect(0, 0, this.tempCanvas.width, this.tempCanvas.height)\n }\n\n _fillArea(x, y) {\n if (!this._imageData) {\n // Don't fill unless image is loaded and canvases are prepared\n return\n }\n const dpr = this._getDpr()\n const startX = Math.round(x * dpr)\n const startY = Math.round(y * dpr)\n const { width, height } = this.drawingCanvas\n const color = hexToRgbInt(this.color)\n const visited = new Uint8Array(width * height)\n\n const drawingData = this.drawingContext.getImageData(0, 0, width, height)\n const imageData = this._imageData\n const pixelData = {\n width: drawingData.width,\n height: drawingData.height,\n data: new Uint32Array(drawingData.data.buffer),\n }\n const startPos = startY * width + startX\n const pixelList = [startPos]\n const startColor = pixelData.data[startPos]\n const posOffset = [-width, width, -1, 1]\n const posOffsetX = [0, 0, -1, 1]\n if (color === startColor) {\n return\n }\n while (pixelList.length > 0) {\n const pos = pixelList.pop()\n const posX = pos % width\n if (!visited[pos] && imageData.data[pos * 4 + 3] < 200) {\n const pixel = pixelData.data[pos]\n if (pixel === startColor) {\n pixelData.data[pos] = color\n visited[pos] = 1\n for (let i = 0; i < posOffset.length; i++) {\n const nextPos = pos + posOffset[i]\n const nextPosX = posX + posOffsetX[i]\n if (nextPosX > -1 && nextPosX < width) {\n pixelList.push(nextPos)\n }\n }\n }\n }\n }\n this.drawingContext.putImageData(drawingData, 0, 0)\n setTimeout(() => {\n this.image.src = this.drawingCanvas.toDataURL()\n }, 100)\n }\n\n _download = () => {\n const drawingCanvas = this.drawingCanvas\n const { width, height } = drawingCanvas\n const link = document.createElement('a')\n const canvas = document.createElement('canvas')\n canvas.width = width\n canvas.height = height\n\n // Combine drawing and image\n const context = canvas.getContext('2d')\n context.fillStyle = '#ffffff'\n context.fillRect(0, 0, width, height)\n context.drawImage(this.image, 0, 0, width, height)\n context.drawImage(this.drawing, 0, 0, width, height)\n\n link.download = 'filename.png'\n link.href = canvas.toDataURL()\n link.target = '_blank'\n link.click()\n }\n\n _getImageData() {\n const { width, height } = this.drawingCanvas\n const canvas = document.createElement('canvas')\n canvas.width = width\n canvas.height = height\n const context = canvas.getContext('2d')\n context.drawImage(this.drawing, 0, 0, width, height)\n return context.getImageData(0, 0, width, height)\n }\n\n _toggleLock = () => {\n this.lock = !this.lock\n }\n\n get drawing() {\n return this.querySelector('img')\n }\n\n get fargeleggContainer() {\n return this.querySelector(`.${styles.fargeleggContainer}`)\n }\n\n get drawingCanvas() {\n return this.querySelector(`.${styles.drawingCanvas}`)\n }\n\n get tempCanvas() {\n return this.querySelector(`.${styles.tempCanvas}`)\n }\n\n get menu() {\n return this.querySelector(`.${styles.menu}`)\n }\n\n get size() {\n return this.getAttribute('size') || '2'\n }\n\n set size(val) {\n this.setAttribute('size', val)\n }\n\n get color() {\n return this.getAttribute('color') || '#6ab5e9'\n }\n\n set color(val) {\n this.setAttribute('color', val)\n }\n\n get mode() {\n return this.getAttribute('mode')\n }\n\n set mode(val) {\n if (val) {\n this.setAttribute('mode', val)\n } else {\n this.removeAttribute('mode')\n }\n }\n\n get menuVisible() {\n return this.hasAttribute('menu-visible')\n }\n\n set menuVisible(val) {\n if (val) {\n this.setAttribute('menu-visible', '')\n } else {\n this.removeAttribute('menu-visible')\n }\n }\n}\n\nfunction hexToRgbInt(rgbHex) {\n const hexString = `0x${rgbHex.replace('#', '').toUpperCase()}FF`\n const int = parseInt(hexString)\n const { r, g, b, a } = {\n r: (int >> 24) & 255,\n g: (int >> 16) & 255,\n b: (int >> 8) & 255,\n a: int & 255,\n }\n return (a << 24) + (b << 16) + (g << 8) + r\n}\n\nfunction findDPR(offsetWidth, offsetHeight, noImageDataBug) {\n if (noImageDataBug) {\n return Promise.resolve(1)\n }\n const sizes = Array.from({ length: window.devicePixelRatio })\n .map((_, idx) => idx + 1)\n .map((dpr) => [offsetWidth * dpr, offsetHeight * dpr])\n sizes.reverse()\n\n return new Promise((resolve) => {\n canvasSize.test({\n sizes,\n onError(notAllowedWidth) {\n if (notAllowedWidth === offsetWidth) {\n resolve(1)\n }\n // Do nothing\n },\n onSuccess(allowedWidth) {\n const dpr = Math.floor(allowedWidth / offsetWidth)\n resolve(dpr)\n },\n })\n })\n}\n\nfunction isValid(imageData) {\n if (!imageData) {\n return false\n }\n let valid = false\n for (let i = 0; i < imageData.data.length; i++) {\n if (imageData.data[i] > 0) {\n valid = true\n break\n }\n }\n return valid\n}\n","export function debounce(callback, options) {\n let timeoutID\n let lastExec = 0\n\n if (options.noTrailing === true) {\n options.debounceMode = callback\n // eslint-disable-next-line no-param-reassign\n callback = options.noTrailing\n options.noTrailing = undefined\n }\n\n function wrapper() {\n var self = this\n var elapsed = Number(new Date()) - lastExec\n // eslint-disable-next-line prefer-rest-params\n var args = arguments\n\n function exec() {\n lastExec = Number(new Date())\n callback.apply(self, args)\n }\n\n function clear() {\n timeoutID = undefined\n }\n\n if (options.debounceMode && !timeoutID) {\n exec()\n }\n if (timeoutID) {\n clearTimeout(timeoutID)\n }\n\n if (options.debounceMode === undefined && elapsed > options.delay) {\n exec()\n } else if (options.noTrailing !== true) {\n timeoutID = setTimeout(\n options.debounceMode ? clear : exec,\n options.debounceMode === undefined ? options.delay - elapsed : options.delay,\n )\n }\n }\n return wrapper\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"root\":\"root\"};","import { BaseElement } from '@nrk/dh-server-libs/base-element'\nimport { getElementTag } from '@nrk/dh-server-libs/get-element-tag'\nimport Fargelegg from './components/fargelegg.js'\n\nimport './client.css'\n\nconst tag = getElementTag(__APP_NAME__, __APP_VERSION__)\n\nclass AppElement extends BaseElement {\n name = tag\n\n render() {\n if (typeof customElements.get('dh-fargelegg') === 'undefined') {\n customElements.define('dh-fargelegg', Fargelegg)\n }\n this.sendGaEvent({ eventAction: `MOUNT:${tag}` })\n }\n}\n\nif (!customElements.get(tag)) {\n customElements.define(tag, AppElement)\n}\n"],"names":["leafPrototypes","getProto","installedChunks","installChunk","module","exports","getContextId","_coreAnalyticsPromise","BaseElement","HTMLElement","constructor","super","this","sendError","bind","sendGaEvent","connectedCallback","name","Error","setupTracker","render","coreAnalyticsTracker","Promise","resolve","window","then","m","default","coreAnalytics","tracker","create","container","parentId","metadata","location","href","ga","dataset","gaPropertyId","title","contentId","selfId","publishDate","published","message","event","eventCategory","JSON","parse","preloadedState","errorTracking","url","enabled","POLOPOLY_ID_REGEX","str","matches","match","length","extractPolopolyIdFromString","getElementTag","version","split","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","Object","getPrototypeOf","obj","t","value","mode","__esModule","ns","r","def","current","indexOf","getOwnPropertyNames","forEach","key","d","definition","o","defineProperty","enumerable","get","f","e","chunkId","all","keys","reduce","promises","u","miniCssF","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","p","data","ids","modules","runtime","i","j","installedChunkData","push","promise","import","race","_typeof","iterator","_toPropertyKey","arg","input","hint","prim","toPrimitive","res","TypeError","String","Number","configurable","writable","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","apply","_objectSpread","target","arguments","source","getOwnPropertyDescriptors","defineProperties","defaultConfig","rootMargin","threshold","root","ElementIntersectionObserver","elements","onChange","config","slice","intersections","map","isIntersecting","ratio","intersectionObserver","IntersectionObserver","entries","entry","idx","splice","intersectionRatio","elm","observe","disconnect","unobserve","proto","closest","Element","msMatchesSelector","webkitMatchesSelector","el","css","parentElement","toArray","nodeList","_objectSpread2","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","propertyIsEnumerable","_slicedToArray","arr","Array","isArray","_arrayWithHoles","_i","_s","_e","_x","_r","_arr","_n","_d","next","done","err","return","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","from","_iterableToArray","_nonIterableSpread","minLen","n","toString","test","len","arr2","canvasTest","settings","cropCvs","testCvs","size","sizes","shift","width","Math","max","ceil","height","fill","job","Date","now","isWorker","WorkerGlobalScope","self","OffscreenCanvas","document","createElement","cropCtx","getContext","testCtx","fillRect","drawImage","isTestPass","getImageData","benchmark","cvs","postMessage","onSuccess","onError","_excluded","defaults","min","step","usePromise","useWorker","Function","workerJobs","handleMethod","hasCanvasSupport","hasOffscreenCanvasSupport","jobID","_onError","_onSuccess","settingsWithoutCallbacks","worker","js","concat","blob","Blob","type","blobURL","URL","createObjectURL","Worker","revokeObjectURL","onmessage","_e$data","reject","promiseSettings","isLastTest","_settings$sizes$slice2","_settings$sizes$slice3","lastWidth","lastHeight","canvasSize","options","lineWidths","Fargelegg","args","path","image","Image","_imageData","noImageDataBug","_dpr","_createIntersectionObserver","observer","menu","_handleIntersectionChange","item","menuVisible","_disconnectIntersectionObserver","_preventScrollInOldTouchDevices","preventDefault","_updateCanvasWidth","async","canvas","drawingCanvas","drawing","complete","dpr","offsetWidth","offsetHeight","devicePixelRatio","_","reverse","notAllowedWidth","allowedWidth","floor","findDPR","_currentCanvasWidth","drawingContext","clearRect","currentSrc","tempCanvas","tempContext","setTimeout","imageData","_getImageData","valid","isValid","_handleClick","styles","offsetX","offsetY","_fillArea","_handlePointerDown","stopImmediatePropagation","body","addEventListener","_handlePointerMove","_handlePointerUp","documentElement","passive","targetTouches","pageX","offsetLeft","pageY","offsetTop","_drawLine","prevPos","src","toDataURL","removeEventListener","_getDpr","prev","pos","_download","link","context","fillStyle","download","click","_toggleLock","lock","observedAttributes","debouncedUpdateCanvasWidth","callback","timeoutID","lastExec","noTrailing","debounceMode","elapsed","exec","clearTimeout","delay","debounce","_isFullWidth","_isFeatureCover","querySelectorAll","setAttribute","fargeleggContainer","img","button","getAttribute","color","querySelector","disconnectedCallback","attributeChangedCallback","_updateMode","_updateColor","style","setProperty","currentColor","removeAttribute","remoterendered","classList","contains","ctx","nextPos","innerWidth","lineWidth","save","strokeStyle","lineCap","beginPath","moveTo","lineTo","stroke","restore","x","y","startX","round","startY","rgbHex","hexString","replace","toUpperCase","int","parseInt","g","b","a","hexToRgbInt","visited","Uint8Array","drawingData","pixelData","Uint32Array","buffer","startPos","pixelList","startColor","posOffset","posOffsetX","pop","posX","nextPosX","putImageData","val","hasAttribute","tag","__APP_NAME__","__APP_VERSION__","AppElement","customElements","define","eventAction"],"sourceRoot":""}