@nationalarchives/frontend 1.1.0 → 1.2.0

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 (81) hide show
  1. package/nationalarchives/all+analytics.js +1 -1
  2. package/nationalarchives/all+analytics.js.map +1 -1
  3. package/nationalarchives/all+analytics.mjs +0 -2
  4. package/nationalarchives/all.css +1 -1
  5. package/nationalarchives/all.css.map +1 -1
  6. package/nationalarchives/all.js +1 -1
  7. package/nationalarchives/all.js.map +1 -1
  8. package/nationalarchives/all.mjs +0 -2
  9. package/nationalarchives/analytics.js +1 -1
  10. package/nationalarchives/analytics.js.map +1 -1
  11. package/nationalarchives/analytics.mjs +4 -3
  12. package/nationalarchives/assets/fonts/fa-brands-400.woff2 +0 -0
  13. package/nationalarchives/assets/fonts/fa-solid-900.woff2 +0 -0
  14. package/nationalarchives/components/accordion/accordion.js +1 -1
  15. package/nationalarchives/components/accordion/accordion.js.map +1 -1
  16. package/nationalarchives/components/breadcrumbs/breadcrumbs.js +1 -1
  17. package/nationalarchives/components/breadcrumbs/breadcrumbs.js.map +1 -1
  18. package/nationalarchives/components/code-block/code-block.js +1 -1
  19. package/nationalarchives/components/code-block/code-block.js.map +1 -1
  20. package/nationalarchives/components/cookie-banner/cookie-banner.js +1 -1
  21. package/nationalarchives/components/cookie-banner/cookie-banner.js.map +1 -1
  22. package/nationalarchives/components/cookie-banner/cookie-banner.mjs +5 -5
  23. package/nationalarchives/components/date-input/date-input.js +1 -1
  24. package/nationalarchives/components/date-input/date-input.js.map +1 -1
  25. package/nationalarchives/components/date-input/date-input.mjs +0 -4
  26. package/nationalarchives/components/error-summary/error-summary.js +1 -1
  27. package/nationalarchives/components/error-summary/error-summary.js.map +1 -1
  28. package/nationalarchives/components/file-input/file-input.js +1 -1
  29. package/nationalarchives/components/file-input/file-input.js.map +1 -1
  30. package/nationalarchives/components/file-input/file-input.mjs +3 -13
  31. package/nationalarchives/components/files-list/macro-options.json +1 -1
  32. package/nationalarchives/components/footer/fixtures.json +2 -2
  33. package/nationalarchives/components/footer/footer.css +1 -1
  34. package/nationalarchives/components/footer/footer.css.map +1 -1
  35. package/nationalarchives/components/footer/footer.js +1 -1
  36. package/nationalarchives/components/footer/footer.js.map +1 -1
  37. package/nationalarchives/components/footer/footer.mjs +5 -5
  38. package/nationalarchives/components/footer/template.njk +1 -1
  39. package/nationalarchives/components/gallery/gallery.js +1 -1
  40. package/nationalarchives/components/gallery/gallery.js.map +1 -1
  41. package/nationalarchives/components/global-header/global-header.css +1 -1
  42. package/nationalarchives/components/global-header/global-header.css.map +1 -1
  43. package/nationalarchives/components/global-header/global-header.js +1 -1
  44. package/nationalarchives/components/global-header/global-header.js.map +1 -1
  45. package/nationalarchives/components/header/header.css +1 -1
  46. package/nationalarchives/components/header/header.css.map +1 -1
  47. package/nationalarchives/components/header/header.js +1 -1
  48. package/nationalarchives/components/header/header.js.map +1 -1
  49. package/nationalarchives/components/hero/hero.css +1 -1
  50. package/nationalarchives/components/hero/hero.css.map +1 -1
  51. package/nationalarchives/components/hero/hero.scss +1 -1
  52. package/nationalarchives/components/picture/picture.js +1 -1
  53. package/nationalarchives/components/picture/picture.js.map +1 -1
  54. package/nationalarchives/components/sidebar/fixtures.json +14 -6
  55. package/nationalarchives/components/sidebar/macro-options.json +56 -0
  56. package/nationalarchives/components/sidebar/sidebar.js +1 -1
  57. package/nationalarchives/components/sidebar/sidebar.js.map +1 -1
  58. package/nationalarchives/components/sidebar/template.njk +3 -3
  59. package/nationalarchives/components/skip-link/skip-link.js +1 -1
  60. package/nationalarchives/components/skip-link/skip-link.js.map +1 -1
  61. package/nationalarchives/components/tabs/tabs.js +1 -1
  62. package/nationalarchives/components/tabs/tabs.js.map +1 -1
  63. package/nationalarchives/components/text-input/text-input.js +1 -1
  64. package/nationalarchives/components/text-input/text-input.js.map +1 -1
  65. package/nationalarchives/components/textarea/textarea.js +1 -1
  66. package/nationalarchives/components/textarea/textarea.js.map +1 -1
  67. package/nationalarchives/error-page.css +1 -1
  68. package/nationalarchives/error-page.css.map +1 -1
  69. package/nationalarchives/font-awesome.css +5 -5
  70. package/nationalarchives/font-awesome.css.map +1 -1
  71. package/nationalarchives/ie.css +1 -1
  72. package/nationalarchives/ie.css.map +1 -1
  73. package/nationalarchives/print.css +1 -1
  74. package/nationalarchives/print.css.map +1 -1
  75. package/nationalarchives/print.scss +17 -1
  76. package/nationalarchives/prototype-kit.css +1 -1
  77. package/nationalarchives/prototype-kit.css.map +1 -1
  78. package/nationalarchives/utilities/overrides/_index.scss +0 -6
  79. package/package.json +17 -19
  80. package/nationalarchives/lib/cookie-events.mjs +0 -70
  81. package/nationalarchives/lib/cookies.mjs +0 -398
@@ -16,7 +16,6 @@ import { SkipLink } from "./components/skip-link/skip-link.mjs";
16
16
  import { Tabs } from "./components/tabs/tabs.mjs";
17
17
  import { TextInputPassword } from "./components/text-input/text-input.mjs";
18
18
  import { TextAreaItemisedRows } from "./components/textarea/textarea.mjs";
19
- import Cookies from "./lib/cookies.mjs";
20
19
  import { checkTableForScroll, updateTimeElement } from "./lib/helpers.mjs";
21
20
 
