@ministryofjustice/frontend 3.3.1 → 3.5.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 (83) hide show
  1. package/README.md +4 -10
  2. package/govuk-prototype-kit.config.json +5 -16
  3. package/moj/all.jquery.min.js +15 -4
  4. package/moj/all.js +2856 -2280
  5. package/moj/all.scss +2 -0
  6. package/moj/components/_all.scss +1 -0
  7. package/moj/components/action-bar/_action-bar.scss +4 -6
  8. package/moj/components/add-another/_add-another.scss +9 -7
  9. package/moj/components/add-another/add-another.js +128 -76
  10. package/moj/components/alert/README.md +0 -0
  11. package/moj/components/alert/_alert.scss +142 -0
  12. package/moj/components/alert/alert.js +482 -0
  13. package/moj/components/alert/alert.spec.helper.js +92 -0
  14. package/moj/components/alert/macro.njk +3 -0
  15. package/moj/components/alert/template.njk +83 -0
  16. package/moj/components/badge/_badge.scss +3 -4
  17. package/moj/components/banner/_banner.scss +5 -10
  18. package/moj/components/button-menu/_button-menu.scss +10 -9
  19. package/moj/components/button-menu/button-menu.js +348 -318
  20. package/moj/components/cookie-banner/_cookie-banner.scss +6 -5
  21. package/moj/components/currency-input/_currency-input.scss +4 -4
  22. package/moj/components/date-picker/README.md +14 -17
  23. package/moj/components/date-picker/_date-picker.scss +122 -106
  24. package/moj/components/date-picker/date-picker.js +927 -900
  25. package/moj/components/filter/README.md +1 -1
  26. package/moj/components/filter/_filter.scss +53 -75
  27. package/moj/components/filter-toggle-button/filter-toggle-button.js +122 -87
  28. package/moj/components/form-validator/form-validator.js +399 -156
  29. package/moj/components/header/_header.scss +17 -19
  30. package/moj/components/identity-bar/_identity-bar.scss +5 -5
  31. package/moj/components/interruption-card/_interruption-card.scss +2 -2
  32. package/moj/components/messages/_messages.scss +12 -19
  33. package/moj/components/multi-file-upload/README.md +1 -1
  34. package/moj/components/multi-file-upload/_multi-file-upload.scss +34 -30
  35. package/moj/components/multi-file-upload/multi-file-upload.js +454 -183
  36. package/moj/components/multi-select/_multi-select.scss +4 -3
  37. package/moj/components/multi-select/multi-select.js +106 -70
  38. package/moj/components/notification-badge/_notification-badge.scss +12 -12
  39. package/moj/components/organisation-switcher/_organisation-switcher.scss +1 -1
  40. package/moj/components/page-header-actions/_page-header-actions.scss +3 -2
  41. package/moj/components/pagination/_pagination.scss +26 -31
  42. package/moj/components/password-reveal/_password-reveal.scss +1 -2
  43. package/moj/components/password-reveal/password-reveal.js +63 -31
  44. package/moj/components/primary-navigation/_primary-navigation.scss +26 -29
  45. package/moj/components/progress-bar/_progress-bar.scss +21 -26
  46. package/moj/components/rich-text-editor/_rich-text-editor.scss +17 -16
  47. package/moj/components/rich-text-editor/rich-text-editor.js +186 -139
  48. package/moj/components/search/_search.scss +6 -4
  49. package/moj/components/search-toggle/search-toggle.js +83 -53
  50. package/moj/components/search-toggle/search-toggle.scss +21 -15
  51. package/moj/components/side-navigation/_side-navigation.scss +12 -21
  52. package/moj/components/sortable-table/_sortable-table.scss +25 -23
  53. package/moj/components/sortable-table/sortable-table.js +162 -119
  54. package/moj/components/sub-navigation/_sub-navigation.scss +24 -28
  55. package/moj/components/tag/_tag.scss +8 -9
  56. package/moj/components/task-list/_task-list.scss +8 -7
  57. package/moj/components/ticket-panel/_ticket-panel.scss +14 -6
  58. package/moj/components/timeline/_timeline.scss +18 -20
  59. package/moj/filters/all.js +28 -30
  60. package/moj/filters/prototype-kit-13-filters.js +2 -1
  61. package/moj/helpers/_all.scss +1 -0
  62. package/moj/helpers/_hidden.scss +1 -1
  63. package/moj/helpers/_links.scss +20 -0
  64. package/moj/helpers.js +218 -51
  65. package/moj/init.js +2 -2
  66. package/moj/moj-frontend.min.css +2 -2
  67. package/moj/moj-frontend.min.js +15 -4
  68. package/moj/objects/_filter-layout.scss +11 -10
  69. package/moj/objects/_scrollable-pane.scss +11 -14
  70. package/moj/settings/_colours.scss +5 -0
  71. package/moj/settings/_measurements.scss +0 -2
  72. package/moj/utilities/_hidden.scss +3 -3
  73. package/moj/utilities/_width-container.scss +1 -1
  74. package/moj/version.js +28 -1
  75. package/package.json +1 -1
  76. package/moj/all.spec.js +0 -22
  77. package/moj/components/button-menu/button-menu.spec.js +0 -361
  78. package/moj/components/date-picker/date-picker.spec.js +0 -1130
  79. package/moj/components/filter-toggle-button/filter-toggle-button.spec.js +0 -304
  80. package/moj/components/multi-select/multi-select.spec.js +0 -135
  81. package/moj/components/password-reveal/password-reveal.spec.js +0 -55
  82. package/moj/components/search-toggle/search-toggle.spec.js +0 -134
  83. package/moj/namespace.js +0 -1
