@nationalarchives/frontend 0.21.0 → 0.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/nationalarchives/all+analytics.js +1 -1
  2. package/nationalarchives/all+analytics.js.map +1 -1
  3. package/nationalarchives/all+analytics.mjs +2 -0
  4. package/nationalarchives/all.css +1 -1
  5. package/nationalarchives/all.css.map +1 -1
  6. package/nationalarchives/all.js +1 -1
  7. package/nationalarchives/all.js.map +1 -1
  8. package/nationalarchives/all.mjs +7 -0
  9. package/nationalarchives/analytics.js +1 -1
  10. package/nationalarchives/analytics.js.map +1 -1
  11. package/nationalarchives/analytics.mjs +16 -4
  12. package/nationalarchives/assets/fonts/fa-brands-400.woff2 +0 -0
  13. package/nationalarchives/assets/fonts/fa-solid-900.woff2 +0 -0
  14. package/nationalarchives/components/_forms.scss +1 -0
  15. package/nationalarchives/components/accordion/accordion.js +1 -1
  16. package/nationalarchives/components/accordion/accordion.js.map +1 -1
  17. package/nationalarchives/components/accordion/accordion.mjs +1 -1
  18. package/nationalarchives/components/accordion/fixtures.json +26 -7
  19. package/nationalarchives/components/accordion/macro-options.json +9 -2
  20. package/nationalarchives/components/accordion/template.njk +2 -2
  21. package/nationalarchives/components/breadcrumbs/breadcrumbs.js +1 -1
  22. package/nationalarchives/components/breadcrumbs/breadcrumbs.js.map +1 -1
  23. package/nationalarchives/components/breadcrumbs/breadcrumbs.mjs +1 -0
  24. package/nationalarchives/components/card/card.css +1 -1
  25. package/nationalarchives/components/card/card.css.map +1 -1
  26. package/nationalarchives/components/card/card.scss +11 -4
  27. package/nationalarchives/components/checkboxes/macro-options.json +1 -1
  28. package/nationalarchives/components/cookie-banner/cookie-banner.js +1 -1
  29. package/nationalarchives/components/cookie-banner/cookie-banner.js.map +1 -1
  30. package/nationalarchives/components/cookie-banner/cookie-banner.mjs +1 -1
  31. package/nationalarchives/components/date-input/date-input.css +1 -1
  32. package/nationalarchives/components/date-input/date-input.css.map +1 -1
  33. package/nationalarchives/components/date-input/date-input.js +1 -1
  34. package/nationalarchives/components/date-input/date-input.js.map +1 -1
  35. package/nationalarchives/components/date-input/date-input.scss +4 -0
  36. package/nationalarchives/components/date-input/macro-options.json +1 -1
  37. package/nationalarchives/components/date-search/macro-options.json +1 -1
  38. package/nationalarchives/components/error-summary/analytics.js +16 -0
  39. package/nationalarchives/components/error-summary/error-summary.js +1 -1
  40. package/nationalarchives/components/error-summary/error-summary.js.map +1 -1
  41. package/nationalarchives/components/error-summary/fixtures.json +4 -1
  42. package/nationalarchives/components/error-summary/macro-options.json +1 -1
  43. package/nationalarchives/components/error-summary/template.njk +4 -0
  44. package/nationalarchives/components/file-input/_index.scss +1 -0
  45. package/nationalarchives/components/file-input/analytics.js +59 -0
  46. package/nationalarchives/components/file-input/file-input.css +1 -0
  47. package/nationalarchives/components/file-input/file-input.css.map +1 -0
  48. package/nationalarchives/components/file-input/file-input.js +2 -0
  49. package/nationalarchives/components/file-input/file-input.js.map +1 -0
  50. package/nationalarchives/components/file-input/file-input.mjs +99 -0
  51. package/nationalarchives/components/file-input/file-input.njk +8 -0
  52. package/nationalarchives/components/file-input/file-input.scss +127 -0
  53. package/nationalarchives/components/file-input/fixtures.json +131 -0
  54. package/nationalarchives/components/file-input/macro-options.json +90 -0
  55. package/nationalarchives/components/file-input/macro.njk +3 -0
  56. package/nationalarchives/components/file-input/template.njk +27 -0
  57. package/nationalarchives/components/footer/fixtures.json +3 -3
  58. package/nationalarchives/components/footer/footer.js +1 -1
  59. package/nationalarchives/components/footer/footer.js.map +1 -1
  60. package/nationalarchives/components/footer/template.njk +1 -1
  61. package/nationalarchives/components/gallery/gallery.css +1 -1
  62. package/nationalarchives/components/gallery/gallery.css.map +1 -1
  63. package/nationalarchives/components/gallery/gallery.js +1 -1
  64. package/nationalarchives/components/gallery/gallery.js.map +1 -1
  65. package/nationalarchives/components/gallery/gallery.mjs +1 -0
  66. package/nationalarchives/components/gallery/gallery.scss +2 -2
  67. package/nationalarchives/components/global-header/global-header.js +1 -1
  68. package/nationalarchives/components/global-header/global-header.js.map +1 -1
  69. package/nationalarchives/components/header/header.js +1 -1
  70. package/nationalarchives/components/header/header.js.map +1 -1
  71. package/nationalarchives/components/hero/fixtures.json +7 -7
  72. package/nationalarchives/components/hero/hero.css +1 -1
  73. package/nationalarchives/components/hero/hero.css.map +1 -1
  74. package/nationalarchives/components/hero/hero.scss +20 -24
  75. package/nationalarchives/components/hero/template.njk +3 -3
  76. package/nationalarchives/components/picture/picture.css.map +1 -1
  77. package/nationalarchives/components/picture/picture.js +1 -1
  78. package/nationalarchives/components/picture/picture.js.map +1 -1
  79. package/nationalarchives/components/picture/picture.scss +2 -3
  80. package/nationalarchives/components/radios/macro-options.json +1 -1
  81. package/nationalarchives/components/search-field/macro-options.json +1 -1
  82. package/nationalarchives/components/secondary-navigation/secondary-navigation.css +1 -1
  83. package/nationalarchives/components/secondary-navigation/secondary-navigation.css.map +1 -1
  84. package/nationalarchives/components/secondary-navigation/secondary-navigation.scss +5 -0
  85. package/nationalarchives/components/select/macro-options.json +1 -1
  86. package/nationalarchives/components/skip-link/skip-link.js +1 -1
  87. package/nationalarchives/components/skip-link/skip-link.js.map +1 -1
  88. package/nationalarchives/components/tabs/tabs.js +1 -1
  89. package/nationalarchives/components/tabs/tabs.js.map +1 -1
  90. package/nationalarchives/components/text-input/analytics.js +1 -2
  91. package/nationalarchives/components/text-input/macro-options.json +1 -1
  92. package/nationalarchives/components/text-input/text-input.js +1 -1
  93. package/nationalarchives/components/text-input/text-input.js.map +1 -1
  94. package/nationalarchives/components/textarea/macro-options.json +1 -1
  95. package/nationalarchives/font-awesome.css +9 -9
  96. package/nationalarchives/font-awesome.css.map +1 -1
  97. package/nationalarchives/font-awesome.scss +6 -5
  98. package/nationalarchives/lib/analytics-helpers.mjs +9 -13
  99. package/nationalarchives/lib/cookies.mjs +69 -14
  100. package/nationalarchives/lib/font-awesome/_animated.scss +93 -98
  101. package/nationalarchives/lib/font-awesome/_bordered.scss +27 -0
  102. package/nationalarchives/lib/font-awesome/_core.scss +20 -40
  103. package/nationalarchives/lib/font-awesome/_fa.scss +3 -0
  104. package/nationalarchives/lib/font-awesome/_functions.scss +3 -52
  105. package/nationalarchives/lib/font-awesome/_icons.scss +6 -4
  106. package/nationalarchives/lib/font-awesome/_list.scss +9 -6
  107. package/nationalarchives/lib/font-awesome/_mixins.scss +23 -60
  108. package/nationalarchives/lib/font-awesome/_pulled.scss +15 -0
  109. package/nationalarchives/lib/font-awesome/_rotated-flipped.scss +10 -9
  110. package/nationalarchives/lib/font-awesome/_shims.scss +1255 -1250
  111. package/nationalarchives/lib/font-awesome/_sizing.scss +6 -4
  112. package/nationalarchives/lib/font-awesome/_stacked.scss +11 -10
  113. package/nationalarchives/lib/font-awesome/_variables.scss +5110 -5025
  114. package/nationalarchives/lib/font-awesome/_widths.scss +12 -0
  115. package/nationalarchives/lib/font-awesome/brands.css +3 -3
  116. package/nationalarchives/lib/font-awesome/brands.css.map +1 -1
  117. package/nationalarchives/lib/font-awesome/brands.scss +29 -16
  118. package/nationalarchives/lib/font-awesome/fontawesome.css +3 -3
  119. package/nationalarchives/lib/font-awesome/fontawesome.css.map +1 -1
  120. package/nationalarchives/lib/font-awesome/fontawesome.scss +12 -15
  121. package/nationalarchives/lib/font-awesome/solid.css +3 -3
  122. package/nationalarchives/lib/font-awesome/solid.css.map +1 -1
  123. package/nationalarchives/lib/font-awesome/solid.scss +39 -14
  124. package/nationalarchives/lib/font-awesome/v4-shims.css +3 -3
  125. package/nationalarchives/lib/font-awesome/v4-shims.css.map +1 -1
  126. package/nationalarchives/lib/font-awesome/v4-shims.scss +5 -5
  127. package/nationalarchives/prototype-kit.css +1 -1
  128. package/nationalarchives/prototype-kit.css.map +1 -1
  129. package/nationalarchives/templates/fixtures.json +6 -6
  130. package/nationalarchives/tools/_index.scss +1 -0
  131. package/nationalarchives/tools/_shadows.scss +5 -0
  132. package/nationalarchives/utilities/lists/_index.scss +0 -1
  133. package/package.json +2 -2
  134. package/nationalarchives/assets/fonts/fa-brands-400.ttf +0 -0
  135. package/nationalarchives/assets/fonts/fa-solid-900.ttf +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"components/date-input/date-input.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/components/date-input/date-input.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"TNAFrontend\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = factory();\n})(self, () => {\nreturn ","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\nconst tnaCookiePolicies = [\"usage\", \"settings\", \"marketing\", \"essential\"];\n\n/**\n * Class to handle cookies.\n * @class Cookies\n * @constructor\n * @public\n */\nexport default class Cookies {\n /** @protected */\n defaultDomain = \"\";\n /** @protected */\n defaultPath = \"\";\n /** @protected */\n secure = true;\n /** @protected */\n policiesKey = \"\";\n /** @protected */\n events = null;\n /** @protected */\n defaultAge = null;\n /** @protected */\n completePoliciesOnInit = false;\n\n /**\n * Create a cookie handler.\n * @param {String} [options.defaultDomain] - The domain to register the cookie with.\n * @param {String} [options.path] - The domain to register the cookie with.\n * @param {Boolean} [options.secure] - Only set cookie in HTTPS environments.\n * @param {String} [options.policiesKey] - The name of the cookie.\n * @param {String} [options.newInstance=false] - Create a fresh instance of the cookie class.\n * @param {Number} [options.defaultAge] - The default age of non-session cookies.\n * @param {Boolean} [options.noInit=false] - Don't initialise a blank cookie policy.\n */\n constructor(options = {}) {\n const {\n defaultDomain,\n defaultPath,\n secure,\n policiesKey,\n newInstance = false,\n defaultAge,\n noInit = false,\n } = options;\n if (!newInstance && window.TNAFrontendCookies) {\n return window.TNAFrontendCookies;\n }\n if (defaultDomain === undefined) {\n this.defaultDomain =\n document.documentElement.dataset.tnaCookiesDomain || \"\";\n } else {\n this.defaultDomain = defaultDomain;\n }\n if (defaultPath === undefined) {\n this.defaultPath = document.documentElement.dataset.tnaCookiesPath || \"/\";\n } else {\n this.defaultPath = defaultPath;\n }\n if (secure === undefined) {\n this.secure =\n document.documentElement.dataset.tnaCookiesInsecure !== \"true\";\n } else {\n this.secure = secure;\n }\n if (policiesKey === undefined) {\n this.policiesKey =\n document.documentElement.dataset.tnaCookiesPoliciesKey ||\n \"cookies_policy\";\n } else {\n this.policiesKey = policiesKey;\n }\n if (defaultAge === undefined) {\n this.defaultAge =\n parseInt(document.documentElement.dataset.tnaCookiesDefaultAge) ||\n 31536000; // 365 days;\n } else {\n this.defaultAge = defaultAge;\n }\n this.events = new CookieEventHandler();\n this.completePoliciesOnInit =\n Object.keys(this.policies).length === tnaCookiePolicies.length &&\n tnaCookiePolicies.every(\n (policy) =>\n Object.keys(this.policies).includes(policy) &&\n typeof this.policies[policy] === \"boolean\",\n );\n if (!this.completePoliciesOnInit && !noInit) {\n this.init();\n }\n window.TNAFrontendCookies = this;\n }\n\n /** @protected */\n init() {\n const existingPolicies = this.policies;\n const filteredExistingPolicies = Object.fromEntries(\n Object.keys(existingPolicies)\n .filter((policy) => tnaCookiePolicies.includes(policy))\n .map((policy) => [policy, existingPolicies[policy]]),\n );\n this.savePolicies({\n usage: false,\n settings: false,\n marketing: false,\n ...filteredExistingPolicies,\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.defaultDomain] - The domain to register the cookie with.\n * @param {String} [options.path=this.defaultPath] - The path to register the cookie with.\n * @param {String} [options.secure=this.secure] - Only set cookie in HTTPS environments.\n * @param {String} [options.session=false] - Set a session cookie.\n */\n set(key, value, options = {}) {\n const {\n maxAge = this.defaultAge,\n sameSite = \"Lax\",\n domain = this.defaultDomain,\n path = this.defaultPath,\n secure = this.secure,\n session = false,\n } = options;\n if (!key) {\n return;\n }\n const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)};${\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 }\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};","import Cookies from \"../../lib/cookies.mjs\";\n\nexport { Cookies };\n\nexport class DateInputProgressive {\n constructor($module) {\n this.$module = $module;\n this.$yearWrapper =\n $module && $module.querySelector(\".tna-date-input__item--year\");\n this.$yearInput =\n this.$yearWrapper && this.$yearWrapper.querySelector(\"input\");\n this.$monthWrapper =\n $module && $module.querySelector(\".tna-date-input__item--month\");\n this.$monthInput =\n this.$monthWrapper && this.$monthWrapper.querySelector(\"input\");\n this.$dayWrapper =\n $module && $module.querySelector(\".tna-date-input__item--day\");\n this.$dayInput =\n this.$dayWrapper && this.$dayWrapper.querySelector(\"input\");\n\n if (!this.$module) {\n return;\n }\n\n this.update();\n window.addEventListener(\"pageshow\", () => this.update());\n\n if (this.$yearInput) {\n this.$yearInput.addEventListener(\"keyup\", () => this.update());\n this.$yearInput.addEventListener(\"change\", () => this.update());\n }\n if (this.$monthInput) {\n this.$monthInput.addEventListener(\"keyup\", () => this.update());\n this.$monthInput.addEventListener(\"change\", () => this.update());\n }\n if (this.$dayInput) {\n this.$dayInput.addEventListener(\"keyup\", () => this.update());\n this.$dayInput.addEventListener(\"change\", () => this.update());\n }\n }\n\n update() {\n if (this.isValidYear()) {\n this.showMonth();\n if (this.isValidMonth()) {\n this.showDay();\n } else {\n this.hideDay();\n }\n } else {\n this.hideMonth();\n this.hideDay();\n }\n }\n\n isValidYear() {\n if (!this.$yearInput) {\n return true;\n }\n const yearValue = parseInt(this.$yearInput.value.trim());\n return !isNaN(this.$yearInput.value) && !isNaN(yearValue) && yearValue > 0;\n }\n\n isValidMonth() {\n if (!this.$monthInput) {\n return true;\n }\n const monthRawValue = this.$monthInput.value.trim();\n const monthIntValue = parseInt(monthRawValue);\n const validMonthStrings = [\n \"january\",\n \"february\",\n \"march\",\n \"april\",\n \"may\",\n \"june\",\n \"july\",\n \"august\",\n \"september\",\n \"october\",\n \"november\",\n \"december\",\n \"jan\",\n \"feb\",\n \"mar\",\n \"apr\",\n \"jun\",\n \"jul\",\n \"aug\",\n \"sep\",\n \"oct\",\n \"nov\",\n \"dec\",\n ];\n return (\n (!isNaN(this.$monthInput.value) &&\n !isNaN(monthIntValue) &&\n monthIntValue > 0 &&\n monthIntValue <= 12) ||\n validMonthStrings.includes(monthRawValue.toLowerCase())\n );\n }\n\n showMonth() {\n if (this.$monthWrapper) {\n this.$monthWrapper.removeAttribute(\"hidden\");\n }\n }\n\n hideMonth() {\n if (this.$monthWrapper) {\n this.$monthWrapper.setAttribute(\"hidden\", \"\");\n }\n }\n\n showDay() {\n if (this.$dayWrapper) {\n this.$dayWrapper.removeAttribute(\"hidden\");\n }\n }\n\n hideDay() {\n if (this.$dayWrapper) {\n this.$dayWrapper.setAttribute(\"hidden\", \"\");\n }\n }\n}\n"],"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","tnaCookiePolicies","Cookies","_this2","options","defaultDomain","defaultPath","secure","policiesKey","_options$newInstance","newInstance","defaultAge","_options$noInit","noInit","document","documentElement","dataset","tnaCookiesDomain","tnaCookiesPath","tnaCookiesInsecure","tnaCookiesPoliciesKey","parseInt","tnaCookiesDefaultAge","completePoliciesOnInit","keys","policies","every","policy","includes","init","existingPolicies","filteredExistingPolicies","fromEntries","filter","map","savePolicies","_objectSpread","usage","settings","marketing","essential","get","deserialised","cookie","split","x","parts","trim","JSON","parse","e","all","exists","decodeURIComponent","_options$maxAge","maxAge","_options$sameSite","sameSite","_options$domain","domain","_options$path","path","_options$secure","_options$session","session","encodeURIComponent","trigger","set","_this3","setPolicy","accepted","allPolicies","k","toLowerCase","stringify","on","once","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","o","defineProperty","enumerable","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","DateInputProgressive","$module","$yearWrapper","querySelector","$yearInput","$monthWrapper","$monthInput","$dayWrapper","$dayInput","update","addEventListener","isValidYear","showMonth","isValidMonth","showDay","hideDay","hideMonth","yearValue","isNaN","monthRawValue","monthIntValue","removeAttribute","setAttribute"],"sourceRoot":""}
