{"version":3,"file":"main.js","sources":["../FrontendResources/js/components/sticky.js","../FrontendResources/js/components/mobilityservice.js","../FrontendResources/js/components/devicenavigation.js","../FrontendResources/js/components/chapternavigation.js","../FrontendResources/js/components/folder.js","../FrontendResources/js/components/ie-polyfill.js","../FrontendResources/js/components/search.js","../FrontendResources/js/components/touch.js","../FrontendResources/js/components/deviation.js","../FrontendResources/js/components/epiforms.js","../FrontendResources/js/cookieconsent/cookieconsent.js","../FrontendResources/js/cookieconsent/cookie.js","../FrontendResources/js/components/skipToContent.js","../node_modules/jquery/dist/jquery.js","../FrontendResources/js/index.js"],"sourcesContent":["\nimport { isMobile } from './helpers';\nimport { isTablet } from './helpers';\n\n//\n// get scroll Y position\n//\nconst scrollPosY = () => {\n return (window.pageYOffset !== undefined)\n ? window.pageYOffset\n : (document.documentElement || document.body.parentNode || document.body).scrollTop;\n}\n\n//\n// check if main navigation should be sticky\n// \nconst isMainNavigationSticky = (currentPosY) => {\n\n if (!$('body').hasClass('body--search') && $('body').hasClass('display-search-controls')) {\n return false;\n }\n\n const header = $(\"header\");\n const crisis = $('.crisis-information');\n\n const height = (crisis.length > 0 ? crisis.outerHeight() : 0) + header.outerHeight();\n\n return height <= currentPosY;\n};\n\n//\n// check if chapter navigation should be sticky\n//\nconst isChapterNavigationSticky = (chapterNavigationPosY, chapterNavigationHeight, currentPosY) => {\n\n if (chapterNavigationPosY === -1) {\n return false;\n }\n\n if (isTablet())\n return true;\n\n const mainNavigation = $(\".full-width\");\n return ((chapterNavigationHeight + chapterNavigationPosY) - mainNavigation.outerHeight()) <= currentPosY;\n};\n\n//\n// set sticky for main navigation\n//\nconst setSticky = (body) => {\n\n const currentPosY = scrollPosY();\n\n if (isMainNavigationSticky(currentPosY))\n body.addClass(\"sticky\");\n else\n body.removeClass(\"sticky\");\n};\n\n//\n// set sticky for chapter navigation\n//\nconst setChapterNavigationSticky = (body, chapterNavigationPosY, chapterNavigationHeight) => {\n\n const currentPosY = scrollPosY();\n\n\n\n if (isChapterNavigationSticky(chapterNavigationPosY, chapterNavigationHeight, currentPosY)) {\n body.addClass('sticky--chapter');\n }\n else {\n body.removeClass('sticky--chapter');\n }\n\n};\n\n// \n// add sticky event\n//\nconst addStickyEvents = () => {\n \n const body = $(\"body\");\n\n const chapterNavigation = $(\".chapter-navigation .chapter-navigation__wrapper\");\n let chapterNavigationPosY = -1;\n\n if (chapterNavigation.length > 0) {\n\n //\n // Get chapternavigation y-position, and reduce it with scroll to get correct position\n //\n chapterNavigationPosY = (chapterNavigation[0].getBoundingClientRect().top) + scrollPosY();\n\n //\n // Get original height of chapternavigation\n //\n let chapterNavHeight = chapterNavigation[0].getBoundingClientRect().height;\n\n setChapterNavigationSticky(body, chapterNavigationPosY, chapterNavHeight);\n\n document.addEventListener(\"scroll\", () => {\n setChapterNavigationSticky(body, chapterNavigationPosY, chapterNavHeight);\n });\n\n }\n\n setSticky(body);\n\n document.addEventListener(\"scroll\", () => {\n setSticky(body);\n });\n\n\n\n};\n\nexport default () => {\n addStickyEvents();\n};\n\nexport function triggerSticky() {\n const body = $(\"body\");\n setSticky(body);\n};","\nconst addEvents = () => {\n\n $('.form-check--expandable input').click(function() {\n\n var expandableId = $(this).attr(\"aria-controls\");\n var isHidden = $(this).attr(\"aria-expanded\") === 'false';\n if (isHidden) {\n $(this).attr('aria-expanded', 'true');\n $('#' + expandableId).attr('aria-hidden', 'false');\n } else {\n $(this).attr('aria-expanded', 'false');\n $('#' + expandableId).attr('aria-hidden', 'true');\n }\n });\n\n $('.mobilityserviceform').submit(function (e) {\n $('.form-row[aria-hidden=false').each(function (i, div) {\n //console.log('has open checkboxes');\n var formgroups = $($(div).find('fieldset')[0]).children('div.form-group'); \n var inputs = [];\n //console.log(formgroups);\n $(formgroups).each(function (i, div) {\n var input = $(div).find('input, select, textarea');\n if (input.length > 0) {\n inputs.push(input);\n }\n });\n var hasErrors = false;\n $(inputs).each(function (i, input) {\n if ($(input).val() == '') {\n //console.log('haserror');\n //console.log(input);\n $(input).addClass('input-validation-error');\n hasErrors = true;\n }\n });\n if (hasErrors) {\n $(inputs[0]).focus();\n e.preventDefault();\n }\n\n });\n });\n};\n\nexport default () => {\n addEvents();\n};","\nconst toggleSection = () => {\n $('#nav .responsivenavigation, .subnavigation').on(\"click\", \".haschildren a.toggle[data-loaded=true]\", (e) => {\n e.preventDefault();\n $(e.target).parent('li').toggleClass('expanded');\n return false;\n });\n};\n\nconst loadToggle = () => {\n $('#nav .responsivenavigation, .subnavigation').on(\"click\", \".haschildren a.toggle[data-loaded=false]\", (e) => {\n var self = e.target;\n\n $.ajax({\n url: '/SubNavigation/Part/' + $(self).attr(\"data-id\"),\n type: 'GET',\n dataType: 'text',\n success: function (data) {\n $(self).after(data);\n $(self).attr(\"data-loaded\", \"true\");\n $(self).parent('li').toggleClass('expanded');\n }\n });\n e.preventDefault();\n });\n};\n\nconst setupEvents = () => {\n\n $('#nav .inner').on('click', function (e) {\n e.stopPropagation();\n });\n\n $('#nav').on('click', function () {\n $('.header__menu-link').prop('checked', false);\n });\n};\n\nexport default () => {\n toggleSection();\n loadToggle();\n setupEvents();\n};\n","import { isMobile } from './helpers';\n\nconst addToggleEvents = () => {\n\n $(document).on('click', '.chapter-navigation__toggle-link', (e) => {\n const button = $(e.currentTarget);\n const navigation = button.closest('.chapter-navigation');\n\n navigation.toggleClass('open');\n\n e.preventDefault();\n return false;\n });\n\n\n $(\".chapter-navigation__list__item a\").click(function () {\n //console.log('scroll')\n var target = $(this.hash);\n if (target.length) {\n $('html,body').animate({\n scrollTop: target.offset().top - 140\n }, 700);\n }\n return false;\n });\n\n};\n\nexport default () => {\n addToggleEvents();\n};","const addEvents = () => {\n\n\n $(document).on('click', '.folder-button-open, .folder-button-close', (e) => {\n const button = $(e.currentTarget);\n const openAll = button.hasClass('folder-button-open');\n const parent = button.closest('.folder')\n const folderLinks = parent.find('.folder-list__item__link');\n const folderSubs = parent.find('.folder-list--sub');\n\n if (openAll) {\n var container = folderLinks.closest('.folder-list__item');\n container.find('details').each(function () {\n $(this).prop('open', true);\n });\n\n folderLinks.attr('aria-expanded', 'true');\n folderSubs.attr('aria-hidden', 'false');\n } else {\n var container = folderLinks.closest('.folder-list__item');\n container.find('details').each(function () {\n $(this).prop('open', false);\n });\n folderLinks.attr('aria-expanded', 'false');\n folderSubs.attr('aria-hidden', 'true');\n }\n\n\n e.preventDefault();\n return false;\n });\n};\n\nexport default () => {\n addEvents();\n};","import { detectIEandEdge } from './helpers';\n\nconst focusWithin = () => {\n var slice = [].slice;\n var removeClass = function (elem) {\n elem.classList.remove('focus-within');\n };\n var update = (function () {\n var running, last;\n var action = function () {\n var element = document.activeElement;\n running = false;\n if (last !== element) {\n last = element;\n slice.call(document.getElementsByClassName('focus-within')).forEach(removeClass);\n while (element && element.classList) {\n element.classList.add('focus-within');\n element = element.parentNode;\n }\n }\n };\n return function () {\n if (!running) {\n requestAnimationFrame(action);\n running = true;\n }\n };\n })();\n document.addEventListener('focus', update, true);\n document.addEventListener('blur', update, true);\n update();\n};\n\nexport default () => {\n 'use strict';\n\n if (!detectIEandEdge())\n return;\n \n focusWithin();\n\n};\n\n\n","let parameterQuery = 'q';\nlet parameterPage = 'p';\nlet parameterShowDocument = 'd';\n\nlet searchInputSelector = '.search__field';\nlet pageSelector = '.search--pagination input[name=p]';\nlet modalWindowSelector = '.searchfieldIsModal';\nlet displayDocumentsSelector = '.search__documents';\n\n\nconst inputSearch = () => {\n let wto;\n\n $('body').on('keyup', searchInputSelector, (e) => {\n if (!($('body').hasClass('display-search-controls'))) {\n return false;\n }\n\n let searchInput = $(e.currentTarget);\n\n if (searchInput.val().length > 0 && searchInput.val().length < 3) {\n return false;\n }\n\n clearTimeout(wto);\n wto = setTimeout(() => {\n let parameterValue = searchInput.val();\n let url = window.location.href;\n url = appendChangeParameterToUrl(url, parameterQuery, parameterValue);\n url = appendChangeParameterToUrl(url, parameterPage);\n\n pushToHistoryState(url);\n\n doAjaxSearch(searchInput);\n }, 300);\n });\n};\n\nconst paginationResult = () => {\n $('body').on('click', '.search--pagination .search__show-more', (e) => {\n let showMoreButton = $(e.currentTarget);\n let parameterValue = $(pageSelector).val();\n\n if (showMoreButton.data('no-ajax')) {\n return;\n }\n\n e.preventDefault();\n\n let url = window.location.href;\n url = appendChangeParameterToUrl(url, parameterPage, parameterValue);\n pushToHistoryState(url);\n doAjaxSearch(showMoreButton);\n });\n};\n\nconst getRequestData = () => {\n let queryEle = $(searchInputSelector);\n let pageEle = $(pageSelector);\n let isModalWindowEle = $(modalWindowSelector);\n let displayDocumentsEle = $(displayDocumentsSelector);\n\n let requestData = {\n q: (queryEle.length === 0) ? '' : queryEle.val(),\n p: (pageEle.length === 0) ? 1 : pageEle.val(),\n m: (isModalWindowEle.length === 0) ? 0 : isModalWindowEle.val(),\n d: (displayDocumentsEle.length === 0) ? 0 : displayDocumentsEle.is(':checked') ? '1' : '0'\n };\n\n return requestData;\n};\n\nconst doAjaxSearch = (initiator) => {\n let requestData = getRequestData();\n let url = initiator.closest('form').attr('action').replace('/Search/', '').replace(/\\/$/, '') + '/Search';\n\n $.ajax({\n url: url,\n type: 'POST',\n data: JSON.stringify(requestData),\n contentType: 'application/json; charset=utf-8',\n error: (xhr) => {\n console.error('Error: ' + xhr.statusText);\n },\n success: (result) => {\n if (result.IsValid) {\n $('.search__wrapper').html(result.Html);\n $('body').addClass('display-search-result');\n }\n },\n async: true,\n processData: false\n });\n};\n\nconst pushToHistoryState = (url) => {\n let modalWindowEle = $(modalWindowSelector);\n if (modalWindowEle.length > 0 && modalWindowEle.val() === '1') {\n return;\n };\n\n //to change the browser URL to 'pageurl'\n if (url !== window.location) {\n window.history.pushState({ path: url }, '', url);\n }\n};\n\nconst appendChangeParameterToUrl = (url, key, value) => {\n let re = new RegExp(\"([?&])\" + key + \"=.*?(&|#|$)(.*)\", \"gi\"), hash;\n\n if (re.test(url)) {\n if (typeof value !== 'undefined' && value !== null)\n return url.replace(re, '$1' + key + \"=\" + value + '$2$3');\n else {\n hash = url.split('#');\n url = hash[0].replace(re, '$1$3').replace(/(&|\\?)$/, '');\n if (typeof hash[1] !== 'undefined' && hash[1] !== null)\n url += '#' + hash[1];\n return url;\n }\n } else {\n if (typeof value !== 'undefined' && value !== null) {\n let separator = url.indexOf('?') !== -1 ? '&' : '?';\n hash = url.split('#');\n url = hash[0] + separator + key + '=' + value;\n if (typeof hash[1] !== 'undefined' && hash[1] !== null)\n url += '#' + hash[1];\n return url;\n } else\n return url;\n }\n};\n\nconst setupEvents = () => {\n // open search when sticky in desktop and clicking search icon\n //$('.navigation-list__item-link--search').on('click', function (e) {\n // $(searchInputSelector).focus();\n // window.scrollTo(0, 0);\n // e.preventDefault();\n //});\n\n // open search in tablet and mobile header menu\n $('.header__search-link').on('click', function (e) {\n $('body').addClass('display-search-controls');\n $(searchInputSelector).focus();\n e.preventDefault();\n });\n\n // close searc with close button or close by clicking overlay\n $('.search__close,.search__overlay').on('click', function (e) {\n closeSearch(e);\n });\n\n // expand searchfield when clicking it or tabbing to it and start typing\n $('.search__field').on('click keyup', function (e) {\n let isTabbed = (((e.which || e.keyCode) === 9) || e.shiftKey && ((e.which || e.keyCode) === 9));\n\n // Expand the searchfield for every key except tab (keyup event is the only one giving us the key in ie11)\n if (isTabbed) {\n return false;\n }\n\n $('body').addClass('display-search-controls');\n });\n\n // close the searchfield when blur without a search result\n $('.search__field').on('blur', function (e) {\n if (!$('body').hasClass('display-search-result')) {\n closeSearch();\n }\n });\n\n // perform a search on 'Include documents'\n $('.search__documents').on('change', function (e) {\n let ele = $(e.currentTarget);\n let url = window.location.href;\n url = appendChangeParameterToUrl(url, parameterShowDocument, ele.is(':checked') ? '1' : null);\n pushToHistoryState(url);\n doAjaxSearch(ele);\n });\n\n // close the search on close search button\n $('.search__close').on('click', function (e) {\n closeSearch(e);\n });\n};\n\nexport default () => {\n inputSearch();\n paginationResult();\n setupEvents();\n};\n\nexport function closeSearch(e) {\n $('body').removeClass('display-search-controls').removeClass('display-search-result');\n $(searchInputSelector).val('');\n $('.search__wrapper').empty();\n if (e !== undefined) {\n e.preventDefault();\n }\n};","\nconst addEvents = () => {\n $(document).on('touchstart', function () {\n document.body.classList.add('is-touch-device');\n $(document).off('touchstart');\n });\n};\n\nexport default () => {\n addEvents();\n};","\nconst doAjax = (fv, page) => {\n var url = $(\"#traffic-warning\").data('linkurl');\n if (url == \"\") {\n alert('dont remove data-linkurl');\n }\n\n var hasQueryString = url.indexOf('?').length > 0;\n var pageUrl = hasQueryString ? url + \"&fv=\" + fv + \"&page=\" + page : url + \"?fv=\" + fv + \"&page=\" + page;\n\n //to change the browser URL to 'pageurl'\n if (pageUrl != window.location) {\n window.history.pushState({ path: pageUrl }, '', pageUrl);\n }\n $.ajaxSetup({ cache: false });\n $.ajax({\n type: \"GET\",\n url: pageUrl,\n success: function (data) {\n //console.log(data);\n $(\"#traffic-warning-list\").html(data);\n loadMoreClick();\n },\n error: (xhr) => {\n console.error('Error: ' + xhr.statusText);\n }\n });\n}\n\nconst facetClick = () => {\n $('.traffic-warnings__facets a').click(function (e) {\n e.preventDefault();\n $(\".traffic-warnings__facets li\").removeClass(\"traffic-warnings__facet--selected\");\n $(this).parent().addClass(\"traffic-warnings__facet--selected\");\n var facetvalue = ($(this).data('facetname'));\n doAjax(facetvalue, \"\");\n });\n}\n\nconst detailsClick = () => {\n\n $('body').on('click', '.traffic-warning__open', function (e) {\n $(this).toggleClass('traffic-warning__open--expanded');\n e.preventDefault();\n });\n}\n\nconst loadMoreClick = () => {\n $('a.traffic-warnings__list__showmore__button').click(function (e) {\n e.preventDefault();\n var facetvalue = ($(this).data('selectedtrafficinfo'));\n doAjax(facetvalue, 1);\n });\n}\n\nexport default () => {\n facetClick();\n detailsClick();\n loadMoreClick();\n};\n","export default () => {\n\n\n $('.FormTextbox__Input').each(function (index, item) {\n \n\n let label = $(\"label[for='\" + $(this).attr(\"id\") + \"']\");\n let labelOuterHeight = parseFloat(label.outerHeight());\n let labelLineHeight = parseFloat(label.css(\"line-height\"));\n\n \n $(this).attr(\"data-original-height\", parseFloat($(this).css(\"height\")));\n\n if (labelOuterHeight > labelLineHeight) {\n\n \n const inputHeight = parseFloat($(this).css(\"height\")) - parseFloat($(this).css(\"padding-top\")) - parseFloat($(this).css(\"padding-bottom\")) - parseFloat($(this).css(\"border-top-width\")) - parseFloat($(this).css(\"border-bottom-width\"));\n\n $(this).attr(\"data-original-input-height\", inputHeight);\n \n $(this).css(\"height\", parseFloat($(this).css(\"height\")) + (labelOuterHeight - labelLineHeight));\n }\n\n if ($(item).val().length > 0) {\n $(this).parent('.Form__Element').addClass('focused');\n }\n\n });\n $('.FormTextbox__Input').focus(function () {\n if ($(this).val().length === 0) {\n\n\n $(this).parent('.Form__Element').addClass('focused');\n\n let label = $(\"label[for='\" + $(this).attr(\"id\") + \"']\");\n let labelOuterHeight = parseFloat(label.outerHeight());\n let labelLineHeight = parseFloat(label.css(\"line-height\"));\n \n if (parseFloat($(this).css(\"height\")) > $(this).attr(\"data-original-height\")) {\n\n let origPaddingTop = parseFloat($(this).css(\"padding-top\"));\n let paddingTop = 20 + (labelOuterHeight - labelLineHeight);\n $(this).attr(\"data-original-padding-top\", origPaddingTop);\n $(this).css(\"padding-top\", paddingTop);\n\n let origPaddingBottom = parseFloat($(this).css(\"padding-bottom\"));\n $(this).attr(\"data-original-padding-bottom\", origPaddingBottom);\n\n const paddingBottom = parseFloat($(this).css(\"height\")) - parseFloat($(this).css(\"padding-top\")) - parseFloat($(this).css(\"border-top-width\")) - parseFloat($(this).attr(\"data-original-input-height\")) - parseFloat($(this).css(\"border-bottom-width\"));\n \n $(this).css(\"padding-bottom\", paddingBottom);\n }\n }\n\n });\n $('.FormTextbox__Input').blur(function () {\n if ($(this).val().length === 0) {\n $(this).parent('.Form__Element').removeClass('focused');\n\n $(this).css(\"padding-top\", $(this).attr(\"data-original-padding-top\"));\n $(this).css(\"padding-bottom\", $(this).attr(\"data-original-padding-bottom\"));\n\n }\n });\n\n if (typeof epi !== 'undefined' && typeof epi.EPiServer !== 'undefined' && typeof epi.EPiServer.Forms !== \"undefined\") {\n // extend the EpiForm JavaScript API in ViewMode\n $$epiforms(\".EPiServerForms\").on(\"formsStepValidating\", function (event, param1, param2) {\n var firstFailedElement = $(\".Form__Element.ValidationFail\")[0];\n if (!firstFailedElement) {\n return;\n }\n var position = $(firstFailedElement).offset().top - 130;\n $(\"body, html\").animate({\n scrollTop: position\n }, 200);\n $(\"[data-f-datainput]\", firstFailedElement).focus();\n });\n $.extend(true, epi.EPiServer.Forms, {\n // extend the Validator to validate Visitor's value in Clientside. \n Validators: {\n \"Kalmarlanstrafik.Web.Components.ElementBlocks.HoneyPot.HoneyPotValidator\": function (fieldName, fieldValue, validatorMetaData) {\n // this function is used to validate visitor's data value in ViewMode\n let condition = fieldValue.length == 0;\n if (!condition) {\n return { isValid: false, message: validatorMetaData.model.message };\n }\n return { isValid: true };\n },\n \"Kalmarlanstrafik.Web.Components.ElementBlocks.Gdpr.GdprValidator\": function (fieldName, fieldValue, validatorMetaData) {\n // this function is used to validate visitor's data value in ViewMode\n let condition = fieldValue.length > 0;\n if (!condition) {\n return { isValid: false, message: validatorMetaData.model.message };\n }\n return { isValid: true };\n }\n }\n });\n }\n};","export let cookieConsent = (() => {\n var __create = Object.create;\n var __defProp = Object.defineProperty;\n var __getOwnPropDesc = Object.getOwnPropertyDescriptor;\n var __getOwnPropNames = Object.getOwnPropertyNames;\n var __getProtoOf = Object.getPrototypeOf;\n var __hasOwnProp = Object.prototype.hasOwnProperty;\n var __markAsModule = (target) => __defProp(target, \"__esModule\", { value: true });\n var __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n };\n var __reExport = (target, module, copyDefault, desc) => {\n if (module && typeof module === \"object\" || typeof module === \"function\") {\n for (let key of __getOwnPropNames(module))\n if (!__hasOwnProp.call(target, key) && (copyDefault || key !== \"default\"))\n __defProp(target, key, { get: () => module[key], enumerable: !(desc = __getOwnPropDesc(module, key)) || desc.enumerable });\n }\n return target;\n };\n var __toESM = (module, isNodeMode) => {\n return __reExport(__markAsModule(__defProp(module != null ? __create(__getProtoOf(module)) : {}, \"default\", !isNodeMode && module && module.__esModule ? { get: () => module.default, enumerable: true } : { value: module, enumerable: true })), module);\n };\n\n // src/texts.js\n var require_texts = __commonJS({\n \"src/texts.js\"(exports, module) {\n module.exports = Object.freeze({\n descriptions: {\n usage: \"Vi anv\\xE4nder kakor f\\xF6r att ge dig b\\xE4sta m\\xF6jliga upplevelse p\\xE5 v\\xE5r webbplats, till exempel f\\xF6r att anpassa inneh\\xE5ll och annonser, tillhandah\\xE5lla funktioner f\\xF6r sociala medier och f\\xF6r att analysera webbtrafiken. F\\xF6r b\\xE4sta anv\\xE4ndarupplevelse rekommenderar vi att du aktiverar alla kakor, men du kan ocks\\xE5 anpassa inst\\xE4llningarna efter dina behov.\",\n description: \"En del kakor \\xE4r n\\xF6dv\\xE4ndiga f\\xF6r att v\\xE5r hemsida ska fungera, medan andra hj\\xE4lper oss analysera hur hemsidan anv\\xE4nds, personalisera inneh\\xE5ll och reklam. Vi rekommenderar att du aktiverar alla kakor f\\xF6r b\\xE4sta upplevelse men du kan sj\\xE4lvklart anpassa detta efter dina behov.\",\n required: \"Dessa kakor beh\\xF6vs f\\xF6r att v\\xE5r webbplats ska fungera och de kan inte st\\xE4ngas av i v\\xE5ra system. De lagras vanligtvis endast som svar p\\xE5 \\xE5tg\\xE4rder du vidtar, som inneb\\xE4r en beg\\xE4ran om tj\\xE4nster, som t.ex. att g\\xF6ra integritetsinst\\xE4llningar, logga in eller fylla i formul\\xE4r. Du kan st\\xE4lla in din webbl\\xE4sare s\\xE5 att den blockerar eller varnar dig om dessa kakor, men d\\xE5 kommer vissa delar av webbplatsen inte att fungera. Dessa kakor lagrar ingen information som identifierar dig som person.\",\n performance: \"Dessa kakor g\\xF6r att vi kan r\\xE4kna bes\\xF6kare och trafikk\\xE4llor s\\xE5 att vi kan m\\xE4ta och f\\xF6rb\\xE4ttra prestandan p\\xE5 v\\xE5r webbplats. De hj\\xE4lper oss att ta reda p\\xE5 vilka sidor som \\xE4r mest och minst popul\\xE4ra och se hur bes\\xF6kare navigerar omkring p\\xE5 webbplatsen. All information som dessa kakor samlar in \\xE4r sammantagen och d\\xE4rf\\xF6r anonym. Om du inte till\\xE5ter dessa kakor kommer vi inte veta n\\xE4r du har bes\\xF6kt v\\xE5r webbplats och vi kan inte \\xF6vervaka dess prestanda.\",\n functional: \"Dessa kakor ger webbplatsen m\\xF6jlighet att tillhandah\\xE5lla f\\xF6rb\\xE4ttrad funktionalitet och personlig anpassning. De kan lagras av oss eller av tredjepartsleverant\\xF6rer vars tj\\xE4nster vi har lagt till p\\xE5 v\\xE5ra sidor. Syftet med dessa kakor \\xE4r att ge dig en mer personligt anpassad upplevelse p\\xE5 v\\xE5r webbplats baserat p\\xE5 dina tidigare bes\\xF6k och val. Om du inte till\\xE5ter dessa kakor kan det h\\xE4nda att vissa eller inga av dessa tj\\xE4nster fungerar som de ska.\",\n marketing: \"Dessa kakor kan lagras via v\\xE5r webbplats av v\\xE5ra annons\\xF6rer. De kan anv\\xE4ndas och delas av dessa f\\xF6retag f\\xF6r att bygga upp en profil av dina intressen och f\\xF6r att visa dig relevanta annonser p\\xE5 andra webbplatser. Detta baseras p\\xE5 unik identifiering av din webbl\\xE4sare och internetenhet. Om du inte till\\xE5ter dessa kakor ser du mindre riktad marknadsf\\xF6ring.\"\n },\n cookieDescriptions: {\n required: \"Acceptera n\\xF6dv\\xE4ndiga cookies\",\n performance: \"Acceptera prestanda cookies\",\n marketing: \"Acceptera cookies f\\xF6r marknadsf\\xF6ring\",\n functional: \"Acceptera funktionella cookies\"\n },\n btnAccept: \"Acceptera rekommenderade inst\\xE4llningar\",\n btnCustomize: \"Anpassa inst\\xE4llningar\",\n btnSaveCustom: \"Spara\",\n customizeHeader: \"Anpassa inst\\xE4llningar f\\xF6r kakor\"\n });\n }\n });\n\n // src/index.js\n var require_src = __commonJS({\n \"src/index.js\"(exports, module) {\n var import_texts = __toESM(require_texts());\n var _args = {};\n var _workingElement = null;\n var _choices = {};\n var _consentGiven = false;\n var _text = {};\n var createWorkingElement = () => {\n let workingElement = document.getElementById(_args.target);\n if (!workingElement) {\n workingElement = document.createElement(\"div\");\n //workingElement.id = _args.target;\n document.body.append(workingElement);\n }\n workingElement.classList.add(\"CookieConsent\");\n _workingElement = workingElement;\n };\n var populatePopup = () => {\n document.body.classList.add('overflow-hidden');\n const innerMarkup = `\n