{"version":3,"sources":["jsdelivr-header.js","/npm/digitalmarketplace-govuk-frontend@3.12.0/digitalmarketplace/all.js"],"names":[],"mappings":"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","file":"/npm/digitalmarketplace-govuk-frontend@3.12.0/digitalmarketplace/all.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/digitalmarketplace-govuk-frontend@3.12.0/digitalmarketplace/all.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && \"function\" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }, _typeof(obj); }\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define('DMGOVUKFrontend', ['exports'], factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.DMGOVUKFrontend = {}));\n})(void 0, function (exports) {\n  'use strict';\n\n  (function (undefined$1) {\n    // Detection from https://raw.githubusercontent.com/Financial-Times/polyfill-library/master/polyfills/NodeList/prototype/forEach/detect.js\n    var detect = ('forEach' in NodeList.prototype);\n    if (detect) return; // Polyfill from https://raw.githubusercontent.com/Financial-Times/polyfill-service/1f3c09b402f65bf6e393f933a15ba63f1b86ef1f/packages/polyfill-library/polyfills/Element/prototype/matches/polyfill.js\n\n    NodeList.prototype.forEach = Array.prototype.forEach;\n  }).call('object' === (typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) && window || 'object' === (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) && self || 'object' === (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) && global || {}); // used by the cookie banner component\n\n  var DEFAULT_COOKIE_CONSENT = {\n    analytics: false\n  };\n  var COOKIE_CATEGORIES = {\n    _ga: 'analytics',\n    _gid: 'analytics',\n    _gat_govuk_shared: 'analytics'\n  };\n\n  function getCookies() {\n    return document.cookie.split('; ').map(function (fullCookie) {\n      return fullCookie.split('=')[0];\n    });\n  }\n\n  function getCookie(name) {\n    var nameEQ = name + '=';\n    var cookies = document.cookie.split(';');\n\n    for (var i = 0, len = cookies.length; i < len; i++) {\n      var cookie = cookies[i];\n\n      while (cookie.charAt(0) === ' ') {\n        cookie = cookie.substring(1, cookie.length);\n      }\n\n      if (cookie.indexOf(nameEQ) === 0) {\n        return decodeURIComponent(cookie.substring(nameEQ.length));\n      }\n    }\n\n    return null;\n  }\n  /*\n  Cookie methods\n  ==============\n   Usage:\n     Setting a cookie:\n    setCookie('hobnob', 'tasty', { days: 30 })\n     Reading a cookie:\n    getCookie('hobnob')\n     Deleting a cookie:\n    Cookie('hobnob', null)\n  */\n\n\n  function Cookie(name, value, options) {\n    if (typeof value !== 'undefined') {\n      if (value === false || value === null) {\n        return setCookie(name, '', {\n          days: -1\n        });\n      } else {\n        // Default expiry date of 30 days\n        if (typeof options === 'undefined') {\n          options = {\n            days: 30\n          };\n        }\n\n        return setCookie(name, value, options);\n      }\n    } else {\n      return getCookie(name);\n    }\n  }\n\n  function getConsentCookie() {\n    var consentCookie = getCookie('dm_cookies_policy');\n    var consentCookieObj;\n\n    if (consentCookie) {\n      try {\n        consentCookieObj = JSON.parse(consentCookie);\n      } catch (err) {\n        return null;\n      }\n\n      if (_typeof(consentCookieObj) !== 'object' && consentCookieObj !== null) {\n        consentCookieObj = JSON.parse(consentCookieObj);\n      }\n    } else {\n      return null;\n    }\n\n    return consentCookieObj;\n  }\n\n  function setConsentCookie(options) {\n    var cookieConsent = getConsentCookie();\n\n    if (!cookieConsent) {\n      cookieConsent = JSON.parse(JSON.stringify(DEFAULT_COOKIE_CONSENT));\n    }\n\n    for (var cookieType in options) {\n      cookieConsent[cookieType] = options[cookieType]; // Delete cookies of that type if consent being set to false\n\n      if (!options[cookieType]) {\n        for (var cookie in COOKIE_CATEGORIES) {\n          if (COOKIE_CATEGORIES[cookie] === cookieType) {\n            getCookies().filter(function (cookieName) {\n              return cookieName.startsWith(cookie);\n            }).forEach(function (cookieName) {\n              Cookie(cookieName, null);\n\n              if (Cookie(cookieName)) {\n                document.cookie = cookieName + '=;expires=' + new Date() + ';domain=' + window.location.hostname.replace(/^www\\./, '.') + ';path=/';\n              }\n            });\n          }\n        }\n      }\n    }\n\n    setCookie('dm_cookies_policy', JSON.stringify(cookieConsent), {\n      days: 365\n    });\n  }\n\n  function checkConsentCookieCategory(cookieName, cookieCategory) {\n    var currentConsentCookie = getConsentCookie(); // If the consent cookie doesn't exist, but the cookie is in our known list, return true\n\n    if (!currentConsentCookie && COOKIE_CATEGORIES[cookieName]) {\n      return true;\n    }\n\n    currentConsentCookie = getConsentCookie(); // Sometimes currentConsentCookie is malformed in some of the tests, so we need to handle these\n\n    try {\n      return currentConsentCookie[cookieCategory];\n    } catch (e) {\n      console.error(e);\n      return false;\n    }\n  }\n\n  function checkConsentCookie(cookieName, cookieValue) {\n    // If we're setting the consent cookie OR deleting a cookie, allow by default\n    if (cookieName === 'dm_cookies_policy' || cookieValue === null || cookieValue === false) {\n      return true;\n    }\n\n    if (COOKIE_CATEGORIES[cookieName]) {\n      var cookieCategory = COOKIE_CATEGORIES[cookieName];\n      return checkConsentCookieCategory(cookieName, cookieCategory);\n    } else {\n      // Deny the cookie if it is not known to us\n      return false;\n    }\n  } // Usage :\n  // Setting a cookie:\n  // Cookie('hobnob', 'tasty', { days: 30 })\n\n\n  function setCookie(name, value, options) {\n    if (checkConsentCookie(name, value)) {\n      if (typeof options === 'undefined') {\n        options = {};\n      }\n\n      var cookieString = name + '=' + value + '; path=/';\n\n      if (options.days) {\n        var date = new Date();\n        date.setTime(date.getTime() + options.days * 24 * 60 * 60 * 1000);\n        cookieString = cookieString + '; expires=' + date.toGMTString();\n      }\n\n      if (document.location.protocol === 'https:') {\n        cookieString = cookieString + '; Secure';\n      }\n\n      document.cookie = cookieString;\n    }\n  } // Based on https://github.com/alphagov/static/pull/1863\n\n\n  var EMAIL_PATTERN = /[^\\s=/?&]+(?:@|%40|%2540)[^\\s=/?&]+/g; // Not quite sure what this is doing,\n  // see https://github.com/alphagov/digitalmarketplace-frontend-toolkit/blob/master/toolkit/javascripts/analytics/_govukAnalytics.js#L19\n\n  var PIISafe = function PIISafe(value) {\n    this.value = value;\n  };\n\n  function stripPII(value) {\n    if (typeof value === 'string') {\n      return stripPIIFromString(value);\n    } else if (Object.prototype.toString.call(value) === '[object Array]' || Object.prototype.toString.call(value) === '[object Arguments]') {\n      return stripPIIFromArray(value);\n    } else if (_typeof(value) === 'object') {\n      return stripPIIFromObject(value);\n    } else {\n      return value;\n    }\n  }\n\n  function stripPIIFromString(string) {\n    return string.replace(EMAIL_PATTERN, '[email]');\n  }\n\n  function stripPIIFromObject(object) {\n    if (object) {\n      if (object instanceof PIISafe) {\n        return object.value;\n      } else {\n        for (var property in object) {\n          var value = object[property];\n          object[property] = stripPII(value);\n        }\n\n        return object;\n      }\n    }\n  }\n\n  function stripPIIFromArray(array) {\n    for (var i = 0, l = array.length; i < l; i++) {\n      var elem = array[i];\n      array[i] = stripPII(elem);\n    }\n\n    return array;\n  } // Stripped-down wrapper for Google Analytics, based on:\n  // https://github.com/alphagov/static/blob/master/doc/analytics.md\n\n\n  function SetupAnalytics(config) {\n    window.ga('create', config.trackingId, config.cookieDomain, {\n      cookieExpires: config.expires * 24 * 60 * 60\n    });\n    window.ga('set', 'anonymizeIp', config.anonymizeIp);\n    window.ga('set', 'displayFeaturesTask', config.displayFeaturesTask);\n    window.ga('set', 'transport', config.transport);\n  }\n\n  function LoadGoogleAnalytics() {\n    /* eslint-disable */\n    // Copied from Google Analytics installation instructions\n\n    /* jshint ignore:start */\n    (function (i, s, o, g, r, a, m) {\n      i['GoogleAnalyticsObject'] = r;\n      i[r] = i[r] || function () {\n        (i[r].q = i[r].q || []).push(arguments);\n      }, i[r].l = 1 * new Date();\n      a = s.createElement(o), m = s.getElementsByTagName(o)[0];\n      a.async = 1;\n      a.src = g;\n      m.parentNode.insertBefore(a, m);\n    })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');\n    /* jshint ignore:end */\n\n  }\n\n  function TrackPageview(path, title, options) {\n    var page = window.location.pathname + window.location.search;\n    window.ga('send', 'pageview', stripPII(page));\n  } // https://developers.google.com/analytics/devguides/collection/analyticsjs/events\n\n\n  function TrackEvent(category, action, options) {\n    options = options || {};\n    var evt = {\n      eventCategory: category,\n      eventAction: action\n    };\n\n    if (options.label) {\n      evt.eventLabel = options.label;\n      delete options.label;\n    }\n\n    if (_typeof(options) === 'object') {\n      Object.assign(evt, options);\n    }\n\n    window.ga('send', 'event', stripPII(evt));\n  }\n\n  function AddLinkedTrackerDomain(trackingId, name, domains) {\n    window.ga('create', trackingId, 'auto', {\n      name: name\n    }); // Load the plugin.\n\n    window.ga('require', 'linker');\n    window.ga(name + '.require', 'linker'); // Define which domains to autoLink.\n\n    window.ga('linker:autoLink', domains);\n    window.ga(name + '.linker:autoLink', domains);\n    window.ga(name + '.set', 'anonymizeIp', true);\n    window.ga(name + '.set', 'location', stripPII(window.location.href));\n    window.ga(name + '.send', 'pageview');\n  }\n\n  var analytics = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    SetupAnalytics: SetupAnalytics,\n    LoadGoogleAnalytics: LoadGoogleAnalytics,\n    TrackPageview: TrackPageview,\n    TrackEvent: TrackEvent,\n    AddLinkedTrackerDomain: AddLinkedTrackerDomain\n  });\n\n  function LoadGoogleTagManager(googleTagManagerId) {\n    /* eslint-disable */\n    // Copied from Google Tag Manager installation instructions\n\n    /* jshint ignore:start */\n    (function (w, d, s, l, i) {\n      w[l] = w[l] || [];\n      w[l].push({\n        'gtm.start': new Date().getTime(),\n        event: 'gtm.js'\n      });\n      var f = d.getElementsByTagName(s)[0],\n          j = d.createElement(s),\n          dl = l != 'dataLayer' ? '&l=' + l : '';\n      j.async = true;\n      j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;\n      f.parentNode.insertBefore(j, f);\n    })(window, document, 'script', 'dataLayer', googleTagManagerId);\n    /* jshint ignore:end */\n\n  }\n\n  window.DMGOVUKFrontend = window.DMGOVUKFrontend || {}; // TODO: Remove hard coded tracking IDs to make this more generic and useful to others\n\n  var trackingId = 'UA-49258698-1';\n  var linkedTrackingId = 'UA-145652997-1';\n  var googleTagManagerId = 'GTM-NMNTD5C';\n  window[\"ga-disable-\".concat(trackingId)] = true;\n\n  function InitialiseAnalytics() {\n    // guard against being called more than once\n    if (!('analytics' in window.DMGOVUKFrontend)) {\n      window[\"ga-disable-\".concat(trackingId)] = false; // TODO: Check if we still need this hack for the domain\n\n      var cookieDomain = document.domain === 'www.digitalmarketplace.service.gov.uk' ? '.digitalmarketplace.service.gov.uk' : document.domain; // Load Analytics libraries\n\n      LoadGoogleAnalytics(); // Configure profiles and make interface public\n      // for custom dimensions, virtual pageviews and events\n\n      window.DMGOVUKFrontend.analytics = new SetupAnalytics({\n        trackingId: trackingId,\n        cookieDomain: cookieDomain,\n        anonymizeIp: true,\n        displayFeaturesTask: null,\n        transport: 'beacon',\n        expires: 365\n      }); // Add cross-domain tracking for www.gov.uk domain\n\n      AddLinkedTrackerDomain(linkedTrackingId, 'govuk_shared', ['www.gov.uk']); // Track initial pageview\n\n      TrackPageview(); // Load google Tag Manager\n\n      LoadGoogleTagManager(googleTagManagerId);\n    }\n  }\n\n  var CookieBanner = function CookieBanner($module) {\n    this.$module = $module;\n  };\n\n  CookieBanner.prototype.clearOldCookies = function () {\n    // clear any cookies set by the previous version\n    var oldCookies = ['seen_cookie_message', '_ga', '_gid'];\n\n    for (var i = 0; i < oldCookies.length; i++) {\n      if (getCookie(oldCookies[i])) {\n        var cookieString = oldCookies[i] + '=;expires=' + new Date() + ';domain=' + window.location.hostname.replace(/^www\\./, '.') + ';path=/';\n        document.cookie = cookieString;\n      }\n    }\n  };\n\n  CookieBanner.prototype.init = function ($module) {\n    this.$module.hideCookieMessage = this.hideCookieMessage.bind(this);\n    this.$module.showConfirmationMessage = this.showConfirmationMessage.bind(this);\n    this.$module.setCookieConsent = this.setCookieConsent.bind(this);\n    this.$module.cookieBanner = document.querySelector('.dm-cookie-banner');\n    this.$module.cookieBannerConfirmationMessage = this.$module.querySelector('.dm-cookie-banner__confirmation');\n    this.setupCookieMessage();\n  };\n\n  CookieBanner.prototype.setupCookieMessage = function () {\n    var _this = this;\n\n    this.$hideLink = this.$module.querySelector('button[data-hide-cookie-banner]');\n\n    if (this.$hideLink) {\n      this.$hideLink.addEventListener('click', this.$module.hideCookieMessage);\n    }\n\n    this.$acceptCookiesLink = this.$module.querySelector('button[data-accept-cookies=true]');\n\n    if (this.$acceptCookiesLink) {\n      this.$acceptCookiesLink.addEventListener('click', function () {\n        return _this.$module.setCookieConsent(true);\n      });\n    }\n\n    this.$rejectCookiesLink = this.$module.querySelector('button[data-accept-cookies=false]');\n\n    if (this.$rejectCookiesLink) {\n      this.$rejectCookiesLink.addEventListener('click', function () {\n        return _this.$module.setCookieConsent(false);\n      });\n    }\n\n    this.showCookieMessage();\n  };\n\n  CookieBanner.prototype.showCookieMessage = function () {\n    // Show the cookie banner if policy cookie not set\n    var hasCookiesPolicy = getCookie('dm_cookies_policy');\n\n    if (this.$module && !hasCookiesPolicy) {\n      this.$module.style.display = 'block';\n    }\n  };\n\n  CookieBanner.prototype.hideCookieMessage = function (event) {\n    if (this.$module) {\n      this.$module.style.display = 'none';\n    }\n\n    if (event.target) {\n      event.preventDefault();\n    }\n  };\n\n  CookieBanner.prototype.setCookieConsent = function (analyticsConsent) {\n    setConsentCookie({\n      analytics: analyticsConsent\n    });\n    this.$module.showConfirmationMessage(analyticsConsent);\n    this.$module.cookieBannerConfirmationMessage.focus();\n\n    if (analyticsConsent) {\n      InitialiseAnalytics();\n    }\n  };\n\n  CookieBanner.prototype.showConfirmationMessage = function (analyticsConsent) {\n    var messagePrefix = analyticsConsent ? 'You’ve accepted analytics cookies.' : 'You told us not to use analytics cookies.';\n    this.$cookieBannerMainContent = document.querySelector('.dm-cookie-banner__wrapper');\n    this.$cookieBannerConfirmationMessage = document.querySelector('.dm-cookie-banner__confirmation-message');\n    this.$cookieBannerConfirmationMessage.insertAdjacentText('afterbegin', messagePrefix);\n    this.$cookieBannerMainContent.style.display = 'none';\n    this.$module.cookieBannerConfirmationMessage.style.display = 'block';\n  }; // Javascript code to support the Cookie Settings page\n\n\n  function CookieSettings($module) {\n    this.$module = $module;\n  }\n\n  CookieSettings.prototype.init = function () {\n    this.$module.submitSettingsForm = this.submitSettingsForm.bind(this);\n    this.$module.addEventListener('submit', this.$module.submitSettingsForm); // Ensure there aren't two forms for setting cookie preferences on the same page\n\n    this.hideCookieBanner();\n    this.setInitialFormValues();\n  };\n\n  CookieSettings.prototype.setInitialFormValues = function () {\n    var currentConsentCookie = getConsentCookie();\n\n    if (!currentConsentCookie) {\n      // Don't populate the form\n      return;\n    }\n\n    this.hideWarningMessage(); // Populate the form with the existing choice\n\n    var radioButton;\n\n    if (currentConsentCookie.analytics) {\n      radioButton = this.$module.querySelector('input[name=cookies-analytics][value=On]');\n    } else {\n      radioButton = this.$module.querySelector('input[name=cookies-analytics][value=Off]');\n    }\n\n    radioButton.checked = true;\n  };\n\n  CookieSettings.prototype.submitSettingsForm = function (event) {\n    event.preventDefault();\n    var formInputs = event.target.querySelectorAll('input[name=cookies-analytics]');\n    var options = {}; // Retrieve the selected value from the form inputs\n\n    for (var i = 0; i < formInputs.length; i++) {\n      var input = formInputs[i];\n\n      if (input.checked) {\n        var value = input.value === 'On';\n        options.analytics = value;\n        break;\n      }\n    } // the cookie choice must be set when form is submitted\n\n\n    if (options.analytics === undefined) {\n      this.showError();\n      return false;\n    } // Set the analytics cookie preferences\n    // If 'Off' option not checked, this function will also delete any existing Google Analytics cookies\n\n\n    setConsentCookie(options); // If 'On' option checked and analytics not yet present,\n    // initialise Analytics (this includes firing the initial pageview)\n\n    if (options.analytics && !window.DMGOVUKFrontend.analytics) {\n      InitialiseAnalytics();\n    }\n\n    this.hideWarningMessage();\n    this.hideError();\n    this.showConfirmationMessage();\n    return false;\n  };\n\n  CookieSettings.prototype.showConfirmationMessage = function () {\n    var confirmationMessage = document.querySelector('#dm-cookie-settings-confirmation');\n    var previousPageLink = document.querySelector('.dm-cookie-settings__prev-page');\n    var referrer = CookieSettings.prototype.getReferrerLink();\n    document.body.scrollTop = document.documentElement.scrollTop = 0;\n\n    if (referrer && referrer !== document.location.pathname) {\n      previousPageLink.href = referrer;\n      previousPageLink.style.display = 'block';\n    } else {\n      previousPageLink.style.display = 'none';\n    }\n\n    confirmationMessage.style.display = 'block';\n  };\n\n  CookieSettings.prototype.showError = function () {\n    var errorSummary = document.querySelector('#dm-cookie-settings-error');\n\n    if (errorSummary !== null) {\n      errorSummary.style.display = 'block';\n      document.body.scrollTop = document.documentElement.scrollTop = 0;\n    }\n\n    this.showErrorMessage();\n  };\n\n  CookieSettings.prototype.hideError = function () {\n    var errorSummary = document.querySelector('#dm-cookie-settings-error');\n\n    if (errorSummary !== null) {\n      errorSummary.style.display = 'none';\n    }\n\n    this.hideErrorMessage();\n  };\n\n  CookieSettings.prototype.hideWarningMessage = function () {\n    var warningMessage = document.querySelector('#dm-cookie-settings-warning');\n\n    if (warningMessage !== null) {\n      warningMessage.style.display = 'none';\n    }\n  };\n\n  CookieSettings.prototype.hideErrorMessage = function () {\n    var errorMessage = document.querySelector('#dm-cookie-settings-error-message');\n\n    if (errorMessage !== null) {\n      errorMessage.style.display = 'none';\n    }\n\n    var errorMessageHighlight = document.querySelector('.govuk-form-group--error');\n    errorMessageHighlight && errorMessageHighlight.classList.remove('govuk-form-group--error');\n  };\n\n  CookieSettings.prototype.showErrorMessage = function () {\n    var formGroup = document.querySelector('#dm-cookie-settings .govuk-form-group');\n    formGroup && formGroup.classList.add('govuk-form-group--error');\n    var errorMessageSpan = document.createElement('span');\n    errorMessageSpan.setAttribute('id', 'dm-cookie-settings-error-message');\n    errorMessageSpan.className = 'govuk-error-message';\n    errorMessageSpan.innerHTML = '<span class=\"govuk-visually-hidden\">Error:</span> Select yes to accept analytics cookies';\n    var siblingElement = document.querySelector('#cookie-settings-1, .govuk-radios--inline');\n    var parentElement = siblingElement.parentElement;\n    parentElement.insertBefore(errorMessageSpan, siblingElement);\n  };\n\n  CookieSettings.prototype.hideCookieBanner = function () {\n    var cookieBanner = document.querySelector('.dm-cookie-banner');\n\n    if (cookieBanner !== null) {\n      cookieBanner.style.display = 'none';\n    }\n  };\n\n  CookieSettings.prototype.getReferrerLink = function () {\n    return document.referrer ? new URL(document.referrer).pathname : false;\n  };\n\n  var getSibling = function getSibling(direction, elem, selector) {\n    // Get the next sibling element\n    var sibling = direction === 'next' ? elem.nextElementSibling : elem.previousElementSibling; // If there's no selector, return the first sibling\n\n    if (!selector) return sibling; // If the sibling matches our selector, use it\n    // If not, jump to the next sibling and continue the loop\n    // For IE10,11 (Polyfill for matches)\n\n    if (!Element.prototype.matches) {\n      Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n    }\n\n    while (sibling) {\n      if (sibling.matches(selector)) return sibling;\n      sibling = direction === 'next' ? sibling.nextElementSibling : sibling = sibling.previousElementSibling;\n    }\n  };\n\n  function ListInput($module) {\n    this.$module = $module;\n    this.$allVisibleItems = $module.querySelectorAll('.dm-list-input__item--visible');\n    this.$addAnotherButton = $module.querySelector('.dm-list-input__item-add');\n    this.$allItems = $module.querySelectorAll('.dm-list-input__item');\n    this.visibleItems = 0;\n    this.itemContainerClass = 'dm-list-input__item-container';\n    this.hiddenItemClass = 'dm-list-input__item--hidden';\n    this.visibleItemClass = 'dm-list-input__item--visible';\n    this.itemInputClass = 'dm-list-input__item-input';\n    this.itemErrorClass = 'dm-list-input__item--error';\n    this.itemErrorMsgClass = 'dm-list-input-error-message';\n    this.itemCounterClass = 'dm-list-input__counter';\n    this.inputErrorClass = 'govuk-input--error';\n    this.removeButtonClass = 'dm-list-input__item-remove';\n    this.hiddenRemoveButtonClass = 'dm-list-input__item-remove--hidden';\n    this.formGroupErrorClass = 'govuk-form-group--error';\n    this.hiddenAddButtonClass = 'dm-list-input__item-add--hidden';\n    this.addButtonRemainingClass = 'dm-list-input__js-remaining-counter';\n  }\n\n  ListInput.prototype.init = function () {\n    // Check for module\n    if (!this.$module) {\n      return;\n    }\n\n    this.hideEmptyItems();\n    this.updateAllCounters();\n    this.bindRemoveClickEvent();\n    this.toggleAddAnotherButton();\n    this.bindAddClickEvent();\n  }; // Hide all items that do not have a value (except for the first one, or the first two if no items have a value)\n\n\n  ListInput.prototype.hideEmptyItems = function () {\n    var numberOfVisibleEmptyItems = 0;\n    var numberOfFilledInItems = 0;\n    this.$allItems.forEach(function ($item) {\n      var $input = $item.querySelector('.' + this.itemInputClass);\n      var $removeButton = $item.querySelector('.' + this.removeButtonClass);\n\n      if ($input.value === '') {\n        if (numberOfVisibleEmptyItems === 0) {\n          $removeButton.classList.remove(this.hiddenRemoveButtonClass);\n        } else if (numberOfVisibleEmptyItems === 1 && numberOfFilledInItems === 0) {\n          $removeButton.classList.remove(this.hiddenRemoveButtonClass);\n        } else {\n          $item.classList.add(this.hiddenItemClass);\n          $item.classList.remove(this.visibleItemClass);\n          $removeButton.classList.add(this.hiddenRemoveButtonClass);\n          $input.setAttribute('disabled', 'true');\n        }\n\n        numberOfVisibleEmptyItems += 1;\n      } else {\n        $item.classList.remove(this.hiddenItemClass);\n        $item.classList.add(this.visibleItemClass);\n        $removeButton.classList.remove(this.hiddenRemoveButtonClass);\n        numberOfFilledInItems += 1;\n      }\n    }, this);\n    this.$allVisibleItems = this.$module.querySelectorAll('.' + this.visibleItemClass);\n  }; // Binds an event listener to module to listen for any\n  // click events fired by the items \"Remove\" button\n\n\n  ListInput.prototype.bindRemoveClickEvent = function () {\n    this.$module.addEventListener('click', function (event) {\n      var $clickedEl = event.target;\n\n      if ($clickedEl.tagName === 'BUTTON' && $clickedEl.classList.contains(this.removeButtonClass)) {\n        var $item = $clickedEl.parentNode.parentNode; // Remove the input's content and remove its value attribute\n\n        var $input = $item.querySelector('.' + this.itemInputClass);\n        $input.value = '';\n        $input.removeAttribute('value');\n        $input.setAttribute('disabled', 'true');\n        $clickedEl.classList.add(this.hiddenRemoveButtonClass);\n        $item.classList.add(this.hiddenItemClass);\n        $item.classList.remove(this.visibleItemClass);\n        this.$allVisibleItems = this.$module.querySelectorAll('.' + this.visibleItemClass); // Remove Error messages and styling\n\n        if ($item.classList.contains(this.itemErrorClass)) {\n          $item.classList.remove(this.itemErrorClass);\n          var $errorFormGroup = $item.querySelector('.' + this.formGroupErrorClass);\n          $errorFormGroup.classList.remove(this.formGroupErrorClass);\n          $errorFormGroup.querySelector('.' + this.itemErrorMsgClass).remove();\n          var $errorInput = $errorFormGroup.querySelector('.' + this.inputErrorClass);\n          var inputId = $errorInput.getAttribute('id');\n          var inputDescribedBy = $errorInput.getAttribute('aria-describedby');\n          $errorInput.setAttribute('aria-describedby', inputDescribedBy.replace(inputId + '-error', ''));\n          $errorInput.classList.remove(this.inputErrorClass);\n        } // Hide Remove buttons if there is only one item left\n\n\n        if (this.$allVisibleItems.length === 1) {\n          var $removeButtons = this.$module.querySelectorAll('.' + this.removeButtonClass);\n          $removeButtons.forEach(function ($button) {\n            $button.classList.add(this.hiddenRemoveButtonClass);\n          }, this);\n          this.$allVisibleItems[0].querySelector('input').focus();\n        } else {\n          // Set focus to the next input\n          var $nextVisibleItem = getSibling('next', $item, '.' + this.visibleItemClass);\n\n          if ($nextVisibleItem) {\n            $nextVisibleItem.querySelector('input').focus();\n          } else {\n            var $previousVisibleItem = getSibling('previous', $item, '.' + this.visibleItemClass);\n            $previousVisibleItem.querySelector('input').focus();\n          }\n        }\n\n        this.updateAllCounters();\n        this.toggleAddAnotherButton();\n      }\n    }.bind(this));\n  }; // Used to update each item's label and remove button hidden text\n\n\n  ListInput.prototype.updateCounters = function () {\n    var $visibleItems = this.$allVisibleItems;\n    var counter = 1;\n    $visibleItems.forEach(function (item) {\n      var $counters = item.querySelectorAll('.' + this.itemCounterClass);\n      $counters.forEach(function ($counter) {\n        $counter.innerHTML = counter;\n      });\n      counter += 1;\n    }, this);\n  }; // Used to update \"Add another\" buttons \"Remaining\" counter\n  // and sets focus to the new additional input\n\n\n  ListInput.prototype.updateRemainingCounter = function () {\n    var $visibleItems = this.$allVisibleItems;\n    var totalItems = this.$allItems.length;\n    this.$module.querySelector('.' + this.addButtonRemainingClass).innerHTML = totalItems - $visibleItems.length;\n  };\n\n  ListInput.prototype.bindAddClickEvent = function () {\n    this.$addAnotherButton.addEventListener('click', function () {\n      // Find the first hidden item\n      var $firstHiddenItem = this.$module.querySelector('.' + this.hiddenItemClass);\n      var $firstHiddenInput = $firstHiddenItem.querySelector('.' + this.itemInputClass);\n\n      if ($firstHiddenItem) {\n        $firstHiddenInput.removeAttribute('disabled');\n        this.$module.querySelector('.' + this.itemContainerClass).appendChild($firstHiddenItem);\n        $firstHiddenItem.classList.remove(this.hiddenItemClass);\n        $firstHiddenItem.classList.add(this.visibleItemClass);\n        this.$allVisibleItems = this.$module.querySelectorAll('.' + this.visibleItemClass);\n        this.updateAllCounters();\n        $firstHiddenItem.querySelector('.' + this.removeButtonClass).classList.remove(this.hiddenRemoveButtonClass);\n        $firstHiddenInput.focus();\n        this.toggleAddAnotherButton(); // Show Remove buttons if there is more one item\n\n        if (this.$allVisibleItems.length > 1) {\n          var $removeButtons = this.$module.querySelectorAll('.' + this.removeButtonClass);\n          $removeButtons.forEach(function ($button) {\n            $button.classList.remove(this.hiddenRemoveButtonClass);\n          }, this);\n        }\n      }\n    }.bind(this));\n  };\n\n  ListInput.prototype.toggleAddAnotherButton = function () {\n    var $firstHiddenItem = this.$module.querySelector('.' + this.hiddenItemClass);\n\n    if ($firstHiddenItem) {\n      this.$addAnotherButton.classList.remove(this.hiddenAddButtonClass);\n    } else {\n      this.$addAnotherButton.classList.add(this.hiddenAddButtonClass);\n    }\n  };\n\n  ListInput.prototype.updateAllCounters = function () {\n    this.updateCounters();\n    this.updateRemainingCounter();\n  };\n\n  function OptionSelect($module) {\n    this.$optionSelect = $module;\n    this.$options = this.$optionSelect.querySelectorAll(\"input[type='checkbox']\");\n    this.$optionsContainer = this.$optionSelect.querySelector('.js-options-container');\n    this.$optionList = this.$optionsContainer.querySelector('.js-auto-height-inner');\n    this.$allCheckboxes = this.$optionsContainer.querySelectorAll('.govuk-checkboxes__item');\n    this.checkedCheckboxes = [];\n  }\n\n  OptionSelect.prototype.init = function () {\n    // Attach listener to update checked count\n    this.$optionSelect.addEventListener('change', function (event) {\n      var $changedEl = event.target;\n\n      if ($changedEl.tagName === 'INPUT' && $changedEl.type === 'checkbox') {\n        this.updateCheckedCount();\n      }\n    }.bind(this)); // Replace div.container-head with a button\n\n    this.replaceHeadingSpanWithButton(); // Add js-collapsible class to parent for CSS\n\n    this.$optionSelect.classList.add('js-collapsible'); // Add open/close listeners\n\n    this.$optionSelect.querySelector('.js-container-button').addEventListener('click', this.toggleOptionSelect.bind(this));\n\n    if (this.$optionSelect.dataset.closedOnLoad === 'true') {\n      this.close();\n    } else {\n      this.setupHeight();\n    }\n\n    var checkedString = this.checkedString();\n\n    if (checkedString) {\n      this.attachCheckedCounter(checkedString);\n    }\n  };\n\n  OptionSelect.prototype.getAllCheckedCheckboxes = function getAllCheckedCheckboxes() {\n    this.checkedCheckboxes = [];\n    var that = this;\n    this.$allCheckboxes.forEach(function (i) {\n      if (i.querySelector('input[type=checkbox]').checked) {\n        that.checkedCheckboxes.push(i);\n      }\n    }, this);\n  };\n\n  OptionSelect.prototype.replaceHeadingSpanWithButton = function replaceHeadingSpanWithButton() {\n    /* Replace the span within the heading with a button element. This is based on feedback from Léonie Watson.\n      * The button has all of the accessibility hooks that are used by screen readers and etc.\n      * We do this in the JavaScript because if the JavaScript is not active then the button shouldn't\n      * be there as there is no JS to handle the click event.\n    */\n    var $containerHead = this.$optionSelect.querySelector('.js-container-button');\n    var jsContainerHeadHTML = $containerHead.innerHTML; // Create button and replace the preexisting html with the button.\n\n    var $button = document.createElement('button');\n    $button.classList.add('js-container-button', 'dm-option-select__title', 'dm-option-select__button'); // Add type button to override default type submit when this component is used within a form\n\n    $button.setAttribute('type', 'button');\n    $button.setAttribute('aria-expanded', true);\n    $button.setAttribute('id', $containerHead.id);\n    $button.setAttribute('aria-controls', this.$optionsContainer.id);\n    $button.innerHTML = jsContainerHeadHTML;\n    $containerHead.insertAdjacentHTML('afterend', $button.outerHTML);\n    $containerHead.parentNode.removeChild($containerHead);\n  };\n\n  OptionSelect.prototype.attachCheckedCounter = function attachCheckedCounter(checkedString) {\n    this.$optionSelect.querySelector('.js-container-button').insertAdjacentHTML('afterend', '<div class=\"dm-option-select__selected-counter js-selected-counter\">' + checkedString + '</div>');\n  };\n\n  OptionSelect.prototype.updateCheckedCount = function updateCheckedCount() {\n    var checkedString = this.checkedString();\n    var checkedStringElement = this.$optionSelect.querySelector('.js-selected-counter');\n\n    if (checkedString) {\n      if (checkedStringElement) {\n        checkedStringElement.textContent = checkedString;\n      } else {\n        this.attachCheckedCounter(checkedString);\n      }\n    } else {\n      checkedStringElement.parentNode.removeChild(checkedStringElement);\n    }\n  };\n\n  OptionSelect.prototype.checkedString = function checkedString() {\n    this.getAllCheckedCheckboxes();\n    var count = this.checkedCheckboxes.length;\n    var checkedString = false;\n\n    if (count > 0) {\n      checkedString = count + ' selected';\n    }\n\n    return checkedString;\n  };\n\n  OptionSelect.prototype.toggleOptionSelect = function toggleOptionSelect(e) {\n    if (this.isClosed()) {\n      this.open();\n    } else {\n      this.close();\n    }\n\n    e.preventDefault();\n  };\n\n  OptionSelect.prototype.open = function open() {\n    if (this.isClosed()) {\n      this.$optionSelect.querySelector('.js-container-button').setAttribute('aria-expanded', true);\n      this.$optionSelect.classList.remove('js-closed');\n      this.$optionSelect.classList.add('js-opened');\n\n      if (!this.$optionsContainer.style.height) {\n        this.setupHeight();\n      }\n    }\n  };\n\n  OptionSelect.prototype.close = function close() {\n    this.$optionSelect.classList.remove('js-opened');\n    this.$optionSelect.classList.add('js-closed');\n    this.$optionSelect.querySelector('.js-container-button').setAttribute('aria-expanded', false);\n  };\n\n  OptionSelect.prototype.isClosed = function isClosed() {\n    return this.$optionSelect.classList.contains('js-closed');\n  };\n\n  OptionSelect.prototype.setContainerHeight = function setContainerHeight(height) {\n    this.$optionsContainer.style.height = height + 'px';\n  };\n\n  OptionSelect.prototype.isCheckboxVisible = function isCheckboxVisible($checkbox) {\n    var initialOptionContainerHeight = this.$optionsContainer.clientHeight;\n    var optionListOffsetTop = this.$optionList.getBoundingClientRect().top + document.body.scrollTop;\n    var distanceFromTopOfContainer = $checkbox.getBoundingClientRect().top + document.body.scrollTop - optionListOffsetTop;\n    return distanceFromTopOfContainer < initialOptionContainerHeight;\n  };\n\n  OptionSelect.prototype.getVisibleCheckboxes = function getVisibleCheckboxes() {\n    var visibleCheckboxes = [].slice.call(this.$options).filter(this.isCheckboxVisible.bind(this)); // add an extra checkbox, if the label of the first is too long it collapses onto itself\n\n    if (visibleCheckboxes.length < this.$options) {\n      visibleCheckboxes.push(this.$options[visibleCheckboxes.length]);\n    }\n\n    return visibleCheckboxes;\n  };\n\n  OptionSelect.prototype.setupHeight = function setupHeight() {\n    var initialOptionContainerHeight = this.$optionsContainer.clientHeight;\n    var height = this.$optionList.offsetHeight; // check whether this is hidden by progressive disclosure,\n    // because height calculations won't work\n\n    if (this.$optionsContainer.offsetParent === null) {\n      initialOptionContainerHeight = 200;\n      height = 200;\n    } // Resize if the list is only slightly bigger than its container\n\n\n    if (height < initialOptionContainerHeight + 50) {\n      this.setContainerHeight(height + 1);\n      return;\n    } // Resize to cut last item cleanly in half\n\n\n    var visibleCheckboxes = this.getVisibleCheckboxes();\n    var lastVisibleCheckbox = visibleCheckboxes[visibleCheckboxes.length - 1];\n    var position = lastVisibleCheckbox.parentNode.offsetTop; // parent element is relative\n\n    this.setContainerHeight(position + parseFloat(window.getComputedStyle(lastVisibleCheckbox, null).height.replace('px', '')) / 1.5);\n  };\n\n  function SearchBox($module) {\n    this.$module = $module;\n    this.toggleTarget = this.$module.querySelector('.js-class-toggle');\n  }\n\n  SearchBox.prototype.init = function () {\n    // Check for module\n    if (!this.$module) {\n      return;\n    }\n\n    this.$module.addFocusClass = this.addFocusClass.bind(this);\n    this.$module.removeFocusClassFromEmptyInput = this.removeFocusClassFromEmptyInput.bind(this);\n\n    if (!this.inputIsEmpty()) {\n      this.addFocusClass();\n    }\n\n    this.toggleTarget.addEventListener('focus', this.$module.addFocusClass);\n    this.toggleTarget.addEventListener('blur', this.$module.removeFocusClassFromEmptyInput);\n  };\n\n  SearchBox.prototype.inputIsEmpty = function () {\n    return this.toggleTarget.value === '';\n  };\n\n  SearchBox.prototype.addFocusClass = function () {\n    this.toggleTarget.classList.add('focus');\n  };\n\n  SearchBox.prototype.removeFocusClassFromEmptyInput = function () {\n    if (this.inputIsEmpty()) {\n      this.toggleTarget.classList.remove('focus');\n    }\n  };\n\n  function initAll(options) {\n    // Set the options to an empty object by default if no options are passed.\n    options = typeof options !== 'undefined' ? options : {}; // Allow the user to initialise Digital Marketplace GOV.UK Frontend in only\n    // certain sections of the page\n    // Defaults to the entire document if nothing is set.\n\n    var scope = typeof options.scope !== 'undefined' ? options.scope : document;\n    var $cookieBanner = document.querySelector('[data-module=\"dm-cookie-banner\"]');\n\n    if ($cookieBanner) {\n      new CookieBanner($cookieBanner).init();\n    }\n\n    var $cookieSettingsPage = document.querySelector('[data-module=\"dm-cookie-settings\"]');\n\n    if ($cookieSettingsPage) {\n      new CookieSettings($cookieSettingsPage).init();\n    }\n\n    var currentConsentCookie = getConsentCookie();\n\n    if (currentConsentCookie && currentConsentCookie.analytics) {\n      InitialiseAnalytics();\n    }\n\n    var $ListInput = scope.querySelectorAll('[data-module=\"dm-list-input\"]');\n    $ListInput.forEach(function ($ListInput) {\n      new ListInput($ListInput).init();\n    });\n    var $OptionSelect = scope.querySelectorAll('[data-module=\"dm-option-select\"]');\n    $OptionSelect.forEach(function ($OptionSelect) {\n      new OptionSelect($OptionSelect).init();\n    });\n    var $SearchBox = scope.querySelectorAll('[data-module=\"dm-search-box\"]');\n    $SearchBox.forEach(function ($SearchBox) {\n      new SearchBox($SearchBox).init();\n    });\n  }\n\n  exports.Analytics = analytics;\n  exports.CookieBanner = CookieBanner;\n  exports.CookieSettings = CookieSettings;\n  exports.ListInput = ListInput;\n  exports.OptionSelect = OptionSelect;\n  exports.SearchBox = SearchBox;\n  exports.initAll = initAll;\n  exports.initAnalytics = InitialiseAnalytics;\n  Object.defineProperty(exports, '__esModule', {\n    value: true\n  });\n});"]}