1
+ {"version":3,"file":"components/date-input/date-input.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/components/date-input/date-input.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"TNAFrontend\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = factory();\n})(self, () => {\nreturn ","window.TNAFrontendCookies = window.TNAFrontendCookies || null;\nwindow.TNAFrontendCookieEvents = window.TNAFrontendCookieEvents || null;\n\nexport class CookieEventHandler {\n events = {};\n oneTimeEvents = {};\n debug = false;\n\n constructor(debug = false) {\n this.debug = debug;\n if (window.TNAFrontendCookieEvents) {\n this.log(\"Using existing TNAFrontendCookieEvents instance\");\n return window.TNAFrontendCookieEvents;\n }\n window.TNAFrontendCookieEvents = this;\n }\n\n log(...args) {\n if (this.debug) {\n console.log(\"[TNA Frontend Cookie Events]\", ...args);\n }\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n if (!Object.hasOwn(this.events, event)) {\n this.events[event] = [];\n }\n this.events[event] = [...this.events[event], callback];\n }\n\n once(event, callback) {\n if (!Object.hasOwn(this.oneTimeEvents, event)) {\n this.oneTimeEvents[event] = [];\n }\n this.oneTimeEvents[event] = [...this.oneTimeEvents[event], callback];\n }\n\n /** @protected */\n trigger(event, data = {}) {\n if (Object.hasOwn(this.events, event)) {\n this.log(`Triggering event: ${event}`, data);\n this.events[event].forEach((eventToTrigger) =>\n eventToTrigger.call(this, data),\n );\n }\n if (Object.hasOwn(this.oneTimeEvents, event)) {\n this.log(`Triggering one-time event: ${event}`, data);\n for (let i = this.oneTimeEvents[event].length - 1; i >= 0; i--) {\n const eventToTrigger = this.oneTimeEvents[event][i];\n eventToTrigger.call(this, data);\n this.oneTimeEvents[event].splice(i, 1);\n }\n }\n }\n}\n\nconst tnaCookiePolicies = [\"usage\", \"settings\", \"marketing\", \"essential\"];\n\n/**\n * Class to handle cookies.\n * @class Cookies\n * @constructor\n * @public\n */\nexport default class Cookies {\n /** @protected */\n defaultDomain = \"\";\n /** @protected */\n defaultPath = \"\";\n /** @protected */\n secure = true;\n /** @protected */\n policiesKey = \"\";\n /** @protected */\n events = null;\n /** @protected */\n defaultAge = null;\n /** @protected */\n policiesCorrectOnInit = false;\n /** @protected */\n debug = document.documentElement.dataset.tnaFrontendDebug === \"true\";\n\n /**\n * Create a cookie handler.\n * @param {String} [options.defaultDomain] - The domain to register the cookie with.\n * @param {String} [options.path] - The domain to register the cookie with.\n * @param {Boolean} [options.secure] - Only set cookie in HTTPS environments.\n * @param {String} [options.policiesKey] - The name of the cookie.\n * @param {Number} [options.defaultAge] - The default age of non-session cookies.\n * @param {String} [options.newInstance=false] - Create a fresh instance of the cookie class.\n * @param {Boolean} [options.noInit=false] - Don't initialise a blank cookie policy.\n */\n constructor(options = {}) {\n const {\n defaultDomain,\n defaultPath,\n secure,\n policiesKey,\n defaultAge,\n newInstance = false,\n noInit = false,\n } = options;\n if (!newInstance && window.TNAFrontendCookies) {\n return window.TNAFrontendCookies;\n }\n if (defaultDomain === undefined) {\n this.defaultDomain =\n document.documentElement.dataset.tnaCookiesDomain ||\n window.location.hostname;\n } else {\n this.defaultDomain = defaultDomain;\n }\n if (defaultPath === undefined) {\n this.defaultPath = document.documentElement.dataset.tnaCookiesPath || \"/\";\n } else {\n this.defaultPath = defaultPath;\n }\n if (secure === undefined) {\n this.secure =\n document.documentElement.dataset.tnaCookiesInsecure !== \"true\";\n } else {\n this.secure = secure;\n }\n if (policiesKey === undefined) {\n this.policiesKey =\n document.documentElement.dataset.tnaCookiesPoliciesKey ||\n \"cookies_policy\";\n } else {\n this.policiesKey = policiesKey;\n }\n if (defaultAge === undefined) {\n this.defaultAge =\n parseInt(document.documentElement.dataset.tnaCookiesDefaultAge) ||\n 31536000; // 365 days;\n } else {\n this.defaultAge = defaultAge;\n }\n this.events = new CookieEventHandler(this.debug);\n this.policiesCorrectOnInit =\n Object.keys(this.policies).length === tnaCookiePolicies.length &&\n tnaCookiePolicies.every(\n (policy) =>\n Object.keys(this.policies).includes(policy) &&\n typeof this.policies[policy] === \"boolean\",\n );\n if (!this.policiesCorrectOnInit && !noInit) {\n this.init();\n }\n this.log({\n defaultDomain: this.defaultDomain,\n defaultPath: this.defaultPath,\n secure: this.secure,\n policiesKey: this.policiesKey,\n defaultAge: this.defaultAge,\n policiesCorrectOnInit: this.policiesCorrectOnInit,\n });\n if (!newInstance && !window.TNAFrontendCookies) {\n window.TNAFrontendCookies = this;\n }\n }\n\n /** @protected */\n init() {\n const existingPolicies = this.policies;\n this.log(\"Existing policies on init:\", existingPolicies);\n const filteredExistingPolicies = Object.fromEntries(\n Object.keys(existingPolicies)\n .filter((policy) => tnaCookiePolicies.includes(policy))\n .map((policy) => [policy, existingPolicies[policy]]),\n );\n if (Object.keys(filteredExistingPolicies).length > 0) {\n this.log(\"Filtered existing policies:\", filteredExistingPolicies);\n }\n this.savePolicies({\n usage: false,\n settings: false,\n marketing: false,\n ...filteredExistingPolicies,\n essential: true,\n });\n }\n\n log(...args) {\n if (this.debug) {\n console.log(\"[TNA Frontend Cookies]\", ...args, this.all);\n }\n }\n\n destroyInstance() {\n this.log(\"Destroying TNAFrontendCookies instance\");\n window.TNAFrontendCookies = null;\n }\n\n /** @protected */\n get all() {\n const deserialised = {};\n document.cookie\n .split(\"; \")\n .filter((x) => x)\n .forEach((cookie) => {\n const parts = cookie.trim().split(\"=\");\n if (parts[0]) {\n deserialised[parts[0]] = parts[1];\n }\n });\n return deserialised;\n }\n\n /** @protected */\n get policies() {\n try {\n return JSON.parse(this.get(this.policiesKey) || \"{}\");\n } catch (e) {\n return {};\n }\n }\n\n /**\n * Check to see whether a cookie exists or not.\n * @param {String} key - The cookie name.\n * @returns {Boolean}\n */\n exists(key) {\n return Object.hasOwn(this.all, key);\n }\n\n /**\n * Check to see whether a cookie has a particular value.\n * @param {String} key - The cookie name.\n * @param {String|Number|Boolean} value - The value to check against.\n * @returns\n */\n hasValue(key, value) {\n return this.get(key) == value;\n }\n\n /**\n * Get a cookie.\n * @param {String} key - The cookie name.\n * @returns {String|Number|Boolean}\n */\n get(key) {\n return this.exists(key) ? decodeURIComponent(this.all[key]) : null;\n }\n\n /**\n * Set a cookie.\n * @param {String} key - The cookie name.\n * @param {String|Number|Boolean} value - The cookie value.\n * @param {Object} options\n * @param {Number} [options.maxAge=this.defaultAge] - The maximum age of the cookie in seconds.\n * @param {String} [options.path=/] - The path to register the cookie for.\n * @param {String} [options.sameSite=Lax] - The sameSite attribute.\n * @param {String} [options.domain=this.defaultDomain] - The domain to register the cookie with.\n * @param {String} [options.path=this.defaultPath] - The path to register the cookie with.\n * @param {String} [options.secure=this.secure] - Only set cookie in HTTPS environments.\n * @param {String} [options.session=false] - Set a session cookie.\n */\n set(key, value, options = {}) {\n const {\n maxAge = this.defaultAge,\n sameSite = \"Lax\",\n domain = this.defaultDomain,\n path = this.defaultPath,\n secure = this.secure,\n session = false,\n } = options;\n if (!key) {\n return;\n }\n const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)}; domain=${domain}; samesite=${sameSite}; path=${path}${!session ? `; max-age=${maxAge}` : \"\"}${\n secure ? \"; secure\" : \"\"\n }`;\n document.cookie = cookie;\n this.log(\"Set cookie:\", {\n key,\n value,\n maxAge,\n path,\n sameSite,\n domain,\n secure,\n session,\n cookie,\n });\n this.events.trigger(\"setCookie\", {\n key,\n value,\n maxAge,\n path,\n sameSite,\n domain,\n secure,\n session,\n cookie,\n });\n }\n\n /**\n * Delete a cookie.\n * @param {String} key - The cookie name.\n * @param {String} [path=/] - The path to the cookie is registered on.\n */\n delete(key, path = \"/\", domain = this.defaultDomain) {\n const options = { maxAge: -1, path, domain: domain || undefined };\n this.set(key, \"\", options);\n this.log(\"Deleted cookie:\", { key, path, domain, ...options });\n this.events.trigger(\"deleteCookie\", { key, ...options });\n }\n\n /**\n * Delete all cookies.\n */\n deleteAll(path = \"/\", domain = this.defaultDomain) {\n Object.keys(this.all).forEach((cookie) => {\n this.delete(cookie, path, domain);\n });\n this.log(\"Deleted all cookies\", { path, domain });\n this.events.trigger(\"deleteAllCookies\", { path, domain });\n }\n\n /**\n * Accept a policy.\n * @param {String} policy - The name of the policy.\n */\n acceptPolicy(policy) {\n this.log(\"Accepting policy:\", policy);\n this.setPolicy(policy, true);\n this.events.trigger(\"acceptPolicy\", policy);\n this.events.trigger(\"changePolicy\", { [policy]: true });\n }\n\n /**\n * Reject a policy.\n * @param {String} policy - The name of the policy.\n */\n rejectPolicy(policy) {\n this.log(\"Rejecting policy:\", policy);\n this.setPolicy(policy, false);\n this.events.trigger(\"rejectPolicy\", policy);\n this.events.trigger(\"changePolicy\", { [policy]: false });\n }\n\n /**\n * Set a policy.\n * @param {String} policy - The name of the policy.\n * @param {Boolean} accepted - Whether the policy is accepted or not.\n */\n setPolicy(policy, accepted) {\n if (policy === \"essential\") {\n this.log(\"Cannot change essential policy, it is always accepted.\");\n return;\n }\n this.log(`Setting policy ${policy} to ${accepted}`);\n this.savePolicies({\n ...this.policies,\n [policy]: accepted,\n essential: true,\n });\n this.events.trigger(\"changePolicy\", { [policy]: accepted });\n }\n\n /**\n * Accept all the cookie policies.\n */\n acceptAllPolicies() {\n this.log(\"Accepting all policies\");\n const allPolicies = Object.fromEntries(\n Object.keys(this.policies).map((k) => [k.toLowerCase(), true]),\n );\n this.savePolicies(allPolicies);\n this.events.trigger(\"acceptAllPolicies\");\n this.events.trigger(\"changePolicy\", allPolicies);\n }\n\n /**\n * Reject all the cookie policies.\n */\n rejectAllPolicies() {\n this.log(\"Rejecting all policies\");\n const allPolicies = {\n ...Object.fromEntries(\n Object.keys(this.policies).map((k) => [k.toLowerCase(), false]),\n ),\n essential: true,\n };\n this.savePolicies(allPolicies);\n this.events.trigger(\"rejectAllPolicies\");\n this.events.trigger(\"changePolicy\", allPolicies);\n }\n\n /**\n * Commit policy preferences to the browser.\n * @param {object} policies - The policies to commit.\n */\n savePolicies(policies) {\n this.log(\"Saving policies:\", policies);\n this.set(this.policiesKey, JSON.stringify(policies));\n }\n\n /**\n * Get the acceptance status of a policy.\n * @param {String} policy - The name of the policy.\n * @returns {Boolean}\n */\n isPolicyAccepted(policy) {\n return Object.hasOwn(this.policies, policy)\n ? this.policies[policy] === true\n : null;\n }\n\n /**\n * Add an event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n on(event, callback) {\n this.log(`Adding event listener for: ${event}`);\n this.events.on(event, callback);\n }\n\n /**\n * Add a one-time event listener.\n * @param {String} event - The event to add a listener for.\n * @param {Function} callback - The callback function to call when the event is triggered.\n */\n once(event, callback) {\n this.log(`Adding one-time event listener for: ${event}`);\n this.events.once(event, callback);\n }\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import Cookies from \"../../lib/cookies.mjs\";\n\nexport { Cookies };\n\nexport class DateInputProgressive {\n constructor($module) {\n this.$module = $module;\n this.$yearWrapper =\n $module && $module.querySelector(\".tna-date-input__item--year\");\n this.$yearInput =\n this.$yearWrapper && this.$yearWrapper.querySelector(\"input\");\n this.$monthWrapper =\n $module && $module.querySelector(\".tna-date-input__item--month\");\n this.$monthInput =\n this.$monthWrapper && this.$monthWrapper.querySelector(\"input\");\n this.$dayWrapper =\n $module && $module.querySelector(\".tna-date-input__item--day\");\n this.$dayInput =\n this.$dayWrapper && this.$dayWrapper.querySelector(\"input\");\n\n if (!this.$module) {\n return;\n }\n\n this.update();\n window.addEventListener(\"pageshow\", () => this.update());\n\n if (this.$yearInput) {\n this.$yearInput.addEventListener(\"keyup\", () => this.update());\n this.$yearInput.addEventListener(\"change\", () => this.update());\n }\n if (this.$monthInput) {\n this.$monthInput.addEventListener(\"keyup\", () => this.update());\n this.$monthInput.addEventListener(\"change\", () => this.update());\n }\n if (this.$dayInput) {\n this.$dayInput.addEventListener(\"keyup\", () => this.update());\n this.$dayInput.addEventListener(\"change\", () => this.update());\n }\n }\n\n update() {\n if (this.isValidYear()) {\n this.showMonth();\n if (this.isValidMonth()) {\n this.showDay();\n } else {\n this.hideDay();\n }\n } else {\n this.hideMonth();\n this.hideDay();\n }\n }\n\n isValidYear() {\n if (!this.$yearInput) {\n return true;\n }\n const yearValue = parseInt(this.$yearInput.value.trim());\n return !isNaN(this.$yearInput.value) && !isNaN(yearValue) && yearValue > 0;\n }\n\n isValidMonth() {\n if (!this.$monthInput) {\n return true;\n }\n const monthRawValue = this.$monthInput.value.trim();\n const monthIntValue = parseInt(monthRawValue);\n const validMonthStrings = [\n \"january\",\n \"february\",\n \"march\",\n \"april\",\n \"may\",\n \"june\",\n \"july\",\n \"august\",\n \"september\",\n \"october\",\n \"november\",\n \"december\",\n \"jan\",\n \"feb\",\n \"mar\",\n \"apr\",\n \"jun\",\n \"jul\",\n \"aug\",\n \"sep\",\n \"oct\",\n \"nov\",\n \"dec\",\n ];\n return (\n (!isNaN(this.$monthInput.value) &&\n !isNaN(monthIntValue) &&\n monthIntValue > 0 &&\n monthIntValue <= 12) ||\n validMonthStrings.includes(monthRawValue.toLowerCase())\n );\n }\n\n showMonth() {\n if (this.$monthWrapper) {\n this.$monthWrapper.removeAttribute(\"hidden\");\n }\n }\n\n hideMonth() {\n if (this.$monthWrapper) {\n this.$monthWrapper.setAttribute(\"hidden\", \"\");\n }\n }\n\n showDay() {\n if (this.$dayWrapper) {\n this.$dayWrapper.removeAttribute(\"hidden\");\n }\n }\n\n hideDay() {\n if (this.$dayWrapper) {\n this.$dayWrapper.setAttribute(\"hidden\", \"\");\n }\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","window","TNAFrontendCookies","TNAFrontendCookieEvents","CookieEventHandler","_createClass","debug","arguments","length","undefined","_classCallCheck","_defineProperty","this","log","key","value","_console","_len","args","Array","_key","console","apply","concat","event","callback","Object","hasOwn","events","_toConsumableArray","oneTimeEvents","_this","data","forEach","eventToTrigger","call","i","splice","tnaCookiePolicies","Cookies","_this2","options","document","documentElement","dataset","tnaFrontendDebug","defaultDomain","defaultPath","secure","policiesKey","defaultAge","_options$newInstance","newInstance","_options$noInit","noInit","tnaCookiesDomain","location","hostname","tnaCookiesPath","tnaCookiesInsecure","tnaCookiesPoliciesKey","parseInt","tnaCookiesDefaultAge","policiesCorrectOnInit","keys","policies","every","policy","includes","init","existingPolicies","filteredExistingPolicies","fromEntries","filter","map","savePolicies","_objectSpread","usage","settings","marketing","essential","_console2","_len2","_key2","all","get","deserialised","cookie","split","x","parts","trim","JSON","parse","e","exists","decodeURIComponent","_options$maxAge","maxAge","_options$sameSite","sameSite","_options$domain","domain","_options$path","path","_options$secure","_options$session","session","encodeURIComponent","trigger","set","_this3","setPolicy","accepted","allPolicies","k","toLowerCase","stringify","on","once","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","o","defineProperty","enumerable","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","DateInputProgressive","$module","$yearWrapper","querySelector","$yearInput","$monthWrapper","$monthInput","$dayWrapper","$dayInput","update","addEventListener","isValidYear","showMonth","isValidMonth","showDay","hideDay","hideMonth","yearValue","isNaN","monthRawValue","monthIntValue","removeAttribute","setAttribute"],"sourceRoot":""}
@@ -10,8 +10,12 @@
10
10
 
11
11
  &__item {
12
12
  &-label {
13
+ padding-bottom: spacing.space(0.5);
14
+
13
15
  display: block;
14
16
 
17
+ line-height: 1;
18
+
15
19
  @include typography.font-size(16);
16
20
  }
17
21
 
@@ -15,7 +15,7 @@
15
15
  "name": "headingSize",
16
16
  "type": "string",
17
17
  "required": false,
18
- "description": "The physical size of the date input title (`xl`, `l`, `m` or `s`)."
18
+ "description": "The physical size of the date input title (`xl`, `l`, `m`, `s` or `xs`)."
19
19
  },
20
20
  {
21
21
  "name": "id",
@@ -15,7 +15,7 @@
15
15
  "name": "headingSize",
16
16
  "type": "string",
17
17
  "required": false,
18
- "description": "The physical size of the date search title (`xl`, `l`, `m` or `s`)."
18
+ "description": "The physical size of the date search title (`xl`, `l`, `m`, `s` or `xs`)."
19
19
  },
20
20
  {
21
21
  "name": "id",
@@ -0,0 +1,16 @@
1
+ import { valueGetters } from "../../lib/analytics-helpers.mjs";
2
+
3
+ export default [
4
+ {
5
+ scope: ".tna-error-summary",
6
+ areaName: "error-summary",
7
+ events: [
8
+ {
9
+ eventName: "jump",
10
+ targetElement: "a.tna-error-summary__link",
11
+ on: "click",
12
+ data: { value: valueGetters.text },
13
+ },
14
+ ],
15
+ },
16
+ ];
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("TNAFrontend",[],t):"object"==typeof exports?exports.TNAFrontend=t():e.TNAFrontend=t()}(self,(()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,o(r.key),r)}}function o(e){var t=function(e){if("object"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==n(t)?t:t+""}e.r(t),e.d(t,{ErrorSummary:()=>i});var i=function(){return e=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.$module=t},t=[{key:"init",value:function(){var e=this;this.$module&&("true"===this.$module.dataset.disableAutofocus||this.setFocus(this.$module),this.$module.addEventListener("click",(function(t){return e.handleClick(t)})))}},{key:"setFocus",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.getAttribute("tabindex");function o(){var t;null===(t=n.onBlur)||void 0===t||t.call(e),r||e.removeAttribute("tabindex")}r||e.setAttribute("tabindex","-1"),e.addEventListener("focus",(function(){e.addEventListener("blur",o,{once:!0})}),{once:!0}),null===(t=n.onBeforeFocus)||void 0===t||t.call(e),e.focus()}},{key:"handleClick",value:function(e){var t=e.target;t&&this.focusTarget(t)&&e.preventDefault()}},{key:"getFragmentFromUrl",value:function(e){if(e.includes("#"))return e.split("#").pop()}},{key:"focusTarget",value:function(e){if(!(e instanceof HTMLAnchorElement))return!1;var t=this.getFragmentFromUrl(e.href);if(!t)return!1;var n=document.getElementById(t);if(!n)return!1;var r=this.getAssociatedLegendOrLabel(n);return!!r&&(r.scrollIntoView(),n.focus({preventScroll:!0}),!0)}},{key:"getAssociatedLegendOrLabel",value:function(e){var t,n=e.closest("fieldset");if(n){var r=n.getElementsByTagName("legend");if(r.length){var o=r[0];if(e instanceof HTMLInputElement&&("checkbox"===e.type||"radio"===e.type))return o;var i=o.getBoundingClientRect().top,u=e.getBoundingClientRect();if(u.height&&window.innerHeight&&u.top+u.height-i<window.innerHeight/2)return o}}return null!==(t=document.querySelector("label[for='".concat(e.getAttribute("id"),"']")))&&void 0!==t?t:e.closest("label")}}],t&&r(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}();return t})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("TNAFrontend",[],t):"object"==typeof exports?exports.TNAFrontend=t():e.TNAFrontend=t()}(self,()=>(()=>{"use strict";var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function r(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,o(r.key),r)}}function o(e){var t=function(e){if("object"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==n(t)?t:t+""}e.r(t),e.d(t,{ErrorSummary:()=>i});var i=function(){return e=function e(t){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.$module=t},t=[{key:"init",value:function(){var e=this;this.$module&&("true"===this.$module.dataset.disableAutofocus||this.setFocus(this.$module),this.$module.addEventListener("click",function(t){return e.handleClick(t)}))}},{key:"setFocus",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.getAttribute("tabindex");function o(){var t;null===(t=n.onBlur)||void 0===t||t.call(e),r||e.removeAttribute("tabindex")}r||e.setAttribute("tabindex","-1"),e.addEventListener("focus",function(){e.addEventListener("blur",o,{once:!0})},{once:!0}),null===(t=n.onBeforeFocus)||void 0===t||t.call(e),e.focus()}},{key:"handleClick",value:function(e){var t=e.target;t&&this.focusTarget(t)&&e.preventDefault()}},{key:"getFragmentFromUrl",value:function(e){if(e.includes("#"))return e.split("#").pop()}},{key:"focusTarget",value:function(e){if(!(e instanceof HTMLAnchorElement))return!1;var t=this.getFragmentFromUrl(e.href);if(!t)return!1;var n=document.getElementById(t);if(!n)return!1;var r=this.getAssociatedLegendOrLabel(n);return!!r&&(r.scrollIntoView(),n.focus({preventScroll:!0}),!0)}},{key:"getAssociatedLegendOrLabel",value:function(e){var t,n=e.closest("fieldset");if(n){var r=n.getElementsByTagName("legend");if(r.length){var o=r[0];if(e instanceof HTMLInputElement&&("checkbox"===e.type||"radio"===e.type))return o;var i=o.getBoundingClientRect().top,u=e.getBoundingClientRect();if(u.height&&window.innerHeight&&u.top+u.height-i<window.innerHeight/2)return o}}return null!==(t=document.querySelector("label[for='".concat(e.getAttribute("id"),"']")))&&void 0!==t?t:e.closest("label")}}],t&&r(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}();return t})());
2
2
  //# sourceMappingURL=error-summary.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"components/error-summary/error-summary.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/components/error-summary/error-summary.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"TNAFrontend\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\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};","export class ErrorSummary {\n constructor($module) {\n this.$module = $module;\n }\n\n init() {\n if (!this.$module) {\n return;\n }\n\n const disableAutoFocus =\n this.$module.dataset.disableAutofocus === \"true\" || false;\n\n if (!disableAutoFocus) {\n this.setFocus(this.$module);\n }\n\n this.$module.addEventListener(\"click\", (event) => this.handleClick(event));\n }\n\n setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute(\"tabindex\");\n\n if (!isFocusable) {\n $element.setAttribute(\"tabindex\", \"-1\");\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener(\"blur\", onBlur, { once: true });\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n options.onBlur?.call($element);\n\n if (!isFocusable) {\n $element.removeAttribute(\"tabindex\");\n }\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener(\"focus\", onFocus, { once: true });\n\n // Focus element\n options.onBeforeFocus?.call($element);\n $element.focus();\n }\n\n handleClick(event) {\n const $target = event.target;\n if ($target && this.focusTarget($target)) {\n event.preventDefault();\n }\n }\n\n getFragmentFromUrl(url) {\n if (!url.includes(\"#\")) {\n return undefined;\n }\n\n return url.split(\"#\").pop();\n }\n\n focusTarget($target) {\n // If the element that was clicked was not a link, return early\n if (!($target instanceof HTMLAnchorElement)) {\n return false;\n }\n\n const inputId = this.getFragmentFromUrl($target.href);\n if (!inputId) {\n return false;\n }\n\n const $input = document.getElementById(inputId);\n if (!$input) {\n return false;\n }\n\n const $legendOrLabel = this.getAssociatedLegendOrLabel($input);\n if (!$legendOrLabel) {\n return false;\n }\n\n // Scroll the legend or label into view *before* calling focus on the input\n // to avoid extra scrolling in browsers that don't support `preventScroll`\n // (which at time of writing is most of them...)\n $legendOrLabel.scrollIntoView();\n $input.focus({ preventScroll: true });\n\n return true;\n }\n\n /**\n * Get associated legend or label\n *\n * Returns the first element that exists from this list:\n *\n * - The `<legend>` associated with the closest `<fieldset>` ancestor, as long\n * as the top of it is no more than half a viewport height away from the\n * bottom of the input\n * - The first `<label>` that is associated with the input using for=\"inputId\"\n * - The closest parent `<label>`\n *\n * @private\n * @param {Element} $input - The input\n * @returns {Element | null} Associated legend or label, or null if no\n * associated legend or label can be found\n */\n getAssociatedLegendOrLabel($input) {\n const $fieldset = $input.closest(\"fieldset\");\n\n if ($fieldset) {\n const $legends = $fieldset.getElementsByTagName(\"legend\");\n\n if ($legends.length) {\n const $candidateLegend = $legends[0];\n\n // If the input type is radio or checkbox, always use the legend if\n // there is one.\n if (\n $input instanceof HTMLInputElement &&\n ($input.type === \"checkbox\" || $input.type === \"radio\")\n ) {\n return $candidateLegend;\n }\n\n // For other input types, only scroll to the fieldset’s legend (instead\n // of the label associated with the input) if the input would end up in\n // the top half of the screen.\n //\n // This should avoid situations where the input either ends up off the\n // screen, or obscured by a software keyboard.\n const legendTop = $candidateLegend.getBoundingClientRect().top;\n const inputRect = $input.getBoundingClientRect();\n\n // If the browser doesn't support Element.getBoundingClientRect().height\n // or window.innerHeight (like IE8), bail and just link to the label.\n if (inputRect.height && window.innerHeight) {\n const inputBottom = inputRect.top + inputRect.height;\n\n if (inputBottom - legendTop < window.innerHeight / 2) {\n return $candidateLegend;\n }\n }\n }\n }\n\n return (\n document.querySelector(`label[for='${$input.getAttribute(\"id\")}']`) ??\n $input.closest(\"label\")\n );\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","ErrorSummary","$module","_classCallCheck","this","_this","dataset","disableAutofocus","setFocus","addEventListener","event","handleClick","$element","_options$onBeforeFocu","options","arguments","length","undefined","isFocusable","getAttribute","onBlur","_options$onBlur","removeAttribute","setAttribute","once","onBeforeFocus","focus","$target","target","focusTarget","preventDefault","url","includes","split","pop","HTMLAnchorElement","inputId","getFragmentFromUrl","href","$input","document","getElementById","$legendOrLabel","getAssociatedLegendOrLabel","scrollIntoView","preventScroll","_document$querySelect","$fieldset","closest","$legends","getElementsByTagName","$candidateLegend","HTMLInputElement","type","legendTop","getBoundingClientRect","top","inputRect","height","window","innerHeight","querySelector","concat"],"sourceRoot":""}
1
+ {"version":3,"file":"components/error-summary/error-summary.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/components/error-summary/error-summary.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"TNAFrontend\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\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};","export class ErrorSummary {\n constructor($module) {\n this.$module = $module;\n }\n\n init() {\n if (!this.$module) {\n return;\n }\n\n const disableAutoFocus =\n this.$module.dataset.disableAutofocus === \"true\" || false;\n\n if (!disableAutoFocus) {\n this.setFocus(this.$module);\n }\n\n this.$module.addEventListener(\"click\", (event) => this.handleClick(event));\n }\n\n setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute(\"tabindex\");\n\n if (!isFocusable) {\n $element.setAttribute(\"tabindex\", \"-1\");\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener(\"blur\", onBlur, { once: true });\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n options.onBlur?.call($element);\n\n if (!isFocusable) {\n $element.removeAttribute(\"tabindex\");\n }\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener(\"focus\", onFocus, { once: true });\n\n // Focus element\n options.onBeforeFocus?.call($element);\n $element.focus();\n }\n\n handleClick(event) {\n const $target = event.target;\n if ($target && this.focusTarget($target)) {\n event.preventDefault();\n }\n }\n\n getFragmentFromUrl(url) {\n if (!url.includes(\"#\")) {\n return undefined;\n }\n\n return url.split(\"#\").pop();\n }\n\n focusTarget($target) {\n // If the element that was clicked was not a link, return early\n if (!($target instanceof HTMLAnchorElement)) {\n return false;\n }\n\n const inputId = this.getFragmentFromUrl($target.href);\n if (!inputId) {\n return false;\n }\n\n const $input = document.getElementById(inputId);\n if (!$input) {\n return false;\n }\n\n const $legendOrLabel = this.getAssociatedLegendOrLabel($input);\n if (!$legendOrLabel) {\n return false;\n }\n\n // Scroll the legend or label into view *before* calling focus on the input\n // to avoid extra scrolling in browsers that don't support `preventScroll`\n // (which at time of writing is most of them...)\n $legendOrLabel.scrollIntoView();\n $input.focus({ preventScroll: true });\n\n return true;\n }\n\n /**\n * Get associated legend or label\n *\n * Returns the first element that exists from this list:\n *\n * - The `<legend>` associated with the closest `<fieldset>` ancestor, as long\n * as the top of it is no more than half a viewport height away from the\n * bottom of the input\n * - The first `<label>` that is associated with the input using for=\"inputId\"\n * - The closest parent `<label>`\n *\n * @private\n * @param {Element} $input - The input\n * @returns {Element | null} Associated legend or label, or null if no\n * associated legend or label can be found\n */\n getAssociatedLegendOrLabel($input) {\n const $fieldset = $input.closest(\"fieldset\");\n\n if ($fieldset) {\n const $legends = $fieldset.getElementsByTagName(\"legend\");\n\n if ($legends.length) {\n const $candidateLegend = $legends[0];\n\n // If the input type is radio or checkbox, always use the legend if\n // there is one.\n if (\n $input instanceof HTMLInputElement &&\n ($input.type === \"checkbox\" || $input.type === \"radio\")\n ) {\n return $candidateLegend;\n }\n\n // For other input types, only scroll to the fieldset’s legend (instead\n // of the label associated with the input) if the input would end up in\n // the top half of the screen.\n //\n // This should avoid situations where the input either ends up off the\n // screen, or obscured by a software keyboard.\n const legendTop = $candidateLegend.getBoundingClientRect().top;\n const inputRect = $input.getBoundingClientRect();\n\n // If the browser doesn't support Element.getBoundingClientRect().height\n // or window.innerHeight (like IE8), bail and just link to the label.\n if (inputRect.height && window.innerHeight) {\n const inputBottom = inputRect.top + inputRect.height;\n\n if (inputBottom - legendTop < window.innerHeight / 2) {\n return $candidateLegend;\n }\n }\n }\n }\n\n return (\n document.querySelector(`label[for='${$input.getAttribute(\"id\")}']`) ??\n $input.closest(\"label\")\n );\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","ErrorSummary","$module","_classCallCheck","this","_this","dataset","disableAutofocus","setFocus","addEventListener","event","handleClick","$element","_options$onBeforeFocu","options","arguments","length","undefined","isFocusable","getAttribute","onBlur","_options$onBlur","removeAttribute","setAttribute","once","onBeforeFocus","focus","$target","target","focusTarget","preventDefault","url","includes","split","pop","HTMLAnchorElement","inputId","getFragmentFromUrl","href","$input","document","getElementById","$legendOrLabel","getAssociatedLegendOrLabel","scrollIntoView","preventScroll","_document$querySelect","$fieldset","closest","$legends","getElementsByTagName","$candidateLegend","HTMLInputElement","type","legendTop","getBoundingClientRect","top","inputRect","height","window","innerHeight","querySelector","concat"],"sourceRoot":""}
@@ -14,11 +14,14 @@
14
14
  {
15
15
  "text": "The date of the record cannot be in the future",
16
16
  "href": "#"
17
+ },
18
+ {
19
+ "text": "Try submitting the form again"
17
20
  }
18
21
  ],
