@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
@@ -1 +1 @@
1
- {"version":3,"file":"all+analytics.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/./src/nationalarchives/all.mjs","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","webpack://TNAFrontend/./src/nationalarchives/components/accordion/accordion.mjs","webpack://TNAFrontend/./src/nationalarchives/components/breadcrumbs/breadcrumbs.mjs","webpack://TNAFrontend/./src/nationalarchives/components/code-block/code-block.mjs","webpack://TNAFrontend/./src/nationalarchives/components/cookie-banner/cookie-banner.mjs","webpack://TNAFrontend/./src/nationalarchives/components/date-input/date-input.mjs","webpack://TNAFrontend/./src/nationalarchives/components/error-summary/error-summary.mjs","webpack://TNAFrontend/./src/nationalarchives/components/file-input/file-input.mjs","webpack://TNAFrontend/./src/nationalarchives/components/footer/footer.mjs","webpack://TNAFrontend/./src/nationalarchives/components/gallery/gallery.mjs","webpack://TNAFrontend/./src/nationalarchives/components/global-header/global-header.mjs","webpack://TNAFrontend/./src/nationalarchives/components/header/header.mjs","webpack://TNAFrontend/./src/nationalarchives/components/picture/picture.mjs","webpack://TNAFrontend/./src/nationalarchives/components/sidebar/sidebar.mjs","webpack://TNAFrontend/./src/nationalarchives/components/skip-link/skip-link.mjs","webpack://TNAFrontend/./src/nationalarchives/components/tabs/tabs.mjs","webpack://TNAFrontend/./src/nationalarchives/components/text-input/text-input.mjs","webpack://TNAFrontend/./src/nationalarchives/components/textarea/textarea.mjs","webpack://TNAFrontend/./src/nationalarchives/lib/cookie-events.mjs","webpack://TNAFrontend/./src/nationalarchives/lib/cookies.mjs","webpack://TNAFrontend/./src/nationalarchives/lib/helpers.mjs","webpack://TNAFrontend/./src/nationalarchives/lib/uuid.mjs","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object"],"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[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = factory();\n})(self, () => {\nreturn ","/* eslint-disable no-new */\nimport { Accordion } from \"./components/accordion/accordion.mjs\";\nimport { Breadcrumbs } from \"./components/breadcrumbs/breadcrumbs.mjs\";\nimport { CodeBlock } from \"./components/code-block/code-block.mjs\";\nimport { CookieBanner } from \"./components/cookie-banner/cookie-banner.mjs\";\nimport { DateInputProgressive } from \"./components/date-input/date-input.mjs\";\nimport { ErrorSummary } from \"./components/error-summary/error-summary.mjs\";\nimport { FileInputDroppable } from \"./components/file-input/file-input.mjs\";\nimport { Footer } from \"./components/footer/footer.mjs\";\nimport { Gallery } from \"./components/gallery/gallery.mjs\";\nimport { GlobalHeader } from \"./components/global-header/global-header.mjs\";\nimport { Header } from \"./components/header/header.mjs\";\nimport { Picture } from \"./components/picture/picture.mjs\";\nimport { Sidebar } from \"./components/sidebar/sidebar.mjs\";\nimport { SkipLink } from \"./components/skip-link/skip-link.mjs\";\nimport { Tabs } from \"./components/tabs/tabs.mjs\";\nimport { TextInputPassword } from \"./components/text-input/text-input.mjs\";\nimport { TextAreaItemisedRows } from \"./components/textarea/textarea.mjs\";\nimport Cookies from \"./lib/cookies.mjs\";\nimport { checkTableForScroll, updateTimeElement } from \"./lib/helpers.mjs\";\n\nconst initAll = (options = {}) => {\n const { scope } = options;\n let $scope = document;\n if (scope) {\n if (scope instanceof HTMLElement) {\n $scope = scope;\n } else {\n throw new Error(\"Scope must be an HTMLElement\");\n }\n }\n const $html = document.documentElement;\n $html.classList.add(\"tna-template--js-enabled\");\n\n const onFirstTouch = () => {\n window.removeEventListener(\"touchstart\", onFirstTouch);\n $html.classList.add(\"tna-template--touched\");\n };\n window.addEventListener(\"touchstart\", onFirstTouch);\n\n const onKeyDown = (event) => {\n if (event.key === \"Tab\") {\n $html.classList.add(\"tna-template--tabbed\");\n $html.classList.remove(\"tna-template--clicked\");\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n\n const onMouseDown = () => {\n $html.classList.add(\"tna-template--clicked\");\n $html.classList.remove(\"tna-template--tabbed\");\n };\n window.addEventListener(\"mousedown\", onMouseDown);\n\n /*\n * ==========================================\n * Checks if widths of all tables on the page\n * are wider than their parent container, and\n * allowing horizontal scrolling if they are.\n * This is done both on load and on resize.\n * ==========================================\n */\n const $tableWrappers = $scope.querySelectorAll(\".tna-table-wrapper\");\n $tableWrappers.forEach(($tableWrapper) => checkTableForScroll($tableWrapper));\n window.addEventListener(\"resize\", () => {\n $tableWrappers.forEach(($tableWrapper) =>\n checkTableForScroll($tableWrapper),\n );\n });\n\n // Remove this opt-in class in a later release\n if ($html.classList.contains(\"tna-template--enhance-time-elements\")) {\n document.querySelectorAll(\"time[datetime]\").forEach(updateTimeElement);\n }\n\n const $accordions = $scope.querySelectorAll('[data-module=\"tna-accordion\"]');\n $accordions.forEach(($accordion) => {\n new Accordion($accordion);\n });\n\n const $breadcrumbs = $scope.querySelector('[data-module=\"tna-breadcrumbs\"]');\n if ($breadcrumbs) {\n new Breadcrumbs($breadcrumbs);\n }\n\n const $codeBlocks = $scope.querySelectorAll('[data-module=\"tna-code-block\"]');\n $codeBlocks.forEach(($codeBlock) => {\n new CodeBlock($codeBlock);\n });\n\n const $cookieBanner = $scope.querySelector(\n '[data-module=\"tna-cookie-banner\"]',\n );\n if ($cookieBanner) {\n new CookieBanner($cookieBanner);\n }\n\n const $progressiveDateInputs = $scope.querySelectorAll(\n '[data-module=\"tna-date-input-progressive\"]',\n );\n $progressiveDateInputs.forEach(($dateInput) => {\n new DateInputProgressive($dateInput);\n });\n\n const $errorSummary = $scope.querySelector(\n '[data-module=\"tna-error-summary\"]',\n );\n if ($errorSummary) {\n new ErrorSummary($errorSummary).init();\n }\n\n const $fileInputs = $scope.querySelectorAll('[data-module=\"tna-file-input\"]');\n $fileInputs.forEach(($fileInput) => {\n new FileInputDroppable($fileInput);\n });\n\n const $footer = $scope.querySelector('[data-module=\"tna-footer\"]');\n if ($footer) {\n new Footer($footer);\n }\n\n const $galleries = $scope.querySelectorAll('[data-module=\"tna-gallery\"]');\n $galleries.forEach(($gallery) => {\n new Gallery($gallery);\n });\n\n const $globalHeader = $scope.querySelector(\n '[data-module=\"tna-global-header\"]',\n );\n if ($globalHeader) {\n new GlobalHeader($globalHeader);\n }\n\n const $header = $scope.querySelector('[data-module=\"tna-header\"]');\n if ($header) {\n new Header($header);\n }\n\n const $pictures = $scope.querySelectorAll('[data-module=\"tna-picture\"]');\n $pictures.forEach(($picture) => {\n new Picture($picture);\n });\n\n const $sidebar = $scope.querySelector('[data-module=\"tna-sidebar-sections\"]');\n if ($sidebar) {\n const { scrollTopThreshold, disableHighlightSize } = $sidebar.dataset;\n new Sidebar($sidebar, { scrollTopThreshold, disableHighlightSize });\n }\n\n const $skipLinks = $scope.querySelectorAll('[data-module=\"tna-skip-link\"]');\n $skipLinks.forEach(($skipLink) => {\n new SkipLink($skipLink);\n });\n\n const $tabs = $scope.querySelectorAll('[data-module=\"tna-tabs\"]');\n $tabs.forEach(($tabModule) => {\n new Tabs($tabModule);\n });\n\n const $textAreaItemisedRows = $scope.querySelectorAll(\n '[data-module=\"tna-textarea-itemised-rows\"]',\n );\n $textAreaItemisedRows.forEach(($textAreaWithItemisedRows) => {\n const { enhancedHint } = $textAreaWithItemisedRows.dataset;\n new TextAreaItemisedRows($textAreaWithItemisedRows, { enhancedHint });\n });\n\n const $textInputPasswords = $scope.querySelectorAll(\n '[data-module=\"tna-text-input-password\"]',\n );\n $textInputPasswords.forEach(($textInputPassword) => {\n new TextInputPassword($textInputPassword);\n });\n\n window.matchMedia(\"print\").addEventListener(\"change\", (evt) => {\n if (evt.matches) {\n $scope\n .querySelectorAll(\".tna-details__details:not([open])\")\n .forEach(($element) => {\n $element.setAttribute(\"open\", \"\");\n $element.dataset.wasClosed = \"\";\n });\n $scope\n .querySelectorAll(\n \".tna-accordion__content[hidden], .tna-picture__transcript[hidden]\",\n )\n .forEach(($element) => {\n $element.removeAttribute(\"hidden\");\n $element.dataset.wasClosed = \"\";\n });\n } else {\n $scope\n .querySelectorAll(\".tna-details__details[data-was-closed]\")\n .forEach(($element) => {\n $element.removeAttribute(\"open\");\n delete $element.dataset.wasClosed;\n });\n $scope\n .querySelectorAll(\n \".tna-accordion__content[data-was-closed], .tna-picture__transcript[data-was-closed]\",\n )\n .forEach(($element) => {\n $element.setAttribute(\"hidden\", \"\");\n $element.dataset.wasClosed = \"\";\n });\n }\n });\n};\n\nexport {\n initAll,\n Cookies,\n Accordion,\n Breadcrumbs,\n CodeBlock,\n CookieBanner,\n DateInputProgressive,\n ErrorSummary,\n FileInputDroppable,\n Footer,\n Gallery,\n GlobalHeader,\n Header,\n Picture,\n Sidebar,\n SkipLink,\n Tabs,\n TextInputPassword,\n TextAreaItemisedRows,\n checkTableForScroll,\n updateTimeElement,\n};\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","import { checkTableForScroll } from \"../../lib/helpers.mjs\";\n\nexport class Accordion {\n constructor($module) {\n this.$module = $module;\n this.$items = $module && $module.querySelectorAll(\".tna-accordion__item\");\n if (!this.$module || !this.$items) {\n return;\n }\n\n this.allowMultipleItemsOpen =\n this.$module.dataset.singleOpenItem !== \"true\";\n\n this.$items.forEach(($item) => this.initItem($item));\n this.initState();\n\n this.$toggleAllButton = this.$module.querySelector(\n \".tna-accordion__toggle-all\",\n );\n if (this.$toggleAllButton) {\n this.syncToggleAllButton();\n this.$toggleAllButton.removeAttribute(\"hidden\");\n this.$toggleAllButton.addEventListener(\"click\", () => {\n if (this.isAllOpen()) {\n this.$items.forEach(($item) => this.closeItem($item));\n } else {\n this.$items.forEach(($item) => this.openItem($item));\n }\n this.syncToggleAllButton();\n });\n }\n }\n\n initItem($item) {\n const $heading = $item.querySelector(\".tna-accordion__heading\");\n const $content = $item.querySelector(\".tna-accordion__body\");\n\n if (!$heading || !$content) {\n return;\n }\n\n $item.classList.add(\"tna-accordion__details\");\n $item.classList.remove(\"tna-accordion__item\");\n\n $heading.removeAttribute(\"class\");\n\n $content.classList.add(\"tna-accordion__content\");\n $content.classList.remove(\"tna-accordion__body\");\n $content.setAttribute(\"hidden\", \"\");\n\n const $headingButton = document.createElement(\"button\");\n $headingButton.classList.add(\"tna-accordion__summary\");\n $headingButton.setAttribute(\"type\", \"button\");\n $headingButton.setAttribute(\"aria-controls\", $content.id);\n $headingButton.innerText = $heading.innerText;\n $heading.innerText = \"\";\n $heading.appendChild($headingButton);\n\n $headingButton.addEventListener(\"click\", () => {\n const isOpen = $headingButton.getAttribute(\"aria-expanded\") === \"true\";\n if (isOpen) {\n this.closeItem($item);\n } else {\n this.openItem($item);\n }\n });\n }\n\n initState() {\n this.$items.forEach(($item) => {\n if ($item.dataset.isopen === \"true\") {\n this.openItem($item);\n } else {\n this.closeItem($item);\n }\n $item.removeAttribute(\"data-isopen\");\n });\n }\n\n openItem($item) {\n if (!this.allowMultipleItemsOpen) {\n this.closeAllItemsExcept($item);\n }\n const $headingButton = $item.querySelector(\".tna-accordion__summary\");\n const $content = $item.querySelector(\".tna-accordion__content\");\n $headingButton.setAttribute(\"aria-expanded\", \"true\");\n $headingButton.setAttribute(\n \"aria-label\",\n `${$headingButton.innerText.trim()}, Hide this section`,\n );\n $content.removeAttribute(\"hidden\");\n // $content.setAttribute(\"tabindex\", \"0\");\n this.syncToggleAllButton();\n\n const $tableWrapper = $content.querySelectorAll(\".tna-table-wrapper\");\n if ($tableWrapper) {\n $tableWrapper.forEach(($wrapper) => {\n checkTableForScroll($wrapper);\n });\n }\n }\n\n closeItem($item) {\n const $headingButton = $item.querySelector(\".tna-accordion__summary\");\n const $content = $item.querySelector(\".tna-accordion__content\");\n $headingButton.setAttribute(\"aria-expanded\", \"false\");\n $headingButton.setAttribute(\n \"aria-label\",\n `${$headingButton.innerText.trim()}, Show this section`,\n );\n $content.setAttribute(\"hidden\", \"\");\n // $content.setAttribute(\"tabindex\", \"-1\");\n this.syncToggleAllButton();\n }\n\n closeAllItemsExcept($excludeItem) {\n Array.from(this.$items)\n .filter(\n ($item) =>\n $item.querySelector(\".tna-accordion__summary\") !== $excludeItem &&\n $item\n .querySelector(\".tna-accordion__summary\")\n .getAttribute(\"aria-expanded\") === \"true\",\n )\n .forEach(($item) => this.closeItem($item));\n }\n\n isAllOpen() {\n return Array.from(this.$items).every(\n ($item) =>\n $item\n .querySelector(\".tna-accordion__summary\")\n .getAttribute(\"aria-expanded\") === \"true\",\n );\n }\n\n syncToggleAllButton() {\n if (this.$toggleAllButton) {\n if (this.isAllOpen()) {\n this.$toggleAllButton.innerText =\n this.$toggleAllButton.dataset.closeAllLabel || \"Hide all sections\";\n } else {\n this.$toggleAllButton.innerText =\n this.$toggleAllButton.dataset.openAllLabel || \"Show all sections\";\n }\n }\n }\n}\n","import uuidv4 from \"../../lib/uuid.mjs\";\n\nexport class Breadcrumbs {\n constructor($module) {\n this.$module = $module;\n this.$breadcrumbsList =\n $module && $module.querySelector(\".tna-breadcrumbs__list\");\n this.$breadcrumbs =\n $module &&\n this.$breadcrumbsList &&\n $module.querySelectorAll(\".tna-breadcrumbs__item\");\n\n if (!this.$module || !this.$breadcrumbsList || !this.$breadcrumbs) {\n return;\n }\n\n if (\n /* eslint-disable-next-line no-magic-numbers */\n this.$breadcrumbs.length > 2 &&\n !this.$module.classList.contains(\"tna-breadcrumbs--no-collapse\")\n ) {\n this.init();\n }\n }\n\n init() {\n const uniqueId = `tna-breadcrumbs-${uuidv4()}`;\n const $expandable = document.createElement(\"li\");\n $expandable.classList.add(\n \"tna-breadcrumbs__item\",\n \"tna-breadcrumbs__item--expandable\",\n );\n $expandable.style.display = \"none\";\n\n const $expandButton = document.createElement(\"button\");\n $expandButton.classList.add(\"tna-breadcrumbs__link\");\n $expandButton.innerHTML =\n \"<span class='tna-!--visually-hidden'>Expand breadcrumbs</span>&hellip;\";\n $expandButton.setAttribute(\"type\", \"button\");\n $expandButton.setAttribute(\"aria-expanded\", \"false\");\n $expandButton.setAttribute(\"aria-controls\", uniqueId);\n $expandButton.addEventListener(\"click\", () => {\n this.$module.classList.remove(\"tna-breadcrumbs--collapsed\");\n $expandable.remove();\n this.$module.setAttribute(\"tabindex\", \"0\");\n this.$module.focus();\n this.$module.addEventListener(\n \"blur\",\n () => {\n this.$module.removeAttribute(\"tabindex\");\n },\n { once: true },\n );\n });\n $expandable.appendChild($expandButton);\n\n this.$breadcrumbsList.setAttribute(\"id\", uniqueId);\n this.$breadcrumbsList.insertBefore(\n $expandable,\n /* eslint-disable-next-line no-magic-numbers */\n this.$breadcrumbs[this.$breadcrumbs.length - 2].nextSibling,\n );\n\n this.$module.classList.add(\"tna-breadcrumbs--collapsed\");\n }\n}\n","export class CodeBlock {\n constructor($module) {\n this.$module = $module;\n this.$code = this.$module.querySelector(\"pre code\");\n this.$copyButton = this.$module.querySelector(\".tna-code-block__copy\");\n\n if (\n !this.$module ||\n !this.$code ||\n !this.$copyButton ||\n !navigator.clipboard\n ) {\n return;\n }\n\n this.$copyButton.removeAttribute(\"hidden\");\n this.$module.classList.add(\"tna-code-block__copyable\");\n\n this.$copyButton.addEventListener(\"click\", async () => {\n try {\n await navigator.clipboard.writeText(this.$code.innerText);\n this.$copyButton.innerText = \"Code copied\";\n } catch {\n // Continue regardless of error\n }\n });\n\n this.$copyButton.addEventListener(\"blur\", () => {\n this.$copyButton.innerText = \"Copy code\";\n });\n }\n}\n","import Cookies from \"../../lib/cookies.mjs\";\n\nexport { Cookies };\n\nexport class CookieBanner {\n constructor($module) {\n this.$module = $module;\n this.$acceptButton = $module && $module.querySelector('[value=\"accept\"]');\n this.$rejectButton = $module && $module.querySelector('[value=\"reject\"]');\n this.$prompt =\n $module && $module.querySelector(\".tna-cookie-banner__message--prompt\");\n this.$acceptedMessage =\n $module && $module.querySelector(\".tna-cookie-banner__message--accepted\");\n this.$rejectedMessage =\n $module && $module.querySelector(\".tna-cookie-banner__message--rejected\");\n this.$closeButtons = $module && $module.querySelectorAll('[value=\"close\"]');\n\n if (\n !this.$module ||\n !this.$acceptButton ||\n !this.$rejectButton ||\n !this.$prompt ||\n !this.$acceptedMessage ||\n !this.$rejectedMessage ||\n !this.$closeButtons\n ) {\n return;\n }\n\n this.cookies = new Cookies({ newInstance: true });\n\n this.cookiePreferencesSetKey =\n this.$module.dataset.preferencesKey || \"cookie_preferences_set\";\n\n if (!this.cookies.policiesCorrectOnInit) {\n this.cookies.delete(this.cookiePreferencesSetKey);\n }\n\n if (\n !this.cookies.exists(this.cookiePreferencesSetKey) ||\n !this.cookies.hasValue(this.cookiePreferencesSetKey, \"true\")\n ) {\n this.$module.removeAttribute(\"hidden\");\n\n this.$acceptButton.addEventListener(\"click\", () => this.accept());\n this.$rejectButton.addEventListener(\"click\", () => this.reject());\n }\n }\n\n accept() {\n this.$prompt.setAttribute(\"hidden\", \"\");\n this.complete();\n this.cookies.acceptAllPolicies();\n this.$acceptedMessage.removeAttribute(\"hidden\");\n this.$acceptedMessage.setAttribute(\"tabindex\", \"0\");\n this.$acceptedMessage.focus();\n this.$acceptedMessage.addEventListener(\"blur\", () => {\n this.$acceptedMessage.removeAttribute(\"tabindex\");\n });\n }\n\n reject() {\n this.$prompt.setAttribute(\"hidden\", \"\");\n this.complete();\n this.cookies.rejectAllPolicies();\n this.$rejectedMessage.removeAttribute(\"hidden\");\n this.$rejectedMessage.setAttribute(\"tabindex\", \"0\");\n this.$rejectedMessage.focus();\n this.$rejectedMessage.addEventListener(\"blur\", () => {\n this.$rejectedMessage.removeAttribute(\"tabindex\");\n });\n }\n\n complete() {\n this.cookies.set(this.cookiePreferencesSetKey, true);\n this.$closeButtons.forEach(($closeButton) => {\n $closeButton.addEventListener(\"click\", () => this.close());\n });\n }\n\n close() {\n this.$module.setAttribute(\"hidden\", \"\");\n }\n}\n","import Cookies from \"../../lib/cookies.mjs\";\n\nexport { Cookies };\n\nexport class DateInputProgressive {\n constructor($module) {\n this.$module = $module;\n this.$yearWrapper =\n $module && $module.querySelector(\".tna-date-input__item--year\");\n this.$yearInput =\n this.$yearWrapper && this.$yearWrapper.querySelector(\"input\");\n this.$monthWrapper =\n $module && $module.querySelector(\".tna-date-input__item--month\");\n this.$monthInput =\n this.$monthWrapper && this.$monthWrapper.querySelector(\"input\");\n this.$dayWrapper =\n $module && $module.querySelector(\".tna-date-input__item--day\");\n this.$dayInput =\n this.$dayWrapper && this.$dayWrapper.querySelector(\"input\");\n\n if (!this.$module) {\n return;\n }\n\n this.update();\n window.addEventListener(\"pageshow\", () => this.update());\n\n if (this.$yearInput) {\n this.$yearInput.addEventListener(\"keyup\", () => this.update());\n this.$yearInput.addEventListener(\"change\", () => this.update());\n }\n if (this.$monthInput) {\n this.$monthInput.addEventListener(\"keyup\", () => this.update());\n this.$monthInput.addEventListener(\"change\", () => this.update());\n }\n if (this.$dayInput) {\n this.$dayInput.addEventListener(\"keyup\", () => this.update());\n this.$dayInput.addEventListener(\"change\", () => this.update());\n }\n }\n\n update() {\n if (this.isValidYear()) {\n this.showMonth();\n if (this.isValidMonth()) {\n this.showDay();\n } else {\n this.hideDay();\n }\n } else {\n this.hideMonth();\n this.hideDay();\n }\n }\n\n isValidYear() {\n if (!this.$yearInput) {\n return true;\n }\n const yearValue = parseInt(this.$yearInput.value.trim(), 10);\n /* eslint-disable-next-line no-magic-numbers */\n return !isNaN(this.$yearInput.value) && !isNaN(yearValue) && yearValue > 0;\n }\n\n isValidMonth() {\n if (!this.$monthInput) {\n return true;\n }\n const monthRawValue = this.$monthInput.value.trim();\n const monthIntValue = parseInt(monthRawValue, 10);\n const validMonthStrings = [\n \"january\",\n \"february\",\n \"march\",\n \"april\",\n \"may\",\n \"june\",\n \"july\",\n \"august\",\n \"september\",\n \"october\",\n \"november\",\n \"december\",\n \"jan\",\n \"feb\",\n \"mar\",\n \"apr\",\n \"jun\",\n \"jul\",\n \"aug\",\n \"sep\",\n \"oct\",\n \"nov\",\n \"dec\",\n ];\n return (\n (!isNaN(this.$monthInput.value) &&\n !isNaN(monthIntValue) &&\n /* eslint-disable-next-line no-magic-numbers */\n monthIntValue > 0 &&\n /* eslint-disable-next-line no-magic-numbers */\n monthIntValue <= 12) ||\n validMonthStrings.includes(monthRawValue.toLowerCase())\n );\n }\n\n showMonth() {\n if (this.$monthWrapper) {\n this.$monthWrapper.removeAttribute(\"hidden\");\n }\n }\n\n hideMonth() {\n if (this.$monthWrapper) {\n this.$monthWrapper.setAttribute(\"hidden\", \"\");\n }\n }\n\n showDay() {\n if (this.$dayWrapper) {\n this.$dayWrapper.removeAttribute(\"hidden\");\n }\n }\n\n hideDay() {\n if (this.$dayWrapper) {\n this.$dayWrapper.setAttribute(\"hidden\", \"\");\n }\n }\n}\n","export class ErrorSummary {\n constructor($module) {\n this.$module = $module;\n }\n\n init() {\n if (!this.$module) {\n return;\n }\n\n const disableAutoFocus =\n this.$module.dataset.disableAutofocus === \"true\" || false;\n\n if (!disableAutoFocus) {\n this.setFocus(this.$module);\n }\n\n this.$module.addEventListener(\"click\", (event) => this.handleClick(event));\n }\n\n /* eslint-disable-next-line class-methods-use-this */\n setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute(\"tabindex\");\n\n if (!isFocusable) {\n $element.setAttribute(\"tabindex\", \"-1\");\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n options.onBlur?.call($element);\n\n if (!isFocusable) {\n $element.removeAttribute(\"tabindex\");\n }\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener(\"blur\", onBlur, { once: true });\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener(\"focus\", onFocus, { once: true });\n\n // Focus element\n options.onBeforeFocus?.call($element);\n $element.focus();\n }\n\n handleClick(event) {\n const $target = event.target;\n if ($target && this.focusTarget($target)) {\n event.preventDefault();\n }\n }\n\n /* eslint-disable-next-line class-methods-use-this */\n getFragmentFromUrl(url) {\n if (!url.includes(\"#\")) {\n return null;\n }\n\n return url.split(\"#\").pop();\n }\n\n focusTarget($target) {\n // If the element that was clicked was not a link, return early\n if (!($target instanceof HTMLAnchorElement)) {\n return false;\n }\n\n const inputId = this.getFragmentFromUrl($target.href);\n if (!inputId) {\n return false;\n }\n\n const $input = document.getElementById(inputId);\n if (!$input) {\n return false;\n }\n\n const $legendOrLabel = this.getAssociatedLegendOrLabel($input);\n if (!$legendOrLabel) {\n return false;\n }\n\n // Scroll the legend or label into view *before* calling focus on the input\n // To avoid extra scrolling in browsers that don't support `preventScroll`\n // (which at time of writing is most of them...)\n $legendOrLabel.scrollIntoView();\n $input.focus({ preventScroll: true });\n\n return true;\n }\n\n /**\n * Get associated legend or label\n *\n * Returns the first element that exists from this list:\n *\n * - The `<legend>` associated with the closest `<fieldset>` ancestor, as long\n * as the top of it is no more than half a viewport height away from the\n * bottom of the input\n * - The first `<label>` that is associated with the input using for=\"inputId\"\n * - The closest parent `<label>`\n *\n * @private\n * @param {Element} $input - The input\n * @returns {Element | null} Associated legend or label, or null if no\n * associated legend or label can be found\n */\n /* eslint-disable-next-line class-methods-use-this */\n getAssociatedLegendOrLabel($input) {\n const $fieldset = $input.closest(\"fieldset\");\n\n if ($fieldset) {\n const $legends = $fieldset.getElementsByTagName(\"legend\");\n\n if ($legends.length) {\n const [$candidateLegend] = $legends;\n\n // If the input type is radio or checkbox, always use the legend if\n // There is one.\n if (\n $input instanceof HTMLInputElement &&\n ($input.type === \"checkbox\" || $input.type === \"radio\")\n ) {\n return $candidateLegend;\n }\n\n // For other input types, only scroll to the fieldset’s legend (instead\n // Of the label associated with the input) if the input would end up in\n // The top half of the screen.\n //\n // This should avoid situations where the input either ends up off the\n // Screen, or obscured by a software keyboard.\n const legendTop = $candidateLegend.getBoundingClientRect().top;\n const inputRect = $input.getBoundingClientRect();\n\n // If the browser doesn't support Element.getBoundingClientRect().height\n // Or window.innerHeight (like IE8), bail and just link to the label.\n if (inputRect.height && window.innerHeight) {\n const inputBottom = inputRect.top + inputRect.height;\n\n /* eslint-disable no-magic-numbers */\n if (inputBottom - legendTop < window.innerHeight / 2) {\n return $candidateLegend;\n }\n }\n }\n }\n\n return (\n document.querySelector(`label[for='${$input.getAttribute(\"id\")}']`) ??\n $input.closest(\"label\")\n );\n }\n}\n","export class FileInputDroppable {\n constructor($module) {\n this.$module = $module;\n this.$body = $module && $module.querySelector(\".tna-form-item__body\");\n this.$input = this.$body && this.$body.querySelector(\".tna-file-input\");\n\n if (!this.$module || !this.$body || !this.$input) {\n return;\n }\n\n this.init();\n }\n\n init() {\n this.acceptMutltipleFiles = this.$input.hasAttribute(\"multiple\");\n\n this.$droppableArea = document.createElement(\"div\");\n this.$droppableArea.classList.add(\n \"tna-file-input__droppable\",\n \"tna-file-input__droppable--empty\",\n );\n this.$body.insertBefore(this.$droppableArea, this.$input);\n this.$droppableArea.appendChild(this.$input);\n\n this.$pseudoSelectFileText = document.createElement(\"span\");\n this.$pseudoSelectFileText.setAttribute(\"aria-live\", \"polite\");\n this.$pseudoSelectFileText.classList.add(\n \"tna-file-input__droppable-status\",\n );\n\n let fileText = \"file\";\n if (this.acceptMutltipleFiles) {\n fileText += \"s\";\n }\n\n this.$pseudoSelectFileText.textContent = `No ${fileText} selected`;\n this.$droppableArea.appendChild(this.$pseudoSelectFileText);\n\n const $droppableButtons = document.createElement(\"div\");\n $droppableButtons.classList.add(\n \"tna-button-group\",\n \"tna-button-group--small\",\n \"tna-!--margin-top-s\",\n \"tna-file-input__droppable-buttons\",\n );\n this.$droppableArea.appendChild($droppableButtons);\n\n const $pseudoSelectFileButton = document.createElement(\"span\");\n $pseudoSelectFileButton.classList.add(\"tna-button\");\n $pseudoSelectFileButton.textContent = `Choose ${fileText}`;\n $droppableButtons.appendChild($pseudoSelectFileButton);\n\n const $pseudoDropFileButton = document.createElement(\"span\");\n $pseudoDropFileButton.textContent = `or drop ${fileText}`;\n $droppableButtons.appendChild($pseudoDropFileButton);\n\n this.$droppableAreaAriaLabel = document.createElement(\"span\");\n this.$droppableAreaAriaLabel.classList.add(\"tna-visually-hidden\");\n this.$droppableAreaAriaLabel.setAttribute(\"aria-live\", \"assertive\");\n this.$droppableArea.appendChild(this.$droppableAreaAriaLabel);\n\n this.$input.addEventListener(\"dragenter\", (event) =>\n this.showDropTarget(event),\n );\n this.$input.addEventListener(\"dragleave\", () => this.hideDropTarget());\n this.$input.addEventListener(\"dragend\", () => this.hideDropTarget());\n this.$input.addEventListener(\"change\", () => this.onChange());\n this.$input.addEventListener(\"drop\", () => this.onChange());\n }\n\n /* eslint-disable-next-line class-methods-use-this */\n isContainingFiles(dataTransfer) {\n const hasNoTypesInfo = !dataTransfer.types.length;\n const isDraggingFiles = dataTransfer.types.some((type) => type === \"Files\");\n return hasNoTypesInfo || isDraggingFiles;\n }\n\n showDropTarget(event, updateAriaLabel = true) {\n if (event.dataTransfer && this.isContainingFiles(event.dataTransfer)) {\n let classToAdd = \"tna-file-input__droppable--over\";\n if (event.dataTransfer.items.length) {\n classToAdd = \"tna-file-input__droppable--over-multiple\";\n }\n this.$droppableArea.classList.add(classToAdd);\n\n if (updateAriaLabel) {\n this.$droppableAreaAriaLabel.textContent = \"Entered drop zone\";\n }\n }\n }\n\n hideDropTarget(updateAriaLabel = true) {\n this.$droppableArea.classList.remove(\n \"tna-file-input__droppable--over\",\n \"tna-file-input__droppable--over-multiple\",\n );\n if (updateAriaLabel) {\n this.$droppableAreaAriaLabel.textContent = \"Left drop zone\";\n }\n }\n\n onChange() {\n const { files } = this.$input;\n if (this.acceptMutltipleFiles) {\n if (files.length) {\n let fileText = \"file\";\n /* eslint-disable-next-line no-magic-numbers */\n if (files.length > 1) {\n fileText += \"s\";\n }\n const textContent = `${files.length} ${fileText} selected`;\n this.$pseudoSelectFileText.textContent = textContent;\n } else {\n this.$pseudoSelectFileText.textContent = `No files selected`;\n }\n } else {\n this.$pseudoSelectFileText.textContent =\n /* eslint-disable-next-line no-magic-numbers */\n files[0]?.name || `No file selected`;\n }\n if (files.length) {\n this.$droppableArea.classList.remove(\"tna-file-input__droppable--empty\");\n } else {\n this.$droppableArea.classList.add(\"tna-file-input__droppable--empty\");\n }\n this.hideDropTarget(false);\n }\n}\n","import Cookies from \"../../lib/cookies.mjs\";\n\nexport class Footer {\n constructor($module, themeCookieName = \"theme\") {\n this.$module = $module;\n this.$themeSelector =\n $module && $module.querySelector(\".tna-footer__theme-selector\");\n this.$themeSelectorNotice =\n $module && $module.querySelector(\".tna-footer__theme-selector-notice\");\n this.$themeSelectorEnableSettingsCookiesButton =\n this.$themeSelectorNotice &&\n this.$themeSelectorNotice.querySelector(\n \".tna-footer__theme-selector-enable-settings-cookies\",\n );\n this.$tnaTemplate = document.querySelector(\".tna-template\");\n\n if (\n !this.$module ||\n !this.$themeSelector ||\n !this.$themeSelectorNotice ||\n !this.$themeSelectorEnableSettingsCookiesButton ||\n !this.$tnaTemplate\n ) {\n return;\n }\n\n this.themeCookieName = themeCookieName;\n\n this.init();\n }\n\n init() {\n this.currentTheme = this.$themeSelector.dataset.themeOnLoad;\n\n this.cookies = new Cookies();\n\n this.$themeSelectorButtons = this.$themeSelector.querySelectorAll(\n \"button.tna-footer__theme-selector-button[value]\",\n );\n\n Array.from(this.$themeSelectorButtons).forEach(($themeSelectorButton) => {\n $themeSelectorButton.addEventListener(\"click\", (event) => {\n const $button = event.target;\n this.setTheme($button.value);\n this.selectThemeSelectorButton($button);\n });\n });\n\n this.$themeSelectorEnableSettingsCookiesButton.addEventListener(\n \"click\",\n () => {\n this.cookies.acceptPolicy(\"settings\");\n },\n );\n\n this.showThemeSelector();\n this.cookies.on(\"changePolicy\", (data) => {\n if (Object.hasOwn(data, \"settings\")) {\n if (data.settings === true) {\n this.cookies.set(this.themeCookieName, this.currentTheme);\n this.$themeSelectorNotice.setAttribute(\"hidden\", \"\");\n } else {\n this.cookies.delete(this.themeCookieName);\n this.$themeSelectorNotice.removeAttribute(\"hidden\");\n }\n }\n });\n }\n\n showThemeSelector() {\n this.$themeSelector.removeAttribute(\"hidden\");\n if (this.cookies.exists(this.themeCookieName)) {\n const $currentThemeButton = Array.from(this.$themeSelectorButtons).find(\n ($button) => $button.value === this.cookies.get(this.themeCookieName),\n );\n if ($currentThemeButton) {\n this.selectThemeSelectorButton($currentThemeButton);\n }\n }\n if (!this.cookies.isPolicyAccepted(\"settings\")) {\n this.$themeSelectorNotice.removeAttribute(\"hidden\");\n }\n }\n\n setTheme(theme) {\n if (theme === \"light\") {\n this.$tnaTemplate.classList.remove(\n \"tna-template--system-theme\",\n \"tna-template--dark-theme\",\n );\n } else if (theme === \"dark\") {\n this.$tnaTemplate.classList.remove(\"tna-template--system-theme\");\n this.$tnaTemplate.classList.add(`tna-template--dark-theme`);\n } else if (theme === \"system\") {\n this.$tnaTemplate.classList.remove(\"tna-template--dark-theme\");\n this.$tnaTemplate.classList.add(`tna-template--system-theme`);\n } else {\n return;\n }\n this.currentTheme = theme;\n if (this.cookies.isPolicyAccepted(\"settings\")) {\n this.cookies.set(this.themeCookieName, this.currentTheme);\n } else {\n this.$themeSelectorNotice.removeAttribute(\"hidden\");\n }\n }\n\n selectThemeSelectorButton($selectedButton) {\n Array.from(this.$themeSelectorButtons).forEach(($button) => {\n if ($button.value === $selectedButton.value) {\n $button.classList.remove(\"tna-button--plain\");\n $button.setAttribute(\"aria-current\", true);\n } else {\n $button.classList.add(\"tna-button--plain\");\n $button.removeAttribute(\"aria-current\");\n }\n });\n }\n}\n","export class Gallery {\n constructor($module) {\n this.$module = $module;\n this.$itemsContainer =\n $module && $module.querySelector(\".tna-gallery__items\");\n this.$items =\n this.$itemsContainer &&\n this.$itemsContainer.querySelectorAll(\".tna-gallery__item\");\n this.$navigation =\n $module && $module.querySelector(\".tna-gallery__navigation\");\n this.$navigationItems =\n this.$navigation &&\n $module.querySelectorAll(\".tna-gallery__navigation-item\");\n this.$navigationButtons =\n $module && $module.querySelector(\".tna-gallery__navigation-buttons\");\n\n if (\n !this.$module ||\n !this.$itemsContainer ||\n !this.$items ||\n /* eslint-disable-next-line no-magic-numbers */\n this.$items.length < 2 ||\n !this.$navigation ||\n !this.$navigationItems ||\n !this.$navigationButtons\n ) {\n return;\n }\n\n this.$module.classList.add(\"tna-gallery--interactive\");\n\n this.$navigationButtonPrev = this.$navigationButtons.querySelector(\n \".tna-gallery__navigation-prev\",\n );\n this.$navigationButtonNext = this.$navigationButtons.querySelector(\n \".tna-gallery__navigation-next\",\n );\n\n this.setup();\n /* eslint-disable-next-line no-magic-numbers */\n this.currentId = this.$items[0].id;\n this.showItem(this.currentId);\n }\n\n setup() {\n this.$items.forEach(($item) => {\n $item.setAttribute(\"hidden\", \"\");\n $item.setAttribute(\"aria-hidden\", \"true\");\n $item\n .querySelector(\".tna-gallery__item-header\")\n ?.setAttribute(\"aria-hidden\", \"true\");\n });\n this.$navigation.removeAttribute(\"hidden\");\n this.$navigationItems.forEach(($item) => {\n $item.addEventListener(\"click\", () => {\n this.showItem($item.getAttribute(\"aria-controls\"));\n this.$itemsContainer.setAttribute(\"tabindex\", \"0\");\n this.$itemsContainer.focus();\n });\n });\n this.$module.addEventListener(\"keydown\", (event) => {\n let preventDefaultKeyAction = false;\n switch (event.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n this.showPreviousItem();\n preventDefaultKeyAction = true;\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n this.showNextItem();\n preventDefaultKeyAction = true;\n break;\n case \"Home\":\n this.showFirstItem();\n preventDefaultKeyAction = true;\n break;\n case \"End\":\n this.showLastItem();\n preventDefaultKeyAction = true;\n break;\n default:\n break;\n }\n if (preventDefaultKeyAction) {\n event.stopPropagation();\n event.preventDefault();\n }\n });\n\n this.$navigationButtons?.removeAttribute(\"hidden\");\n this.$navigationButtonPrev?.addEventListener(\"click\", () => {\n this.showPreviousItem();\n });\n this.$navigationButtonNext?.addEventListener(\"click\", () => {\n this.showNextItem();\n });\n\n this.$liveRegion = document.createElement(\"div\");\n this.$liveRegion.setAttribute(\"aria-live\", \"polite\");\n this.$liveRegion.setAttribute(\"aria-atomic\", \"true\");\n this.$liveRegion.setAttribute(\"class\", \"tna-gallery__item-header\");\n this.$itemsContainer.prepend(this.$liveRegion);\n this.$itemsContainer.classList.add(\"tna-gallery__items--hide-item-titles\");\n this.$itemsContainer.addEventListener(\"blur\", () =>\n this.$itemsContainer.removeAttribute(\"tabindex\"),\n );\n }\n\n showItem(id) {\n this.$items.forEach(($item) => {\n if (id && $item.id === id) {\n $item.removeAttribute(\"hidden\");\n $item.removeAttribute(\"aria-hidden\");\n } else {\n $item.setAttribute(\"hidden\", \"\");\n $item.setAttribute(\"aria-hidden\", \"true\");\n }\n });\n this.$navigationItems.forEach(($item) => {\n if (id) {\n if ($item.getAttribute(\"aria-controls\") === id) {\n $item.setAttribute(\"aria-current\", \"true\");\n } else {\n $item.setAttribute(\"aria-current\", \"false\");\n }\n } else {\n $item.setAttribute(\"aria-current\", \"false\");\n }\n });\n this.currentId = id;\n /* eslint-disable-next-line no-magic-numbers */\n this.$liveRegion.textContent = `Image ${this.getCurrentItemIndex() + 1} of ${this.$items.length}`;\n }\n\n getCurrentItemIndex() {\n return Array.from(this.$items).findIndex(\n ($item) => $item.id === this.currentId,\n );\n }\n\n showPreviousItem() {\n /* eslint-disable-next-line no-magic-numbers */\n let nextIndexToShow = this.getCurrentItemIndex() - 1;\n /* eslint-disable-next-line no-magic-numbers */\n if (nextIndexToShow < 0) {\n /* eslint-disable-next-line no-magic-numbers */\n nextIndexToShow = this.$items.length - 1;\n }\n this.showItem(this.$items[nextIndexToShow].id);\n }\n\n showNextItem() {\n /* eslint-disable-next-line no-magic-numbers */\n let nextIndexToShow = this.getCurrentItemIndex() + 1;\n if (nextIndexToShow >= this.$items.length) {\n /* eslint-disable-next-line no-magic-numbers */\n nextIndexToShow = 0;\n }\n this.showItem(this.$items[nextIndexToShow].id);\n }\n\n showFirstItem() {\n /* eslint-disable-next-line no-magic-numbers */\n this.showItem(this.$items[0].id);\n }\n\n showLastItem() {\n /* eslint-disable-next-line no-magic-numbers */\n this.showItem(this.$items[this.$items.length - 1].id);\n }\n}\n","export class GlobalHeader {\n constructor($module) {\n this.$module = $module;\n this.$toggleButton =\n $module && $module.querySelector(\".tna-global-header__navigation-button\");\n this.$navigation =\n $module &&\n $module.querySelector(\".tna-global-header__navigation-wrapper\");\n this.$topNavigation =\n $module &&\n $module.querySelector(\".tna-global-header__top-navigation-wrapper\");\n this.$links =\n $module &&\n ((this.$navigation &&\n this.$navigation.querySelectorAll(\"[tabindex='0']\")) ||\n (this.$topNavigation &&\n this.$topNavigation.querySelectorAll(\"[tabindex='0']\")));\n this.menuOpened = false;\n this.mql = window.matchMedia(\"(max-width: 48em)\");\n\n if (\n !this.$module ||\n !this.$toggleButton ||\n (!this.$navigation && !this.$topNavigation)\n ) {\n return;\n }\n\n this.$toggleButton.removeAttribute(\"hidden\");\n this.syncState();\n this.$toggleButton.addEventListener(\"click\", () =>\n this.handleToggleNavigation(),\n );\n if (\"addEventListener\" in this.mql) {\n this.mql.addEventListener(\"change\", () => this.syncState());\n } else {\n this.mql.addListener(() => this.syncState());\n }\n\n this.$module.addEventListener(\"keyup\", (event) => {\n if (event.code === \"Escape\" && this.mql.matches && this.menuOpened) {\n this.menuOpened = false;\n this.syncState();\n this.$toggleButton.focus();\n }\n });\n }\n\n handleToggleNavigation() {\n this.menuOpened = !this.menuOpened;\n this.syncState();\n }\n\n syncState() {\n if (this.mql.matches) {\n if (this.menuOpened) {\n this.show();\n } else {\n this.hide();\n }\n } else {\n this.show();\n }\n }\n\n hide() {\n if (this.$navigation) {\n this.$navigation.hidden = true;\n this.$navigation.setAttribute(\"aria-hidden\", \"true\");\n }\n if (this.$topNavigation) {\n this.$topNavigation.hidden = true;\n this.$topNavigation.setAttribute(\"aria-hidden\", \"true\");\n }\n this.$toggleButton.setAttribute(\"aria-expanded\", \"false\");\n this.$toggleButton.setAttribute(\"title\", \"Open menu\");\n this.$toggleButton.classList.remove(\n \"tna-global-header__navigation-button--opened\",\n );\n /* eslint-disable-next-line no-magic-numbers */\n for (let index = 0; index < this.$links.length; index += 1) {\n this.$links[index].setAttribute(\"tabindex\", \"-1\");\n }\n }\n\n show() {\n if (this.$navigation) {\n this.$navigation.hidden = false;\n this.$navigation.setAttribute(\"aria-hidden\", \"false\");\n }\n if (this.$topNavigation) {\n this.$topNavigation.hidden = false;\n this.$topNavigation.setAttribute(\"aria-hidden\", \"false\");\n }\n this.$toggleButton.setAttribute(\"aria-expanded\", \"true\");\n this.$toggleButton.setAttribute(\"title\", \"Close menu\");\n this.$toggleButton.classList.add(\n \"tna-global-header__navigation-button--opened\",\n );\n /* eslint-disable-next-line no-magic-numbers */\n for (let index = 0; index < this.$links.length; index += 1) {\n this.$links[index].setAttribute(\"tabindex\", \"0\");\n }\n }\n}\n","export class Header {\n constructor($module) {\n this.$module = $module;\n this.$toggleButton =\n $module && $module.querySelector(\".tna-header__navigation-button\");\n this.$navigation =\n $module && $module.querySelector(\".tna-header__navigation\");\n this.$links =\n $module &&\n this.$navigation &&\n this.$navigation.querySelectorAll(\"[tabindex='0']\");\n this.menuOpened = false;\n this.mql = window.matchMedia(\"(max-width: 48em)\");\n\n if (!this.$module || !this.$toggleButton || !this.$navigation) {\n return;\n }\n\n this.$toggleButton.removeAttribute(\"hidden\");\n this.syncState();\n this.$toggleButton.addEventListener(\"click\", () =>\n this.handleToggleNavigation(),\n );\n if (\"addEventListener\" in this.mql) {\n this.mql.addEventListener(\"change\", () => this.syncState());\n } else {\n this.mql.addListener(() => this.syncState());\n }\n\n this.$module.addEventListener(\"keyup\", (event) => {\n if (event.code === \"Escape\" && this.menuOpened && this.mql.matches) {\n this.menuOpened = false;\n this.syncState();\n this.$toggleButton.focus();\n }\n });\n }\n\n handleToggleNavigation() {\n this.menuOpened = !this.menuOpened;\n this.syncState();\n }\n\n syncState() {\n if (this.mql.matches) {\n if (this.menuOpened) {\n this.show();\n } else {\n this.hide();\n }\n } else {\n this.show();\n }\n }\n\n show() {\n this.$navigation.classList.add(\"tna-header__navigation--open\");\n this.$navigation.removeAttribute(\"hidden\");\n this.$navigation.setAttribute(\"aria-hidden\", \"false\");\n this.$toggleButton.setAttribute(\"aria-expanded\", \"true\");\n this.$toggleButton.setAttribute(\"title\", \"Close menu\");\n this.$toggleButton.classList.add(\"tna-header__navigation-button--opened\");\n\n /* eslint-disable-next-line no-magic-numbers */\n for (let index = 0; index < this.$links.length; index += 1) {\n this.$links[index].setAttribute(\"tabindex\", \"0\");\n }\n }\n\n hide() {\n this.$navigation.classList.remove(\"tna-header__navigation--open\");\n this.$navigation.hidden = true;\n this.$navigation.setAttribute(\"aria-hidden\", \"true\");\n this.$toggleButton.setAttribute(\"aria-expanded\", \"false\");\n this.$toggleButton.setAttribute(\"title\", \"Open menu\");\n this.$toggleButton.classList.remove(\n \"tna-header__navigation-button--opened\",\n );\n\n /* eslint-disable-next-line no-magic-numbers */\n for (let index = 0; index < this.$links.length; index += 1) {\n this.$links[index].setAttribute(\"tabindex\", \"-1\");\n }\n }\n}\n","import uuidv4 from \"../../lib/uuid.mjs\";\n\nexport class Picture {\n constructor($module) {\n this.$module = $module;\n this.$imageWrapper =\n $module && $module.querySelector(\".tna-picture__image-wrapper\");\n\n this.$transcriptToggle =\n this.$imageWrapper &&\n this.$imageWrapper.querySelector(\".tna-picture__toggle-transcript\");\n\n this.$transcript =\n $module && $module.querySelector(\".tna-picture__transcript\");\n this.transcriptOpened = false;\n\n if (\n !this.$module ||\n !this.$imageWrapper ||\n !this.$transcriptToggle ||\n !this.$transcript\n ) {\n return;\n }\n\n this.openLabel =\n this.$module.dataset.informationLabelOpen || \"Open transcript\";\n this.closeLabel =\n this.$module.dataset.informationLabelClose || \"Close transcript\";\n\n this.init();\n }\n\n init() {\n const uniqueId = `tna-picture-${uuidv4()}`;\n\n this.$transcriptToggle.removeAttribute(\"hidden\");\n this.$transcriptToggle.setAttribute(\"aria-controls\", uniqueId);\n this.$transcriptToggle.innerText = this.openLabel;\n this.$transcriptToggle.addEventListener(\"click\", () =>\n this.toggleTranscript(),\n );\n\n this.$transcript.setAttribute(\"id\", uniqueId);\n this.$transcript.setAttribute(\"hidden\", \"\");\n\n this.$transcript.addEventListener(\"keydown\", (event) => {\n switch (event.key) {\n case \"Escape\":\n this.toggleTranscript();\n this.$transcriptToggle.focus();\n break;\n default:\n break;\n }\n });\n }\n\n toggleTranscript() {\n this.transcriptOpened = !this.transcriptOpened;\n if (this.transcriptOpened) {\n this.$transcriptToggle.setAttribute(\"aria-expanded\", true);\n this.$transcriptToggle.innerText = this.closeLabel;\n this.$transcript.removeAttribute(\"hidden\");\n } else {\n this.$transcriptToggle.setAttribute(\"aria-expanded\", false);\n this.$transcriptToggle.innerText = this.openLabel;\n this.$transcript.setAttribute(\"hidden\", \"\");\n }\n }\n}\n","export class Sidebar {\n constructor($module, options = {}) {\n this.$module = $module;\n this.items =\n $module &&\n Array.from($module.querySelectorAll(\".tna-sidebar__item\"))\n .map(($item) => {\n const id = $item\n .querySelector(\".tna-sidebar__link[href^='#']\")\n .getAttribute(\"href\")\n /* eslint-disable-next-line no-magic-numbers */\n .substring(1);\n const target = document.getElementById(id);\n return {\n $item,\n id,\n target,\n };\n })\n .filter((item) => item.target);\n\n if (!this.$module || !this.items) {\n return;\n }\n\n /* eslint-disable-next-line no-magic-numbers */\n const { scrollTopThreshold = 0, disableHighlightSize = \"small\" } = options;\n this.scrollTopThreshold = scrollTopThreshold;\n this.disableHighlightSize = disableHighlightSize;\n\n this.init();\n }\n\n init() {\n this.breakpoints = {\n tiny:\n getComputedStyle(document.documentElement).getPropertyValue(\n \"--media-breakpoint-tiny\",\n ) || \"480px\",\n small:\n getComputedStyle(document.documentElement).getPropertyValue(\n \"--media-breakpoint-small\",\n ) || \"768px\",\n medium:\n getComputedStyle(document.documentElement).getPropertyValue(\n \"--media-breakpoint-medium\",\n ) || \"1024px\",\n };\n\n if (this.disableHighlightSize) {\n if (!Object.keys(this.breakpoints).includes(this.disableHighlightSize)) {\n throw new Error(\n `Invalid value for disableHighlightSize: ${this.disableHighlightSize}. Expected one of: ${Object.keys(this.breakpoints).join(\", \")}`,\n );\n }\n this.hideOnDevice = window.matchMedia(\n `(max-width: ${this.breakpoints[this.disableHighlightSize]})`,\n );\n } else {\n this.hideOnDevice = null;\n }\n\n this.currentItem = null;\n\n window.addEventListener(\"scroll\", () => this.highlightCurrentSection());\n window.addEventListener(\"resize\", () => this.highlightCurrentSection());\n this.highlightCurrentSection();\n }\n\n highlightCurrentSection() {\n if (this.hideOnDevice && this.hideOnDevice.matches) {\n this.items.forEach((item) => {\n item.$item.classList.remove(\"tna-sidebar__item--current\");\n });\n this.currentItem = null;\n return;\n }\n\n const $topItem = this.items.findLast(\n (item) =>\n Math.floor(item.target.getBoundingClientRect().top) <=\n this.scrollTopThreshold,\n );\n\n if ($topItem !== this.currentItem) {\n this.items.forEach((item) => {\n if ($topItem && item === $topItem) {\n this.currentItem = item;\n this.currentItem.$item.classList.add(\"tna-sidebar__item--current\");\n } else {\n item.$item.classList.remove(\"tna-sidebar__item--current\");\n }\n });\n }\n this.currentItem = $topItem || null;\n }\n}\n","export class SkipLink {\n linkedElementListener = false;\n\n constructor($module) {\n this.$module = $module;\n this.linkedElementId = $module.getAttribute(\"href\")?.split(\"#\").pop();\n this.$linkedElement =\n $module &&\n this.linkedElementId &&\n document.getElementById(this.linkedElementId);\n\n if (this.$module && this.$linkedElement) {\n this.$module.addEventListener(\"click\", () => this.focusLinkedElement());\n }\n }\n\n focusLinkedElement() {\n if (!this.$linkedElement.getAttribute(\"tabindex\")) {\n this.$linkedElement.setAttribute(\"tabindex\", \"-1\");\n this.$linkedElement.classList.add(\"tna-!--no-focus-style\");\n\n if (!this.linkedElementListener) {\n this.$linkedElement.addEventListener(\"blur\", () =>\n this.removeFocusProperties(),\n );\n this.linkedElementListener = true;\n }\n }\n\n this.$linkedElement.focus();\n }\n\n removeFocusProperties() {\n this.$linkedElement.removeAttribute(\"tabindex\");\n this.$linkedElement.classList.remove(\"tna-!--no-focus-style\");\n }\n}\n","export class Tabs {\n constructor($module) {\n this.$module = $module;\n this.$tabList = $module && $module.querySelector(\".tna-tabs__list\");\n this.$tabListItemLinks =\n $module &&\n this.$tabList &&\n this.$tabList.querySelectorAll(\".tna-tabs__button\");\n this.$tabItems = $module && $module.querySelectorAll(\".tna-tabs__item\");\n\n if (\n !this.$module ||\n !this.$tabList ||\n !this.$tabListItemLinks ||\n !this.$tabItems ||\n this.$tabListItemLinks.length !== this.$tabItems.length\n ) {\n return;\n }\n\n this.currentTabIndex = 0;\n this.init();\n }\n\n init() {\n this.$module.classList.add(\"tna-tabs--interactive\");\n this.$tabList.removeAttribute(\"hidden\");\n this.$tabListItemLinks.forEach(($tabListItemLink) => {\n const tabPanelID = $tabListItemLink.getAttribute(\"aria-controls\");\n $tabListItemLink.setAttribute(\"aria-selected\", false);\n const $tabPanel = document.getElementById(tabPanelID);\n $tabPanel.setAttribute(\"aria-labelledby\", $tabListItemLink.id);\n $tabPanel.setAttribute(\"role\", \"tabpanel\");\n $tabListItemLink.addEventListener(\n \"click\",\n (event) => this.handleItemLinkClick(event),\n true,\n );\n });\n this.switchTabByIndex(this.currentTabIndex);\n this.$module.addEventListener(\"keydown\", (event) =>\n this.handleItemLinkKeyDown(event),\n );\n }\n\n handleItemLinkClick(itemLinkClickEvent) {\n itemLinkClickEvent.preventDefault();\n const targetItem =\n itemLinkClickEvent.currentTarget.getAttribute(\"aria-controls\");\n this.switchTabByID(targetItem);\n }\n\n handleItemLinkKeyDown(itemLinkKeyDownEvent) {\n let preventDefaultKeyAction = false;\n switch (itemLinkKeyDownEvent.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n this.previousTab();\n preventDefaultKeyAction = true;\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n this.nextTab();\n preventDefaultKeyAction = true;\n break;\n case \"Home\":\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(0, true);\n preventDefaultKeyAction = true;\n break;\n case \"End\":\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(this.$tabListItemLinks.length - 1, true);\n preventDefaultKeyAction = true;\n break;\n default:\n break;\n }\n if (preventDefaultKeyAction) {\n itemLinkKeyDownEvent.stopPropagation();\n itemLinkKeyDownEvent.preventDefault();\n }\n }\n\n nextTab() {\n /* eslint-disable-next-line no-magic-numbers */\n if (this.currentTabIndex < this.$tabListItemLinks.length - 1) {\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(this.currentTabIndex + 1, true);\n } else {\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(0, true);\n }\n }\n\n previousTab() {\n /* eslint-disable-next-line no-magic-numbers */\n if (this.currentTabIndex >= 1) {\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(this.currentTabIndex - 1, true);\n } else {\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(this.$tabListItemLinks.length - 1, true);\n }\n }\n\n switchTabByIndex(newIndex, switchFocus = false) {\n this.currentTabIndex = newIndex;\n this.$tabListItemLinks.forEach(($tabListItemLink, index) => {\n if (index === this.currentTabIndex) {\n $tabListItemLink.setAttribute(\"aria-selected\", true);\n $tabListItemLink.setAttribute(\"tabindex\", \"0\");\n if (switchFocus) {\n $tabListItemLink.focus();\n }\n } else {\n $tabListItemLink.setAttribute(\"aria-selected\", false);\n $tabListItemLink.setAttribute(\"tabindex\", \"-1\");\n }\n });\n this.$tabItems.forEach(($tabItem, index) => {\n if (index === this.currentTabIndex) {\n $tabItem.removeAttribute(\"hidden\");\n $tabItem.setAttribute(\"tabindex\", \"0\");\n } else {\n $tabItem.setAttribute(\"hidden\", \"\");\n $tabItem.setAttribute(\"tabindex\", \"-1\");\n }\n });\n }\n\n switchTabByID(targetId) {\n const index = Array.from(this.$tabItems).findIndex(\n ($tabItem) => $tabItem.getAttribute(\"id\") === targetId,\n );\n this.switchTabByIndex(index);\n }\n}\n","export class TextInputPassword {\n constructor($module) {\n this.$module = $module;\n this.$input = $module && $module.querySelector(\".tna-text-input\");\n\n if (\n !this.$module ||\n !this.$input ||\n this.$input.getAttribute(\"type\") !== \"password\"\n ) {\n return;\n }\n\n this.$textInputWrapper = document.createElement(\"div\");\n this.$textInputWrapper.classList.add(\"tna-text-input-wrapper\");\n\n this.$textInputPasswordToggle = document.createElement(\"button\");\n this.$textInputPasswordToggle.setAttribute(\"type\", \"button\");\n this.$textInputPasswordToggle.classList.add(\n \"tna-button\",\n \"tna-button--small\",\n \"tna-button--icon-only\",\n );\n this.$textInputPasswordToggle.setAttribute(\"aria-controls\", this.$input.id);\n this.updateTogglePasswordButtonText();\n\n this.$textInputWrapper.appendChild(this.$input);\n this.$textInputWrapper.appendChild(this.$textInputPasswordToggle);\n this.$module.appendChild(this.$textInputWrapper);\n\n this.$textInputPasswordToggle.addEventListener(\"click\", () => {\n this.togglePasswordType();\n this.$input.focus();\n });\n }\n\n togglePasswordType() {\n if (this.$input.getAttribute(\"type\") === \"password\") {\n this.$input.setAttribute(\"type\", \"text\");\n } else {\n this.$input.setAttribute(\"type\", \"password\");\n }\n this.updateTogglePasswordButtonText();\n }\n\n updateTogglePasswordButtonText() {\n if (this.$input.getAttribute(\"type\") === \"password\") {\n this.$textInputPasswordToggle.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\" height=\"24\" aria-hidden=\"true\" focusable=\"false\"><!--!Font Awesome Free v7.0.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M320 96C239.2 96 174.5 132.8 127.4 176.6C80.6 220.1 49.3 272 34.4 307.7C31.1 315.6 31.1 324.4 34.4 332.3C49.3 368 80.6 420 127.4 463.4C174.5 507.1 239.2 544 320 544C400.8 544 465.5 507.2 512.6 463.4C559.4 419.9 590.7 368 605.6 332.3C608.9 324.4 608.9 315.6 605.6 307.7C590.7 272 559.4 220 512.6 176.6C465.5 132.9 400.8 96 320 96zM176 320C176 240.5 240.5 176 320 176C399.5 176 464 240.5 464 320C464 399.5 399.5 464 320 464C240.5 464 176 399.5 176 320zM320 256C320 291.3 291.3 320 256 320C244.5 320 233.7 317 224.3 311.6C223.3 322.5 224.2 333.7 227.2 344.8C240.9 396 293.6 426.4 344.8 412.7C396 399 426.4 346.3 412.7 295.1C400.5 249.4 357.2 220.3 311.6 224.3C316.9 233.6 320 244.4 320 256z\" /></svg>Show password`;\n this.$textInputPasswordToggle.setAttribute(\"title\", \"Show password\");\n this.$textInputPasswordToggle.setAttribute(\"aria-label\", \"Show password\");\n } else {\n this.$textInputPasswordToggle.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\" height=\"24\" aria-hidden=\"true\" focusable=\"false\"><!--!Font Awesome Free v7.0.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M73 39.1C63.6 29.7 48.4 29.7 39.1 39.1C29.8 48.5 29.7 63.7 39 73.1L567 601.1C576.4 610.5 591.6 610.5 600.9 601.1C610.2 591.7 610.3 576.5 600.9 567.2L504.5 470.8C507.2 468.4 509.9 466 512.5 463.6C559.3 420.1 590.6 368.2 605.5 332.5C608.8 324.6 608.8 315.8 605.5 307.9C590.6 272.2 559.3 220.2 512.5 176.8C465.4 133.1 400.7 96.2 319.9 96.2C263.1 96.2 214.3 114.4 173.9 140.4L73 39.1zM236.5 202.7C260 185.9 288.9 176 320 176C399.5 176 464 240.5 464 320C464 351.1 454.1 379.9 437.3 403.5L402.6 368.8C415.3 347.4 419.6 321.1 412.7 295.1C399 243.9 346.3 213.5 295.1 227.2C286.5 229.5 278.4 232.9 271.1 237.2L236.4 202.5zM357.3 459.1C345.4 462.3 332.9 464 320 464C240.5 464 176 399.5 176 320C176 307.1 177.7 294.6 180.9 282.7L101.4 203.2C68.8 240 46.4 279 34.5 307.7C31.2 315.6 31.2 324.4 34.5 332.3C49.4 368 80.7 420 127.5 463.4C174.6 507.1 239.3 544 320.1 544C357.4 544 391.3 536.1 421.6 523.4L357.4 459.2z\" /></svg>Hide password`;\n this.$textInputPasswordToggle.setAttribute(\"title\", \"Hide password\");\n this.$textInputPasswordToggle.setAttribute(\"aria-label\", \"Hide password\");\n }\n }\n}\n","export class TextAreaItemisedRows {\n constructor($module, options = {}) {\n this.$module = $module;\n this.$formFieldInput =\n this.$module && this.$module.querySelector(\".tna-textarea\");\n this.$formFieldInputHint =\n this.$module && this.$module.querySelector(\".tna-form-item__hint\");\n this.$formFieldBody =\n this.$module && this.$module.querySelector(\".tna-form-item__body\");\n\n if (\n !this.$module ||\n !this.$formFieldInput ||\n !this.$formFieldBody ||\n this.$formFieldInput.getAttribute(\"hidden\") !== null\n ) {\n return;\n }\n\n const { enhancedHint } = options;\n this.enhancedHint = enhancedHint || \"Enter an item and press enter\";\n\n this.init();\n }\n\n init() {\n this.values = this.$formFieldInput.value\n .split(\"\\n\")\n .map((value) => value.trim())\n .filter((value) => value);\n\n this.id = this.$formFieldInput.id;\n\n this.$formFieldNewInput = document.createElement(\"input\");\n this.$formFieldNewInput.classList.add(\"tna-text-input\");\n [\"id\", \"aria-describedby\"].forEach((attribute) => {\n this.$formFieldNewInput.setAttribute(\n attribute,\n this.$formFieldInput.getAttribute(attribute),\n );\n this.$formFieldInput.removeAttribute(attribute);\n });\n this.$formFieldBody.appendChild(this.$formFieldNewInput);\n this.$formFieldInput.setAttribute(\"hidden\", \"\");\n this.$formFieldInput.addEventListener(\"keyup\", () => this.updateList());\n this.$formFieldNewInput.addEventListener(\"keypress\", (event) => {\n if (event.key === \"Enter\") {\n this.appendValue(event.target.value);\n }\n });\n\n this.$formFieldNewInputAddButton = document.createElement(\"button\");\n this.$formFieldNewInputAddButton.setAttribute(\"type\", \"button\");\n this.$formFieldNewInputAddButton.classList.add(\n \"tna-button\",\n \"tna-button--small\",\n );\n this.$formFieldNewInputAddButtonInner = document.createElement(\"span\");\n this.$formFieldNewInputAddButtonInner.innerText = \"Add\";\n this.$formFieldNewInputAddButtonInnerExtra = document.createElement(\"span\");\n this.$formFieldNewInputAddButtonInnerExtra.classList.add(\n \"tna-visually-hidden\",\n );\n this.$formFieldNewInputAddButtonInnerExtra.innerText = \" to list\";\n this.$formFieldNewInputAddButtonInner.appendChild(\n this.$formFieldNewInputAddButtonInnerExtra,\n );\n this.$formFieldNewInputAddButton.appendChild(\n this.$formFieldNewInputAddButtonInner,\n );\n this.$formFieldBody.appendChild(this.$formFieldNewInputAddButton);\n this.$formFieldNewInputAddButton.addEventListener(\"click\", () => {\n this.appendValue(this.$formFieldNewInput.value);\n });\n\n this.$formFieldLiveAria = document.createElement(\"div\");\n this.$formFieldLiveAria.setAttribute(\"aria-live\", \"assertive\");\n this.$formFieldLiveAria.classList.add(\"tna-visually-hidden\");\n this.$module.appendChild(this.$formFieldLiveAria);\n\n this.$formFieldCounter = document.createElement(\"p\");\n this.$formFieldCounter.id = `${this.id}-list-helper`;\n this.$formFieldCounter.classList.add(\"tna-!--margin-top-xs\");\n this.$module.appendChild(this.$formFieldCounter);\n\n this.$formFieldNewInput.setAttribute(\n \"aria-describedby\",\n `${this.$formFieldNewInput.getAttribute(\"aria-describedby\")} ${\n this.$formFieldCounter.id\n }`,\n );\n\n this.$valuesList = document.createElement(\"ul\");\n this.$valuesList.classList.add(\n \"tna-compound-filters\",\n \"tna-!--margin-top-xs\",\n );\n this.$valuesList.addEventListener(\"blur\", () => {\n this.$valuesList.removeAttribute(\"tabindex\");\n this.updateAriaText(\"\");\n });\n this.$module.appendChild(this.$valuesList);\n\n if (!this.$formFieldInputHint) {\n this.$formFieldInputHint = document.createElement(\"p\");\n this.$formFieldInputHint.classList.add(\"tna-form-item__hint\");\n this.$formFieldBody.parentNode.insertBefore(\n this.$formFieldInputHint,\n this.$formFieldBody,\n );\n }\n this.$formFieldInputHint.innerText = this.enhancedHint;\n\n this.updateList();\n }\n\n updateAriaText(content) {\n this.$formFieldLiveAria.innerText = content;\n }\n\n /* eslint-disable-next-line class-methods-use-this */\n normaliseValue(value) {\n return value.replace(/\\s{2,}/u, \" \").trim();\n }\n\n isValueInList(value) {\n return this.values\n .map((eachValue) => this.normaliseValue(eachValue).toLowerCase())\n .includes(value.toLowerCase().trim());\n }\n\n appendValue(value) {\n const newValue = this.normaliseValue(value);\n if (newValue) {\n if (this.isValueInList(newValue)) {\n this.updateAriaText(`'${newValue}' already added`);\n } else {\n this.values.push(newValue);\n this.$formFieldInput.value = this.values.join(\"\\n\");\n this.updateList();\n this.updateAriaText(`'${newValue}' added`);\n }\n } else {\n this.updateAriaText(\"Enter an item to add\");\n }\n this.$formFieldNewInput.value = \"\";\n this.$formFieldNewInput.focus();\n }\n\n removeValue(value) {\n const removeValue = this.normaliseValue(value);\n if (removeValue && this.isValueInList(removeValue)) {\n this.values = this.values.filter(\n (existingValue) => existingValue !== removeValue,\n );\n this.$formFieldInput.value = this.values.join(\"\\n\");\n this.updateList();\n this.updateAriaText(`'${removeValue}' removed`);\n }\n if (this.values.length) {\n this.$valuesList.setAttribute(\"tabindex\", \"0\");\n this.$valuesList.focus();\n } else {\n this.$formFieldNewInput.focus();\n }\n }\n\n updateList() {\n this.$valuesList.innerHTML = \"\";\n this.values\n .map((value) => {\n const $item = document.createElement(\"li\");\n $item.classList.add(\"tna-compound-filters__item\");\n const $itemLabel = document.createElement(\"span\");\n $itemLabel.innerText = value;\n $item.appendChild($itemLabel);\n\n const $removeItemButton = document.createElement(\"button\");\n $removeItemButton.innerText = `Remove '${value}'`;\n $removeItemButton.setAttribute(\"type\", \"button\");\n $removeItemButton.classList.add(\"tna-compound-filters__link\");\n $removeItemButton.addEventListener(\"click\", () => {\n this.removeValue(value);\n });\n $item.appendChild($removeItemButton);\n return $item;\n })\n .forEach(($item) => this.$valuesList.appendChild($item));\n\n let innerTextItemValue = \"item\";\n /* eslint-disable-next-line no-magic-numbers */\n if (this.values.length !== 1) {\n innerTextItemValue += \"s\";\n }\n const innerTextValue = `${this.values.length} ${innerTextItemValue} added`;\n this.$formFieldCounter.innerText = innerTextValue;\n }\n}\n","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","import uuidv4 from \"./uuid.mjs\";\n\nexport const iso8601ToPrettyDatetime = (dateStr) => {\n const datetime = dateStr;\n\n if (!datetime) {\n throw new Error(\"No datetime provided\");\n }\n const isDateTime =\n /^\\d{4}(?:-\\d{2}){2}(?:T| )\\d{2}(?::\\d{2}){1,2}(?:\\.\\d+)?(?:Z|(?:[+-]\\d{2}:\\d{2}))?$/u.test(\n datetime,\n );\n const isDate = /^\\d{4}(?:-\\d{2}){2}$/u.test(datetime);\n if (!isDateTime && !isDate) {\n throw new Error(\"Invalid datetime provided\");\n }\n\n const date = new Date(datetime);\n if (!(date instanceof Date) || isNaN(date)) {\n throw new Error(\"Invalid datetime provided\");\n }\n\n const dayString = date.toLocaleDateString(\"en-GB\", {\n weekday: \"long\",\n });\n const dateString = date.toLocaleDateString(\"en-GB\", {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n });\n\n if (isDateTime && (date.getHours() || date.getMinutes())) {\n let timeString = date.toLocaleTimeString(\"en-GB\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n if (date.getSeconds()) {\n timeString = date.toLocaleTimeString(\"en-GB\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n }\n return `${dayString} ${dateString}, ${timeString}`;\n }\n return `${dayString} ${dateString}`;\n};\n\n/*\n * ==========================================\n * Transform any <time> element into a pretty\n * and human readable format that is based on\n * the valid ISO 8601 datetime attribute. The\n * replaced value will be localised according\n * to user's system settings, repurposing the\n * original text content as a title attribute\n * to allow users to see the value. A null or\n * invalid datetime format will result in the\n * element not being modified. If the updated\n * value is similar to the starting value for\n * the element text content, then the element\n * will not be updated to avoid redundancy.\n * ------------------------------------------\n * For example if the user's system has a UTC\n * timezone set then the element:\n *\n * <time\n * datetime=\"2026-03-05T13:48:00-05:00\"\n * >\n * 5 March 2026, 13:48 (UTC -5)\n * </time>\n *\n * would become:\n *\n * <time\n * datetime=\"2026-03-05T13:48:00-05:00\"\n * title=\"5 March 2026, 13:48 (UTC -5)\"\n * >\n * Thursday 5 March 2026, 09:48\n * </time>\n * ==========================================\n */\nexport const updateTimeElement = ($el) => {\n const datetime = $el.getAttribute(\"datetime\");\n\n try {\n const prettyDatetime = iso8601ToPrettyDatetime(datetime);\n if (!prettyDatetime.includes($el.textContent)) {\n $el.setAttribute(\"title\", $el.textContent);\n $el.textContent = prettyDatetime;\n }\n // eslint-disable-next-line no-unused-vars\n } catch (error) {\n // Do nothing if the datetime is invalid or not provided\n }\n};\n\nexport const checkTableForScroll = ($tableWrapper) => {\n const $caption = $tableWrapper.querySelector(\"caption\");\n if (!($tableWrapper.dataset.tableScrollInitialised === \"true\")) {\n if ($caption && !$caption.id) {\n $caption.id = `table-caption-${uuidv4()}`;\n }\n $tableWrapper.dataset.tableScrollInitialised = \"true\";\n }\n if ($tableWrapper.scrollWidth > $tableWrapper.clientWidth) {\n $tableWrapper.setAttribute(\"tabindex\", \"0\");\n $tableWrapper.setAttribute(\"role\", \"region\");\n $tableWrapper.setAttribute(\"aria-labelledby\", $caption?.id || \"\");\n $tableWrapper.classList.add(\"tna-table-wrapper--scroll\");\n } else {\n $tableWrapper.removeAttribute(\"tabindex\");\n $tableWrapper.removeAttribute(\"role\");\n $tableWrapper.removeAttribute(\"aria-labelledby\");\n $tableWrapper.classList.remove(\"tna-table-wrapper--scroll\");\n }\n};\n","/* eslint-disable no-magic-numbers */\n/* eslint-disable no-bitwise */\nconst uuidv4 = () =>\n ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/gu, (char) =>\n (\n char ^\n (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (char / 4)))\n ).toString(16),\n );\n\nexport default uuidv4;\n","// The module cache\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};"],"names":["root","factory","exports","module","define","amd","self","initAll","options","scope","$scope","document","HTMLElement","Error","$html","documentElement","classList","add","onFirstTouch","window","removeEventListener","addEventListener","event","key","remove","$tableWrappers","querySelectorAll","forEach","$tableWrapper","_lib_helpers_mjs__WEBPACK_IMPORTED_MODULE_18__","DJ","contains","FH","$accordion","_components_accordion_accordion_mjs__WEBPACK_IMPORTED_MODULE_0__","Accordion","$breadcrumbs","querySelector","_components_breadcrumbs_breadcrumbs_mjs__WEBPACK_IMPORTED_MODULE_1__","Breadcrumbs","$codeBlock","_components_code_block_code_block_mjs__WEBPACK_IMPORTED_MODULE_2__","CodeBlock","$cookieBanner","_components_cookie_banner_cookie_banner_mjs__WEBPACK_IMPORTED_MODULE_3__","CookieBanner","$dateInput","_components_date_input_date_input_mjs__WEBPACK_IMPORTED_MODULE_4__","DateInputProgressive","$errorSummary","_components_error_summary_error_summary_mjs__WEBPACK_IMPORTED_MODULE_5__","ErrorSummary","init","$fileInput","_components_file_input_file_input_mjs__WEBPACK_IMPORTED_MODULE_6__","FileInputDroppable","$footer","_components_footer_footer_mjs__WEBPACK_IMPORTED_MODULE_7__","Footer","$gallery","_components_gallery_gallery_mjs__WEBPACK_IMPORTED_MODULE_8__","Gallery","$globalHeader","_components_global_header_global_header_mjs__WEBPACK_IMPORTED_MODULE_9__","GlobalHeader","$header","_components_header_header_mjs__WEBPACK_IMPORTED_MODULE_10__","Header","$picture","_components_picture_picture_mjs__WEBPACK_IMPORTED_MODULE_11__","Picture","$sidebar","scrollTopThreshold","disableHighlightSize","dataset","_components_sidebar_sidebar_mjs__WEBPACK_IMPORTED_MODULE_12__","Sidebar","$skipLink","_components_skip_link_skip_link_mjs__WEBPACK_IMPORTED_MODULE_13__","SkipLink","$tabModule","_components_tabs_tabs_mjs__WEBPACK_IMPORTED_MODULE_14__","Tabs","$textAreaWithItemisedRows","enhancedHint","_components_textarea_textarea_mjs__WEBPACK_IMPORTED_MODULE_16__","TextAreaItemisedRows","$textInputPassword","_components_text_input_text_input_mjs__WEBPACK_IMPORTED_MODULE_15__","TextInputPassword","matchMedia","evt","matches","$element","setAttribute","wasClosed","removeAttribute","getXPathTo","id","body","tagName","ix","parentNode","siblings","childNodes","index","length","sibling","nodeType","getClosestElement","$startingElement","matchingElementSelectors","heading","$search","previousElementSibling","some","matchingElementSelector","innerText","parentElement","getClosestHeading","valueGetters","text","$el","replace","html","innerHTML","value","instance","checked","expanded","getAttribute","toString","closestHeading","xpath","target","analytics","areaName","rootEventName","rootData","data_component_name","events","eventName","targetElement","on","data","state","data_link_type","data_link","data_position","breadcrumbs_analytics","checkboxes_analytics","trim","group","closest","details_analytics","hasAttribute","error_summary_analytics","getFileDetails","JSON","stringify","Array","from","files","map","file","name","size","type","file_input_analytics","footer_analytics","data_section","gallery_analytics","media_type","media_duration","media_provider","media_title","media_progress","findIndex","$itemButton","media_action","onCondition","includes","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","constructor","documentScope","this","start","navigator","doNotTrack","isPolicyAccepted","enableTracking","policies","Object","hasOwn","usage","disableTracking","componentConfig","addListeners","rootDefaultData","scopeArray","scopeIndex","eventConfig","attachListener","generateEventName","computedValueParameters","computedValue","recordEvent","xPath","timeSincePageLoad","fromEntries","entries","valueOrFunction","call","push","getTnaMetaTags","head","$metaEl","RegExp","getUserPreferences","userPreferences","prefersContrast","GA4","addTrackingCode","trackingCodeAdded","trackingEnabled","gTagId","TNAFrontendAnalyticsGA4","super","dataLayer","ga4Disable","set","destroy","ga4Data","pushToDataLayer","gtag","args","getTime","firstScript","getElementsByTagName","script","createElement","async","src","insertBefore","appendChild","keys","all","startsWith","delete","ga4Id","ga4","helpers","$module","$items","allowMultipleItemsOpen","singleOpenItem","$item","initItem","initState","$toggleAllButton","syncToggleAllButton","isAllOpen","closeItem","openItem","$heading","$content","$headingButton","isopen","closeAllItemsExcept","$wrapper","_lib_helpers_mjs__WEBPACK_IMPORTED_MODULE_0__","$excludeItem","filter","every","closeAllLabel","openAllLabel","$breadcrumbsList","uniqueId","_lib_uuid_mjs__WEBPACK_IMPORTED_MODULE_0__","$expandable","style","display","$expandButton","focus","once","nextSibling","$code","$copyButton","clipboard","writeText","$acceptButton","$rejectButton","$prompt","$acceptedMessage","$rejectedMessage","$closeButtons","_lib_cookies_mjs__WEBPACK_IMPORTED_MODULE_0__","newInstance","cookiePreferencesSetKey","preferencesKey","policiesCorrectOnInit","exists","hasValue","accept","reject","complete","acceptAllPolicies","rejectAllPolicies","$closeButton","close","$yearWrapper","$yearInput","$monthWrapper","$monthInput","$dayWrapper","$dayInput","update","isValidYear","showMonth","isValidMonth","showDay","hideDay","hideMonth","yearValue","parseInt","isNaN","monthRawValue","monthIntValue","toLowerCase","disableAutofocus","setFocus","handleClick","isFocusable","onBlur","onBeforeFocus","$target","focusTarget","preventDefault","getFragmentFromUrl","url","split","pop","HTMLAnchorElement","inputId","href","$input","getElementById","$legendOrLabel","getAssociatedLegendOrLabel","scrollIntoView","preventScroll","$fieldset","$legends","$candidateLegend","HTMLInputElement","legendTop","getBoundingClientRect","top","inputRect","height","innerHeight","$body","acceptMutltipleFiles","$droppableArea","$pseudoSelectFileText","fileText","textContent","$droppableButtons","$pseudoSelectFileButton","$pseudoDropFileButton","$droppableAreaAriaLabel","showDropTarget","hideDropTarget","onChange","isContainingFiles","dataTransfer","hasNoTypesInfo","types","isDraggingFiles","updateAriaLabel","classToAdd","items","themeCookieName","$themeSelector","$themeSelectorNotice","$themeSelectorEnableSettingsCookiesButton","$tnaTemplate","currentTheme","themeOnLoad","$themeSelectorButtons","$themeSelectorButton","$button","setTheme","selectThemeSelectorButton","acceptPolicy","showThemeSelector","settings","$currentThemeButton","find","get","theme","$selectedButton","$itemsContainer","$navigation","$navigationItems","$navigationButtons","$navigationButtonPrev","$navigationButtonNext","setup","currentId","showItem","preventDefaultKeyAction","showPreviousItem","showNextItem","showFirstItem","showLastItem","stopPropagation","$liveRegion","prepend","getCurrentItemIndex","nextIndexToShow","$toggleButton","$topNavigation","$links","menuOpened","mql","syncState","handleToggleNavigation","addListener","code","show","hide","hidden","$imageWrapper","$transcriptToggle","$transcript","transcriptOpened","openLabel","informationLabelOpen","closeLabel","informationLabelClose","toggleTranscript","substring","item","breakpoints","tiny","getComputedStyle","getPropertyValue","small","medium","join","hideOnDevice","currentItem","highlightCurrentSection","$topItem","findLast","Math","floor","linkedElementListener","linkedElementId","$linkedElement","focusLinkedElement","removeFocusProperties","$tabList","$tabListItemLinks","$tabItems","currentTabIndex","$tabListItemLink","tabPanelID","$tabPanel","handleItemLinkClick","switchTabByIndex","handleItemLinkKeyDown","itemLinkClickEvent","targetItem","currentTarget","switchTabByID","itemLinkKeyDownEvent","previousTab","nextTab","newIndex","switchFocus","$tabItem","targetId","$textInputWrapper","$textInputPasswordToggle","updateTogglePasswordButtonText","togglePasswordType","$formFieldInput","$formFieldInputHint","$formFieldBody","values","$formFieldNewInput","attribute","updateList","appendValue","$formFieldNewInputAddButton","$formFieldNewInputAddButtonInner","$formFieldNewInputAddButtonInnerExtra","$formFieldLiveAria","$formFieldCounter","$valuesList","updateAriaText","content","normaliseValue","isValueInList","eachValue","newValue","removeValue","existingValue","$itemLabel","$removeItemButton","innerTextItemValue","innerTextValue","TNAFrontendCookieEvents","CookieEventHandler","oneTimeEvents","debug","log","console","callback","trigger","eventToTrigger","eventIndex","splice","TNAFrontendCookies","tnaCookiePolicies","Cookies","defaultDomain","defaultPath","secure","policiesKey","defaultAge","tnaFrontendDebug","noInit","tnaCookiesDomain","location","hostname","tnaCookiesPath","tnaCookiesInsecure","tnaCookiesPoliciesKey","secondsInAYear","tnaCookiesDefaultAge","policy","existingPolicies","filteredExistingPolicies","savePolicies","marketing","essential","destroyInstance","deserialised","cookie","parts","decodeURIComponent","parse","error","maxAge","sameSite","domain","path","session","secureString","sessionString","encodeURIComponent","deleteAll","setPolicy","rejectPolicy","accepted","allPolicies","updateTimeElement","datetime","prettyDatetime","dateStr","isDateTime","test","isDate","date","dayString","toLocaleDateString","weekday","dateString","day","month","year","getHours","getMinutes","timeString","toLocaleTimeString","hour","minute","getSeconds","second","iso8601ToPrettyDatetime","checkTableForScroll","$caption","tableScrollInitialised","_uuid_mjs__WEBPACK_IMPORTED_MODULE_0__","scrollWidth","clientWidth","__WEBPACK_DEFAULT_EXPORT__","char","crypto","getRandomValues","Uint8Array","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","o","defineProperty","enumerable","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag"],"sourceRoot":""}
1
+ {"version":3,"file":"all+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/./src/nationalarchives/all.mjs","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","webpack://TNAFrontend/./src/nationalarchives/components/accordion/accordion.mjs","webpack://TNAFrontend/./src/nationalarchives/components/breadcrumbs/breadcrumbs.mjs","webpack://TNAFrontend/./src/nationalarchives/components/code-block/code-block.mjs","webpack://TNAFrontend/./src/nationalarchives/components/cookie-banner/cookie-banner.mjs","webpack://TNAFrontend/./src/nationalarchives/components/date-input/date-input.mjs","webpack://TNAFrontend/./src/nationalarchives/components/error-summary/error-summary.mjs","webpack://TNAFrontend/./src/nationalarchives/components/file-input/file-input.mjs","webpack://TNAFrontend/./src/nationalarchives/components/footer/footer.mjs","webpack://TNAFrontend/./src/nationalarchives/components/gallery/gallery.mjs","webpack://TNAFrontend/./src/nationalarchives/components/global-header/global-header.mjs","webpack://TNAFrontend/./src/nationalarchives/components/header/header.mjs","webpack://TNAFrontend/./src/nationalarchives/components/picture/picture.mjs","webpack://TNAFrontend/./src/nationalarchives/components/sidebar/sidebar.mjs","webpack://TNAFrontend/./src/nationalarchives/components/skip-link/skip-link.mjs","webpack://TNAFrontend/./src/nationalarchives/components/tabs/tabs.mjs","webpack://TNAFrontend/./src/nationalarchives/components/text-input/text-input.mjs","webpack://TNAFrontend/./src/nationalarchives/components/textarea/textarea.mjs","webpack://TNAFrontend/./src/nationalarchives/lib/helpers.mjs","webpack://TNAFrontend/./src/nationalarchives/lib/uuid.mjs","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object"],"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[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = 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","/* eslint-disable no-new */\nimport { Accordion } from \"./components/accordion/accordion.mjs\";\nimport { Breadcrumbs } from \"./components/breadcrumbs/breadcrumbs.mjs\";\nimport { CodeBlock } from \"./components/code-block/code-block.mjs\";\nimport { CookieBanner } from \"./components/cookie-banner/cookie-banner.mjs\";\nimport { DateInputProgressive } from \"./components/date-input/date-input.mjs\";\nimport { ErrorSummary } from \"./components/error-summary/error-summary.mjs\";\nimport { FileInputDroppable } from \"./components/file-input/file-input.mjs\";\nimport { Footer } from \"./components/footer/footer.mjs\";\nimport { Gallery } from \"./components/gallery/gallery.mjs\";\nimport { GlobalHeader } from \"./components/global-header/global-header.mjs\";\nimport { Header } from \"./components/header/header.mjs\";\nimport { Picture } from \"./components/picture/picture.mjs\";\nimport { Sidebar } from \"./components/sidebar/sidebar.mjs\";\nimport { SkipLink } from \"./components/skip-link/skip-link.mjs\";\nimport { Tabs } from \"./components/tabs/tabs.mjs\";\nimport { TextInputPassword } from \"./components/text-input/text-input.mjs\";\nimport { TextAreaItemisedRows } from \"./components/textarea/textarea.mjs\";\nimport { checkTableForScroll, updateTimeElement } from \"./lib/helpers.mjs\";\n\nconst initAll = (options = {}) => {\n const { scope } = options;\n let $scope = document;\n if (scope) {\n if (scope instanceof HTMLElement) {\n $scope = scope;\n } else {\n throw new Error(\"Scope must be an HTMLElement\");\n }\n }\n const $html = document.documentElement;\n $html.classList.add(\"tna-template--js-enabled\");\n\n const onFirstTouch = () => {\n window.removeEventListener(\"touchstart\", onFirstTouch);\n $html.classList.add(\"tna-template--touched\");\n };\n window.addEventListener(\"touchstart\", onFirstTouch);\n\n const onKeyDown = (event) => {\n if (event.key === \"Tab\") {\n $html.classList.add(\"tna-template--tabbed\");\n $html.classList.remove(\"tna-template--clicked\");\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n\n const onMouseDown = () => {\n $html.classList.add(\"tna-template--clicked\");\n $html.classList.remove(\"tna-template--tabbed\");\n };\n window.addEventListener(\"mousedown\", onMouseDown);\n\n /*\n * ==========================================\n * Checks if widths of all tables on the page\n * are wider than their parent container, and\n * allowing horizontal scrolling if they are.\n * This is done both on load and on resize.\n * ==========================================\n */\n const $tableWrappers = $scope.querySelectorAll(\".tna-table-wrapper\");\n $tableWrappers.forEach(($tableWrapper) => checkTableForScroll($tableWrapper));\n window.addEventListener(\"resize\", () => {\n $tableWrappers.forEach(($tableWrapper) =>\n checkTableForScroll($tableWrapper),\n );\n });\n\n // Remove this opt-in class in a later release\n if ($html.classList.contains(\"tna-template--enhance-time-elements\")) {\n document.querySelectorAll(\"time[datetime]\").forEach(updateTimeElement);\n }\n\n const $accordions = $scope.querySelectorAll('[data-module=\"tna-accordion\"]');\n $accordions.forEach(($accordion) => {\n new Accordion($accordion);\n });\n\n const $breadcrumbs = $scope.querySelector('[data-module=\"tna-breadcrumbs\"]');\n if ($breadcrumbs) {\n new Breadcrumbs($breadcrumbs);\n }\n\n const $codeBlocks = $scope.querySelectorAll('[data-module=\"tna-code-block\"]');\n $codeBlocks.forEach(($codeBlock) => {\n new CodeBlock($codeBlock);\n });\n\n const $cookieBanner = $scope.querySelector(\n '[data-module=\"tna-cookie-banner\"]',\n );\n if ($cookieBanner) {\n new CookieBanner($cookieBanner);\n }\n\n const $progressiveDateInputs = $scope.querySelectorAll(\n '[data-module=\"tna-date-input-progressive\"]',\n );\n $progressiveDateInputs.forEach(($dateInput) => {\n new DateInputProgressive($dateInput);\n });\n\n const $errorSummary = $scope.querySelector(\n '[data-module=\"tna-error-summary\"]',\n );\n if ($errorSummary) {\n new ErrorSummary($errorSummary).init();\n }\n\n const $fileInputs = $scope.querySelectorAll('[data-module=\"tna-file-input\"]');\n $fileInputs.forEach(($fileInput) => {\n new FileInputDroppable($fileInput);\n });\n\n const $footer = $scope.querySelector('[data-module=\"tna-footer\"]');\n if ($footer) {\n new Footer($footer);\n }\n\n const $galleries = $scope.querySelectorAll('[data-module=\"tna-gallery\"]');\n $galleries.forEach(($gallery) => {\n new Gallery($gallery);\n });\n\n const $globalHeader = $scope.querySelector(\n '[data-module=\"tna-global-header\"]',\n );\n if ($globalHeader) {\n new GlobalHeader($globalHeader);\n }\n\n const $header = $scope.querySelector('[data-module=\"tna-header\"]');\n if ($header) {\n new Header($header);\n }\n\n const $pictures = $scope.querySelectorAll('[data-module=\"tna-picture\"]');\n $pictures.forEach(($picture) => {\n new Picture($picture);\n });\n\n const $sidebar = $scope.querySelector('[data-module=\"tna-sidebar-sections\"]');\n if ($sidebar) {\n const { scrollTopThreshold, disableHighlightSize } = $sidebar.dataset;\n new Sidebar($sidebar, { scrollTopThreshold, disableHighlightSize });\n }\n\n const $skipLinks = $scope.querySelectorAll('[data-module=\"tna-skip-link\"]');\n $skipLinks.forEach(($skipLink) => {\n new SkipLink($skipLink);\n });\n\n const $tabs = $scope.querySelectorAll('[data-module=\"tna-tabs\"]');\n $tabs.forEach(($tabModule) => {\n new Tabs($tabModule);\n });\n\n const $textAreaItemisedRows = $scope.querySelectorAll(\n '[data-module=\"tna-textarea-itemised-rows\"]',\n );\n $textAreaItemisedRows.forEach(($textAreaWithItemisedRows) => {\n const { enhancedHint } = $textAreaWithItemisedRows.dataset;\n new TextAreaItemisedRows($textAreaWithItemisedRows, { enhancedHint });\n });\n\n const $textInputPasswords = $scope.querySelectorAll(\n '[data-module=\"tna-text-input-password\"]',\n );\n $textInputPasswords.forEach(($textInputPassword) => {\n new TextInputPassword($textInputPassword);\n });\n\n window.matchMedia(\"print\").addEventListener(\"change\", (evt) => {\n if (evt.matches) {\n $scope\n .querySelectorAll(\".tna-details__details:not([open])\")\n .forEach(($element) => {\n $element.setAttribute(\"open\", \"\");\n $element.dataset.wasClosed = \"\";\n });\n $scope\n .querySelectorAll(\n \".tna-accordion__content[hidden], .tna-picture__transcript[hidden]\",\n )\n .forEach(($element) => {\n $element.removeAttribute(\"hidden\");\n $element.dataset.wasClosed = \"\";\n });\n } else {\n $scope\n .querySelectorAll(\".tna-details__details[data-was-closed]\")\n .forEach(($element) => {\n $element.removeAttribute(\"open\");\n delete $element.dataset.wasClosed;\n });\n $scope\n .querySelectorAll(\n \".tna-accordion__content[data-was-closed], .tna-picture__transcript[data-was-closed]\",\n )\n .forEach(($element) => {\n $element.setAttribute(\"hidden\", \"\");\n $element.dataset.wasClosed = \"\";\n });\n }\n });\n};\n\nexport {\n initAll,\n Accordion,\n Breadcrumbs,\n CodeBlock,\n CookieBanner,\n DateInputProgressive,\n ErrorSummary,\n FileInputDroppable,\n Footer,\n Gallery,\n GlobalHeader,\n Header,\n Picture,\n Sidebar,\n SkipLink,\n Tabs,\n TextInputPassword,\n TextAreaItemisedRows,\n checkTableForScroll,\n updateTimeElement,\n};\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","import { checkTableForScroll } from \"../../lib/helpers.mjs\";\n\nexport class Accordion {\n constructor($module) {\n this.$module = $module;\n this.$items = $module && $module.querySelectorAll(\".tna-accordion__item\");\n if (!this.$module || !this.$items) {\n return;\n }\n\n this.allowMultipleItemsOpen =\n this.$module.dataset.singleOpenItem !== \"true\";\n\n this.$items.forEach(($item) => this.initItem($item));\n this.initState();\n\n this.$toggleAllButton = this.$module.querySelector(\n \".tna-accordion__toggle-all\",\n );\n if (this.$toggleAllButton) {\n this.syncToggleAllButton();\n this.$toggleAllButton.removeAttribute(\"hidden\");\n this.$toggleAllButton.addEventListener(\"click\", () => {\n if (this.isAllOpen()) {\n this.$items.forEach(($item) => this.closeItem($item));\n } else {\n this.$items.forEach(($item) => this.openItem($item));\n }\n this.syncToggleAllButton();\n });\n }\n }\n\n initItem($item) {\n const $heading = $item.querySelector(\".tna-accordion__heading\");\n const $content = $item.querySelector(\".tna-accordion__body\");\n\n if (!$heading || !$content) {\n return;\n }\n\n $item.classList.add(\"tna-accordion__details\");\n $item.classList.remove(\"tna-accordion__item\");\n\n $heading.removeAttribute(\"class\");\n\n $content.classList.add(\"tna-accordion__content\");\n $content.classList.remove(\"tna-accordion__body\");\n $content.setAttribute(\"hidden\", \"\");\n\n const $headingButton = document.createElement(\"button\");\n $headingButton.classList.add(\"tna-accordion__summary\");\n $headingButton.setAttribute(\"type\", \"button\");\n $headingButton.setAttribute(\"aria-controls\", $content.id);\n $headingButton.innerText = $heading.innerText;\n $heading.innerText = \"\";\n $heading.appendChild($headingButton);\n\n $headingButton.addEventListener(\"click\", () => {\n const isOpen = $headingButton.getAttribute(\"aria-expanded\") === \"true\";\n if (isOpen) {\n this.closeItem($item);\n } else {\n this.openItem($item);\n }\n });\n }\n\n initState() {\n this.$items.forEach(($item) => {\n if ($item.dataset.isopen === \"true\") {\n this.openItem($item);\n } else {\n this.closeItem($item);\n }\n $item.removeAttribute(\"data-isopen\");\n });\n }\n\n openItem($item) {\n if (!this.allowMultipleItemsOpen) {\n this.closeAllItemsExcept($item);\n }\n const $headingButton = $item.querySelector(\".tna-accordion__summary\");\n const $content = $item.querySelector(\".tna-accordion__content\");\n $headingButton.setAttribute(\"aria-expanded\", \"true\");\n $headingButton.setAttribute(\n \"aria-label\",\n `${$headingButton.innerText.trim()}, Hide this section`,\n );\n $content.removeAttribute(\"hidden\");\n // $content.setAttribute(\"tabindex\", \"0\");\n this.syncToggleAllButton();\n\n const $tableWrapper = $content.querySelectorAll(\".tna-table-wrapper\");\n if ($tableWrapper) {\n $tableWrapper.forEach(($wrapper) => {\n checkTableForScroll($wrapper);\n });\n }\n }\n\n closeItem($item) {\n const $headingButton = $item.querySelector(\".tna-accordion__summary\");\n const $content = $item.querySelector(\".tna-accordion__content\");\n $headingButton.setAttribute(\"aria-expanded\", \"false\");\n $headingButton.setAttribute(\n \"aria-label\",\n `${$headingButton.innerText.trim()}, Show this section`,\n );\n $content.setAttribute(\"hidden\", \"\");\n // $content.setAttribute(\"tabindex\", \"-1\");\n this.syncToggleAllButton();\n }\n\n closeAllItemsExcept($excludeItem) {\n Array.from(this.$items)\n .filter(\n ($item) =>\n $item.querySelector(\".tna-accordion__summary\") !== $excludeItem &&\n $item\n .querySelector(\".tna-accordion__summary\")\n .getAttribute(\"aria-expanded\") === \"true\",\n )\n .forEach(($item) => this.closeItem($item));\n }\n\n isAllOpen() {\n return Array.from(this.$items).every(\n ($item) =>\n $item\n .querySelector(\".tna-accordion__summary\")\n .getAttribute(\"aria-expanded\") === \"true\",\n );\n }\n\n syncToggleAllButton() {\n if (this.$toggleAllButton) {\n if (this.isAllOpen()) {\n this.$toggleAllButton.innerText =\n this.$toggleAllButton.dataset.closeAllLabel || \"Hide all sections\";\n } else {\n this.$toggleAllButton.innerText =\n this.$toggleAllButton.dataset.openAllLabel || \"Show all sections\";\n }\n }\n }\n}\n","import uuidv4 from \"../../lib/uuid.mjs\";\n\nexport class Breadcrumbs {\n constructor($module) {\n this.$module = $module;\n this.$breadcrumbsList =\n $module && $module.querySelector(\".tna-breadcrumbs__list\");\n this.$breadcrumbs =\n $module &&\n this.$breadcrumbsList &&\n $module.querySelectorAll(\".tna-breadcrumbs__item\");\n\n if (!this.$module || !this.$breadcrumbsList || !this.$breadcrumbs) {\n return;\n }\n\n if (\n /* eslint-disable-next-line no-magic-numbers */\n this.$breadcrumbs.length > 2 &&\n !this.$module.classList.contains(\"tna-breadcrumbs--no-collapse\")\n ) {\n this.init();\n }\n }\n\n init() {\n const uniqueId = `tna-breadcrumbs-${uuidv4()}`;\n const $expandable = document.createElement(\"li\");\n $expandable.classList.add(\n \"tna-breadcrumbs__item\",\n \"tna-breadcrumbs__item--expandable\",\n );\n $expandable.style.display = \"none\";\n\n const $expandButton = document.createElement(\"button\");\n $expandButton.classList.add(\"tna-breadcrumbs__link\");\n $expandButton.innerHTML =\n \"<span class='tna-!--visually-hidden'>Expand breadcrumbs</span>&hellip;\";\n $expandButton.setAttribute(\"type\", \"button\");\n $expandButton.setAttribute(\"aria-expanded\", \"false\");\n $expandButton.setAttribute(\"aria-controls\", uniqueId);\n $expandButton.addEventListener(\"click\", () => {\n this.$module.classList.remove(\"tna-breadcrumbs--collapsed\");\n $expandable.remove();\n this.$module.setAttribute(\"tabindex\", \"0\");\n this.$module.focus();\n this.$module.addEventListener(\n \"blur\",\n () => {\n this.$module.removeAttribute(\"tabindex\");\n },\n { once: true },\n );\n });\n $expandable.appendChild($expandButton);\n\n this.$breadcrumbsList.setAttribute(\"id\", uniqueId);\n this.$breadcrumbsList.insertBefore(\n $expandable,\n /* eslint-disable-next-line no-magic-numbers */\n this.$breadcrumbs[this.$breadcrumbs.length - 2].nextSibling,\n );\n\n this.$module.classList.add(\"tna-breadcrumbs--collapsed\");\n }\n}\n","export class CodeBlock {\n constructor($module) {\n this.$module = $module;\n this.$code = this.$module.querySelector(\"pre code\");\n this.$copyButton = this.$module.querySelector(\".tna-code-block__copy\");\n\n if (\n !this.$module ||\n !this.$code ||\n !this.$copyButton ||\n !navigator.clipboard\n ) {\n return;\n }\n\n this.$copyButton.removeAttribute(\"hidden\");\n this.$module.classList.add(\"tna-code-block__copyable\");\n\n this.$copyButton.addEventListener(\"click\", async () => {\n try {\n await navigator.clipboard.writeText(this.$code.innerText);\n this.$copyButton.innerText = \"Code copied\";\n } catch {\n // Continue regardless of error\n }\n });\n\n this.$copyButton.addEventListener(\"blur\", () => {\n this.$copyButton.innerText = \"Copy code\";\n });\n }\n}\n","import Cookies from \"@nationalarchives/cookies/src/index.js\";\n\nexport { Cookies };\n\nexport class CookieBanner {\n constructor($module) {\n this.$module = $module;\n this.$acceptButton = $module && $module.querySelector('[value=\"accept\"]');\n this.$rejectButton = $module && $module.querySelector('[value=\"reject\"]');\n this.$prompt =\n $module && $module.querySelector(\".tna-cookie-banner__message--prompt\");\n this.$acceptedMessage =\n $module && $module.querySelector(\".tna-cookie-banner__message--accepted\");\n this.$rejectedMessage =\n $module && $module.querySelector(\".tna-cookie-banner__message--rejected\");\n this.$closeButtons = $module && $module.querySelectorAll('[value=\"close\"]');\n\n if (\n !this.$module ||\n !this.$acceptButton ||\n !this.$rejectButton ||\n !this.$prompt ||\n !this.$acceptedMessage ||\n !this.$rejectedMessage ||\n !this.$closeButtons\n ) {\n return;\n }\n\n this.cookies = new Cookies();\n\n this.cookiePreferencesSetKey =\n this.$module.dataset.preferencesKey || \"cookie_preferences_set\";\n\n if (!this.cookies.preferencesCorrectOnInit) {\n this.cookies.delete(this.cookiePreferencesSetKey);\n }\n\n if (\n !this.cookies.exists(this.cookiePreferencesSetKey) ||\n !this.cookies.hasValue(this.cookiePreferencesSetKey, \"true\")\n ) {\n this.$module.removeAttribute(\"hidden\");\n\n this.$acceptButton.addEventListener(\"click\", () => this.accept());\n this.$rejectButton.addEventListener(\"click\", () => this.reject());\n }\n }\n\n accept() {\n this.$prompt.setAttribute(\"hidden\", \"\");\n this.complete();\n this.cookies.enableAllPreferences();\n this.$acceptedMessage.removeAttribute(\"hidden\");\n this.$acceptedMessage.setAttribute(\"tabindex\", \"0\");\n this.$acceptedMessage.focus();\n this.$acceptedMessage.addEventListener(\"blur\", () => {\n this.$acceptedMessage.removeAttribute(\"tabindex\");\n });\n }\n\n reject() {\n this.$prompt.setAttribute(\"hidden\", \"\");\n this.complete();\n this.cookies.disableAllPreferences();\n this.$rejectedMessage.removeAttribute(\"hidden\");\n this.$rejectedMessage.setAttribute(\"tabindex\", \"0\");\n this.$rejectedMessage.focus();\n this.$rejectedMessage.addEventListener(\"blur\", () => {\n this.$rejectedMessage.removeAttribute(\"tabindex\");\n });\n }\n\n complete() {\n this.cookies.set(this.cookiePreferencesSetKey, true);\n this.$closeButtons.forEach(($closeButton) => {\n $closeButton.addEventListener(\"click\", () => this.close());\n });\n }\n\n close() {\n this.$module.setAttribute(\"hidden\", \"\");\n }\n}\n","export class DateInputProgressive {\n constructor($module) {\n this.$module = $module;\n this.$yearWrapper =\n $module && $module.querySelector(\".tna-date-input__item--year\");\n this.$yearInput =\n this.$yearWrapper && this.$yearWrapper.querySelector(\"input\");\n this.$monthWrapper =\n $module && $module.querySelector(\".tna-date-input__item--month\");\n this.$monthInput =\n this.$monthWrapper && this.$monthWrapper.querySelector(\"input\");\n this.$dayWrapper =\n $module && $module.querySelector(\".tna-date-input__item--day\");\n this.$dayInput =\n this.$dayWrapper && this.$dayWrapper.querySelector(\"input\");\n\n if (!this.$module) {\n return;\n }\n\n this.update();\n window.addEventListener(\"pageshow\", () => this.update());\n\n if (this.$yearInput) {\n this.$yearInput.addEventListener(\"keyup\", () => this.update());\n this.$yearInput.addEventListener(\"change\", () => this.update());\n }\n if (this.$monthInput) {\n this.$monthInput.addEventListener(\"keyup\", () => this.update());\n this.$monthInput.addEventListener(\"change\", () => this.update());\n }\n if (this.$dayInput) {\n this.$dayInput.addEventListener(\"keyup\", () => this.update());\n this.$dayInput.addEventListener(\"change\", () => this.update());\n }\n }\n\n update() {\n if (this.isValidYear()) {\n this.showMonth();\n if (this.isValidMonth()) {\n this.showDay();\n } else {\n this.hideDay();\n }\n } else {\n this.hideMonth();\n this.hideDay();\n }\n }\n\n isValidYear() {\n if (!this.$yearInput) {\n return true;\n }\n const yearValue = parseInt(this.$yearInput.value.trim(), 10);\n /* eslint-disable-next-line no-magic-numbers */\n return !isNaN(this.$yearInput.value) && !isNaN(yearValue) && yearValue > 0;\n }\n\n isValidMonth() {\n if (!this.$monthInput) {\n return true;\n }\n const monthRawValue = this.$monthInput.value.trim();\n const monthIntValue = parseInt(monthRawValue, 10);\n const validMonthStrings = [\n \"january\",\n \"february\",\n \"march\",\n \"april\",\n \"may\",\n \"june\",\n \"july\",\n \"august\",\n \"september\",\n \"october\",\n \"november\",\n \"december\",\n \"jan\",\n \"feb\",\n \"mar\",\n \"apr\",\n \"jun\",\n \"jul\",\n \"aug\",\n \"sep\",\n \"oct\",\n \"nov\",\n \"dec\",\n ];\n return (\n (!isNaN(this.$monthInput.value) &&\n !isNaN(monthIntValue) &&\n /* eslint-disable-next-line no-magic-numbers */\n monthIntValue > 0 &&\n /* eslint-disable-next-line no-magic-numbers */\n monthIntValue <= 12) ||\n validMonthStrings.includes(monthRawValue.toLowerCase())\n );\n }\n\n showMonth() {\n if (this.$monthWrapper) {\n this.$monthWrapper.removeAttribute(\"hidden\");\n }\n }\n\n hideMonth() {\n if (this.$monthWrapper) {\n this.$monthWrapper.setAttribute(\"hidden\", \"\");\n }\n }\n\n showDay() {\n if (this.$dayWrapper) {\n this.$dayWrapper.removeAttribute(\"hidden\");\n }\n }\n\n hideDay() {\n if (this.$dayWrapper) {\n this.$dayWrapper.setAttribute(\"hidden\", \"\");\n }\n }\n}\n","export class ErrorSummary {\n constructor($module) {\n this.$module = $module;\n }\n\n init() {\n if (!this.$module) {\n return;\n }\n\n const disableAutoFocus =\n this.$module.dataset.disableAutofocus === \"true\" || false;\n\n if (!disableAutoFocus) {\n this.setFocus(this.$module);\n }\n\n this.$module.addEventListener(\"click\", (event) => this.handleClick(event));\n }\n\n /* eslint-disable-next-line class-methods-use-this */\n setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute(\"tabindex\");\n\n if (!isFocusable) {\n $element.setAttribute(\"tabindex\", \"-1\");\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n options.onBlur?.call($element);\n\n if (!isFocusable) {\n $element.removeAttribute(\"tabindex\");\n }\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener(\"blur\", onBlur, { once: true });\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener(\"focus\", onFocus, { once: true });\n\n // Focus element\n options.onBeforeFocus?.call($element);\n $element.focus();\n }\n\n handleClick(event) {\n const $target = event.target;\n if ($target && this.focusTarget($target)) {\n event.preventDefault();\n }\n }\n\n /* eslint-disable-next-line class-methods-use-this */\n getFragmentFromUrl(url) {\n if (!url.includes(\"#\")) {\n return null;\n }\n\n return url.split(\"#\").pop();\n }\n\n focusTarget($target) {\n // If the element that was clicked was not a link, return early\n if (!($target instanceof HTMLAnchorElement)) {\n return false;\n }\n\n const inputId = this.getFragmentFromUrl($target.href);\n if (!inputId) {\n return false;\n }\n\n const $input = document.getElementById(inputId);\n if (!$input) {\n return false;\n }\n\n const $legendOrLabel = this.getAssociatedLegendOrLabel($input);\n if (!$legendOrLabel) {\n return false;\n }\n\n // Scroll the legend or label into view *before* calling focus on the input\n // To avoid extra scrolling in browsers that don't support `preventScroll`\n // (which at time of writing is most of them...)\n $legendOrLabel.scrollIntoView();\n $input.focus({ preventScroll: true });\n\n return true;\n }\n\n /**\n * Get associated legend or label\n *\n * Returns the first element that exists from this list:\n *\n * - The `<legend>` associated with the closest `<fieldset>` ancestor, as long\n * as the top of it is no more than half a viewport height away from the\n * bottom of the input\n * - The first `<label>` that is associated with the input using for=\"inputId\"\n * - The closest parent `<label>`\n *\n * @private\n * @param {Element} $input - The input\n * @returns {Element | null} Associated legend or label, or null if no\n * associated legend or label can be found\n */\n /* eslint-disable-next-line class-methods-use-this */\n getAssociatedLegendOrLabel($input) {\n const $fieldset = $input.closest(\"fieldset\");\n\n if ($fieldset) {\n const $legends = $fieldset.getElementsByTagName(\"legend\");\n\n if ($legends.length) {\n const [$candidateLegend] = $legends;\n\n // If the input type is radio or checkbox, always use the legend if\n // There is one.\n if (\n $input instanceof HTMLInputElement &&\n ($input.type === \"checkbox\" || $input.type === \"radio\")\n ) {\n return $candidateLegend;\n }\n\n // For other input types, only scroll to the fieldset’s legend (instead\n // Of the label associated with the input) if the input would end up in\n // The top half of the screen.\n //\n // This should avoid situations where the input either ends up off the\n // Screen, or obscured by a software keyboard.\n const legendTop = $candidateLegend.getBoundingClientRect().top;\n const inputRect = $input.getBoundingClientRect();\n\n // If the browser doesn't support Element.getBoundingClientRect().height\n // Or window.innerHeight (like IE8), bail and just link to the label.\n if (inputRect.height && window.innerHeight) {\n const inputBottom = inputRect.top + inputRect.height;\n\n /* eslint-disable no-magic-numbers */\n if (inputBottom - legendTop < window.innerHeight / 2) {\n return $candidateLegend;\n }\n }\n }\n }\n\n return (\n document.querySelector(`label[for='${$input.getAttribute(\"id\")}']`) ??\n $input.closest(\"label\")\n );\n }\n}\n","export class FileInputDroppable {\n constructor($module) {\n this.$module = $module;\n this.$body = $module && $module.querySelector(\".tna-form-item__body\");\n this.$input = this.$body && this.$body.querySelector(\".tna-file-input\");\n\n if (!this.$module || !this.$body || !this.$input) {\n return;\n }\n\n this.acceptMutltipleFiles = this.$input.hasAttribute(\"multiple\");\n\n this.init();\n }\n\n init() {\n this.$droppableArea = document.createElement(\"div\");\n this.$droppableArea.classList.add(\n \"tna-file-input__droppable\",\n \"tna-file-input__droppable--empty\",\n );\n this.$body.insertBefore(this.$droppableArea, this.$input);\n this.$droppableArea.appendChild(this.$input);\n this.$pseudoSelectFileText = document.createElement(\"span\");\n this.$pseudoSelectFileText.setAttribute(\"aria-live\", \"polite\");\n this.$pseudoSelectFileText.classList.add(\n \"tna-file-input__droppable-status\",\n );\n const fileText = this.acceptMutltipleFiles ? \"files\" : \"file\";\n this.$pseudoSelectFileText.textContent = `No ${fileText} selected`;\n this.$droppableArea.appendChild(this.$pseudoSelectFileText);\n const $droppableButtons = document.createElement(\"div\");\n $droppableButtons.classList.add(\n \"tna-button-group\",\n \"tna-button-group--small\",\n \"tna-!--margin-top-s\",\n \"tna-file-input__droppable-buttons\",\n );\n this.$droppableArea.appendChild($droppableButtons);\n const $pseudoSelectFileButton = document.createElement(\"span\");\n $pseudoSelectFileButton.classList.add(\"tna-button\");\n $pseudoSelectFileButton.textContent = `Choose ${fileText}`;\n $droppableButtons.appendChild($pseudoSelectFileButton);\n const $pseudoDropFileButton = document.createElement(\"span\");\n $pseudoDropFileButton.textContent = `or drop ${fileText}`;\n $droppableButtons.appendChild($pseudoDropFileButton);\n this.$droppableAreaAriaLabel = document.createElement(\"span\");\n this.$droppableAreaAriaLabel.classList.add(\"tna-visually-hidden\");\n this.$droppableAreaAriaLabel.setAttribute(\"aria-live\", \"assertive\");\n this.$droppableArea.appendChild(this.$droppableAreaAriaLabel);\n\n this.$input.addEventListener(\"dragenter\", (event) =>\n this.showDropTarget(event),\n );\n this.$input.addEventListener(\"dragleave\", () => this.hideDropTarget());\n this.$input.addEventListener(\"dragend\", () => this.hideDropTarget());\n this.$input.addEventListener(\"change\", () => this.onChange());\n this.$input.addEventListener(\"drop\", () => this.onChange());\n }\n\n /* eslint-disable-next-line class-methods-use-this */\n isContainingFiles(dataTransfer) {\n const hasNoTypesInfo = !dataTransfer.types.length;\n const isDraggingFiles = dataTransfer.types.some((type) => type === \"Files\");\n return hasNoTypesInfo || isDraggingFiles;\n }\n\n showDropTarget(event, updateAriaLabel = true) {\n if (event.dataTransfer && this.isContainingFiles(event.dataTransfer)) {\n let classToAdd = \"tna-file-input__droppable--over\";\n if (event.dataTransfer.items.length) {\n classToAdd = \"tna-file-input__droppable--over-multiple\";\n }\n this.$droppableArea.classList.add(classToAdd);\n\n if (updateAriaLabel) {\n this.$droppableAreaAriaLabel.textContent = \"Entered drop zone\";\n }\n }\n }\n\n hideDropTarget(updateAriaLabel = true) {\n this.$droppableArea.classList.remove(\n \"tna-file-input__droppable--over\",\n \"tna-file-input__droppable--over-multiple\",\n );\n if (updateAriaLabel) {\n this.$droppableAreaAriaLabel.textContent = \"Left drop zone\";\n }\n }\n\n onChange() {\n const { files } = this.$input;\n if (this.acceptMutltipleFiles) {\n if (files.length) {\n let fileText = \"file\";\n /* eslint-disable-next-line no-magic-numbers */\n if (files.length > 1) {\n fileText += \"s\";\n }\n const textContent = `${files.length} ${fileText} selected`;\n this.$pseudoSelectFileText.textContent = textContent;\n } else {\n this.$pseudoSelectFileText.textContent = `No files selected`;\n }\n } else {\n this.$pseudoSelectFileText.textContent =\n /* eslint-disable-next-line no-magic-numbers */\n files[0]?.name || `No file selected`;\n }\n if (files.length) {\n this.$droppableArea.classList.remove(\"tna-file-input__droppable--empty\");\n } else {\n this.$droppableArea.classList.add(\"tna-file-input__droppable--empty\");\n }\n this.hideDropTarget(false);\n }\n}\n","import Cookies from \"@nationalarchives/cookies/src/index.js\";\n\nexport class Footer {\n constructor($module, themeCookieName = \"theme\") {\n this.$module = $module;\n this.$themeSelector =\n $module && $module.querySelector(\".tna-footer__theme-selector\");\n this.$themeSelectorNotice =\n $module && $module.querySelector(\".tna-footer__theme-selector-notice\");\n this.$themeSelectorEnableSettingsCookiesButton =\n this.$themeSelectorNotice &&\n this.$themeSelectorNotice.querySelector(\n \".tna-footer__theme-selector-enable-settings-cookies\",\n );\n this.$tnaTemplate = document.querySelector(\".tna-template\");\n\n if (\n !this.$module ||\n !this.$themeSelector ||\n !this.$themeSelectorNotice ||\n !this.$themeSelectorEnableSettingsCookiesButton ||\n !this.$tnaTemplate\n ) {\n return;\n }\n\n this.themeCookieName = themeCookieName;\n\n this.init();\n }\n\n init() {\n this.currentTheme = this.$themeSelector.dataset.themeOnLoad;\n\n this.cookies = new Cookies();\n\n this.$themeSelectorButtons = this.$themeSelector.querySelectorAll(\n \"button.tna-footer__theme-selector-button[value]\",\n );\n\n Array.from(this.$themeSelectorButtons).forEach(($themeSelectorButton) => {\n $themeSelectorButton.addEventListener(\"click\", (event) => {\n const $button = event.target;\n this.setTheme($button.value);\n this.selectThemeSelectorButton($button);\n });\n });\n\n this.$themeSelectorEnableSettingsCookiesButton.addEventListener(\n \"click\",\n () => {\n this.cookies.enablePreference(\"settings\");\n },\n );\n\n this.showThemeSelector();\n this.cookies.on(\"changePreference\", (data) => {\n if (Object.hasOwn(data, \"settings\")) {\n if (data.settings === true) {\n this.cookies.set(this.themeCookieName, this.currentTheme);\n this.$themeSelectorNotice.setAttribute(\"hidden\", \"\");\n } else {\n this.cookies.delete(this.themeCookieName);\n this.$themeSelectorNotice.removeAttribute(\"hidden\");\n }\n }\n });\n }\n\n showThemeSelector() {\n this.$themeSelector.removeAttribute(\"hidden\");\n if (this.cookies.exists(this.themeCookieName)) {\n const $currentThemeButton = Array.from(this.$themeSelectorButtons).find(\n ($button) => $button.value === this.cookies.get(this.themeCookieName),\n );\n if ($currentThemeButton) {\n this.selectThemeSelectorButton($currentThemeButton);\n }\n }\n if (!this.cookies.preference(\"settings\")) {\n this.$themeSelectorNotice.removeAttribute(\"hidden\");\n }\n }\n\n setTheme(theme) {\n if (theme === \"light\") {\n this.$tnaTemplate.classList.remove(\n \"tna-template--system-theme\",\n \"tna-template--dark-theme\",\n );\n } else if (theme === \"dark\") {\n this.$tnaTemplate.classList.remove(\"tna-template--system-theme\");\n this.$tnaTemplate.classList.add(`tna-template--dark-theme`);\n } else if (theme === \"system\") {\n this.$tnaTemplate.classList.remove(\"tna-template--dark-theme\");\n this.$tnaTemplate.classList.add(`tna-template--system-theme`);\n } else {\n return;\n }\n this.currentTheme = theme;\n if (this.cookies.preference(\"settings\")) {\n this.cookies.set(this.themeCookieName, this.currentTheme);\n } else {\n this.$themeSelectorNotice.removeAttribute(\"hidden\");\n }\n }\n\n selectThemeSelectorButton($selectedButton) {\n Array.from(this.$themeSelectorButtons).forEach(($button) => {\n if ($button.value === $selectedButton.value) {\n $button.classList.remove(\"tna-button--plain\");\n $button.setAttribute(\"aria-current\", true);\n } else {\n $button.classList.add(\"tna-button--plain\");\n $button.removeAttribute(\"aria-current\");\n }\n });\n }\n}\n","export class Gallery {\n constructor($module) {\n this.$module = $module;\n this.$itemsContainer =\n $module && $module.querySelector(\".tna-gallery__items\");\n this.$items =\n this.$itemsContainer &&\n this.$itemsContainer.querySelectorAll(\".tna-gallery__item\");\n this.$navigation =\n $module && $module.querySelector(\".tna-gallery__navigation\");\n this.$navigationItems =\n this.$navigation &&\n $module.querySelectorAll(\".tna-gallery__navigation-item\");\n this.$navigationButtons =\n $module && $module.querySelector(\".tna-gallery__navigation-buttons\");\n\n if (\n !this.$module ||\n !this.$itemsContainer ||\n !this.$items ||\n /* eslint-disable-next-line no-magic-numbers */\n this.$items.length < 2 ||\n !this.$navigation ||\n !this.$navigationItems ||\n !this.$navigationButtons\n ) {\n return;\n }\n\n this.$module.classList.add(\"tna-gallery--interactive\");\n\n this.$navigationButtonPrev = this.$navigationButtons.querySelector(\n \".tna-gallery__navigation-prev\",\n );\n this.$navigationButtonNext = this.$navigationButtons.querySelector(\n \".tna-gallery__navigation-next\",\n );\n\n this.setup();\n /* eslint-disable-next-line no-magic-numbers */\n this.currentId = this.$items[0].id;\n this.showItem(this.currentId);\n }\n\n setup() {\n this.$items.forEach(($item) => {\n $item.setAttribute(\"hidden\", \"\");\n $item.setAttribute(\"aria-hidden\", \"true\");\n $item\n .querySelector(\".tna-gallery__item-header\")\n ?.setAttribute(\"aria-hidden\", \"true\");\n });\n this.$navigation.removeAttribute(\"hidden\");\n this.$navigationItems.forEach(($item) => {\n $item.addEventListener(\"click\", () => {\n this.showItem($item.getAttribute(\"aria-controls\"));\n this.$itemsContainer.setAttribute(\"tabindex\", \"0\");\n this.$itemsContainer.focus();\n });\n });\n this.$module.addEventListener(\"keydown\", (event) => {\n let preventDefaultKeyAction = false;\n switch (event.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n this.showPreviousItem();\n preventDefaultKeyAction = true;\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n this.showNextItem();\n preventDefaultKeyAction = true;\n break;\n case \"Home\":\n this.showFirstItem();\n preventDefaultKeyAction = true;\n break;\n case \"End\":\n this.showLastItem();\n preventDefaultKeyAction = true;\n break;\n default:\n break;\n }\n if (preventDefaultKeyAction) {\n event.stopPropagation();\n event.preventDefault();\n }\n });\n\n this.$navigationButtons?.removeAttribute(\"hidden\");\n this.$navigationButtonPrev?.addEventListener(\"click\", () => {\n this.showPreviousItem();\n });\n this.$navigationButtonNext?.addEventListener(\"click\", () => {\n this.showNextItem();\n });\n\n this.$liveRegion = document.createElement(\"div\");\n this.$liveRegion.setAttribute(\"aria-live\", \"polite\");\n this.$liveRegion.setAttribute(\"aria-atomic\", \"true\");\n this.$liveRegion.setAttribute(\"class\", \"tna-gallery__item-header\");\n this.$itemsContainer.prepend(this.$liveRegion);\n this.$itemsContainer.classList.add(\"tna-gallery__items--hide-item-titles\");\n this.$itemsContainer.addEventListener(\"blur\", () =>\n this.$itemsContainer.removeAttribute(\"tabindex\"),\n );\n }\n\n showItem(id) {\n this.$items.forEach(($item) => {\n if (id && $item.id === id) {\n $item.removeAttribute(\"hidden\");\n $item.removeAttribute(\"aria-hidden\");\n } else {\n $item.setAttribute(\"hidden\", \"\");\n $item.setAttribute(\"aria-hidden\", \"true\");\n }\n });\n this.$navigationItems.forEach(($item) => {\n if (id) {\n if ($item.getAttribute(\"aria-controls\") === id) {\n $item.setAttribute(\"aria-current\", \"true\");\n } else {\n $item.setAttribute(\"aria-current\", \"false\");\n }\n } else {\n $item.setAttribute(\"aria-current\", \"false\");\n }\n });\n this.currentId = id;\n /* eslint-disable-next-line no-magic-numbers */\n this.$liveRegion.textContent = `Image ${this.getCurrentItemIndex() + 1} of ${this.$items.length}`;\n }\n\n getCurrentItemIndex() {\n return Array.from(this.$items).findIndex(\n ($item) => $item.id === this.currentId,\n );\n }\n\n showPreviousItem() {\n /* eslint-disable-next-line no-magic-numbers */\n let nextIndexToShow = this.getCurrentItemIndex() - 1;\n /* eslint-disable-next-line no-magic-numbers */\n if (nextIndexToShow < 0) {\n /* eslint-disable-next-line no-magic-numbers */\n nextIndexToShow = this.$items.length - 1;\n }\n this.showItem(this.$items[nextIndexToShow].id);\n }\n\n showNextItem() {\n /* eslint-disable-next-line no-magic-numbers */\n let nextIndexToShow = this.getCurrentItemIndex() + 1;\n if (nextIndexToShow >= this.$items.length) {\n /* eslint-disable-next-line no-magic-numbers */\n nextIndexToShow = 0;\n }\n this.showItem(this.$items[nextIndexToShow].id);\n }\n\n showFirstItem() {\n /* eslint-disable-next-line no-magic-numbers */\n this.showItem(this.$items[0].id);\n }\n\n showLastItem() {\n /* eslint-disable-next-line no-magic-numbers */\n this.showItem(this.$items[this.$items.length - 1].id);\n }\n}\n","export class GlobalHeader {\n constructor($module) {\n this.$module = $module;\n this.$toggleButton =\n $module && $module.querySelector(\".tna-global-header__navigation-button\");\n this.$navigation =\n $module &&\n $module.querySelector(\".tna-global-header__navigation-wrapper\");\n this.$topNavigation =\n $module &&\n $module.querySelector(\".tna-global-header__top-navigation-wrapper\");\n this.$links =\n $module &&\n ((this.$navigation &&\n this.$navigation.querySelectorAll(\"[tabindex='0']\")) ||\n (this.$topNavigation &&\n this.$topNavigation.querySelectorAll(\"[tabindex='0']\")));\n this.menuOpened = false;\n this.mql = window.matchMedia(\"(max-width: 48em)\");\n\n if (\n !this.$module ||\n !this.$toggleButton ||\n (!this.$navigation && !this.$topNavigation)\n ) {\n return;\n }\n\n this.$toggleButton.removeAttribute(\"hidden\");\n this.syncState();\n this.$toggleButton.addEventListener(\"click\", () =>\n this.handleToggleNavigation(),\n );\n if (\"addEventListener\" in this.mql) {\n this.mql.addEventListener(\"change\", () => this.syncState());\n } else {\n this.mql.addListener(() => this.syncState());\n }\n\n this.$module.addEventListener(\"keyup\", (event) => {\n if (event.code === \"Escape\" && this.mql.matches && this.menuOpened) {\n this.menuOpened = false;\n this.syncState();\n this.$toggleButton.focus();\n }\n });\n }\n\n handleToggleNavigation() {\n this.menuOpened = !this.menuOpened;\n this.syncState();\n }\n\n syncState() {\n if (this.mql.matches) {\n if (this.menuOpened) {\n this.show();\n } else {\n this.hide();\n }\n } else {\n this.show();\n }\n }\n\n hide() {\n if (this.$navigation) {\n this.$navigation.hidden = true;\n this.$navigation.setAttribute(\"aria-hidden\", \"true\");\n }\n if (this.$topNavigation) {\n this.$topNavigation.hidden = true;\n this.$topNavigation.setAttribute(\"aria-hidden\", \"true\");\n }\n this.$toggleButton.setAttribute(\"aria-expanded\", \"false\");\n this.$toggleButton.setAttribute(\"title\", \"Open menu\");\n this.$toggleButton.classList.remove(\n \"tna-global-header__navigation-button--opened\",\n );\n /* eslint-disable-next-line no-magic-numbers */\n for (let index = 0; index < this.$links.length; index += 1) {\n this.$links[index].setAttribute(\"tabindex\", \"-1\");\n }\n }\n\n show() {\n if (this.$navigation) {\n this.$navigation.hidden = false;\n this.$navigation.setAttribute(\"aria-hidden\", \"false\");\n }\n if (this.$topNavigation) {\n this.$topNavigation.hidden = false;\n this.$topNavigation.setAttribute(\"aria-hidden\", \"false\");\n }\n this.$toggleButton.setAttribute(\"aria-expanded\", \"true\");\n this.$toggleButton.setAttribute(\"title\", \"Close menu\");\n this.$toggleButton.classList.add(\n \"tna-global-header__navigation-button--opened\",\n );\n /* eslint-disable-next-line no-magic-numbers */\n for (let index = 0; index < this.$links.length; index += 1) {\n this.$links[index].setAttribute(\"tabindex\", \"0\");\n }\n }\n}\n","export class Header {\n constructor($module) {\n this.$module = $module;\n this.$toggleButton =\n $module && $module.querySelector(\".tna-header__navigation-button\");\n this.$navigation =\n $module && $module.querySelector(\".tna-header__navigation\");\n this.$links =\n $module &&\n this.$navigation &&\n this.$navigation.querySelectorAll(\"[tabindex='0']\");\n this.menuOpened = false;\n this.mql = window.matchMedia(\"(max-width: 48em)\");\n\n if (!this.$module || !this.$toggleButton || !this.$navigation) {\n return;\n }\n\n this.$toggleButton.removeAttribute(\"hidden\");\n this.syncState();\n this.$toggleButton.addEventListener(\"click\", () =>\n this.handleToggleNavigation(),\n );\n if (\"addEventListener\" in this.mql) {\n this.mql.addEventListener(\"change\", () => this.syncState());\n } else {\n this.mql.addListener(() => this.syncState());\n }\n\n this.$module.addEventListener(\"keyup\", (event) => {\n if (event.code === \"Escape\" && this.menuOpened && this.mql.matches) {\n this.menuOpened = false;\n this.syncState();\n this.$toggleButton.focus();\n }\n });\n }\n\n handleToggleNavigation() {\n this.menuOpened = !this.menuOpened;\n this.syncState();\n }\n\n syncState() {\n if (this.mql.matches) {\n if (this.menuOpened) {\n this.show();\n } else {\n this.hide();\n }\n } else {\n this.show();\n }\n }\n\n show() {\n this.$navigation.classList.add(\"tna-header__navigation--open\");\n this.$navigation.removeAttribute(\"hidden\");\n this.$navigation.setAttribute(\"aria-hidden\", \"false\");\n this.$toggleButton.setAttribute(\"aria-expanded\", \"true\");\n this.$toggleButton.setAttribute(\"title\", \"Close menu\");\n this.$toggleButton.classList.add(\"tna-header__navigation-button--opened\");\n\n /* eslint-disable-next-line no-magic-numbers */\n for (let index = 0; index < this.$links.length; index += 1) {\n this.$links[index].setAttribute(\"tabindex\", \"0\");\n }\n }\n\n hide() {\n this.$navigation.classList.remove(\"tna-header__navigation--open\");\n this.$navigation.hidden = true;\n this.$navigation.setAttribute(\"aria-hidden\", \"true\");\n this.$toggleButton.setAttribute(\"aria-expanded\", \"false\");\n this.$toggleButton.setAttribute(\"title\", \"Open menu\");\n this.$toggleButton.classList.remove(\n \"tna-header__navigation-button--opened\",\n );\n\n /* eslint-disable-next-line no-magic-numbers */\n for (let index = 0; index < this.$links.length; index += 1) {\n this.$links[index].setAttribute(\"tabindex\", \"-1\");\n }\n }\n}\n","import uuidv4 from \"../../lib/uuid.mjs\";\n\nexport class Picture {\n constructor($module) {\n this.$module = $module;\n this.$imageWrapper =\n $module && $module.querySelector(\".tna-picture__image-wrapper\");\n\n this.$transcriptToggle =\n this.$imageWrapper &&\n this.$imageWrapper.querySelector(\".tna-picture__toggle-transcript\");\n\n this.$transcript =\n $module && $module.querySelector(\".tna-picture__transcript\");\n this.transcriptOpened = false;\n\n if (\n !this.$module ||\n !this.$imageWrapper ||\n !this.$transcriptToggle ||\n !this.$transcript\n ) {\n return;\n }\n\n this.openLabel =\n this.$module.dataset.informationLabelOpen || \"Open transcript\";\n this.closeLabel =\n this.$module.dataset.informationLabelClose || \"Close transcript\";\n\n this.init();\n }\n\n init() {\n const uniqueId = `tna-picture-${uuidv4()}`;\n\n this.$transcriptToggle.removeAttribute(\"hidden\");\n this.$transcriptToggle.setAttribute(\"aria-controls\", uniqueId);\n this.$transcriptToggle.innerText = this.openLabel;\n this.$transcriptToggle.addEventListener(\"click\", () =>\n this.toggleTranscript(),\n );\n\n this.$transcript.setAttribute(\"id\", uniqueId);\n this.$transcript.setAttribute(\"hidden\", \"\");\n\n this.$transcript.addEventListener(\"keydown\", (event) => {\n switch (event.key) {\n case \"Escape\":\n this.toggleTranscript();\n this.$transcriptToggle.focus();\n break;\n default:\n break;\n }\n });\n }\n\n toggleTranscript() {\n this.transcriptOpened = !this.transcriptOpened;\n if (this.transcriptOpened) {\n this.$transcriptToggle.setAttribute(\"aria-expanded\", true);\n this.$transcriptToggle.innerText = this.closeLabel;\n this.$transcript.removeAttribute(\"hidden\");\n } else {\n this.$transcriptToggle.setAttribute(\"aria-expanded\", false);\n this.$transcriptToggle.innerText = this.openLabel;\n this.$transcript.setAttribute(\"hidden\", \"\");\n }\n }\n}\n","export class Sidebar {\n constructor($module, options = {}) {\n this.$module = $module;\n this.items =\n $module &&\n Array.from($module.querySelectorAll(\".tna-sidebar__item\"))\n .map(($item) => {\n const id = $item\n .querySelector(\".tna-sidebar__link[href^='#']\")\n .getAttribute(\"href\")\n /* eslint-disable-next-line no-magic-numbers */\n .substring(1);\n const target = document.getElementById(id);\n return {\n $item,\n id,\n target,\n };\n })\n .filter((item) => item.target);\n\n if (!this.$module || !this.items) {\n return;\n }\n\n /* eslint-disable-next-line no-magic-numbers */\n const { scrollTopThreshold = 0, disableHighlightSize = \"small\" } = options;\n this.scrollTopThreshold = scrollTopThreshold;\n this.disableHighlightSize = disableHighlightSize;\n\n this.init();\n }\n\n init() {\n this.breakpoints = {\n tiny:\n getComputedStyle(document.documentElement).getPropertyValue(\n \"--media-breakpoint-tiny\",\n ) || \"480px\",\n small:\n getComputedStyle(document.documentElement).getPropertyValue(\n \"--media-breakpoint-small\",\n ) || \"768px\",\n medium:\n getComputedStyle(document.documentElement).getPropertyValue(\n \"--media-breakpoint-medium\",\n ) || \"1024px\",\n };\n\n if (this.disableHighlightSize) {\n if (!Object.keys(this.breakpoints).includes(this.disableHighlightSize)) {\n throw new Error(\n `Invalid value for disableHighlightSize: ${this.disableHighlightSize}. Expected one of: ${Object.keys(this.breakpoints).join(\", \")}`,\n );\n }\n this.hideOnDevice = window.matchMedia(\n `(max-width: ${this.breakpoints[this.disableHighlightSize]})`,\n );\n } else {\n this.hideOnDevice = null;\n }\n\n this.currentItem = null;\n\n window.addEventListener(\"scroll\", () => this.highlightCurrentSection());\n window.addEventListener(\"resize\", () => this.highlightCurrentSection());\n this.highlightCurrentSection();\n }\n\n highlightCurrentSection() {\n if (this.hideOnDevice && this.hideOnDevice.matches) {\n this.items.forEach((item) => {\n item.$item.classList.remove(\"tna-sidebar__item--current\");\n });\n this.currentItem = null;\n return;\n }\n\n const $topItem = this.items.findLast(\n (item) =>\n Math.floor(item.target.getBoundingClientRect().top) <=\n this.scrollTopThreshold,\n );\n\n if ($topItem !== this.currentItem) {\n this.items.forEach((item) => {\n if ($topItem && item === $topItem) {\n this.currentItem = item;\n this.currentItem.$item.classList.add(\"tna-sidebar__item--current\");\n } else {\n item.$item.classList.remove(\"tna-sidebar__item--current\");\n }\n });\n }\n this.currentItem = $topItem || null;\n }\n}\n","export class SkipLink {\n linkedElementListener = false;\n\n constructor($module) {\n this.$module = $module;\n this.linkedElementId = $module.getAttribute(\"href\")?.split(\"#\").pop();\n this.$linkedElement =\n $module &&\n this.linkedElementId &&\n document.getElementById(this.linkedElementId);\n\n if (this.$module && this.$linkedElement) {\n this.$module.addEventListener(\"click\", () => this.focusLinkedElement());\n }\n }\n\n focusLinkedElement() {\n if (!this.$linkedElement.getAttribute(\"tabindex\")) {\n this.$linkedElement.setAttribute(\"tabindex\", \"-1\");\n this.$linkedElement.classList.add(\"tna-!--no-focus-style\");\n\n if (!this.linkedElementListener) {\n this.$linkedElement.addEventListener(\"blur\", () =>\n this.removeFocusProperties(),\n );\n this.linkedElementListener = true;\n }\n }\n\n this.$linkedElement.focus();\n }\n\n removeFocusProperties() {\n this.$linkedElement.removeAttribute(\"tabindex\");\n this.$linkedElement.classList.remove(\"tna-!--no-focus-style\");\n }\n}\n","export class Tabs {\n constructor($module) {\n this.$module = $module;\n this.$tabList = $module && $module.querySelector(\".tna-tabs__list\");\n this.$tabListItemLinks =\n $module &&\n this.$tabList &&\n this.$tabList.querySelectorAll(\".tna-tabs__button\");\n this.$tabItems = $module && $module.querySelectorAll(\".tna-tabs__item\");\n\n if (\n !this.$module ||\n !this.$tabList ||\n !this.$tabListItemLinks ||\n !this.$tabItems ||\n this.$tabListItemLinks.length !== this.$tabItems.length\n ) {\n return;\n }\n\n this.currentTabIndex = 0;\n this.init();\n }\n\n init() {\n this.$module.classList.add(\"tna-tabs--interactive\");\n this.$tabList.removeAttribute(\"hidden\");\n this.$tabListItemLinks.forEach(($tabListItemLink) => {\n const tabPanelID = $tabListItemLink.getAttribute(\"aria-controls\");\n $tabListItemLink.setAttribute(\"aria-selected\", false);\n const $tabPanel = document.getElementById(tabPanelID);\n $tabPanel.setAttribute(\"aria-labelledby\", $tabListItemLink.id);\n $tabPanel.setAttribute(\"role\", \"tabpanel\");\n $tabListItemLink.addEventListener(\n \"click\",\n (event) => this.handleItemLinkClick(event),\n true,\n );\n });\n this.switchTabByIndex(this.currentTabIndex);\n this.$module.addEventListener(\"keydown\", (event) =>\n this.handleItemLinkKeyDown(event),\n );\n }\n\n handleItemLinkClick(itemLinkClickEvent) {\n itemLinkClickEvent.preventDefault();\n const targetItem =\n itemLinkClickEvent.currentTarget.getAttribute(\"aria-controls\");\n this.switchTabByID(targetItem);\n }\n\n handleItemLinkKeyDown(itemLinkKeyDownEvent) {\n let preventDefaultKeyAction = false;\n switch (itemLinkKeyDownEvent.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n this.previousTab();\n preventDefaultKeyAction = true;\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n this.nextTab();\n preventDefaultKeyAction = true;\n break;\n case \"Home\":\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(0, true);\n preventDefaultKeyAction = true;\n break;\n case \"End\":\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(this.$tabListItemLinks.length - 1, true);\n preventDefaultKeyAction = true;\n break;\n default:\n break;\n }\n if (preventDefaultKeyAction) {\n itemLinkKeyDownEvent.stopPropagation();\n itemLinkKeyDownEvent.preventDefault();\n }\n }\n\n nextTab() {\n /* eslint-disable-next-line no-magic-numbers */\n if (this.currentTabIndex < this.$tabListItemLinks.length - 1) {\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(this.currentTabIndex + 1, true);\n } else {\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(0, true);\n }\n }\n\n previousTab() {\n /* eslint-disable-next-line no-magic-numbers */\n if (this.currentTabIndex >= 1) {\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(this.currentTabIndex - 1, true);\n } else {\n /* eslint-disable-next-line no-magic-numbers */\n this.switchTabByIndex(this.$tabListItemLinks.length - 1, true);\n }\n }\n\n switchTabByIndex(newIndex, switchFocus = false) {\n this.currentTabIndex = newIndex;\n this.$tabListItemLinks.forEach(($tabListItemLink, index) => {\n if (index === this.currentTabIndex) {\n $tabListItemLink.setAttribute(\"aria-selected\", true);\n $tabListItemLink.setAttribute(\"tabindex\", \"0\");\n if (switchFocus) {\n $tabListItemLink.focus();\n }\n } else {\n $tabListItemLink.setAttribute(\"aria-selected\", false);\n $tabListItemLink.setAttribute(\"tabindex\", \"-1\");\n }\n });\n this.$tabItems.forEach(($tabItem, index) => {\n if (index === this.currentTabIndex) {\n $tabItem.removeAttribute(\"hidden\");\n $tabItem.setAttribute(\"tabindex\", \"0\");\n } else {\n $tabItem.setAttribute(\"hidden\", \"\");\n $tabItem.setAttribute(\"tabindex\", \"-1\");\n }\n });\n }\n\n switchTabByID(targetId) {\n const index = Array.from(this.$tabItems).findIndex(\n ($tabItem) => $tabItem.getAttribute(\"id\") === targetId,\n );\n this.switchTabByIndex(index);\n }\n}\n","export class TextInputPassword {\n constructor($module) {\n this.$module = $module;\n this.$input = $module && $module.querySelector(\".tna-text-input\");\n\n if (\n !this.$module ||\n !this.$input ||\n this.$input.getAttribute(\"type\") !== \"password\"\n ) {\n return;\n }\n\n this.$textInputWrapper = document.createElement(\"div\");\n this.$textInputWrapper.classList.add(\"tna-text-input-wrapper\");\n\n this.$textInputPasswordToggle = document.createElement(\"button\");\n this.$textInputPasswordToggle.setAttribute(\"type\", \"button\");\n this.$textInputPasswordToggle.classList.add(\n \"tna-button\",\n \"tna-button--small\",\n \"tna-button--icon-only\",\n );\n this.$textInputPasswordToggle.setAttribute(\"aria-controls\", this.$input.id);\n this.updateTogglePasswordButtonText();\n\n this.$textInputWrapper.appendChild(this.$input);\n this.$textInputWrapper.appendChild(this.$textInputPasswordToggle);\n this.$module.appendChild(this.$textInputWrapper);\n\n this.$textInputPasswordToggle.addEventListener(\"click\", () => {\n this.togglePasswordType();\n this.$input.focus();\n });\n }\n\n togglePasswordType() {\n if (this.$input.getAttribute(\"type\") === \"password\") {\n this.$input.setAttribute(\"type\", \"text\");\n } else {\n this.$input.setAttribute(\"type\", \"password\");\n }\n this.updateTogglePasswordButtonText();\n }\n\n updateTogglePasswordButtonText() {\n if (this.$input.getAttribute(\"type\") === \"password\") {\n this.$textInputPasswordToggle.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\" height=\"24\" aria-hidden=\"true\" focusable=\"false\"><!--!Font Awesome Free v7.0.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M320 96C239.2 96 174.5 132.8 127.4 176.6C80.6 220.1 49.3 272 34.4 307.7C31.1 315.6 31.1 324.4 34.4 332.3C49.3 368 80.6 420 127.4 463.4C174.5 507.1 239.2 544 320 544C400.8 544 465.5 507.2 512.6 463.4C559.4 419.9 590.7 368 605.6 332.3C608.9 324.4 608.9 315.6 605.6 307.7C590.7 272 559.4 220 512.6 176.6C465.5 132.9 400.8 96 320 96zM176 320C176 240.5 240.5 176 320 176C399.5 176 464 240.5 464 320C464 399.5 399.5 464 320 464C240.5 464 176 399.5 176 320zM320 256C320 291.3 291.3 320 256 320C244.5 320 233.7 317 224.3 311.6C223.3 322.5 224.2 333.7 227.2 344.8C240.9 396 293.6 426.4 344.8 412.7C396 399 426.4 346.3 412.7 295.1C400.5 249.4 357.2 220.3 311.6 224.3C316.9 233.6 320 244.4 320 256z\" /></svg>Show password`;\n this.$textInputPasswordToggle.setAttribute(\"title\", \"Show password\");\n this.$textInputPasswordToggle.setAttribute(\"aria-label\", \"Show password\");\n } else {\n this.$textInputPasswordToggle.innerHTML = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\" height=\"24\" aria-hidden=\"true\" focusable=\"false\"><!--!Font Awesome Free v7.0.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path d=\"M73 39.1C63.6 29.7 48.4 29.7 39.1 39.1C29.8 48.5 29.7 63.7 39 73.1L567 601.1C576.4 610.5 591.6 610.5 600.9 601.1C610.2 591.7 610.3 576.5 600.9 567.2L504.5 470.8C507.2 468.4 509.9 466 512.5 463.6C559.3 420.1 590.6 368.2 605.5 332.5C608.8 324.6 608.8 315.8 605.5 307.9C590.6 272.2 559.3 220.2 512.5 176.8C465.4 133.1 400.7 96.2 319.9 96.2C263.1 96.2 214.3 114.4 173.9 140.4L73 39.1zM236.5 202.7C260 185.9 288.9 176 320 176C399.5 176 464 240.5 464 320C464 351.1 454.1 379.9 437.3 403.5L402.6 368.8C415.3 347.4 419.6 321.1 412.7 295.1C399 243.9 346.3 213.5 295.1 227.2C286.5 229.5 278.4 232.9 271.1 237.2L236.4 202.5zM357.3 459.1C345.4 462.3 332.9 464 320 464C240.5 464 176 399.5 176 320C176 307.1 177.7 294.6 180.9 282.7L101.4 203.2C68.8 240 46.4 279 34.5 307.7C31.2 315.6 31.2 324.4 34.5 332.3C49.4 368 80.7 420 127.5 463.4C174.6 507.1 239.3 544 320.1 544C357.4 544 391.3 536.1 421.6 523.4L357.4 459.2z\" /></svg>Hide password`;\n this.$textInputPasswordToggle.setAttribute(\"title\", \"Hide password\");\n this.$textInputPasswordToggle.setAttribute(\"aria-label\", \"Hide password\");\n }\n }\n}\n","export class TextAreaItemisedRows {\n constructor($module, options = {}) {\n this.$module = $module;\n this.$formFieldInput =\n this.$module && this.$module.querySelector(\".tna-textarea\");\n this.$formFieldInputHint =\n this.$module && this.$module.querySelector(\".tna-form-item__hint\");\n this.$formFieldBody =\n this.$module && this.$module.querySelector(\".tna-form-item__body\");\n\n if (\n !this.$module ||\n !this.$formFieldInput ||\n !this.$formFieldBody ||\n this.$formFieldInput.getAttribute(\"hidden\") !== null\n ) {\n return;\n }\n\n const { enhancedHint } = options;\n this.enhancedHint = enhancedHint || \"Enter an item and press enter\";\n\n this.init();\n }\n\n init() {\n this.values = this.$formFieldInput.value\n .split(\"\\n\")\n .map((value) => value.trim())\n .filter((value) => value);\n\n this.id = this.$formFieldInput.id;\n\n this.$formFieldNewInput = document.createElement(\"input\");\n this.$formFieldNewInput.classList.add(\"tna-text-input\");\n [\"id\", \"aria-describedby\"].forEach((attribute) => {\n this.$formFieldNewInput.setAttribute(\n attribute,\n this.$formFieldInput.getAttribute(attribute),\n );\n this.$formFieldInput.removeAttribute(attribute);\n });\n this.$formFieldBody.appendChild(this.$formFieldNewInput);\n this.$formFieldInput.setAttribute(\"hidden\", \"\");\n this.$formFieldInput.addEventListener(\"keyup\", () => this.updateList());\n this.$formFieldNewInput.addEventListener(\"keypress\", (event) => {\n if (event.key === \"Enter\") {\n this.appendValue(event.target.value);\n }\n });\n\n this.$formFieldNewInputAddButton = document.createElement(\"button\");\n this.$formFieldNewInputAddButton.setAttribute(\"type\", \"button\");\n this.$formFieldNewInputAddButton.classList.add(\n \"tna-button\",\n \"tna-button--small\",\n );\n this.$formFieldNewInputAddButtonInner = document.createElement(\"span\");\n this.$formFieldNewInputAddButtonInner.innerText = \"Add\";\n this.$formFieldNewInputAddButtonInnerExtra = document.createElement(\"span\");\n this.$formFieldNewInputAddButtonInnerExtra.classList.add(\n \"tna-visually-hidden\",\n );\n this.$formFieldNewInputAddButtonInnerExtra.innerText = \" to list\";\n this.$formFieldNewInputAddButtonInner.appendChild(\n this.$formFieldNewInputAddButtonInnerExtra,\n );\n this.$formFieldNewInputAddButton.appendChild(\n this.$formFieldNewInputAddButtonInner,\n );\n this.$formFieldBody.appendChild(this.$formFieldNewInputAddButton);\n this.$formFieldNewInputAddButton.addEventListener(\"click\", () => {\n this.appendValue(this.$formFieldNewInput.value);\n });\n\n this.$formFieldLiveAria = document.createElement(\"div\");\n this.$formFieldLiveAria.setAttribute(\"aria-live\", \"assertive\");\n this.$formFieldLiveAria.classList.add(\"tna-visually-hidden\");\n this.$module.appendChild(this.$formFieldLiveAria);\n\n this.$formFieldCounter = document.createElement(\"p\");\n this.$formFieldCounter.id = `${this.id}-list-helper`;\n this.$formFieldCounter.classList.add(\"tna-!--margin-top-xs\");\n this.$module.appendChild(this.$formFieldCounter);\n\n this.$formFieldNewInput.setAttribute(\n \"aria-describedby\",\n `${this.$formFieldNewInput.getAttribute(\"aria-describedby\")} ${\n this.$formFieldCounter.id\n }`,\n );\n\n this.$valuesList = document.createElement(\"ul\");\n this.$valuesList.classList.add(\n \"tna-compound-filters\",\n \"tna-!--margin-top-xs\",\n );\n this.$valuesList.addEventListener(\"blur\", () => {\n this.$valuesList.removeAttribute(\"tabindex\");\n this.updateAriaText(\"\");\n });\n this.$module.appendChild(this.$valuesList);\n\n if (!this.$formFieldInputHint) {\n this.$formFieldInputHint = document.createElement(\"p\");\n this.$formFieldInputHint.classList.add(\"tna-form-item__hint\");\n this.$formFieldBody.parentNode.insertBefore(\n this.$formFieldInputHint,\n this.$formFieldBody,\n );\n }\n this.$formFieldInputHint.innerText = this.enhancedHint;\n\n this.updateList();\n }\n\n updateAriaText(content) {\n this.$formFieldLiveAria.innerText = content;\n }\n\n /* eslint-disable-next-line class-methods-use-this */\n normaliseValue(value) {\n return value.replace(/\\s{2,}/u, \" \").trim();\n }\n\n isValueInList(value) {\n return this.values\n .map((eachValue) => this.normaliseValue(eachValue).toLowerCase())\n .includes(value.toLowerCase().trim());\n }\n\n appendValue(value) {\n const newValue = this.normaliseValue(value);\n if (newValue) {\n if (this.isValueInList(newValue)) {\n this.updateAriaText(`'${newValue}' already added`);\n } else {\n this.values.push(newValue);\n this.$formFieldInput.value = this.values.join(\"\\n\");\n this.updateList();\n this.updateAriaText(`'${newValue}' added`);\n }\n } else {\n this.updateAriaText(\"Enter an item to add\");\n }\n this.$formFieldNewInput.value = \"\";\n this.$formFieldNewInput.focus();\n }\n\n removeValue(value) {\n const removeValue = this.normaliseValue(value);\n if (removeValue && this.isValueInList(removeValue)) {\n this.values = this.values.filter(\n (existingValue) => existingValue !== removeValue,\n );\n this.$formFieldInput.value = this.values.join(\"\\n\");\n this.updateList();\n this.updateAriaText(`'${removeValue}' removed`);\n }\n if (this.values.length) {\n this.$valuesList.setAttribute(\"tabindex\", \"0\");\n this.$valuesList.focus();\n } else {\n this.$formFieldNewInput.focus();\n }\n }\n\n updateList() {\n this.$valuesList.innerHTML = \"\";\n this.values\n .map((value) => {\n const $item = document.createElement(\"li\");\n $item.classList.add(\"tna-compound-filters__item\");\n const $itemLabel = document.createElement(\"span\");\n $itemLabel.innerText = value;\n $item.appendChild($itemLabel);\n\n const $removeItemButton = document.createElement(\"button\");\n $removeItemButton.innerText = `Remove '${value}'`;\n $removeItemButton.setAttribute(\"type\", \"button\");\n $removeItemButton.classList.add(\"tna-compound-filters__link\");\n $removeItemButton.addEventListener(\"click\", () => {\n this.removeValue(value);\n });\n $item.appendChild($removeItemButton);\n return $item;\n })\n .forEach(($item) => this.$valuesList.appendChild($item));\n\n let innerTextItemValue = \"item\";\n /* eslint-disable-next-line no-magic-numbers */\n if (this.values.length !== 1) {\n innerTextItemValue += \"s\";\n }\n const innerTextValue = `${this.values.length} ${innerTextItemValue} added`;\n this.$formFieldCounter.innerText = innerTextValue;\n }\n}\n","import uuidv4 from \"./uuid.mjs\";\n\nexport const iso8601ToPrettyDatetime = (dateStr) => {\n const datetime = dateStr;\n\n if (!datetime) {\n throw new Error(\"No datetime provided\");\n }\n const isDateTime =\n /^\\d{4}(?:-\\d{2}){2}(?:T| )\\d{2}(?::\\d{2}){1,2}(?:\\.\\d+)?(?:Z|(?:[+-]\\d{2}:\\d{2}))?$/u.test(\n datetime,\n );\n const isDate = /^\\d{4}(?:-\\d{2}){2}$/u.test(datetime);\n if (!isDateTime && !isDate) {\n throw new Error(\"Invalid datetime provided\");\n }\n\n const date = new Date(datetime);\n if (!(date instanceof Date) || isNaN(date)) {\n throw new Error(\"Invalid datetime provided\");\n }\n\n const dayString = date.toLocaleDateString(\"en-GB\", {\n weekday: \"long\",\n });\n const dateString = date.toLocaleDateString(\"en-GB\", {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n });\n\n if (isDateTime && (date.getHours() || date.getMinutes())) {\n let timeString = date.toLocaleTimeString(\"en-GB\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n if (date.getSeconds()) {\n timeString = date.toLocaleTimeString(\"en-GB\", {\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n });\n }\n return `${dayString} ${dateString}, ${timeString}`;\n }\n return `${dayString} ${dateString}`;\n};\n\n/*\n * ==========================================\n * Transform any <time> element into a pretty\n * and human readable format that is based on\n * the valid ISO 8601 datetime attribute. The\n * replaced value will be localised according\n * to user's system settings, repurposing the\n * original text content as a title attribute\n * to allow users to see the value. A null or\n * invalid datetime format will result in the\n * element not being modified. If the updated\n * value is similar to the starting value for\n * the element text content, then the element\n * will not be updated to avoid redundancy.\n * ------------------------------------------\n * For example if the user's system has a UTC\n * timezone set then the element:\n *\n * <time\n * datetime=\"2026-03-05T13:48:00-05:00\"\n * >\n * 5 March 2026, 13:48 (UTC -5)\n * </time>\n *\n * would become:\n *\n * <time\n * datetime=\"2026-03-05T13:48:00-05:00\"\n * title=\"5 March 2026, 13:48 (UTC -5)\"\n * >\n * Thursday 5 March 2026, 09:48\n * </time>\n * ==========================================\n */\nexport const updateTimeElement = ($el) => {\n const datetime = $el.getAttribute(\"datetime\");\n\n try {\n const prettyDatetime = iso8601ToPrettyDatetime(datetime);\n if (!prettyDatetime.includes($el.textContent)) {\n $el.setAttribute(\"title\", $el.textContent);\n $el.textContent = prettyDatetime;\n }\n // eslint-disable-next-line no-unused-vars\n } catch (error) {\n // Do nothing if the datetime is invalid or not provided\n }\n};\n\nexport const checkTableForScroll = ($tableWrapper) => {\n const $caption = $tableWrapper.querySelector(\"caption\");\n if (!($tableWrapper.dataset.tableScrollInitialised === \"true\")) {\n if ($caption && !$caption.id) {\n $caption.id = `table-caption-${uuidv4()}`;\n }\n $tableWrapper.dataset.tableScrollInitialised = \"true\";\n }\n if ($tableWrapper.scrollWidth > $tableWrapper.clientWidth) {\n $tableWrapper.setAttribute(\"tabindex\", \"0\");\n $tableWrapper.setAttribute(\"role\", \"region\");\n $tableWrapper.setAttribute(\"aria-labelledby\", $caption?.id || \"\");\n $tableWrapper.classList.add(\"tna-table-wrapper--scroll\");\n } else {\n $tableWrapper.removeAttribute(\"tabindex\");\n $tableWrapper.removeAttribute(\"role\");\n $tableWrapper.removeAttribute(\"aria-labelledby\");\n $tableWrapper.classList.remove(\"tna-table-wrapper--scroll\");\n }\n};\n","/* eslint-disable no-magic-numbers */\n/* eslint-disable no-bitwise */\nconst uuidv4 = () =>\n ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/gu, (char) =>\n (\n char ^\n (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (char / 4)))\n ).toString(16),\n );\n\nexport default uuidv4;\n","// The module cache\nconst __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tconst cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tconst module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter/value functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tif(Array.isArray(definition)) {\n\t\tvar i = 0;\n\t\twhile(i < definition.length) {\n\t\t\tvar key = definition[i++];\n\t\t\tvar binding = definition[i++];\n\t\t\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};"],"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","scope","$scope","HTMLElement","$html","classList","add","onFirstTouch","removeEventListener","addEventListener","remove","$tableWrappers","querySelectorAll","$tableWrapper","_lib_helpers_mjs__WEBPACK_IMPORTED_MODULE_17__","DJ","contains","FH","$accordion","_components_accordion_accordion_mjs__WEBPACK_IMPORTED_MODULE_0__","Accordion","$breadcrumbs","querySelector","_components_breadcrumbs_breadcrumbs_mjs__WEBPACK_IMPORTED_MODULE_1__","Breadcrumbs","$codeBlock","_components_code_block_code_block_mjs__WEBPACK_IMPORTED_MODULE_2__","CodeBlock","$cookieBanner","_components_cookie_banner_cookie_banner_mjs__WEBPACK_IMPORTED_MODULE_3__","CookieBanner","$dateInput","_components_date_input_date_input_mjs__WEBPACK_IMPORTED_MODULE_4__","DateInputProgressive","$errorSummary","_components_error_summary_error_summary_mjs__WEBPACK_IMPORTED_MODULE_5__","ErrorSummary","$fileInput","_components_file_input_file_input_mjs__WEBPACK_IMPORTED_MODULE_6__","FileInputDroppable","$footer","_components_footer_footer_mjs__WEBPACK_IMPORTED_MODULE_7__","Footer","$gallery","_components_gallery_gallery_mjs__WEBPACK_IMPORTED_MODULE_8__","Gallery","$globalHeader","_components_global_header_global_header_mjs__WEBPACK_IMPORTED_MODULE_9__","GlobalHeader","$header","_components_header_header_mjs__WEBPACK_IMPORTED_MODULE_10__","Header","$picture","_components_picture_picture_mjs__WEBPACK_IMPORTED_MODULE_11__","Picture","$sidebar","scrollTopThreshold","disableHighlightSize","_components_sidebar_sidebar_mjs__WEBPACK_IMPORTED_MODULE_12__","Sidebar","$skipLink","_components_skip_link_skip_link_mjs__WEBPACK_IMPORTED_MODULE_13__","SkipLink","$tabModule","_components_tabs_tabs_mjs__WEBPACK_IMPORTED_MODULE_14__","Tabs","$textAreaWithItemisedRows","enhancedHint","_components_textarea_textarea_mjs__WEBPACK_IMPORTED_MODULE_16__","TextAreaItemisedRows","$textInputPassword","_components_text_input_text_input_mjs__WEBPACK_IMPORTED_MODULE_15__","TextInputPassword","matchMedia","evt","matches","$element","setAttribute","wasClosed","removeAttribute","getXPathTo","id","body","tagName","ix","parentNode","siblings","childNodes","index","sibling","nodeType","getClosestElement","$startingElement","matchingElementSelectors","heading","$search","previousElementSibling","some","matchingElementSelector","innerText","parentElement","getClosestHeading","valueGetters","text","$el","replace","html","innerHTML","instance","checked","expanded","getAttribute","toString","closestHeading","xpath","target","getFileDetails","Array","from","files","file","name","size","type","componentAnalytics","areaName","rootEventName","rootData","data_component_name","eventName","targetElement","state","data_link_type","data_link","data_position","group","closest","hasAttribute","data_section","media_type","media_duration","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","computedValueParameters","computedValue","recordEvent","xPath","timeSincePageLoad","entries","valueOrFunction","push","getTnaMetaTags","head","$metaEl","RegExp","getUserPreferences","userPreferences","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","$module","$items","allowMultipleItemsOpen","singleOpenItem","$item","initItem","initState","$toggleAllButton","syncToggleAllButton","isAllOpen","closeItem","openItem","$heading","$content","$headingButton","isopen","closeAllItemsExcept","$wrapper","_lib_helpers_mjs__WEBPACK_IMPORTED_MODULE_0__","$excludeItem","closeAllLabel","openAllLabel","$breadcrumbsList","uniqueId","_lib_uuid_mjs__WEBPACK_IMPORTED_MODULE_0__","$expandable","style","display","$expandButton","focus","nextSibling","$code","$copyButton","clipboard","writeText","$acceptButton","$rejectButton","$prompt","$acceptedMessage","$rejectedMessage","$closeButtons","_nationalarchives_cookies_src_index_js__WEBPACK_IMPORTED_MODULE_0__","cookiePreferencesSetKey","accept","reject","complete","$closeButton","close","$yearWrapper","$yearInput","$monthWrapper","$monthInput","$dayWrapper","$dayInput","update","isValidYear","showMonth","isValidMonth","showDay","hideDay","hideMonth","yearValue","isNaN","monthRawValue","monthIntValue","disableAutofocus","setFocus","handleClick","isFocusable","onBlur","onBeforeFocus","$target","focusTarget","preventDefault","getFragmentFromUrl","url","pop","HTMLAnchorElement","inputId","href","$input","getElementById","$legendOrLabel","getAssociatedLegendOrLabel","scrollIntoView","preventScroll","$fieldset","$legends","$candidateLegend","HTMLInputElement","legendTop","getBoundingClientRect","top","inputRect","height","innerHeight","$body","acceptMutltipleFiles","$droppableArea","$pseudoSelectFileText","fileText","textContent","$droppableButtons","$pseudoSelectFileButton","$pseudoDropFileButton","$droppableAreaAriaLabel","showDropTarget","hideDropTarget","onChange","isContainingFiles","dataTransfer","hasNoTypesInfo","types","isDraggingFiles","updateAriaLabel","classToAdd","items","themeCookieName","$themeSelector","$themeSelectorNotice","$themeSelectorEnableSettingsCookiesButton","$tnaTemplate","currentTheme","themeOnLoad","$themeSelectorButtons","$themeSelectorButton","$button","setTheme","selectThemeSelectorButton","showThemeSelector","$currentThemeButton","find","theme","$selectedButton","$itemsContainer","$navigation","$navigationItems","$navigationButtons","$navigationButtonPrev","$navigationButtonNext","setup","currentId","showItem","preventDefaultKeyAction","showPreviousItem","showNextItem","showFirstItem","showLastItem","stopPropagation","$liveRegion","prepend","getCurrentItemIndex","nextIndexToShow","$toggleButton","$topNavigation","$links","menuOpened","mql","syncState","handleToggleNavigation","addListener","code","show","hide","hidden","$imageWrapper","$transcriptToggle","$transcript","transcriptOpened","openLabel","informationLabelOpen","closeLabel","informationLabelClose","toggleTranscript","substring","item","breakpoints","tiny","getComputedStyle","getPropertyValue","small","medium","join","hideOnDevice","currentItem","highlightCurrentSection","$topItem","findLast","Math","floor","linkedElementListener","linkedElementId","$linkedElement","focusLinkedElement","removeFocusProperties","$tabList","$tabListItemLinks","$tabItems","currentTabIndex","$tabListItemLink","tabPanelID","$tabPanel","handleItemLinkClick","switchTabByIndex","handleItemLinkKeyDown","itemLinkClickEvent","targetItem","currentTarget","switchTabByID","itemLinkKeyDownEvent","previousTab","nextTab","newIndex","switchFocus","$tabItem","targetId","$textInputWrapper","$textInputPasswordToggle","updateTogglePasswordButtonText","togglePasswordType","$formFieldInput","$formFieldInputHint","$formFieldBody","values","$formFieldNewInput","attribute","updateList","appendValue","$formFieldNewInputAddButton","$formFieldNewInputAddButtonInner","$formFieldNewInputAddButtonInnerExtra","$formFieldLiveAria","$formFieldCounter","$valuesList","updateAriaText","content","normaliseValue","isValueInList","eachValue","newValue","removeValue","existingValue","$itemLabel","$removeItemButton","innerTextItemValue","innerTextValue","$caption","tableScrollInitialised","_uuid_mjs__WEBPACK_IMPORTED_MODULE_0__","scrollWidth","clientWidth","datetime","prettyDatetime","dateStr","isDateTime","test","isDate","date","dayString","toLocaleDateString","weekday","dateString","day","month","year","getHours","getMinutes","timeString","toLocaleTimeString","hour","minute","getSeconds","second","iso8601ToPrettyDatetime","char","crypto","getRandomValues","Uint8Array","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","isArray","i","binding","o","defineProperty","enumerable","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag"],"sourceRoot":""}