Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Port release version v4.7.0 #4319

Merged
merged 2 commits into from
Oct 16, 2023
Merged

Port release version v4.7.0 #4319

merged 2 commits into from
Oct 16, 2023

Conversation

colinrotherham
Copy link
Contributor

@colinrotherham colinrotherham commented Oct 9, 2023

The last GOV.UK Frontend version bump on main was v4.6.0

The last GOV.UK Frontend version bump on support/4.x was v4.7.0

"version": "4.7.0",

Porting the v4.7.0 support branch release

This PR ports commit 8a0f9ed from release v4.7.0 into main

  1. Updates dist/** contents with current release
  2. Updates dist/VERSION.txt to v4.7.0
  3. Ensures npm version starts from v4.7.0
  4. Prevents npm outdated listing govuk-frontend

@govuk-design-system-ci govuk-design-system-ci temporarily deployed to govuk-frontend-pr-4319 October 9, 2023 18:02 Inactive
@github-actions
Copy link

github-actions bot commented Oct 9, 2023

📋 Stats

File sizes

File Size
dist/govuk-frontend-4.7.0.min.css 120.66 KiB
dist/govuk-frontend-4.7.0.min.js 51.56 KiB
dist/govuk-frontend-ie8-4.7.0.min.css 81.59 KiB
packages/govuk-frontend/dist/govuk/all.bundle.js 77.08 KiB
packages/govuk-frontend/dist/govuk/all.bundle.mjs 72.4 KiB
packages/govuk-frontend/dist/govuk/all.mjs 3.84 KiB
packages/govuk-frontend/dist/govuk/govuk-frontend-component.mjs 359 B
packages/govuk-frontend/dist/govuk/govuk-frontend.min.css 113.99 KiB
packages/govuk-frontend/dist/govuk/govuk-frontend.min.js 37.49 KiB
packages/govuk-frontend/dist/govuk/i18n.mjs 5.83 KiB

Modules

File Size
all.mjs 68.5 KiB
components/accordion/accordion.mjs 21.78 KiB
components/button/button.mjs 4.71 KiB
components/character-count/character-count.mjs 21.74 KiB
components/checkboxes/checkboxes.mjs 5.69 KiB
components/error-summary/error-summary.mjs 6.01 KiB
components/exit-this-page/exit-this-page.mjs 16.5 KiB
components/header/header.mjs 3.84 KiB
components/notification-banner/notification-banner.mjs 4.55 KiB
components/radios/radios.mjs 4.68 KiB
components/skip-link/skip-link.mjs 3.74 KiB
components/tabs/tabs.mjs 9.32 KiB

View stats and visualisations on the review app


Action run for 8ddcaaa

When the `comments.mjs` script last run for this workflow we’ve added:

```
@govuk-frontend/lib/files
@govuk-frontend/stats
```
@colinrotherham colinrotherham requested a review from a team as a code owner October 9, 2023 18:08
@govuk-design-system-ci govuk-design-system-ci temporarily deployed to govuk-frontend-pr-4319 October 9, 2023 18:08 Inactive
@github-actions
Copy link

github-actions bot commented Oct 9, 2023

Stylesheets changes to dist

diff --git a/dist/govuk-frontend-4.6.0.min.css b/dist/govuk-frontend-4.7.0.min.css
index ba4a829f3..80c3bda9a 100644
--- a/dist/govuk-frontend-4.6.0.min.css
+++ b/dist/govuk-frontend-4.7.0.min.css
@@ -1,7 +1,7 @@
 @charset "UTF-8";
 
 :root {
-    --govuk-frontend-version: "4.6.0"
+    --govuk-frontend-version: "4.7.0"
 }
 
 .govuk-link {
@@ -1083,6 +1083,16 @@
     text-size-adjust: 100%
 }
 
+@supports ((position:-webkit-sticky) or (position:sticky)) {
+    .govuk-template {
+        scroll-padding-top: 60px
+    }
+
+    .govuk-template:not(:has(.govuk-exit-this-page)) {
+        scroll-padding-top: 0
+    }
+}
+
 @media screen {
     .govuk-template {
         overflow-y: scroll
@@ -1638,6 +1648,24 @@
     left: 0
 }
 
+.govuk-back-link--inverse:link,
+.govuk-back-link--inverse:visited {
+    color: #fff
+}
+
+.govuk-back-link--inverse:active,
+.govuk-back-link--inverse:hover {
+    color: hsla(0, 0%, 100%, .99)
+}
+
+.govuk-back-link--inverse:focus {
+    color: #0b0c0c
+}
+
+.govuk-back-link--inverse:before {
+    border-color: currentcolor
+}
+
 .govuk-breadcrumbs {
     font-family: GDS Transport, arial, sans-serif;
     -webkit-font-smoothing: antialiased;
@@ -1803,6 +1831,25 @@
     }
 }
 
+.govuk-breadcrumbs--inverse,
+.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:link,
+.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:visited {
+    color: #fff
+}
+
+.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:active,
+.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:hover {
+    color: hsla(0, 0%, 100%, .99)
+}
+
+.govuk-breadcrumbs--inverse .govuk-breadcrumbs__link:focus {
+    color: #0b0c0c
+}
+
+.govuk-breadcrumbs--inverse .govuk-breadcrumbs__list-item:before {
+    border-color: currentcolor
+}
+
 .govuk-button {
     font-family: GDS Transport, arial, sans-serif;
     -webkit-font-smoothing: antialiased;
@@ -1967,6 +2014,27 @@
     background-color: #d4351c
 }
 
+.govuk-button--inverse {
+    background-color: #fff;
+    box-shadow: 0 2px 0 #144e81
+}
+
+.govuk-button--inverse,
+.govuk-button--inverse:active,
+.govuk-button--inverse:hover,
+.govuk-button--inverse:link,
+.govuk-button--inverse:visited {
+    color: #1d70b8
+}
+
+.govuk-button--inverse:hover {
+    background-color: #e8f1f8
+}
+
+.govuk-button--inverse:hover[disabled] {
+    background-color: #fff
+}
+
 .govuk-button--start {
     font-weight: 700;
     font-size: 18px;
@@ -3378,6 +3446,82 @@ screen and (forced-colors:active) {
     color: #0b0c0c
 }
 
+.govuk-exit-this-page {
+    margin-bottom: 30px;
+    position: -webkit-sticky;
+    position: sticky;
+    z-index: 1000;
+    top: 0;
+    left: 0;
+    width: 100%
+}
+
+@media (min-width:40.0625em) {
+    .govuk-exit-this-page {
+        margin-bottom: 50px;
+        display: inline-block;
+        right: 0;
+        left: auto;
+        width: auto;
+        float: right
+    }
+}
+
+.govuk-exit-this-page__button {
+    margin-bottom: 0
+}
+
+.govuk-exit-this-page__indicator {
+    display: none;
+    padding: 10px 10px 0;
+    color: inherit;
+    line-height: 0;
+    text-align: center;
+    pointer-events: none
+}
+
+.govuk-exit-this-page__indicator--visible {
+    display: block
+}
+
+.govuk-exit-this-page__indicator-light {
+    box-sizing: border-box;
+    display: inline-block;
+    width: .75em;
+    height: .75em;
+    margin: 0 .125em;
+    border-radius: 50%;
+    border: 2px solid
+}
+
+.govuk-exit-this-page__indicator-light--on {
+    border-width: .375em
+}
+
+@media only print {
+    .govuk-exit-this-page {
+        display: none
+    }
+}
+
+.govuk-exit-this-page-overlay {
+    position: fixed;
+    z-index: 9999;
+    top: 0;
+    right: 0;
+    bottom: 0;
+    left: 0;
+    background-color: #fff
+}
+
+.govuk-exit-this-page-hide-content * {
+    display: none !important
+}
+
+.govuk-exit-this-page-hide-content .govuk-exit-this-page-overlay {
+    display: block !important
+}
+
 .govuk-file-upload {
     font-family: GDS Transport, arial, sans-serif;
     -webkit-font-smoothing: antialiased;
@@ -6305,6 +6449,11 @@ screen and (-ms-high-contrast:active) {
     white-space: nowrap !important
 }
 
+.govuk-warning-text__assistive:after,
+.govuk-warning-text__assistive:before {
+    content: " "
+}
+
 .govuk-warning-text__icon {
     font-family: GDS Transport, arial, sans-serif;
     -webkit-font-smoothing: antialiased;
@@ -6392,11 +6541,24 @@ screen and (-ms-high-contrast:active) {
 }
 
 .govuk-visually-hidden {
+    position: absolute !important;
+    width: 1px !important;
+    height: 1px !important;
+    margin: 0 !important;
     padding: 0 !important;
-    border: 0 !important
+    overflow: hidden !important;
+    clip: rect(0 0 0 0) !important;
+    -webkit-clip-path: inset(50%) !important;
+    clip-path: inset(50%) !important;
+    border: 0 !important;
+    white-space: nowrap !important
+}
+
+.govuk-visually-hidden:after,
+.govuk-visually-hidden:before {
+    content: " "
 }
 
-.govuk-visually-hidden,
 .govuk-visually-hidden-focusable {
     position: absolute !important;
     width: 1px !important;
@@ -7943,4 +8105,4 @@ screen and (-ms-high-contrast:active) {
     }
 }
 
-/*# sourceMappingURL=govuk-frontend-4.6.0.min.css.map */
\ No newline at end of file
+/*# sourceMappingURL=govuk-frontend-4.7.0.min.css.map */
\ No newline at end of file

Action run for 8ddcaaa

@github-actions
Copy link

github-actions bot commented Oct 9, 2023

Other changes to dist

diff --git a/dist/VERSION.txt b/dist/VERSION.txt
index 6016e8add..f6cdf4098 100644
--- a/dist/VERSION.txt
+++ b/dist/VERSION.txt
@@ -1 +1 @@
-4.6.0
+4.7.0

Action run for 8ddcaaa

@github-actions
Copy link

github-actions bot commented Oct 9, 2023

JavaScript changes to dist