19
22
  "disableAutoFocus": true
20
23
  },
21
- "html": "<div class=\"tna-error-summary\" data-module=\"tna-error-summary\" data-disable-autofocus=\"true\"><div role=\"alert\"><h2 class=\"tna-error-summary__heading tna-heading-m\">There is a problem</h2><ul class=\"tna-error-summary__list\"><li class=\"tna-error-summary__item\"><a href=\"#\" class=\"tna-error-summary__link\">Enter your full name</a></li><li class=\"tna-error-summary__item\"><a href=\"#\" class=\"tna-error-summary__link\">The date of the record cannot be in the future</a></li></ul></div></div>"
24
+ "html": "<div class=\"tna-error-summary\" data-module=\"tna-error-summary\" data-disable-autofocus=\"true\"><div role=\"alert\"><h2 class=\"tna-error-summary__heading tna-heading-m\">There is a problem</h2><ul class=\"tna-error-summary__list\"><li class=\"tna-error-summary__item\"><a href=\"#\" class=\"tna-error-summary__link\">Enter your full name</a></li><li class=\"tna-error-summary__item\"><a href=\"#\" class=\"tna-error-summary__link\">The date of the record cannot be in the future</a></li><li class=\"tna-error-summary__item\"><span class=\"tna-error-summary__link\">Try submitting the form again</span></li></ul></div></div>"
22
25
  }
