@nationalarchives/frontend 1.3.1 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/nationalarchives/all+analytics.js +1 -1
  2. package/nationalarchives/all+analytics.js.map +1 -1
  3. package/nationalarchives/all.css +1 -1
  4. package/nationalarchives/all.css.map +1 -1
  5. package/nationalarchives/all.js +1 -1
  6. package/nationalarchives/all.js.map +1 -1
  7. package/nationalarchives/analytics.js +1 -1
  8. package/nationalarchives/analytics.js.map +1 -1
  9. package/nationalarchives/analytics.mjs +1 -1
  10. package/nationalarchives/components/accordion/accordion.js.map +1 -1
  11. package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -1
  12. package/nationalarchives/components/breadcrumbs/breadcrumbs.js.map +1 -1
  13. package/nationalarchives/components/button/button.css +1 -1
  14. package/nationalarchives/components/button/button.css.map +1 -1
  15. package/nationalarchives/components/button/button.scss +10 -1
  16. package/nationalarchives/components/card/card.css +1 -1
  17. package/nationalarchives/components/card/card.css.map +1 -1
  18. package/nationalarchives/components/checkboxes/checkboxes.css.map +1 -1
  19. package/nationalarchives/components/code-block/code-block.css.map +1 -1
  20. package/nationalarchives/components/code-block/code-block.js.map +1 -1
  21. package/nationalarchives/components/code-block/fixtures.json +1 -1
  22. package/nationalarchives/components/code-block/template.njk +1 -0
  23. package/nationalarchives/components/compound-filters/compound-filters.css.map +1 -1
  24. package/nationalarchives/components/cookie-banner/cookie-banner.js +1 -1
  25. package/nationalarchives/components/cookie-banner/cookie-banner.js.map +1 -1
  26. package/nationalarchives/components/date-input/date-input.js.map +1 -1
  27. package/nationalarchives/components/error-summary/error-summary.css.map +1 -1
  28. package/nationalarchives/components/error-summary/error-summary.js.map +1 -1
  29. package/nationalarchives/components/file-input/file-input.css.map +1 -1
  30. package/nationalarchives/components/file-input/file-input.js.map +1 -1
  31. package/nationalarchives/components/files-list/files-list.css +1 -1
  32. package/nationalarchives/components/files-list/files-list.css.map +1 -1
  33. package/nationalarchives/components/footer/footer.js +1 -1
  34. package/nationalarchives/components/footer/footer.js.map +1 -1
  35. package/nationalarchives/components/gallery/gallery.css.map +1 -1
  36. package/nationalarchives/components/gallery/gallery.js.map +1 -1
  37. package/nationalarchives/components/global-header/global-header.js.map +1 -1
  38. package/nationalarchives/components/header/header.js.map +1 -1
  39. package/nationalarchives/components/picture/picture.js.map +1 -1
  40. package/nationalarchives/components/radios/radios.css.map +1 -1
  41. package/nationalarchives/components/sidebar/sidebar.js.map +1 -1
  42. package/nationalarchives/components/skip-link/skip-link.css +1 -1
  43. package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
  44. package/nationalarchives/components/skip-link/skip-link.js.map +1 -1
  45. package/nationalarchives/components/tabs/fixtures.json +149 -0
  46. package/nationalarchives/components/tabs/macro-options.json +18 -0
  47. package/nationalarchives/components/tabs/tabs.css +1 -1
  48. package/nationalarchives/components/tabs/tabs.css.map +1 -1
  49. package/nationalarchives/components/tabs/tabs.js +1 -1
  50. package/nationalarchives/components/tabs/tabs.js.map +1 -1
  51. package/nationalarchives/components/tabs/tabs.mjs +6 -4
  52. package/nationalarchives/components/tabs/tabs.scss +3 -1
  53. package/nationalarchives/components/tabs/template.njk +1 -1
  54. package/nationalarchives/components/text-input/text-input.js.map +1 -1
  55. package/nationalarchives/components/textarea/textarea.js.map +1 -1
  56. package/nationalarchives/error-page.css +1 -1
  57. package/nationalarchives/error-page.css.map +1 -1
  58. package/nationalarchives/ie.css.map +1 -1
  59. package/nationalarchives/prototype-kit.css +1 -1
  60. package/nationalarchives/prototype-kit.css.map +1 -1
  61. package/nationalarchives/tools/_a11y.scss +2 -0
  62. package/package.json +3 -2
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.TNAFrontendAnalytics=t():e.TNAFrontendAnalytics=t()}(self,()=>(()=>{"use strict";var e={404(e,t,a){a.d(t,{A:()=>r});class n{events={};oneTimeEvents={};constructor(){if(window.TNAFrontendCookieEvents&&window.TNAFrontendCookieEvents instanceof n)return window.TNAFrontendCookieEvents;window.TNAFrontendCookieEvents=this}clearAll(){this.events={},this.oneTimeEvents={}}on(e,t){this.events[e]=[...this.events[e]||[],t]}once(e,t){this.oneTimeEvents[e]=[...this.oneTimeEvents[e]||[],t]}trigger(e,t={}){Object.hasOwn(this.events,e)&&this.events[e].forEach(e=>e.call(this,t)),Object.hasOwn(this.oneTimeEvents,e)&&(this.oneTimeEvents[e].forEach(e=>e.call(this,t)),this.oneTimeEvents[e]=[])}}class r{defaultDomain="";defaultPath="";secure=!0;preferencesKey="";events=null;defaultAge=null;preferencesCorrectOnInit=!1;tnaCookiePreferences=["usage","settings","marketing","essential"];constructor(e={}){const{defaultDomain:t,defaultPath:a,secure:r,preferencesKey:i,preferencesSetKey:o,defaultAge:s,noInit:c=!1}=e,l=document.documentElement.dataset;this.defaultDomain=t||l.tnaCookiesDomain||window.location.hostname,this.defaultPath=a||l.tnaCookiesPath||"/",this.secure=r||"true"!==l.tnaCookiesInsecure,this.preferencesKey=i||l.tnaCookiesPreferencesKey||"cookie_preferences",this.preferencesSetKey=o||l.tnaCookiesPreferencesSetKey||"cookie_preferences_set",this.defaultAge=s||parseInt(l.tnaCookiesDefaultAge,10)||31536e3,this.events=new n,this.preferencesCorrectOnInit=this.validatePreferences(this.preferences),this.preferencesCorrectOnInit||(this.preferencesSet=!1,c||this.init())}init(){const e=this.preferences,t=Object.fromEntries(Object.keys(e).filter(e=>this.tnaCookiePreferences.includes(e)).map(t=>[t,e[t]]));this.savePreferences({usage:!1,settings:!1,marketing:!1,...t,essential:!0})}validatePreferences(e){return Object.keys(e).length===this.tnaCookiePreferences.length&&this.tnaCookiePreferences.every(t=>Object.keys(e).includes(t)&&"boolean"==typeof e[t])}get all(){const e={};return document.cookie.split("; ").filter(e=>""!==e.trim()).filter(e=>e.includes("=")).forEach(t=>{const a=t.trim().split("="),[n,r=""]=a;e[n]=decodeURIComponent(r)}),e}get preferences(){try{return JSON.parse(this.get(this.preferencesKey)||"{}")}catch(e){return{}}}exists(e){return Object.hasOwn(this.all,e)}hasValue(e,t){return this.get(e)===t}get(e){if(this.exists(e))return decodeURIComponent(this.all[e])}set(e,t,a={}){const{maxAge:n=this.defaultAge,sameSite:r="Lax",domain:i=this.defaultDomain,path:o=this.defaultPath,secure:s=this.secure,session:c=!1}=a;if(!e)return;const l=s?"; secure":"",d=c?"":`; max-age=${n}`,m=`${encodeURIComponent(e)}=${encodeURIComponent(t)}; domain=${i}; samesite=${r}; path=${o}${d}${l}`;document.cookie=m;const h={key:e,value:t,maxAge:n,path:o,sameSite:r,domain:i,secure:s,session:c,cookie:m};this.events.trigger("setCookie",h)}delete(e,t="/",a=this.defaultDomain){const n={maxAge:-1,path:t,domain:a};this.set(e,"",n),this.events.trigger("deleteCookie",{key:e,...n})}deleteAll(e="/",t=this.defaultDomain){Object.keys(this.all).forEach(a=>{this.delete(a,e,t)});const a={path:e,domain:t};this.events.trigger("deleteAllCookies",a)}enablePreference(e){if(!Object.hasOwn(this.preferences,e))throw new Error(`Preference '${e}' does not exist`);this.setPreference(e,!0),this.events.trigger("enablePreference",e),this.events.trigger("changePreference",{[e]:!0})}disablePreference(e){if(!Object.hasOwn(this.preferences,e))throw new Error(`Preference '${e}' does not exist`);this.setPreference(e,!1),this.events.trigger("disablePreference",e),this.events.trigger("changePreference",{[e]:!1})}setPreference(e,t){if(!Object.hasOwn(this.preferences,e))throw new Error(`Preference '${e}' does not exist`);"essential"!==e&&(this.savePreferences({...this.preferences,[e]:t,essential:!0}),this.events.trigger("changePreference",{[e]:t}))}enableAllPreferences(){const e=Object.fromEntries(Object.keys(this.preferences).map(e=>[e.toLowerCase(),!0]));this.savePreferences(e),this.preferencesSet=!0,this.events.trigger("enableAllPreferences"),this.events.trigger("changePreference",e)}disableAllPreferences(){const e={...Object.fromEntries(Object.keys(this.preferences).map(e=>[e.toLowerCase(),!1])),essential:!0};this.savePreferences(e),this.preferencesSet=!0,this.events.trigger("disableAllPreferences"),this.events.trigger("changePreference",e)}savePreferences(e){this.set(this.preferencesKey,JSON.stringify(e))}get preferencesSet(){return this.hasValue(this.preferencesSetKey,"true")}set preferencesSet(e){!0===e&&this.validatePreferences(JSON.parse(this.get(this.preferencesKey)))?this.set(this.preferencesSetKey,"true"):this.delete(this.preferencesSetKey),this.events.trigger("preferencesSet")}preference(e){if(Object.hasOwn(this.preferences,e))return!0===this.preferences[e];throw new Error(`Preference '${e}' does not exist`)}on(e,t){this.events.on(e,t)}once(e,t){this.events.once(e,t)}}}};const t={};function a(n){const r=t[n];if(void 0!==r)return r.exports;const i=t[n]={exports:{}};return e[n](i,i.exports,a),i.exports}a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};let n={};a.r(n),a.d(n,{EventTracker:()=>m,GA4:()=>h,helpers:()=>u});var r=a(404);const i=e=>{if(""!==e.id)return`id("${e.id}")`;if(e===document.body)return e.tagName;let t=0;if(e.parentNode){const a=e.parentNode.childNodes;for(let n=0;n<a.length;n+=1){const r=a[n];if(r===e)return`${i(e.parentNode)}/${e.tagName}[${t+1}]`;1===r.nodeType&&r.tagName===e.tagName&&(t+=1)}return`${i(e.parentNode)}/${e.tagName}`}return e.tagName},o=(e,t)=>{let a="",n=e;do{for(;n.previousElementSibling;)if(n=n.previousElementSibling,t.some(e=>n.matches(e))){a=n.innerText;break}n=n.parentElement}while(n.parentElement&&!a);return a},s=e=>o(e,["h1","h2","h3","h4","h5","h6"]),c={text:e=>e.innerText.replace(/\n/gu," "),html:e=>e.innerHTML,value:e=>e.value,index:(e,t,a,n)=>n,instance:(e,t,a,n,r)=>r,checked:e=>e.checked?"checked":"unchecked",expanded:e=>{const t=e.getAttribute("aria-expanded");return null===t?null:"true"===t.toString()?"opened":"closed"},closestHeading:e=>s(e),xpath:e=>i(e.target)},l=e=>JSON.stringify(Array.from(e.files).map(e=>({name:e.name,size:e.size,type:e.type}))),d=[{scope:".tna-accordion",areaName:"accordion",rootEventName:"select_feature",rootData:{data_component_name:"accordion"},events:[{eventName:"click",targetElement:".tna-accordion__summary",on:"click",data:{state:c.expanded,value:c.text},rootData:{data_link_type:c.expanded,data_link:c.text,data_position:c.index}}]},{scope:".tna-breadcrumbs",areaName:"breadcrumbs",rootEventName:"select_navigation",rootData:{data_component_name:"breadcrumbs"},events:[{eventName:"click",targetElement:"a.tna-breadcrumbs__link",on:"click",data:{state:"expand",value:c.html},rootData:{data_link_type:"breadcrumb_link",data_link:c.text}},{eventName:"click",targetElement:".tna-breadcrumbs__item--expandable button.tna-breadcrumbs__link",on:"click",data:{state:"expand",value:c.html},rootData:{data_link_type:"breadcrumb_expand",data_link:c.text}}]},{scope:".tna-checkboxes",areaName:"checkboxes",events:[{eventName:"toggle",targetElement:".tna-checkboxes__item input",on:"change",data:{state:c.checked,value:(e,t,a)=>e.parentNode.innerText.trim(),group:(e,t,a)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]},{scope:".tna-details",areaName:"details",events:[{eventName:"click",targetElement:".tna-details__summary",on:"click",data:{state:(e,t,a)=>t.querySelector(".tna-details__details")?.hasAttribute("open")?"closed":"opened",value:c.text}}]},{scope:".tna-error-summary",areaName:"error-summary",events:[{eventName:"jump",targetElement:"a.tna-error-summary__link",on:"click",data:{value:c.text}}]},{scope:".tna-file-input",areaName:"file-input",events:[{eventName:"blurred",on:"blur",data:{value:l,state:e=>e.files.length,group:(e,t)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}},{eventName:"cancelled",on:"cancel",data:{value:l,state:e=>e.files.length,group:(e,t)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}},{eventName:"changed",on:"change",data:{value:l,state:e=>e.files.length,group:(e,t)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]},{scope:".tna-footer",areaName:"footer",rootEventName:"global_navigation",rootData:{data_component_name:"footer"},events:[{eventName:"link.click",targetElement:".tna-footer__navigation-block-item-link",on:"click",data:{value:c.text},rootData:{data_link_type:"link",data_section:c.closestHeading,data_link:c.text}},{eventName:"social_link.click",targetElement:".tna-footer__social-item-link",on:"click",data:{value:c.text},rootData:{data_link_type:"icon",data_section:"Social media",data_link:e=>e.dataset.name}},{eventName:"legal_link.click",targetElement:".tna-footer__legal-item-link",on:"click",data:{value:c.text},rootData:{data_link_type:"link",data_section:"Legal information",data_link:c.text}},{eventName:"mailing_list.click",targetElement:".tna-footer__mailing-list a.tna-button",on:"click",data:{value:c.text},rootData:{data_link_type:"button",data_section:"Mailing list",data_link:c.text}},{eventName:"ogl.click",targetElement:".tna-footer__licence p a.tna-footer__link",on:"click",data:{value:c.text},rootData:{data_link_type:"link",data_section:"OGL",data_link:c.text}},{eventName:"govuk.click",targetElement:".tna-footer__govuk-link",on:"click",data:{value:c.text},rootData:{data_link_type:"Logo",data_section:"GOV.UK",data_link:c.text}},{eventName:"theme.change",targetElement:".tna-footer__theme-selector-button",on:"click",data:{value:c.value}}]},{scope:".tna-gallery",areaName:"gallery",rootEventName:"select_media",rootData:{media_type:"gallery",media_duration:(e,t)=>t.querySelectorAll(".tna-gallery__navigation-item").length,media_provider:"tna",media_title:(e,t,a,n,r)=>t.querySelector(".tna-gallery__header-inner")?.innerText?.trim()||`gallery_${r}`,media_progress:(e,t)=>(Array.from(t.querySelectorAll(".tna-gallery__navigation-item")).findIndex(e=>"true"===e.getAttribute("aria-current"))||-1)+1},events:[{eventName:"click",targetElement:".tna-gallery__navigation-item",on:"click",data:{value:c.text},rootData:{data_link:"image",media_action:"progress",media_progress:c.index}},{eventName:"click",targetElement:".tna-gallery__navigation-prev",on:"click",data:{value:(e,t)=>t.querySelector(".tna-gallery__item:not([hidden]) .tna-gallery__item-header")?.innerText?.trim()},rootData:{data_link:"previous",media_action:"progress"}},{eventName:"click",targetElement:".tna-gallery__navigation-next",on:"click",data:{value:(e,t)=>t.querySelector(".tna-gallery__item:not([hidden]) .tna-gallery__item-header")?.innerText?.trim()},rootData:{data_link:"next",media_action:"progress"}},{eventName:"keypress",on:"keydown",onCondition:(e,t,a)=>["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","End","Home"].includes(a.key),data:{value:(e,t,a)=>a.key},rootData:{data_link:"keypress",media_action:"progress"}}]},{scope:".tna-global-header",areaName:"header",rootEventName:"global_navigation",rootData:{data_component_name:"header"},events:[{eventName:"toggle",targetElement:".tna-global-header__navigation-button",on:"click",data:{state:c.expanded},rootData:{data_link_type:"mobile_menu",data_link:e=>{const t=e.getAttribute("aria-expanded");return null===t?null:"true"===t.toString()?"Open menu":"Close menu"},data_section:"Burger menu"}},{eventName:"logo.click",targetElement:".tna-global-header__logo",on:"click",rootData:{data_link_type:"logo",data_link:"The National Archives",data_section:"Top navigation and logo"}},{eventName:"primary_link.click",targetElement:".tna-global-header__navigation-item-link",on:"click",data:{value:c.text},rootData:{data_link_type:"menu",data_section:c.text,data_position:1,data_link:c.text}},{eventName:"secondary_link.click",targetElement:".tna-global-header__top-navigation-link",on:"click",data:{value:c.text},rootData:{data_link_type:"icon",data_link:c.text,data_section:"Top navigation and logo"}}]},{scope:".tna-header",areaName:"header",events:[{eventName:"toggle",targetElement:".tna-header__navigation-button",on:"click",data:{state:c.expanded}}]},{scope:".tna-hero",areaName:"hero",events:[{eventName:"toggle_caption",targetElement:".tna-hero__details-summary",on:"click",data:{state:(e,t,a)=>t.querySelector(".tna-hero__details")?.hasAttribute("open")?"closed":"opened",value:(e,t,a)=>t.querySelector("img[alt]")?.getAttribute("alt")}}]},{scope:".tna-picture",areaName:"picture",events:[{eventName:"toggle_transcript",targetElement:".tna-picture__toggle-transcript",on:"click",data:{state:c.expanded,value:(e,t,a)=>{const n=s(t),r=t.querySelector(".tna-picture__image"),i=r.getAttribute("src"),o=`${r.getAttribute("alt")} (${i})`;return n?`${n} > ${o}`:o}}}]},{scope:".tna-radios",areaName:"radios",events:[{eventName:"toggle",targetElement:".tna-radios__item input",on:"change",data:{state:c.checked,value:(e,t,a)=>e.parentNode.innerText,group:(e,t,a)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]},{scope:".tna-search-field",areaName:"search-field",events:[{eventName:"blurred",targetElement:".tna-search-field__input",on:"blur",data:{value:c.value,group:(e,t,a)=>t.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]},{scope:".tna-sidebar",areaName:"sidebar",rootEventName:"select_navigation",rootData:{data_component_name:"sidebar",data_section:(e,t)=>t.querySelector(".tna-sidebar__heading")?.innerText?.trim()},events:[{eventName:"click",targetElement:"a.tna-sidebar__link",on:"click",rootData:{data_link_type:"sidebar_link",data_link:c.text,data_position:c.index}}]},{scope:".tna-text-input",areaName:"text-input",events:[{eventName:"blurred",on:"blur",data:{value:c.value,group:(e,t)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]},{scope:".tna-textarea",areaName:"textarea",events:[{eventName:"blurred",on:"blur",data:{value:c.value,group:(e,t,a)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]}];class m{cookies=new r.A;events=[];startTime=new Date;prefix="tna";document=document;constructor(e={}){const{prefix:t=null,documentScope:a=document}=e;t&&(this.prefix=t),a&&(this.document=a)}start(e){navigator.doNotTrack&&1===navigator.doNotTrack||(this.cookies.preference("usage")&&this.enableTracking(),this.cookies.on("changePolicy",e=>{Object.hasOwn(e,"usage")&&(e.usage?this.enableTracking():this.disableTracking())}),e&&this.initAll())}enableTracking(){}disableTracking(){}initAll(){d.forEach(e=>{this.addListeners(e.scope,e.areaName,e.events,e.rootEventName||"",e.rootData||{})})}addListeners(e,t,a,n="",r={}){let i=[];"string"==typeof e?i=Array.from(this.document.querySelectorAll(e)):"object"==typeof e&&(i=[e]),0!==i.length&&i.forEach((i,o)=>{a.forEach(a=>{a.on&&(a.targetElement?Array.from(i.querySelectorAll(a.targetElement)).forEach((s,c)=>this.attachListener(s,i,n,r,a,e,t,c+1,o+1)):this.attachListener(i,i,n,r,a,e,t,1,o+1))})})}generateEventName(e,t){return`${this.prefix}.${e}.${t.eventName||t.on}`}attachListener(e,t,a,n,r,o,s,c,l){const{on:d,data:m,targetElement:h,rootData:g={},onCondition:u=null}=r;e.addEventListener(d,d=>{const p=[e,t,d,c,l];(null===u||this.computedValue(u,...p))&&this.recordEvent(r.rootEventName?`${this.prefix}.${r.rootEventName}`:a?`${this.prefix}.${a}`:this.generateEventName(s,r),{...m,name:this.generateEventName(s,r),value:m?.value?this.computedValue(m.value,...p):null,state:m?.state?this.computedValue(m.state,...p):null,group:m?.group?this.computedValue(m.group,...p):null,xPath:i(e),targetElement:h,timeSincePageLoad:new Date-this.startTime,index:c,instance:l,scope:o,areaName:s},Object.fromEntries(Object.entries({...n,...g}).map(([e,t])=>[e,this.computedValue(t,...p)])))})}computedValue(e,t,a,n,r,i){return"function"==typeof e?e.call(this,t,a,n,r,i):e??null}recordEvent(e,t,a={}){this.events.push({event:e,...t,...a})}getTnaMetaTags(){return Object.fromEntries([...Array.from(document.head.querySelectorAll(`meta[name^="${this.prefix}_root:"][content]`)).map(e=>[e.getAttribute("name").replace(new RegExp(`^${this.prefix}_root:`,"u"),""),e.getAttribute("content")]),...Array.from(document.head.querySelectorAll(`meta[name^="${this.prefix}."][content]`)).map(e=>[e.getAttribute("name"),e.getAttribute("content")])])}getUserPreferences(){const e={};e[`${this.prefix}.pref.prefers-color-scheme`]=window.matchMedia?.("(prefers-color-scheme: dark)").matches?"dark":"light",e[`${this.prefix}.pref.forced-colors`]=window.matchMedia?.("(forced-colors: active)").matches;let t="no-preference";return window.matchMedia?.("(prefers-contrast: more)").matches?t="more":window.matchMedia?.("(prefers-contrast: less)").matches&&(t="less"),e[`${this.prefix}.pref.prefers-contrast`]=t,e[`${this.prefix}.pref.prefers-reduced-motion`]=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches,e[`${this.prefix}.pref.prefers-reduced-transparency`]=window.matchMedia?.("(prefers-reduced-transparency: reduce)").matches,e}}class h extends m{addTrackingCode=!0;trackingCodeAdded=!1;trackingEnabled=!1;gTagId;constructor(e={}){if(window.TNAFrontendAnalyticsGA4)return window.TNAFrontendAnalyticsGA4;const{id:t="",prefix:a=null,initAll:n=!0,addTrackingCode:r=!0}=e;super({prefix:a}),window.TNAFrontendAnalyticsGA4=this,this.addTrackingCode=r,window.dataLayer||=[],t&&(this.gTagId=t,this.ga4Disable=`ga-disable-${this.gTagId}`,this.cookies.preference("usage")||(window[this.ga4Disable]=!0,this.cookies.set(this.ga4Disable,"true"))),this.start(n)}destroy(){window.TNAFrontendAnalyticsGA4=null}recordEvent(e,t,a={}){const n={event:e,...Object.fromEntries(Object.entries(t).map(([e,t])=>[`${this.prefix}.event.${e}`,t])),...a};this.pushToDataLayer(n)}gtag(...e){this.pushToDataLayer(e)}pushToDataLayer(e){window.dataLayer.push(e)}enableTracking(){if(!this.trackingEnabled){if(window[this.ga4Disable]=!1,this.cookies.set(this.ga4Disable,"false"),!this.trackingCodeAdded&&this.addTrackingCode){if(!this.gTagId)throw Error("ID was not specified");this.pushToDataLayer({...this.getTnaMetaTags(),...this.getUserPreferences(),"gtm.start":(new Date).getTime(),event:"gtm.js"});const[e]=document.getElementsByTagName("script"),t=document.createElement("script");t.async=!0,t.src=`https://www.googletagmanager.com/gtm.js?id=${this.gTagId}&l=dataLayer`,e?e.parentNode.insertBefore(t,e):document.head.appendChild(t),this.trackingCodeAdded=!0}this.trackingEnabled=!0}}disableTracking(){this.trackingEnabled&&(window[this.ga4Disable]=!0,this.cookies.set(this.ga4Disable,"true"),Object.keys(this.cookies.all).forEach(e=>{e.startsWith("_ga")&&this.cookies.delete(e)}),this.trackingEnabled=!1)}}const g=document.documentElement.dataset.ga4;g&&new h({id:g});const u={getXPathTo:i,getClosestHeading:s,getClosestElement:o,valueGetters:c};return n})());
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.TNAFrontendAnalytics=t():e.TNAFrontendAnalytics=t()}(self,()=>(()=>{"use strict";var e={153(e,t,a){a.d(t,{A:()=>i});const n=Symbol.for("TNAFrontendCookieEventHandler");class r{events={};oneTimeEvents={};[n]=!0;constructor(){if(window.TNAFrontendCookieEvents?.[n])return window.TNAFrontendCookieEvents;window.TNAFrontendCookieEvents=this}clearAll(){this.events={},this.oneTimeEvents={}}on(e,t){this.events[e]=[...this.events[e]||[],t]}once(e,t){this.oneTimeEvents[e]=[...this.oneTimeEvents[e]||[],t]}trigger(e,t={}){Object.hasOwn(this.events,e)&&this.events[e].forEach(e=>e.call(this,t)),Object.hasOwn(this.oneTimeEvents,e)&&(this.oneTimeEvents[e].forEach(e=>e.call(this,t)),this.oneTimeEvents[e]=[])}}class i{defaultDomain="";defaultPath="";secure=!0;preferencesKey="";events=null;defaultAge=null;preferencesCorrectOnInit=!1;tnaCookiePreferences=["usage","settings","marketing","essential"];constructor(e={}){const{defaultDomain:t,defaultPath:a,secure:n,preferencesKey:i,preferencesSetKey:o,defaultAge:s,noInit:c=!1}=e,l=document.documentElement.dataset;this.defaultDomain=t||l.tnaCookiesDomain||window.location.hostname,this.defaultPath=a||l.tnaCookiesPath||"/",this.secure=n||"true"!==l.tnaCookiesInsecure,this.preferencesKey=i||l.tnaCookiesPreferencesKey||"cookie_preferences",this.preferencesSetKey=o||l.tnaCookiesPreferencesSetKey||"cookie_preferences_set",this.defaultAge=s||parseInt(l.tnaCookiesDefaultAge,10)||31536e3,this.events=new r,this.preferencesCorrectOnInit=this.validatePreferences(this.preferences),this.preferencesCorrectOnInit||(this.preferencesSet=!1,c||this.init())}init(){const e=this.preferences,t=Object.fromEntries(Object.keys(e).filter(e=>this.tnaCookiePreferences.includes(e)).map(t=>[t,e[t]]));this.savePreferences({usage:!1,settings:!1,marketing:!1,...t,essential:!0})}validatePreferences(e){return Object.keys(e).length===this.tnaCookiePreferences.length&&this.tnaCookiePreferences.every(t=>Object.keys(e).includes(t)&&"boolean"==typeof e[t])}get all(){const e={};return document.cookie.split("; ").filter(e=>""!==e.trim()).filter(e=>e.includes("=")).forEach(t=>{const a=t.trim().split("="),[n,r=""]=a;e[n]=decodeURIComponent(r)}),e}get preferences(){try{return JSON.parse(this.get(this.preferencesKey)||"{}")}catch(e){return{}}}exists(e){return Object.hasOwn(this.all,e)}hasValue(e,t){return this.get(e)===t}get(e){if(this.exists(e))return decodeURIComponent(this.all[e])}set(e,t,a={}){const{maxAge:n=this.defaultAge,sameSite:r="Lax",domain:i=this.defaultDomain,path:o=this.defaultPath,secure:s=this.secure,session:c=!1}=a;if(!e)return;const l=s?"; secure":"",d=c?"":`; max-age=${n}`,m=`${encodeURIComponent(e)}=${encodeURIComponent(t)}; domain=${i}; samesite=${r}; path=${o}${d}${l}`;document.cookie=m;const h={key:e,value:t,maxAge:n,path:o,sameSite:r,domain:i,secure:s,session:c,cookie:m};this.events.trigger("setCookie",h)}delete(e,t="/",a=this.defaultDomain){const n={maxAge:-1,path:t,domain:a};this.set(e,"",n),this.events.trigger("deleteCookie",{key:e,...n})}deleteAll(e="/",t=this.defaultDomain){Object.keys(this.all).forEach(a=>{this.delete(a,e,t)});const a={path:e,domain:t};this.events.trigger("deleteAllCookies",a)}enablePreference(e){if(!Object.hasOwn(this.preferences,e))throw new Error(`Preference '${e}' does not exist`);this.setPreference(e,!0),this.events.trigger("enablePreference",e),this.events.trigger("changePreference",{[e]:!0})}disablePreference(e){if(!Object.hasOwn(this.preferences,e))throw new Error(`Preference '${e}' does not exist`);this.setPreference(e,!1),this.events.trigger("disablePreference",e),this.events.trigger("changePreference",{[e]:!1})}setPreference(e,t){if(!Object.hasOwn(this.preferences,e))throw new Error(`Preference '${e}' does not exist`);"essential"!==e&&(this.savePreferences({...this.preferences,[e]:t,essential:!0}),this.events.trigger("changePreference",{[e]:t}))}enableAllPreferences(){const e=Object.fromEntries(Object.keys(this.preferences).map(e=>[e.toLowerCase(),!0]));this.savePreferences(e),this.preferencesSet=!0,this.events.trigger("enableAllPreferences"),this.events.trigger("changePreference",e)}disableAllPreferences(){const e={...Object.fromEntries(Object.keys(this.preferences).map(e=>[e.toLowerCase(),!1])),essential:!0};this.savePreferences(e),this.preferencesSet=!0,this.events.trigger("disableAllPreferences"),this.events.trigger("changePreference",e)}savePreferences(e){this.set(this.preferencesKey,JSON.stringify(e))}get preferencesSet(){return this.hasValue(this.preferencesSetKey,"true")}set preferencesSet(e){!0===e&&this.validatePreferences(JSON.parse(this.get(this.preferencesKey)))?this.set(this.preferencesSetKey,"true"):this.delete(this.preferencesSetKey),this.events.trigger("preferencesSet")}preference(e){if(Object.hasOwn(this.preferences,e))return!0===this.preferences[e];throw new Error(`Preference '${e}' does not exist`)}on(e,t){this.events.on(e,t)}once(e,t){this.events.once(e,t)}}}};const t={};function a(n){const r=t[n];if(void 0!==r)return r.exports;const i=t[n]={exports:{}};return e[n](i,i.exports,a),i.exports}a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};let n={};a.r(n),a.d(n,{EventTracker:()=>m,GA4:()=>h,helpers:()=>u});var r=a(153);const i=e=>{if(""!==e.id)return`id("${e.id}")`;if(e===document.body)return e.tagName;let t=0;if(e.parentNode){const a=e.parentNode.childNodes;for(let n=0;n<a.length;n+=1){const r=a[n];if(r===e)return`${i(e.parentNode)}/${e.tagName}[${t+1}]`;1===r.nodeType&&r.tagName===e.tagName&&(t+=1)}return`${i(e.parentNode)}/${e.tagName}`}return e.tagName},o=(e,t)=>{let a="",n=e;do{for(;n.previousElementSibling;)if(n=n.previousElementSibling,t.some(e=>n.matches(e))){a=n.innerText;break}n=n.parentElement}while(n.parentElement&&!a);return a},s=e=>o(e,["h1","h2","h3","h4","h5","h6"]),c={text:e=>e.innerText.replace(/\n/gu," "),html:e=>e.innerHTML,value:e=>e.value,index:(e,t,a,n)=>n,instance:(e,t,a,n,r)=>r,checked:e=>e.checked?"checked":"unchecked",expanded:e=>{const t=e.getAttribute("aria-expanded");return null===t?null:"true"===t.toString()?"opened":"closed"},closestHeading:e=>s(e),xpath:e=>i(e.target)},l=e=>JSON.stringify(Array.from(e.files).map(e=>({name:e.name,size:e.size,type:e.type}))),d=[{scope:".tna-accordion",areaName:"accordion",rootEventName:"select_feature",rootData:{data_component_name:"accordion"},events:[{eventName:"click",targetElement:".tna-accordion__summary",on:"click",data:{state:c.expanded,value:c.text},rootData:{data_link_type:c.expanded,data_link:c.text,data_position:c.index}}]},{scope:".tna-breadcrumbs",areaName:"breadcrumbs",rootEventName:"select_navigation",rootData:{data_component_name:"breadcrumbs"},events:[{eventName:"click",targetElement:"a.tna-breadcrumbs__link",on:"click",data:{state:"expand",value:c.html},rootData:{data_link_type:"breadcrumb_link",data_link:c.text}},{eventName:"click",targetElement:".tna-breadcrumbs__item--expandable button.tna-breadcrumbs__link",on:"click",data:{state:"expand",value:c.html},rootData:{data_link_type:"breadcrumb_expand",data_link:c.text}}]},{scope:".tna-checkboxes",areaName:"checkboxes",events:[{eventName:"toggle",targetElement:".tna-checkboxes__item input",on:"change",data:{state:c.checked,value:(e,t,a)=>e.parentNode.innerText.trim(),group:(e,t,a)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]},{scope:".tna-details",areaName:"details",events:[{eventName:"click",targetElement:".tna-details__summary",on:"click",data:{state:(e,t,a)=>t.querySelector(".tna-details__details")?.hasAttribute("open")?"closed":"opened",value:c.text}}]},{scope:".tna-error-summary",areaName:"error-summary",events:[{eventName:"jump",targetElement:"a.tna-error-summary__link",on:"click",data:{value:c.text}}]},{scope:".tna-file-input",areaName:"file-input",events:[{eventName:"blurred",on:"blur",data:{value:l,state:e=>e.files.length,group:(e,t)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}},{eventName:"cancelled",on:"cancel",data:{value:l,state:e=>e.files.length,group:(e,t)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}},{eventName:"changed",on:"change",data:{value:l,state:e=>e.files.length,group:(e,t)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]},{scope:".tna-footer",areaName:"footer",rootEventName:"global_navigation",rootData:{data_component_name:"footer"},events:[{eventName:"link.click",targetElement:".tna-footer__navigation-block-item-link",on:"click",data:{value:c.text},rootData:{data_link_type:"link",data_section:c.closestHeading,data_link:c.text}},{eventName:"social_link.click",targetElement:".tna-footer__social-item-link",on:"click",data:{value:c.text},rootData:{data_link_type:"icon",data_section:"Social media",data_link:e=>e.dataset.name}},{eventName:"legal_link.click",targetElement:".tna-footer__legal-item-link",on:"click",data:{value:c.text},rootData:{data_link_type:"link",data_section:"Legal information",data_link:c.text}},{eventName:"mailing_list.click",targetElement:".tna-footer__mailing-list a.tna-button",on:"click",data:{value:c.text},rootData:{data_link_type:"button",data_section:"Mailing list",data_link:c.text}},{eventName:"ogl.click",targetElement:".tna-footer__licence p a.tna-footer__link",on:"click",data:{value:c.text},rootData:{data_link_type:"link",data_section:"OGL",data_link:c.text}},{eventName:"govuk.click",targetElement:".tna-footer__govuk-link",on:"click",data:{value:c.text},rootData:{data_link_type:"Logo",data_section:"GOV.UK",data_link:c.text}},{eventName:"theme.change",targetElement:".tna-footer__theme-selector-button",on:"click",data:{value:c.value}}]},{scope:".tna-gallery",areaName:"gallery",rootEventName:"select_media",rootData:{media_type:"gallery",media_duration:(e,t)=>t.querySelectorAll(".tna-gallery__navigation-item").length,media_provider:"tna",media_title:(e,t,a,n,r)=>t.querySelector(".tna-gallery__header-inner")?.innerText?.trim()||`gallery_${r}`,media_progress:(e,t)=>(Array.from(t.querySelectorAll(".tna-gallery__navigation-item")).findIndex(e=>"true"===e.getAttribute("aria-current"))||-1)+1},events:[{eventName:"click",targetElement:".tna-gallery__navigation-item",on:"click",data:{value:c.text},rootData:{data_link:"image",media_action:"progress",media_progress:c.index}},{eventName:"click",targetElement:".tna-gallery__navigation-prev",on:"click",data:{value:(e,t)=>t.querySelector(".tna-gallery__item:not([hidden]) .tna-gallery__item-header")?.innerText?.trim()},rootData:{data_link:"previous",media_action:"progress"}},{eventName:"click",targetElement:".tna-gallery__navigation-next",on:"click",data:{value:(e,t)=>t.querySelector(".tna-gallery__item:not([hidden]) .tna-gallery__item-header")?.innerText?.trim()},rootData:{data_link:"next",media_action:"progress"}},{eventName:"keypress",on:"keydown",onCondition:(e,t,a)=>["ArrowLeft","ArrowRight","ArrowUp","ArrowDown","End","Home"].includes(a.key),data:{value:(e,t,a)=>a.key},rootData:{data_link:"keypress",media_action:"progress"}}]},{scope:".tna-global-header",areaName:"header",rootEventName:"global_navigation",rootData:{data_component_name:"header"},events:[{eventName:"toggle",targetElement:".tna-global-header__navigation-button",on:"click",data:{state:c.expanded},rootData:{data_link_type:"mobile_menu",data_link:e=>{const t=e.getAttribute("aria-expanded");return null===t?null:"true"===t.toString()?"Open menu":"Close menu"},data_section:"Burger menu"}},{eventName:"logo.click",targetElement:".tna-global-header__logo",on:"click",rootData:{data_link_type:"logo",data_link:"The National Archives",data_section:"Top navigation and logo"}},{eventName:"primary_link.click",targetElement:".tna-global-header__navigation-item-link",on:"click",data:{value:c.text},rootData:{data_link_type:"menu",data_section:c.text,data_position:1,data_link:c.text}},{eventName:"secondary_link.click",targetElement:".tna-global-header__top-navigation-link",on:"click",data:{value:c.text},rootData:{data_link_type:"icon",data_link:c.text,data_section:"Top navigation and logo"}}]},{scope:".tna-header",areaName:"header",events:[{eventName:"toggle",targetElement:".tna-header__navigation-button",on:"click",data:{state:c.expanded}}]},{scope:".tna-hero",areaName:"hero",events:[{eventName:"toggle_caption",targetElement:".tna-hero__details-summary",on:"click",data:{state:(e,t,a)=>t.querySelector(".tna-hero__details")?.hasAttribute("open")?"closed":"opened",value:(e,t,a)=>t.querySelector("img[alt]")?.getAttribute("alt")}}]},{scope:".tna-picture",areaName:"picture",events:[{eventName:"toggle_transcript",targetElement:".tna-picture__toggle-transcript",on:"click",data:{state:c.expanded,value:(e,t,a)=>{const n=s(t),r=t.querySelector(".tna-picture__image"),i=r.getAttribute("src"),o=`${r.getAttribute("alt")} (${i})`;return n?`${n} > ${o}`:o}}}]},{scope:".tna-radios",areaName:"radios",events:[{eventName:"toggle",targetElement:".tna-radios__item input",on:"change",data:{state:c.checked,value:(e,t,a)=>e.parentNode.innerText,group:(e,t,a)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]},{scope:".tna-search-field",areaName:"search-field",events:[{eventName:"blurred",targetElement:".tna-search-field__input",on:"blur",data:{value:c.value,group:(e,t,a)=>t.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]},{scope:".tna-sidebar",areaName:"sidebar",rootEventName:"select_navigation",rootData:{data_component_name:"sidebar",data_section:(e,t)=>t.querySelector(".tna-sidebar__heading")?.innerText?.trim()},events:[{eventName:"click",targetElement:"a.tna-sidebar__link",on:"click",rootData:{data_link_type:"sidebar_link",data_link:c.text,data_position:c.index}}]},{scope:".tna-text-input",areaName:"text-input",events:[{eventName:"blurred",on:"blur",data:{value:c.value,group:(e,t)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]},{scope:".tna-textarea",areaName:"textarea",events:[{eventName:"blurred",on:"blur",data:{value:c.value,group:(e,t,a)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]}];class m{cookies=new r.A;events=[];startTime=new Date;prefix="tna";document=document;constructor(e={}){const{prefix:t=null,documentScope:a=document}=e;t&&(this.prefix=t),a&&(this.document=a)}start(e){navigator.doNotTrack&&1===navigator.doNotTrack||(this.cookies.preference("usage")&&this.enableTracking(),this.cookies.on("changePreference",e=>{Object.hasOwn(e,"usage")&&(e.usage?this.enableTracking():this.disableTracking())}),e&&this.initAll())}enableTracking(){}disableTracking(){}initAll(){d.forEach(e=>{this.addListeners(e.scope,e.areaName,e.events,e.rootEventName||"",e.rootData||{})})}addListeners(e,t,a,n="",r={}){let i=[];"string"==typeof e?i=Array.from(this.document.querySelectorAll(e)):"object"==typeof e&&(i=[e]),0!==i.length&&i.forEach((i,o)=>{a.forEach(a=>{a.on&&(a.targetElement?Array.from(i.querySelectorAll(a.targetElement)).forEach((s,c)=>this.attachListener(s,i,n,r,a,e,t,c+1,o+1)):this.attachListener(i,i,n,r,a,e,t,1,o+1))})})}generateEventName(e,t){return`${this.prefix}.${e}.${t.eventName||t.on}`}attachListener(e,t,a,n,r,o,s,c,l){const{on:d,data:m,targetElement:h,rootData:g={},onCondition:u=null}=r;e.addEventListener(d,d=>{const p=[e,t,d,c,l];(null===u||this.computedValue(u,...p))&&this.recordEvent(r.rootEventName?`${this.prefix}.${r.rootEventName}`:a?`${this.prefix}.${a}`:this.generateEventName(s,r),{...m,name:this.generateEventName(s,r),value:m?.value?this.computedValue(m.value,...p):null,state:m?.state?this.computedValue(m.state,...p):null,group:m?.group?this.computedValue(m.group,...p):null,xPath:i(e),targetElement:h,timeSincePageLoad:new Date-this.startTime,index:c,instance:l,scope:o,areaName:s},Object.fromEntries(Object.entries({...n,...g}).map(([e,t])=>[e,this.computedValue(t,...p)])))})}computedValue(e,t,a,n,r,i){return"function"==typeof e?e.call(this,t,a,n,r,i):e??null}recordEvent(e,t,a={}){this.events.push({event:e,...t,...a})}getTnaMetaTags(){return Object.fromEntries([...Array.from(document.head.querySelectorAll(`meta[name^="${this.prefix}_root:"][content]`)).map(e=>[e.getAttribute("name").replace(new RegExp(`^${this.prefix}_root:`,"u"),""),e.getAttribute("content")]),...Array.from(document.head.querySelectorAll(`meta[name^="${this.prefix}."][content]`)).map(e=>[e.getAttribute("name"),e.getAttribute("content")])])}getUserPreferences(){const e={};e[`${this.prefix}.pref.prefers-color-scheme`]=window.matchMedia?.("(prefers-color-scheme: dark)").matches?"dark":"light",e[`${this.prefix}.pref.forced-colors`]=window.matchMedia?.("(forced-colors: active)").matches;let t="no-preference";return window.matchMedia?.("(prefers-contrast: more)").matches?t="more":window.matchMedia?.("(prefers-contrast: less)").matches&&(t="less"),e[`${this.prefix}.pref.prefers-contrast`]=t,e[`${this.prefix}.pref.prefers-reduced-motion`]=window.matchMedia?.("(prefers-reduced-motion: reduce)").matches,e[`${this.prefix}.pref.prefers-reduced-transparency`]=window.matchMedia?.("(prefers-reduced-transparency: reduce)").matches,e}}class h extends m{addTrackingCode=!0;trackingCodeAdded=!1;trackingEnabled=!1;gTagId;constructor(e={}){if(window.TNAFrontendAnalyticsGA4)return window.TNAFrontendAnalyticsGA4;const{id:t="",prefix:a=null,initAll:n=!0,addTrackingCode:r=!0}=e;super({prefix:a}),window.TNAFrontendAnalyticsGA4=this,this.addTrackingCode=r,window.dataLayer||=[],t&&(this.gTagId=t,this.ga4Disable=`ga-disable-${this.gTagId}`,this.cookies.preference("usage")||(window[this.ga4Disable]=!0,this.cookies.set(this.ga4Disable,"true"))),this.start(n)}destroy(){window.TNAFrontendAnalyticsGA4=null}recordEvent(e,t,a={}){const n={event:e,...Object.fromEntries(Object.entries(t).map(([e,t])=>[`${this.prefix}.event.${e}`,t])),...a};this.pushToDataLayer(n)}gtag(...e){this.pushToDataLayer(e)}pushToDataLayer(e){window.dataLayer.push(e)}enableTracking(){if(!this.trackingEnabled){if(window[this.ga4Disable]=!1,this.cookies.set(this.ga4Disable,"false"),!this.trackingCodeAdded&&this.addTrackingCode){if(!this.gTagId)throw Error("ID was not specified");this.pushToDataLayer({...this.getTnaMetaTags(),...this.getUserPreferences(),"gtm.start":(new Date).getTime(),event:"gtm.js"});const[e]=document.getElementsByTagName("script"),t=document.createElement("script");t.async=!0,t.src=`https://www.googletagmanager.com/gtm.js?id=${this.gTagId}&l=dataLayer`,e?e.parentNode.insertBefore(t,e):document.head.appendChild(t),this.trackingCodeAdded=!0}this.trackingEnabled=!0}}disableTracking(){this.trackingEnabled&&(window[this.ga4Disable]=!0,this.cookies.set(this.ga4Disable,"true"),Object.keys(this.cookies.all).forEach(e=>{e.startsWith("_ga")&&this.cookies.delete(e)}),this.trackingEnabled=!1)}}const g=document.documentElement.dataset.ga4;g&&new h({id:g});const u={getXPathTo:i,getClosestHeading:s,getClosestElement:o,valueGetters:c};return n})());
2
2
  //# sourceMappingURL=analytics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analytics.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/./node_modules/@nationalarchives/cookies/src/events.js","webpack://TNAFrontend/./node_modules/@nationalarchives/cookies/src/index.js","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/lib/analytics-helpers.mjs","webpack://TNAFrontend/./src/nationalarchives/components/file-input/analytics.js","webpack://TNAFrontend/./src/nationalarchives/analytics.mjs","webpack://TNAFrontend/./src/nationalarchives/components/accordion/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/breadcrumbs/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/checkboxes/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/details/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/error-summary/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/footer/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/gallery/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/global-header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/hero/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/picture/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/radios/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/search-field/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/sidebar/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/text-input/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/textarea/analytics.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontendAnalytics\"] = factory();\n\telse\n\t\troot[\"TNAFrontendAnalytics\"] = factory();\n})(self, () => {\nreturn ","/**\n * Class to handle cookie events.\n * @class CookieEventHandler\n * @constructor\n * @public\n */\nexport default class CookieEventHandler {\n /** @protected */\n events = {};\n /** @protected */\n oneTimeEvents = {};\n\n constructor() {\n if (\n window.TNAFrontendCookieEvents &&\n window.TNAFrontendCookieEvents instanceof CookieEventHandler\n ) {\n /* eslint-disable-next-line no-constructor-return */\n return window.TNAFrontendCookieEvents;\n }\n window.TNAFrontendCookieEvents = this;\n }\n\n /**\n * Clear all event listeners.\n */\n clearAll() {\n this.events = {};\n this.oneTimeEvents = {};\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n this.events[event] = [...(this.events[event] || []), callback];\n }\n\n /**\n * Add a one-time event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n once(event, callback) {\n this.oneTimeEvents[event] = [\n ...(this.oneTimeEvents[event] || []),\n callback,\n ];\n }\n\n /** @protected */\n trigger(event, data = {}) {\n if (Object.hasOwn(this.events, event)) {\n this.events[event].forEach((eventToTrigger) =>\n eventToTrigger.call(this, data),\n );\n }\n if (Object.hasOwn(this.oneTimeEvents, event)) {\n this.oneTimeEvents[event].forEach((eachEvent) =>\n eachEvent.call(this, data),\n );\n this.oneTimeEvents[event] = [];\n }\n }\n}\n","/* eslint-disable max-lines, no-ternary */\n\nimport CookieEventHandler from \"./events\";\n\n/**\n * Class to handle cookies.\n * @class Cookies\n * @constructor\n * @public\n */\nexport default class Cookies {\n /** @protected */\n defaultDomain = \"\";\n /** @protected */\n defaultPath = \"\";\n /** @protected */\n secure = true;\n /** @protected */\n preferencesKey = \"\";\n /** @protected */\n events = null;\n /** @protected */\n defaultAge = null;\n /** @protected */\n preferencesCorrectOnInit = false;\n\n /** @protected */\n tnaCookiePreferences = [\"usage\", \"settings\", \"marketing\", \"essential\"];\n\n /**\n * Create a cookie handler.\n * @param {String} [options.defaultDomain] - The domain to register the cookie with.\n * @param {String} [options.path] - The domain to register the cookie with.\n * @param {Boolean} [options.secure] - Only set cookie in HTTPS environments.\n * @param {String} [options.preferencesKey] - The name of the cookie that stores the user's preferences.\n * @param {String} [options.preferencesSetKey] - The name of the cookie that dictates whether the user's preferences have been set.\n * @param {Number} [options.defaultAge] - The default age of non-session cookies.\n * @param {Boolean} [options.noInit=false] - Don't initialise a blank cookie preference.\n */\n /* eslint-disable-next-line max-statements, */\n constructor(options = {}) {\n const {\n defaultDomain,\n defaultPath,\n secure,\n preferencesKey,\n preferencesSetKey,\n defaultAge,\n noInit = false,\n } = options;\n const docDataset = document.documentElement.dataset;\n this.defaultDomain = defaultDomain\n ? defaultDomain\n : docDataset.tnaCookiesDomain || window.location.hostname;\n this.defaultPath = defaultPath\n ? defaultPath\n : docDataset.tnaCookiesPath || \"/\";\n this.secure = secure ? secure : docDataset.tnaCookiesInsecure !== \"true\";\n this.preferencesKey = preferencesKey\n ? preferencesKey\n : docDataset.tnaCookiesPreferencesKey || \"cookie_preferences\";\n this.preferencesSetKey = preferencesSetKey\n ? preferencesSetKey\n : docDataset.tnaCookiesPreferencesSetKey || \"cookie_preferences_set\";\n this.defaultAge = defaultAge\n ? defaultAge\n : parseInt(docDataset.tnaCookiesDefaultAge, 10) ||\n /* eslint-disable-next-line no-magic-numbers */\n 365 * 24 * 60 * 60;\n this.events = new CookieEventHandler();\n this.preferencesCorrectOnInit = this.validatePreferences(this.preferences);\n if (!this.preferencesCorrectOnInit) {\n this.preferencesSet = false;\n if (!noInit) {\n this.init();\n }\n }\n }\n\n /** @protected */\n init() {\n const existingPreferences = this.preferences;\n const filteredExistingPreferences = Object.fromEntries(\n Object.keys(existingPreferences)\n .filter((preference) => this.tnaCookiePreferences.includes(preference))\n .map((preference) => [preference, existingPreferences[preference]]),\n );\n this.savePreferences({\n usage: false,\n settings: false,\n marketing: false,\n ...filteredExistingPreferences,\n essential: true,\n });\n }\n\n validatePreferences(preferences) {\n return (\n Object.keys(preferences).length === this.tnaCookiePreferences.length &&\n this.tnaCookiePreferences.every(\n (preference) =>\n Object.keys(preferences).includes(preference) &&\n typeof preferences[preference] === \"boolean\",\n )\n );\n }\n\n /** @protected */\n /* eslint-disable-next-line class-methods-use-this */\n get all() {\n const deserialised = {};\n document.cookie\n .split(\"; \")\n .filter((cookie) => cookie.trim() !== \"\")\n .filter((cookie) => cookie.includes(\"=\"))\n .forEach((cookie) => {\n const parts = cookie.trim().split(\"=\");\n const [key, value = \"\"] = parts;\n deserialised[key] = decodeURIComponent(value);\n });\n return deserialised;\n }\n\n /** @protected */\n get preferences() {\n try {\n return JSON.parse(this.get(this.preferencesKey) || \"{}\");\n // eslint-disable-next-line no-unused-vars\n } catch (error) {\n return {};\n }\n }\n\n /**\n * Check to see whether a cookie exists or not.\n * @param {String} key - The cookie name.\n * @returns {Boolean}\n */\n exists(key) {\n return Object.hasOwn(this.all, key);\n }\n\n /**\n * Check to see whether a cookie has a particular value.\n * @param {String} key - The cookie name.\n * @param {String|Number|Boolean} value - The value to check against.\n * @returns\n */\n hasValue(key, value) {\n return this.get(key) === value;\n }\n\n /**\n * Get a cookie.\n * @param {String} key - The cookie name.\n * @returns {String|Number|Boolean|null}\n */\n get(key) {\n if (this.exists(key)) {\n return decodeURIComponent(this.all[key]);\n }\n /* eslint-disable-next-line no-undefined */\n return undefined;\n }\n\n /**\n * Set a cookie.\n * @param {String} key - The cookie name.\n * @param {String|Number|Boolean} value - The cookie value.\n * @param {Object} options\n * @param {Number} [options.maxAge=this.defaultAge] - The maximum age of the cookie in seconds.\n * @param {String} [options.path=/] - The path to register the cookie for.\n * @param {String} [options.sameSite=Lax] - The sameSite attribute.\n * @param {String} [options.domain=this.defaultDomain] - The domain to register the cookie with.\n * @param {String} [options.path=this.defaultPath] - The path to register the cookie with.\n * @param {String} [options.secure=this.secure] - Only set cookie in HTTPS environments.\n * @param {String} [options.session=false] - Set a session cookie.\n */\n set(key, value, options = {}) {\n const {\n maxAge = this.defaultAge,\n sameSite = \"Lax\",\n domain = this.defaultDomain,\n path = this.defaultPath,\n secure = this.secure,\n session = false,\n } = options;\n if (!key) {\n return;\n }\n const secureString = secure ? \"; secure\" : \"\";\n const sessionString = session ? \"\" : `; max-age=${maxAge}`;\n const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}; domain=${domain}; samesite=${sameSite}; path=${path}${sessionString}${secureString}`;\n document.cookie = cookie;\n const cookieDetails = {\n key,\n value,\n maxAge,\n path,\n sameSite,\n domain,\n secure,\n session,\n cookie,\n };\n this.events.trigger(\"setCookie\", cookieDetails);\n }\n\n /**\n * Delete a cookie.\n * @param {String} key - The cookie name.\n * @param {String} [path=/] - The path to the cookie is registered on.\n */\n delete(key, path = \"/\", domain = this.defaultDomain) {\n const options = { maxAge: -1, path, domain };\n this.set(key, \"\", options);\n this.events.trigger(\"deleteCookie\", { key, ...options });\n }\n\n /**\n * Delete all cookies.\n */\n deleteAll(path = \"/\", domain = this.defaultDomain) {\n Object.keys(this.all).forEach((cookie) => {\n this.delete(cookie, path, domain);\n });\n const details = { path, domain };\n this.events.trigger(\"deleteAllCookies\", details);\n }\n\n /**\n * Accept a preference.\n * @param {String} preference - The name of the preference.\n */\n enablePreference(preference) {\n if (!Object.hasOwn(this.preferences, preference)) {\n throw new Error(`Preference '${preference}' does not exist`);\n }\n this.setPreference(preference, true);\n this.events.trigger(\"enablePreference\", preference);\n this.events.trigger(\"changePreference\", { [preference]: true });\n }\n\n /**\n * Reject a preference.\n * @param {String} preference - The name of the preference.\n */\n disablePreference(preference) {\n if (!Object.hasOwn(this.preferences, preference)) {\n throw new Error(`Preference '${preference}' does not exist`);\n }\n this.setPreference(preference, false);\n this.events.trigger(\"disablePreference\", preference);\n this.events.trigger(\"changePreference\", { [preference]: false });\n }\n\n /**\n * Set a preference.\n * @param {String} preference - The name of the preference.\n * @param {Boolean} accepted - Whether the preference is accepted or not.\n */\n setPreference(preference, accepted) {\n if (!Object.hasOwn(this.preferences, preference)) {\n throw new Error(`Preference '${preference}' does not exist`);\n }\n if (preference === \"essential\") {\n return;\n }\n this.savePreferences({\n ...this.preferences,\n [preference]: accepted,\n essential: true,\n });\n this.events.trigger(\"changePreference\", { [preference]: accepted });\n }\n\n /**\n * Accept all the cookie preferences.\n */\n enableAllPreferences() {\n const allPreferences = Object.fromEntries(\n Object.keys(this.preferences).map((key) => [key.toLowerCase(), true]),\n );\n this.savePreferences(allPreferences);\n this.preferencesSet = true;\n this.events.trigger(\"enableAllPreferences\");\n this.events.trigger(\"changePreference\", allPreferences);\n }\n\n /**\n * Reject all the cookie preferences.\n */\n disableAllPreferences() {\n const allPreferences = {\n ...Object.fromEntries(\n Object.keys(this.preferences).map((key) => [key.toLowerCase(), false]),\n ),\n essential: true,\n };\n this.savePreferences(allPreferences);\n this.preferencesSet = true;\n this.events.trigger(\"disableAllPreferences\");\n this.events.trigger(\"changePreference\", allPreferences);\n }\n\n /** @protected */\n savePreferences(preferences) {\n this.set(this.preferencesKey, JSON.stringify(preferences));\n }\n\n /**\n * Get the status of whether the preferences have been set.\n * @returns {Boolean}\n */\n get preferencesSet() {\n return this.hasValue(this.preferencesSetKey, \"true\");\n }\n\n /**\n * Set the status of whether the preferences have been set.\n * @param {Boolean} value\n */\n set preferencesSet(value) {\n if (\n value === true &&\n this.validatePreferences(JSON.parse(this.get(this.preferencesKey)))\n ) {\n this.set(this.preferencesSetKey, \"true\");\n } else {\n this.delete(this.preferencesSetKey);\n }\n this.events.trigger(\"preferencesSet\");\n }\n\n /**\n * Get the acceptance status of a preference.\n * @param {String} preference - The name of the preference.\n * @returns {Boolean}\n */\n preference(preference) {\n if (Object.hasOwn(this.preferences, preference)) {\n return this.preferences[preference] === true;\n }\n throw new Error(`Preference '${preference}' does not exist`);\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n this.events.on(event, callback);\n }\n\n /**\n * Add a one-time event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n once(event, callback) {\n this.events.once(event, callback);\n }\n}\n","// The module cache\nconst __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tconst 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\tconst 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","// define getter/value 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__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const getXPathTo = ($element) => {\n if ($element.id !== \"\") {\n return `id(\"${$element.id}\")`;\n }\n if ($element === document.body) {\n return $element.tagName;\n }\n let ix = 0;\n if ($element.parentNode) {\n const siblings = $element.parentNode.childNodes;\n /* eslint-disable-next-line no-magic-numbers */\n for (let index = 0; index < siblings.length; index += 1) {\n const sibling = siblings[index];\n if (sibling === $element) {\n return `${getXPathTo($element.parentNode)}/${$element.tagName}[${\n /* eslint-disable-next-line no-magic-numbers */\n ix + 1\n }]`;\n }\n /* eslint-disable-next-line no-magic-numbers */\n if (sibling.nodeType === 1 && sibling.tagName === $element.tagName) {\n /* eslint-disable-next-line no-magic-numbers */\n ix += 1;\n }\n }\n return `${getXPathTo($element.parentNode)}/${$element.tagName}`;\n }\n return $element.tagName;\n};\nconst getClosestElement = ($startingElement, matchingElementSelectors) => {\n let heading = \"\";\n let $search = $startingElement;\n do {\n while ($search.previousElementSibling) {\n $search = $search.previousElementSibling;\n if (\n /* eslint-disable-next-line no-loop-func */\n matchingElementSelectors.some((matchingElementSelector) =>\n $search.matches(matchingElementSelector),\n )\n ) {\n heading = $search.innerText;\n break;\n }\n }\n $search = $search.parentElement;\n } while ($search.parentElement && !heading);\n return heading;\n};\nconst getClosestHeading = ($element) =>\n getClosestElement($element, [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]);\nconst valueGetters = {\n text: ($el) => $el.innerText.replace(/\\n/gu, \" \"),\n html: ($el) => $el.innerHTML,\n value: ($el) => $el.value,\n index: ($el, $scope, event, index) => index,\n instance: ($el, $scope, event, index, instance) => instance,\n /* eslint-disable-next-line no-ternary */\n checked: ($el) => ($el.checked ? \"checked\" : \"unchecked\"),\n expanded: ($el) => {\n const expanded = $el.getAttribute(\"aria-expanded\");\n if (expanded === null) {\n return null;\n }\n /* eslint-disable-next-line no-ternary */\n return expanded.toString() === \"true\" ? \"opened\" : \"closed\";\n },\n closestHeading: ($el) => getClosestHeading($el),\n xpath: ($el) => getXPathTo($el.target),\n};\n\nexport { getXPathTo, getClosestElement, getClosestHeading, valueGetters };\n","const getFileDetails = ($el) =>\n JSON.stringify(\n Array.from($el.files).map((file) => ({\n name: file.name,\n size: file.size,\n type: file.type,\n })),\n );\n\nexport default [\n {\n scope: \".tna-file-input\",\n areaName: \"file-input\",\n events: [\n {\n eventName: \"blurred\",\n on: \"blur\",\n data: {\n value: getFileDetails,\n state: ($el) => $el.files.length,\n\n group: ($el, $scope) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n {\n eventName: \"cancelled\",\n on: \"cancel\",\n data: {\n value: getFileDetails,\n state: ($el) => $el.files.length,\n\n group: ($el, $scope) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n {\n eventName: \"changed\",\n on: \"change\",\n data: {\n value: getFileDetails,\n state: ($el) => $el.files.length,\n\n group: ($el, $scope) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n ],\n },\n];\n","/* eslint-disable max-classes-per-file, no-ternary, no-nested-ternary */\n\nimport Cookies from \"@nationalarchives/cookies/src/index.js\";\n\nimport AccordionAnalytics from \"./components/accordion/analytics.js\";\nimport BreadcrumbAnalytics from \"./components/breadcrumbs/analytics.js\";\nimport CheckboxesAnalytics from \"./components/checkboxes/analytics.js\";\nimport DetailsAnalytics from \"./components/details/analytics.js\";\nimport ErrorSummary from \"./components/error-summary/analytics.js\";\nimport FileInputDroppable from \"./components/file-input/analytics.js\";\nimport FooterAnalytics from \"./components/footer/analytics.js\";\nimport GalleryAnalytics from \"./components/gallery/analytics.js\";\nimport GlobalHeaderAnalytics from \"./components/global-header/analytics.js\";\nimport HeaderAnalytics from \"./components/header/analytics.js\";\nimport HeroAnalytics from \"./components/hero/analytics.js\";\nimport PictureAnalytics from \"./components/picture/analytics.js\";\nimport RadiosAnalytics from \"./components/radios/analytics.js\";\nimport SearchFieldAnalytics from \"./components/search-field/analytics.js\";\nimport SidebarAnalytics from \"./components/sidebar/analytics.js\";\nimport TextInputAnalytics from \"./components/text-input/analytics.js\";\nimport TextareaAnalytics from \"./components/textarea/analytics.js\";\nimport {\n getClosestElement,\n getClosestHeading,\n getXPathTo,\n valueGetters,\n} from \"./lib/analytics-helpers.mjs\";\n\nconst componentAnalytics = [\n ...AccordionAnalytics,\n ...BreadcrumbAnalytics,\n ...CheckboxesAnalytics,\n ...DetailsAnalytics,\n ...ErrorSummary,\n ...FileInputDroppable,\n ...FooterAnalytics,\n ...GalleryAnalytics,\n ...GlobalHeaderAnalytics,\n ...HeaderAnalytics,\n ...HeroAnalytics,\n ...PictureAnalytics,\n ...RadiosAnalytics,\n ...SearchFieldAnalytics,\n ...SidebarAnalytics,\n ...TextInputAnalytics,\n ...TextareaAnalytics,\n];\n\nclass EventTracker {\n /** @protected */\n cookies = new Cookies();\n\n /** @protected */\n events = [];\n\n /** @protected */\n startTime = new Date();\n\n /** @protected */\n prefix = \"tna\";\n\n /** @protected */\n document = document;\n\n constructor(options = {}) {\n const { prefix = null, documentScope = document } = options;\n if (prefix) {\n this.prefix = prefix;\n }\n if (documentScope) {\n this.document = documentScope;\n }\n }\n\n start(initAll) {\n /* eslint-disable-next-line no-magic-numbers */\n if (!navigator.doNotTrack || navigator.doNotTrack !== 1) {\n if (this.cookies.preference(\"usage\")) {\n this.enableTracking();\n }\n this.cookies.on(\"changePolicy\", (policies) => {\n if (Object.hasOwn(policies, \"usage\")) {\n if (policies.usage) {\n this.enableTracking();\n } else {\n this.disableTracking();\n }\n }\n });\n if (initAll) {\n this.initAll();\n }\n }\n }\n\n /** @protected */\n /* eslint-disable-next-line class-methods-use-this, no-empty-function */\n enableTracking() {}\n\n /** @protected */\n /* eslint-disable-next-line class-methods-use-this, no-empty-function */\n disableTracking() {}\n\n /**\n * Initialise all TNA Frontend component analytics.\n */\n initAll() {\n componentAnalytics.forEach((componentConfig) => {\n this.addListeners(\n componentConfig.scope,\n componentConfig.areaName,\n componentConfig.events,\n componentConfig.rootEventName || \"\",\n componentConfig.rootData || {},\n );\n });\n }\n\n /**\n * Add an event listener.\n * @param {String|HTMLElement} scope - The element to which the listener is scoped.\n * @param {String} areaName - The name of the component to pass on to the tracker.\n * @param {{eventName: String, targetElement: String|undefined, on: String, data: {value: Function|String|undefined, state: Function|String|undefined, group: Function|String|undefined, [String]: String|Integer}, rootData:{[String]: Function|String}}[]} events - The configuration of events to track along with their optional value and state which can be computed.\n * @param {String} rootEventName - The event name to use if specified (prefix).\n * @param {{[String]:String}} rootDefaultData - The default root data to use if specified.\n */\n addListeners(\n scope,\n areaName,\n events,\n rootEventName = \"\",\n rootDefaultData = {},\n ) {\n let scopeArray = [];\n if (typeof scope === \"string\") {\n scopeArray = Array.from(this.document.querySelectorAll(scope));\n } else if (typeof scope === \"object\") {\n scopeArray = [scope];\n }\n /* eslint-disable-next-line no-magic-numbers */\n if (scopeArray.length === 0) {\n return;\n }\n scopeArray.forEach(($scope, scopeIndex) => {\n events.forEach((eventConfig) => {\n if (eventConfig.on) {\n if (eventConfig.targetElement) {\n Array.from(\n $scope.querySelectorAll(eventConfig.targetElement),\n ).forEach(($el, index) =>\n this.attachListener(\n $el,\n $scope,\n rootEventName,\n rootDefaultData,\n eventConfig,\n scope,\n areaName,\n /* eslint-disable-next-line no-magic-numbers */\n index + 1,\n /* eslint-disable-next-line no-magic-numbers */\n scopeIndex + 1,\n ),\n );\n } else {\n this.attachListener(\n $scope,\n $scope,\n rootEventName,\n rootDefaultData,\n eventConfig,\n scope,\n areaName,\n /* eslint-disable-next-line no-magic-numbers */\n 1,\n /* eslint-disable-next-line no-magic-numbers */\n scopeIndex + 1,\n );\n }\n }\n });\n });\n }\n\n /** @protected */\n generateEventName(areaName, eventConfig) {\n return `${this.prefix}.${areaName}.${eventConfig.eventName || eventConfig.on}`;\n }\n\n /** @protected */\n attachListener(\n $el,\n $scope,\n rootEventName,\n rootDefaultData,\n eventConfig,\n scope,\n areaName,\n index,\n instance,\n ) {\n const {\n on,\n data,\n targetElement,\n rootData = {},\n onCondition = null,\n } = eventConfig;\n $el.addEventListener(on, (event) => {\n const computedValueParameters = [$el, $scope, event, index, instance];\n if (\n onCondition === null ||\n this.computedValue(onCondition, ...computedValueParameters)\n ) {\n this.recordEvent(\n eventConfig.rootEventName\n ? `${this.prefix}.${eventConfig.rootEventName}`\n : rootEventName\n ? `${this.prefix}.${rootEventName}`\n : this.generateEventName(areaName, eventConfig),\n {\n ...data,\n name: this.generateEventName(areaName, eventConfig),\n value: data?.value\n ? this.computedValue(data.value, ...computedValueParameters)\n : null,\n state: data?.state\n ? this.computedValue(data.state, ...computedValueParameters)\n : null,\n group: data?.group\n ? this.computedValue(data.group, ...computedValueParameters)\n : null,\n xPath: getXPathTo($el),\n targetElement,\n timeSincePageLoad: new Date() - this.startTime,\n index,\n instance,\n scope,\n areaName,\n },\n Object.fromEntries(\n Object.entries({ ...rootDefaultData, ...rootData }).map(\n ([key, value]) => [\n key,\n this.computedValue(value, ...computedValueParameters),\n ],\n ),\n ),\n );\n }\n });\n }\n\n /** @protected */\n computedValue(valueOrFunction, $el, $scope, event, index, instance) {\n return typeof valueOrFunction === \"function\"\n ? valueOrFunction.call(this, $el, $scope, event, index, instance)\n : (valueOrFunction ?? null);\n }\n\n /** @protected */\n recordEvent(eventName, data, rootData = {}) {\n this.events.push({\n event: eventName,\n ...data,\n ...rootData,\n });\n }\n\n /** @protected */\n getTnaMetaTags() {\n return Object.fromEntries([\n ...Array.from(\n document.head.querySelectorAll(\n `meta[name^=\"${this.prefix}_root:\"][content]`,\n ),\n ).map(($metaEl) => [\n $metaEl\n .getAttribute(\"name\")\n .replace(new RegExp(`^${this.prefix}_root:`, \"u\"), \"\"),\n $metaEl.getAttribute(\"content\"),\n ]),\n ...Array.from(\n document.head.querySelectorAll(\n `meta[name^=\"${this.prefix}.\"][content]`,\n ),\n ).map(($metaEl) => [\n $metaEl.getAttribute(\"name\"),\n $metaEl.getAttribute(\"content\"),\n ]),\n ]);\n }\n\n /** @protected */\n getUserPreferences() {\n const userPreferences = {};\n userPreferences[`${this.prefix}.pref.prefers-color-scheme`] =\n window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n userPreferences[`${this.prefix}.pref.forced-colors`] = window.matchMedia?.(\n \"(forced-colors: active)\",\n ).matches;\n let prefersContrast = \"no-preference\";\n if (window.matchMedia?.(\"(prefers-contrast: more)\").matches) {\n prefersContrast = \"more\";\n } else if (window.matchMedia?.(\"(prefers-contrast: less)\").matches) {\n prefersContrast = \"less\";\n }\n userPreferences[`${this.prefix}.pref.prefers-contrast`] = prefersContrast;\n userPreferences[`${this.prefix}.pref.prefers-reduced-motion`] =\n window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n userPreferences[`${this.prefix}.pref.prefers-reduced-transparency`] =\n window.matchMedia?.(\"(prefers-reduced-transparency: reduce)\").matches;\n return userPreferences;\n }\n}\n\n/**\n * Class to handle Google Analytics 4 reporting.\n * @class GA4\n * @extends EventTracker\n * @constructor\n * @public\n */\nclass GA4 extends EventTracker {\n /** @protected */\n addTrackingCode = true;\n\n /** @protected */\n trackingCodeAdded = false;\n\n /** @protected */\n trackingEnabled = false;\n\n /** @protected */\n gTagId;\n\n constructor(options = {}) {\n if (window.TNAFrontendAnalyticsGA4) {\n /* eslint-disable-next-line no-constructor-return */\n return window.TNAFrontendAnalyticsGA4;\n }\n const {\n id = \"\",\n prefix = null,\n initAll = true,\n addTrackingCode = true,\n } = options;\n super({ prefix });\n window.TNAFrontendAnalyticsGA4 = this;\n this.addTrackingCode = addTrackingCode;\n window.dataLayer ||= [];\n if (id) {\n this.gTagId = id;\n this.ga4Disable = `ga-disable-${this.gTagId}`;\n if (!this.cookies.preference(\"usage\")) {\n window[this.ga4Disable] = true;\n this.cookies.set(this.ga4Disable, \"true\");\n }\n }\n this.start(initAll);\n }\n\n /** @protected */\n /* eslint-disable-next-line class-methods-use-this */\n destroy() {\n window.TNAFrontendAnalyticsGA4 = null;\n }\n\n /** @protected */\n recordEvent(eventName, data, rootData = {}) {\n const ga4Data = {\n event: eventName,\n ...Object.fromEntries(\n Object.entries(data).map(([key, value]) => [\n `${this.prefix}.event.${key}`,\n value,\n ]),\n ),\n ...rootData,\n };\n this.pushToDataLayer(ga4Data);\n }\n\n /** @protected */\n gtag(...args) {\n this.pushToDataLayer(args);\n }\n\n /** @protected */\n /* eslint-disable-next-line class-methods-use-this */\n pushToDataLayer(data) {\n window.dataLayer.push(data);\n }\n\n /** @protected */\n enableTracking() {\n if (!this.trackingEnabled) {\n window[this.ga4Disable] = false;\n this.cookies.set(this.ga4Disable, \"false\");\n if (!this.trackingCodeAdded && this.addTrackingCode) {\n if (!this.gTagId) {\n throw Error(\"ID was not specified\");\n }\n this.pushToDataLayer({\n ...this.getTnaMetaTags(),\n ...this.getUserPreferences(),\n \"gtm.start\": new Date().getTime(),\n event: \"gtm.js\",\n });\n const [firstScript] = document.getElementsByTagName(\"script\");\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtm.js?id=${this.gTagId}&l=dataLayer`;\n if (firstScript) {\n firstScript.parentNode.insertBefore(script, firstScript);\n } else {\n document.head.appendChild(script);\n }\n this.trackingCodeAdded = true;\n }\n this.trackingEnabled = true;\n }\n }\n\n /** @protected */\n disableTracking() {\n if (this.trackingEnabled) {\n window[this.ga4Disable] = true;\n this.cookies.set(this.ga4Disable, \"true\");\n Object.keys(this.cookies.all).forEach((key) => {\n if (key.startsWith(\"_ga\")) {\n this.cookies.delete(key);\n }\n });\n this.trackingEnabled = false;\n }\n }\n}\n\nconst ga4Id = document.documentElement.dataset.ga4;\nif (ga4Id) {\n /* eslint-disable-next-line no-new */\n new GA4({ id: ga4Id });\n}\n\nconst helpers = {\n getXPathTo,\n getClosestHeading,\n getClosestElement,\n valueGetters,\n};\n\nexport { EventTracker, GA4, helpers };\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-accordion\",\n areaName: \"accordion\",\n rootEventName: \"select_feature\",\n rootData: {\n data_component_name: \"accordion\",\n },\n events: [\n {\n eventName: \"click\",\n targetElement: \".tna-accordion__summary\",\n on: \"click\",\n data: { state: valueGetters.expanded, value: valueGetters.text },\n rootData: {\n data_link_type: valueGetters.expanded,\n data_link: valueGetters.text,\n data_position: valueGetters.index,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-breadcrumbs\",\n areaName: \"breadcrumbs\",\n rootEventName: \"select_navigation\",\n rootData: {\n data_component_name: \"breadcrumbs\",\n },\n events: [\n {\n eventName: \"click\",\n targetElement: \"a.tna-breadcrumbs__link\",\n on: \"click\",\n data: { state: \"expand\", value: valueGetters.html },\n rootData: {\n data_link_type: \"breadcrumb_link\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"click\",\n targetElement:\n \".tna-breadcrumbs__item--expandable button.tna-breadcrumbs__link\",\n on: \"click\",\n data: { state: \"expand\", value: valueGetters.html },\n rootData: {\n data_link_type: \"breadcrumb_expand\",\n data_link: valueGetters.text,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-checkboxes\",\n areaName: \"checkboxes\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-checkboxes__item input\",\n on: \"change\",\n data: {\n state: valueGetters.checked,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => $el.parentNode.innerText.trim(),\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-details\",\n areaName: \"details\",\n events: [\n {\n eventName: \"click\",\n targetElement: \".tna-details__summary\",\n on: \"click\",\n data: {\n // eslint-disable-next-line no-unused-vars\n state: ($el, $scope, event) => {\n const wasExpanded =\n $scope\n .querySelector(\".tna-details__details\")\n ?.hasAttribute(\"open\") ?? false;\n return wasExpanded ? \"closed\" : \"opened\";\n },\n\n value: valueGetters.text,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-error-summary\",\n areaName: \"error-summary\",\n events: [\n {\n eventName: \"jump\",\n targetElement: \"a.tna-error-summary__link\",\n on: \"click\",\n data: { value: valueGetters.text },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-footer\",\n areaName: \"footer\",\n rootEventName: \"global_navigation\",\n rootData: {\n data_component_name: \"footer\",\n },\n events: [\n {\n eventName: \"link.click\",\n targetElement: \".tna-footer__navigation-block-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"link\",\n data_section: valueGetters.closestHeading,\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"social_link.click\",\n targetElement: \".tna-footer__social-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"icon\",\n data_section: \"Social media\",\n data_link: ($el) => $el.dataset.name,\n },\n },\n {\n eventName: \"legal_link.click\",\n targetElement: \".tna-footer__legal-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"link\",\n data_section: \"Legal information\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"mailing_list.click\",\n targetElement: \".tna-footer__mailing-list a.tna-button\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"button\",\n data_section: \"Mailing list\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"ogl.click\",\n targetElement: \".tna-footer__licence p a.tna-footer__link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"link\",\n data_section: \"OGL\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"govuk.click\",\n targetElement: \".tna-footer__govuk-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"Logo\",\n data_section: \"GOV.UK\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"theme.change\",\n targetElement: \".tna-footer__theme-selector-button\",\n on: \"click\",\n data: {\n value: valueGetters.value,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-gallery\",\n areaName: \"gallery\",\n rootEventName: \"select_media\",\n rootData: {\n media_type: \"gallery\",\n media_duration: ($el, $scope) =>\n $scope.querySelectorAll(\".tna-gallery__navigation-item\").length,\n media_provider: \"tna\",\n media_title: ($el, $scope, event, index, instance) =>\n $scope.querySelector(\".tna-gallery__header-inner\")?.innerText?.trim() ||\n `gallery_${instance}`,\n media_progress: ($el, $scope) =>\n (Array.from(\n $scope.querySelectorAll(\".tna-gallery__navigation-item\"),\n ).findIndex(\n ($itemButton) => $itemButton.getAttribute(\"aria-current\") === \"true\",\n /* eslint-disable-next-line no-magic-numbers */\n ) || -1) + 1,\n },\n events: [\n {\n eventName: \"click\",\n targetElement: \".tna-gallery__navigation-item\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link: \"image\",\n media_action: \"progress\",\n media_progress: valueGetters.index,\n },\n },\n {\n eventName: \"click\",\n targetElement: \".tna-gallery__navigation-prev\",\n on: \"click\",\n data: {\n value: ($el, $scope) =>\n $scope\n .querySelector(\n \".tna-gallery__item:not([hidden]) .tna-gallery__item-header\",\n )\n ?.innerText?.trim(),\n },\n rootData: {\n data_link: \"previous\",\n media_action: \"progress\",\n },\n },\n {\n eventName: \"click\",\n targetElement: \".tna-gallery__navigation-next\",\n on: \"click\",\n data: {\n value: ($el, $scope) =>\n $scope\n .querySelector(\n \".tna-gallery__item:not([hidden]) .tna-gallery__item-header\",\n )\n ?.innerText?.trim(),\n },\n rootData: {\n data_link: \"next\",\n media_action: \"progress\",\n },\n },\n {\n eventName: \"keypress\",\n on: \"keydown\",\n onCondition: ($el, $scope, event) =>\n [\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"End\",\n \"Home\",\n // \"Escape\",\n ].includes(event.key),\n data: {\n value: ($el, $scope, event) => event.key,\n },\n rootData: {\n data_link: \"keypress\",\n media_action: \"progress\",\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-global-header\",\n areaName: \"header\",\n rootEventName: \"global_navigation\",\n rootData: {\n data_component_name: \"header\",\n },\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-global-header__navigation-button\",\n on: \"click\",\n data: {\n state: valueGetters.expanded,\n },\n rootData: {\n data_link_type: \"mobile_menu\",\n data_link: ($el) => {\n const expanded = $el.getAttribute(\"aria-expanded\");\n if (expanded === null) {\n return null;\n }\n return expanded.toString() === \"true\" ? \"Open menu\" : \"Close menu\";\n },\n data_section: \"Burger menu\",\n },\n },\n {\n eventName: \"logo.click\",\n targetElement: \".tna-global-header__logo\",\n on: \"click\",\n rootData: {\n data_link_type: \"logo\",\n data_link: \"The National Archives\",\n data_section: \"Top navigation and logo\",\n },\n },\n {\n eventName: \"primary_link.click\",\n targetElement: \".tna-global-header__navigation-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"menu\",\n data_section: valueGetters.text,\n data_position: 1,\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"secondary_link.click\",\n targetElement: \".tna-global-header__top-navigation-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"icon\",\n data_link: valueGetters.text,\n data_section: \"Top navigation and logo\",\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-header\",\n areaName: \"header\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-header__navigation-button\",\n on: \"click\",\n data: {\n state: valueGetters.expanded,\n },\n },\n ],\n },\n];\n","export default [\n {\n scope: \".tna-hero\",\n areaName: \"hero\",\n events: [\n {\n eventName: \"toggle_caption\",\n targetElement: \".tna-hero__details-summary\",\n on: \"click\",\n data: {\n // eslint-disable-next-line no-unused-vars\n state: ($el, $scope, event) => {\n const wasExpanded =\n $scope\n .querySelector(\".tna-hero__details\")\n ?.hasAttribute(\"open\") ?? false;\n return wasExpanded ? \"closed\" : \"opened\";\n },\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) =>\n $scope.querySelector(\"img[alt]\")?.getAttribute(\"alt\"),\n },\n },\n ],\n },\n];\n","import {\n getClosestHeading,\n valueGetters,\n} from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-picture\",\n areaName: \"picture\",\n events: [\n {\n eventName: \"toggle_transcript\",\n targetElement: \".tna-picture__toggle-transcript\",\n on: \"click\",\n data: {\n state: valueGetters.expanded,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => {\n const heading = getClosestHeading($scope);\n const image = $scope.querySelector(\".tna-picture__image\");\n const imageSrc = image.getAttribute(\"src\");\n const imageAlt = image.getAttribute(\"alt\");\n const value = `${imageAlt} (${imageSrc})`;\n return heading ? `${heading} > ${value}` : value;\n },\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-radios\",\n areaName: \"radios\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-radios__item input\",\n on: \"change\",\n data: {\n state: valueGetters.checked,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => $el.parentNode.innerText,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-search-field\",\n areaName: \"search-field\",\n events: [\n {\n eventName: \"blurred\",\n targetElement: \".tna-search-field__input\",\n on: \"blur\",\n data: {\n value: valueGetters.value,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope.querySelector(\".tna-form-item__heading\")?.innerText?.trim(),\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-sidebar\",\n areaName: \"sidebar\",\n rootEventName: \"select_navigation\",\n rootData: {\n data_component_name: \"sidebar\",\n data_section: ($el, $scope) =>\n $scope.querySelector(\".tna-sidebar__heading\")?.innerText?.trim(),\n },\n events: [\n {\n eventName: \"click\",\n targetElement: \"a.tna-sidebar__link\",\n on: \"click\",\n rootData: {\n data_link_type: \"sidebar_link\",\n data_link: valueGetters.text,\n data_position: valueGetters.index,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-text-input\",\n areaName: \"text-input\",\n events: [\n {\n eventName: \"blurred\",\n on: \"blur\",\n data: {\n value: valueGetters.value,\n\n group: ($el, $scope) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-textarea\",\n areaName: \"textarea\",\n events: [\n {\n eventName: \"blurred\",\n on: \"blur\",\n data: {\n value: valueGetters.value,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n ],\n },\n];\n"],"names":["root","factory","exports","module","define","amd","self","CookieEventHandler","events","oneTimeEvents","constructor","window","TNAFrontendCookieEvents","this","clearAll","on","event","callback","once","trigger","data","Object","hasOwn","forEach","eventToTrigger","call","eachEvent","Cookies","defaultDomain","defaultPath","secure","preferencesKey","defaultAge","preferencesCorrectOnInit","tnaCookiePreferences","options","preferencesSetKey","noInit","docDataset","document","documentElement","dataset","tnaCookiesDomain","location","hostname","tnaCookiesPath","tnaCookiesInsecure","tnaCookiesPreferencesKey","tnaCookiesPreferencesSetKey","parseInt","tnaCookiesDefaultAge","validatePreferences","preferences","preferencesSet","init","existingPreferences","filteredExistingPreferences","fromEntries","keys","filter","preference","includes","map","savePreferences","usage","settings","marketing","essential","length","every","all","deserialised","cookie","split","trim","parts","key","value","decodeURIComponent","JSON","parse","get","error","exists","hasValue","set","maxAge","sameSite","domain","path","session","secureString","sessionString","encodeURIComponent","cookieDetails","deleteAll","delete","details","enablePreference","Error","setPreference","disablePreference","accepted","enableAllPreferences","allPreferences","toLowerCase","disableAllPreferences","stringify","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","o","defineProperty","enumerable","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","getXPathTo","$element","id","body","tagName","ix","parentNode","siblings","childNodes","index","sibling","nodeType","getClosestElement","$startingElement","matchingElementSelectors","heading","$search","previousElementSibling","some","matchingElementSelector","matches","innerText","parentElement","getClosestHeading","valueGetters","text","$el","replace","html","innerHTML","$scope","instance","checked","expanded","getAttribute","toString","closestHeading","xpath","target","getFileDetails","Array","from","files","file","name","size","type","componentAnalytics","scope","areaName","rootEventName","rootData","data_component_name","eventName","targetElement","state","data_link_type","data_link","data_position","group","closest","querySelector","hasAttribute","data_section","media_type","media_duration","querySelectorAll","media_provider","media_title","media_progress","findIndex","$itemButton","media_action","onCondition","image","imageSrc","EventTracker","cookies","src","A","startTime","Date","prefix","documentScope","start","initAll","navigator","doNotTrack","enableTracking","policies","disableTracking","componentConfig","addListeners","rootDefaultData","scopeArray","scopeIndex","eventConfig","attachListener","generateEventName","addEventListener","computedValueParameters","computedValue","recordEvent","xPath","timeSincePageLoad","entries","valueOrFunction","push","getTnaMetaTags","head","$metaEl","RegExp","getUserPreferences","userPreferences","matchMedia","prefersContrast","GA4","addTrackingCode","trackingCodeAdded","trackingEnabled","gTagId","TNAFrontendAnalyticsGA4","super","dataLayer","ga4Disable","destroy","ga4Data","pushToDataLayer","gtag","args","getTime","firstScript","getElementsByTagName","script","createElement","async","insertBefore","appendChild","startsWith","ga4Id","ga4","helpers"],"sourceRoot":""}
1
+ {"version":3,"file":"analytics.js","mappings":"CAAA,SAAAA,EAAAC,GACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,IACA,mBAAAG,QAAAA,OAAAC,IACAD,OAAA,GAAAH,GACA,iBAAAC,QACAA,QAAA,qBAAAD,IAEAD,EAAA,qBAAAC,GACC,CATD,CASCK,KAAA,I,sDCRD,MAAAC,EAAAC,OAAAC,IAAA,iCAQe,MAAAC,EAEfC,OAAA,GAEAC,cAAA,GAGAL,CAAAA,IAAA,EAMA,WAAAM,GACA,GAAAC,OAAAC,0BAAAR,GAEA,OAAAO,OAAAC,wBAEAD,OAAAC,wBAAAC,IACA,CAKA,QAAAC,GACAD,KAAAL,OAAA,GACAK,KAAAJ,cAAA,EACA,CAOA,EAAAM,CAAAC,EAAAC,GACAJ,KAAAL,OAAAQ,GAAA,IAAAH,KAAAL,OAAAQ,IAAA,GAAAC,EACA,CAOA,IAAAC,CAAAF,EAAAC,GACAJ,KAAAJ,cAAAO,GAAA,IACAH,KAAAJ,cAAAO,IAAA,GACAC,EAEA,CAGA,OAAAE,CAAAH,EAAAI,EAAA,IACAC,OAAAC,OAAAT,KAAAL,OAAAQ,IACAH,KAAAL,OAAAQ,GAAAO,QAAAC,GACAA,EAAAC,KAAAZ,KAAAO,IAGAC,OAAAC,OAAAT,KAAAJ,cAAAO,KACAH,KAAAJ,cAAAO,GAAAO,QAAAG,GACAA,EAAAD,KAAAZ,KAAAO,IAEAP,KAAAJ,cAAAO,GAAA,GAEA,EC9De,MAAAW,EAEfC,cAAA,GAEAC,YAAA,GAEAC,QAAA,EAEAC,eAAA,GAEAvB,OAAA,KAEAwB,WAAA,KAEAC,0BAAA,EAGAC,qBAAA,6CAaA,WAAAxB,CAAAyB,EAAA,IACA,MAAAP,cACAA,EAAAC,YACAA,EAAAC,OACAA,EAAAC,eACAA,EAAAK,kBACAA,EAAAJ,WACAA,EAAAK,OACAA,GAAA,GACMF,EACNG,EAAAC,SAAAC,gBAAAC,QACA5B,KAAAe,cAAAA,GAEAU,EAAAI,kBAAA/B,OAAAgC,SAAAC,SACA/B,KAAAgB,YAAAA,GAEAS,EAAAO,gBAAA,IACAhC,KAAAiB,OAAAA,GAAA,SAAAQ,EAAAQ,mBACAjC,KAAAkB,eAAAA,GAEAO,EAAAS,0BAAA,qBACAlC,KAAAuB,kBAAAA,GAEAE,EAAAU,6BAAA,yBACAnC,KAAAmB,WAAAA,GAEAiB,SAAAX,EAAAY,qBAAA,KAEA,QACArC,KAAAL,OAAA,IAAsBD,EACtBM,KAAAoB,yBAAApB,KAAAsC,oBAAAtC,KAAAuC,aACAvC,KAAAoB,2BACApB,KAAAwC,gBAAA,EACAhB,GACAxB,KAAAyC,OAGA,CAGA,IAAAA,GACA,MAAAC,EAAA1C,KAAAuC,YACAI,EAAAnC,OAAAoC,YACApC,OAAAqC,KAAAH,GACAI,OAAAC,GAAA/C,KAAAqB,qBAAA2B,SAAAD,IACAE,IAAAF,GAAA,CAAAA,EAAAL,EAAAK,MAEA/C,KAAAkD,gBAAA,CACAC,OAAA,EACAC,UAAA,EACAC,WAAA,KACAV,EACAW,WAAA,GAEA,CAEA,mBAAAhB,CAAAC,GACA,OACA/B,OAAAqC,KAAAN,GAAAgB,SAAAvD,KAAAqB,qBAAAkC,QACAvD,KAAAqB,qBAAAmC,MACAT,GACAvC,OAAAqC,KAAAN,GAAAS,SAAAD,IACA,kBAAAR,EAAAQ,GAGA,CAIA,OAAAU,GACA,MAAAC,EAAA,GAUA,OATAhC,SAAAiC,OACAC,MAAA,MACAd,OAAAa,GAAA,KAAAA,EAAAE,QACAf,OAAAa,GAAAA,EAAAX,SAAA,MACAtC,QAAAiD,IACA,MAAAG,EAAAH,EAAAE,OAAAD,MAAA,MACAG,EAAAC,EAAA,IAAAF,EACAJ,EAAAK,GAAAE,mBAAAD,KAEAN,CACA,CAGA,eAAAnB,GACA,IACA,OAAA2B,KAAAC,MAAAnE,KAAAoE,IAAApE,KAAAkB,iBAAA,KAEA,CAAM,MAAAmD,GACN,QACA,CACA,CAOA,MAAAC,CAAAP,GACA,OAAAvD,OAAAC,OAAAT,KAAAyD,IAAAM,EACA,CAQA,QAAAQ,CAAAR,EAAAC,GACA,OAAAhE,KAAAoE,IAAAL,KAAAC,CACA,CAOA,GAAAI,CAAAL,GACA,GAAA/D,KAAAsE,OAAAP,GACA,OAAAE,mBAAAjE,KAAAyD,IAAAM,GAIA,CAeA,GAAAS,CAAAT,EAAAC,EAAA1C,EAAA,IACA,MAAAmD,OACAA,EAAAzE,KAAAmB,WAAAuD,SACAA,EAAA,MAAAC,OACAA,EAAA3E,KAAAe,cAAA6D,KACAA,EAAA5E,KAAAgB,YAAAC,OACAA,EAAAjB,KAAAiB,OAAA4D,QACAA,GAAA,GACMvD,EACN,IAAAyC,EACA,OAEA,MAAAe,EAAA7D,EAAA,WAAqC,GACrC8D,EAAAF,EAAA,gBAAsDJ,IACtDd,EAAA,GAAsBqB,mBAAAjB,MAA2BiB,mBAAAhB,cAAqCW,eAAoBD,WAAkBE,IAAOG,IAAgBD,IACnJpD,SAAAiC,OAAAA,EACA,MAAAsB,EAAA,CACAlB,MACAC,QACAS,SACAG,OACAF,WACAC,SACA1D,SACA4D,UACAlB,UAEA3D,KAAAL,OAAAW,QAAA,YAAA2E,EACA,CAOA,OAAAlB,EAAAa,EAAA,IAAAD,EAAA3E,KAAAe,eACA,MAAAO,EAAA,CAAsBmD,QAAA,EAAAG,OAAAD,UACtB3E,KAAAwE,IAAAT,EAAA,GAAAzC,GACAtB,KAAAL,OAAAW,QAAA,gBAA0CyD,SAAAzC,GAC1C,CAKA,SAAA4D,CAAAN,EAAA,IAAAD,EAAA3E,KAAAe,eACAP,OAAAqC,KAAA7C,KAAAyD,KAAA/C,QAAAiD,IACA3D,KAAAmF,OAAAxB,EAAAiB,EAAAD,KAEA,MAAAS,EAAA,CAAsBR,OAAAD,UACtB3E,KAAAL,OAAAW,QAAA,mBAAA8E,EACA,CAMA,gBAAAC,CAAAtC,GACA,IAAAvC,OAAAC,OAAAT,KAAAuC,YAAAQ,GACA,UAAAuC,MAAA,eAAqCvC,qBAErC/C,KAAAuF,cAAAxC,GAAA,GACA/C,KAAAL,OAAAW,QAAA,mBAAAyC,GACA/C,KAAAL,OAAAW,QAAA,oBAA8CyC,CAAAA,IAAA,GAC9C,CAMA,iBAAAyC,CAAAzC,GACA,IAAAvC,OAAAC,OAAAT,KAAAuC,YAAAQ,GACA,UAAAuC,MAAA,eAAqCvC,qBAErC/C,KAAAuF,cAAAxC,GAAA,GACA/C,KAAAL,OAAAW,QAAA,oBAAAyC,GACA/C,KAAAL,OAAAW,QAAA,oBAA8CyC,CAAAA,IAAA,GAC9C,CAOA,aAAAwC,CAAAxC,EAAA0C,GACA,IAAAjF,OAAAC,OAAAT,KAAAuC,YAAAQ,GACA,UAAAuC,MAAA,eAAqCvC,qBAErC,cAAAA,IAGA/C,KAAAkD,gBAAA,IACAlD,KAAAuC,YACAQ,CAAAA,GAAA0C,EACAnC,WAAA,IAEAtD,KAAAL,OAAAW,QAAA,oBAA8CyC,CAAAA,GAAA0C,IAC9C,CAKA,oBAAAC,GACA,MAAAC,EAAAnF,OAAAoC,YACApC,OAAAqC,KAAA7C,KAAAuC,aAAAU,IAAAc,GAAA,CAAAA,EAAA6B,eAAA,KAEA5F,KAAAkD,gBAAAyC,GACA3F,KAAAwC,gBAAA,EACAxC,KAAAL,OAAAW,QAAA,wBACAN,KAAAL,OAAAW,QAAA,mBAAAqF,EACA,CAKA,qBAAAE,GACA,MAAAF,EAAA,IACAnF,OAAAoC,YACApC,OAAAqC,KAAA7C,KAAAuC,aAAAU,IAAAc,GAAA,CAAAA,EAAA6B,eAAA,KAEAtC,WAAA,GAEAtD,KAAAkD,gBAAAyC,GACA3F,KAAAwC,gBAAA,EACAxC,KAAAL,OAAAW,QAAA,yBACAN,KAAAL,OAAAW,QAAA,mBAAAqF,EACA,CAGA,eAAAzC,CAAAX,GACAvC,KAAAwE,IAAAxE,KAAAkB,eAAAgD,KAAA4B,UAAAvD,GACA,CAMA,kBAAAC,GACA,OAAAxC,KAAAuE,SAAAvE,KAAAuB,kBAAA,OACA,CAMA,kBAAAiB,CAAAwB,IAEA,IAAAA,GACAhE,KAAAsC,oBAAA4B,KAAAC,MAAAnE,KAAAoE,IAAApE,KAAAkB,kBAEAlB,KAAAwE,IAAAxE,KAAAuB,kBAAA,QAEAvB,KAAAmF,OAAAnF,KAAAuB,mBAEAvB,KAAAL,OAAAW,QAAA,iBACA,CAOA,UAAAyC,CAAAA,GACA,GAAAvC,OAAAC,OAAAT,KAAAuC,YAAAQ,GACA,WAAA/C,KAAAuC,YAAAQ,GAEA,UAAAuC,MAAA,eAAmCvC,oBACnC,CAOA,EAAA7C,CAAAC,EAAAC,GACAJ,KAAAL,OAAAO,GAAAC,EAAAC,EACA,CAOA,IAAAC,CAAAF,EAAAC,GACAJ,KAAAL,OAAAU,KAAAF,EAAAC,EACA,E,GCzWA,MAAA2F,EAAA,GAGA,SAAAC,EAAAC,GAEA,MAAAC,EAAAH,EAAAE,GACA,QAAAE,IAAAD,EACA,OAAAA,EAAAhH,QAGA,MAAAC,EAAA4G,EAAAE,GAAA,CAGA/G,QAAA,IAOA,OAHAkH,EAAAH,GAAA9G,EAAAA,EAAAD,QAAA8G,GAGA7G,EAAAD,OACA,CCrBA8G,EAAAK,EAAA,CAAAnH,EAAAoH,KACA,QAAAvC,KAAAuC,EACAN,EAAAO,EAAAD,EAAAvC,KAAAiC,EAAAO,EAAArH,EAAA6E,IACAvD,OAAAgG,eAAAtH,EAAA6E,EAAA,CAAyC0C,YAAA,EAAArC,IAAAkC,EAAAvC,MCJzCiC,EAAAO,EAAA,CAAAG,EAAAC,IAAAnG,OAAAoG,UAAAC,eAAAjG,KAAA8F,EAAAC,GCCAX,EAAAc,EAAA5H,IACAsB,OAAAgG,eAAAtH,EAAAM,OAAAuH,YAAA,CAAsD/C,MAAA,WACtDxD,OAAAgG,eAAAtH,EAAA,cAAgD8E,OAAA,K,iFCHhD,MAAMgD,EAAcC,IAClB,GAAoB,KAAhBA,EAASC,GACX,MAAO,OAAOD,EAASC,OAEzB,GAAID,IAAavF,SAASyF,KACxB,OAAOF,EAASG,QAElB,IAAIC,EAAK,EACT,GAAIJ,EAASK,WAAY,CACvB,MAAMC,EAAWN,EAASK,WAAWE,WAErC,IAAK,IAAIC,EAAQ,EAAGA,EAAQF,EAAShE,OAAQkE,GAAS,EAAG,CACvD,MAAMC,EAAUH,EAASE,GACzB,GAAIC,IAAYT,EACd,MAAO,GAAGD,EAAWC,EAASK,eAAeL,EAASG,WAEpDC,EAAK,KAIgB,IAArBK,EAAQC,UAAkBD,EAAQN,UAAYH,EAASG,UAEzDC,GAAM,EAEV,CACA,MAAO,GAAGL,EAAWC,EAASK,eAAeL,EAASG,SACxD,CACA,OAAOH,EAASG,SAEZQ,EAAoB,CAACC,EAAkBC,KAC3C,IAAIC,EAAU,GACVC,EAAUH,EACd,EAAG,CACD,KAAOG,EAAQC,wBAEb,GADAD,EAAUA,EAAQC,uBAGhBH,EAAyBI,KAAMC,GAC7BH,EAAQI,QAAQD,IAElB,CACAJ,EAAUC,EAAQK,UAClB,KACF,CAEFL,EAAUA,EAAQM,aACpB,OAASN,EAAQM,gBAAkBP,GACnC,OAAOA,GAEHQ,EAAqBtB,GACzBW,EAAkBX,EAAU,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,OACvDuB,EAAe,CACnBC,KAAOC,GAAQA,EAAIL,UAAUM,QAAQ,OAAQ,KAC7CC,KAAOF,GAAQA,EAAIG,UACnB7E,MAAQ0E,GAAQA,EAAI1E,MACpByD,MAAO,CAACiB,EAAKI,EAAQ3I,EAAOsH,IAAUA,EACtCsB,SAAU,CAACL,EAAKI,EAAQ3I,EAAOsH,EAAOsB,IAAaA,EAEnDC,QAAUN,GAASA,EAAIM,QAAU,UAAY,YAC7CC,SAAWP,IACT,MAAMO,EAAWP,EAAIQ,aAAa,iBAClC,OAAiB,OAAbD,EACK,KAGsB,SAAxBA,EAASE,WAAwB,SAAW,UAErDC,eAAiBV,GAAQH,EAAkBG,GAC3CW,MAAQX,GAAQ1B,EAAW0B,EAAIY,SCpE3BC,EAAkBb,GACtBxE,KAAK4B,UACH0D,MAAMC,KAAKf,EAAIgB,OAAOzG,IAAK0G,IAAI,CAC7BC,KAAMD,EAAKC,KACXC,KAAMF,EAAKE,KACXC,KAAMH,EAAKG,SCuBXC,EAAqB,CCzBzB,CACEC,MAAO,iBACPC,SAAU,YACVC,cAAe,iBACfC,SAAU,CACRC,oBAAqB,aAEvBzK,OAAQ,CACN,CACE0K,UAAW,QACXC,cAAe,0BACfpK,GAAI,QACJK,KAAM,CAAEgK,MAAO/B,EAAaS,SAAUjF,MAAOwE,EAAaC,MAC1D0B,SAAU,CACRK,eAAgBhC,EAAaS,SAC7BwB,UAAWjC,EAAaC,KACxBiC,cAAelC,EAAaf,UChBpC,CACEuC,MAAO,mBACPC,SAAU,cACVC,cAAe,oBACfC,SAAU,CACRC,oBAAqB,eAEvBzK,OAAQ,CACN,CACE0K,UAAW,QACXC,cAAe,0BACfpK,GAAI,QACJK,KAAM,CAAEgK,MAAO,SAAUvG,MAAOwE,EAAaI,MAC7CuB,SAAU,CACRK,eAAgB,kBAChBC,UAAWjC,EAAaC,OAG5B,CACE4B,UAAW,QACXC,cACE,kEACFpK,GAAI,QACJK,KAAM,CAAEgK,MAAO,SAAUvG,MAAOwE,EAAaI,MAC7CuB,SAAU,CACRK,eAAgB,oBAChBC,UAAWjC,EAAaC,SC1BhC,CACEuB,MAAO,kBACPC,SAAU,aACVtK,OAAQ,CACN,CACE0K,UAAW,SACXC,cAAe,8BACfpK,GAAI,SACJK,KAAM,CACJgK,MAAO/B,EAAaQ,QAEpBhF,MAAO,CAAC0E,EAAKI,EAAQ3I,IAAUuI,EAAIpB,WAAWe,UAAUxE,OAExD8G,MAAO,CAACjC,EAAKI,EAAQ3I,IACnB2I,EACG8B,QAAQ,mBACPC,cAAc,4BACdxC,WAAWxE,WCjBzB,CACEmG,MAAO,eACPC,SAAU,UACVtK,OAAQ,CACN,CACE0K,UAAW,QACXC,cAAe,wBACfpK,GAAI,QACJK,KAAM,CAEJgK,MAAO,CAAC7B,EAAKI,EAAQ3I,IAEjB2I,EACG+B,cAAc,0BACbC,aAAa,QACE,SAAW,SAGlC9G,MAAOwE,EAAaC,SClB5B,CACEuB,MAAO,qBACPC,SAAU,gBACVtK,OAAQ,CACN,CACE0K,UAAW,OACXC,cAAe,4BACfpK,GAAI,QACJK,KAAM,CAAEyD,MAAOwE,EAAaC,SNDlC,CACEuB,MAAO,kBACPC,SAAU,aACVtK,OAAQ,CACN,CACE0K,UAAW,UACXnK,GAAI,OACJK,KAAM,CACJyD,MAAOuF,EACPgB,MAAQ7B,GAAQA,EAAIgB,MAAMnG,OAE1BoH,MAAO,CAACjC,EAAKI,IACXA,EACG8B,QAAQ,mBACPC,cAAc,4BACdxC,WAAWxE,SAGrB,CACEwG,UAAW,YACXnK,GAAI,SACJK,KAAM,CACJyD,MAAOuF,EACPgB,MAAQ7B,GAAQA,EAAIgB,MAAMnG,OAE1BoH,MAAO,CAACjC,EAAKI,IACXA,EACG8B,QAAQ,mBACPC,cAAc,4BACdxC,WAAWxE,SAGrB,CACEwG,UAAW,UACXnK,GAAI,SACJK,KAAM,CACJyD,MAAOuF,EACPgB,MAAQ7B,GAAQA,EAAIgB,MAAMnG,OAE1BoH,MAAO,CAACjC,EAAKI,IACXA,EACG8B,QAAQ,mBACPC,cAAc,4BACdxC,WAAWxE,WOlDzB,CACEmG,MAAO,cACPC,SAAU,SACVC,cAAe,oBACfC,SAAU,CACRC,oBAAqB,UAEvBzK,OAAQ,CACN,CACE0K,UAAW,aACXC,cAAe,0CACfpK,GAAI,QACJK,KAAM,CACJyD,MAAOwE,EAAaC,MAEtB0B,SAAU,CACRK,eAAgB,OAChBO,aAAcvC,EAAaY,eAC3BqB,UAAWjC,EAAaC,OAG5B,CACE4B,UAAW,oBACXC,cAAe,gCACfpK,GAAI,QACJK,KAAM,CACJyD,MAAOwE,EAAaC,MAEtB0B,SAAU,CACRK,eAAgB,OAChBO,aAAc,eACdN,UAAY/B,GAAQA,EAAI9G,QAAQgI,OAGpC,CACES,UAAW,mBACXC,cAAe,+BACfpK,GAAI,QACJK,KAAM,CACJyD,MAAOwE,EAAaC,MAEtB0B,SAAU,CACRK,eAAgB,OAChBO,aAAc,oBACdN,UAAWjC,EAAaC,OAG5B,CACE4B,UAAW,qBACXC,cAAe,yCACfpK,GAAI,QACJK,KAAM,CACJyD,MAAOwE,EAAaC,MAEtB0B,SAAU,CACRK,eAAgB,SAChBO,aAAc,eACdN,UAAWjC,EAAaC,OAG5B,CACE4B,UAAW,YACXC,cAAe,4CACfpK,GAAI,QACJK,KAAM,CACJyD,MAAOwE,EAAaC,MAEtB0B,SAAU,CACRK,eAAgB,OAChBO,aAAc,MACdN,UAAWjC,EAAaC,OAG5B,CACE4B,UAAW,cACXC,cAAe,0BACfpK,GAAI,QACJK,KAAM,CACJyD,MAAOwE,EAAaC,MAEtB0B,SAAU,CACRK,eAAgB,OAChBO,aAAc,SACdN,UAAWjC,EAAaC,OAG5B,CACE4B,UAAW,eACXC,cAAe,qCACfpK,GAAI,QACJK,KAAM,CACJyD,MAAOwE,EAAaxE,UC3F5B,CACEgG,MAAO,eACPC,SAAU,UACVC,cAAe,eACfC,SAAU,CACRa,WAAY,UACZC,eAAgB,CAACvC,EAAKI,IACpBA,EAAOoC,iBAAiB,iCAAiC3H,OAC3D4H,eAAgB,MAChBC,YAAa,CAAC1C,EAAKI,EAAQ3I,EAAOsH,EAAOsB,IACvCD,EAAO+B,cAAc,+BAA+BxC,WAAWxE,QAC/D,WAAWkF,IACbsC,eAAgB,CAAC3C,EAAKI,KACnBU,MAAMC,KACLX,EAAOoC,iBAAiB,kCACxBI,UACCC,GAA6D,SAA7CA,EAAYrC,aAAa,mBAEtC,GAAK,GAEfvJ,OAAQ,CACN,CACE0K,UAAW,QACXC,cAAe,gCACfpK,GAAI,QACJK,KAAM,CACJyD,MAAOwE,EAAaC,MAEtB0B,SAAU,CACRM,UAAW,QACXe,aAAc,WACdH,eAAgB7C,EAAaf,QAGjC,CACE4C,UAAW,QACXC,cAAe,gCACfpK,GAAI,QACJK,KAAM,CACJyD,MAAO,CAAC0E,EAAKI,IACXA,EACG+B,cACC,+DAEAxC,WAAWxE,QAEnBsG,SAAU,CACRM,UAAW,WACXe,aAAc,aAGlB,CACEnB,UAAW,QACXC,cAAe,gCACfpK,GAAI,QACJK,KAAM,CACJyD,MAAO,CAAC0E,EAAKI,IACXA,EACG+B,cACC,+DAEAxC,WAAWxE,QAEnBsG,SAAU,CACRM,UAAW,OACXe,aAAc,aAGlB,CACEnB,UAAW,WACXnK,GAAI,UACJuL,YAAa,CAAC/C,EAAKI,EAAQ3I,IACzB,CACE,YACA,aACA,UACA,YACA,MACA,QAEA6C,SAAS7C,EAAM4D,KACnBxD,KAAM,CACJyD,MAAO,CAAC0E,EAAKI,EAAQ3I,IAAUA,EAAM4D,KAEvCoG,SAAU,CACRM,UAAW,WACXe,aAAc,eCtFtB,CACExB,MAAO,qBACPC,SAAU,SACVC,cAAe,oBACfC,SAAU,CACRC,oBAAqB,UAEvBzK,OAAQ,CACN,CACE0K,UAAW,SACXC,cAAe,wCACfpK,GAAI,QACJK,KAAM,CACJgK,MAAO/B,EAAaS,UAEtBkB,SAAU,CACRK,eAAgB,cAChBC,UAAY/B,IACV,MAAMO,EAAWP,EAAIQ,aAAa,iBAClC,OAAiB,OAAbD,EACK,KAEsB,SAAxBA,EAASE,WAAwB,YAAc,cAExD4B,aAAc,gBAGlB,CACEV,UAAW,aACXC,cAAe,2BACfpK,GAAI,QACJiK,SAAU,CACRK,eAAgB,OAChBC,UAAW,wBACXM,aAAc,4BAGlB,CACEV,UAAW,qBACXC,cAAe,2CACfpK,GAAI,QACJK,KAAM,CACJyD,MAAOwE,EAAaC,MAEtB0B,SAAU,CACRK,eAAgB,OAChBO,aAAcvC,EAAaC,KAC3BiC,cAAe,EACfD,UAAWjC,EAAaC,OAG5B,CACE4B,UAAW,uBACXC,cAAe,0CACfpK,GAAI,QACJK,KAAM,CACJyD,MAAOwE,EAAaC,MAEtB0B,SAAU,CACRK,eAAgB,OAChBC,UAAWjC,EAAaC,KACxBsC,aAAc,8BC7DtB,CACEf,MAAO,cACPC,SAAU,SACVtK,OAAQ,CACN,CACE0K,UAAW,SACXC,cAAe,iCACfpK,GAAI,QACJK,KAAM,CACJgK,MAAO/B,EAAaS,aCX5B,CACEe,MAAO,YACPC,SAAU,OACVtK,OAAQ,CACN,CACE0K,UAAW,iBACXC,cAAe,6BACfpK,GAAI,QACJK,KAAM,CAEJgK,MAAO,CAAC7B,EAAKI,EAAQ3I,IAEjB2I,EACG+B,cAAc,uBACbC,aAAa,QACE,SAAW,SAGlC9G,MAAO,CAAC0E,EAAKI,EAAQ3I,IACnB2I,EAAO+B,cAAc,aAAa3B,aAAa,WCdzD,CACEc,MAAO,eACPC,SAAU,UACVtK,OAAQ,CACN,CACE0K,UAAW,oBACXC,cAAe,kCACfpK,GAAI,QACJK,KAAM,CACJgK,MAAO/B,EAAaS,SAEpBjF,MAAO,CAAC0E,EAAKI,EAAQ3I,KACnB,MAAM4H,EAAUQ,EAAkBO,GAC5B4C,EAAQ5C,EAAO+B,cAAc,uBAC7Bc,EAAWD,EAAMxC,aAAa,OAE9BlF,EAAQ,GADG0H,EAAMxC,aAAa,WACNyC,KAC9B,OAAO5D,EAAU,GAAGA,OAAa/D,IAAUA,OCpBrD,CACEgG,MAAO,cACPC,SAAU,SACVtK,OAAQ,CACN,CACE0K,UAAW,SACXC,cAAe,0BACfpK,GAAI,SACJK,KAAM,CACJgK,MAAO/B,EAAaQ,QAEpBhF,MAAO,CAAC0E,EAAKI,EAAQ3I,IAAUuI,EAAIpB,WAAWe,UAE9CsC,MAAO,CAACjC,EAAKI,EAAQ3I,IACnB2I,EACG8B,QAAQ,mBACPC,cAAc,4BACdxC,WAAWxE,WCjBzB,CACEmG,MAAO,oBACPC,SAAU,eACVtK,OAAQ,CACN,CACE0K,UAAW,UACXC,cAAe,2BACfpK,GAAI,OACJK,KAAM,CACJyD,MAAOwE,EAAaxE,MAEpB2G,MAAO,CAACjC,EAAKI,EAAQ3I,IACnB2I,EAAO+B,cAAc,4BAA4BxC,WAAWxE,WCZtE,CACEmG,MAAO,eACPC,SAAU,UACVC,cAAe,oBACfC,SAAU,CACRC,oBAAqB,UACrBW,aAAc,CAACrC,EAAKI,IAClBA,EAAO+B,cAAc,0BAA0BxC,WAAWxE,QAE9DlE,OAAQ,CACN,CACE0K,UAAW,QACXC,cAAe,sBACfpK,GAAI,QACJiK,SAAU,CACRK,eAAgB,eAChBC,UAAWjC,EAAaC,KACxBiC,cAAelC,EAAaf,UCjBpC,CACEuC,MAAO,kBACPC,SAAU,aACVtK,OAAQ,CACN,CACE0K,UAAW,UACXnK,GAAI,OACJK,KAAM,CACJyD,MAAOwE,EAAaxE,MAEpB2G,MAAO,CAACjC,EAAKI,IACXA,EACG8B,QAAQ,mBACPC,cAAc,4BACdxC,WAAWxE,WCdzB,CACEmG,MAAO,gBACPC,SAAU,WACVtK,OAAQ,CACN,CACE0K,UAAW,UACXnK,GAAI,OACJK,KAAM,CACJyD,MAAOwE,EAAaxE,MAEpB2G,MAAO,CAACjC,EAAKI,EAAQ3I,IACnB2I,EACG8B,QAAQ,mBACPC,cAAc,4BACdxC,WAAWxE,YhB+B3B,MAAM+H,EAEJC,QAAU,IAAIC,EAAAC,EAGdpM,OAAS,GAGTqM,UAAY,IAAIC,KAGhBC,OAAS,MAGTxK,SAAWA,SAEX,WAAA7B,CAAYyB,EAAU,CAAC,GACrB,MAAM4K,OAAEA,EAAS,KAAIC,cAAEA,EAAgBzK,UAAaJ,EAChD4K,IACFlM,KAAKkM,OAASA,GAEZC,IACFnM,KAAK0B,SAAWyK,EAEpB,CAEA,KAAAC,CAAMC,GAECC,UAAUC,YAAuC,IAAzBD,UAAUC,aACjCvM,KAAK6L,QAAQ9I,WAAW,UAC1B/C,KAAKwM,iBAEPxM,KAAK6L,QAAQ3L,GAAG,mBAAqBuM,IAC/BjM,OAAOC,OAAOgM,EAAU,WACtBA,EAAStJ,MACXnD,KAAKwM,iBAELxM,KAAK0M,qBAIPL,GACFrM,KAAKqM,UAGX,CAIA,cAAAG,GAAkB,CAIlB,eAAAE,GAAmB,CAKnB,OAAAL,GACEtC,EAAmBrJ,QAASiM,IAC1B3M,KAAK4M,aACHD,EAAgB3C,MAChB2C,EAAgB1C,SAChB0C,EAAgBhN,OAChBgN,EAAgBzC,eAAiB,GACjCyC,EAAgBxC,UAAY,CAAC,IAGnC,CAUA,YAAAyC,CACE5C,EACAC,EACAtK,EACAuK,EAAgB,GAChB2C,EAAkB,CAAC,GAEnB,IAAIC,EAAa,GACI,iBAAV9C,EACT8C,EAAatD,MAAMC,KAAKzJ,KAAK0B,SAASwJ,iBAAiBlB,IAC7B,iBAAVA,IAChB8C,EAAa,CAAC9C,IAGU,IAAtB8C,EAAWvJ,QAGfuJ,EAAWpM,QAAQ,CAACoI,EAAQiE,KAC1BpN,EAAOe,QAASsM,IACVA,EAAY9M,KACV8M,EAAY1C,cACdd,MAAMC,KACJX,EAAOoC,iBAAiB8B,EAAY1C,gBACpC5J,QAAQ,CAACgI,EAAKjB,IACdzH,KAAKiN,eACHvE,EACAI,EACAoB,EACA2C,EACAG,EACAhD,EACAC,EAEAxC,EAAQ,EAERsF,EAAa,IAIjB/M,KAAKiN,eACHnE,EACAA,EACAoB,EACA2C,EACAG,EACAhD,EACAC,EAEA,EAEA8C,EAAa,OAMzB,CAGA,iBAAAG,CAAkBjD,EAAU+C,GAC1B,MAAO,GAAGhN,KAAKkM,UAAUjC,KAAY+C,EAAY3C,WAAa2C,EAAY9M,IAC5E,CAGA,cAAA+M,CACEvE,EACAI,EACAoB,EACA2C,EACAG,EACAhD,EACAC,EACAxC,EACAsB,GAEA,MAAM7I,GACJA,EAAEK,KACFA,EAAI+J,cACJA,EAAaH,SACbA,EAAW,CAAC,EAACsB,YACbA,EAAc,MACZuB,EACJtE,EAAIyE,iBAAiBjN,EAAKC,IACxB,MAAMiN,EAA0B,CAAC1E,EAAKI,EAAQ3I,EAAOsH,EAAOsB,IAE1C,OAAhB0C,GACAzL,KAAKqN,cAAc5B,KAAgB2B,KAEnCpN,KAAKsN,YACHN,EAAY9C,cACR,GAAGlK,KAAKkM,UAAUc,EAAY9C,gBAC9BA,EACE,GAAGlK,KAAKkM,UAAUhC,IAClBlK,KAAKkN,kBAAkBjD,EAAU+C,GACvC,IACKzM,EACHqJ,KAAM5J,KAAKkN,kBAAkBjD,EAAU+C,GACvChJ,MAAOzD,GAAMyD,MACThE,KAAKqN,cAAc9M,EAAKyD,SAAUoJ,GAClC,KACJ7C,MAAOhK,GAAMgK,MACTvK,KAAKqN,cAAc9M,EAAKgK,SAAU6C,GAClC,KACJzC,MAAOpK,GAAMoK,MACT3K,KAAKqN,cAAc9M,EAAKoK,SAAUyC,GAClC,KACJG,MAAOvG,EAAW0B,GAClB4B,gBACAkD,kBAAmB,IAAIvB,KAASjM,KAAKgM,UACrCvE,QACAsB,WACAiB,QACAC,YAEFzJ,OAAOoC,YACLpC,OAAOiN,QAAQ,IAAKZ,KAAoB1C,IAAYlH,IAClD,EAAEc,EAAKC,KAAW,CAChBD,EACA/D,KAAKqN,cAAcrJ,KAAUoJ,QAO3C,CAGA,aAAAC,CAAcK,EAAiBhF,EAAKI,EAAQ3I,EAAOsH,EAAOsB,GACxD,MAAkC,mBAApB2E,EACVA,EAAgB9M,KAAKZ,KAAM0I,EAAKI,EAAQ3I,EAAOsH,EAAOsB,GACrD2E,GAAmB,IAC1B,CAGA,WAAAJ,CAAYjD,EAAW9J,EAAM4J,EAAW,CAAC,GACvCnK,KAAKL,OAAOgO,KAAK,CACfxN,MAAOkK,KACJ9J,KACA4J,GAEP,CAGA,cAAAyD,GACE,OAAOpN,OAAOoC,YAAY,IACrB4G,MAAMC,KACP/H,SAASmM,KAAK3C,iBACZ,eAAelL,KAAKkM,4BAEtBjJ,IAAK6K,GAAY,CACjBA,EACG5E,aAAa,QACbP,QAAQ,IAAIoF,OAAO,IAAI/N,KAAKkM,eAAgB,KAAM,IACrD4B,EAAQ5E,aAAa,gBAEpBM,MAAMC,KACP/H,SAASmM,KAAK3C,iBACZ,eAAelL,KAAKkM,uBAEtBjJ,IAAK6K,GAAY,CACjBA,EAAQ5E,aAAa,QACrB4E,EAAQ5E,aAAa,cAG3B,CAGA,kBAAA8E,GACE,MAAMC,EAAkB,CAAC,EACzBA,EAAgB,GAAGjO,KAAKkM,oCACtBpM,OAAOoO,aAAa,gCAAgC9F,QAChD,OACA,QACN6F,EAAgB,GAAGjO,KAAKkM,6BAA+BpM,OAAOoO,aAC5D,2BACA9F,QACF,IAAI+F,EAAkB,gBAWtB,OAVIrO,OAAOoO,aAAa,4BAA4B9F,QAClD+F,EAAkB,OACTrO,OAAOoO,aAAa,4BAA4B9F,UACzD+F,EAAkB,QAEpBF,EAAgB,GAAGjO,KAAKkM,gCAAkCiC,EAC1DF,EAAgB,GAAGjO,KAAKkM,sCACtBpM,OAAOoO,aAAa,oCAAoC9F,QAC1D6F,EAAgB,GAAGjO,KAAKkM,4CACtBpM,OAAOoO,aAAa,0CAA0C9F,QACzD6F,CACT,EAUF,MAAMG,UAAYxC,EAEhByC,iBAAkB,EAGlBC,mBAAoB,EAGpBC,iBAAkB,EAGlBC,OAEA,WAAA3O,CAAYyB,EAAU,CAAC,GACrB,GAAIxB,OAAO2O,wBAET,OAAO3O,OAAO2O,wBAEhB,MAAMvH,GACJA,EAAK,GAAEgF,OACPA,EAAS,KAAIG,QACbA,GAAU,EAAIgC,gBACdA,GAAkB,GAChB/M,EACJoN,MAAM,CAAExC,WACRpM,OAAO2O,wBAA0BzO,KACjCA,KAAKqO,gBAAkBA,EACvBvO,OAAO6O,YAAc,GACjBzH,IACFlH,KAAKwO,OAAStH,EACdlH,KAAK4O,WAAa,cAAc5O,KAAKwO,SAChCxO,KAAK6L,QAAQ9I,WAAW,WAC3BjD,OAAOE,KAAK4O,aAAc,EAC1B5O,KAAK6L,QAAQrH,IAAIxE,KAAK4O,WAAY,UAGtC5O,KAAKoM,MAAMC,EACb,CAIA,OAAAwC,GACE/O,OAAO2O,wBAA0B,IACnC,CAGA,WAAAnB,CAAYjD,EAAW9J,EAAM4J,EAAW,CAAC,GACvC,MAAM2E,EAAU,CACd3O,MAAOkK,KACJ7J,OAAOoC,YACRpC,OAAOiN,QAAQlN,GAAM0C,IAAI,EAAEc,EAAKC,KAAW,CACzC,GAAGhE,KAAKkM,gBAAgBnI,IACxBC,QAGDmG,GAELnK,KAAK+O,gBAAgBD,EACvB,CAGA,IAAAE,IAAQC,GACNjP,KAAK+O,gBAAgBE,EACvB,CAIA,eAAAF,CAAgBxO,GACdT,OAAO6O,UAAUhB,KAAKpN,EACxB,CAGA,cAAAiM,GACE,IAAKxM,KAAKuO,gBAAiB,CAGzB,GAFAzO,OAAOE,KAAK4O,aAAc,EAC1B5O,KAAK6L,QAAQrH,IAAIxE,KAAK4O,WAAY,UAC7B5O,KAAKsO,mBAAqBtO,KAAKqO,gBAAiB,CACnD,IAAKrO,KAAKwO,OACR,MAAMlJ,MAAM,wBAEdtF,KAAK+O,gBAAgB,IAChB/O,KAAK4N,oBACL5N,KAAKgO,qBACR,aAAa,IAAI/B,MAAOiD,UACxB/O,MAAO,WAET,MAAOgP,GAAezN,SAAS0N,qBAAqB,UAC9CC,EAAS3N,SAAS4N,cAAc,UACtCD,EAAOE,OAAQ,EACfF,EAAOvD,IAAM,8CAA8C9L,KAAKwO,qBAC5DW,EACFA,EAAY7H,WAAWkI,aAAaH,EAAQF,GAE5CzN,SAASmM,KAAK4B,YAAYJ,GAE5BrP,KAAKsO,mBAAoB,CAC3B,CACAtO,KAAKuO,iBAAkB,CACzB,CACF,CAGA,eAAA7B,GACM1M,KAAKuO,kBACPzO,OAAOE,KAAK4O,aAAc,EAC1B5O,KAAK6L,QAAQrH,IAAIxE,KAAK4O,WAAY,QAClCpO,OAAOqC,KAAK7C,KAAK6L,QAAQpI,KAAK/C,QAASqD,IACjCA,EAAI2L,WAAW,QACjB1P,KAAK6L,QAAQ1G,OAAOpB,KAGxB/D,KAAKuO,iBAAkB,EAE3B,EAGF,MAAMoB,EAAQjO,SAASC,gBAAgBC,QAAQgO,IAC3CD,GAEF,IAAIvB,EAAI,CAAElH,GAAIyI,IAGhB,MAAME,EAAU,CACd7I,WAAUA,EACVuB,kBAAiBA,EACjBX,kBAAiBA,EACjBY,aAAYA,G","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/./node_modules/@nationalarchives/cookies/src/events.js","webpack://TNAFrontend/./node_modules/@nationalarchives/cookies/src/index.js","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/lib/analytics-helpers.mjs","webpack://TNAFrontend/./src/nationalarchives/components/file-input/analytics.js","webpack://TNAFrontend/./src/nationalarchives/analytics.mjs","webpack://TNAFrontend/./src/nationalarchives/components/accordion/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/breadcrumbs/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/checkboxes/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/details/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/error-summary/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/footer/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/gallery/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/global-header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/hero/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/picture/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/radios/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/search-field/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/sidebar/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/text-input/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/textarea/analytics.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontendAnalytics\"] = factory();\n\telse\n\t\troot[\"TNAFrontendAnalytics\"] = factory();\n})(self, () => {\nreturn ","// Symbol.for uses a global registry shared across script contexts (e.g. separate bundles/iframes), unlike instanceof which relies on the class reference matching.\nconst BRAND = Symbol.for(\"TNAFrontendCookieEventHandler\");\n\n/**\n * Class to handle cookie events.\n * @class CookieEventHandler\n * @constructor\n * @public\n */\nexport default class CookieEventHandler {\n /** @protected */\n events = {};\n /** @protected */\n oneTimeEvents = {};\n\n /** @protected */\n [BRAND] = true;\n\n /**\n * If an instance already exists, return it instead of creating a new one.\n * @returns {CookieEventHandler} The existing or newly created instance.\n */\n constructor() {\n if (window.TNAFrontendCookieEvents?.[BRAND]) {\n /* eslint-disable-next-line no-constructor-return */\n return window.TNAFrontendCookieEvents;\n }\n window.TNAFrontendCookieEvents = this;\n }\n\n /**\n * Clear all event listeners.\n */\n clearAll() {\n this.events = {};\n this.oneTimeEvents = {};\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n this.events[event] = [...(this.events[event] || []), callback];\n }\n\n /**\n * Add a one-time event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n once(event, callback) {\n this.oneTimeEvents[event] = [\n ...(this.oneTimeEvents[event] || []),\n callback,\n ];\n }\n\n /** @protected */\n trigger(event, data = {}) {\n if (Object.hasOwn(this.events, event)) {\n this.events[event].forEach((eventToTrigger) =>\n eventToTrigger.call(this, data),\n );\n }\n if (Object.hasOwn(this.oneTimeEvents, event)) {\n this.oneTimeEvents[event].forEach((eachEvent) =>\n eachEvent.call(this, data),\n );\n this.oneTimeEvents[event] = [];\n }\n }\n}\n","/* eslint-disable max-lines, no-ternary */\n\nimport CookieEventHandler from \"./events.js\";\n\n/**\n * Class to handle cookies.\n * @class Cookies\n * @constructor\n * @public\n */\nexport default class Cookies {\n /** @protected */\n defaultDomain = \"\";\n /** @protected */\n defaultPath = \"\";\n /** @protected */\n secure = true;\n /** @protected */\n preferencesKey = \"\";\n /** @protected */\n events = null;\n /** @protected */\n defaultAge = null;\n /** @protected */\n preferencesCorrectOnInit = false;\n\n /** @protected */\n tnaCookiePreferences = [\"usage\", \"settings\", \"marketing\", \"essential\"];\n\n /**\n * Create a cookie handler.\n * @param {String} [options.defaultDomain] - The domain to register the cookie with.\n * @param {String} [options.path] - The domain to register the cookie with.\n * @param {Boolean} [options.secure] - Only set cookie in HTTPS environments.\n * @param {String} [options.preferencesKey] - The name of the cookie that stores the user's preferences.\n * @param {String} [options.preferencesSetKey] - The name of the cookie that dictates whether the user's preferences have been set.\n * @param {Number} [options.defaultAge] - The default age of non-session cookies.\n * @param {Boolean} [options.noInit=false] - Don't initialise a blank cookie preference.\n */\n /* eslint-disable-next-line max-statements, */\n constructor(options = {}) {\n const {\n defaultDomain,\n defaultPath,\n secure,\n preferencesKey,\n preferencesSetKey,\n defaultAge,\n noInit = false,\n } = options;\n const docDataset = document.documentElement.dataset;\n this.defaultDomain = defaultDomain\n ? defaultDomain\n : docDataset.tnaCookiesDomain || window.location.hostname;\n this.defaultPath = defaultPath\n ? defaultPath\n : docDataset.tnaCookiesPath || \"/\";\n this.secure = secure ? secure : docDataset.tnaCookiesInsecure !== \"true\";\n this.preferencesKey = preferencesKey\n ? preferencesKey\n : docDataset.tnaCookiesPreferencesKey || \"cookie_preferences\";\n this.preferencesSetKey = preferencesSetKey\n ? preferencesSetKey\n : docDataset.tnaCookiesPreferencesSetKey || \"cookie_preferences_set\";\n this.defaultAge = defaultAge\n ? defaultAge\n : parseInt(docDataset.tnaCookiesDefaultAge, 10) ||\n /* eslint-disable-next-line no-magic-numbers */\n 365 * 24 * 60 * 60;\n this.events = new CookieEventHandler();\n this.preferencesCorrectOnInit = this.validatePreferences(this.preferences);\n if (!this.preferencesCorrectOnInit) {\n this.preferencesSet = false;\n if (!noInit) {\n this.init();\n }\n }\n }\n\n /** @protected */\n init() {\n const existingPreferences = this.preferences;\n const filteredExistingPreferences = Object.fromEntries(\n Object.keys(existingPreferences)\n .filter((preference) => this.tnaCookiePreferences.includes(preference))\n .map((preference) => [preference, existingPreferences[preference]]),\n );\n this.savePreferences({\n usage: false,\n settings: false,\n marketing: false,\n ...filteredExistingPreferences,\n essential: true,\n });\n }\n\n validatePreferences(preferences) {\n return (\n Object.keys(preferences).length === this.tnaCookiePreferences.length &&\n this.tnaCookiePreferences.every(\n (preference) =>\n Object.keys(preferences).includes(preference) &&\n typeof preferences[preference] === \"boolean\",\n )\n );\n }\n\n /** @protected */\n /* eslint-disable-next-line class-methods-use-this */\n get all() {\n const deserialised = {};\n document.cookie\n .split(\"; \")\n .filter((cookie) => cookie.trim() !== \"\")\n .filter((cookie) => cookie.includes(\"=\"))\n .forEach((cookie) => {\n const parts = cookie.trim().split(\"=\");\n const [key, value = \"\"] = parts;\n deserialised[key] = decodeURIComponent(value);\n });\n return deserialised;\n }\n\n /** @protected */\n get preferences() {\n try {\n return JSON.parse(this.get(this.preferencesKey) || \"{}\");\n // eslint-disable-next-line no-unused-vars\n } catch (error) {\n return {};\n }\n }\n\n /**\n * Check to see whether a cookie exists or not.\n * @param {String} key - The cookie name.\n * @returns {Boolean}\n */\n exists(key) {\n return Object.hasOwn(this.all, key);\n }\n\n /**\n * Check to see whether a cookie has a particular value.\n * @param {String} key - The cookie name.\n * @param {String|Number|Boolean} value - The value to check against.\n * @returns\n */\n hasValue(key, value) {\n return this.get(key) === value;\n }\n\n /**\n * Get a cookie.\n * @param {String} key - The cookie name.\n * @returns {String|Number|Boolean|null}\n */\n get(key) {\n if (this.exists(key)) {\n return decodeURIComponent(this.all[key]);\n }\n /* eslint-disable-next-line no-undefined */\n return undefined;\n }\n\n /**\n * Set a cookie.\n * @param {String} key - The cookie name.\n * @param {String|Number|Boolean} value - The cookie value.\n * @param {Object} options\n * @param {Number} [options.maxAge=this.defaultAge] - The maximum age of the cookie in seconds.\n * @param {String} [options.path=/] - The path to register the cookie for.\n * @param {String} [options.sameSite=Lax] - The sameSite attribute.\n * @param {String} [options.domain=this.defaultDomain] - The domain to register the cookie with.\n * @param {String} [options.path=this.defaultPath] - The path to register the cookie with.\n * @param {String} [options.secure=this.secure] - Only set cookie in HTTPS environments.\n * @param {String} [options.session=false] - Set a session cookie.\n */\n set(key, value, options = {}) {\n const {\n maxAge = this.defaultAge,\n sameSite = \"Lax\",\n domain = this.defaultDomain,\n path = this.defaultPath,\n secure = this.secure,\n session = false,\n } = options;\n if (!key) {\n return;\n }\n const secureString = secure ? \"; secure\" : \"\";\n const sessionString = session ? \"\" : `; max-age=${maxAge}`;\n const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}; domain=${domain}; samesite=${sameSite}; path=${path}${sessionString}${secureString}`;\n document.cookie = cookie;\n const cookieDetails = {\n key,\n value,\n maxAge,\n path,\n sameSite,\n domain,\n secure,\n session,\n cookie,\n };\n this.events.trigger(\"setCookie\", cookieDetails);\n }\n\n /**\n * Delete a cookie.\n * @param {String} key - The cookie name.\n * @param {String} [path=/] - The path to the cookie is registered on.\n */\n delete(key, path = \"/\", domain = this.defaultDomain) {\n const options = { maxAge: -1, path, domain };\n this.set(key, \"\", options);\n this.events.trigger(\"deleteCookie\", { key, ...options });\n }\n\n /**\n * Delete all cookies.\n */\n deleteAll(path = \"/\", domain = this.defaultDomain) {\n Object.keys(this.all).forEach((cookie) => {\n this.delete(cookie, path, domain);\n });\n const details = { path, domain };\n this.events.trigger(\"deleteAllCookies\", details);\n }\n\n /**\n * Accept a preference.\n * @param {String} preference - The name of the preference.\n */\n enablePreference(preference) {\n if (!Object.hasOwn(this.preferences, preference)) {\n throw new Error(`Preference '${preference}' does not exist`);\n }\n this.setPreference(preference, true);\n this.events.trigger(\"enablePreference\", preference);\n this.events.trigger(\"changePreference\", { [preference]: true });\n }\n\n /**\n * Reject a preference.\n * @param {String} preference - The name of the preference.\n */\n disablePreference(preference) {\n if (!Object.hasOwn(this.preferences, preference)) {\n throw new Error(`Preference '${preference}' does not exist`);\n }\n this.setPreference(preference, false);\n this.events.trigger(\"disablePreference\", preference);\n this.events.trigger(\"changePreference\", { [preference]: false });\n }\n\n /**\n * Set a preference.\n * @param {String} preference - The name of the preference.\n * @param {Boolean} accepted - Whether the preference is accepted or not.\n */\n setPreference(preference, accepted) {\n if (!Object.hasOwn(this.preferences, preference)) {\n throw new Error(`Preference '${preference}' does not exist`);\n }\n if (preference === \"essential\") {\n return;\n }\n this.savePreferences({\n ...this.preferences,\n [preference]: accepted,\n essential: true,\n });\n this.events.trigger(\"changePreference\", { [preference]: accepted });\n }\n\n /**\n * Accept all the cookie preferences.\n */\n enableAllPreferences() {\n const allPreferences = Object.fromEntries(\n Object.keys(this.preferences).map((key) => [key.toLowerCase(), true]),\n );\n this.savePreferences(allPreferences);\n this.preferencesSet = true;\n this.events.trigger(\"enableAllPreferences\");\n this.events.trigger(\"changePreference\", allPreferences);\n }\n\n /**\n * Reject all the cookie preferences.\n */\n disableAllPreferences() {\n const allPreferences = {\n ...Object.fromEntries(\n Object.keys(this.preferences).map((key) => [key.toLowerCase(), false]),\n ),\n essential: true,\n };\n this.savePreferences(allPreferences);\n this.preferencesSet = true;\n this.events.trigger(\"disableAllPreferences\");\n this.events.trigger(\"changePreference\", allPreferences);\n }\n\n /** @protected */\n savePreferences(preferences) {\n this.set(this.preferencesKey, JSON.stringify(preferences));\n }\n\n /**\n * Get the status of whether the preferences have been set.\n * @returns {Boolean}\n */\n get preferencesSet() {\n return this.hasValue(this.preferencesSetKey, \"true\");\n }\n\n /**\n * Set the status of whether the preferences have been set.\n * @param {Boolean} value\n */\n set preferencesSet(value) {\n if (\n value === true &&\n this.validatePreferences(JSON.parse(this.get(this.preferencesKey)))\n ) {\n this.set(this.preferencesSetKey, \"true\");\n } else {\n this.delete(this.preferencesSetKey);\n }\n this.events.trigger(\"preferencesSet\");\n }\n\n /**\n * Get the acceptance status of a preference.\n * @param {String} preference - The name of the preference.\n * @returns {Boolean}\n */\n preference(preference) {\n if (Object.hasOwn(this.preferences, preference)) {\n return this.preferences[preference] === true;\n }\n throw new Error(`Preference '${preference}' does not exist`);\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n this.events.on(event, callback);\n }\n\n /**\n * Add a one-time event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n once(event, callback) {\n this.events.once(event, callback);\n }\n}\n","// The module cache\nconst __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tconst 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\tconst 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","// define getter/value 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__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const getXPathTo = ($element) => {\n if ($element.id !== \"\") {\n return `id(\"${$element.id}\")`;\n }\n if ($element === document.body) {\n return $element.tagName;\n }\n let ix = 0;\n if ($element.parentNode) {\n const siblings = $element.parentNode.childNodes;\n /* eslint-disable-next-line no-magic-numbers */\n for (let index = 0; index < siblings.length; index += 1) {\n const sibling = siblings[index];\n if (sibling === $element) {\n return `${getXPathTo($element.parentNode)}/${$element.tagName}[${\n /* eslint-disable-next-line no-magic-numbers */\n ix + 1\n }]`;\n }\n /* eslint-disable-next-line no-magic-numbers */\n if (sibling.nodeType === 1 && sibling.tagName === $element.tagName) {\n /* eslint-disable-next-line no-magic-numbers */\n ix += 1;\n }\n }\n return `${getXPathTo($element.parentNode)}/${$element.tagName}`;\n }\n return $element.tagName;\n};\nconst getClosestElement = ($startingElement, matchingElementSelectors) => {\n let heading = \"\";\n let $search = $startingElement;\n do {\n while ($search.previousElementSibling) {\n $search = $search.previousElementSibling;\n if (\n /* eslint-disable-next-line no-loop-func */\n matchingElementSelectors.some((matchingElementSelector) =>\n $search.matches(matchingElementSelector),\n )\n ) {\n heading = $search.innerText;\n break;\n }\n }\n $search = $search.parentElement;\n } while ($search.parentElement && !heading);\n return heading;\n};\nconst getClosestHeading = ($element) =>\n getClosestElement($element, [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]);\nconst valueGetters = {\n text: ($el) => $el.innerText.replace(/\\n/gu, \" \"),\n html: ($el) => $el.innerHTML,\n value: ($el) => $el.value,\n index: ($el, $scope, event, index) => index,\n instance: ($el, $scope, event, index, instance) => instance,\n /* eslint-disable-next-line no-ternary */\n checked: ($el) => ($el.checked ? \"checked\" : \"unchecked\"),\n expanded: ($el) => {\n const expanded = $el.getAttribute(\"aria-expanded\");\n if (expanded === null) {\n return null;\n }\n /* eslint-disable-next-line no-ternary */\n return expanded.toString() === \"true\" ? \"opened\" : \"closed\";\n },\n closestHeading: ($el) => getClosestHeading($el),\n xpath: ($el) => getXPathTo($el.target),\n};\n\nexport { getXPathTo, getClosestElement, getClosestHeading, valueGetters };\n","const getFileDetails = ($el) =>\n JSON.stringify(\n Array.from($el.files).map((file) => ({\n name: file.name,\n size: file.size,\n type: file.type,\n })),\n );\n\nexport default [\n {\n scope: \".tna-file-input\",\n areaName: \"file-input\",\n events: [\n {\n eventName: \"blurred\",\n on: \"blur\",\n data: {\n value: getFileDetails,\n state: ($el) => $el.files.length,\n\n group: ($el, $scope) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n {\n eventName: \"cancelled\",\n on: \"cancel\",\n data: {\n value: getFileDetails,\n state: ($el) => $el.files.length,\n\n group: ($el, $scope) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n {\n eventName: \"changed\",\n on: \"change\",\n data: {\n value: getFileDetails,\n state: ($el) => $el.files.length,\n\n group: ($el, $scope) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n ],\n },\n];\n","/* eslint-disable max-classes-per-file, no-ternary, no-nested-ternary */\n\nimport Cookies from \"@nationalarchives/cookies/src/index.js\";\n\nimport AccordionAnalytics from \"./components/accordion/analytics.js\";\nimport BreadcrumbAnalytics from \"./components/breadcrumbs/analytics.js\";\nimport CheckboxesAnalytics from \"./components/checkboxes/analytics.js\";\nimport DetailsAnalytics from \"./components/details/analytics.js\";\nimport ErrorSummary from \"./components/error-summary/analytics.js\";\nimport FileInputDroppable from \"./components/file-input/analytics.js\";\nimport FooterAnalytics from \"./components/footer/analytics.js\";\nimport GalleryAnalytics from \"./components/gallery/analytics.js\";\nimport GlobalHeaderAnalytics from \"./components/global-header/analytics.js\";\nimport HeaderAnalytics from \"./components/header/analytics.js\";\nimport HeroAnalytics from \"./components/hero/analytics.js\";\nimport PictureAnalytics from \"./components/picture/analytics.js\";\nimport RadiosAnalytics from \"./components/radios/analytics.js\";\nimport SearchFieldAnalytics from \"./components/search-field/analytics.js\";\nimport SidebarAnalytics from \"./components/sidebar/analytics.js\";\nimport TextInputAnalytics from \"./components/text-input/analytics.js\";\nimport TextareaAnalytics from \"./components/textarea/analytics.js\";\nimport {\n getClosestElement,\n getClosestHeading,\n getXPathTo,\n valueGetters,\n} from \"./lib/analytics-helpers.mjs\";\n\nconst componentAnalytics = [\n ...AccordionAnalytics,\n ...BreadcrumbAnalytics,\n ...CheckboxesAnalytics,\n ...DetailsAnalytics,\n ...ErrorSummary,\n ...FileInputDroppable,\n ...FooterAnalytics,\n ...GalleryAnalytics,\n ...GlobalHeaderAnalytics,\n ...HeaderAnalytics,\n ...HeroAnalytics,\n ...PictureAnalytics,\n ...RadiosAnalytics,\n ...SearchFieldAnalytics,\n ...SidebarAnalytics,\n ...TextInputAnalytics,\n ...TextareaAnalytics,\n];\n\nclass EventTracker {\n /** @protected */\n cookies = new Cookies();\n\n /** @protected */\n events = [];\n\n /** @protected */\n startTime = new Date();\n\n /** @protected */\n prefix = \"tna\";\n\n /** @protected */\n document = document;\n\n constructor(options = {}) {\n const { prefix = null, documentScope = document } = options;\n if (prefix) {\n this.prefix = prefix;\n }\n if (documentScope) {\n this.document = documentScope;\n }\n }\n\n start(initAll) {\n /* eslint-disable-next-line no-magic-numbers */\n if (!navigator.doNotTrack || navigator.doNotTrack !== 1) {\n if (this.cookies.preference(\"usage\")) {\n this.enableTracking();\n }\n this.cookies.on(\"changePreference\", (policies) => {\n if (Object.hasOwn(policies, \"usage\")) {\n if (policies.usage) {\n this.enableTracking();\n } else {\n this.disableTracking();\n }\n }\n });\n if (initAll) {\n this.initAll();\n }\n }\n }\n\n /** @protected */\n /* eslint-disable-next-line class-methods-use-this, no-empty-function */\n enableTracking() {}\n\n /** @protected */\n /* eslint-disable-next-line class-methods-use-this, no-empty-function */\n disableTracking() {}\n\n /**\n * Initialise all TNA Frontend component analytics.\n */\n initAll() {\n componentAnalytics.forEach((componentConfig) => {\n this.addListeners(\n componentConfig.scope,\n componentConfig.areaName,\n componentConfig.events,\n componentConfig.rootEventName || \"\",\n componentConfig.rootData || {},\n );\n });\n }\n\n /**\n * Add an event listener.\n * @param {String|HTMLElement} scope - The element to which the listener is scoped.\n * @param {String} areaName - The name of the component to pass on to the tracker.\n * @param {{eventName: String, targetElement: String|undefined, on: String, data: {value: Function|String|undefined, state: Function|String|undefined, group: Function|String|undefined, [String]: String|Integer}, rootData:{[String]: Function|String}}[]} events - The configuration of events to track along with their optional value and state which can be computed.\n * @param {String} rootEventName - The event name to use if specified (prefix).\n * @param {{[String]:String}} rootDefaultData - The default root data to use if specified.\n */\n addListeners(\n scope,\n areaName,\n events,\n rootEventName = \"\",\n rootDefaultData = {},\n ) {\n let scopeArray = [];\n if (typeof scope === \"string\") {\n scopeArray = Array.from(this.document.querySelectorAll(scope));\n } else if (typeof scope === \"object\") {\n scopeArray = [scope];\n }\n /* eslint-disable-next-line no-magic-numbers */\n if (scopeArray.length === 0) {\n return;\n }\n scopeArray.forEach(($scope, scopeIndex) => {\n events.forEach((eventConfig) => {\n if (eventConfig.on) {\n if (eventConfig.targetElement) {\n Array.from(\n $scope.querySelectorAll(eventConfig.targetElement),\n ).forEach(($el, index) =>\n this.attachListener(\n $el,\n $scope,\n rootEventName,\n rootDefaultData,\n eventConfig,\n scope,\n areaName,\n /* eslint-disable-next-line no-magic-numbers */\n index + 1,\n /* eslint-disable-next-line no-magic-numbers */\n scopeIndex + 1,\n ),\n );\n } else {\n this.attachListener(\n $scope,\n $scope,\n rootEventName,\n rootDefaultData,\n eventConfig,\n scope,\n areaName,\n /* eslint-disable-next-line no-magic-numbers */\n 1,\n /* eslint-disable-next-line no-magic-numbers */\n scopeIndex + 1,\n );\n }\n }\n });\n });\n }\n\n /** @protected */\n generateEventName(areaName, eventConfig) {\n return `${this.prefix}.${areaName}.${eventConfig.eventName || eventConfig.on}`;\n }\n\n /** @protected */\n attachListener(\n $el,\n $scope,\n rootEventName,\n rootDefaultData,\n eventConfig,\n scope,\n areaName,\n index,\n instance,\n ) {\n const {\n on,\n data,\n targetElement,\n rootData = {},\n onCondition = null,\n } = eventConfig;\n $el.addEventListener(on, (event) => {\n const computedValueParameters = [$el, $scope, event, index, instance];\n if (\n onCondition === null ||\n this.computedValue(onCondition, ...computedValueParameters)\n ) {\n this.recordEvent(\n eventConfig.rootEventName\n ? `${this.prefix}.${eventConfig.rootEventName}`\n : rootEventName\n ? `${this.prefix}.${rootEventName}`\n : this.generateEventName(areaName, eventConfig),\n {\n ...data,\n name: this.generateEventName(areaName, eventConfig),\n value: data?.value\n ? this.computedValue(data.value, ...computedValueParameters)\n : null,\n state: data?.state\n ? this.computedValue(data.state, ...computedValueParameters)\n : null,\n group: data?.group\n ? this.computedValue(data.group, ...computedValueParameters)\n : null,\n xPath: getXPathTo($el),\n targetElement,\n timeSincePageLoad: new Date() - this.startTime,\n index,\n instance,\n scope,\n areaName,\n },\n Object.fromEntries(\n Object.entries({ ...rootDefaultData, ...rootData }).map(\n ([key, value]) => [\n key,\n this.computedValue(value, ...computedValueParameters),\n ],\n ),\n ),\n );\n }\n });\n }\n\n /** @protected */\n computedValue(valueOrFunction, $el, $scope, event, index, instance) {\n return typeof valueOrFunction === \"function\"\n ? valueOrFunction.call(this, $el, $scope, event, index, instance)\n : (valueOrFunction ?? null);\n }\n\n /** @protected */\n recordEvent(eventName, data, rootData = {}) {\n this.events.push({\n event: eventName,\n ...data,\n ...rootData,\n });\n }\n\n /** @protected */\n getTnaMetaTags() {\n return Object.fromEntries([\n ...Array.from(\n document.head.querySelectorAll(\n `meta[name^=\"${this.prefix}_root:\"][content]`,\n ),\n ).map(($metaEl) => [\n $metaEl\n .getAttribute(\"name\")\n .replace(new RegExp(`^${this.prefix}_root:`, \"u\"), \"\"),\n $metaEl.getAttribute(\"content\"),\n ]),\n ...Array.from(\n document.head.querySelectorAll(\n `meta[name^=\"${this.prefix}.\"][content]`,\n ),\n ).map(($metaEl) => [\n $metaEl.getAttribute(\"name\"),\n $metaEl.getAttribute(\"content\"),\n ]),\n ]);\n }\n\n /** @protected */\n getUserPreferences() {\n const userPreferences = {};\n userPreferences[`${this.prefix}.pref.prefers-color-scheme`] =\n window.matchMedia?.(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n userPreferences[`${this.prefix}.pref.forced-colors`] = window.matchMedia?.(\n \"(forced-colors: active)\",\n ).matches;\n let prefersContrast = \"no-preference\";\n if (window.matchMedia?.(\"(prefers-contrast: more)\").matches) {\n prefersContrast = \"more\";\n } else if (window.matchMedia?.(\"(prefers-contrast: less)\").matches) {\n prefersContrast = \"less\";\n }\n userPreferences[`${this.prefix}.pref.prefers-contrast`] = prefersContrast;\n userPreferences[`${this.prefix}.pref.prefers-reduced-motion`] =\n window.matchMedia?.(\"(prefers-reduced-motion: reduce)\").matches;\n userPreferences[`${this.prefix}.pref.prefers-reduced-transparency`] =\n window.matchMedia?.(\"(prefers-reduced-transparency: reduce)\").matches;\n return userPreferences;\n }\n}\n\n/**\n * Class to handle Google Analytics 4 reporting.\n * @class GA4\n * @extends EventTracker\n * @constructor\n * @public\n */\nclass GA4 extends EventTracker {\n /** @protected */\n addTrackingCode = true;\n\n /** @protected */\n trackingCodeAdded = false;\n\n /** @protected */\n trackingEnabled = false;\n\n /** @protected */\n gTagId;\n\n constructor(options = {}) {\n if (window.TNAFrontendAnalyticsGA4) {\n /* eslint-disable-next-line no-constructor-return */\n return window.TNAFrontendAnalyticsGA4;\n }\n const {\n id = \"\",\n prefix = null,\n initAll = true,\n addTrackingCode = true,\n } = options;\n super({ prefix });\n window.TNAFrontendAnalyticsGA4 = this;\n this.addTrackingCode = addTrackingCode;\n window.dataLayer ||= [];\n if (id) {\n this.gTagId = id;\n this.ga4Disable = `ga-disable-${this.gTagId}`;\n if (!this.cookies.preference(\"usage\")) {\n window[this.ga4Disable] = true;\n this.cookies.set(this.ga4Disable, \"true\");\n }\n }\n this.start(initAll);\n }\n\n /** @protected */\n /* eslint-disable-next-line class-methods-use-this */\n destroy() {\n window.TNAFrontendAnalyticsGA4 = null;\n }\n\n /** @protected */\n recordEvent(eventName, data, rootData = {}) {\n const ga4Data = {\n event: eventName,\n ...Object.fromEntries(\n Object.entries(data).map(([key, value]) => [\n `${this.prefix}.event.${key}`,\n value,\n ]),\n ),\n ...rootData,\n };\n this.pushToDataLayer(ga4Data);\n }\n\n /** @protected */\n gtag(...args) {\n this.pushToDataLayer(args);\n }\n\n /** @protected */\n /* eslint-disable-next-line class-methods-use-this */\n pushToDataLayer(data) {\n window.dataLayer.push(data);\n }\n\n /** @protected */\n enableTracking() {\n if (!this.trackingEnabled) {\n window[this.ga4Disable] = false;\n this.cookies.set(this.ga4Disable, \"false\");\n if (!this.trackingCodeAdded && this.addTrackingCode) {\n if (!this.gTagId) {\n throw Error(\"ID was not specified\");\n }\n this.pushToDataLayer({\n ...this.getTnaMetaTags(),\n ...this.getUserPreferences(),\n \"gtm.start\": new Date().getTime(),\n event: \"gtm.js\",\n });\n const [firstScript] = document.getElementsByTagName(\"script\");\n const script = document.createElement(\"script\");\n script.async = true;\n script.src = `https://www.googletagmanager.com/gtm.js?id=${this.gTagId}&l=dataLayer`;\n if (firstScript) {\n firstScript.parentNode.insertBefore(script, firstScript);\n } else {\n document.head.appendChild(script);\n }\n this.trackingCodeAdded = true;\n }\n this.trackingEnabled = true;\n }\n }\n\n /** @protected */\n disableTracking() {\n if (this.trackingEnabled) {\n window[this.ga4Disable] = true;\n this.cookies.set(this.ga4Disable, \"true\");\n Object.keys(this.cookies.all).forEach((key) => {\n if (key.startsWith(\"_ga\")) {\n this.cookies.delete(key);\n }\n });\n this.trackingEnabled = false;\n }\n }\n}\n\nconst ga4Id = document.documentElement.dataset.ga4;\nif (ga4Id) {\n /* eslint-disable-next-line no-new */\n new GA4({ id: ga4Id });\n}\n\nconst helpers = {\n getXPathTo,\n getClosestHeading,\n getClosestElement,\n valueGetters,\n};\n\nexport { EventTracker, GA4, helpers };\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-accordion\",\n areaName: \"accordion\",\n rootEventName: \"select_feature\",\n rootData: {\n data_component_name: \"accordion\",\n },\n events: [\n {\n eventName: \"click\",\n targetElement: \".tna-accordion__summary\",\n on: \"click\",\n data: { state: valueGetters.expanded, value: valueGetters.text },\n rootData: {\n data_link_type: valueGetters.expanded,\n data_link: valueGetters.text,\n data_position: valueGetters.index,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-breadcrumbs\",\n areaName: \"breadcrumbs\",\n rootEventName: \"select_navigation\",\n rootData: {\n data_component_name: \"breadcrumbs\",\n },\n events: [\n {\n eventName: \"click\",\n targetElement: \"a.tna-breadcrumbs__link\",\n on: \"click\",\n data: { state: \"expand\", value: valueGetters.html },\n rootData: {\n data_link_type: \"breadcrumb_link\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"click\",\n targetElement:\n \".tna-breadcrumbs__item--expandable button.tna-breadcrumbs__link\",\n on: \"click\",\n data: { state: \"expand\", value: valueGetters.html },\n rootData: {\n data_link_type: \"breadcrumb_expand\",\n data_link: valueGetters.text,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-checkboxes\",\n areaName: \"checkboxes\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-checkboxes__item input\",\n on: \"change\",\n data: {\n state: valueGetters.checked,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => $el.parentNode.innerText.trim(),\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-details\",\n areaName: \"details\",\n events: [\n {\n eventName: \"click\",\n targetElement: \".tna-details__summary\",\n on: \"click\",\n data: {\n // eslint-disable-next-line no-unused-vars\n state: ($el, $scope, event) => {\n const wasExpanded =\n $scope\n .querySelector(\".tna-details__details\")\n ?.hasAttribute(\"open\") ?? false;\n return wasExpanded ? \"closed\" : \"opened\";\n },\n\n value: valueGetters.text,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-error-summary\",\n areaName: \"error-summary\",\n events: [\n {\n eventName: \"jump\",\n targetElement: \"a.tna-error-summary__link\",\n on: \"click\",\n data: { value: valueGetters.text },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-footer\",\n areaName: \"footer\",\n rootEventName: \"global_navigation\",\n rootData: {\n data_component_name: \"footer\",\n },\n events: [\n {\n eventName: \"link.click\",\n targetElement: \".tna-footer__navigation-block-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"link\",\n data_section: valueGetters.closestHeading,\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"social_link.click\",\n targetElement: \".tna-footer__social-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"icon\",\n data_section: \"Social media\",\n data_link: ($el) => $el.dataset.name,\n },\n },\n {\n eventName: \"legal_link.click\",\n targetElement: \".tna-footer__legal-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"link\",\n data_section: \"Legal information\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"mailing_list.click\",\n targetElement: \".tna-footer__mailing-list a.tna-button\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"button\",\n data_section: \"Mailing list\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"ogl.click\",\n targetElement: \".tna-footer__licence p a.tna-footer__link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"link\",\n data_section: \"OGL\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"govuk.click\",\n targetElement: \".tna-footer__govuk-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"Logo\",\n data_section: \"GOV.UK\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"theme.change\",\n targetElement: \".tna-footer__theme-selector-button\",\n on: \"click\",\n data: {\n value: valueGetters.value,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-gallery\",\n areaName: \"gallery\",\n rootEventName: \"select_media\",\n rootData: {\n media_type: \"gallery\",\n media_duration: ($el, $scope) =>\n $scope.querySelectorAll(\".tna-gallery__navigation-item\").length,\n media_provider: \"tna\",\n media_title: ($el, $scope, event, index, instance) =>\n $scope.querySelector(\".tna-gallery__header-inner\")?.innerText?.trim() ||\n `gallery_${instance}`,\n media_progress: ($el, $scope) =>\n (Array.from(\n $scope.querySelectorAll(\".tna-gallery__navigation-item\"),\n ).findIndex(\n ($itemButton) => $itemButton.getAttribute(\"aria-current\") === \"true\",\n /* eslint-disable-next-line no-magic-numbers */\n ) || -1) + 1,\n },\n events: [\n {\n eventName: \"click\",\n targetElement: \".tna-gallery__navigation-item\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link: \"image\",\n media_action: \"progress\",\n media_progress: valueGetters.index,\n },\n },\n {\n eventName: \"click\",\n targetElement: \".tna-gallery__navigation-prev\",\n on: \"click\",\n data: {\n value: ($el, $scope) =>\n $scope\n .querySelector(\n \".tna-gallery__item:not([hidden]) .tna-gallery__item-header\",\n )\n ?.innerText?.trim(),\n },\n rootData: {\n data_link: \"previous\",\n media_action: \"progress\",\n },\n },\n {\n eventName: \"click\",\n targetElement: \".tna-gallery__navigation-next\",\n on: \"click\",\n data: {\n value: ($el, $scope) =>\n $scope\n .querySelector(\n \".tna-gallery__item:not([hidden]) .tna-gallery__item-header\",\n )\n ?.innerText?.trim(),\n },\n rootData: {\n data_link: \"next\",\n media_action: \"progress\",\n },\n },\n {\n eventName: \"keypress\",\n on: \"keydown\",\n onCondition: ($el, $scope, event) =>\n [\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"End\",\n \"Home\",\n // \"Escape\",\n ].includes(event.key),\n data: {\n value: ($el, $scope, event) => event.key,\n },\n rootData: {\n data_link: \"keypress\",\n media_action: \"progress\",\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-global-header\",\n areaName: \"header\",\n rootEventName: \"global_navigation\",\n rootData: {\n data_component_name: \"header\",\n },\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-global-header__navigation-button\",\n on: \"click\",\n data: {\n state: valueGetters.expanded,\n },\n rootData: {\n data_link_type: \"mobile_menu\",\n data_link: ($el) => {\n const expanded = $el.getAttribute(\"aria-expanded\");\n if (expanded === null) {\n return null;\n }\n return expanded.toString() === \"true\" ? \"Open menu\" : \"Close menu\";\n },\n data_section: \"Burger menu\",\n },\n },\n {\n eventName: \"logo.click\",\n targetElement: \".tna-global-header__logo\",\n on: \"click\",\n rootData: {\n data_link_type: \"logo\",\n data_link: \"The National Archives\",\n data_section: \"Top navigation and logo\",\n },\n },\n {\n eventName: \"primary_link.click\",\n targetElement: \".tna-global-header__navigation-item-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"menu\",\n data_section: valueGetters.text,\n data_position: 1,\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"secondary_link.click\",\n targetElement: \".tna-global-header__top-navigation-link\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n rootData: {\n data_link_type: \"icon\",\n data_link: valueGetters.text,\n data_section: \"Top navigation and logo\",\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-header\",\n areaName: \"header\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-header__navigation-button\",\n on: \"click\",\n data: {\n state: valueGetters.expanded,\n },\n },\n ],\n },\n];\n","export default [\n {\n scope: \".tna-hero\",\n areaName: \"hero\",\n events: [\n {\n eventName: \"toggle_caption\",\n targetElement: \".tna-hero__details-summary\",\n on: \"click\",\n data: {\n // eslint-disable-next-line no-unused-vars\n state: ($el, $scope, event) => {\n const wasExpanded =\n $scope\n .querySelector(\".tna-hero__details\")\n ?.hasAttribute(\"open\") ?? false;\n return wasExpanded ? \"closed\" : \"opened\";\n },\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) =>\n $scope.querySelector(\"img[alt]\")?.getAttribute(\"alt\"),\n },\n },\n ],\n },\n];\n","import {\n getClosestHeading,\n valueGetters,\n} from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-picture\",\n areaName: \"picture\",\n events: [\n {\n eventName: \"toggle_transcript\",\n targetElement: \".tna-picture__toggle-transcript\",\n on: \"click\",\n data: {\n state: valueGetters.expanded,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => {\n const heading = getClosestHeading($scope);\n const image = $scope.querySelector(\".tna-picture__image\");\n const imageSrc = image.getAttribute(\"src\");\n const imageAlt = image.getAttribute(\"alt\");\n const value = `${imageAlt} (${imageSrc})`;\n return heading ? `${heading} > ${value}` : value;\n },\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-radios\",\n areaName: \"radios\",\n events: [\n {\n eventName: \"toggle\",\n targetElement: \".tna-radios__item input\",\n on: \"change\",\n data: {\n state: valueGetters.checked,\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) => $el.parentNode.innerText,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-search-field\",\n areaName: \"search-field\",\n events: [\n {\n eventName: \"blurred\",\n targetElement: \".tna-search-field__input\",\n on: \"blur\",\n data: {\n value: valueGetters.value,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope.querySelector(\".tna-form-item__heading\")?.innerText?.trim(),\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-sidebar\",\n areaName: \"sidebar\",\n rootEventName: \"select_navigation\",\n rootData: {\n data_component_name: \"sidebar\",\n data_section: ($el, $scope) =>\n $scope.querySelector(\".tna-sidebar__heading\")?.innerText?.trim(),\n },\n events: [\n {\n eventName: \"click\",\n targetElement: \"a.tna-sidebar__link\",\n on: \"click\",\n rootData: {\n data_link_type: \"sidebar_link\",\n data_link: valueGetters.text,\n data_position: valueGetters.index,\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-text-input\",\n areaName: \"text-input\",\n events: [\n {\n eventName: \"blurred\",\n on: \"blur\",\n data: {\n value: valueGetters.value,\n\n group: ($el, $scope) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-textarea\",\n areaName: \"textarea\",\n events: [\n {\n eventName: \"blurred\",\n on: \"blur\",\n data: {\n value: valueGetters.value,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form-item\")\n ?.querySelector(\".tna-form-item__heading\")\n ?.innerText?.trim(),\n },\n },\n ],\n },\n];\n"],"names":["root","factory","exports","module","define","amd","self","BRAND","Symbol","for","CookieEventHandler","events","oneTimeEvents","constructor","window","TNAFrontendCookieEvents","this","clearAll","on","event","callback","once","trigger","data","Object","hasOwn","forEach","eventToTrigger","call","eachEvent","Cookies","defaultDomain","defaultPath","secure","preferencesKey","defaultAge","preferencesCorrectOnInit","tnaCookiePreferences","options","preferencesSetKey","noInit","docDataset","document","documentElement","dataset","tnaCookiesDomain","location","hostname","tnaCookiesPath","tnaCookiesInsecure","tnaCookiesPreferencesKey","tnaCookiesPreferencesSetKey","parseInt","tnaCookiesDefaultAge","validatePreferences","preferences","preferencesSet","init","existingPreferences","filteredExistingPreferences","fromEntries","keys","filter","preference","includes","map","savePreferences","usage","settings","marketing","essential","length","every","all","deserialised","cookie","split","trim","parts","key","value","decodeURIComponent","JSON","parse","get","error","exists","hasValue","set","maxAge","sameSite","domain","path","session","secureString","sessionString","encodeURIComponent","cookieDetails","deleteAll","delete","details","enablePreference","Error","setPreference","disablePreference","accepted","enableAllPreferences","allPreferences","toLowerCase","disableAllPreferences","stringify","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","o","defineProperty","enumerable","obj","prop","prototype","hasOwnProperty","r","toStringTag","getXPathTo","$element","id","body","tagName","ix","parentNode","siblings","childNodes","index","sibling","nodeType","getClosestElement","$startingElement","matchingElementSelectors","heading","$search","previousElementSibling","some","matchingElementSelector","matches","innerText","parentElement","getClosestHeading","valueGetters","text","$el","replace","html","innerHTML","$scope","instance","checked","expanded","getAttribute","toString","closestHeading","xpath","target","getFileDetails","Array","from","files","file","name","size","type","componentAnalytics","scope","areaName","rootEventName","rootData","data_component_name","eventName","targetElement","state","data_link_type","data_link","data_position","group","closest","querySelector","hasAttribute","data_section","media_type","media_duration","querySelectorAll","media_provider","media_title","media_progress","findIndex","$itemButton","media_action","onCondition","image","imageSrc","EventTracker","cookies","src","A","startTime","Date","prefix","documentScope","start","initAll","navigator","doNotTrack","enableTracking","policies","disableTracking","componentConfig","addListeners","rootDefaultData","scopeArray","scopeIndex","eventConfig","attachListener","generateEventName","addEventListener","computedValueParameters","computedValue","recordEvent","xPath","timeSincePageLoad","entries","valueOrFunction","push","getTnaMetaTags","head","$metaEl","RegExp","getUserPreferences","userPreferences","matchMedia","prefersContrast","GA4","addTrackingCode","trackingCodeAdded","trackingEnabled","gTagId","TNAFrontendAnalyticsGA4","super","dataLayer","ga4Disable","destroy","ga4Data","pushToDataLayer","gtag","args","getTime","firstScript","getElementsByTagName","script","createElement","async","insertBefore","appendChild","startsWith","ga4Id","ga4","helpers"],"sourceRoot":""}
@@ -78,7 +78,7 @@ class EventTracker {
78
78
  if (this.cookies.preference("usage")) {
79
79
  this.enableTracking();
80
80
  }
81
- this.cookies.on("changePolicy", (policies) => {
81
+ this.cookies.on("changePreference", (policies) => {
82
82
  if (Object.hasOwn(policies, "usage")) {
83
83
  if (policies.usage) {
84
84
  this.enableTracking();
@@ -1 +1 @@
1
- {"version":3,"file":"components/accordion/accordion.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/./src/nationalarchives/lib/helpers.mjs","webpack://TNAFrontend/./src/nationalarchives/lib/uuid.mjs","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/components/accordion/accordion.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"TNAFrontend\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = factory();\n})(self, () => {\nreturn ","import uuidv4 from \"./uuid.mjs\";\n\nexport const iso8601ToPrettyDatetime = (dateStr) => {\n const datetime = dateStr;\n\n if (!datetime) {\n throw new Error(\"No datetime provided\");\n }\n const isDateTime =\n /^\\d{4}(?:-\\d{2}){2}(?:T| )\\d{2}(?::\\d{2}){1,2}(?:\\.\\d+)?(?:Z|(?:[+-]\\d{2}:\\d{2}))?$/u.test(\n datetime,\n );\n const isDate = /^\\d{4}(?:-\\d{2}){2}$/u.test(datetime);\n if (!isDateTime && !isDate) {\n throw new Error(\"Invalid datetime provided\");\n }\n\n const date = new Date(datetime);\n if (!(date instanceof Date) || isNaN(date)) {\n throw new Error(\"Invalid datetime provided\");\n }\n\n const dayString = date.toLocaleDateString(\"en-GB\", {\n weekday: \"long\",\n });\n const dateString = date.toLocaleDateString(\"en-GB\", {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n });\n\n if (isDateTime && (date.getHours() || date.getMinutes())) {\n let timeString = date.toLocaleTimeString(\"en-GB\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n if (date.getSeconds()) {\n timeString = date.toLocaleTimeString(\"en-GB\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n }\n return `${dayString} ${dateString}, ${timeString}`;\n }\n return `${dayString} ${dateString}`;\n};\n\n/*\n * ==========================================\n * Transform any <time> element into a pretty\n * and human readable format that is based on\n * the valid ISO 8601 datetime attribute. The\n * replaced value will be localised according\n * to user's system settings, repurposing the\n * original text content as a title attribute\n * to allow users to see the value. A null or\n * invalid datetime format will result in the\n * element not being modified. If the updated\n * value is similar to the starting value for\n * the element text content, then the element\n * will not be updated to avoid redundancy.\n * ------------------------------------------\n * For example if the user's system has a UTC\n * timezone set then the element:\n *\n * <time\n * datetime=\"2026-03-05T13:48:00-05:00\"\n * >\n * 5 March 2026, 13:48 (UTC -5)\n * </time>\n *\n * would become:\n *\n * <time\n * datetime=\"2026-03-05T13:48:00-05:00\"\n * title=\"5 March 2026, 13:48 (UTC -5)\"\n * >\n * Thursday 5 March 2026, 09:48\n * </time>\n * ==========================================\n */\nexport const updateTimeElement = ($el) => {\n const datetime = $el.getAttribute(\"datetime\");\n\n try {\n const prettyDatetime = iso8601ToPrettyDatetime(datetime);\n if (!prettyDatetime.includes($el.textContent)) {\n $el.setAttribute(\"title\", $el.textContent);\n $el.textContent = prettyDatetime;\n }\n // eslint-disable-next-line no-unused-vars\n } catch (error) {\n // Do nothing if the datetime is invalid or not provided\n }\n};\n\nexport const checkTableForScroll = ($tableWrapper) => {\n const $caption = $tableWrapper.querySelector(\"caption\");\n if (!($tableWrapper.dataset.tableScrollInitialised === \"true\")) {\n if ($caption && !$caption.id) {\n $caption.id = `table-caption-${uuidv4()}`;\n }\n $tableWrapper.dataset.tableScrollInitialised = \"true\";\n }\n if ($tableWrapper.scrollWidth > $tableWrapper.clientWidth) {\n $tableWrapper.setAttribute(\"tabindex\", \"0\");\n $tableWrapper.setAttribute(\"role\", \"region\");\n $tableWrapper.setAttribute(\"aria-labelledby\", $caption?.id || \"\");\n $tableWrapper.classList.add(\"tna-table-wrapper--scroll\");\n } else {\n $tableWrapper.removeAttribute(\"tabindex\");\n $tableWrapper.removeAttribute(\"role\");\n $tableWrapper.removeAttribute(\"aria-labelledby\");\n $tableWrapper.classList.remove(\"tna-table-wrapper--scroll\");\n }\n};\n","/* eslint-disable no-magic-numbers */\n/* eslint-disable no-bitwise */\nconst uuidv4 = () =>\n ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/gu, (char) =>\n (\n char ^\n (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (char / 4)))\n ).toString(16),\n );\n\nexport default uuidv4;\n","// The module cache\nconst __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tconst 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\tconst 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","// define getter/value functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tif(Array.isArray(definition)) {\n\t\tvar i = 0;\n\t\twhile(i < definition.length) {\n\t\t\tvar key = definition[i++];\n\t\t\tvar binding = definition[i++];\n\t\t\tvar descriptor = binding === 0 ? { enumerable: true, value: definition[i++] } : { enumerable: true, get: binding };\n\t\t\tif(!__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, descriptor);\n\t\t}\n\t} else {\n\t\tfor(var key in definition) {\n\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t\t}\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { checkTableForScroll } from \"../../lib/helpers.mjs\";\n\nexport class Accordion {\n constructor($module) {\n this.$module = $module;\n this.$items = $module && $module.querySelectorAll(\".tna-accordion__item\");\n if (!this.$module || !this.$items) {\n return;\n }\n\n this.allowMultipleItemsOpen =\n this.$module.dataset.singleOpenItem !== \"true\";\n\n this.$items.forEach(($item) => this.initItem($item));\n this.initState();\n\n this.$toggleAllButton = this.$module.querySelector(\n \".tna-accordion__toggle-all\",\n );\n if (this.$toggleAllButton) {\n this.syncToggleAllButton();\n this.$toggleAllButton.removeAttribute(\"hidden\");\n this.$toggleAllButton.addEventListener(\"click\", () => {\n if (this.isAllOpen()) {\n this.$items.forEach(($item) => this.closeItem($item));\n } else {\n this.$items.forEach(($item) => this.openItem($item));\n }\n this.syncToggleAllButton();\n });\n }\n }\n\n initItem($item) {\n const $heading = $item.querySelector(\".tna-accordion__heading\");\n const $content = $item.querySelector(\".tna-accordion__body\");\n\n if (!$heading || !$content) {\n return;\n }\n\n $item.classList.add(\"tna-accordion__details\");\n $item.classList.remove(\"tna-accordion__item\");\n\n $heading.removeAttribute(\"class\");\n\n $content.classList.add(\"tna-accordion__content\");\n $content.classList.remove(\"tna-accordion__body\");\n $content.setAttribute(\"hidden\", \"\");\n\n const $headingButton = document.createElement(\"button\");\n $headingButton.classList.add(\"tna-accordion__summary\");\n $headingButton.setAttribute(\"type\", \"button\");\n $headingButton.setAttribute(\"aria-controls\", $content.id);\n $headingButton.innerText = $heading.innerText;\n $heading.innerText = \"\";\n $heading.appendChild($headingButton);\n\n $headingButton.addEventListener(\"click\", () => {\n const isOpen = $headingButton.getAttribute(\"aria-expanded\") === \"true\";\n if (isOpen) {\n this.closeItem($item);\n } else {\n this.openItem($item);\n }\n });\n }\n\n initState() {\n this.$items.forEach(($item) => {\n if ($item.dataset.isopen === \"true\") {\n this.openItem($item);\n } else {\n this.closeItem($item);\n }\n $item.removeAttribute(\"data-isopen\");\n });\n }\n\n openItem($item) {\n if (!this.allowMultipleItemsOpen) {\n this.closeAllItemsExcept($item);\n }\n const $headingButton = $item.querySelector(\".tna-accordion__summary\");\n const $content = $item.querySelector(\".tna-accordion__content\");\n $headingButton.setAttribute(\"aria-expanded\", \"true\");\n $headingButton.setAttribute(\n \"aria-label\",\n `${$headingButton.innerText.trim()}, Hide this section`,\n );\n $content.removeAttribute(\"hidden\");\n // $content.setAttribute(\"tabindex\", \"0\");\n this.syncToggleAllButton();\n\n const $tableWrapper = $content.querySelectorAll(\".tna-table-wrapper\");\n if ($tableWrapper) {\n $tableWrapper.forEach(($wrapper) => {\n checkTableForScroll($wrapper);\n });\n }\n }\n\n closeItem($item) {\n const $headingButton = $item.querySelector(\".tna-accordion__summary\");\n const $content = $item.querySelector(\".tna-accordion__content\");\n $headingButton.setAttribute(\"aria-expanded\", \"false\");\n $headingButton.setAttribute(\n \"aria-label\",\n `${$headingButton.innerText.trim()}, Show this section`,\n );\n $content.setAttribute(\"hidden\", \"\");\n // $content.setAttribute(\"tabindex\", \"-1\");\n this.syncToggleAllButton();\n }\n\n closeAllItemsExcept($excludeItem) {\n Array.from(this.$items)\n .filter(\n ($item) =>\n $item.querySelector(\".tna-accordion__summary\") !== $excludeItem &&\n $item\n .querySelector(\".tna-accordion__summary\")\n .getAttribute(\"aria-expanded\") === \"true\",\n )\n .forEach(($item) => this.closeItem($item));\n }\n\n isAllOpen() {\n return Array.from(this.$items).every(\n ($item) =>\n $item\n .querySelector(\".tna-accordion__summary\")\n .getAttribute(\"aria-expanded\") === \"true\",\n );\n }\n\n syncToggleAllButton() {\n if (this.$toggleAllButton) {\n if (this.isAllOpen()) {\n this.$toggleAllButton.innerText =\n this.$toggleAllButton.dataset.closeAllLabel || \"Hide all sections\";\n } else {\n this.$toggleAllButton.innerText =\n this.$toggleAllButton.dataset.openAllLabel || \"Show all sections\";\n }\n }\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","$tableWrapper","$caption","querySelector","dataset","tableScrollInitialised","id","_uuid_mjs__WEBPACK_IMPORTED_MODULE_0__","A","scrollWidth","clientWidth","setAttribute","classList","add","removeAttribute","remove","replace","char","crypto","getRandomValues","Uint8Array","toString","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","Array","isArray","i","length","key","binding","descriptor","enumerable","value","get","o","Object","defineProperty","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","Accordion","constructor","$module","this","$items","querySelectorAll","allowMultipleItemsOpen","singleOpenItem","forEach","$item","initItem","initState","$toggleAllButton","syncToggleAllButton","addEventListener","isAllOpen","closeItem","openItem","$heading","$content","$headingButton","document","createElement","innerText","appendChild","getAttribute","isopen","closeAllItemsExcept","trim","$wrapper","_lib_helpers_mjs__WEBPACK_IMPORTED_MODULE_0__","DJ","$excludeItem","from","filter","every","closeAllLabel","openAllLabel"],"sourceRoot":""}
1
+ {"version":3,"file":"components/accordion/accordion.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/./src/nationalarchives/lib/helpers.mjs","webpack://TNAFrontend/./src/nationalarchives/lib/uuid.mjs","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/components/accordion/accordion.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"TNAFrontend\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = factory();\n})(self, () => {\nreturn ","import uuidv4 from \"./uuid.mjs\";\n\nexport const iso8601ToPrettyDatetime = (dateStr) => {\n const datetime = dateStr;\n\n if (!datetime) {\n throw new Error(\"No datetime provided\");\n }\n const isDateTime =\n /^\\d{4}(?:-\\d{2}){2}(?:T| )\\d{2}(?::\\d{2}){1,2}(?:\\.\\d+)?(?:Z|(?:[+-]\\d{2}:\\d{2}))?$/u.test(\n datetime,\n );\n const isDate = /^\\d{4}(?:-\\d{2}){2}$/u.test(datetime);\n if (!isDateTime && !isDate) {\n throw new Error(\"Invalid datetime provided\");\n }\n\n const date = new Date(datetime);\n if (!(date instanceof Date) || isNaN(date)) {\n throw new Error(\"Invalid datetime provided\");\n }\n\n const dayString = date.toLocaleDateString(\"en-GB\", {\n weekday: \"long\",\n });\n const dateString = date.toLocaleDateString(\"en-GB\", {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n });\n\n if (isDateTime && (date.getHours() || date.getMinutes())) {\n let timeString = date.toLocaleTimeString(\"en-GB\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n if (date.getSeconds()) {\n timeString = date.toLocaleTimeString(\"en-GB\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n }\n return `${dayString} ${dateString}, ${timeString}`;\n }\n return `${dayString} ${dateString}`;\n};\n\n/*\n * ==========================================\n * Transform any <time> element into a pretty\n * and human readable format that is based on\n * the valid ISO 8601 datetime attribute. The\n * replaced value will be localised according\n * to user's system settings, repurposing the\n * original text content as a title attribute\n * to allow users to see the value. A null or\n * invalid datetime format will result in the\n * element not being modified. If the updated\n * value is similar to the starting value for\n * the element text content, then the element\n * will not be updated to avoid redundancy.\n * ------------------------------------------\n * For example if the user's system has a UTC\n * timezone set then the element:\n *\n * <time\n * datetime=\"2026-03-05T13:48:00-05:00\"\n * >\n * 5 March 2026, 13:48 (UTC -5)\n * </time>\n *\n * would become:\n *\n * <time\n * datetime=\"2026-03-05T13:48:00-05:00\"\n * title=\"5 March 2026, 13:48 (UTC -5)\"\n * >\n * Thursday 5 March 2026, 09:48\n * </time>\n * ==========================================\n */\nexport const updateTimeElement = ($el) => {\n const datetime = $el.getAttribute(\"datetime\");\n\n try {\n const prettyDatetime = iso8601ToPrettyDatetime(datetime);\n if (!prettyDatetime.includes($el.textContent)) {\n $el.setAttribute(\"title\", $el.textContent);\n $el.textContent = prettyDatetime;\n }\n // eslint-disable-next-line no-unused-vars\n } catch (error) {\n // Do nothing if the datetime is invalid or not provided\n }\n};\n\nexport const checkTableForScroll = ($tableWrapper) => {\n const $caption = $tableWrapper.querySelector(\"caption\");\n if (!($tableWrapper.dataset.tableScrollInitialised === \"true\")) {\n if ($caption && !$caption.id) {\n $caption.id = `table-caption-${uuidv4()}`;\n }\n $tableWrapper.dataset.tableScrollInitialised = \"true\";\n }\n if ($tableWrapper.scrollWidth > $tableWrapper.clientWidth) {\n $tableWrapper.setAttribute(\"tabindex\", \"0\");\n $tableWrapper.setAttribute(\"role\", \"region\");\n $tableWrapper.setAttribute(\"aria-labelledby\", $caption?.id || \"\");\n $tableWrapper.classList.add(\"tna-table-wrapper--scroll\");\n } else {\n $tableWrapper.removeAttribute(\"tabindex\");\n $tableWrapper.removeAttribute(\"role\");\n $tableWrapper.removeAttribute(\"aria-labelledby\");\n $tableWrapper.classList.remove(\"tna-table-wrapper--scroll\");\n }\n};\n","/* eslint-disable no-magic-numbers */\n/* eslint-disable no-bitwise */\nconst uuidv4 = () =>\n ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/gu, (char) =>\n (\n char ^\n (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (char / 4)))\n ).toString(16),\n );\n\nexport default uuidv4;\n","// The module cache\nconst __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tconst 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\tconst 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","// define getter/value functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tif(Array.isArray(definition)) {\n\t\tvar i = 0;\n\t\twhile(i < definition.length) {\n\t\t\tvar key = definition[i++];\n\t\t\tvar binding = definition[i++];\n\t\t\tvar descriptor = binding === 0 ? { enumerable: true, value: definition[i++] } : { enumerable: true, get: binding };\n\t\t\tif(!__webpack_require__.o(exports, key)) Object.defineProperty(exports, key, descriptor);\n\t\t}\n\t} else {\n\t\tfor(var key in definition) {\n\t\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t\t}\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop));","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import { checkTableForScroll } from \"../../lib/helpers.mjs\";\n\nexport class Accordion {\n constructor($module) {\n this.$module = $module;\n this.$items = $module && $module.querySelectorAll(\".tna-accordion__item\");\n if (!this.$module || !this.$items) {\n return;\n }\n\n this.allowMultipleItemsOpen =\n this.$module.dataset.singleOpenItem !== \"true\";\n\n this.$items.forEach(($item) => this.initItem($item));\n this.initState();\n\n this.$toggleAllButton = this.$module.querySelector(\n \".tna-accordion__toggle-all\",\n );\n if (this.$toggleAllButton) {\n this.syncToggleAllButton();\n this.$toggleAllButton.removeAttribute(\"hidden\");\n this.$toggleAllButton.addEventListener(\"click\", () => {\n if (this.isAllOpen()) {\n this.$items.forEach(($item) => this.closeItem($item));\n } else {\n this.$items.forEach(($item) => this.openItem($item));\n }\n this.syncToggleAllButton();\n });\n }\n }\n\n initItem($item) {\n const $heading = $item.querySelector(\".tna-accordion__heading\");\n const $content = $item.querySelector(\".tna-accordion__body\");\n\n if (!$heading || !$content) {\n return;\n }\n\n $item.classList.add(\"tna-accordion__details\");\n $item.classList.remove(\"tna-accordion__item\");\n\n $heading.removeAttribute(\"class\");\n\n $content.classList.add(\"tna-accordion__content\");\n $content.classList.remove(\"tna-accordion__body\");\n $content.setAttribute(\"hidden\", \"\");\n\n const $headingButton = document.createElement(\"button\");\n $headingButton.classList.add(\"tna-accordion__summary\");\n $headingButton.setAttribute(\"type\", \"button\");\n $headingButton.setAttribute(\"aria-controls\", $content.id);\n $headingButton.innerText = $heading.innerText;\n $heading.innerText = \"\";\n $heading.appendChild($headingButton);\n\n $headingButton.addEventListener(\"click\", () => {\n const isOpen = $headingButton.getAttribute(\"aria-expanded\") === \"true\";\n if (isOpen) {\n this.closeItem($item);\n } else {\n this.openItem($item);\n }\n });\n }\n\n initState() {\n this.$items.forEach(($item) => {\n if ($item.dataset.isopen === \"true\") {\n this.openItem($item);\n } else {\n this.closeItem($item);\n }\n $item.removeAttribute(\"data-isopen\");\n });\n }\n\n openItem($item) {\n if (!this.allowMultipleItemsOpen) {\n this.closeAllItemsExcept($item);\n }\n const $headingButton = $item.querySelector(\".tna-accordion__summary\");\n const $content = $item.querySelector(\".tna-accordion__content\");\n $headingButton.setAttribute(\"aria-expanded\", \"true\");\n $headingButton.setAttribute(\n \"aria-label\",\n `${$headingButton.innerText.trim()}, Hide this section`,\n );\n $content.removeAttribute(\"hidden\");\n // $content.setAttribute(\"tabindex\", \"0\");\n this.syncToggleAllButton();\n\n const $tableWrapper = $content.querySelectorAll(\".tna-table-wrapper\");\n if ($tableWrapper) {\n $tableWrapper.forEach(($wrapper) => {\n checkTableForScroll($wrapper);\n });\n }\n }\n\n closeItem($item) {\n const $headingButton = $item.querySelector(\".tna-accordion__summary\");\n const $content = $item.querySelector(\".tna-accordion__content\");\n $headingButton.setAttribute(\"aria-expanded\", \"false\");\n $headingButton.setAttribute(\n \"aria-label\",\n `${$headingButton.innerText.trim()}, Show this section`,\n );\n $content.setAttribute(\"hidden\", \"\");\n // $content.setAttribute(\"tabindex\", \"-1\");\n this.syncToggleAllButton();\n }\n\n closeAllItemsExcept($excludeItem) {\n Array.from(this.$items)\n .filter(\n ($item) =>\n $item.querySelector(\".tna-accordion__summary\") !== $excludeItem &&\n $item\n .querySelector(\".tna-accordion__summary\")\n .getAttribute(\"aria-expanded\") === \"true\",\n )\n .forEach(($item) => this.closeItem($item));\n }\n\n isAllOpen() {\n return Array.from(this.$items).every(\n ($item) =>\n $item\n .querySelector(\".tna-accordion__summary\")\n .getAttribute(\"aria-expanded\") === \"true\",\n );\n }\n\n syncToggleAllButton() {\n if (this.$toggleAllButton) {\n if (this.isAllOpen()) {\n this.$toggleAllButton.innerText =\n this.$toggleAllButton.dataset.closeAllLabel || \"Hide all sections\";\n } else {\n this.$toggleAllButton.innerText =\n this.$toggleAllButton.dataset.openAllLabel || \"Show all sections\";\n }\n }\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","$tableWrapper","$caption","querySelector","dataset","tableScrollInitialised","id","_uuid_mjs__WEBPACK_IMPORTED_MODULE_0__","A","scrollWidth","clientWidth","setAttribute","classList","add","removeAttribute","remove","replace","char","crypto","getRandomValues","Uint8Array","toString","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","Array","isArray","i","length","key","binding","descriptor","enumerable","value","get","o","Object","defineProperty","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","Accordion","constructor","$module","this","$items","querySelectorAll","allowMultipleItemsOpen","singleOpenItem","forEach","$item","initItem","initState","$toggleAllButton","syncToggleAllButton","addEventListener","isAllOpen","closeItem","openItem","$heading","$content","$headingButton","document","createElement","innerText","appendChild","getAttribute","isopen","closeAllItemsExcept","trim","$wrapper","_lib_helpers_mjs__WEBPACK_IMPORTED_MODULE_0__","DJ","$excludeItem","from","filter","every","closeAllLabel","openAllLabel"],"sourceRoot":""}