@nationalarchives/frontend 0.2.18 → 0.4.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 +1 -1
- package/nationalarchives/analytics.js.map +1 -1
- package/nationalarchives/analytics.mjs +11 -5
- package/nationalarchives/components/_presentation.scss +0 -1
- package/nationalarchives/components/accordion/accordion.css.map +1 -1
- package/nationalarchives/components/breadcrumbs/analytics.js +17 -0
- package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +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/card/card.scss +1 -1
- package/nationalarchives/components/checkboxes/checkboxes.css.map +1 -1
- package/nationalarchives/components/compound-filters/compound-filters.css.map +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.js +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.js.map +1 -1
- package/nationalarchives/components/date-input/date-input.css.map +1 -1
- package/nationalarchives/components/date-search/date-search.css.map +1 -1
- package/nationalarchives/components/details/details.css.map +1 -1
- package/nationalarchives/components/error-summary/error-summary.css.map +1 -1
- package/nationalarchives/components/files-list/files-list.css.map +1 -1
- package/nationalarchives/components/files-list/fixtures.json +4 -4
- package/nationalarchives/components/files-list/template.njk +1 -1
- package/nationalarchives/components/footer/fixtures.json +2 -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.scss +0 -1
- package/nationalarchives/components/footer/template.njk +7 -4
- package/nationalarchives/components/gallery/analytics.js +26 -0
- package/nationalarchives/components/gallery/fixtures.json +33 -2
- package/nationalarchives/components/gallery/gallery.css +1 -1
- package/nationalarchives/components/gallery/gallery.css.map +1 -1
- package/nationalarchives/components/gallery/gallery.js +1 -1
- package/nationalarchives/components/gallery/gallery.js.map +1 -1
- package/nationalarchives/components/gallery/gallery.mjs +4 -7
- package/nationalarchives/components/gallery/gallery.scss +22 -9
- package/nationalarchives/components/gallery/macro-options.json +6 -0
- package/nationalarchives/components/gallery/template.njk +6 -3
- 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.scss +7 -5
- package/nationalarchives/components/global-header/template.njk +1 -1
- package/nationalarchives/components/header/header.css.map +1 -1
- package/nationalarchives/components/hero/hero.css +1 -1
- package/nationalarchives/components/hero/hero.css.map +1 -1
- package/nationalarchives/components/hero/hero.scss +7 -14
- package/nationalarchives/components/index-grid/index-grid.css.map +1 -1
- package/nationalarchives/components/pagination/fixtures.json +5 -5
- package/nationalarchives/components/pagination/template.njk +2 -2
- package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -1
- package/nationalarchives/components/picture/picture.css.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/quick-filters/quick-filters.scss +2 -0
- package/nationalarchives/components/radios/radios.css.map +1 -1
- package/nationalarchives/components/search-field/search-field.css.map +1 -1
- package/nationalarchives/components/select/select.css.map +1 -1
- package/nationalarchives/components/sidebar/sidebar.css.map +1 -1
- package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
- package/nationalarchives/components/tabs/tabs.css.map +1 -1
- package/nationalarchives/components/text-input/text-input.css.map +1 -1
- package/nationalarchives/components/textarea/textarea.css.map +1 -1
- package/nationalarchives/components/textarea/textarea.scss +2 -3
- package/nationalarchives/components/warning/warning.css.map +1 -1
- package/nationalarchives/lib/analytics-helpers.mjs +17 -13
- package/nationalarchives/lib/cookies.mjs +16 -5
- package/nationalarchives/print.css.map +1 -1
- package/nationalarchives/prototype-kit.css +1 -1
- package/nationalarchives/prototype-kit.css.map +1 -1
- package/nationalarchives/tools/_colour.scss +2 -1
- package/nationalarchives/utilities/_reset.scss +15 -0
- package/nationalarchives/utilities/typography/_index.scss +7 -3
- package/package.json +14 -14
- package/nationalarchives/components/records-list/_index.scss +0 -1
- package/nationalarchives/components/records-list/fixtures.json +0 -42
- package/nationalarchives/components/records-list/macro-options.json +0 -70
- package/nationalarchives/components/records-list/macro.njk +0 -3
- package/nationalarchives/components/records-list/records-list.css +0 -1
- package/nationalarchives/components/records-list/records-list.css.map +0 -1
- package/nationalarchives/components/records-list/records-list.scss +0 -92
- package/nationalarchives/components/records-list/template.njk +0 -21
@@ -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/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/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\n constructor() {\n if (window.TNAFrontendCookieEvents) {\n return window.TNAFrontendCookieEvents;\n }\n window.TNAFrontendCookieEvents = this;\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.events[event].forEach((eventToTrigger) =>\n eventToTrigger.call(this, data),\n );\n }\n if (Object.hasOwn(this.oneTimeEvents, event)) {\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\n/**\n * Class to handle cookies.\n * @class Cookies\n * @constructor\n * @public\n */\nexport default class Cookies {\n /** @protected */\n extraPolicies = [];\n /** @protected */\n domain = \"\";\n /** @protected */\n path = \"\";\n /** @protected */\n secure = true;\n /** @protected */\n policiesKey = \"\";\n /** @protected */\n events = null;\n /** @protected */\n defaultAge = null;\n\n /**\n * Create a cookie handler.\n * @param {String} [options.extraPolicies=[]] - The extra cookie policies to manage in addition to essential, settings and usage.\n * @param {String} [options.domain=\"\"] - The domain to register the cookie with.\n * @param {String} [options.path=\"\"] - The domain to register the cookie with.\n * @param {String} [options.secure=true] - Only set cookie in HTTPS environments.\n * @param {String} [options.policiesKey=\"cookies_policy\"] - The name of the cookie.\n * @param {String} [options.newInstance=false] - Create a fresh instance of the cookie class.\n * @param {String} [options.defaultAge=31536000] - The default age of non-session cookies.\n */\n constructor(options = {}) {\n const {\n extraPolicies = [],\n domain = \"\",\n path = \"/\",\n secure = true,\n policiesKey = \"cookies_policy\",\n newInstance = false,\n defaultAge = 31536000, // 365 days\n } = options;\n if (newInstance) {\n this.destroyInstance();\n } else if (window.TNAFrontendCookies) {\n return window.TNAFrontendCookies;\n }\n this.extraPolicies = extraPolicies;\n this.domain = domain;\n this.path = path;\n this.secure = secure;\n this.policiesKey = policiesKey;\n this.defaultAge = defaultAge;\n this.events = new CookieEventHandler();\n this.init();\n window.TNAFrontendCookies = this;\n }\n\n /** @protected */\n init() {\n this.savePolicies({\n ...Object.fromEntries(\n this.extraPolicies.map((k) => [k.toLowerCase(), false]),\n ),\n usage: false,\n settings: false,\n ...this.policies,\n essential: true,\n });\n }\n\n destroyInstance() {\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.domain] - The domain to register the cookie with.\n * @param {String} [options.path=this.path] - 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.domain,\n path = this.path,\n secure = this.secure,\n session = false,\n } = options;\n if (!key) {\n return;\n }\n const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)};${\n domain ? ` domain=${domain}; ` : \"\"\n } samesite=${sameSite}; path=${path}${!session ? `; max-age=${maxAge}` : \"\"}${\n secure ? \"; secure\" : \"\"\n }`;\n document.cookie = cookie;\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 = null) {\n const options = { maxAge: -1, path, domain: domain || undefined };\n this.set(key, \"\", options);\n this.events.trigger(\"deleteCookie\", { key, ...options });\n }\n\n /**\n * Delete all cookies.\n */\n deleteAll(path = \"/\", domain = null) {\n Object.keys(this.all).forEach((cookie) => {\n this.delete(cookie, path, domain);\n });\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.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.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 return;\n }\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 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 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.set(this.policiesKey, JSON.stringify(policies), {\n maxAge: 60 * 60 * 24 * 365,\n });\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.events.on(event, callback);\n }\n\n /**\n * Add a one-time event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n once(event, callback) {\n this.events.once(event, callback);\n }\n}\n","// The module cache\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 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};\n\nconst includesAny = (arr, values) => values.some((v) => arr.includes(v));\n\nconst getClosestHeading = ($element) => {\n let heading = \"\";\n let $search = $element;\n do {\n while ($search.previousElementSibling) {\n $search = $search.previousElementSibling;\n if (\n [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes($search.tagName) ||\n ($search.classList.length &&\n includesAny(Array.from($search.classList), [\n \"tna-heading-xl\",\n \"tna-heading-l\",\n \"tna-heading-m\",\n \"tna-heading-s\",\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 valueGetters = {\n text: ($el) => $el.innerText,\n html: ($el) => $el.innerHTML,\n value: ($el) => $el.value,\n index: ($el, $scope, event, index) => index,\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};\n\nexport { getXPathTo, getClosestHeading, valueGetters };\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-accordion\",\n areaName: \"accordion\",\n events: [\n {\n eventName: \"click\",\n targetElement: \".tna-accordion__summary\",\n on: \"click\",\n data: { state: valueGetters.expanded, value: valueGetters.text },\n },\n ],\n },\n];\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-breadcrumbs\",\n areaName: \"breadcrumbs\",\n events: [\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 },\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,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\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-footer\",\n areaName: \"footer\",\n rootEventName: \"global_navigation\",\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_component_name: \"Footer\",\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_component_name: \"Footer\",\n data_link_type: \"Icon\",\n data_section: \"Social media\",\n data_link: ($el) => $el.getAttribute(\"data-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_component_name: \"Footer\",\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_component_name: \"Footer\",\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_component_name: \"Footer\",\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_component_name: \"Footer\",\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 events: [\n {\n eventName: \"click\",\n targetElement: \".tna-gallery__navigation-item\",\n on: \"click\",\n data: {\n value: valueGetters.text,\n },\n },\n {\n eventName: \"click\",\n targetElement: \".tna-gallery__navigation-prev\",\n on: \"click\",\n data: {\n value: ($el, $scope) =>\n $scope.querySelector(\n \".tna-gallery__item:not([hidden]) .tna-gallery__item-header\",\n ).innerText,\n },\n },\n {\n eventName: \"click\",\n targetElement: \".tna-gallery__navigation-next\",\n on: \"click\",\n data: {\n value: ($el, $scope) =>\n $scope.querySelector(\n \".tna-gallery__item:not([hidden]) .tna-gallery__item-header\",\n ).innerText,\n },\n },\n {\n eventName: \"keypress\",\n on: \"keydown\",\n data: {\n value: ($el, $scope, event) => event.key,\n },\n },\n {\n eventName: \"enter-fullscreen\",\n targetElement: '.tna-gallery__options button[value=\"enter-fullscreen\"]',\n on: \"click\",\n },\n {\n eventName: \"exit-fullscreen\",\n targetElement: '.tna-gallery__options button[value=\"exit-fullscreen\"]',\n on: \"click\",\n },\n {\n eventName: \"index\",\n targetElement: '.tna-gallery__options button[value=\"show-index\"]',\n on: \"click\",\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 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_component_name: \"Header\",\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_component_name: \"Header\",\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_component_name: \"Header\",\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_component_name: \"Header\",\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__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\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__heading\")?.innerText,\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 // 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__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\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__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import Cookies from \"./lib/cookies.mjs\";\nimport {\n getXPathTo,\n getClosestHeading,\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 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 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 ...FooterAnalytics,\n ...GalleryAnalytics,\n ...GlobalHeaderAnalytics,\n ...HeaderAnalytics,\n ...HeroAnalytics,\n ...PictureAnalytics,\n ...RadiosAnalytics,\n ...SearchFieldAnalytics,\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 addTrackingCode = true;\n\n constructor(options = {}) {\n const { prefix = null, addTrackingCode = true } = options;\n if (prefix) {\n this.prefix = prefix;\n }\n this.addTrackingCode = addTrackingCode;\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 );\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 */\n addListeners(scope, areaName, events, rootEventName = \"\") {\n let scopeArray;\n if (typeof scope === \"string\") {\n scopeArray = Array.from(document.querySelectorAll(scope));\n } else if (typeof scope === \"object\") {\n scopeArray = [scope];\n }\n if (!scopeArray) {\n return;\n }\n scopeArray.forEach(($scope) => {\n events.forEach((eventConfig) => {\n if (!eventConfig.on) {\n return;\n }\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 eventConfig,\n scope,\n areaName,\n index + 1,\n ),\n );\n } else {\n this.attachListener(\n $scope,\n $scope,\n rootEventName,\n eventConfig,\n scope,\n areaName,\n 1,\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 eventConfig,\n scope,\n areaName,\n index,\n ) {\n const { on, data, targetElement, rootData = {} } = eventConfig;\n $el.addEventListener(on, (event) =>\n this.recordEvent(\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, $el, $scope, event, index)\n : null,\n state: data?.state\n ? this.computedValue(data.state, $el, $scope, event, index)\n : null,\n group: data?.group\n ? this.computedValue(data.group, $el, $scope, event, index)\n : null,\n xPath: getXPathTo($el),\n targetElement: targetElement,\n timeSincePageLoad: new Date() - this.startTime,\n index,\n scope,\n areaName,\n },\n Object.fromEntries(\n Object.entries(rootData).map(([key, value]) => [\n key,\n this.computedValue(value, $el, $scope, event, index),\n ]),\n ),\n ),\n );\n }\n\n /** @protected */\n computedValue(value, $el, $scope, event, index) {\n return typeof value === \"function\"\n ? value.call(this, $el, $scope, event, index)\n : (value ?? null);\n }\n\n /** @protected */\n recordEvent(eventName, data, rootData = {}) {\n this.events.push({\n event: eventName,\n [`${this.prefix}.event`]: 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}.'][content]`,\n ),\n ).map(($metaEl) => [\n $metaEl.getAttribute(\"name\"),\n $metaEl.getAttribute(\"content\"),\n ]),\n );\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 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, addTrackingCode });\n window.TNAFrontendAnalyticsGA4 = this;\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 const tnaMetaTags = this.getTnaMetaTags();\n this.pushToDataLayer({\n ...tnaMetaTags,\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 // window.location.reload();\n }\n }\n}\n\nconst ga4Id = document.documentElement.getAttribute(\"data-ga4\");\nif (ga4Id) {\n new GA4({ id: ga4Id });\n}\n\nconst helpers = { getXPathTo, getClosestHeading, valueGetters };\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","_classCallCheck","_defineProperty","this","key","value","event","callback","Object","hasOwn","events","concat","_toConsumableArray","oneTimeEvents","_this","data","arguments","length","undefined","forEach","eventToTrigger","call","i","splice","Cookies","options","_options$extraPolicie","extraPolicies","_options$domain","domain","_options$path","path","_options$secure","secure","_options$policiesKey","policiesKey","_options$newInstance","newInstance","_options$defaultAge","defaultAge","destroyInstance","init","savePolicies","_objectSpread","fromEntries","map","k","toLowerCase","usage","settings","policies","essential","get","deserialised","document","cookie","split","filter","x","parts","trim","JSON","parse","e","all","exists","decodeURIComponent","_options$maxAge","maxAge","_options$sameSite","sameSite","_options$domain2","_options$path2","_options$secure2","_options$session","session","encodeURIComponent","trigger","set","_this2","keys","policy","setPolicy","accepted","allPolicies","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","siblings","parentNode","childNodes","sibling","nodeType","includesAny","arr","values","some","v","includes","getClosestHeading","heading","$search","previousElementSibling","classList","Array","from","innerText","parentElement","valueGetters","text","$el","html","innerHTML","index","$scope","checked","expanded","getAttribute","toString","closestHeading","scope","areaName","eventName","targetElement","state","group","_$scope$closest","closest","querySelector","_$scope$querySelector","_$scope$querySelector2","hasAttribute","rootEventName","rootData","data_component_name","data_link_type","data_section","data_link","data_position","image","imageSrc","imageAlt","componentAnalytics","BreadcrumbAnalytics","CheckboxesAnalytics","DetailsAnalytics","FooterAnalytics","GalleryAnalytics","GlobalHeaderAnalytics","HeaderAnalytics","_$scope$querySelector3","PictureAnalytics","RadiosAnalytics","SearchFieldAnalytics","TextInputAnalytics","TextareaAnalytics","EventTracker","Date","_options$prefix","prefix","_options$addTrackingC","addTrackingCode","initAll","navigator","doNotTrack","cookies","isPolicyAccepted","enableTracking","disableTracking","componentConfig","addListeners","scopeArray","_this3","querySelectorAll","_typeof","eventConfig","attachListener","_this4","_eventConfig$rootData","addEventListener","recordEvent","generateEventName","name","computedValue","xPath","timeSincePageLoad","startTime","entries","_ref","_ref2","_slicedToArray","push","head","$metaEl","GA4","_EventTracker2","_this5","TNAFrontendAnalyticsGA4","_possibleConstructorReturn","_options$id","_options$prefix2","_options$initAll","_options$addTrackingC2","dataLayer","gTagId","ga4Disable","start","_inherits","_this6","ga4Data","_ref3","_ref4","pushToDataLayer","trackingEnabled","trackingCodeAdded","Error","tnaMetaTags","getTnaMetaTags","getTime","firstScript","getElementsByTagName","script","createElement","async","src","insertBefore","appendChild","_this7","startsWith","ga4Id","documentElement","helpers"],"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/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/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\n constructor() {\n if (window.TNAFrontendCookieEvents) {\n return window.TNAFrontendCookieEvents;\n }\n window.TNAFrontendCookieEvents = this;\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.events[event].forEach((eventToTrigger) =>\n eventToTrigger.call(this, data),\n );\n }\n if (Object.hasOwn(this.oneTimeEvents, event)) {\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\n/**\n * Class to handle cookies.\n * @class Cookies\n * @constructor\n * @public\n */\nexport default class Cookies {\n /** @protected */\n extraPolicies = [];\n /** @protected */\n domain = \"\";\n /** @protected */\n path = \"\";\n /** @protected */\n secure = true;\n /** @protected */\n policiesKey = \"\";\n /** @protected */\n events = null;\n /** @protected */\n defaultAge = null;\n\n /**\n * Create a cookie handler.\n * @param {String} [options.extraPolicies=[]] - The extra cookie policies to manage in addition to essential, settings, usage and marketing.\n * @param {String} [options.domain=\"\"] - The domain to register the cookie with.\n * @param {String} [options.path=\"\"] - The domain to register the cookie with.\n * @param {String} [options.secure=true] - Only set cookie in HTTPS environments.\n * @param {String} [options.policiesKey=\"cookies_policy\"] - The name of the cookie.\n * @param {String} [options.newInstance=false] - Create a fresh instance of the cookie class.\n * @param {String} [options.defaultAge=31536000] - The default age of non-session cookies.\n */\n constructor(options = {}) {\n const {\n extraPolicies = [],\n domain = null,\n path = null,\n secure = true,\n policiesKey = \"cookies_policy\",\n newInstance = false,\n defaultAge = 31536000, // 365 days\n } = options;\n if (newInstance) {\n this.destroyInstance();\n } else if (window.TNAFrontendCookies) {\n return window.TNAFrontendCookies;\n }\n this.extraPolicies = extraPolicies;\n if (domain === null) {\n this.domain =\n document.documentElement.getAttribute(\"data-tnacookiesdomain\") || \"\";\n } else {\n this.domain = domain;\n }\n if (path === null) {\n this.path =\n document.documentElement.getAttribute(\"data-tnacookiespath\") || \"/\";\n } else {\n this.path = path;\n }\n this.secure = secure;\n this.policiesKey = policiesKey;\n this.defaultAge = defaultAge;\n this.events = new CookieEventHandler();\n this.init();\n window.TNAFrontendCookies = this;\n }\n\n /** @protected */\n init() {\n this.savePolicies({\n ...Object.fromEntries(\n this.extraPolicies.map((k) => [k.toLowerCase(), false]),\n ),\n usage: false,\n settings: false,\n marketing: false,\n ...this.policies,\n essential: true,\n });\n }\n\n destroyInstance() {\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.domain] - The domain to register the cookie with.\n * @param {String} [options.path=this.path] - 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.domain,\n path = this.path,\n secure = this.secure,\n session = false,\n } = options;\n if (!key) {\n return;\n }\n const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)};${\n domain ? ` domain=${domain}; ` : \"\"\n } samesite=${sameSite}; path=${path}${!session ? `; max-age=${maxAge}` : \"\"}${\n secure ? \"; secure\" : \"\"\n }`;\n document.cookie = cookie;\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 = null) {\n const options = { maxAge: -1, path, domain: domain || undefined };\n this.set(key, \"\", options);\n this.events.trigger(\"deleteCookie\", { key, ...options });\n }\n\n /**\n * Delete all cookies.\n */\n deleteAll(path = \"/\", domain = null) {\n Object.keys(this.all).forEach((cookie) => {\n this.delete(cookie, path, domain);\n });\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.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.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 return;\n }\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 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 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.set(this.policiesKey, JSON.stringify(policies), {\n maxAge: 60 * 60 * 24 * 365,\n });\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.events.on(event, callback);\n }\n\n /**\n * Add a one-time event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n once(event, callback) {\n this.events.once(event, callback);\n }\n}\n","// The module cache\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 includesAny = (arr, values) => values.some((v) => arr.includes(v));\n\nconst getClosestHeading = ($element) => {\n let heading = \"\";\n let $search = $element;\n do {\n while ($search.previousElementSibling) {\n $search = $search.previousElementSibling;\n if (\n [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"].includes($search.tagName) ||\n ($search.classList.length &&\n includesAny(Array.from($search.classList), [\n \"tna-heading-xl\",\n \"tna-heading-l\",\n \"tna-heading-m\",\n \"tna-heading-s\",\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 valueGetters = {\n text: ($el) => $el.innerText,\n html: ($el) => $el.innerHTML,\n value: ($el) => $el.value,\n index: ($el, $scope, event, index) => index,\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};\n\nexport { getXPathTo, getClosestHeading, valueGetters };\n","import { valueGetters } from \"../../lib/analytics-helpers.mjs\";\n\nexport default [\n {\n scope: \".tna-accordion\",\n areaName: \"accordion\",\n events: [\n {\n eventName: \"click\",\n targetElement: \".tna-accordion__summary\",\n on: \"click\",\n data: { state: valueGetters.expanded, value: valueGetters.text },\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 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_component_name: \"Breadcrumb\",\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_component_name: \"Breadcrumb\",\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,\n // eslint-disable-next-line no-unused-vars\n group: ($el, $scope, event) =>\n $scope\n .closest(\".tna-form__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\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-footer\",\n areaName: \"footer\",\n rootEventName: \"global_navigation\",\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_component_name: \"Footer\",\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_component_name: \"Footer\",\n data_link_type: \"Icon\",\n data_section: \"Social media\",\n data_link: ($el) => $el.getAttribute(\"data-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_component_name: \"Footer\",\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_component_name: \"Footer\",\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_component_name: \"Footer\",\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_component_name: \"Footer\",\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_feature\",\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_component_name: \"Gallery\",\n data_link_type: \"Pagination thumbnail\",\n data_position: 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.querySelector(\n \".tna-gallery__item:not([hidden]) .tna-gallery__item-header\",\n ).innerText,\n },\n rootData: {\n data_component_name: \"Gallery\",\n data_link_type: \"Navigation button\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"click\",\n targetElement: \".tna-gallery__navigation-next\",\n on: \"click\",\n data: {\n value: ($el, $scope) =>\n $scope.querySelector(\n \".tna-gallery__item:not([hidden]) .tna-gallery__item-header\",\n ).innerText,\n },\n rootData: {\n data_component_name: \"Gallery\",\n data_link_type: \"Navigation button\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"keypress\",\n on: \"keydown\",\n data: {\n value: ($el, $scope, event) => event.key,\n },\n },\n {\n eventName: \"enter-fullscreen\",\n targetElement: '.tna-gallery__options button[value=\"enter-fullscreen\"]',\n on: \"click\",\n rootData: {\n data_component_name: \"Gallery\",\n data_link_type: \"Full screen button\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"exit-fullscreen\",\n targetElement: '.tna-gallery__options button[value=\"exit-fullscreen\"]',\n on: \"click\",\n rootData: {\n data_component_name: \"Gallery\",\n data_link_type: \"Full screen button\",\n data_link: valueGetters.text,\n },\n },\n {\n eventName: \"index\",\n targetElement: '.tna-gallery__options button[value=\"show-index\"]',\n on: \"click\",\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 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_component_name: \"Header\",\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_component_name: \"Header\",\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_component_name: \"Header\",\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_component_name: \"Header\",\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__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\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__heading\")?.innerText,\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 // 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__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\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__group\")\n ?.querySelector(\".tna-form__heading\")?.innerText,\n },\n },\n ],\n },\n];\n","import Cookies from \"./lib/cookies.mjs\";\nimport {\n getXPathTo,\n getClosestHeading,\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 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 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 ...FooterAnalytics,\n ...GalleryAnalytics,\n ...GlobalHeaderAnalytics,\n ...HeaderAnalytics,\n ...HeroAnalytics,\n ...PictureAnalytics,\n ...RadiosAnalytics,\n ...SearchFieldAnalytics,\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 );\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 */\n addListeners(scope, areaName, events, rootEventName = \"\") {\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) {\n return;\n }\n scopeArray.forEach(($scope) => {\n events.forEach((eventConfig) => {\n if (!eventConfig.on) {\n return;\n }\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 eventConfig,\n scope,\n areaName,\n index + 1,\n ),\n );\n } else {\n this.attachListener(\n $scope,\n $scope,\n rootEventName,\n eventConfig,\n scope,\n areaName,\n 1,\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 eventConfig,\n scope,\n areaName,\n index,\n ) {\n const { on, data, targetElement, rootData = {} } = eventConfig;\n $el.addEventListener(on, (event) =>\n this.recordEvent(\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, $el, $scope, event, index)\n : null,\n state: data?.state\n ? this.computedValue(data.state, $el, $scope, event, index)\n : null,\n group: data?.group\n ? this.computedValue(data.group, $el, $scope, event, index)\n : null,\n xPath: getXPathTo($el),\n targetElement: targetElement,\n timeSincePageLoad: new Date() - this.startTime,\n index,\n scope,\n areaName,\n },\n Object.fromEntries(\n Object.entries(rootData).map(([key, value]) => [\n key,\n this.computedValue(value, $el, $scope, event, index),\n ]),\n ),\n ),\n );\n }\n\n /** @protected */\n computedValue(value, $el, $scope, event, index) {\n return typeof value === \"function\"\n ? value.call(this, $el, $scope, event, index)\n : (value ?? null);\n }\n\n /** @protected */\n recordEvent(eventName, data, rootData = {}) {\n this.events.push({\n event: eventName,\n [`${this.prefix}.event`]: 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}.'][content]`,\n ),\n ).map(($metaEl) => [\n $metaEl.getAttribute(\"name\"),\n $metaEl.getAttribute(\"content\"),\n ]),\n );\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 const tnaMetaTags = this.getTnaMetaTags();\n this.pushToDataLayer({\n ...tnaMetaTags,\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 // window.location.reload();\n }\n }\n}\n\nconst ga4Id = document.documentElement.getAttribute(\"data-ga4\");\nif (ga4Id) {\n new GA4({ id: ga4Id });\n}\n\nconst helpers = { getXPathTo, getClosestHeading, valueGetters };\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","_classCallCheck","_defineProperty","this","key","value","event","callback","Object","hasOwn","events","concat","_toConsumableArray","oneTimeEvents","_this","data","arguments","length","undefined","forEach","eventToTrigger","call","i","splice","Cookies","options","_options$extraPolicie","extraPolicies","_options$domain","domain","_options$path","path","_options$secure","secure","_options$policiesKey","policiesKey","_options$newInstance","newInstance","_options$defaultAge","defaultAge","destroyInstance","document","documentElement","getAttribute","init","savePolicies","_objectSpread","fromEntries","map","k","toLowerCase","usage","settings","marketing","policies","essential","get","deserialised","cookie","split","filter","x","parts","trim","JSON","parse","e","all","exists","decodeURIComponent","_options$maxAge","maxAge","_options$sameSite","sameSite","_options$domain2","_options$path2","_options$secure2","_options$session","session","encodeURIComponent","trigger","set","_this2","keys","policy","setPolicy","accepted","allPolicies","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","includesAny","arr","values","some","v","includes","getClosestHeading","heading","$search","previousElementSibling","classList","Array","from","innerText","parentElement","valueGetters","text","$el","html","innerHTML","index","$scope","checked","expanded","toString","closestHeading","scope","areaName","rootEventName","eventName","targetElement","state","rootData","data_component_name","data_link_type","data_link","group","_$scope$closest","closest","querySelector","_$scope$querySelector","_$scope$querySelector2","hasAttribute","data_section","data_position","image","imageSrc","imageAlt","componentAnalytics","BreadcrumbAnalytics","CheckboxesAnalytics","DetailsAnalytics","FooterAnalytics","GalleryAnalytics","GlobalHeaderAnalytics","HeaderAnalytics","_$scope$querySelector3","PictureAnalytics","RadiosAnalytics","SearchFieldAnalytics","TextInputAnalytics","TextareaAnalytics","EventTracker","Date","_options$prefix","prefix","_options$documentScop","documentScope","initAll","navigator","doNotTrack","cookies","isPolicyAccepted","enableTracking","disableTracking","componentConfig","addListeners","scopeArray","_this3","querySelectorAll","_typeof","eventConfig","attachListener","_this4","_eventConfig$rootData","addEventListener","recordEvent","generateEventName","name","computedValue","xPath","timeSincePageLoad","startTime","entries","_ref","_ref2","_slicedToArray","push","head","$metaEl","GA4","_EventTracker2","_this5","TNAFrontendAnalyticsGA4","_possibleConstructorReturn","_options$id","_options$prefix2","_options$initAll","_options$addTrackingC","addTrackingCode","dataLayer","gTagId","ga4Disable","start","_inherits","_this6","ga4Data","_ref3","_ref4","pushToDataLayer","trackingEnabled","trackingCodeAdded","Error","tnaMetaTags","getTnaMetaTags","getTime","firstScript","getElementsByTagName","script","createElement","async","src","insertBefore","appendChild","_this7","startsWith","ga4Id","helpers"],"sourceRoot":""}
|
@@ -50,14 +50,16 @@ class EventTracker {
|
|
50
50
|
prefix = "tna";
|
51
51
|
|
52
52
|
/** @protected */
|
53
|
-
|
53
|
+
document = document;
|
54
54
|
|
55
55
|
constructor(options = {}) {
|
56
|
-
const { prefix = null,
|
56
|
+
const { prefix = null, documentScope = document } = options;
|
57
57
|
if (prefix) {
|
58
58
|
this.prefix = prefix;
|
59
59
|
}
|
60
|
-
|
60
|
+
if (documentScope) {
|
61
|
+
this.document = documentScope;
|
62
|
+
}
|
61
63
|
}
|
62
64
|
|
63
65
|
start(initAll) {
|
@@ -108,7 +110,7 @@ class EventTracker {
|
|
108
110
|
addListeners(scope, areaName, events, rootEventName = "") {
|
109
111
|
let scopeArray;
|
110
112
|
if (typeof scope === "string") {
|
111
|
-
scopeArray = Array.from(document.querySelectorAll(scope));
|
113
|
+
scopeArray = Array.from(this.document.querySelectorAll(scope));
|
112
114
|
} else if (typeof scope === "object") {
|
113
115
|
scopeArray = [scope];
|
114
116
|
}
|
@@ -238,6 +240,9 @@ class EventTracker {
|
|
238
240
|
* @public
|
239
241
|
*/
|
240
242
|
class GA4 extends EventTracker {
|
243
|
+
/** @protected */
|
244
|
+
addTrackingCode = true;
|
245
|
+
|
241
246
|
/** @protected */
|
242
247
|
trackingCodeAdded = false;
|
243
248
|
|
@@ -257,8 +262,9 @@ class GA4 extends EventTracker {
|
|
257
262
|
initAll = true,
|
258
263
|
addTrackingCode = true,
|
259
264
|
} = options;
|
260
|
-
super({ prefix
|
265
|
+
super({ prefix });
|
261
266
|
window.TNAFrontendAnalyticsGA4 = this;
|
267
|
+
this.addTrackingCode = addTrackingCode;
|
262
268
|
window.dataLayer = window.dataLayer || [];
|
263
269
|
if (id) {
|
264
270
|
this.gTagId = id;
|
@@ -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,wBCiDI,+DD9CF,kBACA,UAEA,oCC2CE,4DDpCJ,sHAEE,UAGF,wBACE,WACA,SACA,0BAGA,cAEA,kBAEA,oBACA,gBAEA,gBAEA,yBAEA,YACA,mBAEA,eCTF,qCC7CA,mBAqBA,YCIA,qBDHA,kBACA,yBACA,mCAPA,YCYsB,IH+BpB,0BACE,kBAGF,gCACE,WAEA,QACA,SAEA,kBACA,gCACA,aAEA,2CACA,kEACA,mBAGF,oEEvBF,0BACA,0BCpCsC,MF4BtC,4DDmCI,oFACE,0DAKF,oDACE,2CAIJ,+BACE,UAIJ,wBACE,aAEA,kBAEA,mBAQA,gEACE,gBACA,eAGF,2CACE,gBACA,eAEA,OAGF,mCACE,wBACA,kBACA,iBAEA,4CACE,cACA,oBAEA,kBACA,oBACA,gBACA,iBCwUN,8BDjUI,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 &__details {\n @include colour.colour-border(\"keyline\", 1px, solid, bottom);\n\n position: relative;\n z-index: 1;\n\n &:first-child {\n @include colour.colour-border(\"keyline\", 1px, solid, top);\n // @include colour.thick-keyline-dark(top);\n // @include colour.thick-keyline-accent(top);\n }\n }\n\n &__details:has(&__summary:focus),\n &__details:has(&__content:focus) {\n z-index: 2;\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 &:focus-visible {\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 // &:focus {\n // z-index: 2;\n\n // @include a11y.no-focus-outline-on-click;\n // }\n\n &:has(.tna-table-wrapper):has(.tna-table) {\n padding-right: 0;\n padding-left: 0;\n }\n\n .tna-table-wrapper {\n padding-right: 0;\n padding-left: 0;\n\n left: 0;\n }\n\n .tna-table {\n width: calc(100% - #{spacing.space(2)});\n margin-right: spacing.space(1);\n margin-left: spacing.space(1);\n\n &__caption {\n padding-top: 0;\n padding-bottom: spacing.space(1);\n\n font-size: inherit;\n line-height: inherit;\n text-align: left;\n caption-side: top;\n }\n }\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 \"../variables/borders\";\n@use \"../variables/colour\";\n@use \"../variables/features\";\n@use \"../tools/media\";\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 }\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 }\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 }\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 }\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($important, !important, null);\n}\n\n@mixin colour-background($colour, $important: false) {\n background-color: colour-var($colour) if($important, !important, null);\n}\n\n@mixin colour-background-brand($brandColour, $important: false) {\n background-color: #{brand-colour($brandColour)} if($important, !important, 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($important, !important, null);\n } @else {\n border-#{$direction}-color: colour-var($colour)\n if($important, !important, null);\n }\n } @else {\n @if $width != \"\" {\n border: $width\n colour-var($colour)\n $style\n if($important, !important, null);\n } @else {\n border-color: var(\n --#{$colour},\n #{map.get(colour.$colour-palette-default, $colour)}\n )\n if($important, !important, null);\n }\n }\n}\n\n@mixin colour-outline($colour, $width: \"\", $style: solid, $important: false) {\n @if $width != \"\" {\n outline: $width colour-var($colour) $style if($important, !important, null);\n } @else {\n outline-color: colour-var($colour) if($important, !important, null);\n }\n}\n\n@mixin colour-fill($colour, $important: false) {\n fill: colour-var($colour) if($important, !important, null);\n}\n\n@mixin thick-keyline($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"keyline\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"keyline\", borders.$thick-border-width, solid);\n }\n}\n\n@mixin thick-keyline-dark($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"keyline-dark\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"keyline-dark\", borders.$thick-border-width, solid);\n }\n}\n\n@mixin thick-keyline-accent($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"accent-border\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"accent-border\", borders.$thick-border-width, solid);\n }\n}\n\n@mixin thick-keyline-error($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"form-error-border\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\n \"form-error-border\",\n borders.$thick-border-width,\n solid\n );\n }\n}\n\n@mixin thick-keyline-brand($direction: \"\", $brandColour) {\n @if $direction != \"\" {\n border-#{$direction}: borders.$thick-border-width\n #{brand-colour($brandColour)}\n solid;\n } @else {\n border: borders.$thick-border-width #{brand-colour($brandColour)} solid;\n }\n}\n\n@mixin thick-keyline-transparent($direction: \"\") {\n @if $direction != \"\" {\n border-#{$direction}: borders.$thick-border-width transparent solid;\n } @else {\n border: borders.$thick-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\n @media (prefers-contrast: more) {\n @include colour-css-vars-high-contrast(\n \"form-error-border\",\n \"focus-outline\"\n );\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 --accent-list-marker: var(--accent-border);\n // --accent-list-marker: var(--font-base);\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 --accent-list-marker: var(--accent-border);\n // --accent-list-marker: var(--font-base);\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%tint {\n --background: var(--background-tint);\n\n @include colour-background(\"background\");\n\n // @include colour-font(\"font-base\");\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-list-marker: var(--accent-font-base);\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-list-marker: var(--font-base);\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-list-marker: var(--accent-font-base);\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-list-marker: var(--accent-font-base);\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-list-marker: #{colour.brand-colour(\"brown\")} !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.45)} !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.45)} !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 --accent-list-marker: #{colour.brand-colour(\"grey\")} !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 --accent-list-marker: #{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 --accent-list-marker: #{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 --accent-list-marker: #{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 --accent-list-marker: #{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@mixin image-loader-background {\n @if not features.$disable-image-loader-animations {\n background: linear-gradient(\n -45deg,\n rgba(0 0 0 / 25%),\n rgba(255 255 255 / 25%),\n rgba(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}\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 interacted-text-decoration {\n text-decoration: underline;\n text-decoration-thickness: typography.$interactive-text-decoration-thickness;\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","/*\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: 18 !default;\n$body-font-size-px-mobile: 17 !default;\n$body-line-height: 1.75 !default;\n\n$interactive-text-decoration-thickness: 3.5px !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: 30 !default;\n$heading-l-font-size-small: 28 !default;\n$heading-l-font-size-tiny: 25 !default;\n$heading-l-line-height: 1.3 !default;\n\n$heading-m-font-size-default: 22 !default;\n$heading-m-font-size-medium: 21 !default;\n$heading-m-font-size-small: 20 !default;\n$heading-m-font-size-tiny: 19 !default;\n$heading-m-line-height: 1.6 !default;\n\n$heading-s-font-size-default: 18 !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.6 !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":"CAUA,oCACE,gBAEA,4DACE,aCDF,wBACE,iBAGF,qBACE,iBAIF,wBCkDI,+DD/CF,kBACA,UAEA,oCC4CE,4DDrCJ,sHAEE,UAGF,wBACE,WACA,SACA,0BAGA,cAEA,kBAEA,oBACA,gBAEA,gBAEA,yBAEA,YACA,mBAEA,eCTF,qCC7CA,mBAqBA,YCIA,qBDHA,kBACA,yBACA,mCAPA,YCYsB,IH+BpB,0BACE,kBAGF,gCACE,WAEA,QACA,SAEA,kBACA,gCACA,aAEA,2CACA,kEACA,mBAGF,oEEvBF,0BACA,0BCpCsC,MF4BtC,4DDmCI,oFACE,0DAKF,oDACE,2CAIJ,+BACE,UAIJ,wBACE,aAEA,kBAEA,mBAQA,gEACE,gBACA,eAGF,2CACE,gBACA,eAEA,OAGF,mCACE,wBACA,kBACA,iBAEA,4CACE,cACA,oBAEA,kBACA,oBACA,gBACA,iBCyUN,8BDlUI,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 &__details {\n @include colour.colour-border(\"keyline\", 1px, solid, bottom);\n\n position: relative;\n z-index: 1;\n\n &:first-child {\n @include colour.colour-border(\"keyline\", 1px, solid, top);\n // @include colour.thick-keyline-dark(top);\n // @include colour.thick-keyline-accent(top);\n }\n }\n\n &__details:has(&__summary:focus),\n &__details:has(&__content:focus) {\n z-index: 2;\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 &:focus-visible {\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 // &:focus {\n // z-index: 2;\n\n // @include a11y.no-focus-outline-on-click;\n // }\n\n &:has(.tna-table-wrapper):has(.tna-table) {\n padding-right: 0;\n padding-left: 0;\n }\n\n .tna-table-wrapper {\n padding-right: 0;\n padding-left: 0;\n\n left: 0;\n }\n\n .tna-table {\n width: calc(100% - #{spacing.space(2)});\n margin-right: spacing.space(1);\n margin-left: spacing.space(1);\n\n &__caption {\n padding-top: 0;\n padding-bottom: spacing.space(1);\n\n font-size: inherit;\n line-height: inherit;\n text-align: left;\n caption-side: top;\n }\n }\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 \"../variables/borders\";\n@use \"../variables/colour\";\n@use \"../variables/features\";\n@use \"../tools/media\";\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 }\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 }\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 }\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 }\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($important, !important, null);\n}\n\n@mixin colour-background($colour, $important: false) {\n background-color: colour-var($colour) if($important, !important, null);\n}\n\n@mixin colour-background-brand($brandColour, $important: false) {\n background-color: #{brand-colour($brandColour)}\n if($important, !important, 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($important, !important, null);\n } @else {\n border-#{$direction}-color: colour-var($colour)\n if($important, !important, null);\n }\n } @else {\n @if $width != \"\" {\n border: $width\n colour-var($colour)\n $style\n if($important, !important, null);\n } @else {\n border-color: var(\n --#{$colour},\n #{map.get(colour.$colour-palette-default, $colour)}\n )\n if($important, !important, null);\n }\n }\n}\n\n@mixin colour-outline($colour, $width: \"\", $style: solid, $important: false) {\n @if $width != \"\" {\n outline: $width colour-var($colour) $style if($important, !important, null);\n } @else {\n outline-color: colour-var($colour) if($important, !important, null);\n }\n}\n\n@mixin colour-fill($colour, $important: false) {\n fill: colour-var($colour) if($important, !important, null);\n}\n\n@mixin thick-keyline($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"keyline\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"keyline\", borders.$thick-border-width, solid);\n }\n}\n\n@mixin thick-keyline-dark($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"keyline-dark\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"keyline-dark\", borders.$thick-border-width, solid);\n }\n}\n\n@mixin thick-keyline-accent($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"accent-border\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"accent-border\", borders.$thick-border-width, solid);\n }\n}\n\n@mixin thick-keyline-error($direction: \"\") {\n @if $direction != \"\" {\n @include colour-border(\n \"form-error-border\",\n borders.$thick-border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\n \"form-error-border\",\n borders.$thick-border-width,\n solid\n );\n }\n}\n\n@mixin thick-keyline-brand($direction: \"\", $brandColour) {\n @if $direction != \"\" {\n border-#{$direction}: borders.$thick-border-width\n #{brand-colour($brandColour)}\n solid;\n } @else {\n border: borders.$thick-border-width #{brand-colour($brandColour)} solid;\n }\n}\n\n@mixin thick-keyline-transparent($direction: \"\") {\n @if $direction != \"\" {\n border-#{$direction}: borders.$thick-border-width transparent solid;\n } @else {\n border: borders.$thick-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\n @media (prefers-contrast: more) {\n @include colour-css-vars-high-contrast(\n \"form-error-border\",\n \"focus-outline\"\n );\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 --accent-list-marker: var(--accent-border);\n // --accent-list-marker: var(--font-base);\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 --accent-list-marker: var(--accent-border);\n // --accent-list-marker: var(--font-base);\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%tint {\n --background: var(--background-tint);\n\n @include colour-background(\"background\");\n\n // @include colour-font(\"font-base\");\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-list-marker: var(--accent-font-base);\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-list-marker: var(--font-base);\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-list-marker: var(--accent-font-base);\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-list-marker: var(--accent-font-base);\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-list-marker: #{colour.brand-colour(\"brown\")} !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.45)} !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.45)} !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 --accent-list-marker: #{colour.brand-colour(\"grey\")} !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 --accent-list-marker: #{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 --accent-list-marker: #{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 --accent-list-marker: #{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 --accent-list-marker: #{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@mixin image-loader-background {\n @if not features.$disable-image-loader-animations {\n background: linear-gradient(\n -45deg,\n rgba(0 0 0 / 25%),\n rgba(255 255 255 / 25%),\n rgba(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}\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 interacted-text-decoration {\n text-decoration: underline;\n text-decoration-thickness: typography.$interactive-text-decoration-thickness;\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","/*\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: 18 !default;\n$body-font-size-px-mobile: 17 !default;\n$body-line-height: 1.75 !default;\n\n$interactive-text-decoration-thickness: 3.5px !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: 30 !default;\n$heading-l-font-size-small: 28 !default;\n$heading-l-font-size-tiny: 25 !default;\n$heading-l-line-height: 1.3 !default;\n\n$heading-m-font-size-default: 22 !default;\n$heading-m-font-size-medium: 21 !default;\n$heading-m-font-size-small: 20 !default;\n$heading-m-font-size-tiny: 19 !default;\n$heading-m-line-height: 1.6 !default;\n\n$heading-s-font-size-default: 18 !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.6 !default;\n"]}
|
@@ -4,13 +4,30 @@ export default [
|
|
4
4
|
{
|
5
5
|
scope: ".tna-breadcrumbs",
|
6
6
|
areaName: "breadcrumbs",
|
7
|
+
rootEventName: "select_navigation",
|
7
8
|
events: [
|
9
|
+
{
|
10
|
+
eventName: "click",
|
11
|
+
targetElement: "a.tna-breadcrumbs__link",
|
12
|
+
on: "click",
|
13
|
+
data: { state: "expand", value: valueGetters.html },
|
14
|
+
rootData: {
|
15
|
+
data_component_name: "Breadcrumb",
|
16
|
+
data_link_type: "Breadcrumb link",
|
17
|
+
data_link: valueGetters.text,
|
18
|
+
},
|
19
|
+
},
|
8
20
|
{
|
9
21
|
eventName: "click",
|
10
22
|
targetElement:
|
11
23
|
".tna-breadcrumbs__item--expandable button.tna-breadcrumbs__link",
|
12
24
|
on: "click",
|
13
25
|
data: { state: "expand", value: valueGetters.html },
|
26
|
+
rootData: {
|
27
|
+
data_component_name: "Breadcrumb",
|
28
|
+
data_link_type: "Breadcrumb expand",
|
29
|
+
data_link: valueGetters.text,
|
30
|
+
},
|
14
31
|
},
|
15
32
|
],
|
16
33
|
},
|