@ministryofjustice/frontend 4.0.1 → 5.0.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 (244) hide show
  1. package/govuk-prototype-kit.config.json +19 -4
  2. package/moj/_base.scss +2 -0
  3. package/moj/_base.scss.map +1 -0
  4. package/moj/all.bundle.js +2523 -0
  5. package/moj/all.bundle.js.map +1 -0
  6. package/moj/all.bundle.mjs +2502 -0
  7. package/moj/all.bundle.mjs.map +1 -0
  8. package/moj/all.mjs +59 -69
  9. package/moj/all.mjs.map +1 -1
  10. package/moj/all.scss +2 -0
  11. package/moj/all.scss.map +1 -0
  12. package/moj/components/_all.scss +2 -0
  13. package/moj/components/_all.scss.map +1 -0
  14. package/moj/components/action-bar/_action-bar.scss +2 -0
  15. package/moj/components/action-bar/_action-bar.scss.map +1 -0
  16. package/moj/components/add-another/_add-another.scss +2 -0
  17. package/moj/components/add-another/_add-another.scss.map +1 -0
  18. package/moj/components/add-another/add-another.bundle.js +128 -0
  19. package/moj/components/add-another/add-another.bundle.js.map +1 -0
  20. package/moj/components/add-another/add-another.bundle.mjs +120 -0
  21. package/moj/components/add-another/add-another.bundle.mjs.map +1 -0
  22. package/moj/components/add-another/add-another.mjs +112 -99
  23. package/moj/components/add-another/add-another.mjs.map +1 -1
  24. package/moj/components/alert/_alert.scss +4 -0
  25. package/moj/components/alert/_alert.scss.map +1 -0
  26. package/moj/components/alert/alert.bundle.js +330 -0
  27. package/moj/components/alert/alert.bundle.js.map +1 -0
  28. package/moj/components/alert/alert.bundle.mjs +322 -0
  29. package/moj/components/alert/alert.bundle.mjs.map +1 -0
  30. package/moj/components/alert/alert.mjs +181 -217
  31. package/moj/components/alert/alert.mjs.map +1 -1
  32. package/moj/components/alert/{alert.spec.helper.js → alert.spec.helper.bundle.js} +1 -1
  33. package/moj/components/alert/alert.spec.helper.bundle.js.map +1 -0
  34. package/moj/components/alert/alert.spec.helper.bundle.mjs +67 -0
  35. package/moj/components/alert/alert.spec.helper.bundle.mjs.map +1 -0
  36. package/moj/components/alert/alert.spec.helper.mjs.map +1 -1
  37. package/moj/components/badge/_badge.scss +2 -0
  38. package/moj/components/badge/_badge.scss.map +1 -0
  39. package/moj/components/banner/_banner.scss +2 -0
  40. package/moj/components/banner/_banner.scss.map +1 -0
  41. package/moj/components/button-menu/README.md +10 -6
  42. package/moj/components/button-menu/_button-menu.scss +4 -1
  43. package/moj/components/button-menu/_button-menu.scss.map +1 -0
  44. package/moj/components/button-menu/button-menu.bundle.js +299 -0
  45. package/moj/components/button-menu/button-menu.bundle.js.map +1 -0
  46. package/moj/components/button-menu/{button-menu.js → button-menu.bundle.mjs} +74 -121
  47. package/moj/components/button-menu/button-menu.bundle.mjs.map +1 -0
  48. package/moj/components/button-menu/button-menu.mjs +246 -285
  49. package/moj/components/button-menu/button-menu.mjs.map +1 -1
  50. package/moj/components/cookie-banner/_cookie-banner.scss +2 -0
  51. package/moj/components/cookie-banner/_cookie-banner.scss.map +1 -0
  52. package/moj/components/currency-input/_currency-input.scss +2 -0
  53. package/moj/components/currency-input/_currency-input.scss.map +1 -0
  54. package/moj/components/date-picker/_date-picker.scss +2 -0
  55. package/moj/components/date-picker/_date-picker.scss.map +1 -0
  56. package/moj/components/date-picker/date-picker.bundle.js +784 -0
  57. package/moj/components/date-picker/date-picker.bundle.js.map +1 -0
  58. package/moj/components/date-picker/{date-picker.js → date-picker.bundle.mjs} +245 -439
  59. package/moj/components/date-picker/date-picker.bundle.mjs.map +1 -0
  60. package/moj/components/date-picker/date-picker.mjs +654 -840
  61. package/moj/components/date-picker/date-picker.mjs.map +1 -1
  62. package/moj/components/filter/_filter.scss +2 -0
  63. package/moj/components/filter/_filter.scss.map +1 -0
  64. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js +96 -0
  65. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js.map +1 -0
  66. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs +88 -0
  67. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs.map +1 -0
  68. package/moj/components/filter-toggle-button/filter-toggle-button.mjs +78 -84
  69. package/moj/components/filter-toggle-button/filter-toggle-button.mjs.map +1 -1
  70. package/moj/components/form-validator/form-validator.bundle.js +198 -0
  71. package/moj/components/form-validator/form-validator.bundle.js.map +1 -0
  72. package/moj/components/form-validator/form-validator.bundle.mjs +190 -0
  73. package/moj/components/form-validator/form-validator.bundle.mjs.map +1 -0
  74. package/moj/components/form-validator/form-validator.mjs +149 -152
  75. package/moj/components/form-validator/form-validator.mjs.map +1 -1
  76. package/moj/components/header/_header.scss +2 -0
  77. package/moj/components/header/_header.scss.map +1 -0
  78. package/moj/components/identity-bar/_identity-bar.scss +2 -0
  79. package/moj/components/identity-bar/_identity-bar.scss.map +1 -0
  80. package/moj/components/interruption-card/_interruption-card.scss +2 -0
  81. package/moj/components/interruption-card/_interruption-card.scss.map +1 -0
  82. package/moj/components/messages/_messages.scss +2 -0
  83. package/moj/components/messages/_messages.scss.map +1 -0
  84. package/moj/components/multi-file-upload/_multi-file-upload.scss +2 -0
  85. package/moj/components/multi-file-upload/_multi-file-upload.scss.map +1 -0
  86. package/moj/components/multi-file-upload/multi-file-upload.bundle.js +223 -0
  87. package/moj/components/multi-file-upload/multi-file-upload.bundle.js.map +1 -0
  88. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs +215 -0
  89. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs.map +1 -0
  90. package/moj/components/multi-file-upload/multi-file-upload.mjs +193 -209
  91. package/moj/components/multi-file-upload/multi-file-upload.mjs.map +1 -1
  92. package/moj/components/multi-select/_multi-select.scss +2 -0
  93. package/moj/components/multi-select/_multi-select.scss.map +1 -0
  94. package/moj/components/multi-select/multi-select.bundle.js +78 -0
  95. package/moj/components/multi-select/multi-select.bundle.js.map +1 -0
  96. package/moj/components/multi-select/multi-select.bundle.mjs +70 -0
  97. package/moj/components/multi-select/multi-select.bundle.mjs.map +1 -0
  98. package/moj/components/multi-select/multi-select.mjs +59 -67
  99. package/moj/components/multi-select/multi-select.mjs.map +1 -1
  100. package/moj/components/notification-badge/_notification-badge.scss +2 -0
  101. package/moj/components/notification-badge/_notification-badge.scss.map +1 -0
  102. package/moj/components/organisation-switcher/_organisation-switcher.scss +2 -0
  103. package/moj/components/organisation-switcher/_organisation-switcher.scss.map +1 -0
  104. package/moj/components/page-header-actions/_page-header-actions.scss +2 -0
  105. package/moj/components/page-header-actions/_page-header-actions.scss.map +1 -0
  106. package/moj/components/pagination/_pagination.scss +2 -2
  107. package/moj/components/pagination/_pagination.scss.map +1 -0
  108. package/moj/components/password-reveal/_password-reveal.scss +2 -0
  109. package/moj/components/password-reveal/_password-reveal.scss.map +1 -0
  110. package/moj/components/password-reveal/password-reveal.bundle.js +49 -0
  111. package/moj/components/password-reveal/password-reveal.bundle.js.map +1 -0
  112. package/moj/components/password-reveal/password-reveal.bundle.mjs +41 -0
  113. package/moj/components/password-reveal/password-reveal.bundle.mjs.map +1 -0
  114. package/moj/components/password-reveal/password-reveal.mjs +36 -31
  115. package/moj/components/password-reveal/password-reveal.mjs.map +1 -1
  116. package/moj/components/primary-navigation/_primary-navigation.scss +2 -0
  117. package/moj/components/primary-navigation/_primary-navigation.scss.map +1 -0
  118. package/moj/components/progress-bar/_progress-bar.scss +2 -0
  119. package/moj/components/progress-bar/_progress-bar.scss.map +1 -0
  120. package/moj/components/rich-text-editor/README.md +15 -9
  121. package/moj/components/rich-text-editor/_rich-text-editor.scss +2 -0
  122. package/moj/components/rich-text-editor/_rich-text-editor.scss.map +1 -0
  123. package/moj/components/rich-text-editor/rich-text-editor.bundle.js +145 -0
  124. package/moj/components/rich-text-editor/rich-text-editor.bundle.js.map +1 -0
  125. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs +137 -0
  126. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs.map +1 -0
  127. package/moj/components/rich-text-editor/rich-text-editor.mjs +124 -145
  128. package/moj/components/rich-text-editor/rich-text-editor.mjs.map +1 -1
  129. package/moj/components/search/_search.scss +2 -0
  130. package/moj/components/search/_search.scss.map +1 -0
  131. package/moj/components/search-toggle/{search-toggle.scss → _search-toggle.scss} +2 -0
  132. package/moj/components/search-toggle/_search-toggle.scss.map +1 -0
  133. package/moj/components/search-toggle/search-toggle.bundle.js +54 -0
  134. package/moj/components/search-toggle/search-toggle.bundle.js.map +1 -0
  135. package/moj/components/search-toggle/search-toggle.bundle.mjs +46 -0
  136. package/moj/components/search-toggle/search-toggle.bundle.mjs.map +1 -0
  137. package/moj/components/search-toggle/search-toggle.mjs +40 -49
  138. package/moj/components/search-toggle/search-toggle.mjs.map +1 -1
  139. package/moj/components/side-navigation/_side-navigation.scss +2 -0
  140. package/moj/components/side-navigation/_side-navigation.scss.map +1 -0
  141. package/moj/components/sortable-table/_sortable-table.scss +2 -2
  142. package/moj/components/sortable-table/_sortable-table.scss.map +1 -0
  143. package/moj/components/sortable-table/sortable-table.bundle.js +134 -0
  144. package/moj/components/sortable-table/sortable-table.bundle.js.map +1 -0
  145. package/moj/components/sortable-table/sortable-table.bundle.mjs +126 -0
  146. package/moj/components/sortable-table/sortable-table.bundle.mjs.map +1 -0
  147. package/moj/components/sortable-table/sortable-table.mjs +117 -130
  148. package/moj/components/sortable-table/sortable-table.mjs.map +1 -1
  149. package/moj/components/sub-navigation/_sub-navigation.scss +2 -0
  150. package/moj/components/sub-navigation/_sub-navigation.scss.map +1 -0
  151. package/moj/components/tag/_tag.scss +2 -0
  152. package/moj/components/tag/_tag.scss.map +1 -0
  153. package/moj/components/task-list/_task-list.scss +2 -0
  154. package/moj/components/task-list/_task-list.scss.map +1 -0
  155. package/moj/components/ticket-panel/_ticket-panel.scss +2 -0
  156. package/moj/components/ticket-panel/_ticket-panel.scss.map +1 -0
  157. package/moj/components/timeline/_timeline.scss +2 -0
  158. package/moj/components/timeline/_timeline.scss.map +1 -0
  159. package/moj/filters/all.js +44 -22
  160. package/moj/helpers/_all.scss +2 -0
  161. package/moj/helpers/_all.scss.map +1 -0
  162. package/moj/helpers/_hidden.scss +2 -0
  163. package/moj/helpers/_hidden.scss.map +1 -0
  164. package/moj/helpers/_links.scss +2 -0
  165. package/moj/helpers/_links.scss.map +1 -0
  166. package/moj/{helpers.js → helpers.bundle.js} +37 -42
  167. package/moj/helpers.bundle.js.map +1 -0
  168. package/moj/helpers.bundle.mjs +179 -0
  169. package/moj/helpers.bundle.mjs.map +1 -0
  170. package/moj/helpers.mjs +52 -28
  171. package/moj/helpers.mjs.map +1 -1
  172. package/moj/init.js +11 -2
  173. package/moj/moj-frontend.min.css +1 -1
  174. package/moj/moj-frontend.min.css.map +1 -1
  175. package/moj/moj-frontend.min.js +1 -1
  176. package/moj/moj-frontend.min.js.map +1 -1
  177. package/moj/objects/_all.scss +2 -0
  178. package/moj/objects/_all.scss.map +1 -0
  179. package/moj/objects/_button-group.scss +2 -0
  180. package/moj/objects/_button-group.scss.map +1 -0
  181. package/moj/objects/_filter-layout.scss +2 -0
  182. package/moj/objects/_filter-layout.scss.map +1 -0
  183. package/moj/objects/_scrollable-pane.scss +2 -0
  184. package/moj/objects/_scrollable-pane.scss.map +1 -0
  185. package/moj/objects/_width-container.scss +2 -0
  186. package/moj/objects/_width-container.scss.map +1 -0
  187. package/moj/settings/_all.scss +2 -0
  188. package/moj/settings/_all.scss.map +1 -0
  189. package/moj/settings/_assets.scss +2 -0
  190. package/moj/settings/_assets.scss.map +1 -0
  191. package/moj/settings/_colours.scss +2 -0
  192. package/moj/settings/_colours.scss.map +1 -0
  193. package/moj/settings/_measurements.scss +2 -0
  194. package/moj/settings/_measurements.scss.map +1 -0
  195. package/moj/settings/_typography.scss +2 -0
  196. package/moj/settings/_typography.scss.map +1 -0
  197. package/moj/template.njk +13 -0
  198. package/moj/utilities/_all.scss +2 -0
  199. package/moj/utilities/_all.scss.map +1 -0
  200. package/moj/utilities/_hidden.scss +2 -0
  201. package/moj/utilities/_hidden.scss.map +1 -0
  202. package/moj/utilities/_width-container.scss +2 -0
  203. package/moj/utilities/_width-container.scss.map +1 -0
  204. package/moj/vendor/govuk-frontend/_base.scss +2 -0
  205. package/moj/vendor/govuk-frontend/_base.scss.map +1 -0
  206. package/moj/vendor/govuk-frontend/_index.scss +2 -0
  207. package/moj/vendor/govuk-frontend/_index.scss.map +1 -0
  208. package/moj/{version.js → version.bundle.js} +1 -1
  209. package/moj/version.bundle.js.map +1 -0
  210. package/moj/version.bundle.mjs +4 -0
  211. package/moj/version.bundle.mjs.map +1 -0
  212. package/moj/version.mjs.map +1 -1
  213. package/package.json +5 -6
  214. package/moj/all.jquery.min.js +0 -1
  215. package/moj/all.jquery.min.js.map +0 -1
  216. package/moj/all.js +0 -2662
  217. package/moj/all.js.map +0 -1
  218. package/moj/components/add-another/add-another.js +0 -115
  219. package/moj/components/add-another/add-another.js.map +0 -1
  220. package/moj/components/alert/alert.js +0 -356
  221. package/moj/components/alert/alert.js.map +0 -1
  222. package/moj/components/alert/alert.spec.helper.js.map +0 -1
  223. package/moj/components/button-menu/button-menu.js.map +0 -1
  224. package/moj/components/date-picker/date-picker.js.map +0 -1
  225. package/moj/components/filter-toggle-button/filter-toggle-button.js +0 -102
  226. package/moj/components/filter-toggle-button/filter-toggle-button.js.map +0 -1
  227. package/moj/components/form-validator/form-validator.js +0 -205
  228. package/moj/components/form-validator/form-validator.js.map +0 -1
  229. package/moj/components/multi-file-upload/multi-file-upload.js +0 -241
  230. package/moj/components/multi-file-upload/multi-file-upload.js.map +0 -1
  231. package/moj/components/multi-select/multi-select.js +0 -86
  232. package/moj/components/multi-select/multi-select.js.map +0 -1
  233. package/moj/components/password-reveal/password-reveal.js +0 -44
  234. package/moj/components/password-reveal/password-reveal.js.map +0 -1
  235. package/moj/components/rich-text-editor/rich-text-editor.js +0 -166
  236. package/moj/components/rich-text-editor/rich-text-editor.js.map +0 -1
  237. package/moj/components/search-toggle/search-toggle.js +0 -63
  238. package/moj/components/search-toggle/search-toggle.js.map +0 -1
  239. package/moj/components/sortable-table/sortable-table.js +0 -147
  240. package/moj/components/sortable-table/sortable-table.js.map +0 -1
  241. package/moj/helpers.js.map +0 -1
  242. package/moj/vendor/html5shiv.js +0 -326
  243. package/moj/vendor/jquery.js +0 -9300
  244. package/moj/version.js.map +0 -1