22
21
  const initAll = (options = {}) => {
@@ -209,7 +208,6 @@ const initAll = (options = {}) => {
209
208
 
210
209
  export {
211
210
  initAll,
212
- Cookies,
213
211
  Accordion,
214
212
  Breadcrumbs,
215
213
  CodeBlock,
@@ -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={533(e,t,a){a.d(t,{A:()=>o}),window.TNAFrontendCookieEvents||=null;class n{events={};oneTimeEvents={};debug=!1;constructor(e=!1){if(this.debug=e,window.TNAFrontendCookieEvents)return this.log("Using existing TNAFrontendCookieEvents instance"),window.TNAFrontendCookieEvents;window.TNAFrontendCookieEvents=this}log(...e){this.debug&&console.log("[TNA Frontend Cookie Events]",...e)}on(e,t){Object.hasOwn(this.events,e)||(this.events[e]=[]),this.events[e]=[...this.events[e],t]}once(e,t){Object.hasOwn(this.oneTimeEvents,e)||(this.oneTimeEvents[e]=[]),this.oneTimeEvents[e]=[...this.oneTimeEvents[e],t]}trigger(e,t={}){if(Object.hasOwn(this.events,e)&&(this.log(`Triggering event: ${e}`,t),this.events[e].forEach(e=>e.call(this,t))),Object.hasOwn(this.oneTimeEvents,e)){this.log(`Triggering one-time event: ${e}`,t);for(let a=this.oneTimeEvents[e].length-1;a>=0;a-=1)this.oneTimeEvents[e][a].call(this,t),this.oneTimeEvents[e].splice(a,1)}}}window.TNAFrontendCookies||=null;const i=["usage","settings","marketing","essential"];class o{defaultDomain="";defaultPath="";secure=!0;policiesKey="";events=null;defaultAge=null;policiesCorrectOnInit=!1;debug="true"===document.documentElement.dataset.tnaFrontendDebug;constructor(e={}){const{defaultDomain:t,defaultPath:a,secure:o,policiesKey:r,defaultAge:s,newInstance:l=!1,noInit:c=!1}=e;if(!l&&window.TNAFrontendCookies)return window.TNAFrontendCookies;if(this.defaultDomain=t||document.documentElement.dataset.tnaCookiesDomain||window.location.hostname,this.defaultPath=a||document.documentElement.dataset.tnaCookiesPath||"/",this.secure=o||"true"!==document.documentElement.dataset.tnaCookiesInsecure,this.policiesKey=r||document.documentElement.dataset.tnaCookiesPoliciesKey||"cookies_policy",s)this.defaultAge=s;else{const e=31536e3;this.defaultAge=parseInt(document.documentElement.dataset.tnaCookiesDefaultAge,10)||e}this.events=new n(this.debug),this.policiesCorrectOnInit=Object.keys(this.policies).length===i.length&&i.every(e=>Object.keys(this.policies).includes(e)&&"boolean"==typeof this.policies[e]),this.policiesCorrectOnInit||c||this.init(),this.log({defaultDomain:this.defaultDomain,defaultPath:this.defaultPath,secure:this.secure,policiesKey:this.policiesKey,defaultAge:this.defaultAge,policiesCorrectOnInit:this.policiesCorrectOnInit}),l||window.TNAFrontendCookies||(window.TNAFrontendCookies=this)}init(){const e=this.policies;this.log("Existing policies on init:",e);const t=Object.fromEntries(Object.keys(e).filter(e=>i.includes(e)).map(t=>[t,e[t]]));Object.keys(t).length&&this.log("Filtered existing policies:",t),this.savePolicies({usage:!1,settings:!1,marketing:!1,...t,essential:!0})}log(...e){this.debug&&console.log("[TNA Frontend Cookies]",...e,this.all)}destroyInstance(){this.log("Destroying TNAFrontendCookies instance"),window.TNAFrontendCookies=null}get all(){const e={};return document.cookie.split("; ").filter(e=>""!==e.trim()).forEach(t=>{const a=t.trim().split("="),[n,i]=a;n&&(e[n]=decodeURIComponent(i||""))}),e}get policies(){try{return JSON.parse(this.get(this.policiesKey)||"{}")}catch(e){return{}}}exists(e){return Object.hasOwn(this.all,e)}hasValue(e,t){return this.get(e)===t}get(e){return this.exists(e)?decodeURIComponent(this.all[e]):null}set(e,t,a={}){const{maxAge:n=this.defaultAge,sameSite:i="Lax",domain:o=this.defaultDomain,path:r=this.defaultPath,secure:s=this.secure,session:l=!1}=a;if(!e)return;let c="";s&&(c="; secure");let d="";l||(d=`; max-age=${n}`);const m=`${encodeURIComponent(e)}=${encodeURIComponent(t)}; domain=${o}; samesite=${i}; path=${r}${d}${c}`;document.cookie=m,this.log("Set cookie:",{key:e,value:t,maxAge:n,path:r,sameSite:i,domain:o,secure:s,session:l,cookie:m}),this.events.trigger("setCookie",{key:e,value:t,maxAge:n,path:r,sameSite:i,domain:o,secure:s,session:l,cookie:m})}delete(e,t="/",a=this.defaultDomain){const n={maxAge:-1,path:t,domain:a||this.defaultDomain};this.set(e,"",n),this.log("Deleted cookie:",{key:e,path:t,domain:a,...n}),this.events.trigger("deleteCookie",{key:e,...n})}deleteAll(e="/",t=this.defaultDomain){Object.keys(this.all).forEach(a=>{this.delete(a,e,t)}),this.log("Deleted all cookies",{path:e,domain:t}),this.events.trigger("deleteAllCookies",{path:e,domain:t})}acceptPolicy(e){this.log("Accepting policy:",e),this.setPolicy(e,!0),this.events.trigger("acceptPolicy",e),this.events.trigger("changePolicy",{[e]:!0})}rejectPolicy(e){this.log("Rejecting policy:",e),this.setPolicy(e,!1),this.events.trigger("rejectPolicy",e),this.events.trigger("changePolicy",{[e]:!1})}setPolicy(e,t){"essential"!==e?(this.log(`Setting policy ${e} to ${t}`),this.savePolicies({...this.policies,[e]:t,essential:!0}),this.events.trigger("changePolicy",{[e]:t})):this.log("Cannot change essential policy, it is always accepted.")}acceptAllPolicies(){this.log("Accepting all policies");const e=Object.fromEntries(Object.keys(this.policies).map(e=>[e.toLowerCase(),!0]));this.savePolicies(e),this.events.trigger("acceptAllPolicies"),this.events.trigger("changePolicy",e)}rejectAllPolicies(){this.log("Rejecting all policies");const e={...Object.fromEntries(Object.keys(this.policies).map(e=>[e.toLowerCase(),!1])),essential:!0};this.savePolicies(e),this.events.trigger("rejectAllPolicies"),this.events.trigger("changePolicy",e)}savePolicies(e){this.log("Saving policies:",e),this.set(this.policiesKey,JSON.stringify(e))}isPolicyAccepted(e){return Object.hasOwn(this.policies,e)?!0===this.policies[e]:null}on(e,t){this.log(`Adding event listener for: ${e}`),this.events.on(e,t)}once(e,t){this.log(`Adding one-time event listener for: ${e}`),this.events.once(e,t)}}}},t={};function a(n){var i=t[n];if(void 0!==i)return i.exports;var o=t[n]={exports:{}};return e[n](o,o.exports,a),o.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=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};a.r(n),a.d(n,{EventTracker:()=>w,GA4:()=>D,helpers:()=>O});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 o=a[n];if(o===e)return`${i(e.parentNode)}/${e.tagName}[${t+1}]`;1===o.nodeType&&o.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},r=e=>o(e,["h1","h2","h3","h4","h5","h6"]),s={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,i)=>i,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=>r(e),xpath:e=>i(e.target)},l=[{scope:".tna-accordion",areaName:"accordion",rootEventName:"select_feature",rootData:{data_component_name:"accordion"},events:[{eventName:"click",targetElement:".tna-accordion__summary",on:"click",data:{state:s.expanded,value:s.text},rootData:{data_link_type:s.expanded,data_link:s.text,data_position:s.index}}]}],c=[{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:s.html},rootData:{data_link_type:"breadcrumb_link",data_link:s.text}},{eventName:"click",targetElement:".tna-breadcrumbs__item--expandable button.tna-breadcrumbs__link",on:"click",data:{state:"expand",value:s.html},rootData:{data_link_type:"breadcrumb_expand",data_link:s.text}}]}],d=[{scope:".tna-checkboxes",areaName:"checkboxes",events:[{eventName:"toggle",targetElement:".tna-checkboxes__item input",on:"change",data:{state:s.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()}}]}],m=[{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:s.text}}]}],g=[{scope:".tna-error-summary",areaName:"error-summary",events:[{eventName:"jump",targetElement:"a.tna-error-summary__link",on:"click",data:{value:s.text}}]}],h=e=>JSON.stringify(Array.from(e.files).map(e=>({name:e.name,size:e.size,type:e.type}))),u=[{scope:".tna-file-input",areaName:"file-input",events:[{eventName:"blurred",on:"blur",data:{value:h,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:h,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:h,state:e=>e.files.length,group:(e,t)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]}],p=[{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:s.text},rootData:{data_link_type:"link",data_section:s.closestHeading,data_link:s.text}},{eventName:"social_link.click",targetElement:".tna-footer__social-item-link",on:"click",data:{value:s.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:s.text},rootData:{data_link_type:"link",data_section:"Legal information",data_link:s.text}},{eventName:"mailing_list.click",targetElement:".tna-footer__mailing-list a.tna-button",on:"click",data:{value:s.text},rootData:{data_link_type:"button",data_section:"Mailing list",data_link:s.text}},{eventName:"ogl.click",targetElement:".tna-footer__licence p a.tna-footer__link",on:"click",data:{value:s.text},rootData:{data_link_type:"link",data_section:"OGL",data_link:s.text}},{eventName:"govuk.click",targetElement:".tna-footer__govuk-link",on:"click",data:{value:s.text},rootData:{data_link_type:"Logo",data_section:"GOV.UK",data_link:s.text}},{eventName:"theme.change",targetElement:".tna-footer__theme-selector-button",on:"click",data:{value:s.value}}]}],v=[{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,i)=>t.querySelector(".tna-gallery__header-inner")?.innerText?.trim()||`gallery_${i}`,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:s.text},rootData:{data_link:"image",media_action:"progress",media_progress:s.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:s.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:s.text},rootData:{data_link_type:"menu",data_section:s.text,data_position:1,data_link:s.text}},{eventName:"secondary_link.click",targetElement:".tna-global-header__top-navigation-link",on:"click",data:{value:s.text},rootData:{data_link_type:"icon",data_link:s.text,data_section:"Top navigation and logo"}}]}],k=[{scope:".tna-header",areaName:"header",events:[{eventName:"toggle",targetElement:".tna-header__navigation-button",on:"click",data:{state:s.expanded}}]}],f=[{scope:".tna-picture",areaName:"picture",events:[{eventName:"toggle_transcript",targetElement:".tna-picture__toggle-transcript",on:"click",data:{state:s.expanded,value:(e,t,a)=>{const n=r(t),i=t.querySelector(".tna-picture__image"),o=i.getAttribute("src"),s=`${i.getAttribute("alt")} (${o})`;return n?`${n} > ${s}`:s}}}]}],y=[{scope:".tna-radios",areaName:"radios",events:[{eventName:"toggle",targetElement:".tna-radios__item input",on:"change",data:{state:s.checked,value:(e,t,a)=>e.parentNode.innerText,group:(e,t,a)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]}],b=[{scope:".tna-search-field",areaName:"search-field",events:[{eventName:"blurred",targetElement:".tna-search-field__input",on:"blur",data:{value:s.value,group:(e,t,a)=>t.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]}],x=[{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:s.text,data_position:s.index}}]}],N=[{scope:".tna-text-input",areaName:"text-input",events:[{eventName:"blurred",on:"blur",data:{value:s.value,group:(e,t)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]}],E=[{scope:".tna-textarea",areaName:"textarea",events:[{eventName:"blurred",on:"blur",data:{value:s.value,group:(e,t,a)=>t.closest(".tna-form-item")?.querySelector(".tna-form-item__heading")?.innerText?.trim()}}]}];var A=a(533);const T=[...l,...c,...d,...m,...g,...u,...p,...v,..._,...k,{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")}}]},...f,...y,...b,...x,...N,...E];class w{cookies=new A.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.isPolicyAccepted("usage")&&this.enableTracking(),this.cookies.on("changePolicy",e=>{Object.hasOwn(e,"usage")&&(e.usage?this.enableTracking():this.disableTracking())}),e&&this.initAll())}enableTracking(){}disableTracking(){}initAll(){T.forEach(e=>{this.addListeners(e.scope,e.areaName,e.events,e.rootEventName||"",e.rootData||{})})}addListeners(e,t,a,n="",i={}){let o=[];"string"==typeof e?o=Array.from(this.document.querySelectorAll(e)):"object"==typeof e&&(o=[e]),0!==o.length&&o.forEach((o,r)=>{a.forEach(a=>{a.on&&(a.targetElement?Array.from(o.querySelectorAll(a.targetElement)).forEach((s,l)=>this.attachListener(s,o,n,i,a,e,t,l+1,r+1)):this.attachListener(o,o,n,i,a,e,t,1,r+1))})})}generateEventName(e,t){return`${this.prefix}.${e}.${t.eventName||t.on}`}attachListener(e,t,a,n,o,r,s,l,c){const{on:d,data:m,targetElement:g,rootData:h={},onCondition:u=null}=o;e.addEventListener(d,d=>{const p=[e,t,d,l,c];(null===u||this.computedValue(u,...p))&&this.recordEvent(o.rootEventName?`${this.prefix}.${o.rootEventName}`:a?`${this.prefix}.${a}`:this.generateEventName(s,o),{...m,name:this.generateEventName(s,o),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:g,timeSincePageLoad:new Date-this.startTime,index:l,instance:c,scope:r,areaName:s},Object.fromEntries(Object.entries({...n,...h}).map(([e,t])=>[e,this.computedValue(t,...p)])))})}computedValue(e,t,a,n,i,o){return"function"==typeof e?e.call(this,t,a,n,i,o):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 D extends w{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:i=!0}=e;super({prefix:a}),window.TNAFrontendAnalyticsGA4=this,this.addTrackingCode=i,window.dataLayer||=[],t&&(this.gTagId=t,this.ga4Disable=`ga-disable-${this.gTagId}`,this.cookies.isPolicyAccepted("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 C=document.documentElement.dataset.ga4;C&&new D({id:C});const O={getXPathTo:i,getClosestHeading:r,getClosestElement:o,valueGetters:s};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={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){Object.hasOwn(this.events,e)||(this.events[e]=[]),this.events[e]=[...this.events[e],t]}once(e,t){Object.hasOwn(this.oneTimeEvents,e)||(this.oneTimeEvents[e]=[]),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,defaultAge:o,noInit:s=!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.defaultAge=o||parseInt(l.tnaCookiesDefaultAge,10)||31536e3,this.events=new n,this.preferencesCorrectOnInit=Object.keys(this.preferences).length===this.tnaCookiePreferences.length&&this.tnaCookiePreferences.every(e=>Object.keys(this.preferences).includes(e)&&"boolean"==typeof this.preferences[e]),this.preferencesCorrectOnInit||s||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})}get all(){const e={};return document.cookie.split("; ").filter(e=>""!==e.trim()).forEach(t=>{const a=t.trim().split("="),[n,r]=a;n&&(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:l=!1}=a;if(!e)return;const c=s?"; secure":"",d=l?"":`; max-age=${n}`,m=`${encodeURIComponent(e)}=${encodeURIComponent(t)}; domain=${i}; samesite=${r}; path=${o}${d}${c}`;document.cookie=m;const g={key:e,value:t,maxAge:n,path:o,sameSite:r,domain:i,secure:s,session:l,cookie:m};this.events.trigger("setCookie",g)}delete(e,t="/",a=this.defaultDomain){const n={maxAge:-1,path:t,domain:a||this.defaultDomain};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.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.events.trigger("disableAllPreferences"),this.events.trigger("changePreference",e)}savePreferences(e){this.set(this.preferencesKey,JSON.stringify(e))}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)=>{if(Array.isArray(t))for(var n=0;n<t.length;){var r=t[n++],i=t[n++];a.o(e,r)?0===i&&n++:0===i?Object.defineProperty(e,r,{enumerable:!0,value:t[n++]}):Object.defineProperty(e,r,{enumerable:!0,get:i})}else for(var r in t)a.o(t,r)&&!a.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};let n={};a.r(n),a.d(n,{EventTracker:()=>m,GA4:()=>g,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"]),l={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)},c=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:l.expanded,value:l.text},rootData:{data_link_type:l.expanded,data_link:l.text,data_position:l.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:l.html},rootData:{data_link_type:"breadcrumb_link",data_link:l.text}},{eventName:"click",targetElement:".tna-breadcrumbs__item--expandable button.tna-breadcrumbs__link",on:"click",data:{state:"expand",value:l.html},rootData:{data_link_type:"breadcrumb_expand",data_link:l.text}}]},{scope:".tna-checkboxes",areaName:"checkboxes",events:[{eventName:"toggle",targetElement:".tna-checkboxes__item input",on:"change",data:{state:l.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:l.text}}]},{scope:".tna-error-summary",areaName:"error-summary",events:[{eventName:"jump",targetElement:"a.tna-error-summary__link",on:"click",data:{value:l.text}}]},{scope:".tna-file-input",areaName:"file-input",events:[{eventName:"blurred",on:"blur",data:{value:c,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:c,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:c,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:l.text},rootData:{data_link_type:"link",data_section:l.closestHeading,data_link:l.text}},{eventName:"social_link.click",targetElement:".tna-footer__social-item-link",on:"click",data:{value:l.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:l.text},rootData:{data_link_type:"link",data_section:"Legal information",data_link:l.text}},{eventName:"mailing_list.click",targetElement:".tna-footer__mailing-list a.tna-button",on:"click",data:{value:l.text},rootData:{data_link_type:"button",data_section:"Mailing list",data_link:l.text}},{eventName:"ogl.click",targetElement:".tna-footer__licence p a.tna-footer__link",on:"click",data:{value:l.text},rootData:{data_link_type:"link",data_section:"OGL",data_link:l.text}},{eventName:"govuk.click",targetElement:".tna-footer__govuk-link",on:"click",data:{value:l.text},rootData:{data_link_type:"Logo",data_section:"GOV.UK",data_link:l.text}},{eventName:"theme.change",targetElement:".tna-footer__theme-selector-button",on:"click",data:{value:l.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:l.text},rootData:{data_link:"image",media_action:"progress",media_progress:l.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:l.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:l.text},rootData:{data_link_type:"menu",data_section:l.text,data_position:1,data_link:l.text}},{eventName:"secondary_link.click",targetElement:".tna-global-header__top-navigation-link",on:"click",data:{value:l.text},rootData:{data_link_type:"icon",data_link:l.text,data_section:"Top navigation and logo"}}]},{scope:".tna-header",areaName:"header",events:[{eventName:"toggle",targetElement:".tna-header__navigation-button",on:"click",data:{state:l.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:l.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:l.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:l.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:l.text,data_position:l.index}}]},{scope:".tna-text-input",areaName:"text-input",events:[{eventName:"blurred",on:"blur",data:{value:l.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:l.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,l)=>this.attachListener(s,i,n,r,a,e,t,l+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,l,c){const{on:d,data:m,targetElement:g,rootData:h={},onCondition:u=null}=r;e.addEventListener(d,d=>{const p=[e,t,d,l,c];(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:g,timeSincePageLoad:new Date-this.startTime,index:l,instance:c,scope:o,areaName:s},Object.fromEntries(Object.entries({...n,...h}).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 g 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 h=document.documentElement.dataset.ga4;h&&new g({id:h});const u={getXPathTo:i,getClosestHeading:s,getClosestElement:o,valueGetters:l};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/./src/nationalarchives/lib/cookie-events.mjs","webpack://TNAFrontend/./src/nationalarchives/lib/cookies.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/lib/analytics-helpers.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/file-input/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/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","webpack://TNAFrontend/./src/nationalarchives/analytics.mjs","webpack://TNAFrontend/./src/nationalarchives/components/hero/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 ","window.TNAFrontendCookieEvents ||= null;\n\nexport class CookieEventHandler {\n events = {};\n oneTimeEvents = {};\n debug = false;\n\n constructor(debug = false) {\n this.debug = debug;\n if (window.TNAFrontendCookieEvents) {\n this.log(\"Using existing TNAFrontendCookieEvents instance\");\n /* eslint-disable-next-line no-constructor-return */\n return window.TNAFrontendCookieEvents;\n }\n window.TNAFrontendCookieEvents = this;\n }\n\n log(...args) {\n if (this.debug) {\n /* eslint-disable-next-line no-console */\n console.log(\"[TNA Frontend Cookie Events]\", ...args);\n }\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 if (!Object.hasOwn(this.events, event)) {\n this.events[event] = [];\n }\n this.events[event] = [...this.events[event], callback];\n }\n\n once(event, callback) {\n if (!Object.hasOwn(this.oneTimeEvents, event)) {\n this.oneTimeEvents[event] = [];\n }\n this.oneTimeEvents[event] = [...this.oneTimeEvents[event], callback];\n }\n\n /** @protected */\n trigger(event, data = {}) {\n if (Object.hasOwn(this.events, event)) {\n this.log(`Triggering event: ${event}`, data);\n this.events[event].forEach((eventToTrigger) =>\n eventToTrigger.call(this, data),\n );\n }\n if (Object.hasOwn(this.oneTimeEvents, event)) {\n this.log(`Triggering one-time event: ${event}`, data);\n\n for (\n /* eslint-disable-next-line no-magic-numbers */\n let eventIndex = this.oneTimeEvents[event].length - 1;\n /* eslint-disable-next-line no-magic-numbers */\n eventIndex >= 0;\n /* eslint-disable-next-line no-magic-numbers */\n eventIndex -= 1\n ) {\n const eventToTrigger = this.oneTimeEvents[event][eventIndex];\n eventToTrigger.call(this, data);\n /* eslint-disable-next-line no-magic-numbers */\n this.oneTimeEvents[event].splice(eventIndex, 1);\n }\n }\n }\n}\n","/* eslint-disable max-lines */\n/* eslint-disable no-console */\n\nimport { CookieEventHandler } from \"./cookie-events.mjs\";\n\nwindow.TNAFrontendCookies ||= null;\n\nconst tnaCookiePolicies = [\"usage\", \"settings\", \"marketing\", \"essential\"];\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 policiesKey = \"\";\n /** @protected */\n events = null;\n /** @protected */\n defaultAge = null;\n /** @protected */\n policiesCorrectOnInit = false;\n /** @protected */\n debug = document.documentElement.dataset.tnaFrontendDebug === \"true\";\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.policiesKey] - The name of the cookie.\n * @param {Number} [options.defaultAge] - The default age of non-session cookies.\n * @param {String} [options.newInstance=false] - Create a fresh instance of the cookie class.\n * @param {Boolean} [options.noInit=false] - Don't initialise a blank cookie policy.\n */\n constructor(options = {}) {\n const {\n defaultDomain,\n defaultPath,\n secure,\n policiesKey,\n defaultAge,\n newInstance = false,\n noInit = false,\n } = options;\n if (!newInstance && window.TNAFrontendCookies) {\n /* eslint-disable-next-line no-constructor-return */\n return window.TNAFrontendCookies;\n }\n if (defaultDomain) {\n this.defaultDomain = defaultDomain;\n } else {\n this.defaultDomain =\n document.documentElement.dataset.tnaCookiesDomain ||\n window.location.hostname;\n }\n if (defaultPath) {\n this.defaultPath = defaultPath;\n } else {\n this.defaultPath = document.documentElement.dataset.tnaCookiesPath || \"/\";\n }\n if (secure) {\n this.secure = secure;\n } else {\n this.secure =\n document.documentElement.dataset.tnaCookiesInsecure !== \"true\";\n }\n if (policiesKey) {\n this.policiesKey = policiesKey;\n } else {\n this.policiesKey =\n document.documentElement.dataset.tnaCookiesPoliciesKey ||\n \"cookies_policy\";\n }\n if (defaultAge) {\n this.defaultAge = defaultAge;\n } else {\n /* eslint-disable-next-line no-magic-numbers */\n const secondsInAYear = 365 * 24 * 60 * 60;\n this.defaultAge =\n parseInt(document.documentElement.dataset.tnaCookiesDefaultAge, 10) ||\n secondsInAYear;\n }\n this.events = new CookieEventHandler(this.debug);\n this.policiesCorrectOnInit =\n Object.keys(this.policies).length === tnaCookiePolicies.length &&\n tnaCookiePolicies.every(\n (policy) =>\n Object.keys(this.policies).includes(policy) &&\n typeof this.policies[policy] === \"boolean\",\n );\n if (!this.policiesCorrectOnInit && !noInit) {\n this.init();\n }\n this.log({\n defaultDomain: this.defaultDomain,\n defaultPath: this.defaultPath,\n secure: this.secure,\n policiesKey: this.policiesKey,\n defaultAge: this.defaultAge,\n policiesCorrectOnInit: this.policiesCorrectOnInit,\n });\n if (!newInstance && !window.TNAFrontendCookies) {\n window.TNAFrontendCookies = this;\n }\n }\n\n /** @protected */\n init() {\n const existingPolicies = this.policies;\n this.log(\"Existing policies on init:\", existingPolicies);\n const filteredExistingPolicies = Object.fromEntries(\n Object.keys(existingPolicies)\n .filter((policy) => tnaCookiePolicies.includes(policy))\n .map((policy) => [policy, existingPolicies[policy]]),\n );\n if (Object.keys(filteredExistingPolicies).length) {\n this.log(\"Filtered existing policies:\", filteredExistingPolicies);\n }\n this.savePolicies({\n usage: false,\n settings: false,\n marketing: false,\n ...filteredExistingPolicies,\n essential: true,\n });\n }\n\n log(...args) {\n if (this.debug) {\n console.log(\"[TNA Frontend Cookies]\", ...args, this.all);\n }\n }\n\n destroyInstance() {\n this.log(\"Destroying TNAFrontendCookies instance\");\n window.TNAFrontendCookies = null;\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 .forEach((cookie) => {\n const parts = cookie.trim().split(\"=\");\n const [key, value] = parts;\n if (key) {\n deserialised[key] = decodeURIComponent(value || \"\");\n }\n });\n return deserialised;\n }\n\n /** @protected */\n get policies() {\n try {\n return JSON.parse(this.get(this.policiesKey) || \"{}\");\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 return null;\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 let secureString = \"\";\n if (secure) {\n secureString = \"; secure\";\n }\n let sessionString = \"\";\n if (!session) {\n sessionString = `; max-age=${maxAge}`;\n }\n const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}; domain=${domain}; samesite=${sameSite}; path=${path}${sessionString}${secureString}`;\n document.cookie = cookie;\n this.log(\"Set cookie:\", {\n key,\n value,\n maxAge,\n path,\n sameSite,\n domain,\n secure,\n session,\n cookie,\n });\n this.events.trigger(\"setCookie\", {\n key,\n value,\n maxAge,\n path,\n sameSite,\n domain,\n secure,\n session,\n cookie,\n });\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: domain || this.defaultDomain };\n this.set(key, \"\", options);\n this.log(\"Deleted cookie:\", { key, path, domain, ...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 this.log(\"Deleted all cookies\", { path, domain });\n this.events.trigger(\"deleteAllCookies\", { path, domain });\n }\n\n /**\n * Accept a policy.\n * @param {String} policy - The name of the policy.\n */\n acceptPolicy(policy) {\n this.log(\"Accepting policy:\", policy);\n this.setPolicy(policy, true);\n this.events.trigger(\"acceptPolicy\", policy);\n this.events.trigger(\"changePolicy\", { [policy]: true });\n }\n\n /**\n * Reject a policy.\n * @param {String} policy - The name of the policy.\n */\n rejectPolicy(policy) {\n this.log(\"Rejecting policy:\", policy);\n this.setPolicy(policy, false);\n this.events.trigger(\"rejectPolicy\", policy);\n this.events.trigger(\"changePolicy\", { [policy]: false });\n }\n\n /**\n * Set a policy.\n * @param {String} policy - The name of the policy.\n * @param {Boolean} accepted - Whether the policy is accepted or not.\n */\n setPolicy(policy, accepted) {\n if (policy === \"essential\") {\n this.log(\"Cannot change essential policy, it is always accepted.\");\n return;\n }\n this.log(`Setting policy ${policy} to ${accepted}`);\n this.savePolicies({\n ...this.policies,\n [policy]: accepted,\n essential: true,\n });\n this.events.trigger(\"changePolicy\", { [policy]: accepted });\n }\n\n /**\n * Accept all the cookie policies.\n */\n acceptAllPolicies() {\n this.log(\"Accepting all policies\");\n const allPolicies = Object.fromEntries(\n Object.keys(this.policies).map((key) => [key.toLowerCase(), true]),\n );\n this.savePolicies(allPolicies);\n this.events.trigger(\"acceptAllPolicies\");\n this.events.trigger(\"changePolicy\", allPolicies);\n }\n\n /**\n * Reject all the cookie policies.\n */\n rejectAllPolicies() {\n this.log(\"Rejecting all policies\");\n const allPolicies = {\n ...Object.fromEntries(\n Object.keys(this.policies).map((key) => [key.toLowerCase(), false]),\n ),\n essential: true,\n };\n this.savePolicies(allPolicies);\n this.events.trigger(\"rejectAllPolicies\");\n this.events.trigger(\"changePolicy\", allPolicies);\n }\n\n /**\n * Commit policy preferences to the browser.\n * @param {object} policies - The policies to commit.\n */\n savePolicies(policies) {\n this.log(\"Saving policies:\", policies);\n this.set(this.policiesKey, JSON.stringify(policies));\n }\n\n /**\n * Get the acceptance status of a policy.\n * @param {String} policy - The name of the policy.\n * @returns {Boolean}\n */\n isPolicyAccepted(policy) {\n if (Object.hasOwn(this.policies, policy)) {\n return this.policies[policy] === true;\n }\n return null;\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.log(`Adding event listener for: ${event}`);\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.log(`Adding one-time event listener for: ${event}`);\n this.events.once(event, callback);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","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","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","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","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","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","/* eslint-disable max-classes-per-file, no-ternary, no-nested-ternary */\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\";\nimport Cookies from \"./lib/cookies.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.isPolicyAccepted(\"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.isPolicyAccepted(\"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","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"],"names":["root","factory","exports","module","define","amd","self","window","TNAFrontendCookieEvents","CookieEventHandler","events","oneTimeEvents","debug","constructor","this","log","args","console","on","event","callback","Object","hasOwn","once","trigger","data","forEach","eventToTrigger","call","eventIndex","length","splice","TNAFrontendCookies","tnaCookiePolicies","Cookies","defaultDomain","defaultPath","secure","policiesKey","defaultAge","policiesCorrectOnInit","document","documentElement","dataset","tnaFrontendDebug","options","newInstance","noInit","tnaCookiesDomain","location","hostname","tnaCookiesPath","tnaCookiesInsecure","tnaCookiesPoliciesKey","secondsInAYear","parseInt","tnaCookiesDefaultAge","keys","policies","every","policy","includes","init","existingPolicies","filteredExistingPolicies","fromEntries","filter","map","savePolicies","usage","settings","marketing","essential","all","destroyInstance","deserialised","cookie","split","trim","parts","key","value","decodeURIComponent","JSON","parse","get","error","exists","hasValue","set","maxAge","sameSite","domain","path","session","secureString","sessionString","encodeURIComponent","deleteAll","delete","acceptPolicy","setPolicy","rejectPolicy","accepted","acceptAllPolicies","allPolicies","toLowerCase","rejectAllPolicies","stringify","isPolicyAccepted","__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","analytics","scope","areaName","rootEventName","rootData","data_component_name","eventName","targetElement","state","data_link_type","data_link","data_position","breadcrumbs_analytics","checkboxes_analytics","group","closest","querySelector","details_analytics","hasAttribute","error_summary_analytics","getFileDetails","Array","from","files","file","name","size","type","file_input_analytics","footer_analytics","data_section","gallery_analytics","media_type","media_duration","querySelectorAll","media_provider","media_title","media_progress","findIndex","$itemButton","media_action","onCondition","global_header_analytics","header_analytics","picture_analytics","image","imageSrc","radios_analytics","search_field_analytics","sidebar_analytics","text_input_analytics","textarea_analytics","componentAnalytics","EventTracker","cookies","A","startTime","Date","prefix","documentScope","start","initAll","navigator","doNotTrack","enableTracking","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","Error","getTime","firstScript","getElementsByTagName","script","createElement","async","src","insertBefore","appendChild","startsWith","ga4Id","ga4","helpers"],"sourceRoot":""}
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 if (!Object.hasOwn(this.events, event)) {\n this.events[event] = [];\n }\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 if (!Object.hasOwn(this.oneTimeEvents, event)) {\n this.oneTimeEvents[event] = [];\n }\n this.oneTimeEvents[event] = [...this.oneTimeEvents[event], callback];\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.\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 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.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 =\n Object.keys(this.preferences).length ===\n this.tnaCookiePreferences.length &&\n this.tnaCookiePreferences.every(\n (preference) =>\n Object.keys(this.preferences).includes(preference) &&\n typeof this.preferences[preference] === \"boolean\",\n );\n if (!this.preferencesCorrectOnInit && !noInit) {\n this.init();\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 /** @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 .forEach((cookie) => {\n const parts = cookie.trim().split(\"=\");\n const [key, value] = parts;\n if (key) {\n deserialised[key] = decodeURIComponent(value || \"\");\n }\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: domain || this.defaultDomain };\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.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.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 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\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\tif(!__webpack_require__.o(exports, key)) {\n\t\t\t\tif(binding === 0) {\n\t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, value: definition[i++] });\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: binding });\n\t\t\t\t}\n\t\t\t} else if(binding === 0) { i++; }\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\tif(Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\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","Object","hasOwn","once","trigger","data","forEach","eventToTrigger","call","eachEvent","Cookies","defaultDomain","defaultPath","secure","preferencesKey","defaultAge","preferencesCorrectOnInit","tnaCookiePreferences","options","noInit","docDataset","document","documentElement","dataset","tnaCookiesDomain","location","hostname","tnaCookiesPath","tnaCookiesInsecure","tnaCookiesPreferencesKey","parseInt","tnaCookiesDefaultAge","keys","preferences","length","every","preference","includes","init","existingPreferences","filteredExistingPreferences","fromEntries","filter","map","savePreferences","usage","settings","marketing","essential","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","Array","isArray","i","binding","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","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,5 +1,7 @@
1
1
  /* eslint-disable max-classes-per-file, no-ternary, no-nested-ternary */
2
2
 
3
+ import Cookies from "@nationalarchives/cookies/src/index.js";
4
+
3
5
  import AccordionAnalytics from "./components/accordion/analytics.js";
4
6
  import BreadcrumbAnalytics from "./components/breadcrumbs/analytics.js";
5
7
  import CheckboxesAnalytics from "./components/checkboxes/analytics.js";
@@ -23,7 +25,6 @@ import {
23
25
  getXPathTo,
24
26
  valueGetters,
25
27
  } from "./lib/analytics-helpers.mjs";
26
- import Cookies from "./lib/cookies.mjs";
27
28
 
28
29
  const componentAnalytics = [
29
30
  ...AccordionAnalytics,
@@ -74,7 +75,7 @@ class EventTracker {
74
75
  start(initAll) {
75
76
  /* eslint-disable-next-line no-magic-numbers */
76
77
  if (!navigator.doNotTrack || navigator.doNotTrack !== 1) {
77
- if (this.cookies.isPolicyAccepted("usage")) {
78
+ if (this.cookies.preference("usage")) {
78
79
  this.enableTracking();
79
80
  }
80
81
  this.cookies.on("changePolicy", (policies) => {
@@ -353,7 +354,7 @@ class GA4 extends EventTracker {
353
354
  if (id) {
354
355
  this.gTagId = id;
355
356
  this.ga4Disable = `ga-disable-${this.gTagId}`;
356
- if (!this.cookies.isPolicyAccepted("usage")) {
357
+ if (!this.cookies.preference("usage")) {
357
358
  window[this.ga4Disable] = true;
358
359
  this.cookies.set(this.ga4Disable, "true");
359
360
  }
@@ -1,2 +1,2 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("TNAFrontend",[],e):"object"==typeof exports?exports.TNAFrontend=e():t.TNAFrontend=e()}(self,()=>(()=>{"use strict";var t={927(t,e,o){o.d(e,{DJ:()=>i});var r=o(181);const i=t=>{const e=t.querySelector("caption");"true"!==t.dataset.tableScrollInitialised&&(e&&!e.id&&(e.id=`table-caption-${(0,r.A)()}`),t.dataset.tableScrollInitialised="true"),t.scrollWidth>t.clientWidth?(t.setAttribute("tabindex","0"),t.setAttribute("role","region"),t.setAttribute("aria-labelledby",e?.id||""),t.classList.add("tna-table-wrapper--scroll")):(t.removeAttribute("tabindex"),t.removeAttribute("role"),t.removeAttribute("aria-labelledby"),t.classList.remove("tna-table-wrapper--scroll"))}},181(t,e,o){o.d(e,{A:()=>r});const r=()=>([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/gu,t=>(t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>t/4).toString(16))}},e={};function o(r){var i=e[r];if(void 0!==i)return i.exports;var n=e[r]={exports:{}};return t[r](n,n.exports,o),n.exports}o.d=(t,e)=>{for(var r in e)o.o(e,r)&&!o.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},o.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),o.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var r={};o.r(r),o.d(r,{Accordion:()=>n});var i=o(927);class n{constructor(t){this.$module=t,this.$items=t&&t.querySelectorAll(".tna-accordion__item"),this.$module&&this.$items&&(this.allowMultipleItemsOpen="true"!==this.$module.dataset.singleOpenItem,this.$items.forEach(t=>this.initItem(t)),this.initState(),this.$toggleAllButton=this.$module.querySelector(".tna-accordion__toggle-all"),this.$toggleAllButton&&(this.syncToggleAllButton(),this.$toggleAllButton.removeAttribute("hidden"),this.$toggleAllButton.addEventListener("click",()=>{this.isAllOpen()?this.$items.forEach(t=>this.closeItem(t)):this.$items.forEach(t=>this.openItem(t)),this.syncToggleAllButton()})))}initItem(t){const e=t.querySelector(".tna-accordion__heading"),o=t.querySelector(".tna-accordion__body");if(!e||!o)return;t.classList.add("tna-accordion__details"),t.classList.remove("tna-accordion__item"),e.removeAttribute("class"),o.classList.add("tna-accordion__content"),o.classList.remove("tna-accordion__body"),o.setAttribute("hidden","");const r=document.createElement("button");r.classList.add("tna-accordion__summary"),r.setAttribute("type","button"),r.setAttribute("aria-controls",o.id),r.innerText=e.innerText,e.innerText="",e.appendChild(r),r.addEventListener("click",()=>{"true"===r.getAttribute("aria-expanded")?this.closeItem(t):this.openItem(t)})}initState(){this.$items.forEach(t=>{"true"===t.dataset.isopen?this.openItem(t):this.closeItem(t),t.removeAttribute("data-isopen")})}openItem(t){this.allowMultipleItemsOpen||this.closeAllItemsExcept(t);const e=t.querySelector(".tna-accordion__summary"),o=t.querySelector(".tna-accordion__content");e.setAttribute("aria-expanded","true"),e.setAttribute("aria-label",`${e.innerText.trim()}, Hide this section`),o.removeAttribute("hidden"),this.syncToggleAllButton();const r=o.querySelectorAll(".tna-table-wrapper");r&&r.forEach(t=>{(0,i.DJ)(t)})}closeItem(t){const e=t.querySelector(".tna-accordion__summary"),o=t.querySelector(".tna-accordion__content");e.setAttribute("aria-expanded","false"),e.setAttribute("aria-label",`${e.innerText.trim()}, Show this section`),o.setAttribute("hidden",""),this.syncToggleAllButton()}closeAllItemsExcept(t){Array.from(this.$items).filter(e=>e.querySelector(".tna-accordion__summary")!==t&&"true"===e.querySelector(".tna-accordion__summary").getAttribute("aria-expanded")).forEach(t=>this.closeItem(t))}isAllOpen(){return Array.from(this.$items).every(t=>"true"===t.querySelector(".tna-accordion__summary").getAttribute("aria-expanded"))}syncToggleAllButton(){this.$toggleAllButton&&(this.isAllOpen()?this.$toggleAllButton.innerText=this.$toggleAllButton.dataset.closeAllLabel||"Hide all sections":this.$toggleAllButton.innerText=this.$toggleAllButton.dataset.openAllLabel||"Show all sections")}}return r})());
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("TNAFrontend",[],e):"object"==typeof exports?exports.TNAFrontend=e():t.TNAFrontend=e()}(self,()=>(()=>{"use strict";var t={927(t,e,r){var o=r(181);r.d(e,["DJ",0,t=>{const e=t.querySelector("caption");"true"!==t.dataset.tableScrollInitialised&&(e&&!e.id&&(e.id=`table-caption-${(0,o.A)()}`),t.dataset.tableScrollInitialised="true"),t.scrollWidth>t.clientWidth?(t.setAttribute("tabindex","0"),t.setAttribute("role","region"),t.setAttribute("aria-labelledby",e?.id||""),t.classList.add("tna-table-wrapper--scroll")):(t.removeAttribute("tabindex"),t.removeAttribute("role"),t.removeAttribute("aria-labelledby"),t.classList.remove("tna-table-wrapper--scroll"))}])},181(t,e,r){r.d(e,["A",0,()=>([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/gu,t=>(t^crypto.getRandomValues(new Uint8Array(1))[0]&15>>t/4).toString(16))])}};const e={};function r(o){const i=e[o];if(void 0!==i)return i.exports;const n=e[o]={exports:{}};return t[o](n,n.exports,r),n.exports}r.d=(t,e)=>{if(Array.isArray(e))for(var o=0;o<e.length;){var i=e[o++],n=e[o++];r.o(t,i)?0===n&&o++:0===n?Object.defineProperty(t,i,{enumerable:!0,value:e[o++]}):Object.defineProperty(t,i,{enumerable:!0,get:n})}else for(var i in e)r.o(e,i)&&!r.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};let o={};r.r(o),r.d(o,{Accordion:()=>n});var i=r(927);class n{constructor(t){this.$module=t,this.$items=t&&t.querySelectorAll(".tna-accordion__item"),this.$module&&this.$items&&(this.allowMultipleItemsOpen="true"!==this.$module.dataset.singleOpenItem,this.$items.forEach(t=>this.initItem(t)),this.initState(),this.$toggleAllButton=this.$module.querySelector(".tna-accordion__toggle-all"),this.$toggleAllButton&&(this.syncToggleAllButton(),this.$toggleAllButton.removeAttribute("hidden"),this.$toggleAllButton.addEventListener("click",()=>{this.isAllOpen()?this.$items.forEach(t=>this.closeItem(t)):this.$items.forEach(t=>this.openItem(t)),this.syncToggleAllButton()})))}initItem(t){const e=t.querySelector(".tna-accordion__heading"),r=t.querySelector(".tna-accordion__body");if(!e||!r)return;t.classList.add("tna-accordion__details"),t.classList.remove("tna-accordion__item"),e.removeAttribute("class"),r.classList.add("tna-accordion__content"),r.classList.remove("tna-accordion__body"),r.setAttribute("hidden","");const o=document.createElement("button");o.classList.add("tna-accordion__summary"),o.setAttribute("type","button"),o.setAttribute("aria-controls",r.id),o.innerText=e.innerText,e.innerText="",e.appendChild(o),o.addEventListener("click",()=>{"true"===o.getAttribute("aria-expanded")?this.closeItem(t):this.openItem(t)})}initState(){this.$items.forEach(t=>{"true"===t.dataset.isopen?this.openItem(t):this.closeItem(t),t.removeAttribute("data-isopen")})}openItem(t){this.allowMultipleItemsOpen||this.closeAllItemsExcept(t);const e=t.querySelector(".tna-accordion__summary"),r=t.querySelector(".tna-accordion__content");e.setAttribute("aria-expanded","true"),e.setAttribute("aria-label",`${e.innerText.trim()}, Hide this section`),r.removeAttribute("hidden"),this.syncToggleAllButton();const o=r.querySelectorAll(".tna-table-wrapper");o&&o.forEach(t=>{(0,i.DJ)(t)})}closeItem(t){const e=t.querySelector(".tna-accordion__summary"),r=t.querySelector(".tna-accordion__content");e.setAttribute("aria-expanded","false"),e.setAttribute("aria-label",`${e.innerText.trim()}, Show this section`),r.setAttribute("hidden",""),this.syncToggleAllButton()}closeAllItemsExcept(t){Array.from(this.$items).filter(e=>e.querySelector(".tna-accordion__summary")!==t&&"true"===e.querySelector(".tna-accordion__summary").getAttribute("aria-expanded")).forEach(t=>this.closeItem(t))}isAllOpen(){return Array.from(this.$items).every(t=>"true"===t.querySelector(".tna-accordion__summary").getAttribute("aria-expanded"))}syncToggleAllButton(){this.$toggleAllButton&&(this.isAllOpen()?this.$toggleAllButton.innerText=this.$toggleAllButton.dataset.closeAllLabel||"Hide all sections":this.$toggleAllButton.innerText=this.$toggleAllButton.dataset.openAllLabel||"Show all sections")}}return o})());
2
2
  //# sourceMappingURL=accordion.js.map