diff --git a/dist/govuk-frontend-4.6.0.min.js b/dist/govuk-frontend-4.7.0.min.js
index 13ec46c55..1c322ad48 100644
--- a/dist/govuk-frontend-4.6.0.min.js
+++ b/dist/govuk-frontend-4.7.0.min.js
@@ -11,34 +11,34 @@
     function n() {
         for (var t = function(t) {
                 var e = {},
-                    n = function(t, o) {
-                        for (var i in t)
-                            if (Object.prototype.hasOwnProperty.call(t, i)) {
-                                var s = t[i],
-                                    r = o ? o + "." + i : i;
+                    n = function(t, i) {
+                        for (var o in t)
+                            if (Object.prototype.hasOwnProperty.call(t, o)) {
+                                var s = t[o],
+                                    r = i ? i + "." + o : o;
                                 "object" == typeof s ? n(s, r) : e[r] = s
                             }
                     };
                 return n(t), e
             }, e = {}, n = 0; n < arguments.length; n++) {
-            var o = t(arguments[n]);
-            for (var i in o) Object.prototype.hasOwnProperty.call(o, i) && (e[i] = o[i])
+            var i = t(arguments[n]);
+            for (var o in i) Object.prototype.hasOwnProperty.call(i, o) && (e[o] = i[o])
         }
         return e
     }
 
-    function o(t, e) {
+    function i(t, e) {
         if (!t || "object" != typeof t) throw new Error('Provide a `configObject` of type "object".');
         if (!e || "string" != typeof e) throw new Error('Provide a `namespace` of type "string" to filter the `configObject` by.');
         var n = {};
-        for (var o in t) {
-            var i = o.split(".");
-            if (Object.prototype.hasOwnProperty.call(t, o) && i[0] === e) i.length > 1 && i.shift(), n[i.join(".")] = t[o]
+        for (var i in t) {
+            var o = i.split(".");
+            if (Object.prototype.hasOwnProperty.call(t, i) && o[0] === e) o.length > 1 && o.shift(), n[o.join(".")] = t[i]
         }
         return n
     }
 
-    function i(t) {
+    function o(t) {
         if ("string" != typeof t) return t;
         var e = t.trim();
         return "true" === e || "false" !== e && (e.length > 0 && isFinite(Number(e)) ? Number(e) : t)
@@ -46,14 +46,14 @@
 
     function s(t) {
         var e = {};
-        for (var n in t) e[n] = i(t[n]);
+        for (var n in t) e[n] = o(t[n]);
         return e
     }
 
     function r(t, e) {
         this.translations = t || {}, this.locale = e && e.locale || document.documentElement.lang || "en"
     }(function(t) {
-        var e, n, o, i;
+        var e, n, i, o;
         "defineProperty" in Object && function() {
             try {
                 return Object.defineProperty({}, "test", {
@@ -62,7 +62,7 @@
             } catch (t) {
                 return !1
             }
-        }() || (e = Object.defineProperty, n = Object.prototype.hasOwnProperty("__defineGetter__"), o = "Getters & setters cannot be defined on this javascript engine", i = "A property cannot both have accessors and be writable or have a value", Object.defineProperty = function(t, s, r) {
+        }() || (e = Object.defineProperty, n = Object.prototype.hasOwnProperty("__defineGetter__"), i = "Getters & setters cannot be defined on this javascript engine", o = "A property cannot both have accessors and be writable or have a value", Object.defineProperty = function(t, s, r) {
             if (e && (t === window || t === document || t === Element.prototype || t instanceof Element)) return e(t, s, r);
             if (null === t || !(t instanceof Object || "object" == typeof t)) throw new TypeError("Object.defineProperty called on non-object");
             if (!(r instanceof Object)) throw new TypeError("Property description must be an object");
@@ -72,14 +72,14 @@
                 u = "set" in r && typeof r.set;
             if (c) {
                 if ("function" !== c) throw new TypeError("Getter must be a function");
-                if (!n) throw new TypeError(o);
-                if (l) throw new TypeError(i);
+                if (!n) throw new TypeError(i);
+                if (l) throw new TypeError(o);
                 Object.__defineGetter__.call(t, a, r.get)
             } else t[a] = r.value;
             if (u) {
                 if ("function" !== u) throw new TypeError("Setter must be a function");
-                if (!n) throw new TypeError(o);
-                if (l) throw new TypeError(i);
+                if (!n) throw new TypeError(i);
+                if (l) throw new TypeError(o);
                 Object.__defineSetter__.call(t, a, r.set)
             }
             return "value" in r && (t[a] = r.value), t
@@ -94,23 +94,23 @@
                     window.Element = window.HTMLElement = new Function("return function Element() {}")();
                     var t, e = document.appendChild(document.createElement("body")),
                         n = e.appendChild(document.createElement("iframe")).contentWindow.document,
-                        o = Element.prototype = n.appendChild(n.createElement("*")),
-                        i = {},
+                        i = Element.prototype = n.appendChild(n.createElement("*")),
+                        o = {},
                         s = function(t, e) {
-                            var n, o, r, a = t.childNodes || [],
+                            var n, i, r, a = t.childNodes || [],
                                 l = -1;
                             if (1 === t.nodeType && t.constructor !== Element)
-                                for (n in t.constructor = Element, i) o = i[n], t[n] = o;
+                                for (n in t.constructor = Element, o) i = o[n], t[n] = i;
                             for (; r = e && a[++l];) s(r, e);
                             return t
                         },
                         r = document.getElementsByTagName("*"),
                         a = document.createElement,
                         l = 100;
-                    o.attachEvent("onpropertychange", (function(t) {
-                        for (var e, n = t.propertyName, s = !i.hasOwnProperty(n), a = o[n], l = i[n], c = -1; e = r[++c];) 1 === e.nodeType && (s || e[n] === l) && (e[n] = a);
-                        i[n] = a
-                    })), o.constructor = Element, o.hasAttribute || (o.hasAttribute = function(t) {
+                    i.attachEvent("onpropertychange", (function(t) {
+                        for (var e, n = t.propertyName, s = !o.hasOwnProperty(n), a = i[n], l = o[n], c = -1; e = r[++c];) 1 === e.nodeType && (s || e[n] === l) && (e[n] = a);
+                        o[n] = a
+                    })), i.constructor = Element, i.hasAttribute || (i.hasAttribute = function(t) {
                         return null !== this.getAttribute(t)
                     }), c() || (document.onreadystatechange = c, t = setInterval(c, 25)), document.createElement = function(t) {
                         var e = a(String(t).toLowerCase());
@@ -131,11 +131,11 @@
             })() || Object.defineProperty(Element.prototype, "dataset", {
                 get: function() {
                     for (var t = this.attributes, e = {}, n = 0; n < t.length; n++) {
-                        var o = t[n];
-                        if (o && o.name && /^data-\w[.\w-]*$/.test(o.name)) {
-                            var i = o.name,
-                                s = o.value,
-                                r = i.substr(5).replace(/-./g, (function(t) {
+                        var i = t[n];
+                        if (i && i.name && /^data-\w[.\w-]*$/.test(i.name)) {
+                            var o = i.name,
+                                s = i.value,
+                                r = o.substr(5).replace(/-./g, (function(t) {
                                     return t.charAt(1).toUpperCase()
                                 }));
                             "__defineGetter__" in Object.prototype && "__defineSetter__" in Object.prototype ? Object.defineProperty(e, r, {
@@ -147,7 +147,7 @@
                                 }),
                                 set: function(t, e) {
                                     void 0 !== e ? this.setAttribute(t, e) : this.removeAttribute(t)
-                                }.bind(this, i)
+                                }.bind(this, o)
                             }) : e[r] = s
                         }
                     }
@@ -173,10 +173,10 @@
             return t
         }, r.prototype.replacePlaceholders = function(t, e) {
             var n;
-            return this.hasIntlNumberFormatSupport() && (n = new Intl.NumberFormat(this.locale)), t.replace(/%{(.\S+)}/g, (function(t, o) {
-                if (Object.prototype.hasOwnProperty.call(e, o)) {
-                    var i = e[o];
-                    return !1 === i || "number" != typeof i && "string" != typeof i ? "" : "number" == typeof i ? n ? n.format(i) : i.toString() : i
+            return this.hasIntlNumberFormatSupport() && (n = new Intl.NumberFormat(this.locale)), t.replace(/%{(.\S+)}/g, (function(t, i) {
+                if (Object.prototype.hasOwnProperty.call(e, i)) {
+                    var o = e[i];
+                    return !1 === o || "number" != typeof o && "string" != typeof o ? "" : "number" == typeof o ? n ? n.format(o) : o.toString() : o
                 }
                 throw new Error("i18n: no data found to replace " + t + " placeholder in string")
             }))
@@ -199,8 +199,8 @@
                 e = t.split("-")[0];
             for (var n in r.pluralRulesMap)
                 if (Object.prototype.hasOwnProperty.call(r.pluralRulesMap, n))
-                    for (var o = r.pluralRulesMap[n], i = 0; i < o.length; i++)
-                        if (o[i] === t || o[i] === e) return n
+                    for (var i = r.pluralRulesMap[n], o = 0; o < i.length; o++)
+                        if (i[o] === t || i[o] === e) return n
         }, r.pluralRulesMap = {
             arabic: ["ar"],
             chinese: ["my", "zh", "id", "ja", "jv", "ko", "ms", "th", "vi"],
@@ -248,25 +248,25 @@
                 var n;
                 "DOMTokenList" in e && e.DOMTokenList && (!document.createElementNS || !document.createElementNS("http://www.w3.org/2000/svg", "svg") || document.createElementNS("http://www.w3.org/2000/svg", "svg").classList instanceof DOMTokenList) || (e.DOMTokenList = function() {
                         var e = !0,
-                            o = function(t, n, o, i) {
+                            i = function(t, n, i, o) {
                                 Object.defineProperty ? Object.defineProperty(t, n, {
-                                    configurable: !1 === e || !!i,
-                                    get: o
-                                }) : t.__defineGetter__(n, o)
+                                    configurable: !1 === e || !!o,
+                                    get: i
+                                }) : t.__defineGetter__(n, i)
                             };
                         try {
-                            o({}, "support")
+                            i({}, "support")
                         } catch (n) {
                             e = !1
                         }
                         return function(e, n) {
-                            var i = this,
+                            var o = this,
                                 s = [],
                                 r = {},
                                 a = 0,
                                 l = 0,
                                 c = function(t) {
-                                    o(i, t, (function() {
+                                    i(o, t, (function() {
                                         return d(), s[t]
                                     }), !1)
                                 },
@@ -275,40 +275,40 @@
                                         for (; l < a; ++l) c(l)
                                 },
                                 d = function() {
-                                    var t, o, i = arguments,
+                                    var t, i, o = arguments,
                                         l = /\s+/;
-                                    if (i.length)
-                                        for (o = 0; o < i.length; ++o)
-                                            if (l.test(i[o])) throw (t = new SyntaxError('String "' + i[o] + '" contains an invalid character')).code = 5, t.name = "InvalidCharacterError", t;
-                                    for ("" === (s = "object" == typeof e[n] ? ("" + e[n].baseVal).replace(/^\s+|\s+$/g, "").split(l) : ("" + e[n]).replace(/^\s+|\s+$/g, "").split(l))[0] && (s = []), r = {}, o = 0; o < s.length; ++o) r[s[o]] = !0;
+                                    if (o.length)
+                                        for (i = 0; i < o.length; ++i)
+                                            if (l.test(o[i])) throw (t = new SyntaxError('String "' + o[i] + '" contains an invalid character')).code = 5, t.name = "InvalidCharacterError", t;
+                                    for ("" === (s = "object" == typeof e[n] ? ("" + e[n].baseVal).replace(/^\s+|\s+$/g, "").split(l) : ("" + e[n]).replace(/^\s+|\s+$/g, "").split(l))[0] && (s = []), r = {}, i = 0; i < s.length; ++i) r[s[i]] = !0;
                                     a = s.length, u()
                                 };
-                            return d(), o(i, "length", (function() {
+                            return d(), i(o, "length", (function() {
                                 return d(), a
-                            })), i.toLocaleString = i.toString = function() {
+                            })), o.toLocaleString = o.toString = function() {
                                 return d(), s.join(" ")
-                            }, i.item = function(t) {
+                            }, o.item = function(t) {
                                 return d(), s[t]
-                            }, i.contains = function(t) {
+                            }, o.contains = function(t) {
                                 return d(), !!r[t]
-                            }, i.add = function() {
-                                d.apply(i, t = arguments);
-                                for (var t, o, l = 0, c = t.length; l < c; ++l) r[o = t[l]] || (s.push(o), r[o] = !0);
+                            }, o.add = function() {
+                                d.apply(o, t = arguments);
+                                for (var t, i, l = 0, c = t.length; l < c; ++l) r[i = t[l]] || (s.push(i), r[i] = !0);
                                 a !== s.length && (a = s.length >>> 0, "object" == typeof e[n] ? e[n].baseVal = s.join(" ") : e[n] = s.join(" "), u())
-                            }, i.remove = function() {
-                                d.apply(i, t = arguments);
-                                for (var t, o = {}, l = 0, c = []; l < t.length; ++l) o[t[l]] = !0, delete r[t[l]];
-                                for (l = 0; l < s.length; ++l) o[s[l]] || c.push(s[l]);
+                            }, o.remove = function() {
+                                d.apply(o, t = arguments);
+                                for (var t, i = {}, l = 0, c = []; l < t.length; ++l) i[t[l]] = !0, delete r[t[l]];
+                                for (l = 0; l < s.length; ++l) i[s[l]] || c.push(s[l]);
                                 s = c, a = c.length >>> 0, "object" == typeof e[n] ? e[n].baseVal = s.join(" ") : e[n] = s.join(" "), u()
-                            }, i.toggle = function(e, n) {
-                                return d.apply(i, [e]), t !== n ? n ? (i.add(e), !0) : (i.remove(e), !1) : r[e] ? (i.remove(e), !1) : (i.add(e), !0)
-                            }, i
+                            }, o.toggle = function(e, n) {
+                                return d.apply(o, [e]), t !== n ? n ? (o.add(e), !0) : (o.remove(e), !1) : r[e] ? (o.remove(e), !1) : (o.add(e), !0)
+                            }, o
                         }
                     }()), "classList" in (n = document.createElement("span")) && (n.classList.toggle("x", !1), n.classList.contains("x") && (n.classList.constructor.prototype.toggle = function(e) {
                         var n = arguments[1];
                         if (n === t) {
-                            var o = !this.contains(e);
-                            return this[o ? "add" : "remove"](e), o
+                            var i = !this.contains(e);
+                            return this[i ? "add" : "remove"](e), i
                         }
                         return this[(n = !!n) ? "add" : "remove"](e), n
                     })),
@@ -317,7 +317,7 @@
                         if ("classList" in t && (t.classList.add("a", "b"), !t.classList.contains("b"))) {
                             var e = t.classList.constructor.prototype.add;
                             t.classList.constructor.prototype.add = function() {
-                                for (var t = arguments, n = arguments.length, o = 0; o < n; o++) e.call(this, t[o])
+                                for (var t = arguments, n = arguments.length, i = 0; i < n; i++) e.call(this, t[i])
                             }
                         }
                     }(),
@@ -326,7 +326,7 @@
                         if ("classList" in t && (t.classList.add("a"), t.classList.add("b"), t.classList.remove("a", "b"), t.classList.contains("b"))) {
                             var e = t.classList.constructor.prototype.remove;
                             t.classList.constructor.prototype.remove = function() {
-                                for (var t = arguments, n = arguments.length, o = 0; o < n; o++) e.call(this, t[o])
+                                for (var t = arguments, n = arguments.length, i = 0; i < n; i++) e.call(this, t[i])
                             }
                         }
                     }()
@@ -336,41 +336,41 @@
             var e;
             "document" in this && "classList" in document.documentElement && "Element" in this && "classList" in Element.prototype && ((e = document.createElement("span")).classList.add("a", "b"), e.classList.contains("b")) || function(t) {
                 var n = !0,
-                    o = function(t, e, o, i) {
+                    i = function(t, e, i, o) {
                         Object.defineProperty ? Object.defineProperty(t, e, {
-                            configurable: !1 === n || !!i,
-                            get: o
-                        }) : t.__defineGetter__(e, o)
+                            configurable: !1 === n || !!o,
+                            get: i
+                        }) : t.__defineGetter__(e, i)
                     };
                 try {
-                    o({}, "support")
+                    i({}, "support")
                 } catch (e) {
                     n = !1
                 }
-                var i = function(t, e, s) {
-                    o(t.prototype, e, (function() {
+                var o = function(t, e, s) {
+                    i(t.prototype, e, (function() {
                         var t, r = this,
                             a = "__defineGetter__DEFINE_PROPERTY" + e;
                         if (r[a]) return t;
                         if (r[a] = !0, !1 === n) {
-                            for (var l, c = i.mirror || document.createElement("div"), u = c.childNodes, d = u.length, h = 0; h < d; ++h)
+                            for (var l, c = o.mirror || document.createElement("div"), u = c.childNodes, d = u.length, h = 0; h < d; ++h)
                                 if (u[h]._R === r) {
                                     l = u[h];
                                     break
                                 } l || (l = c.appendChild(document.createElement("div"))), t = DOMTokenList.call(l, r, s)
                         } else t = new DOMTokenList(r, s);
-                        return o(r, e, (function() {
+                        return i(r, e, (function() {
                             return t
                         })), delete r[a], t
                     }), !0)
                 };
-                i(t.Element, "classList", "className"), i(t.HTMLElement, "classList", "className"), i(t.HTMLLinkElement, "relList", "rel"), i(t.HTMLAnchorElement, "relList", "rel"), i(t.HTMLAreaElement, "relList", "rel")
+                o(t.Element, "classList", "className"), o(t.HTMLElement, "classList", "className"), o(t.HTMLLinkElement, "relList", "rel"), o(t.HTMLAnchorElement, "relList", "rel"), o(t.HTMLAreaElement, "relList", "rel")
             }(this)
         }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
         function(t) {
             "document" in this && "matches" in document.documentElement || (Element.prototype.matches = Element.prototype.webkitMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.mozMatchesSelector || function(t) {
-                for (var e = this, n = (e.document || e.ownerDocument).querySelectorAll(t), o = 0; n[o] && n[o] !== e;) ++o;
-                return !!n[o]
+                for (var e = this, n = (e.document || e.ownerDocument).querySelectorAll(t), i = 0; n[i] && n[i] !== e;) ++i;
+                return !!n[i]
             })
         }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}),
         function(t) {
@@ -418,14 +418,14 @@
                     var n = window.Event && window.Event.prototype || null;
                     window.Event = Window.prototype.Event = function(e, n) {
                         if (!e) throw new Error("Not enough arguments");
-                        var o;
+                        var i;
                         if ("createEvent" in document) {
-                            o = document.createEvent("Event");
-                            var i = !(!n || n.bubbles === t) && n.bubbles,
+                            i = document.createEvent("Event");
+                            var o = !(!n || n.bubbles === t) && n.bubbles,
                                 s = !(!n || n.cancelable === t) && n.cancelable;
-                            return o.initEvent(e, i, s), o
+                            return i.initEvent(e, o, s), i
                         }
-                        return (o = document.createEventObject()).type = e, o.bubbles = !(!n || n.bubbles === t) && n.bubbles, o.cancelable = !(!n || n.cancelable === t) && n.cancelable, o
+                        return (i = document.createEventObject()).type = e, i.bubbles = !(!n || n.bubbles === t) && n.bubbles, i.cancelable = !(!n || n.cancelable === t) && n.cancelable, i
                     }, n && Object.defineProperty(window.Event, "prototype", {
                         configurable: !1,
                         enumerable: !1,
@@ -434,11 +434,11 @@
                     }), "createEvent" in document || (window.addEventListener = Window.prototype.addEventListener = Document.prototype.addEventListener = Element.prototype.addEventListener = function() {
                         var t = this,
                             n = arguments[0],
-                            i = arguments[1];
+                            o = arguments[1];
                         if (t === window && n in e) throw new Error("In IE8 the event: " + n + " is not available on the window object. Please see https://github.com/Financial-Times/polyfill-service/issues/317 for more information.");
                         t._events || (t._events = {}), t._events[n] || (t._events[n] = function(e) {
-                            var n, i = t._events[e.type].list,
-                                s = i.slice(),
+                            var n, o = t._events[e.type].list,
+                                s = o.slice(),
                                 r = -1,
                                 a = s.length;
                             for (e.preventDefault = function() {
@@ -447,13 +447,13 @@
                                     e.cancelBubble = !0
                                 }, e.stopImmediatePropagation = function() {
                                     e.cancelBubble = !0, e.cancelImmediate = !0
-                                }, e.currentTarget = t, e.relatedTarget = e.fromElement || null, e.target = e.target || e.srcElement || t, e.timeStamp = (new Date).getTime(), e.clientX && (e.pageX = e.clientX + document.documentElement.scrollLeft, e.pageY = e.clientY + document.documentElement.scrollTop); ++r < a && !e.cancelImmediate;) r in s && -1 !== o(i, n = s[r]) && "function" == typeof n && n.call(t, e)
-                        }, t._events[n].list = [], t.attachEvent && t.attachEvent("on" + n, t._events[n])), t._events[n].list.push(i)
+                                }, e.currentTarget = t, e.relatedTarget = e.fromElement || null, e.target = e.target || e.srcElement || t, e.timeStamp = (new Date).getTime(), e.clientX && (e.pageX = e.clientX + document.documentElement.scrollLeft, e.pageY = e.clientY + document.documentElement.scrollTop); ++r < a && !e.cancelImmediate;) r in s && -1 !== i(o, n = s[r]) && "function" == typeof n && n.call(t, e)
+                        }, t._events[n].list = [], t.attachEvent && t.attachEvent("on" + n, t._events[n])), t._events[n].list.push(o)
                     }, window.removeEventListener = Window.prototype.removeEventListener = Document.prototype.removeEventListener = Element.prototype.removeEventListener = function() {
                         var t, e = this,
                             n = arguments[0],
-                            i = arguments[1];
-                        e._events && e._events[n] && e._events[n].list && -1 !== (t = o(e._events[n].list, i)) && (e._events[n].list.splice(t, 1), e._events[n].list.length || (e.detachEvent && e.detachEvent("on" + n, e._events[n]), delete e._events[n]))
+                            o = arguments[1];
+                        e._events && e._events[n] && e._events[n].list && -1 !== (t = i(e._events[n].list, o)) && (e._events[n].list.splice(t, 1), e._events[n].list.length || (e.detachEvent && e.detachEvent("on" + n, e._events[n]), delete e._events[n]))
                     }, window.dispatchEvent = Window.prototype.dispatchEvent = Document.prototype.dispatchEvent = Element.prototype.dispatchEvent = function(t) {
                         if (!arguments.length) throw new Error("Not enough arguments");
                         if (!t || "string" != typeof t.type) throw new Error("DOM Events Exception 0");
@@ -462,13 +462,13 @@
                         try {
                             if (!t.bubbles) {
                                 t.cancelBubble = !0;
-                                var o = function(t) {
-                                    t.cancelBubble = !0, (e || window).detachEvent("on" + n, o)
+                                var i = function(t) {
+                                    t.cancelBubble = !0, (e || window).detachEvent("on" + n, i)
                                 };
-                                this.attachEvent("on" + n, o)
+                                this.attachEvent("on" + n, i)
                             }
                             this.fireEvent("on" + n, t)
-                        } catch (i) {
+                        } catch (o) {
                             t.target = e;
                             do {
                                 t.currentTarget = e, "_events" in e && "function" == typeof e._events[n] && e._events[n].call(e, t), "function" == typeof e["on" + n] && e["on" + n].call(e, t), e = 9 === e.nodeType ? e.parentWindow : e.parentNode
@@ -482,8 +482,8 @@
                     })))
                 }
 
-                function o(t, e) {
-                    for (var n = -1, o = t.length; ++n < o;)
+                function i(t, e) {
+                    for (var n = -1, i = t.length; ++n < i;)
                         if (n in t && t[n] === e) return n;
                     return -1
                 }
@@ -493,11 +493,11 @@
             "bind" in Function.prototype || Object.defineProperty(Function.prototype, "bind", {
                 value: function(t) {
                     var e, n = Array,
-                        o = Object,
-                        i = o.prototype,
+                        i = Object,
+                        o = i.prototype,
                         s = n.prototype,
                         r = function() {},
-                        a = i.toString,
+                        a = o.toString,
                         l = "function" == typeof Symbol && "symbol" == typeof Symbol.toStringTag,
                         c = Function.prototype.toString;
                     e = function(t) {
@@ -518,13 +518,13 @@
                         p = Math.max,
                         f = this;
                     if (!e(f)) throw new TypeError("Function.prototype.bind called on incompatible " + f);
-                    for (var m, b = u.call(arguments, 1), v = p(0, f.length - b.length), g = [], y = 0; y < v; y++) h.call(g, "$" + y);
+                    for (var m, v = u.call(arguments, 1), b = p(0, f.length - v.length), g = [], y = 0; y < b; y++) h.call(g, "$" + y);
                     return m = Function("binder", "return function (" + g.join(",") + "){ return binder.apply(this, arguments); }")((function() {
                         if (this instanceof m) {
-                            var e = f.apply(this, d.call(b, u.call(arguments)));
-                            return o(e) === e ? e : this
+                            var e = f.apply(this, d.call(v, u.call(arguments)));
+                            return i(e) === e ? e : this
                         }
-                        return f.apply(t, d.call(b, u.call(arguments)))
+                        return f.apply(t, d.call(v, u.call(arguments)))
                     })), f.prototype && (r.prototype = f.prototype, m.prototype = new r, r.prototype = null), m
                 }
             })
@@ -541,11 +541,11 @@
     function l(t, e) {
         if (!(t instanceof HTMLElement)) return this;
         this.$module = t;
-        var i = {
+        var o = {
             i18n: a,
             rememberExpanded: !0
         };
-        this.config = n(i, e || {}, s(t.dataset)), this.i18n = new r(o(this.config, "i18n")), this.controlsClass = "govuk-accordion__controls", this.showAllClass = "govuk-accordion__show-all", this.showAllTextClass = "govuk-accordion__show-all-text", this.sectionClass = "govuk-accordion__section", this.sectionExpandedClass = "govuk-accordion__section--expanded", this.sectionButtonClass = "govuk-accordion__section-button", this.sectionHeaderClass = "govuk-accordion__section-header", this.sectionHeadingClass = "govuk-accordion__section-heading", this.sectionHeadingDividerClass = "govuk-accordion__section-heading-divider", this.sectionHeadingTextClass = "govuk-accordion__section-heading-text", this.sectionHeadingTextFocusClass = "govuk-accordion__section-heading-text-focus", this.sectionShowHideToggleClass = "govuk-accordion__section-toggle", this.sectionShowHideToggleFocusClass = "govuk-accordion__section-toggle-focus", this.sectionShowHideTextClass = "govuk-accordion__section-toggle-text", this.upChevronIconClass = "govuk-accordion-nav__chevron", this.downChevronIconClass = "govuk-accordion-nav__chevron--down", this.sectionSummaryClass = "govuk-accordion__section-summary", this.sectionSummaryFocusClass = "govuk-accordion__section-summary-focus", this.sectionContentClass = "govuk-accordion__section-content";
+        this.config = n(o, e || {}, s(t.dataset)), this.i18n = new r(i(this.config, "i18n")), this.controlsClass = "govuk-accordion__controls", this.showAllClass = "govuk-accordion__show-all", this.showAllTextClass = "govuk-accordion__show-all-text", this.sectionClass = "govuk-accordion__section", this.sectionExpandedClass = "govuk-accordion__section--expanded", this.sectionButtonClass = "govuk-accordion__section-button", this.sectionHeaderClass = "govuk-accordion__section-header", this.sectionHeadingClass = "govuk-accordion__section-heading", this.sectionHeadingDividerClass = "govuk-accordion__section-heading-divider", this.sectionHeadingTextClass = "govuk-accordion__section-heading-text", this.sectionHeadingTextFocusClass = "govuk-accordion__section-heading-text-focus", this.sectionShowHideToggleClass = "govuk-accordion__section-toggle", this.sectionShowHideToggleFocusClass = "govuk-accordion__section-toggle-focus", this.sectionShowHideTextClass = "govuk-accordion__section-toggle-text", this.upChevronIconClass = "govuk-accordion-nav__chevron", this.downChevronIconClass = "govuk-accordion-nav__chevron--down", this.sectionSummaryClass = "govuk-accordion__section-summary", this.sectionSummaryFocusClass = "govuk-accordion__section-summary-focus", this.sectionContentClass = "govuk-accordion__section-content";
         var l = this.$module.querySelectorAll("." + this.sectionClass);
         if (!l.length) return this;
         this.$sections = l, this.browserSupportsSessionStorage = c.checkForSessionStorage(), this.$showAllButton = null, this.$showAllIcon = null, this.$showAllText = null
@@ -563,14 +563,14 @@
     }, l.prototype.initSectionHeaders = function() {
         var t = this;
         e(this.$sections, (function(e, n) {
-            var o = e.querySelector("." + t.sectionHeaderClass);
-            o && (t.constructHeaderMarkup(o, n), t.setExpanded(t.isExpanded(e), e), o.addEventListener("click", t.onSectionToggle.bind(t, e)), t.setInitialState(e))
+            var i = e.querySelector("." + t.sectionHeaderClass);
+            i && (t.constructHeaderMarkup(i, n), t.setExpanded(t.isExpanded(e), e), i.addEventListener("click", t.onSectionToggle.bind(t, e)), t.setInitialState(e))
         }))
     }, l.prototype.constructHeaderMarkup = function(t, e) {
         var n = t.querySelector("." + this.sectionButtonClass),
-            o = t.querySelector("." + this.sectionHeadingClass),
-            i = t.querySelector("." + this.sectionSummaryClass);
-        if (n && o) {
+            i = t.querySelector("." + this.sectionHeadingClass),
+            o = t.querySelector("." + this.sectionSummaryClass);
+        if (n && i) {
             var s = document.createElement("button");
             s.setAttribute("type", "button"), s.setAttribute("aria-controls", this.$module.id + "-content-" + (e + 1).toString());
             for (var r = 0; r < n.attributes.length; r++) {
@@ -587,18 +587,18 @@
             d.classList.add(this.sectionShowHideToggleFocusClass), u.appendChild(d);
             var h = document.createElement("span"),
                 p = document.createElement("span");
-            if (p.classList.add(this.upChevronIconClass), d.appendChild(p), h.classList.add(this.sectionShowHideTextClass), d.appendChild(h), s.appendChild(l), s.appendChild(this.getButtonPunctuationEl()), i) {
+            if (p.classList.add(this.upChevronIconClass), d.appendChild(p), h.classList.add(this.sectionShowHideTextClass), d.appendChild(h), s.appendChild(l), s.appendChild(this.getButtonPunctuationEl()), o) {
                 var f = document.createElement("span"),
                     m = document.createElement("span");
                 m.classList.add(this.sectionSummaryFocusClass), f.appendChild(m);
-                for (var b = 0, v = i.attributes.length; b < v; ++b) {
-                    var g = i.attributes.item(b).nodeName,
-                        y = i.attributes.item(b).nodeValue;
+                for (var v = 0, b = o.attributes.length; v < b; ++v) {
+                    var g = o.attributes.item(v).nodeName,
+                        y = o.attributes.item(v).nodeValue;
                     f.setAttribute(g, y)
                 }
-                m.innerHTML = i.innerHTML, i.parentNode.replaceChild(f, i), s.appendChild(f), s.appendChild(this.getButtonPunctuationEl())
+                m.innerHTML = o.innerHTML, o.parentNode.replaceChild(f, o), s.appendChild(f), s.appendChild(this.getButtonPunctuationEl())
             }
-            s.appendChild(u), o.removeChild(n), o.appendChild(s)
+            s.appendChild(u), i.removeChild(n), i.appendChild(s)
         }
     }, l.prototype.onBeforeMatch = function(t) {
         var e = t.target;
@@ -612,25 +612,25 @@
     }, l.prototype.onShowOrHideAllToggle = function() {
         var t = this,
             n = this.$sections,
-            o = !this.checkIfAllSectionsOpen();
+            i = !this.checkIfAllSectionsOpen();
         e(n, (function(e) {
-            t.setExpanded(o, e), t.storeState(e)
-        })), t.updateShowAllButton(o)
+            t.setExpanded(i, e), t.storeState(e)
+        })), t.updateShowAllButton(i)
     }, l.prototype.setExpanded = function(t, e) {
         var n = e.querySelector("." + this.upChevronIconClass),
-            o = e.querySelector("." + this.sectionShowHideTextClass),
-            i = e.querySelector("." + this.sectionButtonClass),
+            i = e.querySelector("." + this.sectionShowHideTextClass),
+            o = e.querySelector("." + this.sectionButtonClass),
             s = e.querySelector("." + this.sectionContentClass);
-        if (n && o instanceof HTMLElement && i && s) {
+        if (n && i instanceof HTMLElement && o && s) {
             var r = t ? this.i18n.t("hideSection") : this.i18n.t("showSection");
-            o.innerText = r, i.setAttribute("aria-expanded", t.toString());
+            i.innerText = r, o.setAttribute("aria-expanded", t.toString());
             var a = [],
                 l = e.querySelector("." + this.sectionHeadingTextClass);
             l instanceof HTMLElement && a.push(l.innerText.trim());
             var c = e.querySelector("." + this.sectionSummaryClass);
             c instanceof HTMLElement && a.push(c.innerText.trim());
             var u = t ? this.i18n.t("hideSectionAriaLabel") : this.i18n.t("showSectionAriaLabel");
-            a.push(u), i.setAttribute("aria-label", a.join(" , ")), t ? (s.removeAttribute("hidden"), e.classList.add(this.sectionExpandedClass), n.classList.remove(this.downChevronIconClass)) : (s.setAttribute("hidden", "until-found"), e.classList.remove(this.sectionExpandedClass), n.classList.add(this.downChevronIconClass));
+            a.push(u), o.setAttribute("aria-label", a.join(" , ")), t ? (s.removeAttribute("hidden"), e.classList.add(this.sectionExpandedClass), n.classList.remove(this.downChevronIconClass)) : (s.setAttribute("hidden", "until-found"), e.classList.remove(this.sectionExpandedClass), n.classList.add(this.downChevronIconClass));
             var d = this.checkIfAllSectionsOpen();
             this.updateShowAllButton(d)
         }
@@ -657,8 +657,8 @@
             var e = t.querySelector("." + this.sectionButtonClass);
             if (e) {
                 var n = e.getAttribute("aria-controls"),
-                    o = e.getAttribute("aria-expanded");
-                n && o && window.sessionStorage.setItem(n, o)
+                    i = e.getAttribute("aria-expanded");
+                n && i && window.sessionStorage.setItem(n, i)
             }
         }
     }, l.prototype.setInitialState = function(t) {
@@ -666,8 +666,8 @@
             var e = t.querySelector("." + this.sectionButtonClass);
             if (e) {
                 var n = e.getAttribute("aria-controls"),
-                    o = n ? window.sessionStorage.getItem(n) : null;
-                null !== o && this.setExpanded("true" === o, t)
+                    i = n ? window.sessionStorage.getItem(n) : null;
+                null !== i && this.setExpanded("true" === i, t)
             }
         }
     }, l.prototype.getButtonPunctuationEl = function() {
@@ -723,8 +723,8 @@
 
     function h(t, e) {
         if (!(t instanceof HTMLElement)) return this;
-        var i = t.querySelector(".govuk-js-character-count");
-        if (!(i instanceof HTMLTextAreaElement || i instanceof HTMLInputElement)) return this;
+        var o = t.querySelector(".govuk-js-character-count");
+        if (!(o instanceof HTMLTextAreaElement || o instanceof HTMLInputElement)) return this;
         var a, l, c, u = {
                 threshold: 0,
                 i18n: d
@@ -734,14 +734,14 @@
         if (("maxwords" in h || "maxlength" in h) && (p = {
                 maxlength: !1,
                 maxwords: !1
-            }), this.config = n(u, e || {}, p, h), this.i18n = new r(o(this.config, "i18n"), {
+            }), this.config = n(u, e || {}, p, h), this.i18n = new r(i(this.config, "i18n"), {
                 locale: (a = t, l = "lang", c = a.closest("[" + l + "]"), c ? c.getAttribute(l) : null)
             }), this.maxLength = Infinity, "maxwords" in this.config && this.config.maxwords) this.maxLength = this.config.maxwords;
         else {
             if (!("maxlength" in this.config) || !this.config.maxlength) return;
             this.maxLength = this.config.maxlength
         }
-        this.$module = t, this.$textarea = i, this.$visibleCountMessage = null, this.$screenReaderCountMessage = null, this.lastInputTimestamp = null, this.lastInputValue = "", this.valueChecker = null
+        this.$module = t, this.$textarea = o, this.$visibleCountMessage = null, this.$screenReaderCountMessage = null, this.lastInputTimestamp = null, this.lastInputValue = "", this.valueChecker = null
     }
 
     function p(t) {
@@ -760,8 +760,8 @@
                 })), t.insertAdjacentElement("afterend", e);
                 var n = document.createElement("div");
                 n.className = "govuk-character-count__sr-status govuk-visually-hidden", n.setAttribute("aria-live", "polite"), this.$screenReaderCountMessage = n, e.insertAdjacentElement("afterend", n);
-                var o = document.createElement("div");
-                o.className = e.className, o.classList.add("govuk-character-count__status"), o.setAttribute("aria-hidden", "true"), this.$visibleCountMessage = o, e.insertAdjacentElement("afterend", o), e.classList.add("govuk-visually-hidden"), t.removeAttribute("maxlength"), this.bindChangeEvents(), window.addEventListener("onpageshow" in window ? "pageshow" : "DOMContentLoaded", this.updateCountMessage.bind(this)), this.updateCountMessage()
+                var i = document.createElement("div");
+                i.className = e.className, i.classList.add("govuk-character-count__status"), i.setAttribute("aria-hidden", "true"), this.$visibleCountMessage = i, e.insertAdjacentElement("afterend", i), e.classList.add("govuk-visually-hidden"), t.removeAttribute("maxlength"), this.bindChangeEvents(), window.addEventListener("onpageshow" in window ? "pageshow" : "DOMContentLoaded", this.updateCountMessage.bind(this)), this.updateCountMessage()
             }
         }
     }, h.prototype.bindChangeEvents = function() {
@@ -819,8 +819,8 @@
         if (e) {
             var n = document.getElementById(e);
             if (n && n.classList.contains("govuk-checkboxes__conditional")) {
-                var o = t.checked;
-                t.setAttribute("aria-expanded", o.toString()), n.classList.toggle("govuk-checkboxes__conditional--hidden", !o)
+                var i = t.checked;
+                t.setAttribute("aria-expanded", i.toString()), n.classList.toggle("govuk-checkboxes__conditional--hidden", !i)
             }
         }
     }, p.prototype.unCheckAllInputsExcept = function(t) {
@@ -850,13 +850,89 @@
             disableAutoFocus: !1
         }, e || {}, s(t.dataset))
     }
+    f.prototype.init = function() {
+        this.$module && ("HTMLDetailsElement" in window && this.$module instanceof HTMLDetailsElement || this.polyfillDetails())
+    }, f.prototype.polyfillDetails = function() {
+        var t, e = this.$module,
+            n = this.$summary = e.getElementsByTagName("summary").item(0),
+            i = this.$content = e.getElementsByTagName("div").item(0);
+        n && i && (i.id || (i.id = "details-content-" + (t = (new Date).getTime(), "undefined" != typeof window.performance && "function" == typeof window.performance.now && (t += window.performance.now()), "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function(e) {
+            var n = (t + 16 * Math.random()) % 16 | 0;
+            return t = Math.floor(t / 16), ("x" === e ? n : 3 & n | 8).toString(16)
+        })))), e.setAttribute("role", "group"), n.setAttribute("role", "button"), n.setAttribute("aria-controls", i.id), n.tabIndex = 0, this.$module.hasAttribute("open") ? n.setAttribute("aria-expanded", "true") : (n.setAttribute("aria-expanded", "false"), i.style.display = "none"), this.polyfillHandleInputs(this.polyfillSetAttributes.bind(this)))
+    }, f.prototype.polyfillSetAttributes = function() {
+        return this.$module.hasAttribute("open") ? (this.$module.removeAttribute("open"), this.$summary.setAttribute("aria-expanded", "false"), this.$content.style.display = "none") : (this.$module.setAttribute("open", "open"), this.$summary.setAttribute("aria-expanded", "true"), this.$content.style.display = ""), !0
+    }, f.prototype.polyfillHandleInputs = function(t) {
+        this.$summary.addEventListener("keypress", (function(e) {
+            var n = e.target;
+            13 !== e.keyCode && 32 !== e.keyCode || n instanceof HTMLElement && "summary" === n.nodeName.toLowerCase() && (e.preventDefault(), n.click ? n.click() : t(e))
+        })), this.$summary.addEventListener("keyup", (function(t) {
+            var e = t.target;
+            32 === t.keyCode && e instanceof HTMLElement && "summary" === e.nodeName.toLowerCase() && t.preventDefault()
+        })), this.$summary.addEventListener("click", t)
+    }, m.prototype.init = function() {
+        if (this.$module) {
+            var t = this.$module;
+            this.setFocus(), t.addEventListener("click", this.handleClick.bind(this))
+        }
+    }, m.prototype.setFocus = function() {
+        var t = this.$module;
+        this.config.disableAutoFocus || (t.setAttribute("tabindex", "-1"), t.addEventListener("blur", (function() {
+            t.removeAttribute("tabindex")
+        })), t.focus())
+    }, m.prototype.handleClick = function(t) {
+        var e = t.target;
+        this.focusTarget(e) && t.preventDefault()
+    }, m.prototype.focusTarget = function(t) {
+        if (!(t instanceof HTMLAnchorElement)) return !1;
+        var e = this.getFragmentFromUrl(t.href);
+        if (!e) return !1;
+        var n = document.getElementById(e);
+        if (!n) return !1;
+        var i = this.getAssociatedLegendOrLabel(n);
+        return !!i && (i.scrollIntoView(), n.focus({
+            preventScroll: !0
+        }), !0)
+    }, m.prototype.getFragmentFromUrl = function(t) {
+        return -1 === t.indexOf("#") ? undefined : t.split("#").pop()
+    }, m.prototype.getAssociatedLegendOrLabel = function(t) {
+        var e = t.closest("fieldset");
+        if (e) {
+            var n = e.getElementsByTagName("legend");
+            if (n.length) {
+                var i = n[0];
+                if (t instanceof HTMLInputElement && ("checkbox" === t.type || "radio" === t.type)) return i;
+                var o = i.getBoundingClientRect().top,
+                    s = t.getBoundingClientRect();
+                if (s.height && window.innerHeight)
+                    if (s.top + s.height - o < window.innerHeight / 2) return i
+            }
+        }
+        return document.querySelector("label[for='" + t.getAttribute("id") + "']") || t.closest("label")
+    };
+    var v = {
+        activated: "Loading.",
+        timedOut: "Exit this page expired.",
+        pressTwoMoreTimes: "Shift, press 2 more times to exit.",
+        pressOneMoreTime: "Shift, press 1 more time to exit."
+    };
 
-    function b(t) {
+    function b(t, e) {
+        var o = {
+            i18n: v
+        };
+        if (!(t instanceof HTMLElement)) return this;
+        var a = t.querySelector(".govuk-exit-this-page__button");
+        if (!(a instanceof HTMLElement)) return this;
+        this.config = n(o, e || {}, s(t.dataset)), this.i18n = new r(i(this.config, "i18n")), this.$module = t, this.$button = a, this.$skiplinkButton = document.querySelector(".govuk-js-exit-this-page-skiplink"), this.$updateSpan = null, this.$indicatorContainer = null, this.$overlay = null, this.keypressCounter = 0, this.lastKeyWasModified = !1, this.timeoutTime = 5e3, this.keypressTimeoutId = null, this.timeoutMessageId = null
+    }
+
+    function g(t) {
         if (!(t instanceof HTMLElement)) return this;
         this.$module = t, this.$menuButton = t.querySelector(".govuk-js-header-toggle"), this.$menu = this.$menuButton && t.querySelector("#" + this.$menuButton.getAttribute("aria-controls")), this.menuIsOpen = !1, this.mql = null
     }
 
-    function v(t, e) {
+    function y(t, e) {
         if (!(t instanceof HTMLElement)) return this;
         this.$module = t;
         this.config = n({
@@ -864,19 +940,19 @@
         }, e || {}, s(t.dataset))
     }
 
-    function g(t) {
+    function w(t) {
         if (!(t instanceof HTMLElement)) return this;
         var e = t.querySelectorAll('input[type="radio"]');
         if (!e.length) return this;
         this.$module = t, this.$inputs = e
     }
 
-    function y(t) {
+    function E(t) {
         if (!(t instanceof HTMLAnchorElement)) return this;
         this.$module = t, this.$linkedElement = null, this.linkedElementListener = !1
     }
 
-    function w(t) {
+    function k(t) {
         if (!(t instanceof HTMLElement)) return this;
         var e = t.querySelectorAll("a.govuk-tabs__tab");
         if (!e.length) return this;
@@ -887,79 +963,51 @@
             down: 40
         }, this.jsHiddenClass = "govuk-tabs__panel--hidden", this.boundTabClick = this.onTabClick.bind(this), this.boundTabKeydown = this.onTabKeydown.bind(this), this.boundOnHashChange = this.onHashChange.bind(this), this.changingHash = !1
     }
-    f.prototype.init = function() {
-            this.$module && ("HTMLDetailsElement" in window && this.$module instanceof HTMLDetailsElement || this.polyfillDetails())
-        }, f.prototype.polyfillDetails = function() {
-            var t, e = this.$module,
-                n = this.$summary = e.getElementsByTagName("summary").item(0),
-                o = this.$content = e.getElementsByTagName("div").item(0);
-            n && o && (o.id || (o.id = "details-content-" + (t = (new Date).getTime(), "undefined" != typeof window.performance && "function" == typeof window.performance.now && (t += window.performance.now()), "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (function(e) {
-                var n = (t + 16 * Math.random()) % 16 | 0;
-                return t = Math.floor(t / 16), ("x" === e ? n : 3 & n | 8).toString(16)
-            })))), e.setAttribute("role", "group"), n.setAttribute("role", "button"), n.setAttribute("aria-controls", o.id), n.tabIndex = 0, this.$module.hasAttribute("open") ? n.setAttribute("aria-expanded", "true") : (n.setAttribute("aria-expanded", "false"), o.style.display = "none"), this.polyfillHandleInputs(this.polyfillSetAttributes.bind(this)))
-        }, f.prototype.polyfillSetAttributes = function() {
-            return this.$module.hasAttribute("open") ? (this.$module.removeAttribute("open"), this.$summary.setAttribute("aria-expanded", "false"), this.$content.style.display = "none") : (this.$module.setAttribute("open", "open"), this.$summary.setAttribute("aria-expanded", "true"), this.$content.style.display = ""), !0
-        }, f.prototype.polyfillHandleInputs = function(t) {
-            this.$summary.addEventListener("keypress", (function(e) {
-                var n = e.target;
-                13 !== e.keyCode && 32 !== e.keyCode || n instanceof HTMLElement && "summary" === n.nodeName.toLowerCase() && (e.preventDefault(), n.click ? n.click() : t(e))
-            })), this.$summary.addEventListener("keyup", (function(t) {
-                var e = t.target;
-                32 === t.keyCode && e instanceof HTMLElement && "summary" === e.nodeName.toLowerCase() && t.preventDefault()
-            })), this.$summary.addEventListener("click", t)
-        }, m.prototype.init = function() {
-            if (this.$module) {
-                var t = this.$module;
-                this.setFocus(), t.addEventListener("click", this.handleClick.bind(this))
+    b.prototype.initUpdateSpan = function() {
+            this.$updateSpan = document.createElement("span"), this.$updateSpan.setAttribute("role", "status"), this.$updateSpan.className = "govuk-visually-hidden", this.$module.appendChild(this.$updateSpan)
+        }, b.prototype.initButtonClickHandler = function() {
+            this.$button.addEventListener("click", this.handleClick.bind(this)), this.$skiplinkButton && this.$skiplinkButton.addEventListener("click", this.handleClick.bind(this))
+        }, b.prototype.buildIndicator = function() {
+            this.$indicatorContainer = document.createElement("div"), this.$indicatorContainer.className = "govuk-exit-this-page__indicator", this.$indicatorContainer.setAttribute("aria-hidden", "true");
+            for (var t = 0; t < 3; t++) {
+                var e = document.createElement("div");
+                e.className = "govuk-exit-this-page__indicator-light", this.$indicatorContainer.appendChild(e)
             }
-        }, m.prototype.setFocus = function() {
-            var t = this.$module;
-            this.config.disableAutoFocus || (t.setAttribute("tabindex", "-1"), t.addEventListener("blur", (function() {
-                t.removeAttribute("tabindex")
-            })), t.focus())
-        }, m.prototype.handleClick = function(t) {
-            var e = t.target;
-            this.focusTarget(e) && t.preventDefault()
-        }, m.prototype.focusTarget = function(t) {
-            if (!(t instanceof HTMLAnchorElement)) return !1;
-            var e = this.getFragmentFromUrl(t.href);
-            if (!e) return !1;
-            var n = document.getElementById(e);
-            if (!n) return !1;
-            var o = this.getAssociatedLegendOrLabel(n);
-            return !!o && (o.scrollIntoView(), n.focus({
-                preventScroll: !0
-            }), !0)
-        }, m.prototype.getFragmentFromUrl = function(t) {
-            return -1 === t.indexOf("#") ? undefined : t.split("#").pop()
-        }, m.prototype.getAssociatedLegendOrLabel = function(t) {
-            var e = t.closest("fieldset");
-            if (e) {
-                var n = e.getElementsByTagName("legend");
-                if (n.length) {
-                    var o = n[0];
-                    if (t instanceof HTMLInputElement && ("checkbox" === t.type || "radio" === t.type)) return o;
-                    var i = o.getBoundingClientRect().top,
-                        s = t.getBoundingClientRect();
-                    if (s.height && window.innerHeight)
-                        if (s.top + s.height - i < window.innerHeight / 2) return o
-                }
-            }
-            return document.querySelector("label[for='" + t.getAttribute("id") + "']") || t.closest("label")
+            this.$button.appendChild(this.$indicatorContainer)
+        }, b.prototype.updateIndicator = function() {
+            this.keypressCounter > 0 ? this.$indicatorContainer.classList.add("govuk-exit-this-page__indicator--visible") : this.$indicatorContainer.classList.remove("govuk-exit-this-page__indicator--visible"), e(this.$indicatorContainer.querySelectorAll(".govuk-exit-this-page__indicator-light"), function(t, e) {
+                t.classList.toggle("govuk-exit-this-page__indicator-light--on", e < this.keypressCounter)
+            }.bind(this))
+        }, b.prototype.exitPage = function() {
+            this.$updateSpan.innerText = "", document.body.classList.add("govuk-exit-this-page-hide-content"), this.$overlay = document.createElement("div"), this.$overlay.className = "govuk-exit-this-page-overlay", this.$overlay.setAttribute("role", "alert"), document.body.appendChild(this.$overlay), this.$overlay.innerText = this.i18n.t("activated"), window.location.href = this.$button.getAttribute("href")
+        }, b.prototype.handleClick = function(t) {
+            t.preventDefault(), this.exitPage()
+        }, b.prototype.handleKeypress = function(t) {
+            "Shift" !== t.key && 16 !== t.keyCode && 16 !== t.which || this.lastKeyWasModified ? null !== this.keypressTimeoutId && this.resetKeypressTimer() : (this.keypressCounter += 1, this.updateIndicator(), null !== this.timeoutMessageId && (clearTimeout(this.timeoutMessageId), this.timeoutMessageId = null), this.keypressCounter >= 3 ? (this.keypressCounter = 0, null !== this.keypressTimeoutId && (clearTimeout(this.keypressTimeoutId), this.keypressTimeoutId = null), this.exitPage()) : 1 === this.keypressCounter ? this.$updateSpan.innerText = this.i18n.t("pressTwoMoreTimes") : this.$updateSpan.innerText = this.i18n.t("pressOneMoreTime"), this.setKeypressTimer()), this.lastKeyWasModified = t.shiftKey
+        }, b.prototype.setKeypressTimer = function() {
+            clearTimeout(this.keypressTimeoutId), this.keypressTimeoutId = setTimeout(this.resetKeypressTimer.bind(this), this.timeoutTime)
+        }, b.prototype.resetKeypressTimer = function() {
+            clearTimeout(this.keypressTimeoutId), this.keypressTimeoutId = null, this.keypressCounter = 0, this.$updateSpan.innerText = this.i18n.t("timedOut"), this.timeoutMessageId = setTimeout(function() {
+                this.$updateSpan.innerText = ""
+            }.bind(this), this.timeoutTime), this.updateIndicator()
+        }, b.prototype.resetPage = function() {
+            document.body.classList.remove("govuk-exit-this-page-hide-content"), this.$overlay && (this.$overlay.remove(), this.$overlay = null), this.$updateSpan.setAttribute("role", "status"), this.$updateSpan.innerText = "", this.updateIndicator(), this.keypressTimeoutId && clearTimeout(this.keypressTimeoutId), this.timeoutMessageId && clearTimeout(this.timeoutMessageId)
         }, b.prototype.init = function() {
+            this.buildIndicator(), this.initUpdateSpan(), this.initButtonClickHandler(), "govukFrontendExitThisPageKeypress" in document.body.dataset || (document.addEventListener("keyup", this.handleKeypress.bind(this), !0), document.body.dataset.govukFrontendExitThisPageKeypress = "true"), window.addEventListener("onpageshow" in window ? "pageshow" : "DOMContentLoaded", this.resetPage.bind(this))
+        }, g.prototype.init = function() {
             this.$module && this.$menuButton && this.$menu && ("matchMedia" in window ? (this.mql = window.matchMedia("(min-width: 48.0625em)"), "addEventListener" in this.mql ? this.mql.addEventListener("change", this.syncState.bind(this)) : this.mql.addListener(this.syncState.bind(this)), this.syncState(), this.$menuButton.addEventListener("click", this.handleMenuButtonClick.bind(this))) : this.$menuButton.setAttribute("hidden", ""))
-        }, b.prototype.syncState = function() {
+        }, g.prototype.syncState = function() {
             this.mql.matches ? (this.$menu.removeAttribute("hidden"), this.$menuButton.setAttribute("hidden", "")) : (this.$menuButton.removeAttribute("hidden"), this.$menuButton.setAttribute("aria-expanded", this.menuIsOpen.toString()), this.menuIsOpen ? this.$menu.removeAttribute("hidden") : this.$menu.setAttribute("hidden", ""))
-        }, b.prototype.handleMenuButtonClick = function() {
+        }, g.prototype.handleMenuButtonClick = function() {
             this.menuIsOpen = !this.menuIsOpen, this.syncState()
-        }, v.prototype.init = function() {
+        }, y.prototype.init = function() {
             this.$module && this.setFocus()
-        }, v.prototype.setFocus = function() {
+        }, y.prototype.setFocus = function() {
             var t = this.$module;
             this.config.disableAutoFocus || "alert" === t.getAttribute("role") && (t.getAttribute("tabindex") || (t.setAttribute("tabindex", "-1"), t.addEventListener("blur", (function() {
                 t.removeAttribute("tabindex")
             }))), t.focus())
-        }, g.prototype.init = function() {
+        }, w.prototype.init = function() {
             if (this.$module && this.$inputs) {
                 var t = this.$module;
                 e(this.$inputs, (function(t) {
@@ -967,43 +1015,43 @@
                     e && document.getElementById(e) && (t.setAttribute("aria-controls", e), t.removeAttribute("data-aria-controls"))
                 })), window.addEventListener("onpageshow" in window ? "pageshow" : "DOMContentLoaded", this.syncAllConditionalReveals.bind(this)), this.syncAllConditionalReveals(), t.addEventListener("click", this.handleClick.bind(this))
             }
-        }, g.prototype.syncAllConditionalReveals = function() {
+        }, w.prototype.syncAllConditionalReveals = function() {
             e(this.$inputs, this.syncConditionalRevealWithInputState.bind(this))
-        }, g.prototype.syncConditionalRevealWithInputState = function(t) {
+        }, w.prototype.syncConditionalRevealWithInputState = function(t) {
             var e = t.getAttribute("aria-controls");
             if (e) {
                 var n = document.getElementById(e);
                 if (n && n.classList.contains("govuk-radios__conditional")) {
-                    var o = t.checked;
-                    t.setAttribute("aria-expanded", o.toString()), n.classList.toggle("govuk-radios__conditional--hidden", !o)
+                    var i = t.checked;
+                    t.setAttribute("aria-expanded", i.toString()), n.classList.toggle("govuk-radios__conditional--hidden", !i)
                 }
             }
-        }, g.prototype.handleClick = function(t) {
+        }, w.prototype.handleClick = function(t) {
             var n = this,
-                o = t.target;
-            if (o instanceof HTMLInputElement && "radio" === o.type) {
-                var i = document.querySelectorAll('input[type="radio"][aria-controls]'),
-                    s = o.form,
-                    r = o.name;
-                e(i, (function(t) {
+                i = t.target;
+            if (i instanceof HTMLInputElement && "radio" === i.type) {
+                var o = document.querySelectorAll('input[type="radio"][aria-controls]'),
+                    s = i.form,
+                    r = i.name;
+                e(o, (function(t) {
                     var e = t.form === s;
                     t.name === r && e && n.syncConditionalRevealWithInputState(t)
                 }))
             }
-        }, y.prototype.init = function() {
+        }, E.prototype.init = function() {
             if (this.$module) {
                 var t = this.getLinkedElement();
                 t && (this.$linkedElement = t, this.$module.addEventListener("click", this.focusLinkedElement.bind(this)))
             }
-        }, y.prototype.getLinkedElement = function() {
+        }, E.prototype.getLinkedElement = function() {
             var t = this.getFragmentFromUrl();
             return t ? document.getElementById(t) : null
-        }, y.prototype.focusLinkedElement = function() {
+        }, E.prototype.focusLinkedElement = function() {
             var t = this.$linkedElement;
             t.getAttribute("tabindex") || (t.setAttribute("tabindex", "-1"), t.classList.add("govuk-skip-link-focused-element"), this.linkedElementListener || (this.$linkedElement.addEventListener("blur", this.removeFocusProperties.bind(this)), this.linkedElementListener = !0)), t.focus()
-        }, y.prototype.removeFocusProperties = function() {
+        }, E.prototype.removeFocusProperties = function() {
             this.$linkedElement.removeAttribute("tabindex"), this.$linkedElement.classList.remove("govuk-skip-link-focused-element")
-        }, y.prototype.getFragmentFromUrl = function() {
+        }, E.prototype.getFragmentFromUrl = function() {
             if (this.$module.hash) return this.$module.hash.split("#").pop()
         },
         function(t) {
@@ -1021,39 +1069,39 @@
                     return t
                 }
             })
-        }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}), w.prototype.init = function() {
+        }.call("object" == typeof window && window || "object" == typeof self && self || "object" == typeof global && global || {}), k.prototype.init = function() {
             this.$module && this.$tabs && ("function" == typeof window.matchMedia ? this.setupResponsiveChecks() : this.setup())
-        }, w.prototype.setupResponsiveChecks = function() {
+        }, k.prototype.setupResponsiveChecks = function() {
             this.mql = window.matchMedia("(min-width: 40.0625em)"), this.mql.addListener(this.checkMode.bind(this)), this.checkMode()
-        }, w.prototype.checkMode = function() {
+        }, k.prototype.checkMode = function() {
             this.mql.matches ? this.setup() : this.teardown()
-        }, w.prototype.setup = function() {
+        }, k.prototype.setup = function() {
             var t = this,
                 n = this.$module,
-                o = this.$tabs,
-                i = n.querySelector(".govuk-tabs__list"),
+                i = this.$tabs,
+                o = n.querySelector(".govuk-tabs__list"),
                 s = n.querySelectorAll(".govuk-tabs__list-item");
-            if (o && i && s) {
-                i.setAttribute("role", "tablist"), e(s, (function(t) {
+            if (i && o && s) {
+                o.setAttribute("role", "tablist"), e(s, (function(t) {
                     t.setAttribute("role", "presentation")
-                })), e(o, (function(e) {
+                })), e(i, (function(e) {
                     t.setAttributes(e), e.addEventListener("click", t.boundTabClick, !0), e.addEventListener("keydown", t.boundTabKeydown, !0), t.hideTab(e)
                 }));
                 var r = this.getTab(window.location.hash) || this.$tabs[0];
                 r && (this.showTab(r), window.addEventListener("hashchange", this.boundOnHashChange, !0))
             }
-        }, w.prototype.teardown = function() {
+        }, k.prototype.teardown = function() {
             var t = this,
                 n = this.$module,
-                o = this.$tabs,
-                i = n.querySelector(".govuk-tabs__list"),
+                i = this.$tabs,
+                o = n.querySelector(".govuk-tabs__list"),
                 s = n.querySelectorAll("a.govuk-tabs__list-item");
-            o && i && s && (i.removeAttribute("role"), e(s, (function(t) {
+            i && o && s && (o.removeAttribute("role"), e(s, (function(t) {
                 t.removeAttribute("role")
-            })), e(o, (function(e) {
+            })), e(i, (function(e) {
                 e.removeEventListener("click", t.boundTabClick, !0), e.removeEventListener("keydown", t.boundTabKeydown, !0), t.unsetAttributes(e)
             })), window.removeEventListener("hashchange", this.boundOnHashChange, !0))
-        }, w.prototype.onHashChange = function() {
+        }, k.prototype.onHashChange = function() {
             var t = window.location.hash,
                 e = this.getTab(t);
             if (e)
@@ -1062,32 +1110,32 @@
                     var n = this.getCurrentTab();
                     n && (this.hideTab(n), this.showTab(e), e.focus())
                 }
-        }, w.prototype.hideTab = function(t) {
+        }, k.prototype.hideTab = function(t) {
             this.unhighlightTab(t), this.hidePanel(t)
-        }, w.prototype.showTab = function(t) {
+        }, k.prototype.showTab = function(t) {
             this.highlightTab(t), this.showPanel(t)
-        }, w.prototype.getTab = function(t) {
+        }, k.prototype.getTab = function(t) {
             return this.$module.querySelector('a.govuk-tabs__tab[href="' + t + '"]')
-        }, w.prototype.setAttributes = function(t) {
+        }, k.prototype.setAttributes = function(t) {
             var e = this.getHref(t).slice(1);
             t.setAttribute("id", "tab_" + e), t.setAttribute("role", "tab"), t.setAttribute("aria-controls", e), t.setAttribute("aria-selected", "false"), t.setAttribute("tabindex", "-1");
             var n = this.getPanel(t);
             n && (n.setAttribute("role", "tabpanel"), n.setAttribute("aria-labelledby", t.id), n.classList.add(this.jsHiddenClass))
-        }, w.prototype.unsetAttributes = function(t) {
+        }, k.prototype.unsetAttributes = function(t) {
             t.removeAttribute("id"), t.removeAttribute("role"), t.removeAttribute("aria-controls"), t.removeAttribute("aria-selected"), t.removeAttribute("tabindex");
             var e = this.getPanel(t);
             e && (e.removeAttribute("role"), e.removeAttribute("aria-labelledby"), e.classList.remove(this.jsHiddenClass))
-        }, w.prototype.onTabClick = function(t) {
+        }, k.prototype.onTabClick = function(t) {
             var e = this.getCurrentTab(),
                 n = t.currentTarget;
             e && n instanceof HTMLAnchorElement && (t.preventDefault(), this.hideTab(e), this.showTab(n), this.createHistoryEntry(n))
-        }, w.prototype.createHistoryEntry = function(t) {
+        }, k.prototype.createHistoryEntry = function(t) {
             var e = this.getPanel(t);
             if (e) {
                 var n = e.id;
                 e.id = "", this.changingHash = !0, window.location.hash = this.getHref(t).slice(1), e.id = n
             }
-        }, w.prototype.onTabKeydown = function(t) {
+        }, k.prototype.onTabKeydown = function(t) {
             switch (t.keyCode) {
                 case this.keys.left:
                 case this.keys.up:
@@ -1097,7 +1145,7 @@
                 case this.keys.down:
                     this.activateNextTab(), t.preventDefault()
             }
-        }, w.prototype.activateNextTab = function() {
+        }, k.prototype.activateNextTab = function() {
             var t = this.getCurrentTab();
             if (t && t.parentElement) {
                 var e = t.parentElement.nextElementSibling;
@@ -1106,7 +1154,7 @@
                     n && (this.hideTab(t), this.showTab(n), n.focus(), this.createHistoryEntry(n))
                 }
             }
-        }, w.prototype.activatePreviousTab = function() {
+        }, k.prototype.activatePreviousTab = function() {
             var t = this.getCurrentTab();
             if (t && t.parentElement) {
                 var e = t.parentElement.previousElementSibling;
@@ -1115,21 +1163,21 @@
                     n && (this.hideTab(t), this.showTab(n), n.focus(), this.createHistoryEntry(n))
                 }
             }
-        }, w.prototype.getPanel = function(t) {
+        }, k.prototype.getPanel = function(t) {
             return this.$module.querySelector(this.getHref(t))
-        }, w.prototype.showPanel = function(t) {
+        }, k.prototype.showPanel = function(t) {
             var e = this.getPanel(t);
             e && e.classList.remove(this.jsHiddenClass)
-        }, w.prototype.hidePanel = function(t) {
+        }, k.prototype.hidePanel = function(t) {
             var e = this.getPanel(t);
             e && e.classList.add(this.jsHiddenClass)
-        }, w.prototype.unhighlightTab = function(t) {
+        }, k.prototype.unhighlightTab = function(t) {
             t.parentElement && (t.setAttribute("aria-selected", "false"), t.parentElement.classList.remove("govuk-tabs__list-item--selected"), t.setAttribute("tabindex", "-1"))
-        }, w.prototype.highlightTab = function(t) {
+        }, k.prototype.highlightTab = function(t) {
             t.parentElement && (t.setAttribute("aria-selected", "true"), t.parentElement.classList.add("govuk-tabs__list-item--selected"), t.setAttribute("tabindex", "0"))
-        }, w.prototype.getCurrentTab = function() {
+        }, k.prototype.getCurrentTab = function() {
             return this.$module.querySelector(".govuk-tabs__list-item--selected a.govuk-tabs__tab")
-        }, w.prototype.getHref = function(t) {
+        }, k.prototype.getHref = function(t) {
             var e = t.getAttribute("href");
             return e.slice(e.indexOf("#"), e.length)
         }, t.initAll = function(t) {
@@ -1145,18 +1193,20 @@
             })), e(n.querySelectorAll('[data-module="govuk-details"]'), (function(t) {
                 new f(t).init()
             }));
-            var o = n.querySelector('[data-module="govuk-error-summary"]');
-            o && new m(o, t.errorSummary).init();
-            var i = n.querySelector('[data-module="govuk-header"]');
-            i && new b(i).init(), e(n.querySelectorAll('[data-module="govuk-notification-banner"]'), (function(e) {
-                new v(e, t.notificationBanner).init()
+            var i = n.querySelector('[data-module="govuk-error-summary"]');
+            i && new m(i, t.errorSummary).init(), e(n.querySelectorAll('[data-module="govuk-exit-this-page"]'), (function(e) {
+                new b(e, t.exitThisPage).init()
+            }));
+            var o = n.querySelector('[data-module="govuk-header"]');
+            o && new g(o).init(), e(n.querySelectorAll('[data-module="govuk-notification-banner"]'), (function(e) {
+                new y(e, t.notificationBanner).init()
             })), e(n.querySelectorAll('[data-module="govuk-radios"]'), (function(t) {
-                new g(t).init()
+                new w(t).init()
             }));
             var s = n.querySelector('[data-module="govuk-skip-link"]');
-            s && new y(s).init(), e(n.querySelectorAll('[data-module="govuk-tabs"]'), (function(t) {
-                new w(t).init()
+            s && new E(s).init(), e(n.querySelectorAll('[data-module="govuk-tabs"]'), (function(t) {
+                new k(t).init()
             }))
-        }, t.version = "4.6.0", t.Accordion = l, t.Button = u, t.Details = f, t.CharacterCount = h, t.Checkboxes = p, t.ErrorSummary = m, t.Header = b, t.NotificationBanner = v, t.Radios = g, t.SkipLink = y, t.Tabs = w
+        }, t.version = "4.7.0", t.Accordion = l, t.Button = u, t.Details = f, t.CharacterCount = h, t.Checkboxes = p, t.ErrorSummary = m, t.ExitThisPage = b, t.Header = g, t.NotificationBanner = y, t.Radios = w, t.SkipLink = E, t.Tabs = k
 }));
-//# sourceMappingURL=govuk-frontend-4.6.0.min.js.map
\ No newline at end of file
+//# sourceMappingURL=govuk-frontend-4.7.0.min.js.map
\ No newline at end of file

Action run for 8ddcaaa

@colinrotherham colinrotherham self-assigned this Oct 10, 2023
Copy link
Contributor

@owenatgov owenatgov left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@colinrotherham colinrotherham merged commit c956faa into main Oct 16, 2023
46 checks passed
@colinrotherham colinrotherham deleted the port-release-4.7.0 branch October 16, 2023 08:33
owenatgov pushed a commit that referenced this pull request Oct 18, 2023
@colinrotherham colinrotherham removed their assignment Dec 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Development

Successfully merging this pull request may close these issues.

None yet

3 participants