@@ -1,4 +1,4 @@
1
- ((t,e)=>{"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.MOJFrontend=e()})(this,function(){var r={};function t(t,e={}){if(!t)return this;var o=Object.freeze({properties:{excludedDates:{type:"string"},excludedDays:{type:"string"},leadingZeros:{type:"string"},maxDate:{type:"string"},minDate:{type:"string"},weekStartDay:{type:"string"}}});this.config=this.mergeConfigs({leadingZeros:!1,weekStartDay:"monday"},e,this.parseDataset(o,t.dataset)),this.dayLabels=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],this.monthLabels=["January","February","March","April","May","June","July","August","September","October","November","December"],this.currentDate=new Date,this.currentDate.setHours(0,0,0,0),this.calendarDays=[],this.excludedDates=[],this.excludedDays=[],this.buttonClass="moj-datepicker__button",this.selectedDayButtonClass="moj-datepicker__button--selected",this.currentDayButtonClass="moj-datepicker__button--current",this.todayButtonClass="moj-datepicker__button--today",this.$module=t,this.$input=t.querySelector(".moj-js-datepicker-input")}function s(t,e,o,i,n){this.index=e,this.row=o,this.column=i,this.button=t,this.picker=n,this.date=new Date}return r.removeAttributeValue=function(t,e,o){var i;t.getAttribute(e)&&(t.getAttribute(e)==o?t.removeAttribute(e):(o=new RegExp("(^|\\s)"+o+"(\\s|$)"),(i=t.getAttribute(e).match(o))&&3==i.length&&t.setAttribute(e,t.getAttribute(e).replace(o,i[1]&&i[2]?" ":""))))},r.addAttributeValue=function(t,e,o){t.getAttribute(e)?new RegExp("(^|\\s)"+o+"(\\s|$)").test(t.getAttribute(e))||t.setAttribute(e,t.getAttribute(e)+" "+o):t.setAttribute(e,o)},r.dragAndDropSupported=function(){return void 0!==document.createElement("div").ondrop},r.formDataSupported=function(){return"function"==typeof FormData},r.fileApiSupported=function(){var t=document.createElement("input");return t.type="file",void 0!==t.files},r.nodeListForEach=function(t,e){if(window.NodeList.prototype.forEach)return t.forEach(e);for(var o=0;o<t.length;o++)e.call(window,t[o],o,t)},r.initAll=function(t){var t=void 0!==(t=void 0!==t?t:{}).scope?t.scope:document,e=t.querySelectorAll('[data-module="moj-add-another"]'),e=(r.nodeListForEach(e,function(t){new r.AddAnother(t)}),t.querySelectorAll('[data-module="moj-multi-select"]')),e=(r.nodeListForEach(e,function(t){new r.MultiSelect({container:t.querySelector(t.getAttribute("data-multi-select-checkbox")),checkboxes:t.querySelectorAll("tbody .govuk-checkboxes__input"),id_prefix:t.getAttribute("data-multi-select-idprefix")})}),t.querySelectorAll('[data-module="moj-password-reveal"]')),e=(r.nodeListForEach(e,function(t){new r.PasswordReveal(t)}),t.querySelectorAll('[data-module="moj-rich-text-editor"]')),e=(r.nodeListForEach(e,function(t){var e={textarea:$(t)},t=t.getAttribute("data-moj-rich-text-editor-toolbar");if(t){var o,i=t.split(",");for(o in e.toolbar={},i)e.toolbar[i[o]]=!0}new r.RichTextEditor(e)}),t.querySelectorAll('[data-module="moj-search-toggle"]')),e=(r.nodeListForEach(e,function(t){new r.SearchToggle({toggleButton:{container:$(t.querySelector(".moj-search-toggle__toggle")),text:t.getAttribute("data-moj-search-toggle-text")},search:{container:$(t.querySelector(".moj-search"))}})}),t.querySelectorAll('[data-module="moj-sortable-table"]')),e=(r.nodeListForEach(e,function(t){new r.SortableTable({table:t})}),t.querySelectorAll('[data-module="moj-date-picker"]')),e=(r.nodeListForEach(e,function(t){new r.DatePicker(t,{}).init()}),t.querySelectorAll('[data-module="moj-button-menu"]'));r.nodeListForEach(e,function(t){new r.ButtonMenu(t,{}).init()})},r.version="0.0.0-development",r.AddAnother=function(t){this.container=$(t),this.container.data("moj-add-another-initialised")||(this.container.data("moj-add-another-initialised",!0),this.container.on("click",".moj-add-another__remove-button",$.proxy(this,"onRemoveButtonClick")),this.container.on("click",".moj-add-another__add-button",$.proxy(this,"onAddButtonClick")),this.container.find(".moj-add-another__add-button, moj-add-another__remove-button").prop("type","button"))},r.AddAnother.prototype.onAddButtonClick=function(t){var e=this.getNewItem(),o=(this.updateAttributes(this.getItems().length,e),this.resetItem(e),this.getItems().first());this.hasRemoveButton(o)||this.createRemoveButton(o),this.getItems().last().after(e),e.find("input, textarea, select").first().focus()},r.AddAnother.prototype.hasRemoveButton=function(t){return t.find(".moj-add-another__remove-button").length},r.AddAnother.prototype.getItems=function(){return this.container.find(".moj-add-another__item")},r.AddAnother.prototype.getNewItem=function(){var t=this.getItems().first().clone();return this.hasRemoveButton(t)||this.createRemoveButton(t),t},r.AddAnother.prototype.updateAttributes=function(i,n){n.find("[data-name]").each(function(t,e){var o=e.id;e.name=$(e).attr("data-name").replace(/%index%/,i),e.id=$(e).attr("data-id").replace(/%index%/,i),($(e).siblings("label")[0]||$(e).parents("label")[0]||n.find('[for="'+o+'"]')[0]).htmlFor=e.id})},r.AddAnother.prototype.createRemoveButton=function(t){t.append('<button type="button" class="govuk-button govuk-button--secondary moj-add-another__remove-button">Remove</button>')},r.AddAnother.prototype.resetItem=function(t){t.find("[data-name], [data-id]").each(function(t,e){"checkbox"==e.type||"radio"==e.type?e.checked=!1:e.value=""})},r.AddAnother.prototype.onRemoveButtonClick=function(t){$(t.currentTarget).parents(".moj-add-another__item").remove();t=this.getItems();1===t.length&&t.find(".moj-add-another__remove-button").remove(),t.each($.proxy(function(t,e){this.updateAttributes(t,$(e))},this)),this.focusHeading()},r.AddAnother.prototype.focusHeading=function(){this.container.find(".moj-add-another__heading").focus()},r.ButtonMenu=function(t,e={}){if(!t)return this;var o=Object.freeze({properties:{buttonText:{type:"string"},buttonClasses:{type:"string"},alignMenu:{type:"string"}}});this.config=this.mergeConfigs({buttonText:"Actions",alignMenu:"left",buttonClasses:""},e,this.parseDataset(o,t.dataset)),this.$module=t},r.ButtonMenu.prototype.init=function(){if(1==this.$module.children.length){let e=this.$module.children[0];e.classList.forEach(t=>{t.startsWith("govuk-button-")&&e.classList.remove(t),e.classList.remove("moj-button-menu__item")}),this.config.buttonClasses&&e.classList.add(...this.config.buttonClasses.split(" "))}1<this.$module.children.length&&this.initMenu()},r.ButtonMenu.prototype.initMenu=function(){this.$menu=this.createMenu(),this.$module.insertAdjacentHTML("afterbegin",this.toggleTemplate()),this.setupMenuItems(),this.$menuToggle=this.$module.querySelector(":scope > button"),this.items=this.$menu.querySelectorAll("a, button"),this.$menuToggle.addEventListener("click",t=>{this.toggleMenu(t)}),this.$module.addEventListener("keydown",t=>{this.handleKeyDown(t)}),document.addEventListener("click",t=>{this.$module.contains(t.target)||this.closeMenu(!1)})},r.ButtonMenu.prototype.createMenu=function(){var t=document.createElement("ul");for(t.setAttribute("role","list"),t.hidden=!0,t.classList.add("moj-button-menu__wrapper"),"right"==this.config.alignMenu&&t.classList.add("moj-button-menu__wrapper--right"),this.$module.appendChild(t);this.$module.firstChild!==t;)t.appendChild(this.$module.firstChild);return t},r.ButtonMenu.prototype.setupMenuItems=function(){Array.from(this.$menu.children).forEach(e=>{var t=document.createElement("li");this.$menu.insertBefore(t,e),t.appendChild(e),e.setAttribute("tabindex",-1),"BUTTON"==e.tagName&&e.setAttribute("type","button"),e.classList.forEach(t=>{t.startsWith("govuk-button")&&e.classList.remove(t)}),e.addEventListener("click",t=>{setTimeout(()=>{this.closeMenu(!1)},50)})})},r.ButtonMenu.prototype.toggleTemplate=function(){return`
1
+ ((t,e)=>{"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).MOJFrontend=e()})(this,function(){function t(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var b,y,e,o,v,k,D,x,j,_,w,C,B,$,L,M,T,S,A,E,F,H,I,O,q,R,P,N,z=window.jQuery;function Z(){return o||(o=1,e={removeAttributeValue:function(t,e,o){var i;t.getAttribute(e)&&(t.getAttribute(e)===o?t.removeAttribute(e):(o=new RegExp(`(^|\\s)${o}(\\s|$)`),(i=t.getAttribute(e).match(o))&&3===i.length&&t.setAttribute(e,t.getAttribute(e).replace(o,i[1]&&i[2]?" ":""))))},addAttributeValue:function(t,e,o){t.getAttribute(e)?new RegExp(`(^|\\s)${o}(\\s|$)`).test(t.getAttribute(e))||t.setAttribute(e,t.getAttribute(e)+" "+o):t.setAttribute(e,o)},dragAndDropSupported:function(){return void 0!==document.createElement("div").ondrop},formDataSupported:function(){return"function"==typeof FormData},fileApiSupported:function(){var t=document.createElement("input");return t.type="file",void 0!==t.files},nodeListForEach:function(e,o){if(window.NodeList.prototype.forEach)return e.forEach(o);for(let t=0;t<e.length;t++)o.call(window,e[t],t,e)},getNextSibling:function(e,o){if(e){let t=e.nextElementSibling;if(!o)return t;for(;t;){if(t.matches(o))return t;t=t.nextElementSibling}}},getPreviousSibling:function(e,o){if(e){let t=e.previousElementSibling;if(!o)return t;for(;t;){if(t.matches(o))return t;t=t.previousElementSibling}}},findNearestMatchingElement:function(t,o){if(t&&o){let e=t;for(;e;){if(e.matches(o))return e;let t=e.previousElementSibling;for(;t;){if(t.matches(o))return t;t=t.previousElementSibling}e=e.parentElement}}},setFocus:function(t,e={}){let o=t.getAttribute("tabindex");function i(){e.onBlur&&e.onBlur.call(t),o||t.removeAttribute("tabindex")}o||t.setAttribute("tabindex","-1"),t.addEventListener("focus",function(){t.addEventListener("blur",i,{once:!0})},{once:!0}),e.onBeforeFocus&&e.onBeforeFocus.call(t),t.focus()}}),e}return t((()=>{if(!N){N=1;let n=z,o=(()=>{if(!y){y=1;let s=z;function t(t){this.container=s(t),this.container.data("moj-add-another-initialised")||(this.container.data("moj-add-another-initialised",!0),this.container.on("click",".moj-add-another__remove-button",s.proxy(this,"onRemoveButtonClick")),this.container.on("click",".moj-add-another__add-button",s.proxy(this,"onAddButtonClick")),this.container.find(".moj-add-another__add-button, moj-add-another__remove-button").prop("type","button"))}t.prototype.onAddButtonClick=function(t){var e=this.getNewItem(),o=(this.updateAttributes(this.getItems().length,e),this.resetItem(e),this.getItems().first());this.hasRemoveButton(o)||this.createRemoveButton(o),this.getItems().last().after(e),e.find("input, textarea, select").first().focus()},t.prototype.hasRemoveButton=function(t){return t.find(".moj-add-another__remove-button").length},t.prototype.getItems=function(){return this.container.find(".moj-add-another__item")},t.prototype.getNewItem=function(){var t=this.getItems().first().clone();return this.hasRemoveButton(t)||this.createRemoveButton(t),t},t.prototype.updateAttributes=function(i,n){n.find("[data-name]").each(function(t,e){var o=e.id;e.name=s(e).attr("data-name").replace(/%index%/,i),e.id=s(e).attr("data-id").replace(/%index%/,i),(s(e).siblings("label")[0]||s(e).parents("label")[0]||n.find(`[for="${o}"]`)[0]).htmlFor=e.id})},t.prototype.createRemoveButton=function(t){t.append('<button type="button" class="govuk-button govuk-button--secondary moj-add-another__remove-button">Remove</button>')},t.prototype.resetItem=function(t){t.find("[data-name], [data-id]").each(function(t,e){"checkbox"===e.type||"radio"===e.type?e.checked=!1:e.value=""})},t.prototype.onRemoveButtonClick=function(t){s(t.currentTarget).parents(".moj-add-another__item").remove();t=this.getItems();1===t.length&&t.find(".moj-add-another__remove-button").remove(),t.each(s.proxy(function(t,e){this.updateAttributes(t,s(e))},this)),this.focusHeading()},t.prototype.focusHeading=function(){this.container.find(".moj-add-another__heading").get(0).focus()},b={AddAnother:t}}return b})().AddAnother,i=(()=>{if(!k){k=1;let{findNearestMatchingElement:o,getPreviousSibling:i,setFocus:n}=Z();function t(t,e={}){if(!t)return this;var o=Object.freeze({properties:{dismissible:{type:"boolean"},dismissText:{type:"string"},disableAutoFocus:{type:"boolean"},focusOnDismissSelector:{type:"string"}}});this.config=this.mergeConfigs({dismissible:!1,dismissText:"Dismiss",disableAutoFocus:!1},e,this.parseDataset(o,t.dataset)),this.$module=t}t.prototype.init=function(){"alert"!==this.$module.getAttribute("role")||this.config.disableAutoFocus||n(this.$module),this.$dismissButton=this.$module.querySelector(".moj-alert__dismiss"),this.config.dismissible&&this.$dismissButton&&(this.$dismissButton.innerHTML=this.config.dismissText,this.$dismissButton.removeAttribute("hidden"),this.$module.addEventListener("click",t=>{this.$dismissButton.contains(t.target)&&this.dimiss()}))},t.prototype.dimiss=function(){let t;var e;(t=this.config.focusOnDismissSelector?document.querySelector(this.config.focusOnDismissSelector):t)||(e=this.$module.nextElementSibling)&&e.matches(".moj-alert")&&(t=e),(t=(t=t||i(this.$module,".moj-alert, h1, h2, h3, h4, h5, h6"))||o(this.$module,"h1, h2, h3, h4, h5, h6, main, body"))&&n(t),this.$module.remove()},t.prototype.normaliseString=function(t,e){var o=t?t.trim():"";let i,n;switch((n=e&&e.type?e.type:n)||(["true","false"].includes(o)&&(n="boolean"),0<o.length&&isFinite(Number(o))&&(n="number")),n){case"boolean":i="true"===o;break;case"number":i=Number(o);break;default:i=t}return i},t.prototype.parseDataset=function(t,e){var o,i,n={};for([o,i]of Object.entries(t.properties))o in e&&e[o]&&(n[o]=this.normaliseString(e[o],i));return n},t.prototype.mergeConfigs=function(...t){var e,o={};for(e of t)for(var i of Object.keys(e)){var n=o[i],s=e[i];o[i]="object"==typeof n&&"object"==typeof s?this.mergeConfigs(n,s):s}return o},v={Alert:t}}return v})().Alert,s=(x||(x=1,f.prototype.init=function(){if(1===this.$module.children.length){let e=this.$module.children[0];e.classList.forEach(t=>{t.startsWith("govuk-button-")&&e.classList.remove(t),e.classList.remove("moj-button-menu__item")}),this.config.buttonClasses&&e.classList.add(...this.config.buttonClasses.split(" "))}1<this.$module.children.length&&this.initMenu()},f.prototype.initMenu=function(){this.$menu=this.createMenu(),this.$module.insertAdjacentHTML("afterbegin",this.toggleTemplate()),this.setupMenuItems(),this.$menuToggle=this.$module.querySelector(":scope > button"),this.items=this.$menu.querySelectorAll("a, button"),this.$menuToggle.addEventListener("click",t=>{this.toggleMenu(t)}),this.$module.addEventListener("keydown",t=>{this.handleKeyDown(t)}),document.addEventListener("click",t=>{this.$module.contains(t.target)||this.closeMenu(!1)})},f.prototype.createMenu=function(){var t=document.createElement("ul");for(t.setAttribute("role","list"),t.hidden=!0,t.classList.add("moj-button-menu__wrapper"),"right"===this.config.alignMenu&&t.classList.add("moj-button-menu__wrapper--right"),this.$module.appendChild(t);this.$module.firstChild!==t;)t.appendChild(this.$module.firstChild);return t},f.prototype.setupMenuItems=function(){Array.from(this.$menu.children).forEach(e=>{var t=document.createElement("li");this.$menu.insertBefore(t,e),t.appendChild(e),e.setAttribute("tabindex",-1),"BUTTON"===e.tagName&&e.setAttribute("type","button"),e.classList.forEach(t=>{t.startsWith("govuk-button")&&e.classList.remove(t)}),e.addEventListener("click",t=>{setTimeout(()=>{this.closeMenu(!1)},50)})})},f.prototype.toggleTemplate=function(){return`
2
2
  <button type="button" class="govuk-button moj-button-menu__toggle-button ${this.config.buttonClasses||""}" aria-haspopup="true" aria-expanded="false">
3
3
  <span>
4
4
  ${this.config.buttonText}
@@ -6,7 +6,7 @@
6
6
  <path d="M5.5 0L11 5L0 5L5.5 0Z" fill="currentColor"/>
7
7
  </svg>
8
8
  </span>
9
- </button>`},r.ButtonMenu.prototype.isOpen=function(){return"true"===this.$menuToggle.getAttribute("aria-expanded")},r.ButtonMenu.prototype.toggleMenu=function(t){t.preventDefault();t=0==t.detail?0:-1;this.isOpen()?this.closeMenu():this.openMenu(t)},r.ButtonMenu.prototype.openMenu=function(t=0){this.$menu.hidden=!1,this.$menuToggle.setAttribute("aria-expanded","true"),-1!==t&&this.focusItem(t)},r.ButtonMenu.prototype.closeMenu=function(t=!0){this.$menu.hidden=!0,this.$menuToggle.setAttribute("aria-expanded","false"),t&&this.$menuToggle.focus()},r.ButtonMenu.prototype.focusItem=function(t){(t=t>=this.items.length?0:t)<0&&(t=this.items.length-1),this.items.item(t)?.focus()},r.ButtonMenu.prototype.currentFocusIndex=function(){var t=document.activeElement;return Array.from(this.items).indexOf(t)},r.ButtonMenu.prototype.handleKeyDown=function(t){if(t.target==this.$menuToggle)switch(t.key){case"ArrowDown":t.preventDefault(),this.openMenu();break;case"ArrowUp":t.preventDefault(),this.openMenu(this.items.length-1)}if(this.$menu.contains(t.target)&&this.isOpen())switch(t.key){case"ArrowDown":t.preventDefault(),-1!==this.currentFocusIndex()&&this.focusItem(this.currentFocusIndex()+1);break;case"ArrowUp":t.preventDefault(),-1!==this.currentFocusIndex()&&this.focusItem(this.currentFocusIndex()-1);break;case"Home":t.preventDefault(),this.focusItem(0);break;case"End":t.preventDefault(),this.focusItem(this.items.length-1)}"Escape"==t.key&&this.isOpen()&&this.closeMenu(),"Tab"==t.key&&this.isOpen()&&this.closeMenu(!1)},r.ButtonMenu.prototype.parseDataset=function(t,e){var o,i,n={};for([o,i]of Object.entries(t.properties))o in e&&e[o]&&(n[o]=e[o]);return n},r.ButtonMenu.prototype.mergeConfigs=function(...t){var e,o={};for(e of t)for(var i of Object.keys(e)){var n=o[i],a=e[i];o[i]="object"==typeof n&&"object"==typeof a?this.mergeConfigs(n,a):a}return o},t.prototype.init=function(){!this.$input||this.$module.dataset.initialized||(this.setOptions(),this.initControls(),this.$module.setAttribute("data-initialized","true"))},t.prototype.initControls=function(){this.id="datepicker-"+this.$input.id,this.$dialog=this.createDialog(),this.createCalendarHeaders();var t=document.createElement("div"),e=document.createElement("div"),e=(t.classList.add("moj-datepicker__wrapper"),e.classList.add("govuk-input__wrapper"),this.$input.parentNode.insertBefore(t,this.$input),t.appendChild(e),e.appendChild(this.$input),e.insertAdjacentHTML("beforeend",this.toggleTemplate()),t.insertAdjacentElement("beforeend",this.$dialog),this.$calendarButton=this.$module.querySelector(".moj-js-datepicker-toggle"),this.$dialogTitle=this.$dialog.querySelector(".moj-js-datepicker-month-year"),this.createCalendar(),this.$prevMonthButton=this.$dialog.querySelector(".moj-js-datepicker-prev-month"),this.$prevYearButton=this.$dialog.querySelector(".moj-js-datepicker-prev-year"),this.$nextMonthButton=this.$dialog.querySelector(".moj-js-datepicker-next-month"),this.$nextYearButton=this.$dialog.querySelector(".moj-js-datepicker-next-year"),this.$cancelButton=this.$dialog.querySelector(".moj-js-datepicker-cancel"),this.$okButton=this.$dialog.querySelector(".moj-js-datepicker-ok"),this.$prevMonthButton.addEventListener("click",t=>this.focusPreviousMonth(t,!1)),this.$prevYearButton.addEventListener("click",t=>this.focusPreviousYear(t,!1)),this.$nextMonthButton.addEventListener("click",t=>this.focusNextMonth(t,!1)),this.$nextYearButton.addEventListener("click",t=>this.focusNextYear(t,!1)),this.$cancelButton.addEventListener("click",t=>{t.preventDefault(),this.closeDialog(t)}),this.$okButton.addEventListener("click",()=>{this.selectDate(this.currentDate)}),this.$dialog.querySelectorAll('button:not([disabled="true"])'));this.$firstButtonInDialog=e[0],this.$lastButtonInDialog=e[e.length-1],this.$firstButtonInDialog.addEventListener("keydown",t=>this.firstButtonKeydown(t)),this.$lastButtonInDialog.addEventListener("keydown",t=>this.lastButtonKeydown(t)),this.$calendarButton.addEventListener("click",t=>this.toggleDialog(t)),this.$dialog.addEventListener("keydown",t=>{"Escape"===t.key&&(this.closeDialog(),t.preventDefault(),t.stopPropagation())}),document.body.addEventListener("mouseup",t=>this.backgroundClick(t)),this.updateCalendar()},t.prototype.createDialog=function(){var t="datepicker-title-"+this.$input.id,e=document.createElement("div");return e.id=this.id,e.setAttribute("class","moj-datepicker__dialog"),e.setAttribute("role","dialog"),e.setAttribute("aria-modal","true"),e.setAttribute("aria-labelledby",t),e.innerHTML=this.dialogTemplate(t),e.hidden=!0,e},t.prototype.createCalendar=function(){var t=this.$dialog.querySelector("tbody");let o=0;for(let e=0;e<6;e++){var i=t.insertRow(e);for(let t=0;t<7;t++){var n=document.createElement("td"),a=document.createElement("button"),n=(n.appendChild(a),i.appendChild(n),new s(a,o,e,t,this));n.init(),this.calendarDays.push(n),o++}}},t.prototype.toggleTemplate=function(){return`<button class="moj-datepicker__toggle moj-js-datepicker-toggle" type="button" aria-haspopup="dialog" aria-controls="${this.id}" aria-expanded="false">
9
+ </button>`},f.prototype.isOpen=function(){return"true"===this.$menuToggle.getAttribute("aria-expanded")},f.prototype.toggleMenu=function(t){t.preventDefault();t=0===t.detail?0:-1;this.isOpen()?this.closeMenu():this.openMenu(t)},f.prototype.openMenu=function(t=0){this.$menu.hidden=!1,this.$menuToggle.setAttribute("aria-expanded","true"),-1!==t&&this.focusItem(t)},f.prototype.closeMenu=function(t=!0){this.$menu.hidden=!0,this.$menuToggle.setAttribute("aria-expanded","false"),t&&this.$menuToggle.focus()},f.prototype.focusItem=function(t){(t=t>=this.items.length?0:t)<0&&(t=this.items.length-1);t=this.items.item(t);t&&t.focus()},f.prototype.currentFocusIndex=function(){var t=document.activeElement;return Array.from(this.items).indexOf(t)},f.prototype.handleKeyDown=function(t){if(t.target===this.$menuToggle)switch(t.key){case"ArrowDown":t.preventDefault(),this.openMenu();break;case"ArrowUp":t.preventDefault(),this.openMenu(this.items.length-1)}if(this.$menu.contains(t.target)&&this.isOpen())switch(t.key){case"ArrowDown":t.preventDefault(),-1!==this.currentFocusIndex()&&this.focusItem(this.currentFocusIndex()+1);break;case"ArrowUp":t.preventDefault(),-1!==this.currentFocusIndex()&&this.focusItem(this.currentFocusIndex()-1);break;case"Home":t.preventDefault(),this.focusItem(0);break;case"End":t.preventDefault(),this.focusItem(this.items.length-1)}"Escape"===t.key&&this.isOpen()&&this.closeMenu(),"Tab"===t.key&&this.isOpen()&&this.closeMenu(!1)},f.prototype.parseDataset=function(t,e){var o,i={};for([o,,]of Object.entries(t.properties))o in e&&e[o]&&(i[o]=e[o]);return i},f.prototype.mergeConfigs=function(...t){var e,o={};for(e of t)for(var i of Object.keys(e)){var n=o[i],s=e[i];o[i]="object"==typeof n&&"object"==typeof s?this.mergeConfigs(n,s):s}return o},D={ButtonMenu:f}),D).ButtonMenu,a=(_||(_=1,g.prototype.init=function(){!this.$input||this.$module.dataset.initialized||(this.setOptions(),this.initControls(),this.$module.setAttribute("data-initialized","true"))},g.prototype.initControls=function(){this.id="datepicker-"+this.$input.id,this.$dialog=this.createDialog(),this.createCalendarHeaders();var t=document.createElement("div"),e=document.createElement("div"),e=(t.classList.add("moj-datepicker__wrapper"),e.classList.add("govuk-input__wrapper"),this.$input.parentNode.insertBefore(t,this.$input),t.appendChild(e),e.appendChild(this.$input),e.insertAdjacentHTML("beforeend",this.toggleTemplate()),t.insertAdjacentElement("beforeend",this.$dialog),this.$calendarButton=this.$module.querySelector(".moj-js-datepicker-toggle"),this.$dialogTitle=this.$dialog.querySelector(".moj-js-datepicker-month-year"),this.createCalendar(),this.$prevMonthButton=this.$dialog.querySelector(".moj-js-datepicker-prev-month"),this.$prevYearButton=this.$dialog.querySelector(".moj-js-datepicker-prev-year"),this.$nextMonthButton=this.$dialog.querySelector(".moj-js-datepicker-next-month"),this.$nextYearButton=this.$dialog.querySelector(".moj-js-datepicker-next-year"),this.$cancelButton=this.$dialog.querySelector(".moj-js-datepicker-cancel"),this.$okButton=this.$dialog.querySelector(".moj-js-datepicker-ok"),this.$prevMonthButton.addEventListener("click",t=>this.focusPreviousMonth(t,!1)),this.$prevYearButton.addEventListener("click",t=>this.focusPreviousYear(t,!1)),this.$nextMonthButton.addEventListener("click",t=>this.focusNextMonth(t,!1)),this.$nextYearButton.addEventListener("click",t=>this.focusNextYear(t,!1)),this.$cancelButton.addEventListener("click",t=>{t.preventDefault(),this.closeDialog(t)}),this.$okButton.addEventListener("click",()=>{this.selectDate(this.currentDate)}),this.$dialog.querySelectorAll('button:not([disabled="true"])'));this.$firstButtonInDialog=e[0],this.$lastButtonInDialog=e[e.length-1],this.$firstButtonInDialog.addEventListener("keydown",t=>this.firstButtonKeydown(t)),this.$lastButtonInDialog.addEventListener("keydown",t=>this.lastButtonKeydown(t)),this.$calendarButton.addEventListener("click",t=>this.toggleDialog(t)),this.$dialog.addEventListener("keydown",t=>{"Escape"===t.key&&(this.closeDialog(),t.preventDefault(),t.stopPropagation())}),document.body.addEventListener("mouseup",t=>this.backgroundClick(t)),this.updateCalendar()},g.prototype.createDialog=function(){var t="datepicker-title-"+this.$input.id,e=document.createElement("div");return e.id=this.id,e.setAttribute("class","moj-datepicker__dialog"),e.setAttribute("role","dialog"),e.setAttribute("aria-modal","true"),e.setAttribute("aria-labelledby",t),e.innerHTML=this.dialogTemplate(t),e.hidden=!0,e},g.prototype.createCalendar=function(){var t=this.$dialog.querySelector("tbody");let o=0;for(let e=0;e<6;e++){var i=t.insertRow(e);for(let t=0;t<7;t++){var n=document.createElement("td"),s=document.createElement("button"),n=(n.appendChild(s),i.appendChild(n),new m(s,o,e,t,this));n.init(),this.calendarDays.push(n),o++}}},g.prototype.toggleTemplate=function(){return`<button class="moj-datepicker__toggle moj-js-datepicker-toggle" type="button" aria-haspopup="dialog" aria-controls="${this.id}" aria-expanded="false">
10
10
  <span class="govuk-visually-hidden">Choose date</span>
11
11
  <svg width="32" height="24" focusable="false" class="moj-datepicker-icon" aria-hidden="true" role="img" viewBox="0 0 22 22">
12
12
  <path
@@ -18,7 +18,7 @@
18
18
  <rect x="3.66669" width="1.46667" height="5.13333" rx="0.733333" fill="currentColor"></rect>
19
19
  <rect x="16.8667" width="1.46667" height="5.13333" rx="0.733333" fill="currentColor"></rect>
20
20
  </svg>
21
- </button>`},t.prototype.dialogTemplate=function(t){return`<div class="moj-datepicker__dialog-header">
21
+ </button>`},g.prototype.dialogTemplate=function(t){return`<div class="moj-datepicker__dialog-header">
22
22
  <div class="moj-datepicker__dialog-navbuttons">
23
23
  <button class="moj-datepicker__button moj-js-datepicker-prev-year">
24
24
  <span class="govuk-visually-hidden">Previous year</span>
@@ -67,4 +67,15 @@
67
67
  <div class="govuk-button-group">
68
68
  <button type="button" class="govuk-button moj-js-datepicker-ok">Select</button>
69
69
  <button type="button" class="govuk-button govuk-button--secondary moj-js-datepicker-cancel">Close</button>
70
- </div>`},t.prototype.createCalendarHeaders=function(){this.dayLabels.forEach(t=>{t=`<th scope="col"><span aria-hidden="true">${t.substring(0,3)}</span><span class="govuk-visually-hidden">${t}</span></th>`;this.$dialog.querySelector("thead > tr").insertAdjacentHTML("beforeend",t)})},t.prototype.leadingZeros=function(t,e=2){let o=t.toString();for(;o.length<e;)o="0"+o;return o},t.prototype.setOptions=function(){this.setMinAndMaxDatesOnCalendar(),this.setExcludedDates(),this.setExcludedDays(),this.setLeadingZeros(),this.setWeekStartDay()},t.prototype.setMinAndMaxDatesOnCalendar=function(){this.config.minDate&&(this.minDate=this.formattedDateFromString(this.config.minDate,null),this.minDate)&&this.currentDate<this.minDate&&(this.currentDate=this.minDate),this.config.maxDate&&(this.maxDate=this.formattedDateFromString(this.config.maxDate,null),this.maxDate)&&this.currentDate>this.maxDate&&(this.currentDate=this.maxDate)},t.prototype.setExcludedDates=function(){this.config.excludedDates&&(this.excludedDates=this.config.excludedDates.replace(/\s+/," ").split(" ").map(t=>{if(!t.includes("-"))return this.formattedDateFromString(t,null);var[t,e]=t.split("-").map(t=>this.formattedDateFromString(t,null));if(t&&e){for(var o=new Date(t.getTime()),i=[];o<=e;)i.push(new Date(o)),o.setDate(o.getDate()+1);return i}}).flat().filter(t=>t))},t.prototype.setExcludedDays=function(){if(this.config.excludedDays){let e=this.dayLabels.map(t=>t.toLowerCase());"monday"===this.config.weekStartDay&&e.unshift(e.pop()),this.excludedDays=this.config.excludedDays.replace(/\s+/," ").toLowerCase().split(" ").map(t=>e.indexOf(t)).filter(t=>-1!==t)}},t.prototype.setLeadingZeros=function(){"boolean"!=typeof this.config.leadingZeros&&("true"===this.config.leadingZeros.toLowerCase()?this.config.leadingZeros=!0:"false"===this.config.leadingZeros.toLowerCase()&&(this.config.leadingZeros=!1))},t.prototype.setWeekStartDay=function(){"sunday"===this.config.weekStartDay?.toLowerCase()?(this.config.weekStartDay="sunday",this.dayLabels.unshift(this.dayLabels.pop())):this.config.weekStartDay="monday"},t.prototype.isExcludedDate=function(t){if(this.minDate&&this.minDate>t)return!0;if(this.maxDate&&this.maxDate<t)return!0;for(var e of this.excludedDates)if(t.toDateString()===e.toDateString())return!0;return!!this.excludedDays.includes(t.getDay())},t.prototype.formattedDateFromString=function(t,e=new Date){var o=/(\d{1,2})([-/,. ])(\d{1,2})\2(\d{4})/;return o.test(t)&&(o=(t=t.match(o))[1],(t=new Date(t[4]+`-${t[3]}-`+o))instanceof Date)&&!isNaN(t)?t:e},t.prototype.formattedDateFromDate=function(t){return this.config.leadingZeros?`${this.leadingZeros(t.getDate())}/${this.leadingZeros(t.getMonth()+1)}/`+t.getFullYear():`${t.getDate()}/${t.getMonth()+1}/`+t.getFullYear()},t.prototype.formattedDateHuman=function(t){return`${this.dayLabels[(t.getDay()+6)%7]} ${t.getDate()} ${this.monthLabels[t.getMonth()]} `+t.getFullYear()},t.prototype.backgroundClick=function(t){!this.isOpen()||this.$dialog.contains(t.target)||this.$input.contains(t.target)||this.$calendarButton.contains(t.target)||(t.preventDefault(),this.closeDialog())},t.prototype.firstButtonKeydown=function(t){"Tab"===t.key&&t.shiftKey&&(this.$lastButtonInDialog.focus(),t.preventDefault())},t.prototype.lastButtonKeydown=function(t){"Tab"!==t.key||t.shiftKey||(this.$firstButtonInDialog.focus(),t.preventDefault())},t.prototype.updateCalendar=function(){this.$dialogTitle.innerHTML=this.monthLabels[this.currentDate.getMonth()]+" "+this.currentDate.getFullYear();var e=this.currentDate,t=new Date(e.getFullYear(),e.getMonth(),1);let o;o="monday"===this.config.weekStartDay?0===t.getDay()?6:t.getDay()-1:t.getDay(),t.setDate(t.getDate()-o);var i=new Date(t);for(let t=0;t<this.calendarDays.length;t++){var n=i.getMonth()!==e.getMonth(),a=this.isExcludedDate(i);this.calendarDays[t].update(i,n,a),i.setDate(i.getDate()+1)}},t.prototype.setCurrentDate=function(i=!0){let n=this.currentDate;var t;this.calendarDays.forEach(t=>{t.button.classList.add("moj-datepicker__button"),t.button.classList.add("moj-datepicker__calendar-day"),t.button.setAttribute("tabindex",-1),t.button.classList.remove(this.selectedDayButtonClass);var e=t.date,o=(e.setHours(0,0,0,0),new Date);o.setHours(0,0,0,0),e.getTime()===n.getTime()&&i&&(t.button.setAttribute("tabindex",0),t.button.focus(),t.button.classList.add(this.selectedDayButtonClass)),this.inputDate&&e.getTime()===this.inputDate.getTime()?(t.button.classList.add(this.currentDayButtonClass),t.button.setAttribute("aria-current","date")):(t.button.classList.remove(this.currentDayButtonClass),t.button.removeAttribute("aria-current")),e.getTime()===o.getTime()?t.button.classList.add(this.todayButtonClass):t.button.classList.remove(this.todayButtonClass)}),i||((t=this.calendarDays.filter(t=>"block"===window.getComputedStyle(t.button).display&&!t.button.disabled))[0].button.setAttribute("tabindex",0),this.currentDate=t[0].date)},t.prototype.selectDate=function(t){this.isExcludedDate(t)||(this.$calendarButton.querySelector("span").innerText="Choose date. Selected date is "+this.formattedDateHuman(t),this.$input.value=this.formattedDateFromDate(t),t=new Event("change",{bubbles:!0,cancelable:!0}),this.$input.dispatchEvent(t),this.closeDialog())},t.prototype.isOpen=function(){return this.$dialog.classList.contains("moj-datepicker__dialog--open")},t.prototype.toggleDialog=function(t){t.preventDefault(),this.isOpen()?this.closeDialog():(this.setMinAndMaxDatesOnCalendar(),this.openDialog())},t.prototype.openDialog=function(){this.$dialog.hidden=!1,this.$dialog.classList.add("moj-datepicker__dialog--open"),this.$calendarButton.setAttribute("aria-expanded","true"),this.$input.offsetWidth>this.$dialog.offsetWidth&&(this.$dialog.style.right="0px"),this.$dialog.style.top=this.$input.offsetHeight+3+"px",this.inputDate=this.formattedDateFromString(this.$input.value),this.currentDate=this.inputDate,this.currentDate.setHours(0,0,0,0),this.updateCalendar(),this.setCurrentDate()},t.prototype.closeDialog=function(){this.$dialog.hidden=!0,this.$dialog.classList.remove("moj-datepicker__dialog--open"),this.$calendarButton.setAttribute("aria-expanded","false"),this.$calendarButton.focus()},t.prototype.goToDate=function(t,e){var o=this.currentDate;this.currentDate=t,o.getMonth()===this.currentDate.getMonth()&&o.getFullYear()===this.currentDate.getFullYear()||this.updateCalendar(),this.setCurrentDate(e)},t.prototype.focusNextDay=function(){var t=new Date(this.currentDate);t.setDate(t.getDate()+1),this.goToDate(t)},t.prototype.focusPreviousDay=function(){var t=new Date(this.currentDate);t.setDate(t.getDate()-1),this.goToDate(t)},t.prototype.focusNextWeek=function(){var t=new Date(this.currentDate);t.setDate(t.getDate()+7),this.goToDate(t)},t.prototype.focusPreviousWeek=function(){var t=new Date(this.currentDate);t.setDate(t.getDate()-7),this.goToDate(t)},t.prototype.focusFirstDayOfWeek=function(){var t=new Date(this.currentDate),e="sunday"==this.config.weekStartDay?0:1,o=t.getDay(),e=e<=o?o-e:6-o;t.setDate(t.getDate()-e),t.setHours(0,0,0,0),this.goToDate(t)},t.prototype.focusLastDayOfWeek=function(){var t=new Date(this.currentDate),e="sunday"==this.config.weekStartDay?6:0,o=t.getDay(),e=o<=e?e-o:7-o;t.setDate(t.getDate()+e),t.setHours(0,0,0,0),this.goToDate(t)},t.prototype.focusNextMonth=function(t,e=!0){t.preventDefault();t=new Date(this.currentDate);t.setMonth(t.getMonth()+1,1),this.goToDate(t,e)},t.prototype.focusPreviousMonth=function(t,e=!0){t.preventDefault();t=new Date(this.currentDate);t.setMonth(t.getMonth()-1,1),this.goToDate(t,e)},t.prototype.focusNextYear=function(t,e=!0){t.preventDefault();t=new Date(this.currentDate);t.setFullYear(t.getFullYear()+1,t.getMonth(),1),this.goToDate(t,e)},t.prototype.focusPreviousYear=function(t,e=!0){t.preventDefault();t=new Date(this.currentDate);t.setFullYear(t.getFullYear()-1,t.getMonth(),1),this.goToDate(t,e)},t.prototype.parseDataset=function(t,e){var o,i,n={};for([o,i]of Object.entries(t.properties))o in e&&(n[o]=e[o]);return n},t.prototype.mergeConfigs=function(...t){var e,o={};for(e of t)for(var i of Object.keys(e)){var n=o[i],a=e[i];o[i]="object"==typeof n&&"object"==typeof a?this.mergeConfigs(n,a):a}return o},s.prototype.init=function(){this.button.addEventListener("keydown",this.keyPress.bind(this)),this.button.addEventListener("click",this.click.bind(this))},s.prototype.update=function(t,e,o){var i=t.getDate();let n=this.picker.formattedDateHuman(t);o?(this.button.setAttribute("aria-disabled",!0),n="Excluded date, "+n):this.button.removeAttribute("aria-disabled"),this.button.style.display=e?"none":"block",this.button.setAttribute("data-testid",this.picker.formattedDateFromDate(t)),this.button.innerHTML=`<span class="govuk-visually-hidden">${n}</span><span aria-hidden="true">${i}</span>`,this.date=new Date(t)},s.prototype.click=function(t){this.picker.goToDate(this.date),this.picker.selectDate(this.date),t.stopPropagation(),t.preventDefault()},s.prototype.keyPress=function(t){let e=!0;switch(t.key){case"ArrowLeft":this.picker.focusPreviousDay();break;case"ArrowRight":this.picker.focusNextDay();break;case"ArrowUp":this.picker.focusPreviousWeek();break;case"ArrowDown":this.picker.focusNextWeek();break;case"Home":this.picker.focusFirstDayOfWeek();break;case"End":this.picker.focusLastDayOfWeek();break;case"PageUp":t.shiftKey?this.picker.focusPreviousYear(t):this.picker.focusPreviousMonth(t);break;case"PageDown":t.shiftKey?this.picker.focusNextYear(t):this.picker.focusNextMonth(t);break;default:e=!1}e&&(t.preventDefault(),t.stopPropagation())},r.DatePicker=t,r.FilterToggleButton=function(t){this.options=t,this.container=$(this.options.toggleButton.container),this.filterContainer=$(this.options.filter.container),this.createToggleButton(),this.setupResponsiveChecks(),this.filterContainer.attr("tabindex","-1"),this.options.startHidden&&this.hideMenu()},r.FilterToggleButton.prototype.setupResponsiveChecks=function(){this.mq=window.matchMedia(this.options.bigModeMediaQuery),this.mq.addListener($.proxy(this,"checkMode")),this.checkMode(this.mq)},r.FilterToggleButton.prototype.createToggleButton=function(){this.menuButton=$('<button class="govuk-button '+this.options.toggleButton.classes+'" type="button" aria-haspopup="true" aria-expanded="false">'+this.options.toggleButton.showText+"</button>"),this.menuButton.on("click",$.proxy(this,"onMenuButtonClick")),this.container.append(this.menuButton)},r.FilterToggleButton.prototype.checkMode=function(t){t.matches?this.enableBigMode():this.enableSmallMode()},r.FilterToggleButton.prototype.enableBigMode=function(){this.showMenu(),this.removeCloseButton()},r.FilterToggleButton.prototype.enableSmallMode=function(){this.hideMenu(),this.addCloseButton()},r.FilterToggleButton.prototype.addCloseButton=function(){this.options.closeButton&&(this.closeButton=$('<button class="moj-filter__close" type="button">'+this.options.closeButton.text+"</button>"),this.closeButton.on("click",$.proxy(this,"onCloseClick")),$(this.options.closeButton.container).append(this.closeButton))},r.FilterToggleButton.prototype.onCloseClick=function(){this.hideMenu(),this.menuButton.focus()},r.FilterToggleButton.prototype.removeCloseButton=function(){this.closeButton&&(this.closeButton.remove(),this.closeButton=null)},r.FilterToggleButton.prototype.hideMenu=function(){this.menuButton.attr("aria-expanded","false"),this.filterContainer.addClass("moj-js-hidden"),this.menuButton.text(this.options.toggleButton.showText)},r.FilterToggleButton.prototype.showMenu=function(){this.menuButton.attr("aria-expanded","true"),this.filterContainer.removeClass("moj-js-hidden"),this.menuButton.text(this.options.toggleButton.hideText)},r.FilterToggleButton.prototype.onMenuButtonClick=function(){this.toggle()},r.FilterToggleButton.prototype.toggle=function(){"false"==this.menuButton.attr("aria-expanded")?(this.showMenu(),this.filterContainer.get(0).focus()):this.hideMenu()},r.FormValidator=function(t,e){this.form=t,this.errors=[],this.validators=[],$(this.form).on("submit",$.proxy(this,"onSubmit")),this.summary=e&&e.summary?$(e.summary):$(".govuk-error-summary"),this.originalTitle=document.title},r.FormValidator.entityMap={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"},r.FormValidator.prototype.escapeHtml=function(t){return String(t).replace(/[&<>"'`=\/]/g,function(t){return r.FormValidator.entityMap[t]})},r.FormValidator.prototype.resetTitle=function(){document.title=this.originalTitle},r.FormValidator.prototype.updateTitle=function(){document.title=this.errors.length+" errors - "+document.title},r.FormValidator.prototype.showSummary=function(){this.summary.html(this.getSummaryHtml()),this.summary.removeClass("moj-hidden"),this.summary.attr("aria-labelledby","errorSummary-heading"),this.summary.focus()},r.FormValidator.prototype.getSummaryHtml=function(){i='<h2 id="error-summary-title" class="govuk-error-summary__title">There is a problem</h2><div class="govuk-error-summary__body"><ul class="govuk-list govuk-error-summary__list">';for(var t=0,e=this.errors.length;t<e;t++)var o=this.errors[t],i=(i=(i=(i+="<li>")+('<a href="#'+this.escapeHtml(o.fieldName)+'">'))+this.escapeHtml(o.message))+"</a>"+"</li>";return i=i+"</ul>"+"</div>"},r.FormValidator.prototype.hideSummary=function(){this.summary.addClass("moj-hidden"),this.summary.removeAttr("aria-labelledby")},r.FormValidator.prototype.onSubmit=function(t){this.removeInlineErrors(),this.hideSummary(),this.resetTitle(),this.validate()||(t.preventDefault(),this.updateTitle(),this.showSummary(),this.showInlineErrors())},r.FormValidator.prototype.showInlineErrors=function(){for(var t=0,e=this.errors.length;t<e;t++)this.showInlineError(this.errors[t])},r.FormValidator.prototype.showInlineError=function(t){var e=t.fieldName+"-error",o='<span class="govuk-error-message" id="'+e+'">'+this.escapeHtml(t.message)+"</span>",t=$("#"+t.fieldName),i=t.parents(".govuk-form-group"),n=i.find("label"),a=i.find("legend"),s=i.find("fieldset");i.addClass("govuk-form-group--error"),a.length?(a.after(o),i.attr("aria-invalid","true"),r.addAttributeValue(s[0],"aria-describedby",e)):(n.after(o),t.attr("aria-invalid","true"),r.addAttributeValue(t[0],"aria-describedby",e))},r.FormValidator.prototype.removeInlineErrors=function(){for(var t=0;t<this.errors.length;t++)this.removeInlineError(this.errors[t])},r.FormValidator.prototype.removeInlineError=function(t){var e=$("#"+t.fieldName).parents(".govuk-form-group"),t=(e.find(".govuk-error-message").remove(),e.removeClass("govuk-form-group--error"),e.find("[aria-invalid]").attr("aria-invalid","false"),t.fieldName+"-error");r.removeAttributeValue(e.find("[aria-describedby]")[0],"aria-describedby",t)},r.FormValidator.prototype.addValidator=function(t,e){this.validators.push({fieldName:t,rules:e,field:this.form.elements[t]})},r.FormValidator.prototype.validate=function(){this.errors=[];for(var t,e,o=null,i=0;i<this.validators.length;i++)for(o=this.validators[i],e=0;e<o.rules.length;e++){if("boolean"==typeof(t=o.rules[e].method(o.field,o.rules[e].params))&&!t){this.errors.push({fieldName:o.fieldName,message:o.rules[e].message});break}if("string"==typeof t){this.errors.push({fieldName:t,message:o.rules[e].message});break}}return 0===this.errors.length},r.dragAndDropSupported()&&r.formDataSupported()&&r.fileApiSupported()&&(r.MultiFileUpload=function(t){this.defaultParams={uploadFileEntryHook:$.noop,uploadFileExitHook:$.noop,uploadFileErrorHook:$.noop,fileDeleteHook:$.noop,uploadStatusText:"Uploading files, please wait",dropzoneHintText:"Drag and drop files here or",dropzoneButtonText:"Choose files"},this.params=$.extend({},this.defaultParams,t),this.container=$(this.params.container),this.container.addClass("moj-multi-file-upload--enhanced"),this.feedbackContainer=this.container.find(".moj-multi-file__uploaded-files"),this.setupFileInput(),this.setupDropzone(),this.setupLabel(),this.setupStatusBox(),this.container.on("click",".moj-multi-file-upload__delete",$.proxy(this,"onFileDeleteClick"))},r.MultiFileUpload.prototype.setupDropzone=function(){this.fileInput.wrap('<div class="moj-multi-file-upload__dropzone" />'),this.dropzone=this.container.find(".moj-multi-file-upload__dropzone"),this.dropzone.on("dragover",$.proxy(this,"onDragOver")),this.dropzone.on("dragleave",$.proxy(this,"onDragLeave")),this.dropzone.on("drop",$.proxy(this,"onDrop"))},r.MultiFileUpload.prototype.setupLabel=function(){this.label=$('<label for="'+this.fileInput[0].id+'" class="govuk-button govuk-button--secondary">'+this.params.dropzoneButtonText+"</label>"),this.dropzone.append('<p class="govuk-body">'+this.params.dropzoneHintText+"</p>"),this.dropzone.append(this.label)},r.MultiFileUpload.prototype.setupFileInput=function(){this.fileInput=this.container.find(".moj-multi-file-upload__input"),this.fileInput.on("change",$.proxy(this,"onFileChange")),this.fileInput.on("focus",$.proxy(this,"onFileFocus")),this.fileInput.on("blur",$.proxy(this,"onFileBlur"))},r.MultiFileUpload.prototype.setupStatusBox=function(){this.status=$('<div aria-live="polite" role="status" class="govuk-visually-hidden" />'),this.dropzone.append(this.status)},r.MultiFileUpload.prototype.onDragOver=function(t){t.preventDefault(),this.dropzone.addClass("moj-multi-file-upload--dragover")},r.MultiFileUpload.prototype.onDragLeave=function(){this.dropzone.removeClass("moj-multi-file-upload--dragover")},r.MultiFileUpload.prototype.onDrop=function(t){t.preventDefault(),this.dropzone.removeClass("moj-multi-file-upload--dragover"),this.feedbackContainer.removeClass("moj-hidden"),this.status.html(this.params.uploadStatusText),this.uploadFiles(t.originalEvent.dataTransfer.files)},r.MultiFileUpload.prototype.uploadFiles=function(t){for(var e=0;e<t.length;e++)this.uploadFile(t[e])},r.MultiFileUpload.prototype.onFileChange=function(t){this.feedbackContainer.removeClass("moj-hidden"),this.status.html(this.params.uploadStatusText),this.uploadFiles(t.currentTarget.files),this.fileInput.replaceWith($(t.currentTarget).val("").clone(!0)),this.setupFileInput(),this.fileInput.focus()},r.MultiFileUpload.prototype.onFileFocus=function(t){this.label.addClass("moj-multi-file-upload--focused")},r.MultiFileUpload.prototype.onFileBlur=function(t){this.label.removeClass("moj-multi-file-upload--focused")},r.MultiFileUpload.prototype.getSuccessHtml=function(t){return'<span class="moj-multi-file-upload__success"> <svg class="moj-banner__icon" fill="currentColor" role="presentation" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25" height="25" width="25"><path d="M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z"/></svg> '+t.messageHtml+"</span>"},r.MultiFileUpload.prototype.getErrorHtml=function(t){return'<span class="moj-multi-file-upload__error"> <svg class="moj-banner__icon" fill="currentColor" role="presentation" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25" height="25" width="25"><path d="M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z"/></svg> '+t.message+"</span>"},r.MultiFileUpload.prototype.getFileRowHtml=function(t){var e="";return(e+='<div class="govuk-summary-list__row moj-multi-file-upload__row">')+' <div class="govuk-summary-list__value moj-multi-file-upload__message">'+('<span class="moj-multi-file-upload__filename">'+t.name+"</span>")+'<span class="moj-multi-file-upload__progress">0%</span>'+" </div>"+' <div class="govuk-summary-list__actions moj-multi-file-upload__actions"></div>'+"</div>"},r.MultiFileUpload.prototype.getDeleteButtonHtml=function(t){var e='<button class="moj-multi-file-upload__delete govuk-button govuk-button--secondary govuk-!-margin-bottom-0" type="button" name="delete" value="'+t.filename+'">';return e+('Delete <span class="govuk-visually-hidden">'+t.originalname+"</span>")+"</button>"},r.MultiFileUpload.prototype.uploadFile=function(i){this.params.uploadFileEntryHook(this,i);var t=new FormData,e=(t.append("documents",i),$(this.getFileRowHtml(i)));this.feedbackContainer.find(".moj-multi-file-upload__list").append(e),$.ajax({url:this.params.uploadUrl,type:"post",data:t,processData:!1,contentType:!1,success:$.proxy(function(t){t.error?(e.find(".moj-multi-file-upload__message").html(this.getErrorHtml(t.error)),this.status.html(t.error.message)):(e.find(".moj-multi-file-upload__message").html(this.getSuccessHtml(t.success)),this.status.html(t.success.messageText)),e.find(".moj-multi-file-upload__actions").append(this.getDeleteButtonHtml(t.file)),this.params.uploadFileExitHook(this,i,t)},this),error:$.proxy(function(t,e,o){this.params.uploadFileErrorHook(this,i,t,e,o)},this),xhr:function(){var t=new XMLHttpRequest;return t.upload.addEventListener("progress",function(t){t.lengthComputable&&(t=t.loaded/t.total,t=parseInt(100*t,10),e.find(".moj-multi-file-upload__progress").text(" "+t+"%"))},!1),t}})},r.MultiFileUpload.prototype.onFileDeleteClick=function(t){t.preventDefault();var e=$(t.currentTarget),t={};t[e[0].name]=e[0].value,$.ajax({url:this.params.deleteUrl,type:"post",dataType:"json",data:t,success:$.proxy(function(t){t.error||(e.parents(".moj-multi-file-upload__row").remove(),0===this.feedbackContainer.find(".moj-multi-file-upload__row").length&&this.feedbackContainer.addClass("moj-hidden")),this.params.fileDeleteHook(this,t)},this)})}),r.MultiSelect=function(e){if(this.container=$(e.container),!this.container.data("moj-multi-select-initialised")){this.container.data("moj-multi-select-initialised",!0);var o=e.id_prefix;let t=void 0!==o?o+"checkboxes-all":"checkboxes-all";this.toggle=$(this.getToggleHtml(t)),this.toggleButton=this.toggle.find("input"),this.toggleButton.on("click",$.proxy(this,"onButtonClick")),this.container.append(this.toggle),this.checkboxes=$(e.checkboxes),this.checkboxes.on("click",$.proxy(this,"onCheckboxClick")),this.checked=e.checked||!1}},r.MultiSelect.prototype.getToggleHtml=function(t){var e="";return e+'<div class="govuk-checkboxes__item govuk-checkboxes--small moj-multi-select__checkbox">'+` <input type="checkbox" class="govuk-checkboxes__input" id="${t}">`+` <label class="govuk-label govuk-checkboxes__label moj-multi-select__toggle-label" for="${t}">`+' <span class="govuk-visually-hidden">Select all</span>'+" </label>"+"</div>"},r.MultiSelect.prototype.onButtonClick=function(t){this.checked?(this.uncheckAll(),this.toggleButton[0].checked=!1):(this.checkAll(),this.toggleButton[0].checked=!0)},r.MultiSelect.prototype.checkAll=function(){this.checkboxes.each($.proxy(function(t,e){e.checked=!0},this)),this.checked=!0},r.MultiSelect.prototype.uncheckAll=function(){this.checkboxes.each($.proxy(function(t,e){e.checked=!1},this)),this.checked=!1},r.MultiSelect.prototype.onCheckboxClick=function(t){t.target.checked?this.checkboxes.filter(":checked").length===this.checkboxes.length&&(this.toggleButton[0].checked=!0,this.checked=!0):(this.toggleButton[0].checked=!1,this.checked=!1)},r.PasswordReveal=function(t){this.el=t;t=$(this.el);t.data("moj-password-reveal-initialised")||(t.data("moj-password-reveal-initialised",!0),t.attr("spellcheck","false"),t.wrap('<div class="moj-password-reveal"></div>'),this.container=$(this.el).parent(),this.createButton())},r.PasswordReveal.prototype.createButton=function(){this.button=$('<button type="button" class="govuk-button govuk-button--secondary moj-password-reveal__button">Show <span class="govuk-visually-hidden">password</span></button>'),this.container.append(this.button),this.button.on("click",$.proxy(this,"onButtonClick"))},r.PasswordReveal.prototype.onButtonClick=function(){"password"===this.el.type?(this.el.type="text",this.button.html('Hide <span class="govuk-visually-hidden">password</span>')):(this.el.type="password",this.button.html('Show <span class="govuk-visually-hidden">password</span>'))},"contentEditable"in document.documentElement&&(r.RichTextEditor=function(t){this.options=t,this.options.toolbar=this.options.toolbar||{bold:!1,italic:!1,underline:!1,bullets:!0,numbers:!0},this.textarea=this.options.textarea,this.container=$(this.textarea).parent(),this.container.data("moj-rich-text-editor-initialised")||(this.container.data("moj-rich-text-editor-initialised",!0),this.createToolbar(),this.hideDefault(),this.configureToolbar(),this.keys={left:37,right:39,up:38,down:40},this.container.on("click",".moj-rich-text-editor__toolbar-button",$.proxy(this,"onButtonClick")),this.container.find(".moj-rich-text-editor__content").on("input",$.proxy(this,"onEditorInput")),this.container.find("label").on("click",$.proxy(this,"onLabelClick")),this.toolbar.on("keydown",$.proxy(this,"onToolbarKeydown")))},r.RichTextEditor.prototype.onToolbarKeydown=function(t){switch(t.keyCode){case this.keys.right:case this.keys.down:var e,o=(e=this.toolbar.find("button[tabindex=0]")).next("button");o[0]&&(o.focus(),e.attr("tabindex","-1"),o.attr("tabindex","0"));break;case this.keys.left:case this.keys.up:o=(e=this.toolbar.find("button[tabindex=0]")).prev("button");o[0]&&(o.focus(),e.attr("tabindex","-1"),o.attr("tabindex","0"))}},r.RichTextEditor.prototype.getToolbarHtml=function(){var t="";return t+='<div class="moj-rich-text-editor__toolbar" role="toolbar">',this.options.toolbar.bold&&(t+='<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--bold" type="button" data-command="bold"><span class="govuk-visually-hidden">Bold</span></button>'),this.options.toolbar.italic&&(t+='<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--italic" type="button" data-command="italic"><span class="govuk-visually-hidden">Italic</span></button>'),this.options.toolbar.underline&&(t+='<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--underline" type="button" data-command="underline"><span class="govuk-visually-hidden">Underline</span></button>'),this.options.toolbar.bullets&&(t+='<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--unordered-list" type="button" data-command="insertUnorderedList"><span class="govuk-visually-hidden">Unordered list</span></button>'),this.options.toolbar.numbers&&(t+='<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--ordered-list" type="button" data-command="insertOrderedList"><span class="govuk-visually-hidden">Ordered list</span></button>'),t+="</div>"},r.RichTextEditor.prototype.getEnhancedHtml=function(t){return this.getToolbarHtml()+'<div class="govuk-textarea moj-rich-text-editor__content" contenteditable="true" spellcheck="false"></div>'},r.RichTextEditor.prototype.hideDefault=function(){this.textarea=this.container.find("textarea"),this.textarea.addClass("govuk-visually-hidden"),this.textarea.attr("aria-hidden",!0),this.textarea.attr("tabindex","-1")},r.RichTextEditor.prototype.createToolbar=function(){this.toolbar=document.createElement("div"),this.toolbar.className="moj-rich-text-editor",this.toolbar.innerHTML=this.getEnhancedHtml(),this.container.append(this.toolbar),this.toolbar=this.container.find(".moj-rich-text-editor__toolbar"),this.container.find(".moj-rich-text-editor__content").html(this.textarea.val())},r.RichTextEditor.prototype.configureToolbar=function(){this.buttons=this.container.find(".moj-rich-text-editor__toolbar-button"),this.buttons.prop("tabindex","-1"),this.buttons.first().prop("tabindex","0")},r.RichTextEditor.prototype.onButtonClick=function(t){document.execCommand($(t.currentTarget).data("command"),!1,null)},r.RichTextEditor.prototype.getContent=function(){return this.container.find(".moj-rich-text-editor__content").html()},r.RichTextEditor.prototype.onEditorInput=function(t){this.updateTextarea()},r.RichTextEditor.prototype.updateTextarea=function(){document.execCommand("defaultParagraphSeparator",!1,"p"),this.textarea.val(this.getContent())},r.RichTextEditor.prototype.onLabelClick=function(t){t.preventDefault(),this.container.find(".moj-rich-text-editor__content").focus()}),r.SearchToggle=function(t){this.options=t,this.container=$(this.options.search.container),this.toggleButtonContainer=$(this.options.toggleButton.container),this.container.data("moj-search-toggle-initialised")||(this.container.data("moj-search-toggle-initialised",!0),this.toggleButton=$('<button class="moj-search-toggle__button" type="button" aria-haspopup="true" aria-expanded="false">'+this.options.toggleButton.text+'<svg viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="moj-search-toggle__button__icon"><path d="M7.433,12.5790048 C6.06762625,12.5808611 4.75763941,12.0392925 3.79217348,11.0738265 C2.82670755,10.1083606 2.28513891,8.79837375 2.28699522,7.433 C2.28513891,6.06762625 2.82670755,4.75763941 3.79217348,3.79217348 C4.75763941,2.82670755 6.06762625,2.28513891 7.433,2.28699522 C8.79837375,2.28513891 10.1083606,2.82670755 11.0738265,3.79217348 C12.0392925,4.75763941 12.5808611,6.06762625 12.5790048,7.433 C12.5808611,8.79837375 12.0392925,10.1083606 11.0738265,11.0738265 C10.1083606,12.0392925 8.79837375,12.5808611 7.433,12.5790048 L7.433,12.5790048 Z M14.293,12.579 L13.391,12.579 L13.071,12.269 C14.2300759,10.9245158 14.8671539,9.20813198 14.866,7.433 C14.866,3.32786745 11.5381325,-1.65045755e-15 7.433,-1.65045755e-15 C3.32786745,-1.65045755e-15 -1.65045755e-15,3.32786745 -1.65045755e-15,7.433 C-1.65045755e-15,11.5381325 3.32786745,14.866 7.433,14.866 C9.208604,14.8671159 10.9253982,14.2296624 12.27,13.07 L12.579,13.39 L12.579,14.294 L18.296,20 L20,18.296 L14.294,12.579 L14.293,12.579 Z"></path></svg></button>'),this.toggleButton.on("click",$.proxy(this,"onToggleButtonClick")),this.toggleButtonContainer.append(this.toggleButton),$(document).on("click",this.onDocumentClick.bind(this)),$(document).on("focusin",this.onDocumentClick.bind(this)))},r.SearchToggle.prototype.showMenu=function(){this.toggleButton.attr("aria-expanded","true"),this.container.removeClass("moj-js-hidden"),this.container.find("input").first().get(0).focus()},r.SearchToggle.prototype.hideMenu=function(){this.container.addClass("moj-js-hidden"),this.toggleButton.attr("aria-expanded","false")},r.SearchToggle.prototype.onToggleButtonClick=function(){"false"==this.toggleButton.attr("aria-expanded")?this.showMenu():this.hideMenu()},r.SearchToggle.prototype.onDocumentClick=function(t){$.contains(this.toggleButtonContainer[0],t.target)||$.contains(this.container[0],t.target)||this.hideMenu()},r.SortableTable=function(t){this.table=$(t.table),this.table.data("moj-search-toggle-initialised")||(this.table.data("moj-search-toggle-initialised",!0),this.setupOptions(t),this.body=this.table.find("tbody"),this.createHeadingButtons(),this.createStatusBox(),this.initialiseSortedColumn(),this.table.on("click","th button",$.proxy(this,"onSortButtonClick")))},r.SortableTable.prototype.setupOptions=function(t){this.statusMessage=(t=t||{}).statusMessage||"Sort by %heading% (%direction%)",this.ascendingText=t.ascendingText||"ascending",this.descendingText=t.descendingText||"descending"},r.SortableTable.prototype.createHeadingButtons=function(){for(var t,e=this.table.find("thead th"),o=0;o<e.length;o++)(t=$(e[o])).attr("aria-sort")&&this.createHeadingButton(t,o)},r.SortableTable.prototype.createHeadingButton=function(t,e){var o=t.text(),e=$('<button type="button" data-index="'+e+'">'+o+"</button>");t.text(""),t.append(e)},r.SortableTable.prototype.createStatusBox=function(){this.status=$('<div aria-live="polite" role="status" aria-atomic="true" class="govuk-visually-hidden" />'),this.table.parent().append(this.status)},r.SortableTable.prototype.initialiseSortedColumn=function(){var i=this.getTableRowsArray();this.table.find("th").filter('[aria-sort="ascending"], [aria-sort="descending"]').first().each((t,e)=>{var o=$(e).attr("aria-sort"),e=$(e).find("button").attr("data-index"),e=this.sort(i,e,o);this.addRows(e)})},r.SortableTable.prototype.onSortButtonClick=function(t){var e=t.currentTarget.getAttribute("data-index"),o=$(t.currentTarget).parent().attr("aria-sort"),o="none"===o||"descending"===o?"ascending":"descending",i=this.getTableRowsArray(),i=this.sort(i,e,o);this.addRows(i),this.removeButtonStates(),this.updateButtonState($(t.currentTarget),o)},r.SortableTable.prototype.updateButtonState=function(t,e){t.parent().attr("aria-sort",e);var o=this.statusMessage;o=(o=o.replace(/%heading%/,t.text())).replace(/%direction%/,this[e+"Text"]),this.status.text(o)},r.SortableTable.prototype.removeButtonStates=function(){this.table.find("thead th").attr("aria-sort","none")},r.SortableTable.prototype.addRows=function(t){for(var e=0;e<t.length;e++)this.body.append(t[e])},r.SortableTable.prototype.getTableRowsArray=function(){for(var t=[],e=this.body.find("tr"),o=0;o<e.length;o++)t.push(e[o]);return t},r.SortableTable.prototype.sort=function(t,i,n){return t.sort(function(t,e){var t=$(t).find("td,th").eq(i),e=$(e).find("td,th").eq(i),o="ascending"===n?this.getCellValue(t):this.getCellValue(e),e="ascending"===n?this.getCellValue(e):this.getCellValue(t);return"string"==typeof o||"string"==typeof e?o.toString().localeCompare(e.toString()):o-e}.bind(this))},r.SortableTable.prototype.getCellValue=function(t){var t=t.attr("data-sort-value")||t.html(),e=parseFloat(t);return isNaN(e)?t:e},r});
70
+ </div>`},g.prototype.createCalendarHeaders=function(){this.dayLabels.forEach(t=>{t=`<th scope="col"><span aria-hidden="true">${t.substring(0,3)}</span><span class="govuk-visually-hidden">${t}</span></th>`;this.$dialog.querySelector("thead > tr").insertAdjacentHTML("beforeend",t)})},g.prototype.leadingZeros=function(t,e=2){let o=t.toString();for(;o.length<e;)o="0"+o;return o},g.prototype.setOptions=function(){this.setMinAndMaxDatesOnCalendar(),this.setExcludedDates(),this.setExcludedDays(),this.setLeadingZeros(),this.setWeekStartDay()},g.prototype.setMinAndMaxDatesOnCalendar=function(){this.config.minDate&&(this.minDate=this.formattedDateFromString(this.config.minDate,null),this.minDate)&&this.currentDate<this.minDate&&(this.currentDate=this.minDate),this.config.maxDate&&(this.maxDate=this.formattedDateFromString(this.config.maxDate,null),this.maxDate)&&this.currentDate>this.maxDate&&(this.currentDate=this.maxDate)},g.prototype.setExcludedDates=function(){this.config.excludedDates&&(this.excludedDates=this.config.excludedDates.replace(/\s+/," ").split(" ").map(t=>t.includes("-")?this.parseDateRangeString(t):this.formattedDateFromString(t)).flat().filter(t=>t))},g.prototype.parseDateRangeString=function(t){var e=[],[t,o]=t.split("-").map(t=>this.formattedDateFromString(t,null));if(t&&o)for(var i=new Date(t.getTime());i<=o;)e.push(new Date(i)),i.setDate(i.getDate()+1);return e},g.prototype.setExcludedDays=function(){if(this.config.excludedDays){let e=this.dayLabels.map(t=>t.toLowerCase());"monday"===this.config.weekStartDay&&e.unshift(e.pop()),this.excludedDays=this.config.excludedDays.replace(/\s+/," ").toLowerCase().split(" ").map(t=>e.indexOf(t)).filter(t=>-1!==t)}},g.prototype.setLeadingZeros=function(){"boolean"!=typeof this.config.leadingZeros&&("true"===this.config.leadingZeros.toLowerCase()?this.config.leadingZeros=!0:"false"===this.config.leadingZeros.toLowerCase()&&(this.config.leadingZeros=!1))},g.prototype.setWeekStartDay=function(){var t=this.config.weekStartDay;t&&"sunday"===t.toLowerCase()?(this.config.weekStartDay="sunday",this.dayLabels.unshift(this.dayLabels.pop())):this.config.weekStartDay="monday"},g.prototype.isExcludedDate=function(t){if(this.minDate&&this.minDate>t)return!0;if(this.maxDate&&this.maxDate<t)return!0;for(var e of this.excludedDates)if(t.toDateString()===e.toDateString())return!0;return!!this.excludedDays.includes(t.getDay())},g.prototype.formattedDateFromString=function(t,e=new Date){var o=/(\d{1,2})([-/,. ])(\d{1,2})\2(\d{4})/;return o.test(t)&&(o=(t=t.match(o))[1],(t=new Date(t[4]+`-${t[3]}-`+o))instanceof Date)&&!isNaN(t)?t:e},g.prototype.formattedDateFromDate=function(t){return this.config.leadingZeros?`${this.leadingZeros(t.getDate())}/${this.leadingZeros(t.getMonth()+1)}/`+t.getFullYear():`${t.getDate()}/${t.getMonth()+1}/`+t.getFullYear()},g.prototype.formattedDateHuman=function(t){return`${this.dayLabels[(t.getDay()+6)%7]} ${t.getDate()} ${this.monthLabels[t.getMonth()]} `+t.getFullYear()},g.prototype.backgroundClick=function(t){!this.isOpen()||this.$dialog.contains(t.target)||this.$input.contains(t.target)||this.$calendarButton.contains(t.target)||(t.preventDefault(),this.closeDialog())},g.prototype.firstButtonKeydown=function(t){"Tab"===t.key&&t.shiftKey&&(this.$lastButtonInDialog.focus(),t.preventDefault())},g.prototype.lastButtonKeydown=function(t){"Tab"!==t.key||t.shiftKey||(this.$firstButtonInDialog.focus(),t.preventDefault())},g.prototype.updateCalendar=function(){this.$dialogTitle.innerHTML=this.monthLabels[this.currentDate.getMonth()]+" "+this.currentDate.getFullYear();var e=this.currentDate,t=new Date(e.getFullYear(),e.getMonth(),1);let o;o="monday"===this.config.weekStartDay?0===t.getDay()?6:t.getDay()-1:t.getDay(),t.setDate(t.getDate()-o);var i=new Date(t);for(let t=0;t<this.calendarDays.length;t++){var n=i.getMonth()!==e.getMonth(),s=this.isExcludedDate(i);this.calendarDays[t].update(i,n,s),i.setDate(i.getDate()+1)}},g.prototype.setCurrentDate=function(i=!0){let n=this.currentDate;var t;this.calendarDays.forEach(t=>{t.button.classList.add("moj-datepicker__button"),t.button.classList.add("moj-datepicker__calendar-day"),t.button.setAttribute("tabindex",-1),t.button.classList.remove(this.selectedDayButtonClass);var e=t.date,o=(e.setHours(0,0,0,0),new Date);o.setHours(0,0,0,0),e.getTime()===n.getTime()&&i&&(t.button.setAttribute("tabindex",0),t.button.focus(),t.button.classList.add(this.selectedDayButtonClass)),this.inputDate&&e.getTime()===this.inputDate.getTime()?(t.button.classList.add(this.currentDayButtonClass),t.button.setAttribute("aria-current","date")):(t.button.classList.remove(this.currentDayButtonClass),t.button.removeAttribute("aria-current")),e.getTime()===o.getTime()?t.button.classList.add(this.todayButtonClass):t.button.classList.remove(this.todayButtonClass)}),i||((t=this.calendarDays.filter(t=>"block"===window.getComputedStyle(t.button).display&&!t.button.disabled))[0].button.setAttribute("tabindex",0),this.currentDate=t[0].date)},g.prototype.selectDate=function(t){this.isExcludedDate(t)||(this.$calendarButton.querySelector("span").innerText="Choose date. Selected date is "+this.formattedDateHuman(t),this.$input.value=this.formattedDateFromDate(t),t=new Event("change",{bubbles:!0,cancelable:!0}),this.$input.dispatchEvent(t),this.closeDialog())},g.prototype.isOpen=function(){return this.$dialog.classList.contains("moj-datepicker__dialog--open")},g.prototype.toggleDialog=function(t){t.preventDefault(),this.isOpen()?this.closeDialog():(this.setMinAndMaxDatesOnCalendar(),this.openDialog())},g.prototype.openDialog=function(){this.$dialog.hidden=!1,this.$dialog.classList.add("moj-datepicker__dialog--open"),this.$calendarButton.setAttribute("aria-expanded","true"),this.$input.offsetWidth>this.$dialog.offsetWidth&&(this.$dialog.style.right="0px"),this.$dialog.style.top=this.$input.offsetHeight+3+"px",this.inputDate=this.formattedDateFromString(this.$input.value),this.currentDate=this.inputDate,this.currentDate.setHours(0,0,0,0),this.updateCalendar(),this.setCurrentDate()},g.prototype.closeDialog=function(){this.$dialog.hidden=!0,this.$dialog.classList.remove("moj-datepicker__dialog--open"),this.$calendarButton.setAttribute("aria-expanded","false"),this.$calendarButton.focus()},g.prototype.goToDate=function(t,e){var o=this.currentDate;this.currentDate=t,o.getMonth()===this.currentDate.getMonth()&&o.getFullYear()===this.currentDate.getFullYear()||this.updateCalendar(),this.setCurrentDate(e)},g.prototype.focusNextDay=function(){var t=new Date(this.currentDate);t.setDate(t.getDate()+1),this.goToDate(t)},g.prototype.focusPreviousDay=function(){var t=new Date(this.currentDate);t.setDate(t.getDate()-1),this.goToDate(t)},g.prototype.focusNextWeek=function(){var t=new Date(this.currentDate);t.setDate(t.getDate()+7),this.goToDate(t)},g.prototype.focusPreviousWeek=function(){var t=new Date(this.currentDate);t.setDate(t.getDate()-7),this.goToDate(t)},g.prototype.focusFirstDayOfWeek=function(){var t=new Date(this.currentDate),e="sunday"===this.config.weekStartDay?0:1,o=t.getDay(),e=e<=o?o-e:6-o;t.setDate(t.getDate()-e),t.setHours(0,0,0,0),this.goToDate(t)},g.prototype.focusLastDayOfWeek=function(){var t=new Date(this.currentDate),e="sunday"===this.config.weekStartDay?6:0,o=t.getDay(),e=o<=e?e-o:7-o;t.setDate(t.getDate()+e),t.setHours(0,0,0,0),this.goToDate(t)},g.prototype.focusNextMonth=function(t,e=!0){t.preventDefault();t=new Date(this.currentDate);t.setMonth(t.getMonth()+1,1),this.goToDate(t,e)},g.prototype.focusPreviousMonth=function(t,e=!0){t.preventDefault();t=new Date(this.currentDate);t.setMonth(t.getMonth()-1,1),this.goToDate(t,e)},g.prototype.focusNextYear=function(t,e=!0){t.preventDefault();t=new Date(this.currentDate);t.setFullYear(t.getFullYear()+1,t.getMonth(),1),this.goToDate(t,e)},g.prototype.focusPreviousYear=function(t,e=!0){t.preventDefault();t=new Date(this.currentDate);t.setFullYear(t.getFullYear()-1,t.getMonth(),1),this.goToDate(t,e)},g.prototype.parseDataset=function(t,e){var o,i={};for([o,,]of Object.entries(t.properties))o in e&&(i[o]=e[o]);return i},g.prototype.mergeConfigs=function(...t){var e,o={};for(e of t)for(var i of Object.keys(e)){var n=o[i],s=e[i];o[i]="object"==typeof n&&"object"==typeof s?this.mergeConfigs(n,s):s}return o},m.prototype.init=function(){this.button.addEventListener("keydown",this.keyPress.bind(this)),this.button.addEventListener("click",this.click.bind(this))},m.prototype.update=function(t,e,o){var i=t.getDate();let n=this.picker.formattedDateHuman(t);o?(this.button.setAttribute("aria-disabled",!0),n="Excluded date, "+n):this.button.removeAttribute("aria-disabled"),this.button.style.display=e?"none":"block",this.button.setAttribute("data-testid",this.picker.formattedDateFromDate(t)),this.button.innerHTML=`<span class="govuk-visually-hidden">${n}</span><span aria-hidden="true">${i}</span>`,this.date=new Date(t)},m.prototype.click=function(t){this.picker.goToDate(this.date),this.picker.selectDate(this.date),t.stopPropagation(),t.preventDefault()},m.prototype.keyPress=function(t){let e=!0;switch(t.key){case"ArrowLeft":this.picker.focusPreviousDay();break;case"ArrowRight":this.picker.focusNextDay();break;case"ArrowUp":this.picker.focusPreviousWeek();break;case"ArrowDown":this.picker.focusNextWeek();break;case"Home":this.picker.focusFirstDayOfWeek();break;case"End":this.picker.focusLastDayOfWeek();break;case"PageUp":t.shiftKey?this.picker.focusPreviousYear(t):this.picker.focusPreviousMonth(t);break;case"PageDown":t.shiftKey?this.picker.focusNextYear(t):this.picker.focusNextMonth(t);break;default:e=!1}e&&(t.preventDefault(),t.stopPropagation())},j={DatePicker:g}),j).DatePicker;var t=(()=>{if(!C){C=1;let e=z;function t(t){this.options=t,this.container=e(this.options.toggleButton.container),this.filterContainer=e(this.options.filter.container),this.createToggleButton(),this.setupResponsiveChecks(),this.filterContainer.attr("tabindex","-1"),this.options.startHidden&&this.hideMenu()}t.prototype.setupResponsiveChecks=function(){this.mq=window.matchMedia(this.options.bigModeMediaQuery),this.mq.addListener(e.proxy(this,"checkMode")),this.checkMode(this.mq)},t.prototype.createToggleButton=function(){this.menuButton=e(`<button class="govuk-button ${this.options.toggleButton.classes}" type="button" aria-haspopup="true" aria-expanded="false">${this.options.toggleButton.showText}</button>`),this.menuButton.on("click",e.proxy(this,"onMenuButtonClick")),this.container.append(this.menuButton)},t.prototype.checkMode=function(t){t.matches?this.enableBigMode():this.enableSmallMode()},t.prototype.enableBigMode=function(){this.showMenu(),this.removeCloseButton()},t.prototype.enableSmallMode=function(){this.hideMenu(),this.addCloseButton()},t.prototype.addCloseButton=function(){this.options.closeButton&&(this.closeButton=e(`<button class="moj-filter__close" type="button">${this.options.closeButton.text}</button>`),this.closeButton.on("click",e.proxy(this,"onCloseClick")),e(this.options.closeButton.container).append(this.closeButton))},t.prototype.onCloseClick=function(){this.hideMenu(),this.menuButton.focus()},t.prototype.removeCloseButton=function(){this.closeButton&&(this.closeButton.remove(),this.closeButton=null)},t.prototype.hideMenu=function(){this.menuButton.attr("aria-expanded","false"),this.filterContainer.addClass("moj-js-hidden"),this.menuButton.text(this.options.toggleButton.showText)},t.prototype.showMenu=function(){this.menuButton.attr("aria-expanded","true"),this.filterContainer.removeClass("moj-js-hidden"),this.menuButton.text(this.options.toggleButton.hideText)},t.prototype.onMenuButtonClick=function(){this.toggle()},t.prototype.toggle=function(){"false"===this.menuButton.attr("aria-expanded")?(this.showMenu(),this.filterContainer.get(0).focus()):this.hideMenu()},w={FilterToggleButton:t}}return w})().FilterToggleButton,e=(()=>{if(!$){$=1;let o=z,{dragAndDropSupported:e,fileApiSupported:i,formDataSupported:n}=Z();function t(t){e()&&n()&&i()&&(this.defaultParams={uploadFileEntryHook:o.noop,uploadFileExitHook:o.noop,uploadFileErrorHook:o.noop,fileDeleteHook:o.noop,uploadStatusText:"Uploading files, please wait",dropzoneHintText:"Drag and drop files here or",dropzoneButtonText:"Choose files"},this.params=o.extend({},this.defaultParams,t),this.container=o(this.params.container),this.container.addClass("moj-multi-file-upload--enhanced"),this.feedbackContainer=this.container.find(".moj-multi-file__uploaded-files"),this.setupFileInput(),this.setupDropzone(),this.setupLabel(),this.setupStatusBox(),this.container.on("click",".moj-multi-file-upload__delete",o.proxy(this,"onFileDeleteClick")))}t.prototype.setupDropzone=function(){this.fileInput.wrap('<div class="moj-multi-file-upload__dropzone" />'),this.dropzone=this.container.find(".moj-multi-file-upload__dropzone"),this.dropzone.on("dragover",o.proxy(this,"onDragOver")),this.dropzone.on("dragleave",o.proxy(this,"onDragLeave")),this.dropzone.on("drop",o.proxy(this,"onDrop"))},t.prototype.setupLabel=function(){this.label=o(`<label for="${this.fileInput[0].id}" class="govuk-button govuk-button--secondary">${this.params.dropzoneButtonText}</label>`),this.dropzone.append(`<p class="govuk-body">${this.params.dropzoneHintText}</p>`),this.dropzone.append(this.label)},t.prototype.setupFileInput=function(){this.fileInput=this.container.find(".moj-multi-file-upload__input"),this.fileInput.on("change",o.proxy(this,"onFileChange")),this.fileInput.on("focus",o.proxy(this,"onFileFocus")),this.fileInput.on("blur",o.proxy(this,"onFileBlur"))},t.prototype.setupStatusBox=function(){this.status=o('<div aria-live="polite" role="status" class="govuk-visually-hidden" />'),this.dropzone.append(this.status)},t.prototype.onDragOver=function(t){t.preventDefault(),this.dropzone.addClass("moj-multi-file-upload--dragover")},t.prototype.onDragLeave=function(){this.dropzone.removeClass("moj-multi-file-upload--dragover")},t.prototype.onDrop=function(t){t.preventDefault(),this.dropzone.removeClass("moj-multi-file-upload--dragover"),this.feedbackContainer.removeClass("moj-hidden"),this.status.html(this.params.uploadStatusText),this.uploadFiles(t.originalEvent.dataTransfer.files)},t.prototype.uploadFiles=function(e){for(let t=0;t<e.length;t++)this.uploadFile(e[t])},t.prototype.onFileChange=function(t){this.feedbackContainer.removeClass("moj-hidden"),this.status.html(this.params.uploadStatusText),this.uploadFiles(t.currentTarget.files),this.fileInput.replaceWith(o(t.currentTarget).val("").clone(!0)),this.setupFileInput(),this.fileInput.get(0).focus()},t.prototype.onFileFocus=function(t){this.label.addClass("moj-multi-file-upload--focused")},t.prototype.onFileBlur=function(t){this.label.removeClass("moj-multi-file-upload--focused")},t.prototype.getSuccessHtml=function(t){return`<span class="moj-multi-file-upload__success"> <svg class="moj-banner__icon" fill="currentColor" role="presentation" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25" height="25" width="25"><path d="M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z"/></svg>${t.messageHtml}</span>`},t.prototype.getErrorHtml=function(t){return`<span class="moj-multi-file-upload__error"> <svg class="moj-banner__icon" fill="currentColor" role="presentation" focusable="false" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 25 25" height="25" width="25"><path d="M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z"/></svg>${t.message}</span>`},t.prototype.getFileRowHtml=function(t){return`
71
+ <div class="govuk-summary-list__row moj-multi-file-upload__row">;
72
+ <div class="govuk-summary-list__value moj-multi-file-upload__message">;
73
+ <span class="moj-multi-file-upload__filename">${t.name}</span>;
74
+ <span class="moj-multi-file-upload__progress">0%</span>;
75
+ </div>';
76
+ <div class="govuk-summary-list__actions moj-multi-file-upload__actions"></div>;
77
+ </div>`},t.prototype.getDeleteButtonHtml=function(t){return`<button class="moj-multi-file-upload__delete govuk-button govuk-button--secondary govuk-!-margin-bottom-0" type="button" name="delete" value="${t.filename}">
78
+ Delete <span class="govuk-visually-hidden">${t.originalname}</span>
79
+ </button>`},t.prototype.uploadFile=function(i){this.params.uploadFileEntryHook(this,i);let e=o(this.getFileRowHtml(i));var t=new FormData;t.append("documents",i),this.feedbackContainer.find(".moj-multi-file-upload__list").append(e),o.ajax({url:this.params.uploadUrl,type:"post",data:t,processData:!1,contentType:!1,success:o.proxy(function(t){t.error?(e.find(".moj-multi-file-upload__message").html(this.getErrorHtml(t.error)),this.status.html(t.error.message)):(e.find(".moj-multi-file-upload__message").html(this.getSuccessHtml(t.success)),this.status.html(t.success.messageText)),e.find(".moj-multi-file-upload__actions").append(this.getDeleteButtonHtml(t.file)),this.params.uploadFileExitHook(this,i,t)},this),error:o.proxy(function(t,e,o){this.params.uploadFileErrorHook(this,i,t,e,o)},this),xhr:function(){var t=new XMLHttpRequest;return t.upload.addEventListener("progress",function(t){t.lengthComputable&&(t=t.loaded/t.total,t=parseInt(100*t,10),e.find(".moj-multi-file-upload__progress").text(` ${t}%`))},!1),t}})},t.prototype.onFileDeleteClick=function(t){t.preventDefault();let e=o(t.currentTarget);t={};t[e[0].name]=e[0].value,o.ajax({url:this.params.deleteUrl,type:"post",dataType:"json",data:t,success:o.proxy(function(t){t.error||(e.parents(".moj-multi-file-upload__row").remove(),0===this.feedbackContainer.find(".moj-multi-file-upload__row").length&&this.feedbackContainer.addClass("moj-hidden")),this.params.fileDeleteHook(this,t)},this)})},B={MultiFileUpload:t}}return B})().MultiFileUpload;let r=(()=>{if(!M){M=1;let i=z;function t(e){if(this.container=i(e.container),!this.container.data("moj-multi-select-initialised")){this.container.data("moj-multi-select-initialised",!0);var o=e.id_prefix;let t=void 0!==o?o+"checkboxes-all":"checkboxes-all";this.toggle=i(this.getToggleHtml(t)),this.toggleButton=this.toggle.find("input"),this.toggleButton.on("click",i.proxy(this,"onButtonClick")),this.container.append(this.toggle),this.checkboxes=i(e.checkboxes),this.checkboxes.on("click",i.proxy(this,"onCheckboxClick")),this.checked=e.checked||!1}}t.prototype.getToggleHtml=function(t){var e="";return e+'<div class="govuk-checkboxes__item govuk-checkboxes--small moj-multi-select__checkbox">'+` <input type="checkbox" class="govuk-checkboxes__input" id="${t}">`+` <label class="govuk-label govuk-checkboxes__label moj-multi-select__toggle-label" for="${t}">`+' <span class="govuk-visually-hidden">Select all</span>'+" </label>"+"</div>"},t.prototype.onButtonClick=function(t){this.checked?(this.uncheckAll(),this.toggleButton[0].checked=!1):(this.checkAll(),this.toggleButton[0].checked=!0)},t.prototype.checkAll=function(){this.checkboxes.each(i.proxy(function(t,e){e.checked=!0},this)),this.checked=!0},t.prototype.uncheckAll=function(){this.checkboxes.each(i.proxy(function(t,e){e.checked=!1},this)),this.checked=!1},t.prototype.onCheckboxClick=function(t){t.target.checked?this.checkboxes.filter(":checked").length===this.checkboxes.length&&(this.toggleButton[0].checked=!0,this.checked=!0):(this.toggleButton[0].checked=!1,this.checked=!1)},L={MultiSelect:t}}return L})().MultiSelect,l=(()=>{if(!S){S=1;let e=z;function t(t){this.el=t;t=e(this.el);t.data("moj-password-reveal-initialised")||(t.data("moj-password-reveal-initialised",!0),t.attr("spellcheck","false"),t.wrap('<div class="moj-password-reveal"></div>'),this.container=e(this.el).parent(),this.createButton())}t.prototype.createButton=function(){this.button=e('<button type="button" class="govuk-button govuk-button--secondary moj-password-reveal__button">Show <span class="govuk-visually-hidden">password</span></button>'),this.container.append(this.button),this.button.on("click",e.proxy(this,"onButtonClick"))},t.prototype.onButtonClick=function(){"password"===this.el.type?(this.el.type="text",this.button.html('Hide <span class="govuk-visually-hidden">password</span>')):(this.el.type="password",this.button.html('Show <span class="govuk-visually-hidden">password</span>'))},T={PasswordReveal:t}}return T})().PasswordReveal,u=(()=>{if(!E){E=1;let e=z;function t(t){"contentEditable"in document.documentElement&&(this.options=t,this.options.toolbar=this.options.toolbar||{bold:!1,italic:!1,underline:!1,bullets:!0,numbers:!0},this.textarea=this.options.textarea,this.container=e(this.textarea).parent(),this.container.data("moj-rich-text-editor-initialised")||(this.container.data("moj-rich-text-editor-initialised",!0),this.createToolbar(),this.hideDefault(),this.configureToolbar(),this.keys={left:37,right:39,up:38,down:40},this.container.on("click",".moj-rich-text-editor__toolbar-button",e.proxy(this,"onButtonClick")),this.container.find(".moj-rich-text-editor__content").on("input",e.proxy(this,"onEditorInput")),this.container.find("label").on("click",e.proxy(this,"onLabelClick")),this.toolbar.on("keydown",e.proxy(this,"onToolbarKeydown"))))}t.prototype.onToolbarKeydown=function(t){let e;switch(t.keyCode){case this.keys.right:case this.keys.down:var o=(e=this.toolbar.find("button[tabindex=0]")).next("button");o[0]&&(o.focus(),e.attr("tabindex","-1"),o.attr("tabindex","0"));break;case this.keys.left:case this.keys.up:o=(e=this.toolbar.find("button[tabindex=0]")).prev("button");o[0]&&(o.focus(),e.attr("tabindex","-1"),o.attr("tabindex","0"))}},t.prototype.getToolbarHtml=function(){let t="";return t+='<div class="moj-rich-text-editor__toolbar" role="toolbar">',this.options.toolbar.bold&&(t+='<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--bold" type="button" data-command="bold"><span class="govuk-visually-hidden">Bold</span></button>'),this.options.toolbar.italic&&(t+='<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--italic" type="button" data-command="italic"><span class="govuk-visually-hidden">Italic</span></button>'),this.options.toolbar.underline&&(t+='<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--underline" type="button" data-command="underline"><span class="govuk-visually-hidden">Underline</span></button>'),this.options.toolbar.bullets&&(t+='<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--unordered-list" type="button" data-command="insertUnorderedList"><span class="govuk-visually-hidden">Unordered list</span></button>'),this.options.toolbar.numbers&&(t+='<button class="moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--ordered-list" type="button" data-command="insertOrderedList"><span class="govuk-visually-hidden">Ordered list</span></button>'),t+="</div>"},t.prototype.getEnhancedHtml=function(t){return this.getToolbarHtml()+'<div class="govuk-textarea moj-rich-text-editor__content" contenteditable="true" spellcheck="false"></div>'},t.prototype.hideDefault=function(){this.textarea=this.container.find("textarea"),this.textarea.addClass("govuk-visually-hidden"),this.textarea.attr("aria-hidden",!0),this.textarea.attr("tabindex","-1")},t.prototype.createToolbar=function(){this.toolbar=document.createElement("div"),this.toolbar.className="moj-rich-text-editor",this.toolbar.innerHTML=this.getEnhancedHtml(),this.container.append(this.toolbar),this.toolbar=this.container.find(".moj-rich-text-editor__toolbar"),this.container.find(".moj-rich-text-editor__content").html(this.textarea.val())},t.prototype.configureToolbar=function(){this.buttons=this.container.find(".moj-rich-text-editor__toolbar-button"),this.buttons.prop("tabindex","-1"),this.buttons.first().prop("tabindex","0")},t.prototype.onButtonClick=function(t){document.execCommand(e(t.currentTarget).data("command"),!1,null)},t.prototype.getContent=function(){return this.container.find(".moj-rich-text-editor__content").html()},t.prototype.onEditorInput=function(t){this.updateTextarea()},t.prototype.updateTextarea=function(){document.execCommand("defaultParagraphSeparator",!1,"p"),this.textarea.val(this.getContent())},t.prototype.onLabelClick=function(t){t.preventDefault(),this.container.find(".moj-rich-text-editor__content").focus()},A={RichTextEditor:t}}return A})().RichTextEditor,d=(()=>{if(!H){H=1;let e=z;function t(t){this.options=t,this.container=e(this.options.search.container),this.toggleButtonContainer=e(this.options.toggleButton.container),this.container.data("moj-search-toggle-initialised")||(this.container.data("moj-search-toggle-initialised",!0),this.toggleButton=e(`<button class="moj-search-toggle__button" type="button" aria-haspopup="true" aria-expanded="false">
80
+ ${this.options.toggleButton.text} <svg viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="moj-search-toggle__button__icon"><path d="M7.433,12.5790048 C6.06762625,12.5808611 4.75763941,12.0392925 3.79217348,11.0738265 C2.82670755,10.1083606 2.28513891,8.79837375 2.28699522,7.433 C2.28513891,6.06762625 2.82670755,4.75763941 3.79217348,3.79217348 C4.75763941,2.82670755 6.06762625,2.28513891 7.433,2.28699522 C8.79837375,2.28513891 10.1083606,2.82670755 11.0738265,3.79217348 C12.0392925,4.75763941 12.5808611,6.06762625 12.5790048,7.433 C12.5808611,8.79837375 12.0392925,10.1083606 11.0738265,11.0738265 C10.1083606,12.0392925 8.79837375,12.5808611 7.433,12.5790048 L7.433,12.5790048 Z M14.293,12.579 L13.391,12.579 L13.071,12.269 C14.2300759,10.9245158 14.8671539,9.20813198 14.866,7.433 C14.866,3.32786745 11.5381325,-1.65045755e-15 7.433,-1.65045755e-15 C3.32786745,-1.65045755e-15 -1.65045755e-15,3.32786745 -1.65045755e-15,7.433 C-1.65045755e-15,11.5381325 3.32786745,14.866 7.433,14.866 C9.208604,14.8671159 10.9253982,14.2296624 12.27,13.07 L12.579,13.39 L12.579,14.294 L18.296,20 L20,18.296 L14.294,12.579 L14.293,12.579 Z"></path></svg>
81
+ </button>`),this.toggleButton.on("click",e.proxy(this,"onToggleButtonClick")),this.toggleButtonContainer.append(this.toggleButton),e(document).on("click",this.onDocumentClick.bind(this)),e(document).on("focusin",this.onDocumentClick.bind(this)))}t.prototype.showMenu=function(){this.toggleButton.attr("aria-expanded","true"),this.container.removeClass("moj-js-hidden"),this.container.find("input").first().get(0).focus()},t.prototype.hideMenu=function(){this.container.addClass("moj-js-hidden"),this.toggleButton.attr("aria-expanded","false")},t.prototype.onToggleButtonClick=function(){"false"===this.toggleButton.attr("aria-expanded")?this.showMenu():this.hideMenu()},t.prototype.onDocumentClick=function(t){e.contains(this.toggleButtonContainer[0],t.target)||e.contains(this.container[0],t.target)||this.hideMenu()},F={SearchToggle:t}}return F})().SearchToggle,c=(()=>{if(!O){O=1;let s=z;function t(t){this.table=s(t.table),this.table.data("moj-search-toggle-initialised")||(this.table.data("moj-search-toggle-initialised",!0),this.setupOptions(t),this.body=this.table.find("tbody"),this.createHeadingButtons(),this.createStatusBox(),this.initialiseSortedColumn(),this.table.on("click","th button",s.proxy(this,"onSortButtonClick")))}t.prototype.setupOptions=function(t){this.statusMessage=(t=t||{}).statusMessage||"Sort by %heading% (%direction%)",this.ascendingText=t.ascendingText||"ascending",this.descendingText=t.descendingText||"descending"},t.prototype.createHeadingButtons=function(){var e,o=this.table.find("thead th");for(let t=0;t<o.length;t++)(e=s(o[t])).attr("aria-sort")&&this.createHeadingButton(e,t)},t.prototype.createHeadingButton=function(t,e){var o=t.text(),e=s(`<button type="button" data-index="${e}">${o}</button>`);t.text(""),t.append(e)},t.prototype.createStatusBox=function(){this.status=s('<div aria-live="polite" role="status" aria-atomic="true" class="govuk-visually-hidden" />'),this.table.parent().append(this.status)},t.prototype.initialiseSortedColumn=function(){let i=this.getTableRowsArray();this.table.find("th").filter('[aria-sort="ascending"], [aria-sort="descending"]').first().each((t,e)=>{var o=s(e).attr("aria-sort"),e=s(e).find("button").attr("data-index"),e=this.sort(i,e,o);this.addRows(e)})},t.prototype.onSortButtonClick=function(t){var e=t.currentTarget.getAttribute("data-index"),o=s(t.currentTarget).parent().attr("aria-sort");let i;i="none"===o||"descending"===o?"ascending":"descending";o=this.getTableRowsArray(),o=this.sort(o,e,i);this.addRows(o),this.removeButtonStates(),this.updateButtonState(s(t.currentTarget),i)},t.prototype.updateButtonState=function(t,e){t.parent().attr("aria-sort",e);let o=this.statusMessage;o=(o=o.replace(/%heading%/,t.text())).replace(/%direction%/,this[e+"Text"]),this.status.text(o)},t.prototype.removeButtonStates=function(){this.table.find("thead th").attr("aria-sort","none")},t.prototype.addRows=function(e){for(let t=0;t<e.length;t++)this.body.append(e[t])},t.prototype.getTableRowsArray=function(){var e=[],o=this.body.find("tr");for(let t=0;t<o.length;t++)e.push(o[t]);return e},t.prototype.sort=function(t,i,n){return t.sort(function(t,e){var t=s(t).find("td,th").eq(i),e=s(e).find("td,th").eq(i),o="ascending"===n?this.getCellValue(t):this.getCellValue(e),e="ascending"===n?this.getCellValue(e):this.getCellValue(t);return"string"==typeof o||"string"==typeof e?o.toString().localeCompare(e.toString()):o-e}.bind(this))},t.prototype.getCellValue=function(t){var t=t.attr("data-sort-value")||t.html(),e=Number(t);return isNaN(e)?t:e},I={SortableTable:t}}return I})().SortableTable,h=Z().nodeListForEach;var p=(R||(R=1,q={version:"0.0.0-development"}),q).version;function f(t,e={}){if(!t)return this;var o=Object.freeze({properties:{buttonText:{type:"string"},buttonClasses:{type:"string"},alignMenu:{type:"string"}}});this.config=this.mergeConfigs({buttonText:"Actions",alignMenu:"left",buttonClasses:""},e,this.parseDataset(o,t.dataset)),this.$module=t}function g(t,e={}){if(!t)return this;var o=Object.freeze({properties:{excludedDates:{type:"string"},excludedDays:{type:"string"},leadingZeros:{type:"string"},maxDate:{type:"string"},minDate:{type:"string"},weekStartDay:{type:"string"}}});this.config=this.mergeConfigs({leadingZeros:!1,weekStartDay:"monday"},e,this.parseDataset(o,t.dataset)),this.dayLabels=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],this.monthLabels=["January","February","March","April","May","June","July","August","September","October","November","December"],this.currentDate=new Date,this.currentDate.setHours(0,0,0,0),this.calendarDays=[],this.excludedDates=[],this.excludedDays=[],this.buttonClass="moj-datepicker__button",this.selectedDayButtonClass="moj-datepicker__button--selected",this.currentDayButtonClass="moj-datepicker__button--current",this.todayButtonClass="moj-datepicker__button--today",this.$module=t,this.$input=t.querySelector(".moj-js-datepicker-input")}function m(t,e,o,i,n){this.index=e,this.row=o,this.column=i,this.button=t,this.picker=n,this.date=new Date}P={initAll:function(t){var e=(t=void 0!==(t=void 0!==t?t:{}).scope?t.scope:document).querySelectorAll('[data-module="moj-add-another"]'),e=(h(e,function(t){new o(t)}),t.querySelectorAll('[data-module="moj-multi-select"]')),e=(h(e,function(t){new r({container:t.querySelector(t.getAttribute("data-multi-select-checkbox")),checkboxes:t.querySelectorAll("tbody .govuk-checkboxes__input"),id_prefix:t.getAttribute("data-multi-select-idprefix")})}),t.querySelectorAll('[data-module="moj-password-reveal"]')),e=(h(e,function(t){new l(t)}),t.querySelectorAll('[data-module="moj-rich-text-editor"]')),e=(h(e,function(t){var e={textarea:n(t)},t=t.getAttribute("data-moj-rich-text-editor-toolbar");if(t){var o,i=t.split(",");for(o in e.toolbar={},i)e.toolbar[i[o]]=!0}new u(e)}),t.querySelectorAll('[data-module="moj-search-toggle"]')),e=(h(e,function(t){new d({toggleButton:{container:n(t.querySelector(".moj-search-toggle__toggle")),text:t.getAttribute("data-moj-search-toggle-text")},search:{container:n(t.querySelector(".moj-search"))}})}),t.querySelectorAll('[data-module="moj-sortable-table"]')),e=(h(e,function(t){new c({table:t})}),t.querySelectorAll('[data-module="moj-date-picker"]')),e=(h(e,function(t){new a(t,{}).init()}),t.querySelectorAll('[data-module="moj-button-menu"]')),e=(h(e,function(t){new s(t,{}).init()}),t.querySelectorAll('[data-module="moj-alert"]'));h(e,function(t){new i(t,{}).init()})},version:p,AddAnother:o,Alert:i,ButtonMenu:s,DatePicker:a,FilterToggleButton:t,MultiFileUpload:e,MultiSelect:r,PasswordReveal:l,RichTextEditor:u,SearchToggle:d,SortableTable:c}}return P})())});
@@ -6,27 +6,28 @@
6
6
  box-shadow: inset 0 0 0 1px govuk-colour("light-grey"); // Extends the inset border left full height of the filters on mobile
7
7
 
8
8
  @include govuk-media-query(desktop) {
9
- float: left;
10
- margin-right: govuk-spacing(7);
11
- max-width: 385px;
12
- min-width: 260px;
13
9
  width: 100%;
10
+ min-width: 260px;
11
+ max-width: 385px;
12
+ margin-right: govuk-spacing(7);
13
+ float: left;
14
14
  }
15
15
  }
16
16
 
17
17
  // Filters with javascript enabled
18
18
  @include govuk-media-query($until: desktop) {
19
-
20
19
  .js-enabled .moj-filter-layout__filter {
21
- background-color: govuk-colour("white");
22
- position: fixed; top: 0; right: 0; bottom: 0;
23
- overflow-y: scroll;
20
+ position: fixed;
24
21
  z-index: 100;
22
+ top: 0;
23
+ right: 0;
24
+ bottom: 0;
25
+ overflow-y: scroll;
26
+ background-color: govuk-colour("white");
25
27
  }
26
-
27
28
  }
28
29
 
29
30
  .moj-filter-layout__content {
30
31
  overflow: hidden;
31
32
  overflow-x: auto;
32
- }
33
+ }
@@ -1,37 +1,34 @@
1
1
  .moj-scrollable-pane {
2
- $scrollableBgColor: white;
2
+ // stylelint-disable scss/dollar-variable-pattern
3
+ $scrollableBgColor: govuk-colour("white");
3
4
  $scrollableTransparentColor: rgba(255, 255, 255, 0);
4
5
  $scrollableShadowColor: rgba(0, 0, 0, 0.2);
5
6
  $scrollableShadowSize: 0.75em;
7
+ // stylelint-enable scss/dollar-variable-pattern
6
8
 
7
9
  overflow-x: scroll;
8
- background: linear-gradient(
10
+ background:
11
+ linear-gradient(
9
12
  to right,
10
13
  $scrollableBgColor,
11
14
  $scrollableBgColor,
12
15
  $scrollableTransparentColor calc(var($scrollableShadowSize) * 2)
13
16
  ),
14
- radial-gradient(
15
- farthest-side at 0 50%,
16
- $scrollableShadowColor,
17
- $scrollableTransparentColor
18
- ),
17
+ radial-gradient(farthest-side at 0 50%, $scrollableShadowColor, $scrollableTransparentColor),
19
18
  linear-gradient(
20
19
  to left,
21
20
  $scrollableBgColor,
22
21
  $scrollableBgColor,
23
22
  $scrollableTransparentColor calc(var($scrollableShadowSize) * 2)
24
23
  ),
25
- radial-gradient(
26
- farthest-side at 100% 50%,
27
- $scrollableShadowColor,
28
- $scrollableTransparentColor
29
- )
30
- 100%;
24
+ radial-gradient(farthest-side at 100% 50%, $scrollableShadowColor, $scrollableTransparentColor) 100%;
31
25
  background-color: $scrollableBgColor;
32
26
  background-repeat: no-repeat;
33
27
  background-attachment: local, scroll, local, scroll;
34
- background-size: 100% 100%, $scrollableShadowSize 100%, 100% 100%,
28
+ background-size:
29
+ 100% 100%,
30
+ $scrollableShadowSize 100%,
31
+ 100% 100%,
35
32
  $scrollableShadowSize 100%;
36
33
  }
37
34
 
@@ -7,3 +7,8 @@ $moj-secondary-text-color: rgb(69, 74, 76);
7
7
 
8
8
  $moj-secondary-link-color: rgb(69, 74, 76);
9
9
  $moj-secondary-link-hover-color: rgb(23, 24, 25);
10
+
11
+ // GOV.UK orange does not have accessible color contrast
12
+ $moj-warning-colour: rgb(235, 97, 28);
13
+ // Links need higher contrast still so a modified orange for links
14
+ $moj-warning-link-colour: rgb(199, 82, 40);
@@ -5,10 +5,8 @@
5
5
  // Width of main container
6
6
  $moj-page-width: 960px !default;
7
7
 
8
-
9
8
  // Width of gutter between grid columns
10
9
  $moj-gutter: 30px !default;
11
10
 
12
-
13
11
  // Width of half the gutter between grid columns
14
12
  $moj-gutter-half: $moj-gutter / 2;
@@ -1,7 +1,7 @@
1
1
  .js-enabled .moj-js-hidden {
2
- @include moj-hidden();
2
+ @include moj-hidden;
3
3
  }
4
4
 
5
5
  .moj-hidden {
6
- @include moj-hidden();
7
- }
6
+ @include moj-hidden;
7
+ }
@@ -1,3 +1,3 @@
1
1
  .moj-width-container {
2
2
  @include moj-width-container;
3
- }
3
+ }
package/moj/version.js CHANGED
@@ -1 +1,28 @@
1
- MOJFrontend.version = '0.0.0-development'
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
3
+ typeof define === 'function' && define.amd ? define(factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.MOJFrontend = factory());
5
+ })(this, (function () { 'use strict';
6
+
7
+ function getDefaultExportFromCjs (x) {
8
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
9
+ }
10
+
11
+ var version_1;
12
+ var hasRequiredVersion;
13
+
14
+ function requireVersion () {
15
+ if (hasRequiredVersion) return version_1;
16
+ hasRequiredVersion = 1;
17
+ const version = '0.0.0-development';
18
+
19
+ version_1 = { version };
20
+ return version_1;
21
+ }
22
+
23
+ var versionExports = requireVersion();
24
+ var version = /*@__PURE__*/getDefaultExportFromCjs(versionExports);
25
+
26
+ return version;
27
+
28
+ }));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ministryofjustice/frontend",
3
3
  "description": "The MOJ Frontend contains the code you need to start building user interfaces for UK Ministry of Justice government services.",
4
- "version": "3.3.1",
4
+ "version": "3.5.0",
5
5
  "main": "moj/all.js",
6
6
  "sass": "moj/all.scss",
7
7
  "engines": {
package/moj/all.spec.js DELETED
@@ -1,22 +0,0 @@
1
- const { getByText, getByTestId } = require("@testing-library/dom");
2
-
3
- require("./helpers");
4
- require("./all.js");
5
-
6
- describe("initAll", () => {
7
- test("initialises container", () => {
8
- MOJFrontend.PasswordReveal = jest.fn();
9
-
10
- const container = document.createElement("div");
11
-
12
- container.innerHTML = `
13
- <input data-module="moj-password-reveal" data-testid="password-reveal" type="password" />
14
- `;
15
-
16
- new MOJFrontend.initAll({ scope: container });
17
-
18
- expect(MOJFrontend.PasswordReveal).toHaveBeenCalledWith(
19
- getByTestId(container, "password-reveal"),
20
- );
21
- });
22
- });