@@ -1 +1 @@
1
- !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).MOJFrontend=t.MOJFrontend||{})}(this,(function(t){"use strict";function e(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"))}function o(t,e){if(window.NodeList.prototype.forEach)return t.forEach(e);for(let o=0;o<t.length;o++)e.call(window,t[o],o,t)}function n(t,e={}){const o=t.getAttribute("tabindex");function n(){e.onBlur&&e.onBlur.call(t),o||t.removeAttribute("tabindex")}o||t.setAttribute("tabindex","-1"),t.addEventListener("focus",(function(){t.addEventListener("blur",n,{once:!0})}),{once:!0}),e.onBeforeFocus&&e.onBeforeFocus.call(t),t.focus()}function i(t,e={}){if(!t)return this;const 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}function s(t,e={}){if(!t)return this;const 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 a(t,e={}){if(!t)return this;const 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 r(t,e,o,n,i){this.index=e,this.row=o,this.column=n,this.button=t,this.picker=i,this.date=new Date}function l(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()}function u(t){void 0!==document.createElement("div").ondrop&&"function"==typeof FormData&&function(){const t=document.createElement("input");return t.type="file",void 0!==t.files}()&&(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")))}function c(t){if(this.container=$(t.container),this.container.data("moj-multi-select-initialised"))return;this.container.data("moj-multi-select-initialised",!0);const e=t.id_prefix;let o="checkboxes-all";void 0!==e&&(o=`${e}checkboxes-all`),this.toggle=$(this.getToggleHtml(o)),this.toggleButton=this.toggle.find("input"),this.toggleButton.on("click",$.proxy(this,"onButtonClick")),this.container.append(this.toggle),this.checkboxes=$(t.checkboxes),this.checkboxes.on("click",$.proxy(this,"onCheckboxClick")),this.checked=t.checked||!1}function d(t){this.el=t;const e=$(this.el);e.data("moj-password-reveal-initialised")||(e.data("moj-password-reveal-initialised",!0),e.attr("spellcheck","false"),e.wrap('<div class="moj-password-reveal"></div>'),this.container=$(this.el).parent(),this.createButton())}function h(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=$(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"))))}function p(t){if(this.options=t,this.container=$(this.options.search.container),this.toggleButtonContainer=$(this.options.toggleButton.container),this.container.data("moj-search-toggle-initialised"))return;this.container.data("moj-search-toggle-initialised",!0);this.toggleButton=$(`<button class="moj-search-toggle__button" type="button" aria-haspopup="true" aria-expanded="false">\n ${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>\n </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))}function f(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")))}e.prototype.onAddButtonClick=function(t){const e=this.getNewItem();this.updateAttributes(this.getItems().length,e),this.resetItem(e);const o=this.getItems().first();this.hasRemoveButton(o)||this.createRemoveButton(o),this.getItems().last().after(e),e.find("input, textarea, select").first().focus()},e.prototype.hasRemoveButton=function(t){return t.find(".moj-add-another__remove-button").length},e.prototype.getItems=function(){return this.container.find(".moj-add-another__item")},e.prototype.getNewItem=function(){const t=this.getItems().first().clone();return this.hasRemoveButton(t)||this.createRemoveButton(t),t},e.prototype.updateAttributes=function(t,e){e.find("[data-name]").each((function(o,n){const i=n.id;n.name=$(n).attr("data-name").replace(/%index%/,t),n.id=$(n).attr("data-id").replace(/%index%/,t);($(n).siblings("label")[0]||$(n).parents("label")[0]||e.find(`[for="${i}"]`)[0]).htmlFor=n.id}))},e.prototype.createRemoveButton=function(t){t.append('<button type="button" class="govuk-button govuk-button--secondary moj-add-another__remove-button">Remove</button>')},e.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=""}))},e.prototype.onRemoveButtonClick=function(t){$(t.currentTarget).parents(".moj-add-another__item").remove();const e=this.getItems();1===e.length&&e.find(".moj-add-another__remove-button").remove(),e.each($.proxy((function(t,e){this.updateAttributes(t,$(e))}),this)),this.focusHeading()},e.prototype.focusHeading=function(){this.container.find(".moj-add-another__heading").get(0).focus()},i.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()})))},i.prototype.dimiss=function(){let t;if(this.config.focusOnDismissSelector&&(t=document.querySelector(this.config.focusOnDismissSelector)),!t){const e=this.$module.nextElementSibling;e&&e.matches(".moj-alert")&&(t=e)}t||(t=function(t,e){if(!t)return;let o=t.previousElementSibling;for(;o;){if(o.matches(e))return o;o=o.previousElementSibling}}(this.$module,".moj-alert, h1, h2, h3, h4, h5, h6")),t||(t=function(t,e){if(!t)return;let o=t;for(;o;){if(o.matches(e))return o;let t=o.previousElementSibling;for(;t;){if(t.matches(e))return t;t=t.previousElementSibling}o=o.parentElement}}(this.$module,"h1, h2, h3, h4, h5, h6, main, body")),t&&n(t),this.$module.remove()},i.prototype.normaliseString=function(t,e){const o=t?t.trim():"";let n,i;switch(e&&e.type&&(i=e.type),i||(["true","false"].includes(o)&&(i="boolean"),o.length>0&&isFinite(Number(o))&&(i="number")),i){case"boolean":n="true"===o;break;case"number":n=Number(o);break;default:n=t}return n},i.prototype.parseDataset=function(t,e){const o={};for(const[n,i]of Object.entries(t.properties))n in e&&e[n]&&(o[n]=this.normaliseString(e[n],i));return o},i.prototype.mergeConfigs=function(...t){const e={};for(const o of t)for(const t of Object.keys(o)){const n=e[t],i=o[t];e[t]="object"==typeof n&&"object"==typeof i?this.mergeConfigs(n,i):i}return e},s.prototype.init=function(){if(1===this.$module.children.length){const t=this.$module.children[0];t.classList.forEach((e=>{e.startsWith("govuk-button-")&&t.classList.remove(e),t.classList.remove("moj-button-menu__item")})),this.config.buttonClasses&&t.classList.add(...this.config.buttonClasses.split(" "))}this.$module.children.length>1&&this.initMenu()},s.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)}))},s.prototype.createMenu=function(){const 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},s.prototype.setupMenuItems=function(){Array.from(this.$menu.children).forEach((t=>{const e=document.createElement("li");this.$menu.insertBefore(e,t),e.appendChild(t),t.setAttribute("tabindex",-1),"BUTTON"===t.tagName&&t.setAttribute("type","button"),t.classList.forEach((e=>{e.startsWith("govuk-button")&&t.classList.remove(e)})),t.addEventListener("click",(t=>{setTimeout((()=>{this.closeMenu(!1)}),50)}))}))},s.prototype.toggleTemplate=function(){return`\n <button type="button" class="govuk-button moj-button-menu__toggle-button ${this.config.buttonClasses||""}" aria-haspopup="true" aria-expanded="false">\n <span>\n ${this.config.buttonText}\n <svg width="11" height="5" viewBox="0 0 11 5" xmlns="http://www.w3.org/2000/svg">\n <path d="M5.5 0L11 5L0 5L5.5 0Z" fill="currentColor"/>\n </svg>\n </span>\n </button>`},s.prototype.isOpen=function(){return"true"===this.$menuToggle.getAttribute("aria-expanded")},s.prototype.toggleMenu=function(t){t.preventDefault();const e=0===t.detail?0:-1;this.isOpen()?this.closeMenu():this.openMenu(e)},s.prototype.openMenu=function(t=0){this.$menu.hidden=!1,this.$menuToggle.setAttribute("aria-expanded","true"),-1!==t&&this.focusItem(t)},s.prototype.closeMenu=function(t=!0){this.$menu.hidden=!0,this.$menuToggle.setAttribute("aria-expanded","false"),t&&this.$menuToggle.focus()},s.prototype.focusItem=function(t){t>=this.items.length&&(t=0),t<0&&(t=this.items.length-1);const e=this.items.item(t);e&&e.focus()},s.prototype.currentFocusIndex=function(){const t=document.activeElement;return Array.from(this.items).indexOf(t)},s.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)},s.prototype.parseDataset=function(t,e){const o={};for(const[n,,]of Object.entries(t.properties))n in e&&e[n]&&(o[n]=e[n]);return o},s.prototype.mergeConfigs=function(...t){const e={};for(const o of t)for(const t of Object.keys(o)){const n=e[t],i=o[t];e[t]="object"==typeof n&&"object"==typeof i?this.mergeConfigs(n,i):i}return e},a.prototype.init=function(){this.$input&&(this.$module.dataset.initialized||(this.setOptions(),this.initControls(),this.$module.setAttribute("data-initialized","true")))},a.prototype.initControls=function(){this.id=`datepicker-${this.$input.id}`,this.$dialog=this.createDialog(),this.createCalendarHeaders();const t=document.createElement("div"),e=document.createElement("div");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)}));const o=this.$dialog.querySelectorAll('button:not([disabled="true"])');this.$firstButtonInDialog=o[0],this.$lastButtonInDialog=o[o.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()},a.prototype.createDialog=function(){const 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},a.prototype.createCalendar=function(){const t=this.$dialog.querySelector("tbody");let e=0;for(let o=0;o<6;o++){const n=t.insertRow(o);for(let t=0;t<7;t++){const i=document.createElement("td"),s=document.createElement("button");i.appendChild(s),n.appendChild(i);const a=new r(s,e,o,t,this);a.init(),this.calendarDays.push(a),e++}}},a.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">\n <span class="govuk-visually-hidden">Choose date</span>\n <svg width="32" height="24" focusable="false" class="moj-datepicker-icon" aria-hidden="true" role="img" viewBox="0 0 22 22">\n <path\n fill="currentColor"\n fill-rule="evenodd"\n clip-rule="evenodd"\n d="M16.1333 2.93333H5.86668V4.4C5.86668 5.21002 5.21003 5.86667 4.40002 5.86667C3.59 5.86667 2.93335 5.21002 2.93335 4.4V2.93333H2C0.895431 2.93333 0 3.82877 0 4.93334V19.2667C0 20.3712 0.89543 21.2667 2 21.2667H20C21.1046 21.2667 22 20.3712 22 19.2667V4.93333C22 3.82876 21.1046 2.93333 20 2.93333H19.0667V4.4C19.0667 5.21002 18.41 5.86667 17.6 5.86667C16.79 5.86667 16.1333 5.21002 16.1333 4.4V2.93333ZM20.5333 8.06667H1.46665V18.8C1.46665 19.3523 1.91436 19.8 2.46665 19.8H19.5333C20.0856 19.8 20.5333 19.3523 20.5333 18.8V8.06667Z"\n ></path>\n <rect x="3.66669" width="1.46667" height="5.13333" rx="0.733333" fill="currentColor"></rect>\n <rect x="16.8667" width="1.46667" height="5.13333" rx="0.733333" fill="currentColor"></rect>\n </svg>\n </button>`},a.prototype.dialogTemplate=function(t){return`<div class="moj-datepicker__dialog-header">\n <div class="moj-datepicker__dialog-navbuttons">\n <button class="moj-datepicker__button moj-js-datepicker-prev-year">\n <span class="govuk-visually-hidden">Previous year</span>\n <svg width="44" height="40" viewBox="0 0 44 40" fill="none" fill="none" focusable="false" aria-hidden="true" role="img">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M23.1643 20L28.9572 14.2071L27.5429 12.7929L20.3358 20L27.5429 27.2071L28.9572 25.7929L23.1643 20Z" fill="currentColor"/>\n <path fill-rule="evenodd" clip-rule="evenodd" d="M17.1643 20L22.9572 14.2071L21.5429 12.7929L14.3358 20L21.5429 27.2071L22.9572 25.7929L17.1643 20Z" fill="currentColor"/>\n </svg>\n </button>\n\n <button class="moj-datepicker__button moj-js-datepicker-prev-month">\n <span class="govuk-visually-hidden">Previous month</span>\n <svg width="44" height="40" viewBox="0 0 44 40" fill="none" focusable="false" aria-hidden="true" role="img">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M20.5729 20L25.7865 14.2071L24.5137 12.7929L18.0273 20L24.5137 27.2071L25.7865 25.7929L20.5729 20Z" fill="currentColor"/>\n </svg>\n </button>\n </div>\n\n <h2 id="${t}" class="moj-datepicker__dialog-title moj-js-datepicker-month-year" aria-live="polite">June 2020</h2>\n\n <div class="moj-datepicker__dialog-navbuttons">\n <button class="moj-datepicker__button moj-js-datepicker-next-month">\n <span class="govuk-visually-hidden">Next month</span>\n <svg width="44" height="40" viewBox="0 0 44 40" fill="none" focusable="false" aria-hidden="true" role="img">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M23.4271 20L18.2135 14.2071L19.4863 12.7929L25.9727 20L19.4863 27.2071L18.2135 25.7929L23.4271 20Z" fill="currentColor"/>\n </svg>\n </button>\n\n <button class="moj-datepicker__button moj-js-datepicker-next-year">\n <span class="govuk-visually-hidden">Next year</span>\n <svg width="44" height="40" viewBox="0 0 44 40" fill="none" fill="none" focusable="false" aria-hidden="true" role="img">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M20.8357 20L15.0428 14.2071L16.4571 12.7929L23.6642 20L16.4571 27.2071L15.0428 25.7929L20.8357 20Z" fill="currentColor"/>\n <path fill-rule="evenodd" clip-rule="evenodd" d="M26.8357 20L21.0428 14.2071L22.4571 12.7929L29.6642 20L22.4571 27.2071L21.0428 25.7929L26.8357 20Z" fill="currentColor"/>\n </svg>\n </button>\n </div>\n </div>\n\n <table class="moj-datepicker__calendar moj-js-datepicker-grid" role="grid" aria-labelledby="${t}">\n <thead>\n <tr></tr>\n </thead>\n\n <tbody></tbody>\n </table>\n\n <div class="govuk-button-group">\n <button type="button" class="govuk-button moj-js-datepicker-ok">Select</button>\n <button type="button" class="govuk-button govuk-button--secondary moj-js-datepicker-cancel">Close</button>\n </div>`},a.prototype.createCalendarHeaders=function(){this.dayLabels.forEach((t=>{const e=`<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",e)}))},a.prototype.leadingZeros=function(t,e=2){let o=t.toString();for(;o.length<e;)o=`0${o}`;return o},a.prototype.setOptions=function(){this.setMinAndMaxDatesOnCalendar(),this.setExcludedDates(),this.setExcludedDays(),this.setLeadingZeros(),this.setWeekStartDay()},a.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))},a.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)))},a.prototype.parseDateRangeString=function(t){const e=[],[o,n]=t.split("-").map((t=>this.formattedDateFromString(t,null)));if(o&&n){const t=new Date(o.getTime());for(;t<=n;)e.push(new Date(t)),t.setDate(t.getDate()+1)}return e},a.prototype.setExcludedDays=function(){if(this.config.excludedDays){const t=this.dayLabels.map((t=>t.toLowerCase()));"monday"===this.config.weekStartDay&&t.unshift(t.pop()),this.excludedDays=this.config.excludedDays.replace(/\s+/," ").toLowerCase().split(" ").map((e=>t.indexOf(e))).filter((t=>-1!==t))}},a.prototype.setLeadingZeros=function(){if("boolean"!=typeof this.config.leadingZeros){if("true"===this.config.leadingZeros.toLowerCase())return void(this.config.leadingZeros=!0);"false"===this.config.leadingZeros.toLowerCase()&&(this.config.leadingZeros=!1)}},a.prototype.setWeekStartDay=function(){const t=this.config.weekStartDay;t&&"sunday"===t.toLowerCase()?(this.config.weekStartDay="sunday",this.dayLabels.unshift(this.dayLabels.pop())):this.config.weekStartDay="monday"},a.prototype.isExcludedDate=function(t){if(this.minDate&&this.minDate>t)return!0;if(this.maxDate&&this.maxDate<t)return!0;for(const e of this.excludedDates)if(t.toDateString()===e.toDateString())return!0;return!!this.excludedDays.includes(t.getDay())},a.prototype.formattedDateFromString=function(t,e=new Date){let o=null;const n=/(\d{1,2})([-/,. ])(\d{1,2})\2(\d{4})/;if(!n.test(t))return e;const i=t.match(n),s=i[1],a=i[3],r=i[4];return o=new Date(`${r}-${a}-${s}`),o instanceof Date&&!isNaN(o)?o:e},a.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()}`},a.prototype.formattedDateHuman=function(t){return`${this.dayLabels[(t.getDay()+6)%7]} ${t.getDate()} ${this.monthLabels[t.getMonth()]} ${t.getFullYear()}`},a.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())},a.prototype.firstButtonKeydown=function(t){"Tab"===t.key&&t.shiftKey&&(this.$lastButtonInDialog.focus(),t.preventDefault())},a.prototype.lastButtonKeydown=function(t){"Tab"!==t.key||t.shiftKey||(this.$firstButtonInDialog.focus(),t.preventDefault())},a.prototype.updateCalendar=function(){this.$dialogTitle.innerHTML=`${this.monthLabels[this.currentDate.getMonth()]} ${this.currentDate.getFullYear()}`;const t=this.currentDate,e=new Date(t.getFullYear(),t.getMonth(),1);let o;o="monday"===this.config.weekStartDay?0===e.getDay()?6:e.getDay()-1:e.getDay(),e.setDate(e.getDate()-o);const n=new Date(e);for(let i=0;i<this.calendarDays.length;i++){const e=n.getMonth()!==t.getMonth(),o=this.isExcludedDate(n);this.calendarDays[i].update(n,e,o),n.setDate(n.getDate()+1)}},a.prototype.setCurrentDate=function(t=!0){const{currentDate:e}=this;if(this.calendarDays.forEach((o=>{o.button.classList.add("moj-datepicker__button"),o.button.classList.add("moj-datepicker__calendar-day"),o.button.setAttribute("tabindex",-1),o.button.classList.remove(this.selectedDayButtonClass);const n=o.date;n.setHours(0,0,0,0);const i=new Date;i.setHours(0,0,0,0),n.getTime()===e.getTime()&&t&&(o.button.setAttribute("tabindex",0),o.button.focus(),o.button.classList.add(this.selectedDayButtonClass)),this.inputDate&&n.getTime()===this.inputDate.getTime()?(o.button.classList.add(this.currentDayButtonClass),o.button.setAttribute("aria-current","date")):(o.button.classList.remove(this.currentDayButtonClass),o.button.removeAttribute("aria-current")),n.getTime()===i.getTime()?o.button.classList.add(this.todayButtonClass):o.button.classList.remove(this.todayButtonClass)})),!t){const t=this.calendarDays.filter((t=>"block"===window.getComputedStyle(t.button).display&&!t.button.disabled));t[0].button.setAttribute("tabindex",0),this.currentDate=t[0].date}},a.prototype.selectDate=function(t){if(this.isExcludedDate(t))return;this.$calendarButton.querySelector("span").innerText=`Choose date. Selected date is ${this.formattedDateHuman(t)}`,this.$input.value=this.formattedDateFromDate(t);const e=new Event("change",{bubbles:!0,cancelable:!0});this.$input.dispatchEvent(e),this.closeDialog()},a.prototype.isOpen=function(){return this.$dialog.classList.contains("moj-datepicker__dialog--open")},a.prototype.toggleDialog=function(t){t.preventDefault(),this.isOpen()?this.closeDialog():(this.setMinAndMaxDatesOnCalendar(),this.openDialog())},a.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()},a.prototype.closeDialog=function(){this.$dialog.hidden=!0,this.$dialog.classList.remove("moj-datepicker__dialog--open"),this.$calendarButton.setAttribute("aria-expanded","false"),this.$calendarButton.focus()},a.prototype.goToDate=function(t,e){const o=this.currentDate;this.currentDate=t,o.getMonth()===this.currentDate.getMonth()&&o.getFullYear()===this.currentDate.getFullYear()||this.updateCalendar(),this.setCurrentDate(e)},a.prototype.focusNextDay=function(){const t=new Date(this.currentDate);t.setDate(t.getDate()+1),this.goToDate(t)},a.prototype.focusPreviousDay=function(){const t=new Date(this.currentDate);t.setDate(t.getDate()-1),this.goToDate(t)},a.prototype.focusNextWeek=function(){const t=new Date(this.currentDate);t.setDate(t.getDate()+7),this.goToDate(t)},a.prototype.focusPreviousWeek=function(){const t=new Date(this.currentDate);t.setDate(t.getDate()-7),this.goToDate(t)},a.prototype.focusFirstDayOfWeek=function(){const t=new Date(this.currentDate),e="sunday"===this.config.weekStartDay?0:1,o=t.getDay(),n=o>=e?o-e:6-o;t.setDate(t.getDate()-n),t.setHours(0,0,0,0),this.goToDate(t)},a.prototype.focusLastDayOfWeek=function(){const t=new Date(this.currentDate),e="sunday"===this.config.weekStartDay?6:0,o=t.getDay(),n=o<=e?e-o:7-o;t.setDate(t.getDate()+n),t.setHours(0,0,0,0),this.goToDate(t)},a.prototype.focusNextMonth=function(t,e=!0){t.preventDefault();const o=new Date(this.currentDate);o.setMonth(o.getMonth()+1,1),this.goToDate(o,e)},a.prototype.focusPreviousMonth=function(t,e=!0){t.preventDefault();const o=new Date(this.currentDate);o.setMonth(o.getMonth()-1,1),this.goToDate(o,e)},a.prototype.focusNextYear=function(t,e=!0){t.preventDefault();const o=new Date(this.currentDate);o.setFullYear(o.getFullYear()+1,o.getMonth(),1),this.goToDate(o,e)},a.prototype.focusPreviousYear=function(t,e=!0){t.preventDefault();const o=new Date(this.currentDate);o.setFullYear(o.getFullYear()-1,o.getMonth(),1),this.goToDate(o,e)},a.prototype.parseDataset=function(t,e){const o={};for(const[n,,]of Object.entries(t.properties))n in e&&(o[n]=e[n]);return o},a.prototype.mergeConfigs=function(...t){const e={};for(const o of t)for(const t of Object.keys(o)){const n=e[t],i=o[t];e[t]="object"==typeof n&&"object"==typeof i?this.mergeConfigs(n,i):i}return e},r.prototype.init=function(){this.button.addEventListener("keydown",this.keyPress.bind(this)),this.button.addEventListener("click",this.click.bind(this))},r.prototype.update=function(t,e,o){const n=t.getDate();let i=this.picker.formattedDateHuman(t);o?(this.button.setAttribute("aria-disabled",!0),i=`Excluded date, ${i}`):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">${i}</span><span aria-hidden="true">${n}</span>`,this.date=new Date(t)},r.prototype.click=function(t){this.picker.goToDate(this.date),this.picker.selectDate(this.date),t.stopPropagation(),t.preventDefault()},r.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())},l.prototype.setupResponsiveChecks=function(){this.mq=window.matchMedia(this.options.bigModeMediaQuery),this.mq.addListener($.proxy(this,"checkMode")),this.checkMode(this.mq)},l.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)},l.prototype.checkMode=function(t){t.matches?this.enableBigMode():this.enableSmallMode()},l.prototype.enableBigMode=function(){this.showMenu(),this.removeCloseButton()},l.prototype.enableSmallMode=function(){this.hideMenu(),this.addCloseButton()},l.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))},l.prototype.onCloseClick=function(){this.hideMenu(),this.menuButton.focus()},l.prototype.removeCloseButton=function(){this.closeButton&&(this.closeButton.remove(),this.closeButton=null)},l.prototype.hideMenu=function(){this.menuButton.attr("aria-expanded","false"),this.filterContainer.addClass("moj-js-hidden"),this.menuButton.text(this.options.toggleButton.showText)},l.prototype.showMenu=function(){this.menuButton.attr("aria-expanded","true"),this.filterContainer.removeClass("moj-js-hidden"),this.menuButton.text(this.options.toggleButton.hideText)},l.prototype.onMenuButtonClick=function(){this.toggle()},l.prototype.toggle=function(){"false"===this.menuButton.attr("aria-expanded")?(this.showMenu(),this.filterContainer.get(0).focus()):this.hideMenu()},u.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"))},u.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)},u.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"))},u.prototype.setupStatusBox=function(){this.status=$('<div aria-live="polite" role="status" class="govuk-visually-hidden" />'),this.dropzone.append(this.status)},u.prototype.onDragOver=function(t){t.preventDefault(),this.dropzone.addClass("moj-multi-file-upload--dragover")},u.prototype.onDragLeave=function(){this.dropzone.removeClass("moj-multi-file-upload--dragover")},u.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)},u.prototype.uploadFiles=function(t){for(let e=0;e<t.length;e++)this.uploadFile(t[e])},u.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.get(0).focus()},u.prototype.onFileFocus=function(t){this.label.addClass("moj-multi-file-upload--focused")},u.prototype.onFileBlur=function(t){this.label.removeClass("moj-multi-file-upload--focused")},u.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>`},u.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>`},u.prototype.getFileRowHtml=function(t){return`\n <div class="govuk-summary-list__row moj-multi-file-upload__row">\n <div class="govuk-summary-list__value moj-multi-file-upload__message">\n <span class="moj-multi-file-upload__filename">${t.name}</span>\n <span class="moj-multi-file-upload__progress">0%</span>\n </div>\n <div class="govuk-summary-list__actions moj-multi-file-upload__actions"></div>\n </div>`},u.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}">\n Delete <span class="govuk-visually-hidden">${t.originalname}</span>\n </button>`},u.prototype.uploadFile=function(t){this.params.uploadFileEntryHook(this,t);const e=$(this.getFileRowHtml(t)),o=new FormData;o.append("documents",t),this.feedbackContainer.find(".moj-multi-file-upload__list").append(e),$.ajax({url:this.params.uploadUrl,type:"post",data:o,processData:!1,contentType:!1,success:$.proxy((function(o){o.error?(e.find(".moj-multi-file-upload__message").html(this.getErrorHtml(o.error)),this.status.html(o.error.message)):(e.find(".moj-multi-file-upload__message").html(this.getSuccessHtml(o.success)),this.status.html(o.success.messageText)),e.find(".moj-multi-file-upload__actions").append(this.getDeleteButtonHtml(o.file)),this.params.uploadFileExitHook(this,t,o)}),this),error:$.proxy((function(e,o,n){this.params.uploadFileErrorHook(this,t,e,o,n)}),this),xhr:function(){const t=new XMLHttpRequest;return t.upload.addEventListener("progress",(function(t){if(t.lengthComputable){let o=t.loaded/t.total;o=parseInt(100*o,10),e.find(".moj-multi-file-upload__progress").text(` ${o}%`)}}),!1),t}})},u.prototype.onFileDeleteClick=function(t){t.preventDefault();const e=$(t.currentTarget),o={};o[e[0].name]=e[0].value,$.ajax({url:this.params.deleteUrl,type:"post",dataType:"json",data:o,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)})},c.prototype.getToggleHtml=function(t){let e="";return e+='<div class="govuk-checkboxes__item govuk-checkboxes--small moj-multi-select__checkbox">',e+=` <input type="checkbox" class="govuk-checkboxes__input" id="${t}">`,e+=` <label class="govuk-label govuk-checkboxes__label moj-multi-select__toggle-label" for="${t}">`,e+=' <span class="govuk-visually-hidden">Select all</span>',e+=" </label>",e+="</div>",e},c.prototype.onButtonClick=function(t){this.checked?(this.uncheckAll(),this.toggleButton[0].checked=!1):(this.checkAll(),this.toggleButton[0].checked=!0)},c.prototype.checkAll=function(){this.checkboxes.each($.proxy((function(t,e){e.checked=!0}),this)),this.checked=!0},c.prototype.uncheckAll=function(){this.checkboxes.each($.proxy((function(t,e){e.checked=!1}),this)),this.checked=!1},c.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)},d.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"))},d.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>'))},h.prototype.onToolbarKeydown=function(t){let e;switch(t.keyCode){case this.keys.right:case this.keys.down:{e=this.toolbar.find("button[tabindex=0]");const t=e.next("button");t[0]&&(t.focus(),e.attr("tabindex","-1"),t.attr("tabindex","0"));break}case this.keys.left:case this.keys.up:{e=this.toolbar.find("button[tabindex=0]");const t=e.prev("button");t[0]&&(t.focus(),e.attr("tabindex","-1"),t.attr("tabindex","0"));break}}},h.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},h.prototype.getEnhancedHtml=function(t){return`${this.getToolbarHtml()}<div class="govuk-textarea moj-rich-text-editor__content" contenteditable="true" spellcheck="false"></div>`},h.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")},h.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())},h.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")},h.prototype.onButtonClick=function(t){document.execCommand($(t.currentTarget).data("command"),!1,null)},h.prototype.getContent=function(){return this.container.find(".moj-rich-text-editor__content").html()},h.prototype.onEditorInput=function(t){this.updateTextarea()},h.prototype.updateTextarea=function(){document.execCommand("defaultParagraphSeparator",!1,"p"),this.textarea.val(this.getContent())},h.prototype.onLabelClick=function(t){t.preventDefault(),this.container.find(".moj-rich-text-editor__content").focus()},p.prototype.showMenu=function(){this.toggleButton.attr("aria-expanded","true"),this.container.removeClass("moj-js-hidden"),this.container.find("input").first().get(0).focus()},p.prototype.hideMenu=function(){this.container.addClass("moj-js-hidden"),this.toggleButton.attr("aria-expanded","false")},p.prototype.onToggleButtonClick=function(){"false"===this.toggleButton.attr("aria-expanded")?this.showMenu():this.hideMenu()},p.prototype.onDocumentClick=function(t){$.contains(this.toggleButtonContainer[0],t.target)||$.contains(this.container[0],t.target)||this.hideMenu()},f.prototype.setupOptions=function(t){t=t||{},this.statusMessage=t.statusMessage||"Sort by %heading% (%direction%)",this.ascendingText=t.ascendingText||"ascending",this.descendingText=t.descendingText||"descending"},f.prototype.createHeadingButtons=function(){const t=this.table.find("thead th");let e;for(let o=0;o<t.length;o++)e=$(t[o]),e.attr("aria-sort")&&this.createHeadingButton(e,o)},f.prototype.createHeadingButton=function(t,e){const o=t.text(),n=$(`<button type="button" data-index="${e}">${o}</button>`);t.text(""),t.append(n)},f.prototype.createStatusBox=function(){this.status=$('<div aria-live="polite" role="status" aria-atomic="true" class="govuk-visually-hidden" />'),this.table.parent().append(this.status)},f.prototype.initialiseSortedColumn=function(){const t=this.getTableRowsArray();this.table.find("th").filter('[aria-sort="ascending"], [aria-sort="descending"]').first().each(((e,o)=>{const n=$(o).attr("aria-sort"),i=$(o).find("button").attr("data-index"),s=this.sort(t,i,n);this.addRows(s)}))},f.prototype.onSortButtonClick=function(t){const e=t.currentTarget.getAttribute("data-index"),o=$(t.currentTarget).parent().attr("aria-sort");let n;n="none"===o||"descending"===o?"ascending":"descending";const i=this.getTableRowsArray(),s=this.sort(i,e,n);this.addRows(s),this.removeButtonStates(),this.updateButtonState($(t.currentTarget),n)},f.prototype.updateButtonState=function(t,e){t.parent().attr("aria-sort",e);let o=this.statusMessage;o=o.replace(/%heading%/,t.text()),o=o.replace(/%direction%/,this[`${e}Text`]),this.status.text(o)},f.prototype.removeButtonStates=function(){this.table.find("thead th").attr("aria-sort","none")},f.prototype.addRows=function(t){for(let e=0;e<t.length;e++)this.body.append(t[e])},f.prototype.getTableRowsArray=function(){const t=[],e=this.body.find("tr");for(let o=0;o<e.length;o++)t.push(e[o]);return t},f.prototype.sort=function(t,e,o){return t.sort(function(t,n){const i=$(t).find("td,th").eq(e),s=$(n).find("td,th").eq(e),a="ascending"===o?this.getCellValue(i):this.getCellValue(s),r="ascending"===o?this.getCellValue(s):this.getCellValue(i);return"string"==typeof a||"string"==typeof r?a.toString().localeCompare(r.toString()):a-r}.bind(this))},f.prototype.getCellValue=function(t){const e=t.attr("data-sort-value")||t.html(),o=Number(e);return isNaN(o)?e:o};t.AddAnother=e,t.Alert=i,t.ButtonMenu=s,t.DatePicker=a,t.FilterToggleButton=l,t.MultiFileUpload=u,t.MultiSelect=c,t.PasswordReveal=d,t.RichTextEditor=h,t.SearchToggle=p,t.SortableTable=f,t.initAll=function(t){const n=void 0!==(t=void 0!==t?t:{}).scope?t.scope:document;o(n.querySelectorAll('[data-module="moj-add-another"]'),(function(t){new e(t)})),o(n.querySelectorAll('[data-module="moj-multi-select"]'),(function(t){new c({container:t.querySelector(t.getAttribute("data-multi-select-checkbox")),checkboxes:t.querySelectorAll("tbody .govuk-checkboxes__input"),id_prefix:t.getAttribute("data-multi-select-idprefix")})})),o(n.querySelectorAll('[data-module="moj-password-reveal"]'),(function(t){new d(t)})),o(n.querySelectorAll('[data-module="moj-rich-text-editor"]'),(function(t){const e={textarea:$(t)},o=t.getAttribute("data-moj-rich-text-editor-toolbar");if(o){const t=o.split(",");e.toolbar={};for(const o in t)e.toolbar[t[o]]=!0}new h(e)})),o(n.querySelectorAll('[data-module="moj-search-toggle"]'),(function(t){new p({toggleButton:{container:$(t.querySelector(".moj-search-toggle__toggle")),text:t.getAttribute("data-moj-search-toggle-text")},search:{container:$(t.querySelector(".moj-search"))}})})),o(n.querySelectorAll('[data-module="moj-sortable-table"]'),(function(t){new f({table:t})})),o(n.querySelectorAll('[data-module="moj-date-picker"]'),(function(t){new a(t,{}).init()})),o(n.querySelectorAll('[data-module="moj-button-menu"]'),(function(t){new s(t,{}).init()})),o(n.querySelectorAll('[data-module="moj-alert"]'),(function(t){new i(t,{}).init()}))},t.version="0.0.0-development"}));//# sourceMappingURL=moj-frontend.min.js.map
1
+ class AddAnother{constructor(t){if(this.container=t,this.container.hasAttribute("data-moj-add-another-init"))return this;this.container.setAttribute("data-moj-add-another-init",""),this.container.addEventListener("click",this.onRemoveButtonClick.bind(this)),this.container.addEventListener("click",this.onAddButtonClick.bind(this));this.container.querySelectorAll(".moj-add-another__add-button, moj-add-another__remove-button").forEach((t=>{t instanceof HTMLButtonElement&&(t.type="button")}))}onAddButtonClick(t){const e=t.target;if(!(e&&e instanceof HTMLButtonElement&&e.classList.contains("moj-add-another__add-button")))return;const s=this.getItems(),i=this.getNewItem();if(!(i&&i instanceof HTMLElement))return;this.updateAttributes(i,s.length),this.resetItem(i);const o=s[0];this.hasRemoveButton(o)||this.createRemoveButton(o),s[s.length-1].after(i);const n=i.querySelector("input, textarea, select");n&&n instanceof HTMLInputElement&&n.focus()}hasRemoveButton(t){return t.querySelectorAll(".moj-add-another__remove-button").length}getItems(){if(!this.container)return[];return Array.from(this.container.querySelectorAll(".moj-add-another__item")).filter((t=>t instanceof HTMLElement))}getNewItem(){const t=this.getItems()[0].cloneNode(!0);if(t&&t instanceof HTMLElement)return this.hasRemoveButton(t)||this.createRemoveButton(t),t}updateAttributes(t,e){t.querySelectorAll("[data-name]").forEach((s=>{if(!(s instanceof HTMLInputElement))return;const i=s.getAttribute("data-name")||"",o=s.getAttribute("data-id")||"",n=s.id;s.name=i.replace(/%index%/,`${e}`),s.id=o.replace(/%index%/,`${e}`);const a=s.parentElement.querySelector("label")||s.closest("label")||t.querySelector(`[for="${n}"]`);a&&a instanceof HTMLLabelElement&&(a.htmlFor=s.id)}))}createRemoveButton(t){const e=document.createElement("button");e.type="button",e.classList.add("govuk-button","govuk-button--secondary","moj-add-another__remove-button"),e.textContent="Remove",t.append(e)}resetItem(t){t.querySelectorAll("[data-name], [data-id]").forEach((t=>{t instanceof HTMLInputElement&&("checkbox"===t.type||"radio"===t.type?t.checked=!1:t.value="")}))}onRemoveButtonClick(t){const e=t.target;if(!(e&&e instanceof HTMLButtonElement&&e.classList.contains("moj-add-another__remove-button")))return;e.closest(".moj-add-another__item").remove();const s=this.getItems();1===s.length&&s[0].querySelector(".moj-add-another__remove-button").remove(),s.forEach(((t,e)=>{this.updateAttributes(t,e)})),this.focusHeading()}focusHeading(){const t=this.container.querySelector(".moj-add-another__heading");t&&t instanceof HTMLElement&&t.focus()}}function removeAttributeValue(t,e,s){let i,o;t.getAttribute(e)&&(t.getAttribute(e)===s?t.removeAttribute(e):(i=new RegExp(`(^|\\s)${s}(\\s|$)`),o=t.getAttribute(e).match(i),o&&3===o.length&&t.setAttribute(e,t.getAttribute(e).replace(i,o[1]&&o[2]?" ":""))))}function addAttributeValue(t,e,s){let i;t.getAttribute(e)?(i=new RegExp(`(^|\\s)${s}(\\s|$)`),i.test(t.getAttribute(e))||t.setAttribute(e,`${t.getAttribute(e)} ${s}`)):t.setAttribute(e,s)}function setFocus(t,e={}){const s=t.getAttribute("tabindex");function onBlur(){e.onBlur&&e.onBlur.call(t),s||t.removeAttribute("tabindex")}s||t.setAttribute("tabindex","-1"),t.addEventListener("focus",(function(){t.addEventListener("blur",onBlur,{once:!0})}),{once:!0}),e.onBeforeFocus&&e.onBeforeFocus.call(t),t.focus()}class Alert{constructor(t,e={}){if(!(t&&t instanceof HTMLElement))return this;const s=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(s,t.dataset)),this.$module=t,"alert"!==this.$module.getAttribute("role")||this.config.disableAutoFocus||setFocus(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=>{t.target instanceof Node&&this.$dismissButton.contains(t.target)&&this.dimiss()})))}dimiss(){let t;if(this.config.focusOnDismissSelector&&(t=document.querySelector(this.config.focusOnDismissSelector)),!t){const e=this.$module.nextElementSibling;e&&e.matches(".moj-alert")&&(t=e)}t||(t=function(t,e){if(!(t&&t instanceof HTMLElement))return;let s=t.previousElementSibling;for(;s;){if(s.matches(e))return s;s=s.previousElementSibling}}(this.$module,".moj-alert, h1, h2, h3, h4, h5, h6")),t||(t=function(t,e){if(!(t&&t instanceof HTMLElement))return;let s=t;for(;s;){if(s.matches(e))return s;let t=s.previousElementSibling;for(;t;){if(t.matches(e))return t;t=t.previousElementSibling}s=s.parentElement}}(this.$module,"h1, h2, h3, h4, h5, h6, main, body")),t instanceof HTMLElement&&setFocus(t),this.$module.remove()}normaliseString(t,e){const s=t?t.trim():"";let i,o;switch(e&&e.type&&(o=e.type),o||(["true","false"].includes(s)&&(o="boolean"),s.length>0&&Number.isFinite(Number(s))&&(o="number")),o){case"boolean":i="true"===s;break;case"number":i=Number(s);break;default:i=t}return i}parseDataset(t,e){const s={};for(const[i,o]of Object.entries(t.properties))i in e&&e[i]&&(s[i]=this.normaliseString(e[i],o));return s}mergeConfigs(...t){const e={};for(const s of t)for(const t of Object.keys(s)){const i=e[t],o=s[t];e[t]="object"==typeof i&&"object"==typeof o?this.mergeConfigs(i,o):o}return e}}class ButtonMenu{constructor(t,e={}){if(!(t&&t instanceof HTMLElement))return this;const s=Object.freeze({properties:{buttonText:{type:"string"},buttonClasses:{type:"string"},alignMenu:{type:"string"}}});if(this.config=this.mergeConfigs({buttonText:"Actions",alignMenu:"left",buttonClasses:""},e,this.parseDataset(s,t.dataset)),this.$module=t,1===this.$module.children.length){const t=this.$module.children[0];t.classList.forEach((e=>{e.startsWith("govuk-button-")&&t.classList.remove(e),t.classList.remove("moj-button-menu__item"),t.classList.add("moj-button-menu__single-button")})),this.config.buttonClasses&&t.classList.add(...this.config.buttonClasses.split(" "))}this.$module.children.length>1&&this.initMenu()}initMenu(){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)}))}createMenu(){const 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}setupMenuItems(){Array.from(this.$menu.children).forEach((t=>{const e=document.createElement("li");this.$menu.insertBefore(e,t),e.appendChild(t),t.setAttribute("tabindex","-1"),"BUTTON"===t.tagName&&t.setAttribute("type","button"),t.classList.forEach((e=>{e.startsWith("govuk-button")&&t.classList.remove(e)})),t.addEventListener("click",(()=>{setTimeout((()=>{this.closeMenu(!1)}),50)}))}))}toggleTemplate(){return`\n <button type="button" class="govuk-button moj-button-menu__toggle-button ${this.config.buttonClasses||""}" aria-haspopup="true" aria-expanded="false">\n <span>\n ${this.config.buttonText}\n <svg width="11" height="5" viewBox="0 0 11 5" xmlns="http://www.w3.org/2000/svg">\n <path d="M5.5 0L11 5L0 5L5.5 0Z" fill="currentColor"/>\n </svg>\n </span>\n </button>`}isOpen(){return"true"===this.$menuToggle.getAttribute("aria-expanded")}toggleMenu(t){t.preventDefault();const e=0===t.detail?0:-1;this.isOpen()?this.closeMenu():this.openMenu(e)}openMenu(t=0){this.$menu.hidden=!1,this.$menuToggle.setAttribute("aria-expanded","true"),-1!==t&&this.focusItem(t)}closeMenu(t=!0){this.$menu.hidden=!0,this.$menuToggle.setAttribute("aria-expanded","false"),t&&this.$menuToggle.focus()}focusItem(t){t>=this.items.length&&(t=0),t<0&&(t=this.items.length-1);const e=this.items.item(t);e&&e.focus()}currentFocusIndex(){const t=document.activeElement;return Array.from(this.items).indexOf(t)}handleKeyDown(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)}parseDataset(t,e){const s={};for(const[i,,]of Object.entries(t.properties))i in e&&e[i]&&(s[i]=e[i]);return s}mergeConfigs(...t){const e={};for(const s of t)for(const t of Object.keys(s)){const i=e[t],o=s[t];e[t]="object"==typeof i&&"object"==typeof o?this.mergeConfigs(i,o):o}return e}}class DatePicker{constructor(t,e={}){if(!(t&&t instanceof HTMLElement))return this;const s=t.querySelector(".moj-js-datepicker-input");if(!(s&&s instanceof HTMLInputElement))return this;this.$module=t,this.$input=s;const i=Object.freeze({properties:{excludedDates:{type:"string"},excludedDays:{type:"string"},leadingZeros:{type:"string"},maxDate:{type:"string"},minDate:{type:"string"},weekStartDay:{type:"string"}}});if(this.config=this.mergeConfigs({leadingZeros:!1,weekStartDay:"monday"},e,this.parseDataset(i,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.dataset.initialized)return this;this.setOptions(),this.initControls(),this.$module.setAttribute("data-initialized","true")}initControls(){this.id=`datepicker-${this.$input.id}`,this.$dialog=this.createDialog(),this.createCalendarHeaders();const t=document.createElement("div"),e=document.createElement("div");t.classList.add("moj-datepicker__wrapper"),e.classList.add("govuk-input__wrapper"),this.$input.parentElement.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()})),this.$okButton.addEventListener("click",(()=>{this.selectDate(this.currentDate)}));const s=this.$dialog.querySelectorAll('button:not([disabled="true"])');this.$firstButtonInDialog=s[0],this.$lastButtonInDialog=s[s.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()}createDialog(){const 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}createCalendar(){const t=this.$dialog.querySelector("tbody");let e=0;for(let s=0;s<6;s++){const i=t.insertRow(s);for(let t=0;t<7;t++){const o=document.createElement("td"),n=document.createElement("button");o.appendChild(n),i.appendChild(o);const a=new DSCalendarDay(n,e,s,t,this);this.calendarDays.push(a),e++}}}toggleTemplate(){return`<button class="moj-datepicker__toggle moj-js-datepicker-toggle" type="button" aria-haspopup="dialog" aria-controls="${this.id}" aria-expanded="false">\n <span class="govuk-visually-hidden">Choose date</span>\n <svg width="32" height="24" focusable="false" class="moj-datepicker-icon" aria-hidden="true" role="img" viewBox="0 0 22 22">\n <path\n fill="currentColor"\n fill-rule="evenodd"\n clip-rule="evenodd"\n d="M16.1333 2.93333H5.86668V4.4C5.86668 5.21002 5.21003 5.86667 4.40002 5.86667C3.59 5.86667 2.93335 5.21002 2.93335 4.4V2.93333H2C0.895431 2.93333 0 3.82877 0 4.93334V19.2667C0 20.3712 0.89543 21.2667 2 21.2667H20C21.1046 21.2667 22 20.3712 22 19.2667V4.93333C22 3.82876 21.1046 2.93333 20 2.93333H19.0667V4.4C19.0667 5.21002 18.41 5.86667 17.6 5.86667C16.79 5.86667 16.1333 5.21002 16.1333 4.4V2.93333ZM20.5333 8.06667H1.46665V18.8C1.46665 19.3523 1.91436 19.8 2.46665 19.8H19.5333C20.0856 19.8 20.5333 19.3523 20.5333 18.8V8.06667Z"\n ></path>\n <rect x="3.66669" width="1.46667" height="5.13333" rx="0.733333" fill="currentColor"></rect>\n <rect x="16.8667" width="1.46667" height="5.13333" rx="0.733333" fill="currentColor"></rect>\n </svg>\n </button>`}dialogTemplate(t){return`<div class="moj-datepicker__dialog-header">\n <div class="moj-datepicker__dialog-navbuttons">\n <button class="moj-datepicker__button moj-js-datepicker-prev-year">\n <span class="govuk-visually-hidden">Previous year</span>\n <svg width="44" height="40" viewBox="0 0 44 40" fill="none" fill="none" focusable="false" aria-hidden="true" role="img">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M23.1643 20L28.9572 14.2071L27.5429 12.7929L20.3358 20L27.5429 27.2071L28.9572 25.7929L23.1643 20Z" fill="currentColor"/>\n <path fill-rule="evenodd" clip-rule="evenodd" d="M17.1643 20L22.9572 14.2071L21.5429 12.7929L14.3358 20L21.5429 27.2071L22.9572 25.7929L17.1643 20Z" fill="currentColor"/>\n </svg>\n </button>\n\n <button class="moj-datepicker__button moj-js-datepicker-prev-month">\n <span class="govuk-visually-hidden">Previous month</span>\n <svg width="44" height="40" viewBox="0 0 44 40" fill="none" focusable="false" aria-hidden="true" role="img">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M20.5729 20L25.7865 14.2071L24.5137 12.7929L18.0273 20L24.5137 27.2071L25.7865 25.7929L20.5729 20Z" fill="currentColor"/>\n </svg>\n </button>\n </div>\n\n <h2 id="${t}" class="moj-datepicker__dialog-title moj-js-datepicker-month-year" aria-live="polite">June 2020</h2>\n\n <div class="moj-datepicker__dialog-navbuttons">\n <button class="moj-datepicker__button moj-js-datepicker-next-month">\n <span class="govuk-visually-hidden">Next month</span>\n <svg width="44" height="40" viewBox="0 0 44 40" fill="none" focusable="false" aria-hidden="true" role="img">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M23.4271 20L18.2135 14.2071L19.4863 12.7929L25.9727 20L19.4863 27.2071L18.2135 25.7929L23.4271 20Z" fill="currentColor"/>\n </svg>\n </button>\n\n <button class="moj-datepicker__button moj-js-datepicker-next-year">\n <span class="govuk-visually-hidden">Next year</span>\n <svg width="44" height="40" viewBox="0 0 44 40" fill="none" fill="none" focusable="false" aria-hidden="true" role="img">\n <path fill-rule="evenodd" clip-rule="evenodd" d="M20.8357 20L15.0428 14.2071L16.4571 12.7929L23.6642 20L16.4571 27.2071L15.0428 25.7929L20.8357 20Z" fill="currentColor"/>\n <path fill-rule="evenodd" clip-rule="evenodd" d="M26.8357 20L21.0428 14.2071L22.4571 12.7929L29.6642 20L22.4571 27.2071L21.0428 25.7929L26.8357 20Z" fill="currentColor"/>\n </svg>\n </button>\n </div>\n </div>\n\n <table class="moj-datepicker__calendar moj-js-datepicker-grid" role="grid" aria-labelledby="${t}">\n <thead>\n <tr></tr>\n </thead>\n\n <tbody></tbody>\n </table>\n\n <div class="govuk-button-group">\n <button type="button" class="govuk-button moj-js-datepicker-ok">Select</button>\n <button type="button" class="govuk-button govuk-button--secondary moj-js-datepicker-cancel">Close</button>\n </div>`}createCalendarHeaders(){this.dayLabels.forEach((t=>{const e=`<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",e)}))}leadingZeros(t,e=2){let s=t.toString();for(;s.length<e;)s=`0${s}`;return s}setOptions(){this.setMinAndMaxDatesOnCalendar(),this.setExcludedDates(),this.setExcludedDays(),this.setLeadingZeros(),this.setWeekStartDay()}setMinAndMaxDatesOnCalendar(){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))}setExcludedDates(){this.config.excludedDates&&(this.excludedDates=this.config.excludedDates.replace(/\s+/," ").split(" ").map((t=>t.includes("-")?this.parseDateRangeString(t):[this.formattedDateFromString(t)])).reduce(((t,e)=>t.concat(e))).filter((t=>t)))}parseDateRangeString(t){const e=[],[s,i]=t.split("-").map((t=>this.formattedDateFromString(t,null)));if(s&&i){const t=new Date(s.getTime());for(;t<=i;)e.push(new Date(t)),t.setDate(t.getDate()+1)}return e}setExcludedDays(){if(this.config.excludedDays){const t=this.dayLabels.map((t=>t.toLowerCase()));"monday"===this.config.weekStartDay&&t.unshift(t.pop()),this.excludedDays=this.config.excludedDays.replace(/\s+/," ").toLowerCase().split(" ").map((e=>t.indexOf(e))).filter((t=>-1!==t))}}setLeadingZeros(){if("boolean"!=typeof this.config.leadingZeros){if("true"===this.config.leadingZeros.toLowerCase())return void(this.config.leadingZeros=!0);"false"===this.config.leadingZeros.toLowerCase()&&(this.config.leadingZeros=!1)}}setWeekStartDay(){const t=this.config.weekStartDay;t&&"sunday"===t.toLowerCase()?(this.config.weekStartDay="sunday",this.dayLabels.unshift(this.dayLabels.pop())):this.config.weekStartDay="monday"}isExcludedDate(t){if(this.minDate&&this.minDate>t)return!0;if(this.maxDate&&this.maxDate<t)return!0;for(const e of this.excludedDates)if(t.toDateString()===e.toDateString())return!0;return!!this.excludedDays.includes(t.getDay())}formattedDateFromString(t,e=new Date){let s=null;const i=/(\d{1,2})([-/,. ])(\d{1,2})\2(\d{4})/;if(!i.test(t))return e;const o=i.exec(t),n=o[1],a=o[3],r=o[4];return s=new Date(`${r}-${a}-${n}`),s instanceof Date&&Number.isFinite(s.getTime())?s:e}formattedDateFromDate(t){return this.config.leadingZeros?`${this.leadingZeros(t.getDate())}/${this.leadingZeros(t.getMonth()+1)}/${t.getFullYear()}`:`${t.getDate()}/${t.getMonth()+1}/${t.getFullYear()}`}formattedDateHuman(t){return`${this.dayLabels[(t.getDay()+6)%7]} ${t.getDate()} ${this.monthLabels[t.getMonth()]} ${t.getFullYear()}`}backgroundClick(t){this.isOpen()&&t.target instanceof Node&&!this.$dialog.contains(t.target)&&!this.$input.contains(t.target)&&!this.$calendarButton.contains(t.target)&&(t.preventDefault(),this.closeDialog())}firstButtonKeydown(t){"Tab"===t.key&&t.shiftKey&&(this.$lastButtonInDialog.focus(),t.preventDefault())}lastButtonKeydown(t){"Tab"!==t.key||t.shiftKey||(this.$firstButtonInDialog.focus(),t.preventDefault())}updateCalendar(){this.$dialogTitle.innerHTML=`${this.monthLabels[this.currentDate.getMonth()]} ${this.currentDate.getFullYear()}`;const t=this.currentDate,e=new Date(t.getFullYear(),t.getMonth(),1);let s;s="monday"===this.config.weekStartDay?0===e.getDay()?6:e.getDay()-1:e.getDay(),e.setDate(e.getDate()-s);const i=new Date(e);for(const o of this.calendarDays){const e=i.getMonth()!==t.getMonth(),s=this.isExcludedDate(i);o.update(i,e,s),i.setDate(i.getDate()+1)}}setCurrentDate(t=!0){const{currentDate:e}=this;if(this.calendarDays.forEach((s=>{s.button.classList.add("moj-datepicker__button"),s.button.classList.add("moj-datepicker__calendar-day"),s.button.setAttribute("tabindex","-1"),s.button.classList.remove(this.selectedDayButtonClass);const i=s.date;i.setHours(0,0,0,0);const o=new Date;o.setHours(0,0,0,0),i.getTime()===e.getTime()&&t&&(s.button.setAttribute("tabindex","0"),s.button.focus(),s.button.classList.add(this.selectedDayButtonClass)),this.inputDate&&i.getTime()===this.inputDate.getTime()?(s.button.classList.add(this.currentDayButtonClass),s.button.setAttribute("aria-current","date")):(s.button.classList.remove(this.currentDayButtonClass),s.button.removeAttribute("aria-current")),i.getTime()===o.getTime()?s.button.classList.add(this.todayButtonClass):s.button.classList.remove(this.todayButtonClass)})),!t){const t=this.calendarDays.filter((t=>"block"===window.getComputedStyle(t.button).display&&!t.button.disabled));t[0].button.setAttribute("tabindex","0"),this.currentDate=t[0].date}}selectDate(t){if(this.isExcludedDate(t))return;this.$calendarButton.querySelector("span").innerText=`Choose date. Selected date is ${this.formattedDateHuman(t)}`,this.$input.value=this.formattedDateFromDate(t);const e=new Event("change",{bubbles:!0,cancelable:!0});this.$input.dispatchEvent(e),this.closeDialog()}isOpen(){return this.$dialog.classList.contains("moj-datepicker__dialog--open")}toggleDialog(t){t.preventDefault(),this.isOpen()?this.closeDialog():(this.setMinAndMaxDatesOnCalendar(),this.openDialog())}openDialog(){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()}closeDialog(){this.$dialog.hidden=!0,this.$dialog.classList.remove("moj-datepicker__dialog--open"),this.$calendarButton.setAttribute("aria-expanded","false"),this.$calendarButton.focus()}goToDate(t,e){const s=this.currentDate;this.currentDate=t,s.getMonth()===this.currentDate.getMonth()&&s.getFullYear()===this.currentDate.getFullYear()||this.updateCalendar(),this.setCurrentDate(e)}focusNextDay(){const t=new Date(this.currentDate);t.setDate(t.getDate()+1),this.goToDate(t)}focusPreviousDay(){const t=new Date(this.currentDate);t.setDate(t.getDate()-1),this.goToDate(t)}focusNextWeek(){const t=new Date(this.currentDate);t.setDate(t.getDate()+7),this.goToDate(t)}focusPreviousWeek(){const t=new Date(this.currentDate);t.setDate(t.getDate()-7),this.goToDate(t)}focusFirstDayOfWeek(){const t=new Date(this.currentDate),e="sunday"===this.config.weekStartDay?0:1,s=t.getDay(),i=s>=e?s-e:6-s;t.setDate(t.getDate()-i),t.setHours(0,0,0,0),this.goToDate(t)}focusLastDayOfWeek(){const t=new Date(this.currentDate),e="sunday"===this.config.weekStartDay?6:0,s=t.getDay(),i=s<=e?e-s:7-s;t.setDate(t.getDate()+i),t.setHours(0,0,0,0),this.goToDate(t)}focusNextMonth(t,e=!0){t.preventDefault();const s=new Date(this.currentDate);s.setMonth(s.getMonth()+1,1),this.goToDate(s,e)}focusPreviousMonth(t,e=!0){t.preventDefault();const s=new Date(this.currentDate);s.setMonth(s.getMonth()-1,1),this.goToDate(s,e)}focusNextYear(t,e=!0){t.preventDefault();const s=new Date(this.currentDate);s.setFullYear(s.getFullYear()+1,s.getMonth(),1),this.goToDate(s,e)}focusPreviousYear(t,e=!0){t.preventDefault();const s=new Date(this.currentDate);s.setFullYear(s.getFullYear()-1,s.getMonth(),1),this.goToDate(s,e)}parseDataset(t,e){const s={};for(const[i,,]of Object.entries(t.properties))i in e&&(s[i]=e[i]);return s}mergeConfigs(...t){const e={};for(const s of t)for(const t of Object.keys(s)){const i=e[t],o=s[t];e[t]="object"==typeof i&&"object"==typeof o?this.mergeConfigs(i,o):o}return e}}class DSCalendarDay{constructor(t,e,s,i,o){this.index=e,this.row=s,this.column=i,this.button=t,this.picker=o,this.date=new Date,this.button.addEventListener("keydown",this.keyPress.bind(this)),this.button.addEventListener("click",this.click.bind(this))}update(t,e,s){const i=t.getDate();let o=this.picker.formattedDateHuman(t);s?(this.button.setAttribute("aria-disabled","true"),o=`Excluded date, ${o}`):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">${o}</span><span aria-hidden="true">${i}</span>`,this.date=new Date(t)}click(t){this.picker.goToDate(this.date),this.picker.selectDate(this.date),t.stopPropagation(),t.preventDefault()}keyPress(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())}}class FilterToggleButton{constructor(t){this.options=t,this.container=this.options.toggleButton.container,this.filterContainer=this.options.filter.container,this.createToggleButton(),this.setupResponsiveChecks(),this.filterContainer.setAttribute("tabindex","-1"),this.options.startHidden&&this.hideMenu()}setupResponsiveChecks(){this.mq=window.matchMedia(this.options.bigModeMediaQuery),this.mq.addListener(this.checkMode.bind(this)),this.checkMode(this.mq)}createToggleButton(){this.menuButton=document.createElement("button"),this.menuButton.setAttribute("type","button"),this.menuButton.setAttribute("aria-haspopup","true"),this.menuButton.setAttribute("aria-expanded","false"),this.menuButton.className=`govuk-button ${this.options.toggleButton.classes}`,this.menuButton.textContent=this.options.toggleButton.showText,this.menuButton.addEventListener("click",this.onMenuButtonClick.bind(this)),this.container.append(this.menuButton)}checkMode(t){t.matches?this.enableBigMode():this.enableSmallMode()}enableBigMode(){this.showMenu(),this.removeCloseButton()}enableSmallMode(){this.hideMenu(),this.addCloseButton()}addCloseButton(){this.options.closeButton&&(this.closeButton=document.createElement("button"),this.closeButton.setAttribute("type","button"),this.closeButton.className="moj-filter__close",this.closeButton.textContent=this.options.closeButton.text,this.closeButton.addEventListener("click",this.onCloseClick.bind(this)),this.options.closeButton.container.append(this.closeButton))}onCloseClick(){this.hideMenu(),this.menuButton.focus()}removeCloseButton(){this.closeButton&&(this.closeButton.remove(),this.closeButton=null)}hideMenu(){this.menuButton.setAttribute("aria-expanded","false"),this.filterContainer.classList.add("moj-js-hidden"),this.menuButton.textContent=this.options.toggleButton.showText}showMenu(){this.menuButton.setAttribute("aria-expanded","true"),this.filterContainer.classList.remove("moj-js-hidden"),this.menuButton.textContent=this.options.toggleButton.hideText}onMenuButtonClick(){this.toggle()}toggle(){"false"===this.menuButton.getAttribute("aria-expanded")?(this.showMenu(),this.filterContainer.focus()):this.hideMenu()}}class FormValidator{constructor(t,e={}){if(!(t&&t instanceof HTMLFormElement))return this;this.form=t,this.errors=[],this.validators=[],this.form.addEventListener("submit",this.onSubmit.bind(this)),this.summary=e.summary||document.querySelector(".govuk-error-summary"),this.originalTitle=document.title}escapeHtml(t){return String(t).replace(/[&<>"'`=/]/g,(function(t){return FormValidator.entityMap[t]}))}resetTitle(){document.title=this.originalTitle}updateTitle(){document.title=`${this.errors.length} errors - ${document.title}`}showSummary(){this.summary.innerHTML=this.getSummaryHtml(),this.summary.classList.remove("moj-hidden"),this.summary.setAttribute("aria-labelledby","errorSummary-heading"),this.summary.focus()}getSummaryHtml(){let t='<h2 id="error-summary-title" class="govuk-error-summary__title">There is a problem</h2>';t+='<div class="govuk-error-summary__body">',t+='<ul class="govuk-list govuk-error-summary__list">';for(const e of this.errors)t+="<li>",t+=`<a href="#${this.escapeHtml(e.fieldName)}">`,t+=this.escapeHtml(e.message),t+="</a>",t+="</li>";return t+="</ul>",t+="</div>",t}hideSummary(){this.summary.classList.add("moj-hidden"),this.summary.removeAttribute("aria-labelledby")}onSubmit(t){this.removeInlineErrors(),this.hideSummary(),this.resetTitle(),this.validate()||(t.preventDefault(),this.updateTitle(),this.showSummary(),this.showInlineErrors())}showInlineErrors(){for(const t of this.errors)this.showInlineError(t)}showInlineError(t){const e=document.createElement("span");e.id=`${t.fieldName}-error`,e.classList.add("govuk-error-message"),e.innerHTML=this.escapeHtml(t.message);const s=document.querySelector(`#${t.fieldName}`),i=s.closest(".govuk-fieldset"),o=(i||s).closest(".govuk-form-group"),n=o.querySelector("label"),a=o.querySelector("legend");o.classList.add("govuk-form-group--error"),i&&a?(a.after(e),o.setAttribute("aria-invalid","true"),addAttributeValue(i,"aria-describedby",e.id)):n&&s&&(n.after(e),s.setAttribute("aria-invalid","true"),addAttributeValue(s,"aria-describedby",e.id))}removeInlineErrors(){for(const t of this.errors)this.removeInlineError(t)}removeInlineError(t){const e=document.querySelector(`#${t.fieldName}-error`),s=document.querySelector(`#${t.fieldName}`),i=s.closest(".govuk-fieldset"),o=(i||s).closest(".govuk-form-group"),n=o.querySelector("label"),a=o.querySelector("legend");e.remove(),o.classList.remove("govuk-form-group--error"),i&&a?(o.removeAttribute("aria-invalid"),removeAttributeValue(i,"aria-describedby",e.id)):n&&s&&(s.removeAttribute("aria-invalid"),removeAttributeValue(s,"aria-describedby",e.id))}addValidator(t,e){this.validators.push({fieldName:t,rules:e,field:this.form.elements[t]})}validate(){this.errors=[];let t,e,s=null,i=!0;for(t=0;t<this.validators.length;t++)for(s=this.validators[t],e=0;e<s.rules.length;e++){if(i=s.rules[e].method(s.field,s.rules[e].params),"boolean"==typeof i&&!i){this.errors.push({fieldName:s.fieldName,message:s.rules[e].message});break}if("string"==typeof i){this.errors.push({fieldName:i,message:s.rules[e].message});break}}return 0===this.errors.length}}FormValidator.entityMap={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;","`":"&#x60;","=":"&#x3D;"};class MultiFileUpload{constructor(t={}){const{container:e}=t;if(!(e&&e instanceof HTMLElement&&void 0!==document.createElement("div").ondrop&&"function"==typeof FormData&&function(){const t=document.createElement("input");return t.type="file",void 0!==t.files}()))return this;this.container=e,this.container.classList.add("moj-multi-file-upload--enhanced"),this.defaultParams={uploadFileEntryHook:()=>{},uploadFileExitHook:()=>{},uploadFileErrorHook:()=>{},fileDeleteHook:()=>{},uploadStatusText:"Uploading files, please wait",dropzoneHintText:"Drag and drop files here or",dropzoneButtonText:"Choose files"},this.params=Object.assign({},this.defaultParams,t),this.feedbackContainer=this.container.querySelector(".moj-multi-file__uploaded-files"),this.setupFileInput(),this.setupDropzone(),this.setupLabel(),this.setupStatusBox(),this.container.addEventListener("click",this.onFileDeleteClick.bind(this))}setupDropzone(){this.dropzone=document.createElement("div"),this.dropzone.classList.add("moj-multi-file-upload__dropzone"),this.dropzone.addEventListener("dragover",this.onDragOver.bind(this)),this.dropzone.addEventListener("dragleave",this.onDragLeave.bind(this)),this.dropzone.addEventListener("drop",this.onDrop.bind(this)),this.fileInput.replaceWith(this.dropzone),this.dropzone.appendChild(this.fileInput)}setupLabel(){const t=document.createElement("label");t.setAttribute("for",this.fileInput.id),t.classList.add("govuk-button","govuk-button--secondary"),t.textContent=this.params.dropzoneButtonText;const e=document.createElement("p");e.classList.add("govuk-body"),e.textContent=this.params.dropzoneHintText,this.label=t,this.dropzone.append(e),this.dropzone.append(t)}setupFileInput(){this.fileInput=this.container.querySelector(".moj-multi-file-upload__input"),this.fileInput.addEventListener("change",this.onFileChange.bind(this)),this.fileInput.addEventListener("focus",this.onFileFocus.bind(this)),this.fileInput.addEventListener("blur",this.onFileBlur.bind(this))}setupStatusBox(){this.status=document.createElement("div"),this.status.classList.add("govuk-visually-hidden"),this.status.setAttribute("aria-live","polite"),this.status.setAttribute("role","status"),this.dropzone.append(this.status)}onDragOver(t){t.preventDefault(),this.dropzone.classList.add("moj-multi-file-upload--dragover")}onDragLeave(){this.dropzone.classList.remove("moj-multi-file-upload--dragover")}onDrop(t){t.preventDefault(),this.dropzone.classList.remove("moj-multi-file-upload--dragover"),this.feedbackContainer.classList.remove("moj-hidden"),this.status.textContent=this.params.uploadStatusText,this.uploadFiles(t.dataTransfer.files)}uploadFiles(t){for(const e of Array.from(t))this.uploadFile(e)}onFileChange(){this.feedbackContainer.classList.remove("moj-hidden"),this.status.textContent=this.params.uploadStatusText,this.uploadFiles(this.fileInput.files);const t=this.fileInput.cloneNode(!0);t&&t instanceof HTMLInputElement&&(t.value="",this.fileInput.replaceWith(t),this.setupFileInput(),this.fileInput.focus())}onFileFocus(){this.label.classList.add("moj-multi-file-upload--focused")}onFileBlur(){this.label.classList.remove("moj-multi-file-upload--focused")}getSuccessHtml(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>`}getErrorHtml(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>`}getFileRow(t){const e=document.createElement("div");return e.classList.add("govuk-summary-list__row","moj-multi-file-upload__row"),e.innerHTML=`\n <div class="govuk-summary-list__value moj-multi-file-upload__message">\n <span class="moj-multi-file-upload__filename">${t.name}</span>\n <span class="moj-multi-file-upload__progress">0%</span>\n </div>\n <div class="govuk-summary-list__actions moj-multi-file-upload__actions"></div>\n `,e}getDeleteButton(t){const e=document.createElement("button");return e.setAttribute("type","button"),e.setAttribute("name","delete"),e.setAttribute("value",t.filename),e.classList.add("moj-multi-file-upload__delete","govuk-button","govuk-button--secondary","govuk-!-margin-bottom-0"),e.innerHTML=`Delete <span class="govuk-visually-hidden">${t.originalname}</span>`,e}uploadFile(t){this.params.uploadFileEntryHook(this,t);const e=this.getFileRow(t),s=e.querySelector(".moj-multi-file-upload__message"),i=e.querySelector(".moj-multi-file-upload__actions"),o=e.querySelector(".moj-multi-file-upload__progress"),n=new FormData;n.append("documents",t),this.feedbackContainer.querySelector(".moj-multi-file-upload__list").append(e);const a=new XMLHttpRequest,onError=()=>{const e=new Error(a.response&&"error"in a.response?a.response.error.message:a.statusText||"Upload failed");s.innerHTML=this.getErrorHtml(e),this.status.textContent=e.message,this.params.uploadFileErrorHook(this,t,a,a.responseText,e)};a.addEventListener("load",(()=>{if(a.status<200||a.status>=300||!("success"in a.response))return onError();s.innerHTML=this.getSuccessHtml(a.response.success),this.status.textContent=a.response.success.messageText,i.append(this.getDeleteButton(a.response.file)),this.params.uploadFileExitHook(this,t,a,a.responseText)})),a.addEventListener("error",onError),a.upload.addEventListener("progress",(t=>{if(!t.lengthComputable)return;const e=Math.round(t.loaded/t.total*100);o.textContent=` ${e}%`})),a.open("POST",this.params.uploadUrl),a.responseType="json",a.send(n)}onFileDeleteClick(t){const e=t.target;if(!(e&&e instanceof HTMLButtonElement&&e.classList.contains("moj-multi-file-upload__delete")))return;t.preventDefault();const s=new XMLHttpRequest;s.addEventListener("load",(()=>{if(s.status<200||s.status>=300)return;const t=Array.from(this.feedbackContainer.querySelectorAll(".moj-multi-file-upload__row"));1===t.length&&this.feedbackContainer.classList.add("moj-hidden");const i=t.find((t=>t.contains(e)));i&&i.remove(),this.params.fileDeleteHook(this,void 0,s,s.responseText)})),s.open("POST",this.params.deleteUrl),s.setRequestHeader("Content-Type","application/json"),s.responseType="json",s.send(JSON.stringify({[e.name]:e.value}))}}class MultiSelect{constructor(t){if(this.container=t.container,this.container.hasAttribute("data-moj-multi-select-init"))return this;this.container.setAttribute("data-moj-multi-select-init","");const e=t.id_prefix;this.setupToggle(e),this.toggleButton=this.toggle.querySelector("input"),this.toggleButton.addEventListener("click",this.onButtonClick.bind(this)),this.container.append(this.toggle),this.checkboxes=Array.from(t.checkboxes),this.checkboxes.forEach((t=>t.addEventListener("click",this.onCheckboxClick.bind(this)))),this.checked=t.checked||!1}setupToggle(t=""){const e=`${t}checkboxes-all`,s=document.createElement("div"),i=document.createElement("label"),o=document.createElement("input"),n=document.createElement("span");s.classList.add("govuk-checkboxes__item","govuk-checkboxes--small","moj-multi-select__checkbox"),o.id=e,o.type="checkbox",o.classList.add("govuk-checkboxes__input"),i.setAttribute("for",e),i.classList.add("govuk-label","govuk-checkboxes__label","moj-multi-select__toggle-label"),n.classList.add("govuk-visually-hidden"),n.textContent="Select all",i.append(n),s.append(o,i),this.toggle=s}onButtonClick(){this.checked?(this.uncheckAll(),this.toggleButton.checked=!1):(this.checkAll(),this.toggleButton.checked=!0)}checkAll(){this.checkboxes.forEach((t=>{t.checked=!0})),this.checked=!0}uncheckAll(){this.checkboxes.forEach((t=>{t.checked=!1})),this.checked=!1}onCheckboxClick(t){t.target.checked?this.checkboxes.filter((t=>t.checked)).length===this.checkboxes.length&&(this.toggleButton.checked=!0,this.checked=!0):(this.toggleButton.checked=!1,this.checked=!1)}}class PasswordReveal{constructor(t){return t&&t instanceof HTMLInputElement?(this.el=t,this.container=t.parentElement,this.container.hasAttribute("data-moj-password-reveal-init")?this:(this.container.setAttribute("data-moj-password-reveal-init",""),this.el.setAttribute("spellcheck","false"),void this.createButton())):this}createButton(){this.group=document.createElement("div"),this.button=document.createElement("button"),this.button.setAttribute("type","button"),this.group.className="moj-password-reveal",this.button.className="govuk-button govuk-button--secondary moj-password-reveal__button",this.button.innerHTML='Show <span class="govuk-visually-hidden">password</span>',this.button.addEventListener("click",this.onButtonClick.bind(this)),this.group.append(this.el,this.button),this.container.append(this.group)}onButtonClick(){"password"===this.el.type?(this.el.type="text",this.button.innerHTML='Hide <span class="govuk-visually-hidden">password</span>'):(this.el.type="password",this.button.innerHTML='Show <span class="govuk-visually-hidden">password</span>')}}class RichTextEditor{constructor(t={}){const{textarea:e}=t;return e&&e.parentElement&&e instanceof HTMLTextAreaElement&&"contentEditable"in document.documentElement?(t.toolbar=t.toolbar||{bold:!1,italic:!1,underline:!1,bullets:!0,numbers:!0},this.textarea=e,this.container=this.textarea.parentElement,this.options=t,this.container.hasAttribute("data-rich-text-editor-init")?this:(this.container.setAttribute("data-rich-text-editor-init",""),this.createToolbar(),this.hideDefault(),this.configureToolbar(),this.keys={left:37,right:39,up:38,down:40},this.content.addEventListener("input",this.onEditorInput.bind(this)),this.container.querySelector("label").addEventListener("click",this.onLabelClick.bind(this)),void this.toolbar.addEventListener("keydown",this.onToolbarKeydown.bind(this)))):this}onToolbarKeydown(t){let e;switch(t.keyCode){case this.keys.right:case this.keys.down:{e=this.buttons.find((t=>"0"===t.getAttribute("tabindex")));const t=e.nextElementSibling;t instanceof HTMLButtonElement&&(t.focus(),e.setAttribute("tabindex","-1"),t.setAttribute("tabindex","0"));break}case this.keys.left:case this.keys.up:{e=this.buttons.find((t=>"0"===t.getAttribute("tabindex")));const t=e.previousElementSibling;t instanceof HTMLButtonElement&&(t.focus(),e.setAttribute("tabindex","-1"),t.setAttribute("tabindex","0"));break}}}getToolbarHtml(){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}getEnhancedHtml(){return`${this.getToolbarHtml()}<div class="govuk-textarea moj-rich-text-editor__content" contenteditable="true" spellcheck="false"></div>`}hideDefault(){this.textarea.classList.add("govuk-visually-hidden"),this.textarea.setAttribute("aria-hidden","true"),this.textarea.setAttribute("tabindex","-1")}createToolbar(){this.toolbar=document.createElement("div"),this.toolbar.className="moj-rich-text-editor",this.toolbar.innerHTML=this.getEnhancedHtml(),this.container.append(this.toolbar),this.content=this.container.querySelector(".moj-rich-text-editor__content"),this.content.innerHTML=this.$textarea.value}configureToolbar(){this.buttons=Array.from(this.container.querySelectorAll(".moj-rich-text-editor__toolbar-button")),this.buttons.forEach(((t,e)=>{t.setAttribute("tabindex",e?"-1":"0"),t.addEventListener("click",this.onButtonClick.bind(this))}))}onButtonClick(t){t.currentTarget instanceof HTMLElement&&document.execCommand(t.currentTarget.getAttribute("data-command"),!1,void 0)}getContent(){return this.content.innerHTML}onEditorInput(){this.updateTextarea()}updateTextarea(){document.execCommand("defaultParagraphSeparator",!1,"p"),this.textarea.value=this.getContent()}onLabelClick(t){t.preventDefault(),this.content.focus()}}class SearchToggle{constructor(t){if(this.options=t,this.container=this.options.search.container,this.toggleButtonContainer=this.options.toggleButton.container,this.container.hasAttribute("data-moj-search-toggle-init"))return this;this.container.setAttribute("data-moj-search-toggle-init","");this.toggleButton=document.createElement("button"),this.toggleButton.setAttribute("class","moj-search-toggle__button"),this.toggleButton.setAttribute("type","button"),this.toggleButton.setAttribute("aria-haspopup","true"),this.toggleButton.setAttribute("aria-expanded","false"),this.toggleButton.innerHTML=`${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>`,this.toggleButton.addEventListener("click",this.onToggleButtonClick.bind(this)),this.toggleButtonContainer.append(this.toggleButton),document.addEventListener("click",this.onDocumentClick.bind(this)),document.addEventListener("focusin",this.onDocumentClick.bind(this))}showMenu(){this.toggleButton.setAttribute("aria-expanded","true"),this.container.classList.remove("moj-js-hidden"),this.container.querySelector("input").focus()}hideMenu(){this.container.classList.add("moj-js-hidden"),this.toggleButton.setAttribute("aria-expanded","false")}onToggleButtonClick(){"false"===this.toggleButton.getAttribute("aria-expanded")?this.showMenu():this.hideMenu()}onDocumentClick(t){this.toggleButtonContainer.contains(t.target)||this.container.contains(t.target)||this.hideMenu()}}class SortableTable{constructor(t){const e=t.table,s=null==e?void 0:e.querySelector("thead"),i=null==e?void 0:e.querySelector("tbody");return e&&e instanceof HTMLElement&&s&&i?(this.table=e,this.head=s,this.body=i,this.table.hasAttribute("data-moj-sortable-table-init")?this:(this.table.setAttribute("data-moj-sortable-table-init",""),this.headings=this.head?Array.from(this.head.querySelectorAll("th")):[],this.setupOptions(t),this.createHeadingButtons(),this.createStatusBox(),this.initialiseSortedColumn(),void this.head.addEventListener("click",this.onSortButtonClick.bind(this)))):this}setupOptions(t){t=t||{},this.statusMessage=t.statusMessage||"Sort by %heading% (%direction%)",this.ascendingText=t.ascendingText||"ascending",this.descendingText=t.descendingText||"descending"}createHeadingButtons(){for(const t of this.headings)t.hasAttribute("aria-sort")&&this.createHeadingButton(t)}createHeadingButton(t){const e=this.headings.indexOf(t),s=document.createElement("button");s.setAttribute("type","button"),s.setAttribute("data-index",`${e}`),s.textContent=t.textContent,t.textContent="",t.appendChild(s)}createStatusBox(){this.status=document.createElement("div"),this.status.setAttribute("aria-atomic","true"),this.status.setAttribute("aria-live","polite"),this.status.setAttribute("class","govuk-visually-hidden"),this.status.setAttribute("role","status"),this.table.insertAdjacentElement("afterend",this.status)}initialiseSortedColumn(){var t;const e=this.getTableRowsArray(),s=this.table.querySelector("th[aria-sort]"),i=null==s?void 0:s.querySelector("button"),o=null==s?void 0:s.getAttribute("aria-sort"),n=Number.parseInt(null!=(t=null==i?void 0:i.getAttribute("data-index"))?t:"0",10);if(!s||!i||"ascending"!==o&&"descending"!==o)return;const a=this.sort(e,n,o);this.addRows(a)}onSortButtonClick(t){var e;const s=t.target;if(!(s&&s instanceof HTMLButtonElement&&s.parentElement))return;const i=s.parentElement.getAttribute("aria-sort"),o=Number.parseInt(null!=(e=null==s?void 0:s.getAttribute("data-index"))?e:"0",10),n="none"===i||"descending"===i?"ascending":"descending",a=this.getTableRowsArray(),r=this.sort(a,o,n);this.addRows(r),this.removeButtonStates(),this.updateButtonState(s,n)}updateButtonState(t,e){if("ascending"!==e&&"descending"!==e)return;t.parentElement.setAttribute("aria-sort",e);let s=this.statusMessage;s=s.replace(/%heading%/,t.textContent),s=s.replace(/%direction%/,this[`${e}Text`]),this.status.textContent=s}removeButtonStates(){for(const t of this.headings)t.setAttribute("aria-sort","none")}addRows(t){for(const e of t)this.body.append(e)}getTableRowsArray(){return Array.from(this.body.querySelectorAll("tr"))}sort(t,e,s){return t.sort(((t,i)=>{const o=t.querySelectorAll("td, th")[e],n=i.querySelectorAll("td, th")[e];if(!(o&&n&&o instanceof HTMLElement&&n instanceof HTMLElement))return 0;const a="ascending"===s?this.getCellValue(o):this.getCellValue(n),r="ascending"===s?this.getCellValue(n):this.getCellValue(o);return"number"!=typeof a||"number"!=typeof r?a.toString().localeCompare(r.toString()):a-r}))}getCellValue(t){const e=t.getAttribute("data-sort-value")||t.innerHTML,s=Number(e);return Number.isFinite(s)?s:e}}const version="0.0.0-development";function initAll(t){const e=void 0!==(t=void 0!==t?t:{}).scope?t.scope:document;e.querySelectorAll('[data-module="moj-add-another"]').forEach((t=>{new AddAnother(t)}));e.querySelectorAll('[data-module="moj-multi-select"]').forEach((t=>{const e=t.getAttribute("data-multi-select-checkbox");t instanceof HTMLElement&&e&&new MultiSelect({container:t.querySelector(e),checkboxes:t.querySelectorAll("tbody .govuk-checkboxes__input"),id_prefix:t.getAttribute("data-multi-select-idprefix")})}));e.querySelectorAll('[data-module="moj-password-reveal"]').forEach((t=>{new PasswordReveal(t)}));e.querySelectorAll('[data-module="moj-rich-text-editor"]').forEach((t=>{const e={textarea:t},s=t.getAttribute("data-moj-rich-text-editor-toolbar");if(s){const t=s.split(",");e.toolbar={};for(const s of t)"bold"!==s&&"italic"!==s&&"underline"!==s&&"bullets"!==s&&"numbers"!==s||(e.toolbar[s]=!0)}new RichTextEditor(e)}));e.querySelectorAll('[data-module="moj-search-toggle"]').forEach((t=>{new SearchToggle({toggleButton:{container:t.querySelector(".moj-search-toggle__toggle"),text:t.getAttribute("data-moj-search-toggle-text")},search:{container:t.querySelector(".moj-search")}})}));e.querySelectorAll('[data-module="moj-sortable-table"]').forEach((t=>{new SortableTable({table:t})}));e.querySelectorAll('[data-module="moj-date-picker"]').forEach((t=>{new DatePicker(t)}));e.querySelectorAll('[data-module="moj-button-menu"]').forEach((t=>{new ButtonMenu(t)}));e.querySelectorAll('[data-module="moj-alert"]').forEach((t=>{new Alert(t)}))}export{AddAnother,Alert,ButtonMenu,DatePicker,FilterToggleButton,FormValidator,MultiFileUpload,MultiSelect,PasswordReveal,RichTextEditor,SearchToggle,SortableTable,initAll,version};//# sourceMappingURL=moj-frontend.min.js.map