@nationalarchives/frontend 0.32.0 → 0.33.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.
- package/nationalarchives/all+analytics.js +1 -1
- package/nationalarchives/all+analytics.js.map +1 -1
- package/nationalarchives/all.css +1 -1
- package/nationalarchives/all.css.map +1 -1
- package/nationalarchives/all.js +1 -1
- package/nationalarchives/all.js.map +1 -1
- package/nationalarchives/analytics.js.map +1 -1
- package/nationalarchives/components/accordion/accordion.css +1 -1
- package/nationalarchives/components/accordion/accordion.css.map +1 -1
- package/nationalarchives/components/accordion/accordion.js +1 -1
- package/nationalarchives/components/accordion/accordion.js.map +1 -1
- package/nationalarchives/components/back-link/back-link.css +1 -1
- package/nationalarchives/components/back-link/back-link.css.map +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.css +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.js.map +1 -1
- package/nationalarchives/components/button/button.css +1 -1
- package/nationalarchives/components/button/button.css.map +1 -1
- package/nationalarchives/components/card/card.css +1 -1
- package/nationalarchives/components/card/card.css.map +1 -1
- package/nationalarchives/components/checkboxes/checkboxes.css +1 -1
- package/nationalarchives/components/checkboxes/checkboxes.css.map +1 -1
- package/nationalarchives/components/compound-filters/compound-filters.css +1 -1
- package/nationalarchives/components/compound-filters/compound-filters.css.map +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.css +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.js.map +1 -1
- package/nationalarchives/components/cookie-banner/macro-options.json +2 -1
- package/nationalarchives/components/date-input/date-input.css +1 -1
- package/nationalarchives/components/date-input/date-input.css.map +1 -1
- package/nationalarchives/components/date-input/date-input.js.map +1 -1
- package/nationalarchives/components/date-search/date-search.css +1 -1
- package/nationalarchives/components/date-search/date-search.css.map +1 -1
- package/nationalarchives/components/details/details.css +1 -1
- package/nationalarchives/components/details/details.css.map +1 -1
- package/nationalarchives/components/error-summary/error-summary.css +1 -1
- package/nationalarchives/components/error-summary/error-summary.css.map +1 -1
- package/nationalarchives/components/error-summary/error-summary.js.map +1 -1
- package/nationalarchives/components/fieldset/fieldset.css +1 -1
- package/nationalarchives/components/fieldset/fieldset.css.map +1 -1
- package/nationalarchives/components/file-input/file-input.css +1 -1
- package/nationalarchives/components/file-input/file-input.css.map +1 -1
- package/nationalarchives/components/file-input/file-input.js.map +1 -1
- package/nationalarchives/components/files-list/files-list.css +1 -1
- package/nationalarchives/components/files-list/files-list.css.map +1 -1
- package/nationalarchives/components/footer/fixtures.json +20 -2
- package/nationalarchives/components/footer/footer.css +1 -1
- package/nationalarchives/components/footer/footer.css.map +1 -1
- package/nationalarchives/components/footer/footer.js +1 -1
- package/nationalarchives/components/footer/footer.js.map +1 -1
- package/nationalarchives/components/footer/footer.mjs +44 -16
- package/nationalarchives/components/footer/footer.scss +34 -0
- package/nationalarchives/components/footer/macro-options.json +6 -0
- package/nationalarchives/components/footer/template.njk +13 -1
- package/nationalarchives/components/gallery/gallery.css +1 -1
- package/nationalarchives/components/gallery/gallery.css.map +1 -1
- package/nationalarchives/components/gallery/gallery.js.map +1 -1
- package/nationalarchives/components/global-header/global-header.css +1 -1
- package/nationalarchives/components/global-header/global-header.css.map +1 -1
- package/nationalarchives/components/global-header/global-header.js.map +1 -1
- package/nationalarchives/components/header/header.css +1 -1
- package/nationalarchives/components/header/header.css.map +1 -1
- package/nationalarchives/components/header/header.js.map +1 -1
- package/nationalarchives/components/hero/hero.css +1 -1
- package/nationalarchives/components/hero/hero.css.map +1 -1
- package/nationalarchives/components/index-grid/index-grid.css +1 -1
- package/nationalarchives/components/index-grid/index-grid.css.map +1 -1
- package/nationalarchives/components/pagination/fixtures.json +27 -13
- package/nationalarchives/components/pagination/macro-options.json +12 -18
- package/nationalarchives/components/pagination/pagination.css +1 -1
- package/nationalarchives/components/pagination/pagination.css.map +1 -1
- package/nationalarchives/components/pagination/pagination.scss +79 -37
- package/nationalarchives/components/pagination/template.njk +9 -12
- package/nationalarchives/components/panel/panel.css +1 -1
- package/nationalarchives/components/panel/panel.css.map +1 -1
- package/nationalarchives/components/phase-banner/phase-banner.css +1 -1
- package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -1
- package/nationalarchives/components/picture/picture.css +1 -1
- package/nationalarchives/components/picture/picture.css.map +1 -1
- package/nationalarchives/components/picture/picture.js.map +1 -1
- package/nationalarchives/components/quick-filters/quick-filters.css +1 -1
- package/nationalarchives/components/quick-filters/quick-filters.css.map +1 -1
- package/nationalarchives/components/radios/radios.css +1 -1
- package/nationalarchives/components/radios/radios.css.map +1 -1
- package/nationalarchives/components/search-field/search-field.css +1 -1
- package/nationalarchives/components/search-field/search-field.css.map +1 -1
- package/nationalarchives/components/secondary-navigation/secondary-navigation.css +1 -1
- package/nationalarchives/components/secondary-navigation/secondary-navigation.css.map +1 -1
- package/nationalarchives/components/select/select.css +1 -1
- package/nationalarchives/components/select/select.css.map +1 -1
- package/nationalarchives/components/sidebar/fixtures.json +1 -1
- package/nationalarchives/components/sidebar/sidebar.css +1 -1
- package/nationalarchives/components/sidebar/sidebar.css.map +1 -1
- package/nationalarchives/components/sidebar/template.njk +1 -1
- package/nationalarchives/components/skip-link/skip-link.css +1 -1
- package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
- package/nationalarchives/components/skip-link/skip-link.js +1 -1
- package/nationalarchives/components/skip-link/skip-link.js.map +1 -1
- package/nationalarchives/components/skip-link/skip-link.mjs +1 -1
- package/nationalarchives/components/tabs/tabs.css +1 -1
- package/nationalarchives/components/tabs/tabs.css.map +1 -1
- package/nationalarchives/components/tabs/tabs.js.map +1 -1
- package/nationalarchives/components/text-input/text-input.css +1 -1
- package/nationalarchives/components/text-input/text-input.css.map +1 -1
- package/nationalarchives/components/text-input/text-input.js.map +1 -1
- package/nationalarchives/components/textarea/textarea.css +1 -1
- package/nationalarchives/components/textarea/textarea.css.map +1 -1
- package/nationalarchives/components/warning/warning.css +1 -1
- package/nationalarchives/components/warning/warning.css.map +1 -1
- package/nationalarchives/error-page.css +1 -1
- package/nationalarchives/error-page.css.map +1 -1
- package/nationalarchives/ie.css +1 -1
- package/nationalarchives/prototype-kit.css +1 -1
- package/nationalarchives/prototype-kit.css.map +1 -1
- package/nationalarchives/tools/_spacing.scss +21 -5
- package/nationalarchives/utilities/_reset.scss +5 -16
- package/nationalarchives/utilities/lists/_index.scss +100 -164
- package/nationalarchives/utilities/tables/_index.scss +5 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/./src/nationalarchives/lib/cookies.mjs","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/lib/analytics-helpers.mjs","webpack://TNAFrontend/./src/nationalarchives/components/accordion/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/breadcrumbs/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/checkboxes/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/details/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/error-summary/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/file-input/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/footer/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/gallery/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/global-header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/picture/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/radios/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/search-field/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/sidebar/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/text-input/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/textarea/analytics.js","webpack://TNAFrontend/./src/nationalarchives/analytics.mjs","webpack://TNAFrontend/./src/nationalarchives/components/hero/analytics.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontendAnalytics\"] = factory();\n\telse\n\t\troot[\"TNAFrontendAnalytics\"] = factory();\n})(self, () => {\nreturn ","window.TNAFrontendCookies = window.TNAFrontendCookies || null;\nwindow.TNAFrontendCookieEvents = 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 return window.TNAFrontendCookieEvents;\n }\n window.TNAFrontendCookieEvents = this;\n }\n\n log(...args) {\n if (this.debug) {\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 for (let i = this.oneTimeEvents[event].length - 1; i >= 0; i--) {\n const eventToTrigger = this.oneTimeEvents[event][i];\n eventToTrigger.call(this, data);\n this.oneTimeEvents[event].splice(i, 1);\n }\n }\n }\n}\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 return window.TNAFrontendCookies;\n }\n if (defaultDomain === undefined) {\n this.defaultDomain =\n document.documentElement.dataset.tnaCookiesDomain ||\n window.location.hostname;\n } else {\n this.defaultDomain = defaultDomain;\n }\n if (defaultPath === undefined) {\n this.defaultPath = document.documentElement.dataset.tnaCookiesPath || \"/\";\n } else {\n this.defaultPath = defaultPath;\n }\n if (secure === undefined) {\n this.secure =\n document.documentElement.dataset.tnaCookiesInsecure !== \"true\";\n } else {\n this.secure = secure;\n }\n if (policiesKey === undefined) {\n this.policiesKey =\n document.documentElement.dataset.tnaCookiesPoliciesKey ||\n \"cookies_policy\";\n } else {\n this.policiesKey = policiesKey;\n }\n if (defaultAge === undefined) {\n this.defaultAge =\n parseInt(document.documentElement.dataset.tnaCookiesDefaultAge) ||\n 31536000; // 365 days;\n } else {\n this.defaultAge = defaultAge;\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 > 0) {\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 get all() {\n const deserialised = {};\n document.cookie\n .split(\"; \")\n .filter((x) => x)\n .forEach((cookie) => {\n const parts = cookie.trim().split(\"=\");\n if (parts[0]) {\n deserialised[parts[0]] = parts[1];\n }\n });\n return deserialised;\n }\n\n /** @protected */\n get policies() {\n try {\n return JSON.parse(this.get(this.policiesKey) || \"{}\");\n } catch (e) {\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}\n */\n get(key) {\n return this.exists(key) ? decodeURIComponent(this.all[key]) : 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 const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}; domain=${domain}; samesite=${sameSite}; path=${path}${!session ? `; max-age=${maxAge}` : \"\"}${\n secure ? \"; secure\" : \"\"\n }`;\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 || undefined };\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((k) => [k.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((k) => [k.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 return Object.hasOwn(this.policies, policy)\n ? this.policies[policy] === true\n : null;\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n this.log(`Adding event listener for: ${event}`);\n this.events.on(event, callback);\n }\n\n /**\n * Add a one-time event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n once(event, callback) {\n this.log(`Adding one-time event listener for: ${event}`);\n this.events.once(event, callback);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const getXPathTo = ($element) => {\n if ($element.id !== \"\") {\n return 'id(\"' + $element.id + '\")';\n }\n if ($element === document.body) {\n return $element.tagName;\n }\n let ix = 0;\n if ($element.parentNode) {\n const siblings = $element.parentNode.childNodes;\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n if (sibling === $element)\n return (\n getXPathTo($element.parentNode) +\n \"/\" +\n $element.tagName +\n \"[\" +\n (ix + 1) +\n \"]\"\n );\n if (sibling.nodeType === 1 && sibling.tagName === $element.tagName) ix++;\n }\n } else {\n return $element.tagName;\n }\n};\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 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};\n\nconst getClosestHeading = ($element) =>\n getClosestElement($element, [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]);\n\nconst valueGetters = {\n text: ($el) => $el.innerText.replace(/\\n/g, \" \"),\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 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 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 // eslint-disable-next-line no-unused-vars\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 // eslint-disable-next-line no-unused-vars\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 // eslint-disable-next-line no-unused-vars\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 // eslint-disable-next-line no-unused-vars\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 ) || -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 // eslint-disable-next-line no-unused-vars\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 // eslint-disable-next-line no-unused-vars\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 // eslint-disable-next-line no-unused-vars\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 Cookies from \"./lib/cookies.mjs\";\nimport {\n getXPathTo,\n getClosestHeading,\n getClosestElement,\n valueGetters,\n} from \"./lib/analytics-helpers.mjs\";\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\";\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 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 enableTracking() {}\n\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 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 index + 1,\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 1,\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: 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:`), \"\"),\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 userPreferences[`${this.prefix}.pref.prefers-contrast`] =\n window.matchMedia?.(\"(prefers-contrast: more)\").matches\n ? \"more\"\n : window.matchMedia?.(\"(prefers-contrast: less)\").matches\n ? \"less\"\n : \"normal\";\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 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 = 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 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() {\n this.pushToDataLayer(arguments);\n }\n\n /** @protected */\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\")[0];\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 new GA4({ id: ga4Id });\n}\n\nconst helpers = {\n getXPathTo,\n getClosestHeading,\n getClosestElement,\n valueGetters,\n};\n\nexport { EventTracker, GA4, helpers };\n","export default [\n {\n scope: \".tna-hero\",\n areaName: \"hero\",\n events: [\n {\n eventName: \"toggle_caption\",\n targetElement: \".tna-hero__details-summary\",\n on: \"click\",\n data: {\n // eslint-disable-next-line no-unused-vars\n state: ($el, $scope, event) => {\n const wasExpanded =\n $scope\n .querySelector(\".tna-hero__details\")\n ?.hasAttribute(\"open\") ?? false;\n return wasExpanded ? \"closed\" : \"opened\";\n },\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) =>\n $scope.querySelector(\"img[alt]\")?.getAttribute(\"alt\"),\n },\n },\n ],\n },\n];\n"],"names":["root","factory","exports","module","define","amd","self","window","TNAFrontendCookies","TNAFrontendCookieEvents","CookieEventHandler","_createClass","debug","arguments","length","undefined","_classCallCheck","_defineProperty","this","log","key","value","_console","_len","args","Array","_key","console","apply","concat","event","callback","Object","hasOwn","events","_toConsumableArray","oneTimeEvents","_this","data","forEach","eventToTrigger","call","i","splice","tnaCookiePolicies","Cookies","_this2","options","document","documentElement","dataset","tnaFrontendDebug","defaultDomain","defaultPath","secure","policiesKey","defaultAge","_options$newInstance","newInstance","_options$noInit","noInit","tnaCookiesDomain","location","hostname","tnaCookiesPath","tnaCookiesInsecure","tnaCookiesPoliciesKey","parseInt","tnaCookiesDefaultAge","policiesCorrectOnInit","keys","policies","every","policy","includes","init","existingPolicies","filteredExistingPolicies","fromEntries","filter","map","savePolicies","_objectSpread","usage","settings","marketing","essential","_console2","_len2","_key2","all","get","deserialised","cookie","split","x","parts","trim","JSON","parse","e","exists","decodeURIComponent","_options$maxAge","maxAge","_options$sameSite","sameSite","_options$domain","domain","_options$path","path","_options$secure","_options$session","session","encodeURIComponent","trigger","set","_this3","setPolicy","accepted","allPolicies","k","toLowerCase","stringify","on","once","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","o","defineProperty","enumerable","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","getXPathTo","$element","id","body","tagName","ix","parentNode","siblings","childNodes","sibling","nodeType","getClosestElement","$startingElement","matchingElementSelectors","heading","$search","previousElementSibling","some","matchingElementSelector","matches","innerText","parentElement","getClosestHeading","valueGetters","text","$el","replace","html","innerHTML","index","$scope","instance","checked","expanded","getAttribute","toString","closestHeading","xpath","target","scope","areaName","rootEventName","rootData","data_component_name","eventName","targetElement","state","data_link_type","data_link","group","_$scope$closest","closest","querySelector","_$scope$querySelector","_$scope$querySelector2","hasAttribute","getFileDetails","from","files","file","name","size","type","_$scope$closest2","_$scope$closest3","data_section","media_type","media_duration","querySelectorAll","media_provider","media_title","media_progress","findIndex","$itemButton","media_action","_$scope$querySelector3","onCondition","data_position","image","imageSrc","imageAlt","componentAnalytics","BreadcrumbAnalytics","CheckboxesAnalytics","DetailsAnalytics","ErrorSummary","FileInputDroppable","FooterAnalytics","GalleryAnalytics","GlobalHeaderAnalytics","HeaderAnalytics","PictureAnalytics","RadiosAnalytics","SearchFieldAnalytics","SidebarAnalytics","TextInputAnalytics","TextareaAnalytics","EventTracker","Date","_options$prefix","prefix","_options$documentScop","documentScope","initAll","navigator","doNotTrack","cookies","isPolicyAccepted","enableTracking","disableTracking","componentConfig","addListeners","scopeArray","rootDefaultData","_typeof","scopeIndex","eventConfig","attachListener","_this4","_eventConfig$rootData","_eventConfig$onCondit","addEventListener","computedValueParameters","computedValue","recordEvent","generateEventName","xPath","timeSincePageLoad","startTime","entries","_ref","_ref2","_slicedToArray","valueOrFunction","push","_this5","head","$metaEl","RegExp","_window$matchMedia","_window","_window$matchMedia2","_window2","_window$matchMedia3","_window3","_window$matchMedia4","_window4","_window$matchMedia5","_window5","_window$matchMedia6","_window6","userPreferences","matchMedia","GA4","_EventTracker2","_this6","TNAFrontendAnalyticsGA4","_possibleConstructorReturn","_options$id","_options$prefix2","_options$initAll","_options$addTrackingC","addTrackingCode","dataLayer","gTagId","ga4Disable","start","_inherits","_this7","ga4Data","_ref3","_ref4","pushToDataLayer","trackingEnabled","trackingCodeAdded","Error","getTnaMetaTags","getUserPreferences","getTime","firstScript","getElementsByTagName","script","createElement","async","src","insertBefore","appendChild","_this8","startsWith","ga4Id","ga4","helpers"],"ignoreList":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"analytics.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/./src/nationalarchives/lib/cookies.mjs","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/lib/analytics-helpers.mjs","webpack://TNAFrontend/./src/nationalarchives/components/accordion/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/breadcrumbs/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/checkboxes/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/details/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/error-summary/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/file-input/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/footer/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/gallery/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/global-header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/header/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/picture/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/radios/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/search-field/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/sidebar/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/text-input/analytics.js","webpack://TNAFrontend/./src/nationalarchives/components/textarea/analytics.js","webpack://TNAFrontend/./src/nationalarchives/analytics.mjs","webpack://TNAFrontend/./src/nationalarchives/components/hero/analytics.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontendAnalytics\"] = factory();\n\telse\n\t\troot[\"TNAFrontendAnalytics\"] = factory();\n})(self, () => {\nreturn ","window.TNAFrontendCookies = window.TNAFrontendCookies || null;\nwindow.TNAFrontendCookieEvents = 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 return window.TNAFrontendCookieEvents;\n }\n window.TNAFrontendCookieEvents = this;\n }\n\n log(...args) {\n if (this.debug) {\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 for (let i = this.oneTimeEvents[event].length - 1; i >= 0; i--) {\n const eventToTrigger = this.oneTimeEvents[event][i];\n eventToTrigger.call(this, data);\n this.oneTimeEvents[event].splice(i, 1);\n }\n }\n }\n}\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 return window.TNAFrontendCookies;\n }\n if (defaultDomain === undefined) {\n this.defaultDomain =\n document.documentElement.dataset.tnaCookiesDomain ||\n window.location.hostname;\n } else {\n this.defaultDomain = defaultDomain;\n }\n if (defaultPath === undefined) {\n this.defaultPath = document.documentElement.dataset.tnaCookiesPath || \"/\";\n } else {\n this.defaultPath = defaultPath;\n }\n if (secure === undefined) {\n this.secure =\n document.documentElement.dataset.tnaCookiesInsecure !== \"true\";\n } else {\n this.secure = secure;\n }\n if (policiesKey === undefined) {\n this.policiesKey =\n document.documentElement.dataset.tnaCookiesPoliciesKey ||\n \"cookies_policy\";\n } else {\n this.policiesKey = policiesKey;\n }\n if (defaultAge === undefined) {\n this.defaultAge =\n parseInt(document.documentElement.dataset.tnaCookiesDefaultAge) ||\n 31536000; // 365 days;\n } else {\n this.defaultAge = defaultAge;\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 > 0) {\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 get all() {\n const deserialised = {};\n document.cookie\n .split(\"; \")\n .filter((x) => x)\n .forEach((cookie) => {\n const parts = cookie.trim().split(\"=\");\n if (parts[0]) {\n deserialised[parts[0]] = parts[1];\n }\n });\n return deserialised;\n }\n\n /** @protected */\n get policies() {\n try {\n return JSON.parse(this.get(this.policiesKey) || \"{}\");\n } catch (e) {\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}\n */\n get(key) {\n return this.exists(key) ? decodeURIComponent(this.all[key]) : 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 const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}; domain=${domain}; samesite=${sameSite}; path=${path}${!session ? `; max-age=${maxAge}` : \"\"}${\n secure ? \"; secure\" : \"\"\n }`;\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 || undefined };\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((k) => [k.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((k) => [k.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 return Object.hasOwn(this.policies, policy)\n ? this.policies[policy] === true\n : null;\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n this.log(`Adding event listener for: ${event}`);\n this.events.on(event, callback);\n }\n\n /**\n * Add a one-time event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n once(event, callback) {\n this.log(`Adding one-time event listener for: ${event}`);\n this.events.once(event, callback);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const getXPathTo = ($element) => {\n if ($element.id !== \"\") {\n return 'id(\"' + $element.id + '\")';\n }\n if ($element === document.body) {\n return $element.tagName;\n }\n let ix = 0;\n if ($element.parentNode) {\n const siblings = $element.parentNode.childNodes;\n for (let i = 0; i < siblings.length; i++) {\n const sibling = siblings[i];\n if (sibling === $element)\n return (\n getXPathTo($element.parentNode) +\n \"/\" +\n $element.tagName +\n \"[\" +\n (ix + 1) +\n \"]\"\n );\n if (sibling.nodeType === 1 && sibling.tagName === $element.tagName) ix++;\n }\n } else {\n return $element.tagName;\n }\n};\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 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};\n\nconst getClosestHeading = ($element) =>\n getClosestElement($element, [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"]);\n\nconst valueGetters = {\n text: ($el) => $el.innerText.replace(/\\n/g, \" \"),\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 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 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 // eslint-disable-next-line no-unused-vars\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 // eslint-disable-next-line no-unused-vars\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 // eslint-disable-next-line no-unused-vars\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 // eslint-disable-next-line no-unused-vars\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 ) || -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 // eslint-disable-next-line no-unused-vars\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 // eslint-disable-next-line no-unused-vars\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 // eslint-disable-next-line no-unused-vars\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 Cookies from \"./lib/cookies.mjs\";\nimport {\n getXPathTo,\n getClosestHeading,\n getClosestElement,\n valueGetters,\n} from \"./lib/analytics-helpers.mjs\";\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\";\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 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 enableTracking() {}\n\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 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 index + 1,\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 1,\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: 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:`), \"\"),\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 userPreferences[`${this.prefix}.pref.prefers-contrast`] =\n window.matchMedia?.(\"(prefers-contrast: more)\").matches\n ? \"more\"\n : window.matchMedia?.(\"(prefers-contrast: less)\").matches\n ? \"less\"\n : \"normal\";\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 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 = 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 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() {\n this.pushToDataLayer(arguments);\n }\n\n /** @protected */\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\")[0];\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 new GA4({ id: ga4Id });\n}\n\nconst helpers = {\n getXPathTo,\n getClosestHeading,\n getClosestElement,\n valueGetters,\n};\n\nexport { EventTracker, GA4, helpers };\n","export default [\n {\n scope: \".tna-hero\",\n areaName: \"hero\",\n events: [\n {\n eventName: \"toggle_caption\",\n targetElement: \".tna-hero__details-summary\",\n on: \"click\",\n data: {\n // eslint-disable-next-line no-unused-vars\n state: ($el, $scope, event) => {\n const wasExpanded =\n $scope\n .querySelector(\".tna-hero__details\")\n ?.hasAttribute(\"open\") ?? false;\n return wasExpanded ? \"closed\" : \"opened\";\n },\n // eslint-disable-next-line no-unused-vars\n value: ($el, $scope, event) =>\n $scope.querySelector(\"img[alt]\")?.getAttribute(\"alt\"),\n },\n },\n ],\n },\n];\n"],"names":["root","factory","exports","module","define","amd","self","window","TNAFrontendCookies","TNAFrontendCookieEvents","CookieEventHandler","_createClass","debug","arguments","length","undefined","_classCallCheck","_defineProperty","this","log","key","value","_console","_len","args","Array","_key","console","apply","concat","event","callback","Object","hasOwn","events","_toConsumableArray","oneTimeEvents","_this","data","forEach","eventToTrigger","call","i","splice","tnaCookiePolicies","Cookies","_this2","options","document","documentElement","dataset","tnaFrontendDebug","defaultDomain","defaultPath","secure","policiesKey","defaultAge","_options$newInstance","newInstance","_options$noInit","noInit","tnaCookiesDomain","location","hostname","tnaCookiesPath","tnaCookiesInsecure","tnaCookiesPoliciesKey","parseInt","tnaCookiesDefaultAge","policiesCorrectOnInit","keys","policies","every","policy","includes","init","existingPolicies","filteredExistingPolicies","fromEntries","filter","map","savePolicies","_objectSpread","usage","settings","marketing","essential","_console2","_len2","_key2","all","get","deserialised","cookie","split","x","parts","trim","JSON","parse","e","exists","decodeURIComponent","_options$maxAge","maxAge","_options$sameSite","sameSite","_options$domain","domain","_options$path","path","_options$secure","_options$session","session","encodeURIComponent","trigger","set","_this3","setPolicy","accepted","allPolicies","k","toLowerCase","stringify","on","once","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","o","defineProperty","enumerable","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","getXPathTo","$element","id","body","tagName","ix","parentNode","siblings","childNodes","sibling","nodeType","getClosestElement","$startingElement","matchingElementSelectors","heading","$search","previousElementSibling","some","matchingElementSelector","matches","innerText","parentElement","getClosestHeading","valueGetters","text","$el","replace","html","innerHTML","index","$scope","instance","checked","expanded","getAttribute","toString","closestHeading","xpath","target","scope","areaName","rootEventName","rootData","data_component_name","eventName","targetElement","state","data_link_type","data_link","group","_$scope$closest","closest","querySelector","_$scope$querySelector","_$scope$querySelector2","hasAttribute","getFileDetails","from","files","file","name","size","type","_$scope$closest2","_$scope$closest3","data_section","media_type","media_duration","querySelectorAll","media_provider","media_title","media_progress","findIndex","$itemButton","media_action","_$scope$querySelector3","onCondition","data_position","image","imageSrc","imageAlt","componentAnalytics","BreadcrumbAnalytics","CheckboxesAnalytics","DetailsAnalytics","ErrorSummary","FileInputDroppable","FooterAnalytics","GalleryAnalytics","GlobalHeaderAnalytics","HeaderAnalytics","PictureAnalytics","RadiosAnalytics","SearchFieldAnalytics","SidebarAnalytics","TextInputAnalytics","TextareaAnalytics","EventTracker","Date","_options$prefix","prefix","_options$documentScop","documentScope","initAll","navigator","doNotTrack","cookies","isPolicyAccepted","enableTracking","disableTracking","componentConfig","addListeners","scopeArray","rootDefaultData","_typeof","scopeIndex","eventConfig","attachListener","_this4","_eventConfig$rootData","_eventConfig$onCondit","addEventListener","computedValueParameters","computedValue","recordEvent","generateEventName","xPath","timeSincePageLoad","startTime","entries","_ref","_ref2","_slicedToArray","valueOrFunction","push","_this5","head","$metaEl","RegExp","_window$matchMedia","_window","_window$matchMedia2","_window2","_window$matchMedia3","_window3","_window$matchMedia4","_window4","_window$matchMedia5","_window5","_window$matchMedia6","_window6","userPreferences","matchMedia","GA4","_EventTracker2","_this6","TNAFrontendAnalyticsGA4","_possibleConstructorReturn","_options$id","_options$prefix2","_options$initAll","_options$addTrackingC","addTrackingCode","dataLayer","gTagId","ga4Disable","start","_inherits","_this7","ga4Data","_ref3","_ref4","pushToDataLayer","trackingEnabled","trackingCodeAdded","Error","getTnaMetaTags","getUserPreferences","getTime","firstScript","getElementsByTagName","script","createElement","async","src","insertBefore","appendChild","_this8","startsWith","ga4Id","ga4","helpers"],"sourceRoot":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.tna-accordion,.tna-accordion__item{margin-top:
|
|
1
|
+
.tna-accordion,.tna-accordion__item{margin-top:2rem}.tna-accordion:first-child,.tna-accordion__item:first-child{margin-top:0}.tna-accordion__heading{padding-top:1rem}.tna-accordion__body{padding-top:1rem}.tna-accordion__toggle-all{margin-bottom:1rem;padding:0;background:rgba(0,0,0,0);border:none;border-radius:.1px;cursor:pointer;color:var(--link, #005fa3);font-size:1rem}.tna-accordion__toggle-all:hover{text-decoration:underline;text-decoration-thickness:0.25rem;text-underline-offset:.125em}.tna-accordion__details{border-bottom:1px var(--keyline, rgba(38, 38, 42, 0.25)) solid;position:relative;z-index:1}.tna-accordion__details:first-of-type{border-top:1px var(--keyline, rgba(38, 38, 42, 0.25)) solid}.tna-accordion__summary{width:100%;margin:0;padding:0.5rem 3rem 0.5rem 1rem;display:block;position:relative;line-height:inherit;text-align:left;list-style:none;background:rgba(0,0,0,0);border:none;border-radius:.1px;cursor:pointer;color:var(--font-dark, rgb(1, 1, 1));font-size:1.125rem;font-family:Open Sans,sans-serif;font-style:normal;font-optical-sizing:auto;font-variation-settings:"wdth" 100;font-weight:700}.tna-accordion__summary *{font-size:inherit}.tna-accordion__summary::before{content:"";width:0;height:0;position:absolute;top:calc(50% - 0.4330127019rem);right:.75rem;border-width:0.8660254038rem .5rem 0 .5rem;border-color:var(--font-light, rgba(1, 1, 1, 0.58)) rgba(0,0,0,0);border-style:solid}.tna-accordion__summary:hover{text-decoration:underline;text-decoration-thickness:0.25rem;text-underline-offset:.125em;background-color:var(--background-tint, rgb(217, 217, 214))}.tna-accordion__summary:hover::before{border-color:var(--font-dark, rgb(1, 1, 1)) rgba(0,0,0,0)}.tna-accordion__summary[aria-expanded=true]::before{border-width:0 .5rem 0.8660254038rem .5rem}.tna-accordion__summary:active{z-index:1}.tna-accordion__content{padding:1rem;position:relative;border-radius:.1px}@media(forced-colors: active){.tna-accordion__summary::before{content:"↓";width:auto;height:auto;top:calc(50% - .5rem);line-height:1rem;border:none}.tna-accordion__summary[aria-expanded=true]::before{content:"↑";border:none}}/*# sourceMappingURL=accordion.css.map */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../../src/nationalarchives/tools/_spacing.scss","../../../../src/nationalarchives/components/accordion/accordion.scss","../../../../src/nationalarchives/tools/_colour.scss","../../../../src/nationalarchives/tools/_typography.scss","../../../../src/nationalarchives/variables/_typography.scss"],"names":[],"mappings":"CAUA,oCACE,gBAEA,4DACE,aCDF,wBACE,iBAGF,qBACE,iBAIF,2BACE,mBACA,UAEA,yBAEA,YACA,mBAEA,eCyDF,2BClFA,eF8BE,iCE+BF,0BACA,0BCpCsC,QDqCtC,sBCvCoC,OHWpC,wBCqEI,+DDlEF,kBACA,UAEA,sCC+DE,4DD1DJ,wBACE,WACA,SACA,0BAGA,cAEA,kBAEA,oBACA,gBAEA,gBAEA,yBAEA,YACA,mBAEA,eCgBF,qCClFA,mBAqBA,YCSA,qBDRA,kBACA,yBACA,mCAPA,YCiBsB,IHsCpB,0BACE,kBAGF,gCACE,WAEA,QACA,SAEA,kBACA,gCACA,aAEA,2CACA,kEACA,mBAGF,8BE9BF,0BACA,0BCpCsC,QDqCtC,sBCvCoC,OF8DpC,4DDSI,sCACE,0DAKF,oDACE,2CAIJ,+BACE,UAIJ,wBACE,aAEA,kBAEA,mBCqZF,8BDhZI,gCACE,YAEA,WACA,YAEA,sBAEA,iBAEA,YAIA,oDACE,YAEA","file":"accordion.css","sourcesContent":["@use \"sass:map\";\n@use \"sass:math\";\n@use \"../variables/spacing\";\n@use \"../variables/typography\";\n@use \"../tools/media\";\n\n@function space($size) {\n @return #{$size * spacing.$spacing-unit-px}px;\n}\n\n%space-above {\n margin-top: space(2);\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n%space-only-above {\n margin: #{space(2)} 0 0;\n\n &:first-child {\n margin-top: 0;\n }\n}\n\n@mixin space-above($zero-other-margins: false) {\n @if $zero-other-margins {\n @extend %space-only-above;\n } @else {\n @extend %space-above;\n }\n}\n\n@mixin no-spacing-generator($suffix: \"\") {\n @if $suffix != \"\" {\n $suffix: \"-\" + $suffix;\n }\n @each $property in margin, padding {\n @each $direction in top, bottom {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--no-#{$property}-#{$direction}#{$suffix},\n .tna-\\!--no-#{$property}-#{$combined-direction}#{$suffix} {\n #{$property}-#{$direction}: 0 !important;\n }\n } @else {\n .tna-\\!--no-#{$property}-#{$direction}#{$suffix} {\n #{$property}-#{$direction}: 0 !important;\n }\n }\n }\n }\n}\n\n@mixin spacing-generator($suffix: \"\") {\n @each $property in margin, padding {\n @each $direction in top, bottom {\n @each $size, $amount in spacing.$spacing {\n @if $direction == all {\n .tna-\\!--#{$property}-#{$size} {\n #{$property}: #{space($amount)} !important;\n }\n } @else {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--#{$property}-#{$direction}-#{$size},\n .tna-\\!--#{$property}-#{$combined-direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n } @else {\n .tna-\\!--#{$property}-#{$direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n }\n }\n }\n }\n }\n\n @include media.on-mobile {\n @each $property in margin, padding {\n @each $direction in top, bottom {\n @each $size, $amount in spacing.$spacing-mobile {\n @if $direction == all {\n .tna-\\!--#{$property}-#{$size} {\n #{$property}: #{space($amount)} !important;\n }\n } @else {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--#{$property}-#{$direction}-#{$size},\n .tna-\\!--#{$property}-#{$combined-direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n } @else {\n .tna-\\!--#{$property}-#{$direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n }\n }\n }\n }\n }\n }\n}\n","@use \"sass:math\";\n@use \"../../tools/colour\";\n@use \"../../tools/spacing\";\n@use \"../../tools/typography\";\n\n.tna-accordion {\n @include spacing.space-above;\n\n // NON INTERACTIVE\n &__item {\n @include spacing.space-above;\n }\n\n &__heading {\n padding-top: spacing.space(1);\n }\n\n &__body {\n padding-top: spacing.space(1);\n }\n\n // INTERACTIVE\n &__toggle-all {\n margin-bottom: spacing.space(1);\n padding: 0;\n\n background: transparent;\n\n border: none;\n border-radius: 0.1px;\n\n cursor: pointer;\n\n @include colour.colour-font(\"link\");\n @include typography.font-size(16);\n\n &:hover {\n @include typography.interacted-text-decoration;\n }\n }\n\n &__details {\n @include colour.colour-border(\"keyline\", 1px, solid, bottom);\n\n position: relative;\n z-index: 1;\n\n &:first-of-type {\n @include colour.colour-border(\"keyline\", 1px, solid, top);\n }\n }\n\n &__summary {\n width: 100%;\n margin: 0;\n padding: spacing.space(0.5) spacing.space(3) spacing.space(0.5)\n spacing.space(1);\n\n display: block;\n\n position: relative;\n\n line-height: inherit;\n text-align: left;\n\n list-style: none;\n\n background: transparent;\n\n border: none;\n border-radius: 0.1px;\n\n cursor: pointer;\n\n @include colour.colour-font(\"font-dark\");\n @include typography.font-size(18);\n @include typography.main-font(true);\n\n * {\n font-size: inherit;\n }\n\n &::before {\n content: \"\";\n\n width: 0;\n height: 0;\n\n position: absolute;\n top: calc(50% - #{math.div(math.sqrt(3), 4)}rem);\n right: 0.75rem;\n\n border-width: #{math.div(math.sqrt(3), 2)}rem 0.5rem 0 0.5rem;\n border-color: colour.colour-var(\"font-light\") transparent;\n border-style: solid;\n }\n\n &:hover {\n @include typography.interacted-text-decoration;\n @include colour.colour-background(\"background-tint\");\n\n &::before {\n border-color: colour.colour-var(\"font-dark\") transparent;\n }\n }\n\n &[aria-expanded=\"true\"] {\n &::before {\n border-width: 0 0.5rem #{math.div(math.sqrt(3), 2)}rem 0.5rem;\n }\n }\n\n &:active {\n z-index: 1;\n }\n }\n\n &__content {\n padding: spacing.space(1);\n\n position: relative;\n\n border-radius: 0.1px;\n }\n\n @include colour.on-forced-colours {\n &__summary {\n &::before {\n content: \"\\2193\";\n\n width: auto;\n height: auto;\n\n top: calc(50% - 0.5rem);\n\n line-height: 1rem;\n\n border: none;\n }\n\n &[aria-expanded=\"true\"] {\n &::before {\n content: \"\\2191\";\n\n border: none;\n }\n }\n }\n }\n}\n","@use \"sass:list\";\n@use \"sass:map\";\n@use \"sass:meta\";\n@use \"../variables/borders\";\n@use \"../variables/forms\";\n@use \"../variables/colour\";\n@use \"../variables/features\";\n@use \"../tools/media\";\n\n$base-colours: (\n \"background\",\n // \"background-tint\",\n \"font-base\",\n \"font-dark\",\n \"font-light\",\n \"icon-light\",\n \"link\",\n \"link-visited\",\n // \"focus-outline\",\n \"keyline\",\n \"keyline-dark\",\n // \"input-foreground\",\n // \"input-background\",\n // \"input-border\",\n // \"form-error-border\",\n // \"form-error-text\",\n // \"button-text\",\n // \"button-background\",\n // \"button-hover-text\",\n // \"button-hover-background\",\n);\n\n@function brand-colour($colour, $opacity: 1) {\n @return colour.brand-colour($colour, $opacity);\n}\n\n@mixin colour-css-vars($excludes...) {\n @each $name, $value in colour.$colour-palette-default {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index($base-colours, $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@mixin colour-css-vars-dark($excludes...) {\n @each $name, $value in colour.$colour-palette-dark {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index($base-colours, $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@mixin colour-css-vars-high-contrast($excludes...) {\n @each $name, $value in colour.$colour-palette-high-contrast {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index($base-colours, $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@mixin colour-css-vars-high-contrast-dark($excludes...) {\n @each $name, $value in colour.$colour-palette-high-contrast-dark {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index((\"keyline\", \"keyline-dark\"), $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@function colour-var($colour) {\n @return var(\n --#{$colour},\n #{map.get(colour.$colour-palette-default, $colour)}\n );\n}\n\n@mixin colour-font($colour, $important: false) {\n color: colour-var($colour) if(sass($important): !important; else: null);\n}\n\n@mixin colour-background($colour, $important: false) {\n background-color: colour-var($colour)\n if(sass($important): !important; else: null);\n}\n\n@mixin colour-background-brand($brandColour, $important: false) {\n background-color: #{brand-colour($brandColour)}\n if(sass($important): !important; else: null);\n}\n\n@mixin colour-border(\n $colour,\n $width: \"\",\n $style: solid,\n $direction: \"\",\n $important: false\n) {\n @if $direction != \"\" {\n @if $width != \"\" {\n border-#{$direction}: $width\n colour-var($colour)\n $style\n if(sass($important): !important; else: null);\n } @else {\n border-#{$direction}-color: colour-var($colour)\n if(sass($important): !important; else: null);\n }\n } @else {\n @if $width != \"\" {\n border: $width\n colour-var($colour)\n $style\n if(sass($important): !important; else: null);\n } @else {\n border-color: var(\n --#{$colour},\n #{map.get(colour.$colour-palette-default, $colour)}\n )\n if(sass($important): !important; else: null);\n }\n }\n}\n\n@mixin colour-outline($colour, $width: \"\", $style: solid, $important: false) {\n @if $width != \"\" {\n outline: $width\n colour-var($colour)\n $style\n if(sass($important): !important; else: null);\n } @else {\n outline-color: colour-var($colour)\n if(sass($important): !important; else: null);\n }\n}\n\n@mixin colour-fill($colour, $important: false) {\n fill: colour-var($colour) if(sass($important): !important; else: null);\n}\n\n%colour-input {\n @include colour-font(\"input-foreground\");\n @include colour-background(\"input-background\");\n @include colour-border(\"input-border\", forms.$form-field-border-width);\n}\n\n@mixin colour-input() {\n @extend %colour-input;\n}\n\n@mixin thick-keyline($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\"keyline\", $border-width, solid, $direction);\n } @else {\n @include colour-border(\"keyline\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-dark($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\"keyline-dark\", $border-width, solid, $direction);\n } @else {\n @include colour-border(\"keyline-dark\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-accent($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\"accent-border\", $border-width, solid, $direction);\n } @else {\n @include colour-border(\"accent-border\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-error($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\n \"form-error-border\",\n $border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"form-error-border\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-brand($direction: \"\", $brandColour, $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n border-#{$direction}: $border-width #{brand-colour($brandColour)} solid;\n } @else {\n border: $border-width #{brand-colour($brandColour)} solid;\n }\n}\n\n@mixin thick-keyline-transparent($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n border-#{$direction}: $border-width transparent solid;\n } @else {\n border: $border-width transparent solid;\n }\n}\n\n// Use light theme colours (except for \"form-error-border\")\n%always-light {\n // @include colour-css-vars(\"form-error-border\", \"focus-outline\");\n @include colour-css-vars;\n\n @media (prefers-contrast: more) {\n // @include colour-css-vars-high-contrast(\n // \"form-error-border\",\n // \"focus-outline\"\n // );\n @include colour-css-vars-high-contrast;\n }\n}\n\n@mixin always-light {\n @extend %always-light;\n}\n\n%contrast {\n --background: var(--contrast-background);\n --font-base: var(--contrast-font-base);\n --font-dark: var(--contrast-font-dark);\n --font-light: var(--contrast-font-light);\n --icon-light: var(--contrast-icon-light);\n --link: var(--contrast-link);\n --link-visited: var(--contrast-link-visited);\n --keyline: var(--contrast-keyline);\n --keyline-dark: var(--contrast-keyline-dark);\n --button-text: var(--contrast-button-text);\n --button-background: var(--contrast-button-background);\n --button-hover-text: var(--contrast-button-hover-text);\n --button-hover-background: var(--contrast-button-hover-background);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin contrast {\n @extend %contrast;\n}\n\n%contrast-on-mobile {\n @include media.on-mobile {\n --background: var(--contrast-background);\n --font-base: var(--contrast-font-base);\n --font-dark: var(--contrast-font-dark);\n --font-light: var(--contrast-font-light);\n --icon-light: var(--contrast-icon-light);\n --link: var(--contrast-link);\n --link-visited: var(--contrast-link-visited);\n --keyline: var(--contrast-keyline);\n --keyline-dark: var(--contrast-keyline-dark);\n --button-text: var(--contrast-button-text);\n --button-background: var(--contrast-button-background);\n --button-hover-text: var(--contrast-button-hover-text);\n --button-hover-background: var(--contrast-button-hover-background);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n }\n}\n\n@mixin contrast-on-mobile {\n @extend %contrast-on-mobile;\n}\n\n%base {\n @each $name, $value in $base-colours {\n --#{$name}: var(--base-#{$value});\n }\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin base {\n @extend %base;\n}\n\n%tint {\n --background: var(--background-tint);\n\n @include colour-background(\"background\");\n}\n\n@mixin tint {\n @extend %tint;\n}\n\n%accent {\n --background: var(--accent-background);\n --font-base: var(--accent-font-base);\n --font-dark: var(--accent-font-dark);\n --font-light: var(--accent-font-light);\n --icon-light: var(--accent-icon-light);\n --link: var(--accent-link);\n --link-visited: var(--accent-link);\n --keyline: var(--accent-keyline);\n --keyline-dark: var(--accent-keyline-dark);\n --accent-border: var(--accent-font-dark);\n --button-text: var(--accent-button-text);\n --button-background: var(--accent-button-background);\n --button-hover-text: var(--accent-button-hover-text);\n --button-hover-background: var(--accent-button-hover-background);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin accent {\n @extend %accent;\n}\n\n%accent-light {\n --background: var(--accent-background-light);\n --font-base: #{map.get(colour.$colour-palette-default, \"font-base\")};\n --font-dark: #{map.get(colour.$colour-palette-default, \"font-dark\")};\n --font-light: #{map.get(colour.$colour-palette-default, \"font-light\")};\n --icon-light: #{map.get(colour.$colour-palette-default, \"icon-light\")};\n --keyline: #{map.get(colour.$colour-palette-default, \"keyline\")};\n --keyline-dark: #{map.get(colour.$colour-palette-default, \"keyline-dark\")};\n --button-text: #{map.get(colour.$colour-palette-default, \"button-text\")};\n --button-background: #{map.get(\n colour.$colour-palette-default,\n \"button-background\"\n )};\n --button-hover-text: #{map.get(\n colour.$colour-palette-default,\n \"button-hover-text\"\n )};\n --button-hover-background: #{map.get(\n colour.$colour-palette-default,\n \"button-hover-background\"\n )};\n --accent-border: var(--accent-background);\n\n @include colour-background(\"background\");\n @include colour-font(\"font-base\");\n\n .tna-template--system-theme & {\n @media (prefers-color-scheme: dark) {\n // --link: #{map.get(colour.$colour-palette-default, \"link\")};\n // --link-visited: #{map.get(colour.$colour-palette-default, \"link-visited\")};\n\n --background: var(--accent-background);\n --font-base: var(--accent-font-base);\n --font-dark: var(--accent-font-dark);\n --font-light: var(--accent-font-light);\n --icon-light: var(--accent-icon-light);\n --link: var(--accent-link);\n --link-visited: var(--accent-link);\n --keyline: var(--accent-keyline);\n --keyline-dark: var(--accent-keyline-dark);\n --accent-border: var(--accent-font-dark);\n --button-text: var(--accent-button-text);\n --button-background: var(--accent-button-background);\n --button-hover-text: var(--accent-button-hover-text);\n --button-hover-background: var(--accent-button-hover-background);\n }\n }\n\n .tna-template--dark-theme & {\n // --link: #{map.get(colour.$colour-palette-default, \"link\")};\n // --link-visited: #{map.get(colour.$colour-palette-default, \"link-visited\")};\n\n --background: var(--accent-background);\n --font-base: var(--accent-font-base);\n --font-dark: var(--accent-font-dark);\n --font-light: var(--accent-font-light);\n --icon-light: var(--accent-icon-light);\n --link: var(--accent-link);\n --link-visited: var(--accent-link);\n --keyline: var(--accent-keyline);\n --keyline-dark: var(--accent-keyline-dark);\n --accent-border: var(--accent-font-dark);\n --button-text: var(--accent-button-text);\n --button-background: var(--accent-button-background);\n --button-hover-text: var(--accent-button-hover-text);\n --button-hover-background: var(--accent-button-hover-background);\n }\n}\n\n@mixin accent-light {\n @extend %accent-light;\n}\n\n%yellow-accent {\n --accent-background: #{colour.brand-colour(\"yellow\")} !important;\n --accent-background-light: #{colour.brand-colour(\"cream\")} !important;\n --accent-border: #{colour.brand-colour(\"yellow\")} !important;\n --accent-font-base: #{colour.brand-colour(\"black\")} !important;\n --accent-font-dark: #{colour.brand-colour(\"black\")} !important;\n --accent-font-light: #{colour.brand-colour(\"black\", 0.7)} !important;\n --accent-icon-light: #{colour.brand-colour(\"black\", 0.7)} !important;\n --accent-link: #{colour.brand-colour(\"black\")} !important;\n --accent-link-visited: #{colour.brand-colour(\"black\")} !important;\n --accent-keyline: #{colour.brand-colour(\"black\", 0.5)} !important;\n --accent-keyline-dark: #{colour.brand-colour(\"black\", 0.8)} !important;\n --button-accented-text: #{colour.brand-colour(\"white\")} !important;\n --button-accented-background: #{colour.brand-colour(\"brown\")} !important;\n}\n\n@mixin yellow-accent {\n @extend %yellow-accent;\n}\n\n%accent-lighter-text {\n --accent-font-base: #{colour.brand-colour(\"white\")} !important;\n --accent-font-dark: #{colour.brand-colour(\"white\")} !important;\n --accent-font-light: #{colour.brand-colour(\"white\", 0.7)} !important;\n --accent-icon-light: #{colour.brand-colour(\"white\", 0.7)} !important;\n --accent-link: #{colour.brand-colour(\"white\")} !important;\n --accent-link-visited: #{colour.brand-colour(\"white\")} !important;\n --accent-keyline: #{colour.brand-colour(\"white\", 0.5)} !important;\n --accent-keyline-dark: #{colour.brand-colour(\"white\", 0.8)} !important;\n --button-accented-text: #{colour.brand-colour(\"white\")} !important;\n}\n\n%black-accent {\n --accent-background: #{colour.brand-colour(\"black\")} !important;\n --accent-background-light: #{colour.brand-colour(\"light-grey\")} !important;\n --accent-border: #{colour.brand-colour(\"black\")} !important;\n --button-accented-text: #{colour.brand-colour(\"black\")} !important;\n --button-accented-background: #{colour.brand-colour(\"grey\")} !important;\n}\n\n@mixin black-accent {\n @extend %accent-lighter-text;\n @extend %black-accent;\n}\n\n%pink-accent {\n --accent-background: #{colour.brand-colour(\"maroon\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-pink\")} !important;\n --accent-border: #{colour.brand-colour(\"pink\")} !important;\n --button-accented-background: #{colour.brand-colour(\"maroon\")} !important;\n}\n\n@mixin pink-accent {\n @extend %accent-lighter-text;\n @extend %pink-accent;\n}\n\n%orange-accent {\n --accent-background: #{colour.brand-colour(\"chestnut\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-orange\")} !important;\n --accent-border: #{colour.brand-colour(\"orange\")} !important;\n --button-accented-background: #{colour.brand-colour(\"chestnut\")} !important;\n}\n\n@mixin orange-accent {\n @extend %accent-lighter-text;\n @extend %orange-accent;\n}\n\n%green-accent {\n --accent-background: #{colour.brand-colour(\"forest\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-green\")} !important;\n --accent-border: #{colour.brand-colour(\"green\")} !important;\n --button-accented-background: #{colour.brand-colour(\"forest\")} !important;\n}\n\n@mixin green-accent {\n @extend %accent-lighter-text;\n @extend %green-accent;\n}\n\n%blue-accent {\n --accent-background: #{colour.brand-colour(\"navy\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-blue\")} !important;\n --accent-border: #{colour.brand-colour(\"blue\")} !important;\n --button-accented-background: #{colour.brand-colour(\"navy\")} !important;\n}\n\n@mixin blue-accent {\n @extend %accent-lighter-text;\n @extend %blue-accent;\n}\n\n@mixin on-high-contrast {\n @media (prefers-contrast: more) {\n @content;\n }\n}\n\n@mixin on-forced-colours {\n @media (forced-colors: active) {\n @content;\n }\n}\n\n@mixin on-high-contrast-and-forced-colours {\n @include on-forced-colours {\n @content;\n }\n\n @include on-high-contrast {\n @content;\n }\n}\n\n%image-loader-background {\n background: linear-gradient(\n -45deg,\n rgb(0 0 0 / 25%),\n rgb(255 255 255 / 25%),\n rgb(0 0 0 / 25%)\n );\n background-size: 500% 500%;\n background-position: 0 50%;\n\n animation: image-loader-background ease-in-out 1.2s infinite;\n\n @media (prefers-reduced-motion) {\n animation: none !important;\n }\n}\n\n@mixin image-loader-background {\n @if features.$image-loader-animations {\n @extend %image-loader-background;\n }\n}\n","@use \"sass:math\";\n@use \"../variables/typography\";\n@use \"colour\";\n@use \"media\";\n\n@mixin font-size($font-size-px) {\n font-size: #{math.div($font-size-px, typography.$relative-1rem-px)}rem;\n}\n\n@mixin relative-font-size($font-size-px) {\n @warn \"relative-font-size() will soon be deprecated in favour of font-size().\";\n @include font-size($font-size-px);\n}\n\n@mixin main-font-weight {\n font-weight: typography.$main-font-weight;\n}\n\n@mixin main-font-weight-medium {\n font-weight: typography.$main-font-weight-medium;\n}\n\n@mixin main-font-weight-bold {\n font-weight: typography.$main-font-weight-bold;\n}\n\n@mixin main-font($bold: false) {\n font-family: typography.$main-font-family;\n font-style: normal;\n font-optical-sizing: auto;\n font-variation-settings: \"wdth\" 100;\n @if $bold {\n @include main-font-weight-bold;\n } @else {\n @include main-font-weight;\n }\n}\n\n@mixin heading-font {\n font-family: typography.$heading-font-family;\n font-weight: typography.$heading-font-weight;\n}\n\n@mixin detail-font($bold: false) {\n font-family: typography.$detail-font-family;\n font-style: normal;\n font-optical-sizing: auto;\n @if $bold {\n font-weight: typography.$detail-font-weight-bold;\n } @else {\n font-weight: typography.$detail-font-weight;\n }\n}\n\n@mixin detail-font-small {\n @include detail-font;\n @include font-size(14);\n line-height: 1.1;\n text-transform: uppercase;\n}\n\n@mixin interactable-text-decoration {\n text-decoration-thickness: typography.$interactable-text-decoration-thickness;\n text-underline-offset: typography.$interactable-text-decoration-offset;\n}\n\n@mixin interacted-text-decoration {\n text-decoration: underline;\n text-decoration-thickness: typography.$interactive-text-decoration-thickness;\n text-underline-offset: typography.$interactable-text-decoration-offset;\n}\n\n@mixin heading-generator(\n $font-size-default,\n $font-size-medium,\n $font-size-small,\n $font-size-tiny,\n $line-height\n) {\n $small-and-tiny-identical: $font-size-small == $font-size-tiny;\n $medium-small-and-tiny-identical: $font-size-medium == $font-size-small and\n $small-and-tiny-identical;\n $all-identical: $font-size-default == $font-size-medium and\n $medium-small-and-tiny-identical and $small-and-tiny-identical;\n line-height: $line-height;\n @include font-size($font-size-default);\n\n @if $all-identical != true {\n @if $medium-small-and-tiny-identical != true {\n @include media.on-medium {\n @include font-size($font-size-medium);\n }\n\n @if $small-and-tiny-identical != true {\n @include media.on-small {\n @include font-size($font-size-small);\n }\n\n @include media.on-tiny {\n @include font-size($font-size-tiny);\n }\n } @else {\n @include media.on-mobile {\n @include font-size($font-size-small);\n }\n }\n } @else {\n @include media.on-smaller-than-large {\n @include font-size($font-size-medium);\n }\n }\n }\n}\n","@use \"sass:math\";\n\n/*\n * ------------------------------------------\n * The typefaces, sizes and spacings that are\n * defined in this file have been selected to\n * ensure 100% match with the latest National\n * Archives brand guidelines - avoid changing\n * or overwriting any of these values without\n * signing off with the Digital Services team\n * first\n * ------------------------------------------\n */\n\n$relative-1rem-px: 16; // 16px = 1rem\n\n/*\n * ------------------------------------------\n * When true, use the included font files for\n * Open Sans and Roboto Mono, rather than the\n * versions hosted by Google Fonts\n * ------------------------------------------\n */\n$use-local-fonts: false !default;\n\n$body-font-size-px: 19 !default;\n$body-font-size-px-medium: 18 !default;\n$body-font-size-px-mobile: 17 !default;\n$body-line-height: 1.75 !default;\n\n$interactable-text-decoration-offset: 0.125em !default;\n$interactable-text-decoration-thickness: #{math.div(1.5, $relative-1rem-px)}rem !default;\n$interactive-text-decoration-thickness: #{math.div(4, $relative-1rem-px)}rem !default;\n\n$main-font-family-name: \"Open Sans\" !default;\n$main-font-family:\n #{$main-font-family-name},\n sans-serif;\n$main-font-weight: 400 !default;\n$main-font-weight-medium: 600 !default;\n$main-font-weight-bold: 700 !default;\n$main-font-file: \"OpenSans-Regular.ttf\" !default;\n$main-font-file-medium: \"OpenSans-SemiBold.ttf\" !default;\n$main-font-file-bold: \"OpenSans-Bold.ttf\" !default;\n\n/*\n * ------------------------------------------\n * To use Supria Sans Condensed (which is the\n * approved heading typeface for The National\n * Archives), you need to obtain a licence to\n * properly embed the CSS files with the font\n * definitions in your service - check with a\n * member of the Digital Services team on how\n * to get a licence\n * ------------------------------------------\n */\n$heading-font-family-name: \"supria-sans-condensed\" !default;\n$heading-font-family:\n #{$heading-font-family-name},\n \"Arial Narrow\",\n sans-serif;\n$heading-font-weight: 500 !default;\n\n/*\n * ------------------------------------------\n * The detail font should be a monospace font\n * and is used for chips, supertitles as well\n * as the date search component\n * ------------------------------------------\n */\n$detail-font-family-name: \"Roboto Mono\" !default;\n$detail-font-family:\n #{$detail-font-family-name},\n monospace;\n$detail-font-weight: 400 !default;\n$detail-font-weight-bold: 500 !default;\n$detail-font-file: \"RobotoMono-Regular.ttf\" !default;\n$detail-font-file-bold: \"RobotoMono-Medium.ttf\" !default;\n\n$heading-xl-font-size-default: 64 !default;\n$heading-xl-font-size-medium: 48 !default;\n$heading-xl-font-size-small: 36 !default;\n$heading-xl-font-size-tiny: $heading-xl-font-size-small !default;\n$heading-xl-line-height: 1.1 !default;\n\n$heading-l-font-size-default: 36 !default;\n$heading-l-font-size-medium: 32 !default;\n$heading-l-font-size-small: 29 !default;\n$heading-l-font-size-tiny: $heading-l-font-size-small !default;\n$heading-l-line-height: 1.15 !default;\n\n$heading-m-font-size-default: 22 !default;\n$heading-m-font-size-medium: $heading-m-font-size-default !default;\n$heading-m-font-size-small: 21 !default;\n$heading-m-font-size-tiny: $heading-m-font-size-small !default;\n$heading-m-line-height: 1.4 !default;\n\n$heading-s-font-size-default: 19 !default;\n$heading-s-font-size-medium: $heading-s-font-size-default !default;\n$heading-s-font-size-small: $heading-s-font-size-default !default;\n$heading-s-font-size-tiny: $heading-s-font-size-default !default;\n$heading-s-line-height: 1.5 !default;\n"]}
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../../../../src/nationalarchives/tools/_spacing.scss","../../../../src/nationalarchives/components/accordion/accordion.scss","../../../../src/nationalarchives/tools/_colour.scss","../../../../src/nationalarchives/tools/_typography.scss","../../../../src/nationalarchives/variables/_typography.scss"],"names":[],"mappings":"CA0BA,oCACE,gBAUA,4DACE,aCzBF,wBACE,iBAGF,qBACE,iBAIF,2BACE,mBACA,UAEA,yBAEA,YACA,mBAEA,eCyDF,2BClFA,eF8BE,iCE+BF,0BACA,0BCpCsC,QDqCtC,sBCvCoC,OHWpC,wBCqEI,+DDlEF,kBACA,UAEA,sCC+DE,4DD1DJ,wBACE,WACA,SACA,gCAGA,cAEA,kBAEA,oBACA,gBAEA,gBAEA,yBAEA,YACA,mBAEA,eCgBF,qCClFA,mBAqBA,YCSA,qBDRA,kBACA,yBACA,mCAPA,YCiBsB,IHsCpB,0BACE,kBAGF,gCACE,WAEA,QACA,SAEA,kBACA,gCACA,aAEA,2CACA,kEACA,mBAGF,8BE9BF,0BACA,0BCpCsC,QDqCtC,sBCvCoC,OF8DpC,4DDSI,sCACE,0DAKF,oDACE,2CAIJ,+BACE,UAIJ,wBACE,aAEA,kBAEA,mBCqZF,8BDhZI,gCACE,YAEA,WACA,YAEA,sBAEA,iBAEA,YAIA,oDACE,YAEA","file":"accordion.css","sourcesContent":["@use \"sass:map\";\n@use \"sass:math\";\n@use \"../variables/spacing\";\n@use \"../variables/typography\";\n@use \"../tools/media\";\n\n/*\n * ------------------------------------------\n * Spacing is created with rem rather than px\n * units as when users use a custom font size\n * some browsers handle the resize of rem and\n * em separately from px which causes spacing\n * and layout issues, so to ensure everything\n * remaians consistent we use rem for spacing\n * and typography. The original intention was\n * separation so that we could scale the type\n * without affecting spacing, but in practice\n * there are too many ways to change the font\n * size in various browsers and devices\n * ------------------------------------------\n */\n@function space($size) {\n // @return #{$size * spacing.$spacing-unit-px}px;\n @return #{$size}rem;\n}\n\n%space-above {\n margin-top: space(2);\n @extend %no-space-above-for-first-children;\n}\n\n%space-only-above {\n margin: #{space(2)} 0 0;\n @extend %no-space-above-for-first-children;\n}\n\n%no-space-above-for-first-children {\n &:first-child {\n margin-top: 0;\n }\n}\n\n@mixin space-above($zero-other-margins: false) {\n @if $zero-other-margins {\n @extend %space-only-above;\n } @else {\n @extend %space-above;\n }\n}\n\n@mixin no-spacing-generator($suffix: \"\") {\n @if $suffix != \"\" {\n $suffix: \"-\" + $suffix;\n }\n @each $property in margin, padding {\n @each $direction in top, bottom {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--no-#{$property}-#{$direction}#{$suffix},\n .tna-\\!--no-#{$property}-#{$combined-direction}#{$suffix} {\n #{$property}-#{$direction}: 0 !important;\n }\n } @else {\n .tna-\\!--no-#{$property}-#{$direction}#{$suffix} {\n #{$property}-#{$direction}: 0 !important;\n }\n }\n }\n }\n}\n\n@mixin spacing-generator($suffix: \"\") {\n @each $property in margin, padding {\n @each $direction in top, bottom {\n @each $size, $amount in spacing.$spacing {\n @if $direction == all {\n .tna-\\!--#{$property}-#{$size} {\n #{$property}: #{space($amount)} !important;\n }\n } @else {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--#{$property}-#{$direction}-#{$size},\n .tna-\\!--#{$property}-#{$combined-direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n } @else {\n .tna-\\!--#{$property}-#{$direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n }\n }\n }\n }\n }\n\n @include media.on-mobile {\n @each $property in margin, padding {\n @each $direction in top, bottom {\n @each $size, $amount in spacing.$spacing-mobile {\n @if $direction == all {\n .tna-\\!--#{$property}-#{$size} {\n #{$property}: #{space($amount)} !important;\n }\n } @else {\n $combined-direction: \"\";\n @if $direction == top or $direction == bottom {\n $combined-direction: vertical;\n } @else if $direction == right or $direction == left {\n $combined-direction: horizontal;\n }\n @if $combined-direction {\n .tna-\\!--#{$property}-#{$direction}-#{$size},\n .tna-\\!--#{$property}-#{$combined-direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n } @else {\n .tna-\\!--#{$property}-#{$direction}-#{$size} {\n #{$property}-#{$direction}: #{space($amount)} !important;\n }\n }\n }\n }\n }\n }\n }\n}\n","@use \"sass:math\";\n@use \"../../tools/colour\";\n@use \"../../tools/spacing\";\n@use \"../../tools/typography\";\n\n.tna-accordion {\n @include spacing.space-above;\n\n // NON INTERACTIVE\n &__item {\n @include spacing.space-above;\n }\n\n &__heading {\n padding-top: spacing.space(1);\n }\n\n &__body {\n padding-top: spacing.space(1);\n }\n\n // INTERACTIVE\n &__toggle-all {\n margin-bottom: spacing.space(1);\n padding: 0;\n\n background: transparent;\n\n border: none;\n border-radius: 0.1px;\n\n cursor: pointer;\n\n @include colour.colour-font(\"link\");\n @include typography.font-size(16);\n\n &:hover {\n @include typography.interacted-text-decoration;\n }\n }\n\n &__details {\n @include colour.colour-border(\"keyline\", 1px, solid, bottom);\n\n position: relative;\n z-index: 1;\n\n &:first-of-type {\n @include colour.colour-border(\"keyline\", 1px, solid, top);\n }\n }\n\n &__summary {\n width: 100%;\n margin: 0;\n padding: spacing.space(0.5) spacing.space(3) spacing.space(0.5)\n spacing.space(1);\n\n display: block;\n\n position: relative;\n\n line-height: inherit;\n text-align: left;\n\n list-style: none;\n\n background: transparent;\n\n border: none;\n border-radius: 0.1px;\n\n cursor: pointer;\n\n @include colour.colour-font(\"font-dark\");\n @include typography.font-size(18);\n @include typography.main-font(true);\n\n * {\n font-size: inherit;\n }\n\n &::before {\n content: \"\";\n\n width: 0;\n height: 0;\n\n position: absolute;\n top: calc(50% - #{math.div(math.sqrt(3), 4)}rem);\n right: 0.75rem;\n\n border-width: #{math.div(math.sqrt(3), 2)}rem 0.5rem 0 0.5rem;\n border-color: colour.colour-var(\"font-light\") transparent;\n border-style: solid;\n }\n\n &:hover {\n @include typography.interacted-text-decoration;\n @include colour.colour-background(\"background-tint\");\n\n &::before {\n border-color: colour.colour-var(\"font-dark\") transparent;\n }\n }\n\n &[aria-expanded=\"true\"] {\n &::before {\n border-width: 0 0.5rem #{math.div(math.sqrt(3), 2)}rem 0.5rem;\n }\n }\n\n &:active {\n z-index: 1;\n }\n }\n\n &__content {\n padding: spacing.space(1);\n\n position: relative;\n\n border-radius: 0.1px;\n }\n\n @include colour.on-forced-colours {\n &__summary {\n &::before {\n content: \"\\2193\";\n\n width: auto;\n height: auto;\n\n top: calc(50% - 0.5rem);\n\n line-height: 1rem;\n\n border: none;\n }\n\n &[aria-expanded=\"true\"] {\n &::before {\n content: \"\\2191\";\n\n border: none;\n }\n }\n }\n }\n}\n","@use \"sass:list\";\n@use \"sass:map\";\n@use \"sass:meta\";\n@use \"../variables/borders\";\n@use \"../variables/forms\";\n@use \"../variables/colour\";\n@use \"../variables/features\";\n@use \"../tools/media\";\n\n$base-colours: (\n \"background\",\n // \"background-tint\",\n \"font-base\",\n \"font-dark\",\n \"font-light\",\n \"icon-light\",\n \"link\",\n \"link-visited\",\n // \"focus-outline\",\n \"keyline\",\n \"keyline-dark\",\n // \"input-foreground\",\n // \"input-background\",\n // \"input-border\",\n // \"form-error-border\",\n // \"form-error-text\",\n // \"button-text\",\n // \"button-background\",\n // \"button-hover-text\",\n // \"button-hover-background\",\n);\n\n@function brand-colour($colour, $opacity: 1) {\n @return colour.brand-colour($colour, $opacity);\n}\n\n@mixin colour-css-vars($excludes...) {\n @each $name, $value in colour.$colour-palette-default {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index($base-colours, $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@mixin colour-css-vars-dark($excludes...) {\n @each $name, $value in colour.$colour-palette-dark {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index($base-colours, $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@mixin colour-css-vars-high-contrast($excludes...) {\n @each $name, $value in colour.$colour-palette-high-contrast {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index($base-colours, $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@mixin colour-css-vars-high-contrast-dark($excludes...) {\n @each $name, $value in colour.$colour-palette-high-contrast-dark {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index((\"keyline\", \"keyline-dark\"), $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@function colour-var($colour) {\n @return var(\n --#{$colour},\n #{map.get(colour.$colour-palette-default, $colour)}\n );\n}\n\n@mixin colour-font($colour, $important: false) {\n color: colour-var($colour) if(sass($important): !important; else: null);\n}\n\n@mixin colour-background($colour, $important: false) {\n background-color: colour-var($colour)\n if(sass($important): !important; else: null);\n}\n\n@mixin colour-background-brand($brandColour, $important: false) {\n background-color: #{brand-colour($brandColour)}\n if(sass($important): !important; else: null);\n}\n\n@mixin colour-border(\n $colour,\n $width: \"\",\n $style: solid,\n $direction: \"\",\n $important: false\n) {\n @if $direction != \"\" {\n @if $width != \"\" {\n border-#{$direction}: $width\n colour-var($colour)\n $style\n if(sass($important): !important; else: null);\n } @else {\n border-#{$direction}-color: colour-var($colour)\n if(sass($important): !important; else: null);\n }\n } @else {\n @if $width != \"\" {\n border: $width\n colour-var($colour)\n $style\n if(sass($important): !important; else: null);\n } @else {\n border-color: var(\n --#{$colour},\n #{map.get(colour.$colour-palette-default, $colour)}\n )\n if(sass($important): !important; else: null);\n }\n }\n}\n\n@mixin colour-outline($colour, $width: \"\", $style: solid, $important: false) {\n @if $width != \"\" {\n outline: $width\n colour-var($colour)\n $style\n if(sass($important): !important; else: null);\n } @else {\n outline-color: colour-var($colour)\n if(sass($important): !important; else: null);\n }\n}\n\n@mixin colour-fill($colour, $important: false) {\n fill: colour-var($colour) if(sass($important): !important; else: null);\n}\n\n%colour-input {\n @include colour-font(\"input-foreground\");\n @include colour-background(\"input-background\");\n @include colour-border(\"input-border\", forms.$form-field-border-width);\n}\n\n@mixin colour-input() {\n @extend %colour-input;\n}\n\n@mixin thick-keyline($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\"keyline\", $border-width, solid, $direction);\n } @else {\n @include colour-border(\"keyline\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-dark($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\"keyline-dark\", $border-width, solid, $direction);\n } @else {\n @include colour-border(\"keyline-dark\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-accent($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\"accent-border\", $border-width, solid, $direction);\n } @else {\n @include colour-border(\"accent-border\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-error($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\n \"form-error-border\",\n $border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"form-error-border\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-brand($direction: \"\", $brandColour, $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n border-#{$direction}: $border-width #{brand-colour($brandColour)} solid;\n } @else {\n border: $border-width #{brand-colour($brandColour)} solid;\n }\n}\n\n@mixin thick-keyline-transparent($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n border-#{$direction}: $border-width transparent solid;\n } @else {\n border: $border-width transparent solid;\n }\n}\n\n// Use light theme colours (except for \"form-error-border\")\n%always-light {\n // @include colour-css-vars(\"form-error-border\", \"focus-outline\");\n @include colour-css-vars;\n\n @media (prefers-contrast: more) {\n // @include colour-css-vars-high-contrast(\n // \"form-error-border\",\n // \"focus-outline\"\n // );\n @include colour-css-vars-high-contrast;\n }\n}\n\n@mixin always-light {\n @extend %always-light;\n}\n\n%contrast {\n --background: var(--contrast-background);\n --font-base: var(--contrast-font-base);\n --font-dark: var(--contrast-font-dark);\n --font-light: var(--contrast-font-light);\n --icon-light: var(--contrast-icon-light);\n --link: var(--contrast-link);\n --link-visited: var(--contrast-link-visited);\n --keyline: var(--contrast-keyline);\n --keyline-dark: var(--contrast-keyline-dark);\n --button-text: var(--contrast-button-text);\n --button-background: var(--contrast-button-background);\n --button-hover-text: var(--contrast-button-hover-text);\n --button-hover-background: var(--contrast-button-hover-background);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin contrast {\n @extend %contrast;\n}\n\n%contrast-on-mobile {\n @include media.on-mobile {\n --background: var(--contrast-background);\n --font-base: var(--contrast-font-base);\n --font-dark: var(--contrast-font-dark);\n --font-light: var(--contrast-font-light);\n --icon-light: var(--contrast-icon-light);\n --link: var(--contrast-link);\n --link-visited: var(--contrast-link-visited);\n --keyline: var(--contrast-keyline);\n --keyline-dark: var(--contrast-keyline-dark);\n --button-text: var(--contrast-button-text);\n --button-background: var(--contrast-button-background);\n --button-hover-text: var(--contrast-button-hover-text);\n --button-hover-background: var(--contrast-button-hover-background);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n }\n}\n\n@mixin contrast-on-mobile {\n @extend %contrast-on-mobile;\n}\n\n%base {\n @each $name, $value in $base-colours {\n --#{$name}: var(--base-#{$value});\n }\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin base {\n @extend %base;\n}\n\n%tint {\n --background: var(--background-tint);\n\n @include colour-background(\"background\");\n}\n\n@mixin tint {\n @extend %tint;\n}\n\n%accent {\n --background: var(--accent-background);\n --font-base: var(--accent-font-base);\n --font-dark: var(--accent-font-dark);\n --font-light: var(--accent-font-light);\n --icon-light: var(--accent-icon-light);\n --link: var(--accent-link);\n --link-visited: var(--accent-link);\n --keyline: var(--accent-keyline);\n --keyline-dark: var(--accent-keyline-dark);\n --accent-border: var(--accent-font-dark);\n --button-text: var(--accent-button-text);\n --button-background: var(--accent-button-background);\n --button-hover-text: var(--accent-button-hover-text);\n --button-hover-background: var(--accent-button-hover-background);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin accent {\n @extend %accent;\n}\n\n%accent-light {\n --background: var(--accent-background-light);\n --font-base: #{map.get(colour.$colour-palette-default, \"font-base\")};\n --font-dark: #{map.get(colour.$colour-palette-default, \"font-dark\")};\n --font-light: #{map.get(colour.$colour-palette-default, \"font-light\")};\n --icon-light: #{map.get(colour.$colour-palette-default, \"icon-light\")};\n --keyline: #{map.get(colour.$colour-palette-default, \"keyline\")};\n --keyline-dark: #{map.get(colour.$colour-palette-default, \"keyline-dark\")};\n --button-text: #{map.get(colour.$colour-palette-default, \"button-text\")};\n --button-background: #{map.get(\n colour.$colour-palette-default,\n \"button-background\"\n )};\n --button-hover-text: #{map.get(\n colour.$colour-palette-default,\n \"button-hover-text\"\n )};\n --button-hover-background: #{map.get(\n colour.$colour-palette-default,\n \"button-hover-background\"\n )};\n --accent-border: var(--accent-background);\n\n @include colour-background(\"background\");\n @include colour-font(\"font-base\");\n\n .tna-template--system-theme & {\n @media (prefers-color-scheme: dark) {\n // --link: #{map.get(colour.$colour-palette-default, \"link\")};\n // --link-visited: #{map.get(colour.$colour-palette-default, \"link-visited\")};\n\n --background: var(--accent-background);\n --font-base: var(--accent-font-base);\n --font-dark: var(--accent-font-dark);\n --font-light: var(--accent-font-light);\n --icon-light: var(--accent-icon-light);\n --link: var(--accent-link);\n --link-visited: var(--accent-link);\n --keyline: var(--accent-keyline);\n --keyline-dark: var(--accent-keyline-dark);\n --accent-border: var(--accent-font-dark);\n --button-text: var(--accent-button-text);\n --button-background: var(--accent-button-background);\n --button-hover-text: var(--accent-button-hover-text);\n --button-hover-background: var(--accent-button-hover-background);\n }\n }\n\n .tna-template--dark-theme & {\n // --link: #{map.get(colour.$colour-palette-default, \"link\")};\n // --link-visited: #{map.get(colour.$colour-palette-default, \"link-visited\")};\n\n --background: var(--accent-background);\n --font-base: var(--accent-font-base);\n --font-dark: var(--accent-font-dark);\n --font-light: var(--accent-font-light);\n --icon-light: var(--accent-icon-light);\n --link: var(--accent-link);\n --link-visited: var(--accent-link);\n --keyline: var(--accent-keyline);\n --keyline-dark: var(--accent-keyline-dark);\n --accent-border: var(--accent-font-dark);\n --button-text: var(--accent-button-text);\n --button-background: var(--accent-button-background);\n --button-hover-text: var(--accent-button-hover-text);\n --button-hover-background: var(--accent-button-hover-background);\n }\n}\n\n@mixin accent-light {\n @extend %accent-light;\n}\n\n%yellow-accent {\n --accent-background: #{colour.brand-colour(\"yellow\")} !important;\n --accent-background-light: #{colour.brand-colour(\"cream\")} !important;\n --accent-border: #{colour.brand-colour(\"yellow\")} !important;\n --accent-font-base: #{colour.brand-colour(\"black\")} !important;\n --accent-font-dark: #{colour.brand-colour(\"black\")} !important;\n --accent-font-light: #{colour.brand-colour(\"black\", 0.7)} !important;\n --accent-icon-light: #{colour.brand-colour(\"black\", 0.7)} !important;\n --accent-link: #{colour.brand-colour(\"black\")} !important;\n --accent-link-visited: #{colour.brand-colour(\"black\")} !important;\n --accent-keyline: #{colour.brand-colour(\"black\", 0.5)} !important;\n --accent-keyline-dark: #{colour.brand-colour(\"black\", 0.8)} !important;\n --button-accented-text: #{colour.brand-colour(\"white\")} !important;\n --button-accented-background: #{colour.brand-colour(\"brown\")} !important;\n}\n\n@mixin yellow-accent {\n @extend %yellow-accent;\n}\n\n%accent-lighter-text {\n --accent-font-base: #{colour.brand-colour(\"white\")} !important;\n --accent-font-dark: #{colour.brand-colour(\"white\")} !important;\n --accent-font-light: #{colour.brand-colour(\"white\", 0.7)} !important;\n --accent-icon-light: #{colour.brand-colour(\"white\", 0.7)} !important;\n --accent-link: #{colour.brand-colour(\"white\")} !important;\n --accent-link-visited: #{colour.brand-colour(\"white\")} !important;\n --accent-keyline: #{colour.brand-colour(\"white\", 0.5)} !important;\n --accent-keyline-dark: #{colour.brand-colour(\"white\", 0.8)} !important;\n --button-accented-text: #{colour.brand-colour(\"white\")} !important;\n}\n\n%black-accent {\n --accent-background: #{colour.brand-colour(\"black\")} !important;\n --accent-background-light: #{colour.brand-colour(\"light-grey\")} !important;\n --accent-border: #{colour.brand-colour(\"black\")} !important;\n --button-accented-text: #{colour.brand-colour(\"black\")} !important;\n --button-accented-background: #{colour.brand-colour(\"grey\")} !important;\n}\n\n@mixin black-accent {\n @extend %accent-lighter-text;\n @extend %black-accent;\n}\n\n%pink-accent {\n --accent-background: #{colour.brand-colour(\"maroon\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-pink\")} !important;\n --accent-border: #{colour.brand-colour(\"pink\")} !important;\n --button-accented-background: #{colour.brand-colour(\"maroon\")} !important;\n}\n\n@mixin pink-accent {\n @extend %accent-lighter-text;\n @extend %pink-accent;\n}\n\n%orange-accent {\n --accent-background: #{colour.brand-colour(\"chestnut\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-orange\")} !important;\n --accent-border: #{colour.brand-colour(\"orange\")} !important;\n --button-accented-background: #{colour.brand-colour(\"chestnut\")} !important;\n}\n\n@mixin orange-accent {\n @extend %accent-lighter-text;\n @extend %orange-accent;\n}\n\n%green-accent {\n --accent-background: #{colour.brand-colour(\"forest\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-green\")} !important;\n --accent-border: #{colour.brand-colour(\"green\")} !important;\n --button-accented-background: #{colour.brand-colour(\"forest\")} !important;\n}\n\n@mixin green-accent {\n @extend %accent-lighter-text;\n @extend %green-accent;\n}\n\n%blue-accent {\n --accent-background: #{colour.brand-colour(\"navy\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-blue\")} !important;\n --accent-border: #{colour.brand-colour(\"blue\")} !important;\n --button-accented-background: #{colour.brand-colour(\"navy\")} !important;\n}\n\n@mixin blue-accent {\n @extend %accent-lighter-text;\n @extend %blue-accent;\n}\n\n@mixin on-high-contrast {\n @media (prefers-contrast: more) {\n @content;\n }\n}\n\n@mixin on-forced-colours {\n @media (forced-colors: active) {\n @content;\n }\n}\n\n@mixin on-high-contrast-and-forced-colours {\n @include on-forced-colours {\n @content;\n }\n\n @include on-high-contrast {\n @content;\n }\n}\n\n%image-loader-background {\n background: linear-gradient(\n -45deg,\n rgb(0 0 0 / 25%),\n rgb(255 255 255 / 25%),\n rgb(0 0 0 / 25%)\n );\n background-size: 500% 500%;\n background-position: 0 50%;\n\n animation: image-loader-background ease-in-out 1.2s infinite;\n\n @media (prefers-reduced-motion) {\n animation: none !important;\n }\n}\n\n@mixin image-loader-background {\n @if features.$image-loader-animations {\n @extend %image-loader-background;\n }\n}\n","@use \"sass:math\";\n@use \"../variables/typography\";\n@use \"colour\";\n@use \"media\";\n\n@mixin font-size($font-size-px) {\n font-size: #{math.div($font-size-px, typography.$relative-1rem-px)}rem;\n}\n\n@mixin relative-font-size($font-size-px) {\n @warn \"relative-font-size() will soon be deprecated in favour of font-size().\";\n @include font-size($font-size-px);\n}\n\n@mixin main-font-weight {\n font-weight: typography.$main-font-weight;\n}\n\n@mixin main-font-weight-medium {\n font-weight: typography.$main-font-weight-medium;\n}\n\n@mixin main-font-weight-bold {\n font-weight: typography.$main-font-weight-bold;\n}\n\n@mixin main-font($bold: false) {\n font-family: typography.$main-font-family;\n font-style: normal;\n font-optical-sizing: auto;\n font-variation-settings: \"wdth\" 100;\n @if $bold {\n @include main-font-weight-bold;\n } @else {\n @include main-font-weight;\n }\n}\n\n@mixin heading-font {\n font-family: typography.$heading-font-family;\n font-weight: typography.$heading-font-weight;\n}\n\n@mixin detail-font($bold: false) {\n font-family: typography.$detail-font-family;\n font-style: normal;\n font-optical-sizing: auto;\n @if $bold {\n font-weight: typography.$detail-font-weight-bold;\n } @else {\n font-weight: typography.$detail-font-weight;\n }\n}\n\n@mixin detail-font-small {\n @include detail-font;\n @include font-size(14);\n line-height: 1.1;\n text-transform: uppercase;\n}\n\n@mixin interactable-text-decoration {\n text-decoration-thickness: typography.$interactable-text-decoration-thickness;\n text-underline-offset: typography.$interactable-text-decoration-offset;\n}\n\n@mixin interacted-text-decoration {\n text-decoration: underline;\n text-decoration-thickness: typography.$interactive-text-decoration-thickness;\n text-underline-offset: typography.$interactable-text-decoration-offset;\n}\n\n@mixin heading-generator(\n $font-size-default,\n $font-size-medium,\n $font-size-small,\n $font-size-tiny,\n $line-height\n) {\n $small-and-tiny-identical: $font-size-small == $font-size-tiny;\n $medium-small-and-tiny-identical: $font-size-medium == $font-size-small and\n $small-and-tiny-identical;\n $all-identical: $font-size-default == $font-size-medium and\n $medium-small-and-tiny-identical and $small-and-tiny-identical;\n line-height: $line-height;\n @include font-size($font-size-default);\n\n @if $all-identical != true {\n @if $medium-small-and-tiny-identical != true {\n @include media.on-medium {\n @include font-size($font-size-medium);\n }\n\n @if $small-and-tiny-identical != true {\n @include media.on-small {\n @include font-size($font-size-small);\n }\n\n @include media.on-tiny {\n @include font-size($font-size-tiny);\n }\n } @else {\n @include media.on-mobile {\n @include font-size($font-size-small);\n }\n }\n } @else {\n @include media.on-smaller-than-large {\n @include font-size($font-size-medium);\n }\n }\n }\n}\n","@use \"sass:math\";\n\n/*\n * ------------------------------------------\n * The typefaces, sizes and spacings that are\n * defined in this file have been selected to\n * ensure 100% match with the latest National\n * Archives brand guidelines - avoid changing\n * or overwriting any of these values without\n * signing off with the Digital Services team\n * first\n * ------------------------------------------\n */\n\n$relative-1rem-px: 16; // 16px = 1rem\n\n/*\n * ------------------------------------------\n * When true, use the included font files for\n * Open Sans and Roboto Mono, rather than the\n * versions hosted by Google Fonts\n * ------------------------------------------\n */\n$use-local-fonts: false !default;\n\n$body-font-size-px: 19 !default;\n$body-font-size-px-medium: 18 !default;\n$body-font-size-px-mobile: 17 !default;\n$body-line-height: 1.75 !default;\n\n$interactable-text-decoration-offset: 0.125em !default;\n$interactable-text-decoration-thickness: #{math.div(1.5, $relative-1rem-px)}rem !default;\n$interactive-text-decoration-thickness: #{math.div(4, $relative-1rem-px)}rem !default;\n\n$main-font-family-name: \"Open Sans\" !default;\n$main-font-family:\n #{$main-font-family-name},\n sans-serif;\n$main-font-weight: 400 !default;\n$main-font-weight-medium: 600 !default;\n$main-font-weight-bold: 700 !default;\n$main-font-file: \"OpenSans-Regular.ttf\" !default;\n$main-font-file-medium: \"OpenSans-SemiBold.ttf\" !default;\n$main-font-file-bold: \"OpenSans-Bold.ttf\" !default;\n\n/*\n * ------------------------------------------\n * To use Supria Sans Condensed (which is the\n * approved heading typeface for The National\n * Archives), you need to obtain a licence to\n * properly embed the CSS files with the font\n * definitions in your service - check with a\n * member of the Digital Services team on how\n * to get a licence\n * ------------------------------------------\n */\n$heading-font-family-name: \"supria-sans-condensed\" !default;\n$heading-font-family:\n #{$heading-font-family-name},\n \"Arial Narrow\",\n sans-serif;\n$heading-font-weight: 500 !default;\n\n/*\n * ------------------------------------------\n * The detail font should be a monospace font\n * and is used for chips, supertitles as well\n * as the date search component\n * ------------------------------------------\n */\n$detail-font-family-name: \"Roboto Mono\" !default;\n$detail-font-family:\n #{$detail-font-family-name},\n monospace;\n$detail-font-weight: 400 !default;\n$detail-font-weight-bold: 500 !default;\n$detail-font-file: \"RobotoMono-Regular.ttf\" !default;\n$detail-font-file-bold: \"RobotoMono-Medium.ttf\" !default;\n\n$heading-xl-font-size-default: 64 !default;\n$heading-xl-font-size-medium: 48 !default;\n$heading-xl-font-size-small: 36 !default;\n$heading-xl-font-size-tiny: $heading-xl-font-size-small !default;\n$heading-xl-line-height: 1.1 !default;\n\n$heading-l-font-size-default: 36 !default;\n$heading-l-font-size-medium: 32 !default;\n$heading-l-font-size-small: 29 !default;\n$heading-l-font-size-tiny: $heading-l-font-size-small !default;\n$heading-l-line-height: 1.15 !default;\n\n$heading-m-font-size-default: 22 !default;\n$heading-m-font-size-medium: $heading-m-font-size-default !default;\n$heading-m-font-size-small: 21 !default;\n$heading-m-font-size-tiny: $heading-m-font-size-small !default;\n$heading-m-line-height: 1.4 !default;\n\n$heading-s-font-size-default: 19 !default;\n$heading-s-font-size-medium: $heading-s-font-size-default !default;\n$heading-s-font-size-small: $heading-s-font-size-default !default;\n$heading-s-font-size-tiny: $heading-s-font-size-default !default;\n$heading-s-line-height: 1.5 !default;\n"]}
|