23
26
  ]
24
27
  }
@@ -26,7 +26,7 @@
26
26
  {
27
27
  "name": "href",
28
28
  "type": "string",
29
- "required": true,
29
+ "required": false,
30
30
  "description": ""
31
31
  }
32
32
  ]
@@ -8,7 +8,11 @@
8
8
  <ul class="tna-error-summary__list">
9
9
  {%- for item in params.items %}
10
10
  <li class="tna-error-summary__item">
11
+ {%- if item.href %}
11
12
  <a href="{{ item.href }}" class="tna-error-summary__link">{{ item.text }}</a>
13
+ {%- else %}
14
+ <span class="tna-error-summary__link">{{ item.text }}</span>
15
+ {%- endif %}
12
16
  </li>
13
17
  {%- endfor %}
14
18
  </ul>
@@ -0,0 +1 @@
1
+ @use "file-input";
@@ -0,0 +1,59 @@
1
+ const getFileDetails = ($el) =>
2
+ JSON.stringify(
3
+ Array.from($el.files).map((file) => ({
4
+ name: file.name,
5
+ size: file.size,
6
+ type: file.type,
7
+ })),
8
+ );
9
+
10
+ export default [
11
+ {
12
+ scope: ".tna-file-input",
13
+ areaName: "file-input",
14
+ events: [
15
+ {
16
+ eventName: "blurred",
17
+ on: "blur",
18
+ data: {
19
+ value: getFileDetails,
20
+ state: ($el) => $el.files.length,
21
+ // eslint-disable-next-line no-unused-vars
22
+ group: ($el, $scope) =>
23
+ $scope
24
+ .closest(".tna-form__group")
25
+ ?.querySelector(".tna-form__heading")
26
+ ?.innerText?.trim(),
27
+ },
28
+ },
29
+ {
30
+ eventName: "cancelled",
31
+ on: "cancel",
32
+ data: {
33
+ value: getFileDetails,
34
+ state: ($el) => $el.files.length,
35
+ // eslint-disable-next-line no-unused-vars
36
+ group: ($el, $scope) =>
37
+ $scope
38
+ .closest(".tna-form__group")
39
+ ?.querySelector(".tna-form__heading")
40
+ ?.innerText?.trim(),
41
+ },
42
+ },
43
+ {
44
+ eventName: "changed",
45
+ on: "change",
46
+ data: {
47
+ value: getFileDetails,
48
+ state: ($el) => $el.files.length,
49
+ // eslint-disable-next-line no-unused-vars
50
+ group: ($el, $scope) =>
51
+ $scope
52
+ .closest(".tna-form__group")
53
+ ?.querySelector(".tna-form__heading")
54
+ ?.innerText?.trim(),
55
+ },
56
+ },
57
+ ],
58
+ },
59
+ ];
@@ -0,0 +1 @@
1
+ .tna-file-input__droppable--over::before,.tna-file-input__droppable--over-multiple::before{--accent-font-base: rgb(255, 255, 255) !important;--accent-font-dark: rgb(255, 255, 255) !important;--accent-font-light: rgba(255, 255, 255, 0.7) !important;--accent-icon-light: rgba(255, 255, 255, 0.7) !important;--accent-link: rgb(255, 255, 255) !important;--accent-link-visited: rgb(255, 255, 255) !important;--accent-keyline: rgba(255, 255, 255, 0.5) !important;--accent-keyline-dark: rgba(255, 255, 255, 0.8) !important;--button-accented-text: rgb(255, 255, 255) !important}.tna-file-input__droppable--over::before,.tna-file-input__droppable--over-multiple::before{--accent-background: rgb(0, 98, 59) !important;--accent-background-light: rgb(221, 229, 213) !important;--accent-border: rgb(134, 188, 37) !important;--button-accented-background: rgb(0, 98, 59) !important}.tna-file-input{width:100%;display:block;box-sizing:border-box;border-radius:.1px;cursor:pointer}.tna-file-input::file-selector-button{margin-right:8px;cursor:inherit}.tna-file-input__droppable{width:100%;padding:8px 16px 16px;box-sizing:border-box;position:relative;border:2px var(--keyline, rgba(38, 38, 42, 0.25)) dashed;border-radius:4px}.tna-file-input__droppable:has(.tna-file-input:focus-visible){outline:5px var(--focus-outline, rgb(0, 176, 255)) solid;outline-offset:2px}.tna-file-input__droppable:has(.tna-file-input:active){outline:5px var(--focus-outline, rgb(0, 176, 255)) solid}.tna-file-input__droppable .tna-file-input{padding:16px;position:absolute;inset:0;z-index:1;opacity:0}.tna-file-input__droppable-buttons{font-size:0.875rem;line-height:1.5rem}@media(max-width: 30em){.tna-file-input__droppable-buttons{flex-direction:row;align-items:center}}.tna-file-input__droppable-status{display:block;overflow:hidden;line-height:2;text-overflow:ellipsis;white-space:nowrap}.tna-file-input__droppable .tna-file-input:hover~.tna-file-input__droppable-buttons .tna-button:not(.tna-button--plain),.tna-file-input__droppable .tna-file-input:focus-visible~.tna-file-input__droppable-buttons .tna-button:not(.tna-button--plain){color:var(--button-hover-text, rgb(1, 1, 1));text-decoration:none;background:rgba(0,0,0,0)}.tna-file-input__droppable--over,.tna-file-input__droppable--over-multiple{border-color:var(--keyline-dark, rgb(38, 38, 42))}.tna-file-input__droppable--over::before,.tna-file-input__droppable--over-multiple::before{display:flex;align-items:center;justify-content:center;position:absolute;inset:8px;z-index:2;pointer-events:none;color:var(--accent-font-base, rgb(1, 1, 1));font-weight:700;background-color:var(--accent-background, #afb6b5)}.tna-file-input__droppable--over::before{content:"Drop file here"}.tna-file-input__droppable--over-multiple::before{content:"Drop files here"}/*# sourceMappingURL=file-input.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../../../../src/nationalarchives/tools/_colour.scss","../../../../src/nationalarchives/components/file-input/file-input.scss","../../../../src/nationalarchives/tools/_borders.scss","../../../../src/nationalarchives/variables/_borders.scss","../../../../src/nationalarchives/tools/_a11y.scss","../../../../src/nationalarchives/variables/_a11y.scss","../../../../src/nationalarchives/tools/_typography.scss","../../../../src/nationalarchives/tools/_media.scss","../../../../src/nationalarchives/variables/_typography.scss"],"names":[],"mappings":"AA4aA,2FACE,kDACA,kDACA,yDACA,yDACA,6CACA,qDACA,sDACA,2DACA,sDAwCF,2FACE,+CACA,yDACA,8CACA,wDCzdF,gBACE,WAEA,cAEA,sBAEA,mBAEA,eAEA,sCACE,iBAEA,eAGF,2BACE,WACA,sBAEA,sBAEA,kBDsFE,yDElHJ,cCDsB,IFuCtB,8DD4FE,yDI/FF,eCrCqB,IJ4CrB,uDDwFE,yDCpFF,2CACE,aAEA,kBACA,QACA,UAEA,UAGF,mCKrDA,mBLuDE,mBMHF,wBNCA,mCAKI,mBACA,oBAIJ,kCACE,cACA,gBAEA,cACA,uBAEA,mBAME,wPDIJ,6CCFM,qBAEA,yBAKN,2ED+BI,kDC3BF,2FACE,aACA,mBACA,uBAEA,kBACA,UACA,UAEA,oBDlBJ,4CM/DA,YEiBsB,IRkDtB,mDC0BE,yCACE,yBAKF,kDACE","file":"file-input.css","sourcesContent":["@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$base-colours: (\n \"background\",\n // \"background-tint\",\n \"font-base\",\n \"font-dark\",\n \"font-light\",\n \"icon-light\",\n \"link\",\n \"link-visited\",\n // \"focus-outline\",\n \"keyline\",\n \"keyline-dark\",\n // \"input-foreground\",\n // \"input-background\",\n // \"input-border\",\n // \"form-error-border\",\n // \"form-error-text\",\n // \"button-text\",\n // \"button-background\",\n // \"button-hover-text\",\n // \"button-hover-background\",\n);\n\n@function brand-colour($colour, $opacity: 1) {\n @return colour.brand-colour($colour, $opacity);\n}\n\n@mixin colour-css-vars($excludes...) {\n @each $name, $value in colour.$colour-palette-default {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index($base-colours, $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@mixin colour-css-vars-dark($excludes...) {\n @each $name, $value in colour.$colour-palette-dark {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index($base-colours, $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@mixin colour-css-vars-high-contrast($excludes...) {\n @each $name, $value in colour.$colour-palette-high-contrast {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index($base-colours, $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@mixin colour-css-vars-high-contrast-dark($excludes...) {\n @each $name, $value in colour.$colour-palette-high-contrast-dark {\n @if not list.index($excludes, $name) {\n --#{$name}: #{$value};\n @if list.index((\"keyline\", \"keyline-dark\"), $name) {\n --base-#{$name}: #{$value};\n }\n }\n }\n}\n\n@function colour-var($colour) {\n @return var(\n --#{$colour},\n #{map.get(colour.$colour-palette-default, $colour)}\n );\n}\n\n@mixin colour-font($colour, $important: false) {\n color: colour-var($colour) if($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: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\"keyline\", $border-width, solid, $direction);\n } @else {\n @include colour-border(\"keyline\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-dark($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\"keyline-dark\", $border-width, solid, $direction);\n } @else {\n @include colour-border(\"keyline-dark\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-accent($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\"accent-border\", $border-width, solid, $direction);\n } @else {\n @include colour-border(\"accent-border\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-error($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n @include colour-border(\n \"form-error-border\",\n $border-width,\n solid,\n $direction\n );\n } @else {\n @include colour-border(\"form-error-border\", $border-width, solid);\n }\n}\n\n@mixin thick-keyline-brand($direction: \"\", $brandColour, $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n border-#{$direction}: $border-width #{brand-colour($brandColour)} solid;\n } @else {\n border: $border-width #{brand-colour($brandColour)} solid;\n }\n}\n\n@mixin thick-keyline-transparent($direction: \"\", $veryThick: false) {\n $border-width: borders.$thick-border-width;\n @if $veryThick {\n $border-width: borders.$very-thick-border-width;\n }\n @if $direction != \"\" {\n border-#{$direction}: $border-width transparent solid;\n } @else {\n border: $border-width transparent solid;\n }\n}\n\n// Use light theme colours (except for \"form-error-border\")\n%always-light {\n @include colour-css-vars(\"form-error-border\", \"focus-outline\");\n\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\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin contrast {\n @extend %contrast;\n}\n\n%contrast-on-mobile {\n @include media.on-mobile {\n --background: var(--contrast-background);\n --font-base: var(--contrast-font-base);\n --font-dark: var(--contrast-font-dark);\n --font-light: var(--contrast-font-light);\n --icon-light: var(--contrast-icon-light);\n --link: var(--contrast-link);\n --link-visited: var(--contrast-link-visited);\n --keyline: var(--contrast-keyline);\n --keyline-dark: var(--contrast-keyline-dark);\n --button-text: var(--contrast-button-text);\n --button-background: var(--contrast-button-background);\n --button-hover-text: var(--contrast-button-hover-text);\n --button-hover-background: var(--contrast-button-hover-background);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n }\n}\n\n@mixin contrast-on-mobile {\n @extend %contrast-on-mobile;\n}\n\n%base {\n @each $name, $value in $base-colours {\n --#{$name}: var(--base-#{$value});\n }\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin base {\n @extend %base;\n}\n\n%tint {\n --background: var(--background-tint);\n\n @include colour-background(\"background\");\n}\n\n@mixin tint {\n @extend %tint;\n}\n\n%accent {\n --background: var(--accent-background);\n --font-base: var(--accent-font-base);\n --font-dark: var(--accent-font-dark);\n --font-light: var(--accent-font-light);\n --icon-light: var(--accent-icon-light);\n --link: var(--accent-link);\n --link-visited: var(--accent-link);\n --keyline: var(--accent-keyline);\n --keyline-dark: var(--accent-keyline-dark);\n --accent-border: var(--accent-font-dark);\n --button-text: var(--accent-button-text);\n --button-background: var(--accent-button-background);\n --button-hover-text: var(--accent-button-hover-text);\n --button-hover-background: var(--accent-button-hover-background);\n\n @include colour-background(\"background\");\n\n @include colour-font(\"font-base\");\n}\n\n@mixin accent {\n @extend %accent;\n}\n\n%accent-light {\n --background: var(--accent-background-light);\n --font-base: #{map.get(colour.$colour-palette-default, \"font-base\")};\n --font-dark: #{map.get(colour.$colour-palette-default, \"font-dark\")};\n --font-light: #{map.get(colour.$colour-palette-default, \"font-light\")};\n --icon-light: #{map.get(colour.$colour-palette-default, \"icon-light\")};\n --keyline: #{map.get(colour.$colour-palette-default, \"keyline\")};\n --keyline-dark: #{map.get(colour.$colour-palette-default, \"keyline-dark\")};\n --button-text: #{map.get(colour.$colour-palette-default, \"button-text\")};\n --button-background: #{map.get(\n colour.$colour-palette-default,\n \"button-background\"\n )};\n --button-hover-text: #{map.get(\n colour.$colour-palette-default,\n \"button-hover-text\"\n )};\n --button-hover-background: #{map.get(\n colour.$colour-palette-default,\n \"button-hover-background\"\n )};\n --accent-border: var(--accent-background);\n\n @include colour-background(\"background\");\n @include colour-font(\"font-base\");\n\n .tna-template--system-theme & {\n @media (prefers-color-scheme: dark) {\n // --link: #{map.get(colour.$colour-palette-default, \"link\")};\n // --link-visited: #{map.get(colour.$colour-palette-default, \"link-visited\")};\n\n --background: var(--accent-background);\n --font-base: var(--accent-font-base);\n --font-dark: var(--accent-font-dark);\n --font-light: var(--accent-font-light);\n --icon-light: var(--accent-icon-light);\n --link: var(--accent-link);\n --link-visited: var(--accent-link);\n --keyline: var(--accent-keyline);\n --keyline-dark: var(--accent-keyline-dark);\n --accent-border: var(--accent-font-dark);\n --button-text: var(--accent-button-text);\n --button-background: var(--accent-button-background);\n --button-hover-text: var(--accent-button-hover-text);\n --button-hover-background: var(--accent-button-hover-background);\n }\n }\n\n .tna-template--dark-theme & {\n // --link: #{map.get(colour.$colour-palette-default, \"link\")};\n // --link-visited: #{map.get(colour.$colour-palette-default, \"link-visited\")};\n\n --background: var(--accent-background);\n --font-base: var(--accent-font-base);\n --font-dark: var(--accent-font-dark);\n --font-light: var(--accent-font-light);\n --icon-light: var(--accent-icon-light);\n --link: var(--accent-link);\n --link-visited: var(--accent-link);\n --keyline: var(--accent-keyline);\n --keyline-dark: var(--accent-keyline-dark);\n --accent-border: var(--accent-font-dark);\n --button-text: var(--accent-button-text);\n --button-background: var(--accent-button-background);\n --button-hover-text: var(--accent-button-hover-text);\n --button-hover-background: var(--accent-button-hover-background);\n }\n}\n\n@mixin accent-light {\n @extend %accent-light;\n}\n\n%yellow-accent {\n --accent-background: #{colour.brand-colour(\"yellow\")} !important;\n --accent-background-light: #{colour.brand-colour(\"cream\")} !important;\n --accent-border: #{colour.brand-colour(\"yellow\")} !important;\n --accent-font-base: #{colour.brand-colour(\"black\")} !important;\n --accent-font-dark: #{colour.brand-colour(\"black\")} !important;\n --accent-font-light: #{colour.brand-colour(\"black\", 0.7)} !important;\n --accent-icon-light: #{colour.brand-colour(\"black\", 0.7)} !important;\n --accent-link: #{colour.brand-colour(\"black\")} !important;\n --accent-link-visited: #{colour.brand-colour(\"black\")} !important;\n --accent-keyline: #{colour.brand-colour(\"black\", 0.5)} !important;\n --accent-keyline-dark: #{colour.brand-colour(\"black\", 0.8)} !important;\n --button-accented-text: #{colour.brand-colour(\"white\")} !important;\n --button-accented-background: #{colour.brand-colour(\"brown\")} !important;\n}\n\n@mixin yellow-accent {\n @extend %yellow-accent;\n}\n\n%accent-lighter-text {\n --accent-font-base: #{colour.brand-colour(\"white\")} !important;\n --accent-font-dark: #{colour.brand-colour(\"white\")} !important;\n --accent-font-light: #{colour.brand-colour(\"white\", 0.7)} !important;\n --accent-icon-light: #{colour.brand-colour(\"white\", 0.7)} !important;\n --accent-link: #{colour.brand-colour(\"white\")} !important;\n --accent-link-visited: #{colour.brand-colour(\"white\")} !important;\n --accent-keyline: #{colour.brand-colour(\"white\", 0.5)} !important;\n --accent-keyline-dark: #{colour.brand-colour(\"white\", 0.8)} !important;\n --button-accented-text: #{colour.brand-colour(\"white\")} !important;\n}\n\n%black-accent {\n --accent-background: #{colour.brand-colour(\"black\")} !important;\n --accent-background-light: #{colour.brand-colour(\"light-grey\")} !important;\n --accent-border: #{colour.brand-colour(\"black\")} !important;\n --button-accented-text: #{colour.brand-colour(\"black\")} !important;\n --button-accented-background: #{colour.brand-colour(\"grey\")} !important;\n}\n\n@mixin black-accent {\n @extend %accent-lighter-text;\n @extend %black-accent;\n}\n\n%pink-accent {\n --accent-background: #{colour.brand-colour(\"maroon\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-pink\")} !important;\n --accent-border: #{colour.brand-colour(\"pink\")} !important;\n --button-accented-background: #{colour.brand-colour(\"maroon\")} !important;\n}\n\n@mixin pink-accent {\n @extend %accent-lighter-text;\n @extend %pink-accent;\n}\n\n%orange-accent {\n --accent-background: #{colour.brand-colour(\"chestnut\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-orange\")} !important;\n --accent-border: #{colour.brand-colour(\"orange\")} !important;\n --button-accented-background: #{colour.brand-colour(\"chestnut\")} !important;\n}\n\n@mixin orange-accent {\n @extend %accent-lighter-text;\n @extend %orange-accent;\n}\n\n%green-accent {\n --accent-background: #{colour.brand-colour(\"forest\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-green\")} !important;\n --accent-border: #{colour.brand-colour(\"green\")} !important;\n --button-accented-background: #{colour.brand-colour(\"forest\")} !important;\n}\n\n@mixin green-accent {\n @extend %accent-lighter-text;\n @extend %green-accent;\n}\n\n%blue-accent {\n --accent-background: #{colour.brand-colour(\"navy\")} !important;\n --accent-background-light: #{colour.brand-colour(\"pastel-blue\")} !important;\n --accent-border: #{colour.brand-colour(\"blue\")} !important;\n --button-accented-background: #{colour.brand-colour(\"navy\")} !important;\n}\n\n@mixin blue-accent {\n @extend %accent-lighter-text;\n @extend %blue-accent;\n}\n\n@mixin on-high-contrast {\n @media (prefers-contrast: more) {\n @content;\n }\n}\n\n@mixin on-forced-colours {\n @media (forced-colors: active) {\n @content;\n }\n}\n\n@mixin on-high-contrast-and-forced-colours {\n @include on-forced-colours {\n @content;\n }\n\n @include on-high-contrast {\n @content;\n }\n}\n\n@mixin image-loader-background {\n @if features.$image-loader-animations {\n background: linear-gradient(\n -45deg,\n rgb(0 0 0 / 25%),\n rgb(255 255 255 / 25%),\n rgb(0 0 0 / 25%)\n );\n background-size: 500% 500%;\n background-position: 0 50%;\n\n animation: image-loader-background ease-in-out 1.2s infinite;\n }\n}\n","@use \"../../variables/forms\";\n@use \"../../tools/a11y\";\n@use \"../../tools/borders\";\n@use \"../../tools/colour\";\n@use \"../../tools/media\";\n@use \"../../tools/spacing\";\n@use \"../../tools/typography\";\n\n.tna-file-input {\n width: 100%;\n\n display: block;\n\n box-sizing: border-box;\n\n border-radius: 0.1px;\n\n cursor: pointer;\n\n &::file-selector-button {\n margin-right: spacing.space(0.5);\n\n cursor: inherit;\n }\n\n &__droppable {\n width: 100%;\n padding: spacing.space(0.5) spacing.space(1) spacing.space(1);\n\n box-sizing: border-box;\n\n position: relative;\n\n @include colour.colour-border(\n \"keyline\",\n forms.$form-field-border-width,\n dashed\n );\n @include borders.rounded-border;\n }\n\n &__droppable:has(&:focus-visible) {\n @include a11y.focus-outline;\n }\n\n &__droppable:has(&:active) {\n @include a11y.focus-outline-without-offset;\n }\n\n &__droppable & {\n padding: spacing.space(1);\n\n position: absolute;\n inset: 0;\n z-index: 1;\n\n opacity: 0;\n }\n\n &__droppable-buttons {\n @include typography.font-size(14);\n line-height: 1.5rem;\n\n @include media.on-tiny {\n flex-direction: row;\n align-items: center;\n }\n }\n\n &__droppable-status {\n display: block;\n overflow: hidden;\n\n line-height: 2;\n text-overflow: ellipsis;\n\n white-space: nowrap;\n }\n\n &__droppable &:hover ~ &__droppable-buttons,\n &__droppable &:focus-visible ~ &__droppable-buttons {\n .tna-button {\n &:not(.tna-button--plain) {\n @include colour.colour-font(\"button-hover-text\");\n text-decoration: none;\n\n background: transparent;\n }\n }\n }\n\n &__droppable--over,\n &__droppable--over-multiple {\n @include colour.colour-border(\"keyline-dark\");\n\n &::before {\n display: flex;\n align-items: center;\n justify-content: center;\n\n position: absolute;\n inset: spacing.space(0.5);\n z-index: 2;\n\n pointer-events: none;\n\n @include colour.green-accent;\n\n @include colour.colour-font(\"accent-font-base\");\n @include typography.main-font-weight-bold;\n\n @include colour.colour-background(\"accent-background\");\n }\n }\n\n &__droppable--over {\n &::before {\n content: \"Drop file here\";\n }\n }\n\n &__droppable--over-multiple {\n &::before {\n content: \"Drop files here\";\n }\n }\n}\n","@use \"../variables/borders\";\n\n@mixin rounded-border {\n border-radius: borders.$rounded-border-radius;\n}\n","$thick-border-width: 5px !default;\n$very-thick-border-width: 8px !default;\n$rounded-border-radius: 4px !default;\n","@use \"../variables/a11y\";\n@use \"colour\";\n\n@mixin visually-hidden {\n width: 1px !important;\n height: 1px !important;\n margin: 0 !important;\n padding: 0 !important;\n\n overflow: hidden !important;\n\n position: absolute !important;\n top: -9999px !important;\n left: -9999px !important;\n z-index: -1 !important;\n\n background-color: transparent !important;\n\n border: 0 !important;\n\n clip: rect(0, 0, 0, 0) !important;\n\n // &::before,\n // &::after {\n // content: \"\\00a0\";\n // }\n}\n\n@mixin focus-outline-without-offset {\n @include colour.colour-outline(\n \"focus-outline\",\n a11y.$focus-outline-width,\n solid\n );\n}\n\n@mixin focus-outline {\n @include focus-outline-without-offset;\n outline-offset: a11y.$focus-outline-offset;\n}\n\n@mixin active-outline {\n outline-offset: 0;\n}\n\n@mixin no-focus-outline-on-click {\n .tna-template--clicked &:focus {\n outline: none;\n }\n}\n","$focus-outline-width: 5px !default;\n$focus-outline-offset: 2px !default;\n$focus-outline-padding: $focus-outline-width + $focus-outline-offset;\n","@use \"sass:math\";\n@use \"../variables/typography\";\n@use \"colour\";\n@use \"media\";\n\n@mixin font-size($font-size-px) {\n font-size: #{math.div($font-size-px, typography.$relative-1rem-px)}rem;\n}\n\n@mixin relative-font-size($font-size-px) {\n @warn \"relative-font-size() will soon be deprecated in favour of font-size().\";\n @include font-size($font-size-px);\n}\n\n@mixin main-font-weight {\n font-weight: typography.$main-font-weight;\n}\n\n@mixin main-font-weight-medium {\n font-weight: typography.$main-font-weight-medium;\n}\n\n@mixin main-font-weight-bold {\n font-weight: typography.$main-font-weight-bold;\n}\n\n@mixin main-font($bold: false) {\n font-family: typography.$main-font-family;\n font-style: normal;\n font-optical-sizing: auto;\n font-variation-settings: \"wdth\" 100;\n @if $bold {\n @include main-font-weight-bold;\n } @else {\n @include main-font-weight;\n }\n}\n\n@mixin heading-font {\n font-family: typography.$heading-font-family;\n font-weight: typography.$heading-font-weight;\n}\n\n@mixin detail-font($bold: false) {\n font-family: typography.$detail-font-family;\n font-style: normal;\n font-optical-sizing: auto;\n @if $bold {\n font-weight: typography.$detail-font-weight-bold;\n } @else {\n font-weight: typography.$detail-font-weight;\n }\n}\n\n@mixin detail-font-small {\n @include detail-font;\n @include font-size(14);\n line-height: 1.1;\n text-transform: uppercase;\n}\n\n@mixin interactable-text-decoration {\n text-decoration-thickness: typography.$interactable-text-decoration-thickness;\n text-underline-offset: typography.$interactable-text-decoration-offset;\n}\n\n@mixin interacted-text-decoration {\n text-decoration: underline;\n text-decoration-thickness: typography.$interactive-text-decoration-thickness;\n text-underline-offset: typography.$interactable-text-decoration-offset;\n}\n\n@mixin heading-generator(\n $font-size-default,\n $font-size-medium,\n $font-size-small,\n $font-size-tiny,\n $line-height\n) {\n $small-and-tiny-identical: $font-size-small == $font-size-tiny;\n $medium-small-and-tiny-identical: $font-size-medium == $font-size-small and\n $small-and-tiny-identical;\n $all-identical: $font-size-default == $font-size-medium and\n $medium-small-and-tiny-identical and $small-and-tiny-identical;\n line-height: $line-height;\n @include font-size($font-size-default);\n\n @if $all-identical != true {\n @if $medium-small-and-tiny-identical != true {\n @include media.on-medium {\n @include font-size($font-size-medium);\n }\n\n @if $small-and-tiny-identical != true {\n @include media.on-small {\n @include font-size($font-size-small);\n }\n\n @include media.on-tiny {\n @include font-size($font-size-tiny);\n }\n } @else {\n @include media.on-mobile {\n @include font-size($font-size-small);\n }\n }\n } @else {\n @include media.on-smaller-than-large {\n @include font-size($font-size-medium);\n }\n }\n }\n}\n","@use \"sass:math\";\n@use \"../variables/media\";\n@use \"../variables/typography\";\n\n$smallest-large-device-em: #{math.div(\n media.$largest-medium-device-px + 1,\n typography.$relative-1rem-px\n )}em;\n$largest-medium-device-em: #{math.div(\n media.$largest-medium-device-px,\n typography.$relative-1rem-px\n )}em;\n$smallest-medium-device-em: #{math.div(\n media.$largest-small-device-px + 1,\n typography.$relative-1rem-px\n )}em;\n$largest-small-device-em: #{math.div(\n media.$largest-small-device-px,\n typography.$relative-1rem-px\n )}em;\n$smallest-small-device-em: #{math.div(\n media.$largest-tiny-device-px + 1,\n typography.$relative-1rem-px\n )}em;\n$largest-tiny-device-em: #{math.div(\n media.$largest-tiny-device-px,\n typography.$relative-1rem-px\n )}em;\n\n$media-large: \"(min-width: #{$smallest-large-device-em})\";\n$media-lt-large: \"(max-width: #{$largest-medium-device-em})\";\n$media-medium: \"(min-width: #{$smallest-medium-device-em}) and (max-width: #{$largest-medium-device-em})\";\n$media-gt-mobile: \"(min-width: #{$smallest-medium-device-em})\";\n$media-mobile: \"(max-width: #{$largest-small-device-em})\";\n$media-small: \"(min-width: #{$smallest-small-device-em}) and (max-width: #{$largest-small-device-em})\";\n$media-gt-tiny: \"(min-width: #{$smallest-small-device-em})\";\n$media-tiny: \"(max-width: #{$largest-tiny-device-em})\";\n\n// https://nationalarchives.github.io/design-system/styles/media/#media-queries\n@mixin on-large() {\n @media #{$media-large} {\n @content;\n }\n}\n\n@mixin on-medium() {\n @media #{$media-medium} {\n @content;\n }\n}\n\n@mixin on-small() {\n @media #{$media-small} {\n @content;\n }\n}\n\n@mixin on-tiny() {\n @media #{$media-tiny} {\n @content;\n }\n}\n\n@mixin on-larger-than-mobile() {\n @media #{$media-gt-mobile} {\n @content;\n }\n}\n\n@mixin on-larger-than-tiny() {\n @media #{$media-gt-tiny} {\n @content;\n }\n}\n\n@mixin on-smaller-than-large() {\n @media #{$media-lt-large} {\n @content;\n }\n}\n\n@mixin on-mobile() {\n @media #{$media-mobile} {\n @content;\n }\n}\n\n@mixin on-print() {\n @media print {\n @content;\n }\n}\n","@use \"sass:math\";\n\n/*\n * ------------------------------------------\n * The typefaces, sizes and spacings that are\n * defined in this file have been selected to\n * ensure 100% match with the latest National\n * Archives brand guidelines - avoid changing\n * or overwriting any of these values without\n * signing off with the Digital Services team\n * first\n * ------------------------------------------\n */\n\n$relative-1rem-px: 16; // 16px = 1rem\n\n/*\n * ------------------------------------------\n * When true, use the included font files for\n * Open Sans and Roboto Mono, rather than the\n * versions hosted by Google Fonts\n * ------------------------------------------\n */\n$use-local-fonts: false !default;\n\n$body-font-size-px: 19 !default;\n$body-font-size-px-medium: 18 !default;\n$body-font-size-px-mobile: 17 !default;\n$body-line-height: 1.75 !default;\n\n$interactable-text-decoration-offset: 0.125em !default;\n$interactable-text-decoration-thickness: #{math.div(1.5, $relative-1rem-px)}rem !default;\n$interactive-text-decoration-thickness: #{math.div(4, $relative-1rem-px)}rem !default;\n\n$main-font-family-name: \"Open Sans\" !default;\n$main-font-family:\n #{$main-font-family-name},\n sans-serif;\n$main-font-weight: 400 !default;\n$main-font-weight-medium: 600 !default;\n$main-font-weight-bold: 700 !default;\n$main-font-file: \"OpenSans-Regular.ttf\" !default;\n$main-font-file-medium: \"OpenSans-SemiBold.ttf\" !default;\n$main-font-file-bold: \"OpenSans-Bold.ttf\" !default;\n\n/*\n * ------------------------------------------\n * To use Supria Sans Condensed (which is the\n * approved heading typeface for The National\n * Archives), you need to obtain a licence to\n * properly embed the CSS files with the font\n * definitions in your service - check with a\n * member of the Digital Services team on how\n * to get a licence\n * ------------------------------------------\n */\n$heading-font-family-name: \"supria-sans-condensed\" !default;\n$heading-font-family:\n #{$heading-font-family-name},\n \"Arial Narrow\",\n sans-serif;\n$heading-font-weight: 500 !default;\n\n/*\n * ------------------------------------------\n * The detail font should be a monospace font\n * and is used for chips, supertitles as well\n * as the date search component\n * ------------------------------------------\n */\n$detail-font-family-name: \"Roboto Mono\" !default;\n$detail-font-family:\n #{$detail-font-family-name},\n monospace;\n$detail-font-weight: 400 !default;\n$detail-font-weight-bold: 500 !default;\n$detail-font-file: \"RobotoMono-Regular.ttf\" !default;\n$detail-font-file-bold: \"RobotoMono-Medium.ttf\" !default;\n\n$heading-xl-font-size-default: 64 !default;\n$heading-xl-font-size-medium: 48 !default;\n$heading-xl-font-size-small: 36 !default;\n$heading-xl-font-size-tiny: $heading-xl-font-size-small !default;\n$heading-xl-line-height: 1.1 !default;\n\n$heading-l-font-size-default: 36 !default;\n$heading-l-font-size-medium: 32 !default;\n$heading-l-font-size-small: 29 !default;\n$heading-l-font-size-tiny: $heading-l-font-size-small !default;\n$heading-l-line-height: 1.15 !default;\n\n$heading-m-font-size-default: 22 !default;\n$heading-m-font-size-medium: $heading-m-font-size-default !default;\n$heading-m-font-size-small: 21 !default;\n$heading-m-font-size-tiny: $heading-m-font-size-small !default;\n$heading-m-line-height: 1.4 !default;\n\n$heading-s-font-size-default: 19 !default;\n$heading-s-font-size-medium: $heading-s-font-size-default !default;\n$heading-s-font-size-small: $heading-s-font-size-default !default;\n$heading-s-font-size-tiny: $heading-s-font-size-default !default;\n$heading-s-line-height: 1.5 !default;\n"]}
@@ -0,0 +1,2 @@
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("TNAFrontend",[],t):"object"==typeof exports?exports.TNAFrontend=t():e.TNAFrontend=t()}(self,()=>(()=>{"use strict";var e={d:(t,n)=>{for(var i in n)e.o(n,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:n[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,r(i.key),i)}}function r(e){var t=function(e){if("object"!=n(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var i=t.call(e,"string");if("object"!=n(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==n(t)?t:t+""}e.r(t),e.d(t,{FileInputDroppable:()=>o});var o=function(){return e=function e(t){var n=this;if(function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.$module=t,this.$input=t&&t.querySelector(".tna-file-input"),this.$module&&this.$input){this.acceptMutltipleFiles=this.$input.hasAttribute("multiple"),this.$droppableArea=document.createElement("div"),this.$droppableArea.classList.add("tna-file-input__droppable"),this.$module.insertBefore(this.$droppableArea,this.$input),this.$droppableArea.appendChild(this.$input),this.$pseudoSelectFileText=document.createElement("span"),this.$pseudoSelectFileText.setAttribute("aria-live","polite"),this.$pseudoSelectFileText.classList.add("tna-file-input__droppable-status"),this.$pseudoSelectFileText.textContent="No file".concat(this.acceptMutltipleFiles?"s":""," chosen"),this.$droppableArea.appendChild(this.$pseudoSelectFileText);var i=document.createElement("div");i.classList.add("tna-button-group","tna-button-group--small","tna-!--margin-top-xs","tna-file-input__droppable-buttons"),this.$droppableArea.appendChild(i);var r=document.createElement("span");r.classList.add("tna-button"),r.textContent="Choose file".concat(this.acceptMutltipleFiles?"s":""),i.appendChild(r);var o=document.createElement("span");o.textContent="or drop file".concat(this.acceptMutltipleFiles?"s":""),i.appendChild(o),this.$droppableAreaAriaLabel=document.createElement("span"),this.$droppableAreaAriaLabel.classList.add("tna-visually-hidden"),this.$droppableAreaAriaLabel.setAttribute("aria-live","assertive"),this.$droppableArea.appendChild(this.$droppableAreaAriaLabel),this.$input.addEventListener("dragenter",function(e){return n.showDropTarget(e)}),this.$input.addEventListener("dragleave",function(){return n.hideDropTarget()}),this.$input.addEventListener("dragend",function(){return n.hideDropTarget()}),this.$input.addEventListener("change",function(){return n.onChange()}),this.$input.addEventListener("drop",function(){return n.onChange()})}},t=[{key:"isContainingFiles",value:function(e){var t=0===e.types.length,n=e.types.some(function(e){return"Files"===e});return t||n}},{key:"showDropTarget",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];e.dataTransfer&&this.isContainingFiles(e.dataTransfer)&&(this.$droppableArea.classList.add(e.dataTransfer.items.length>1?"tna-file-input__droppable--over-multiple":"tna-file-input__droppable--over"),t&&(this.$droppableAreaAriaLabel.textContent="Entered drop zone"))}},{key:"hideDropTarget",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.$droppableArea.classList.remove("tna-file-input__droppable--over","tna-file-input__droppable--over-multiple"),e&&(this.$droppableAreaAriaLabel.textContent="Left drop zone")}},{key:"onChange",value:function(){var e,t=this.$input.files;this.acceptMutltipleFiles?0===t.length?this.$pseudoSelectFileText.textContent="No files chosen":this.$pseudoSelectFileText.textContent="".concat(t.length," file").concat(t.length>1?"s":""," chosen"):this.$pseudoSelectFileText.textContent=(null===(e=t[0])||void 0===e?void 0:e.name)||"No file chosen",this.hideDropTarget(!1)}}],t&&i(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,t}();return t})());
2
+ //# sourceMappingURL=file-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components/file-input/file-input.js","mappings":"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","sources":["webpack://TNAFrontend/webpack/universalModuleDefinition","webpack://TNAFrontend/webpack/bootstrap","webpack://TNAFrontend/webpack/runtime/define property getters","webpack://TNAFrontend/webpack/runtime/hasOwnProperty shorthand","webpack://TNAFrontend/webpack/runtime/make namespace object","webpack://TNAFrontend/./src/nationalarchives/components/file-input/file-input.mjs"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"TNAFrontend\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"TNAFrontend\"] = factory();\n\telse\n\t\troot[\"TNAFrontend\"] = factory();\n})(self, () => {\nreturn ","// The require scope\nvar __webpack_require__ = {};\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};","export class FileInputDroppable {\n constructor($module) {\n this.$module = $module;\n this.$input = $module && $module.querySelector(\".tna-file-input\");\n\n if (!this.$module || !this.$input) {\n return;\n }\n\n this.acceptMutltipleFiles = this.$input.hasAttribute(\"multiple\");\n\n this.$droppableArea = document.createElement(\"div\");\n this.$droppableArea.classList.add(\"tna-file-input__droppable\");\n this.$module.insertBefore(this.$droppableArea, this.$input);\n this.$droppableArea.appendChild(this.$input);\n\n this.$pseudoSelectFileText = document.createElement(\"span\");\n this.$pseudoSelectFileText.setAttribute(\"aria-live\", \"polite\");\n this.$pseudoSelectFileText.classList.add(\n \"tna-file-input__droppable-status\",\n );\n this.$pseudoSelectFileText.textContent = `No file${this.acceptMutltipleFiles ? \"s\" : \"\"} chosen`;\n this.$droppableArea.appendChild(this.$pseudoSelectFileText);\n\n const $droppableButtons = document.createElement(\"div\");\n $droppableButtons.classList.add(\n \"tna-button-group\",\n \"tna-button-group--small\",\n \"tna-!--margin-top-xs\",\n \"tna-file-input__droppable-buttons\",\n );\n this.$droppableArea.appendChild($droppableButtons);\n\n const $pseudoSelectFileButton = document.createElement(\"span\");\n $pseudoSelectFileButton.classList.add(\"tna-button\");\n $pseudoSelectFileButton.textContent = `Choose file${this.acceptMutltipleFiles ? \"s\" : \"\"}`;\n $droppableButtons.appendChild($pseudoSelectFileButton);\n\n const $pseudoDropFileButton = document.createElement(\"span\");\n $pseudoDropFileButton.textContent = `or drop file${this.acceptMutltipleFiles ? \"s\" : \"\"}`;\n $droppableButtons.appendChild($pseudoDropFileButton);\n\n this.$droppableAreaAriaLabel = document.createElement(\"span\");\n this.$droppableAreaAriaLabel.classList.add(\"tna-visually-hidden\");\n this.$droppableAreaAriaLabel.setAttribute(\"aria-live\", \"assertive\");\n this.$droppableArea.appendChild(this.$droppableAreaAriaLabel);\n\n this.$input.addEventListener(\"dragenter\", (e) => this.showDropTarget(e));\n this.$input.addEventListener(\"dragleave\", () => this.hideDropTarget());\n this.$input.addEventListener(\"dragend\", () => this.hideDropTarget());\n this.$input.addEventListener(\"change\", () => this.onChange());\n this.$input.addEventListener(\"drop\", () => this.onChange());\n }\n\n isContainingFiles(dataTransfer) {\n const hasNoTypesInfo = dataTransfer.types.length === 0;\n const isDraggingFiles = dataTransfer.types.some((type) => type === \"Files\");\n return hasNoTypesInfo || isDraggingFiles;\n }\n\n showDropTarget(event, updateAriaLabel = true) {\n if (event.dataTransfer && this.isContainingFiles(event.dataTransfer)) {\n this.$droppableArea.classList.add(\n event.dataTransfer.items.length > 1\n ? \"tna-file-input__droppable--over-multiple\"\n : \"tna-file-input__droppable--over\",\n );\n\n if (updateAriaLabel) {\n this.$droppableAreaAriaLabel.textContent = \"Entered drop zone\";\n }\n }\n }\n\n hideDropTarget(updateAriaLabel = true) {\n this.$droppableArea.classList.remove(\n \"tna-file-input__droppable--over\",\n \"tna-file-input__droppable--over-multiple\",\n );\n if (updateAriaLabel) {\n this.$droppableAreaAriaLabel.textContent = \"Left drop zone\";\n }\n }\n\n onChange() {\n const files = this.$input.files;\n if (this.acceptMutltipleFiles) {\n if (files.length === 0) {\n this.$pseudoSelectFileText.textContent = `No files chosen`;\n } else {\n this.$pseudoSelectFileText.textContent = `${files.length} file${files.length > 1 ? \"s\" : \"\"} chosen`;\n }\n } else {\n this.$pseudoSelectFileText.textContent =\n files[0]?.name || `No file chosen`;\n }\n this.hideDropTarget(false);\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","__webpack_require__","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","FileInputDroppable","$module","_this","_classCallCheck","this","$input","querySelector","acceptMutltipleFiles","hasAttribute","$droppableArea","document","createElement","classList","add","insertBefore","appendChild","$pseudoSelectFileText","setAttribute","textContent","concat","$droppableButtons","$pseudoSelectFileButton","$pseudoDropFileButton","$droppableAreaAriaLabel","addEventListener","e","showDropTarget","hideDropTarget","onChange","dataTransfer","hasNoTypesInfo","types","length","isDraggingFiles","some","type","event","updateAriaLabel","arguments","undefined","isContainingFiles","items","remove","_files$","files","name"],"sourceRoot":""}
@@ -0,0 +1,99 @@
1
+ export class FileInputDroppable {
2
+ constructor($module) {
3
+ this.$module = $module;
4
+ this.$input = $module && $module.querySelector(".tna-file-input");
5
+
6
+ if (!this.$module || !this.$input) {
7
+ return;
8
+ }
9
+
10
+ this.acceptMutltipleFiles = this.$input.hasAttribute("multiple");
11
+
12
+ this.$droppableArea = document.createElement("div");
13
+ this.$droppableArea.classList.add("tna-file-input__droppable");
14
+ this.$module.insertBefore(this.$droppableArea, this.$input);
15
+ this.$droppableArea.appendChild(this.$input);
16
+
17
+ this.$pseudoSelectFileText = document.createElement("span");
18
+ this.$pseudoSelectFileText.setAttribute("aria-live", "polite");
19
+ this.$pseudoSelectFileText.classList.add(
20
+ "tna-file-input__droppable-status",
21
+ );
22
+ this.$pseudoSelectFileText.textContent = `No file${this.acceptMutltipleFiles ? "s" : ""} chosen`;
23
+ this.$droppableArea.appendChild(this.$pseudoSelectFileText);
24
+
25
+ const $droppableButtons = document.createElement("div");
26
+ $droppableButtons.classList.add(
27
+ "tna-button-group",
28
+ "tna-button-group--small",
29
+ "tna-!--margin-top-xs",
30
+ "tna-file-input__droppable-buttons",
31
+ );
32
+ this.$droppableArea.appendChild($droppableButtons);
33
+
34
+ const $pseudoSelectFileButton = document.createElement("span");
35
+ $pseudoSelectFileButton.classList.add("tna-button");
36
+ $pseudoSelectFileButton.textContent = `Choose file${this.acceptMutltipleFiles ? "s" : ""}`;
37
+ $droppableButtons.appendChild($pseudoSelectFileButton);
38
+
39
+ const $pseudoDropFileButton = document.createElement("span");
40
+ $pseudoDropFileButton.textContent = `or drop file${this.acceptMutltipleFiles ? "s" : ""}`;
41
+ $droppableButtons.appendChild($pseudoDropFileButton);
42
+
43
+ this.$droppableAreaAriaLabel = document.createElement("span");
44
+ this.$droppableAreaAriaLabel.classList.add("tna-visually-hidden");
45
+ this.$droppableAreaAriaLabel.setAttribute("aria-live", "assertive");
46
+ this.$droppableArea.appendChild(this.$droppableAreaAriaLabel);
47
+
48
+ this.$input.addEventListener("dragenter", (e) => this.showDropTarget(e));
49
+ this.$input.addEventListener("dragleave", () => this.hideDropTarget());
50
+ this.$input.addEventListener("dragend", () => this.hideDropTarget());
51
+ this.$input.addEventListener("change", () => this.onChange());
52
+ this.$input.addEventListener("drop", () => this.onChange());
53
+ }
54
+
55
+ isContainingFiles(dataTransfer) {
56
+ const hasNoTypesInfo = dataTransfer.types.length === 0;
57
+ const isDraggingFiles = dataTransfer.types.some((type) => type === "Files");
58
+ return hasNoTypesInfo || isDraggingFiles;
59
+ }
60
+
61
+ showDropTarget(event, updateAriaLabel = true) {
62
+ if (event.dataTransfer && this.isContainingFiles(event.dataTransfer)) {
63
+ this.$droppableArea.classList.add(
64
+ event.dataTransfer.items.length > 1
65
+ ? "tna-file-input__droppable--over-multiple"
66
+ : "tna-file-input__droppable--over",
67
+ );
68
+
69
+ if (updateAriaLabel) {
70
+ this.$droppableAreaAriaLabel.textContent = "Entered drop zone";
71
+ }
72
+ }
73
+ }
74
+
75
+ hideDropTarget(updateAriaLabel = true) {
76
+ this.$droppableArea.classList.remove(
77
+ "tna-file-input__droppable--over",
78
+ "tna-file-input__droppable--over-multiple",
79
+ );
80
+ if (updateAriaLabel) {
81
+ this.$droppableAreaAriaLabel.textContent = "Left drop zone";
82
+ }
83
+ }
84
+
85
+ onChange() {
86
+ const files = this.$input.files;
87
+ if (this.acceptMutltipleFiles) {
88
+ if (files.length === 0) {
89
+ this.$pseudoSelectFileText.textContent = `No files chosen`;
90
+ } else {
91
+ this.$pseudoSelectFileText.textContent = `${files.length} file${files.length > 1 ? "s" : ""} chosen`;
92
+ }
93
+ } else {
94
+ this.$pseudoSelectFileText.textContent =
95
+ files[0]?.name || `No file chosen`;
96
+ }
97
+ this.hideDropTarget(false);
98
+ }
99
+ }