@ministryofjustice/frontend 4.0.0 → 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 (245) 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 +10 -3
  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/page-header-actions/template.njk +1 -1
  107. package/moj/components/pagination/_pagination.scss +2 -2
  108. package/moj/components/pagination/_pagination.scss.map +1 -0
  109. package/moj/components/password-reveal/_password-reveal.scss +2 -0
  110. package/moj/components/password-reveal/_password-reveal.scss.map +1 -0
  111. package/moj/components/password-reveal/password-reveal.bundle.js +49 -0
  112. package/moj/components/password-reveal/password-reveal.bundle.js.map +1 -0
  113. package/moj/components/password-reveal/password-reveal.bundle.mjs +41 -0
  114. package/moj/components/password-reveal/password-reveal.bundle.mjs.map +1 -0
  115. package/moj/components/password-reveal/password-reveal.mjs +36 -31
  116. package/moj/components/password-reveal/password-reveal.mjs.map +1 -1
  117. package/moj/components/primary-navigation/_primary-navigation.scss +2 -0
  118. package/moj/components/primary-navigation/_primary-navigation.scss.map +1 -0
  119. package/moj/components/progress-bar/_progress-bar.scss +2 -0
  120. package/moj/components/progress-bar/_progress-bar.scss.map +1 -0
  121. package/moj/components/rich-text-editor/README.md +15 -9
  122. package/moj/components/rich-text-editor/_rich-text-editor.scss +2 -0
  123. package/moj/components/rich-text-editor/_rich-text-editor.scss.map +1 -0
  124. package/moj/components/rich-text-editor/rich-text-editor.bundle.js +145 -0
  125. package/moj/components/rich-text-editor/rich-text-editor.bundle.js.map +1 -0
  126. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs +137 -0
  127. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs.map +1 -0
  128. package/moj/components/rich-text-editor/rich-text-editor.mjs +124 -145
  129. package/moj/components/rich-text-editor/rich-text-editor.mjs.map +1 -1
  130. package/moj/components/search/_search.scss +2 -0
  131. package/moj/components/search/_search.scss.map +1 -0
  132. package/moj/components/search-toggle/{search-toggle.scss → _search-toggle.scss} +2 -0
  133. package/moj/components/search-toggle/_search-toggle.scss.map +1 -0
  134. package/moj/components/search-toggle/search-toggle.bundle.js +54 -0
  135. package/moj/components/search-toggle/search-toggle.bundle.js.map +1 -0
  136. package/moj/components/search-toggle/search-toggle.bundle.mjs +46 -0
  137. package/moj/components/search-toggle/search-toggle.bundle.mjs.map +1 -0
  138. package/moj/components/search-toggle/search-toggle.mjs +40 -49
  139. package/moj/components/search-toggle/search-toggle.mjs.map +1 -1
  140. package/moj/components/side-navigation/_side-navigation.scss +2 -0
  141. package/moj/components/side-navigation/_side-navigation.scss.map +1 -0
  142. package/moj/components/sortable-table/_sortable-table.scss +2 -2
  143. package/moj/components/sortable-table/_sortable-table.scss.map +1 -0
  144. package/moj/components/sortable-table/sortable-table.bundle.js +134 -0
  145. package/moj/components/sortable-table/sortable-table.bundle.js.map +1 -0
  146. package/moj/components/sortable-table/sortable-table.bundle.mjs +126 -0
  147. package/moj/components/sortable-table/sortable-table.bundle.mjs.map +1 -0
  148. package/moj/components/sortable-table/sortable-table.mjs +117 -130
  149. package/moj/components/sortable-table/sortable-table.mjs.map +1 -1
  150. package/moj/components/sub-navigation/_sub-navigation.scss +2 -0
  151. package/moj/components/sub-navigation/_sub-navigation.scss.map +1 -0
  152. package/moj/components/tag/_tag.scss +2 -0
  153. package/moj/components/tag/_tag.scss.map +1 -0
  154. package/moj/components/task-list/_task-list.scss +2 -0
  155. package/moj/components/task-list/_task-list.scss.map +1 -0
  156. package/moj/components/ticket-panel/_ticket-panel.scss +2 -0
  157. package/moj/components/ticket-panel/_ticket-panel.scss.map +1 -0
  158. package/moj/components/timeline/_timeline.scss +2 -0
  159. package/moj/components/timeline/_timeline.scss.map +1 -0
  160. package/moj/filters/all.js +44 -22
  161. package/moj/helpers/_all.scss +2 -0
  162. package/moj/helpers/_all.scss.map +1 -0
  163. package/moj/helpers/_hidden.scss +2 -0
  164. package/moj/helpers/_hidden.scss.map +1 -0
  165. package/moj/helpers/_links.scss +2 -0
  166. package/moj/helpers/_links.scss.map +1 -0
  167. package/moj/{helpers.js → helpers.bundle.js} +37 -42
  168. package/moj/helpers.bundle.js.map +1 -0
  169. package/moj/helpers.bundle.mjs +179 -0
  170. package/moj/helpers.bundle.mjs.map +1 -0
  171. package/moj/helpers.mjs +52 -28
  172. package/moj/helpers.mjs.map +1 -1
  173. package/moj/init.js +11 -2
  174. package/moj/moj-frontend.min.css +1 -1
  175. package/moj/moj-frontend.min.css.map +1 -1
  176. package/moj/moj-frontend.min.js +1 -1
  177. package/moj/moj-frontend.min.js.map +1 -1
  178. package/moj/objects/_all.scss +2 -0
  179. package/moj/objects/_all.scss.map +1 -0
  180. package/moj/objects/_button-group.scss +17 -1
  181. package/moj/objects/_button-group.scss.map +1 -0
  182. package/moj/objects/_filter-layout.scss +2 -0
  183. package/moj/objects/_filter-layout.scss.map +1 -0
  184. package/moj/objects/_scrollable-pane.scss +2 -0
  185. package/moj/objects/_scrollable-pane.scss.map +1 -0
  186. package/moj/objects/_width-container.scss +2 -0
  187. package/moj/objects/_width-container.scss.map +1 -0
  188. package/moj/settings/_all.scss +2 -0
  189. package/moj/settings/_all.scss.map +1 -0
  190. package/moj/settings/_assets.scss +2 -0
  191. package/moj/settings/_assets.scss.map +1 -0
  192. package/moj/settings/_colours.scss +2 -0
  193. package/moj/settings/_colours.scss.map +1 -0
  194. package/moj/settings/_measurements.scss +2 -0
  195. package/moj/settings/_measurements.scss.map +1 -0
  196. package/moj/settings/_typography.scss +2 -0
  197. package/moj/settings/_typography.scss.map +1 -0
  198. package/moj/template.njk +13 -0
  199. package/moj/utilities/_all.scss +2 -0
  200. package/moj/utilities/_all.scss.map +1 -0
  201. package/moj/utilities/_hidden.scss +2 -0
  202. package/moj/utilities/_hidden.scss.map +1 -0
  203. package/moj/utilities/_width-container.scss +2 -0
  204. package/moj/utilities/_width-container.scss.map +1 -0
  205. package/moj/vendor/govuk-frontend/_base.scss +2 -0
  206. package/moj/vendor/govuk-frontend/_base.scss.map +1 -0
  207. package/moj/vendor/govuk-frontend/_index.scss +2 -0
  208. package/moj/vendor/govuk-frontend/_index.scss.map +1 -0
  209. package/moj/{version.js → version.bundle.js} +1 -1
  210. package/moj/version.bundle.js.map +1 -0
  211. package/moj/version.bundle.mjs +4 -0
  212. package/moj/version.bundle.mjs.map +1 -0
  213. package/moj/version.mjs.map +1 -1
  214. package/package.json +5 -6
  215. package/moj/all.jquery.min.js +0 -1
  216. package/moj/all.jquery.min.js.map +0 -1
  217. package/moj/all.js +0 -2662
  218. package/moj/all.js.map +0 -1
  219. package/moj/components/add-another/add-another.js +0 -115
  220. package/moj/components/add-another/add-another.js.map +0 -1
  221. package/moj/components/alert/alert.js +0 -356
  222. package/moj/components/alert/alert.js.map +0 -1
  223. package/moj/components/alert/alert.spec.helper.js.map +0 -1
  224. package/moj/components/button-menu/button-menu.js.map +0 -1
  225. package/moj/components/date-picker/date-picker.js.map +0 -1
  226. package/moj/components/filter-toggle-button/filter-toggle-button.js +0 -102
  227. package/moj/components/filter-toggle-button/filter-toggle-button.js.map +0 -1
  228. package/moj/components/form-validator/form-validator.js +0 -205
  229. package/moj/components/form-validator/form-validator.js.map +0 -1
  230. package/moj/components/multi-file-upload/multi-file-upload.js +0 -241
  231. package/moj/components/multi-file-upload/multi-file-upload.js.map +0 -1
  232. package/moj/components/multi-select/multi-select.js +0 -86
  233. package/moj/components/multi-select/multi-select.js.map +0 -1
  234. package/moj/components/password-reveal/password-reveal.js +0 -44
  235. package/moj/components/password-reveal/password-reveal.js.map +0 -1
  236. package/moj/components/rich-text-editor/rich-text-editor.js +0 -166
  237. package/moj/components/rich-text-editor/rich-text-editor.js.map +0 -1
  238. package/moj/components/search-toggle/search-toggle.js +0 -63
  239. package/moj/components/search-toggle/search-toggle.js.map +0 -1
  240. package/moj/components/sortable-table/sortable-table.js +0 -147
  241. package/moj/components/sortable-table/sortable-table.js.map +0 -1
  242. package/moj/helpers.js.map +0 -1
  243. package/moj/vendor/html5shiv.js +0 -326
  244. package/moj/vendor/jquery.js +0 -9300
  245. package/moj/version.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"all.bundle.js","sources":["../../src/moj/components/add-another/add-another.mjs","../../src/moj/helpers.mjs","../../src/moj/components/alert/alert.mjs","../../src/moj/components/button-menu/button-menu.mjs","../../src/moj/components/date-picker/date-picker.mjs","../../src/moj/components/filter-toggle-button/filter-toggle-button.mjs","../../src/moj/components/form-validator/form-validator.mjs","../../src/moj/components/multi-file-upload/multi-file-upload.mjs","../../src/moj/components/multi-select/multi-select.mjs","../../src/moj/components/password-reveal/password-reveal.mjs","../../src/moj/components/rich-text-editor/rich-text-editor.mjs","../../src/moj/components/search-toggle/search-toggle.mjs","../../src/moj/components/sortable-table/sortable-table.mjs","../../src/moj/version.mjs","../../src/moj/all.mjs"],"sourcesContent":["export class AddAnother {\n constructor(container) {\n this.container = container\n\n if (this.container.hasAttribute('data-moj-add-another-init')) {\n return this\n }\n\n this.container.setAttribute('data-moj-add-another-init', '')\n\n this.container.addEventListener(\n 'click',\n this.onRemoveButtonClick.bind(this)\n )\n this.container.addEventListener('click', this.onAddButtonClick.bind(this))\n\n const buttons = this.container.querySelectorAll(\n '.moj-add-another__add-button, moj-add-another__remove-button'\n )\n\n buttons.forEach((button) => {\n if (!(button instanceof HTMLButtonElement)) {\n return\n }\n\n button.type = 'button'\n })\n }\n\n onAddButtonClick(event) {\n const button = event.target\n\n if (\n !button ||\n !(button instanceof HTMLButtonElement) ||\n !button.classList.contains('moj-add-another__add-button')\n ) {\n return\n }\n\n const items = this.getItems()\n const item = this.getNewItem()\n\n if (!item || !(item instanceof HTMLElement)) {\n return\n }\n\n this.updateAttributes(item, items.length)\n this.resetItem(item)\n\n const firstItem = items[0]\n if (!this.hasRemoveButton(firstItem)) {\n this.createRemoveButton(firstItem)\n }\n\n items[items.length - 1].after(item)\n\n const input = item.querySelector('input, textarea, select')\n if (input && input instanceof HTMLInputElement) {\n input.focus()\n }\n }\n\n hasRemoveButton(item) {\n return item.querySelectorAll('.moj-add-another__remove-button').length\n }\n\n getItems() {\n if (!this.container) {\n return []\n }\n\n const items = Array.from(\n this.container.querySelectorAll('.moj-add-another__item')\n )\n\n return items.filter((item) => item instanceof HTMLElement)\n }\n\n getNewItem() {\n const items = this.getItems()\n const item = items[0].cloneNode(true)\n\n if (!item || !(item instanceof HTMLElement)) {\n return\n }\n\n if (!this.hasRemoveButton(item)) {\n this.createRemoveButton(item)\n }\n\n return item\n }\n\n updateAttributes(item, index) {\n item.querySelectorAll('[data-name]').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) {\n return\n }\n\n const name = el.getAttribute('data-name') || ''\n const id = el.getAttribute('data-id') || ''\n const originalId = el.id\n\n el.name = name.replace(/%index%/, `${index}`)\n el.id = id.replace(/%index%/, `${index}`)\n\n const label =\n el.parentElement.querySelector('label') ||\n el.closest('label') ||\n item.querySelector(`[for=\"${originalId}\"]`)\n\n if (label && label instanceof HTMLLabelElement) {\n label.htmlFor = el.id\n }\n })\n }\n\n createRemoveButton(item) {\n const button = document.createElement('button')\n button.type = 'button'\n\n button.classList.add(\n 'govuk-button',\n 'govuk-button--secondary',\n 'moj-add-another__remove-button'\n )\n\n button.textContent = 'Remove'\n\n item.append(button)\n }\n\n resetItem(item) {\n item.querySelectorAll('[data-name], [data-id]').forEach((el) => {\n if (!(el instanceof HTMLInputElement)) {\n return\n }\n\n if (el.type === 'checkbox' || el.type === 'radio') {\n el.checked = false\n } else {\n el.value = ''\n }\n })\n }\n\n onRemoveButtonClick(event) {\n const button = event.target\n\n if (\n !button ||\n !(button instanceof HTMLButtonElement) ||\n !button.classList.contains('moj-add-another__remove-button')\n ) {\n return\n }\n\n button.closest('.moj-add-another__item').remove()\n\n const items = this.getItems()\n\n if (items.length === 1) {\n items[0].querySelector('.moj-add-another__remove-button').remove()\n }\n\n items.forEach((el, index) => {\n this.updateAttributes(el, index)\n })\n\n this.focusHeading()\n }\n\n focusHeading() {\n const heading = this.container.querySelector('.moj-add-another__heading')\n\n if (heading && heading instanceof HTMLElement) {\n heading.focus()\n }\n }\n}\n","export function removeAttributeValue(el, attr, value) {\n let re, m\n if (el.getAttribute(attr)) {\n if (el.getAttribute(attr) === value) {\n el.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = el.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n el.setAttribute(\n attr,\n el.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\nexport function addAttributeValue(el, attr, value) {\n let re\n if (!el.getAttribute(attr)) {\n el.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test(el.getAttribute(attr))) {\n el.setAttribute(attr, `${el.getAttribute(attr)} ${value}`)\n }\n }\n}\n\nexport function dragAndDropSupported() {\n const div = document.createElement('div')\n return typeof div.ondrop !== 'undefined'\n}\n\nexport function formDataSupported() {\n return typeof FormData === 'function'\n}\n\nexport function fileApiSupported() {\n const input = document.createElement('input')\n input.type = 'file'\n return typeof input.files !== 'undefined'\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return\n if (!$element || !($element instanceof HTMLElement) || !selector) {\n return\n }\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n\n/**\n * Move focus to element\n *\n * Sets tabindex to -1 to make the element programmatically focusable,\n * but removes it on blur as the element doesn't need to be focused again.\n *\n * @param {HTMLElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: HTMLElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: HTMLElement): void} [options.onBlur] - Callback on blur\n */\nexport function setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute('tabindex')\n\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1')\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener('blur', onBlur, { once: true })\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n if (options.onBlur) {\n options.onBlur.call($element)\n }\n\n if (!isFocusable) {\n $element.removeAttribute('tabindex')\n }\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener('focus', onFocus, { once: true })\n\n // Focus element\n if (options.onBeforeFocus) {\n options.onBeforeFocus.call($element)\n }\n $element.focus()\n}\n","import {\n findNearestMatchingElement,\n getPreviousSibling,\n setFocus\n} from '../../helpers.mjs'\n\nexport class Alert {\n /**\n * @param {Element | null} $module - HTML element to use for alert\n * @param {AlertConfig} [config] - Alert config\n */\n constructor($module, config = {}) {\n if (!$module || !($module instanceof HTMLElement)) {\n return this\n }\n\n const schema = Object.freeze({\n properties: {\n dismissible: { type: 'boolean' },\n dismissText: { type: 'string' },\n disableAutoFocus: { type: 'boolean' },\n focusOnDismissSelector: { type: 'string' }\n }\n })\n\n const defaults = {\n dismissible: false,\n dismissText: 'Dismiss',\n disableAutoFocus: false\n }\n\n // data attributes override JS config, which overrides defaults\n this.config = this.mergeConfigs(\n defaults,\n config,\n this.parseDataset(schema, $module.dataset)\n )\n\n this.$module = $module\n\n /**\n * Focus the alert\n *\n * If `role=\"alert\"` is set, focus the element to help some assistive\n * technologies prioritise announcing it.\n *\n * You can turn off the auto-focus functionality by setting\n * `data-disable-auto-focus=\"true\"` in the component HTML. You might wish to\n * do this based on user research findings, or to avoid a clash with another\n * element which should be focused when the page loads.\n */\n if (\n this.$module.getAttribute('role') === 'alert' &&\n !this.config.disableAutoFocus\n ) {\n setFocus(this.$module)\n }\n\n this.$dismissButton = this.$module.querySelector('.moj-alert__dismiss')\n\n if (this.config.dismissible && this.$dismissButton) {\n this.$dismissButton.innerHTML = this.config.dismissText\n this.$dismissButton.removeAttribute('hidden')\n\n this.$module.addEventListener('click', (event) => {\n if (\n event.target instanceof Node &&\n this.$dismissButton.contains(event.target)\n ) {\n this.dimiss()\n }\n })\n }\n }\n\n /**\n * Handle dismissing the alert\n */\n dimiss() {\n let $elementToRecieveFocus\n\n // If a selector has been provided, attempt to find that element\n if (this.config.focusOnDismissSelector) {\n $elementToRecieveFocus = document.querySelector(\n this.config.focusOnDismissSelector\n )\n }\n\n // Is the next sibling another alert\n if (!$elementToRecieveFocus) {\n const $nextSibling = this.$module.nextElementSibling\n if ($nextSibling && $nextSibling.matches('.moj-alert')) {\n $elementToRecieveFocus = $nextSibling\n }\n }\n\n // Else try to find any preceding sibling alert or heading\n if (!$elementToRecieveFocus) {\n $elementToRecieveFocus = getPreviousSibling(\n this.$module,\n '.moj-alert, h1, h2, h3, h4, h5, h6'\n )\n }\n\n // Else find the closest ancestor heading, or fallback to main, or last resort\n // use the body element\n if (!$elementToRecieveFocus) {\n $elementToRecieveFocus = findNearestMatchingElement(\n this.$module,\n 'h1, h2, h3, h4, h5, h6, main, body'\n )\n }\n\n // If we have an element, place focus on it\n if ($elementToRecieveFocus instanceof HTMLElement) {\n setFocus($elementToRecieveFocus)\n }\n\n // Remove the alert\n this.$module.remove()\n }\n\n /**\n * Normalise string\n *\n * 'If it looks like a duck, and it quacks like a duck…' 🦆\n *\n * If the passed value looks like a boolean or a number, convert it to a boolean\n * or number.\n *\n * Designed to be used to convert config passed via data attributes (which are\n * always strings) into something sensible.\n *\n * @internal\n * @param {DOMStringMap[string]} value - The value to normalise\n * @param {SchemaProperty} [property] - Component schema property\n * @returns {string | boolean | number | undefined} Normalised data\n */\n normaliseString(value, property) {\n const trimmedValue = value ? value.trim() : ''\n\n let output\n let outputType\n if (property && property.type) {\n outputType = property.type\n }\n\n // No schema type set? Determine automatically\n if (!outputType) {\n if (['true', 'false'].includes(trimmedValue)) {\n outputType = 'boolean'\n }\n\n // Empty / whitespace-only strings are considered finite so we need to check\n // the length of the trimmed string as well\n if (trimmedValue.length > 0 && Number.isFinite(Number(trimmedValue))) {\n outputType = 'number'\n }\n }\n\n switch (outputType) {\n case 'boolean':\n output = trimmedValue === 'true'\n break\n\n case 'number':\n output = Number(trimmedValue)\n break\n\n default:\n output = value\n }\n\n return output\n }\n\n /**\n * Parse dataset\n *\n * Loop over an object and normalise each value using {@link normaliseString},\n * optionally expanding nested `i18n.field`\n *\n * @param {Schema} schema - component schema\n * @param {DOMStringMap} dataset - HTML element dataset\n * @returns {object} Normalised dataset\n */\n parseDataset(schema, dataset) {\n const parsed = {}\n\n for (const [field, property] of Object.entries(schema.properties)) {\n if (field in dataset) {\n if (dataset[field]) {\n parsed[field] = this.normaliseString(dataset[field], property)\n }\n }\n }\n\n return parsed\n }\n\n /**\n * Config merging function\n *\n * Takes any number of objects and combines them together, with\n * greatest priority on the LAST item passed in.\n *\n * @param {...{ [key: string]: unknown }} configObjects - Config objects to merge\n * @returns {{ [key: string]: unknown }} A merged config object\n */\n mergeConfigs(...configObjects) {\n const formattedConfigObject = {}\n\n // Loop through each of the passed objects\n for (const configObject of configObjects) {\n for (const key of Object.keys(configObject)) {\n const option = formattedConfigObject[key]\n const override = configObject[key]\n\n // Push their keys one-by-one into formattedConfigObject. Any duplicate\n // keys with object values will be merged, otherwise the new value will\n // override the existing value.\n if (typeof option === 'object' && typeof override === 'object') {\n // @ts-expect-error Index signature for type 'string' is missing\n formattedConfigObject[key] = this.mergeConfigs(option, override)\n } else {\n formattedConfigObject[key] = override\n }\n }\n }\n\n return formattedConfigObject\n }\n}\n\n/**\n * @typedef {object} AlertConfig\n * @property {boolean} [dismissible=false] - Can the alert be dismissed by the user\n * @property {string} [dismissText=Dismiss] - the label text for the dismiss button\n * @property {boolean} [disableAutoFocus=false] - whether the alert will be autofocused\n * @property {string} [focusOnDismissSelector] - CSS Selector for element to be focused on dismiss\n */\n","export class ButtonMenu {\n /**\n * @param {Element | null} $module - HTML element to use for button menu\n * @param {ButtonMenuConfig} [config] - Button menu config\n */\n constructor($module, config = {}) {\n if (!$module || !($module instanceof HTMLElement)) {\n return this\n }\n\n const schema = Object.freeze({\n properties: {\n buttonText: { type: 'string' },\n buttonClasses: { type: 'string' },\n alignMenu: { type: 'string' }\n }\n })\n\n const defaults = {\n buttonText: 'Actions',\n alignMenu: 'left',\n buttonClasses: ''\n }\n // data attributes override JS config, which overrides defaults\n this.config = this.mergeConfigs(\n defaults,\n config,\n this.parseDataset(schema, $module.dataset)\n )\n\n this.$module = $module\n\n // If only one button is provided, don't initiate a menu and toggle button\n // if classes have been provided for the toggleButton, apply them to the single item\n if (this.$module.children.length === 1) {\n const button = this.$module.children[0]\n button.classList.forEach((className) => {\n if (className.startsWith('govuk-button-')) {\n button.classList.remove(className)\n }\n button.classList.remove('moj-button-menu__item')\n button.classList.add('moj-button-menu__single-button')\n })\n if (this.config.buttonClasses) {\n button.classList.add(...this.config.buttonClasses.split(' '))\n }\n }\n // Otherwise intialise a button menu\n if (this.$module.children.length > 1) {\n this.initMenu()\n }\n }\n\n initMenu() {\n this.$menu = this.createMenu()\n this.$module.insertAdjacentHTML('afterbegin', this.toggleTemplate())\n this.setupMenuItems()\n\n this.$menuToggle = this.$module.querySelector(':scope > button')\n this.items = this.$menu.querySelectorAll('a, button')\n\n this.$menuToggle.addEventListener('click', (event) => {\n this.toggleMenu(event)\n })\n\n this.$module.addEventListener('keydown', (event) => {\n this.handleKeyDown(event)\n })\n\n document.addEventListener('click', (event) => {\n if (!this.$module.contains(event.target)) {\n this.closeMenu(false)\n }\n })\n }\n\n createMenu() {\n const $menu = document.createElement('ul')\n $menu.setAttribute('role', 'list')\n $menu.hidden = true\n $menu.classList.add('moj-button-menu__wrapper')\n if (this.config.alignMenu === 'right') {\n $menu.classList.add('moj-button-menu__wrapper--right')\n }\n\n this.$module.appendChild($menu)\n while (this.$module.firstChild !== $menu) {\n $menu.appendChild(this.$module.firstChild)\n }\n\n return $menu\n }\n\n setupMenuItems() {\n Array.from(this.$menu.children).forEach((item) => {\n // wrap item in li tag\n const listItem = document.createElement('li')\n this.$menu.insertBefore(listItem, item)\n listItem.appendChild(item)\n\n item.setAttribute('tabindex', '-1')\n\n if (item.tagName === 'BUTTON') {\n item.setAttribute('type', 'button')\n }\n\n item.classList.forEach((className) => {\n if (className.startsWith('govuk-button')) {\n item.classList.remove(className)\n }\n })\n\n // add a slight delay after click before closing the menu, makes it *feel* better\n item.addEventListener('click', () => {\n setTimeout(() => {\n this.closeMenu(false)\n }, 50)\n })\n })\n }\n\n toggleTemplate() {\n 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>`\n }\n\n /**\n * @returns {boolean}\n */\n isOpen() {\n return this.$menuToggle.getAttribute('aria-expanded') === 'true'\n }\n\n toggleMenu(event) {\n event.preventDefault()\n\n // If menu is triggered with mouse don't move focus to first item\n const keyboardEvent = event.detail === 0\n const focusIndex = keyboardEvent ? 0 : -1\n\n if (this.isOpen()) {\n this.closeMenu()\n } else {\n this.openMenu(focusIndex)\n }\n }\n\n /**\n * Opens the menu and optionally sets the focus to the item with given index\n *\n * @param {number} focusIndex - The index of the item to focus\n */\n openMenu(focusIndex = 0) {\n this.$menu.hidden = false\n this.$menuToggle.setAttribute('aria-expanded', 'true')\n if (focusIndex !== -1) {\n this.focusItem(focusIndex)\n }\n }\n\n /**\n * Closes the menu and optionally returns focus back to menuToggle\n *\n * @param {boolean} moveFocus - whether to return focus to the toggle button\n */\n closeMenu(moveFocus = true) {\n this.$menu.hidden = true\n this.$menuToggle.setAttribute('aria-expanded', 'false')\n if (moveFocus) {\n this.$menuToggle.focus()\n }\n }\n\n /**\n * Focuses the menu item at the specified index\n *\n * @param {number} index - the index of the item to focus\n */\n focusItem(index) {\n if (index >= this.items.length) index = 0\n if (index < 0) index = this.items.length - 1\n\n const menuItem = this.items.item(index)\n if (menuItem) {\n menuItem.focus()\n }\n }\n\n currentFocusIndex() {\n const activeElement = document.activeElement\n const menuItems = Array.from(this.items)\n\n return menuItems.indexOf(activeElement)\n }\n\n handleKeyDown(event) {\n if (event.target === this.$menuToggle) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n this.openMenu()\n break\n case 'ArrowUp':\n event.preventDefault()\n this.openMenu(this.items.length - 1)\n break\n }\n }\n\n if (this.$menu.contains(event.target) && this.isOpen()) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n if (this.currentFocusIndex() !== -1) {\n this.focusItem(this.currentFocusIndex() + 1)\n }\n break\n case 'ArrowUp':\n event.preventDefault()\n if (this.currentFocusIndex() !== -1) {\n this.focusItem(this.currentFocusIndex() - 1)\n }\n break\n case 'Home':\n event.preventDefault()\n this.focusItem(0)\n break\n case 'End':\n event.preventDefault()\n this.focusItem(this.items.length - 1)\n break\n }\n }\n\n if (event.key === 'Escape' && this.isOpen()) {\n this.closeMenu()\n }\n if (event.key === 'Tab' && this.isOpen()) {\n this.closeMenu(false)\n }\n }\n\n /**\n * Parse dataset\n *\n * Loop over an object and normalise each value using {@link normaliseString},\n * optionally expanding nested `i18n.field`\n *\n * @param {Schema} schema - component schema\n * @param {DOMStringMap} dataset - HTML element dataset\n * @returns {object} Normalised dataset\n */\n parseDataset(schema, dataset) {\n const parsed = {}\n\n for (const [field, ,] of Object.entries(schema.properties)) {\n if (field in dataset) {\n if (dataset[field]) {\n parsed[field] = dataset[field]\n }\n }\n }\n\n return parsed\n }\n\n /**\n * Config merging function\n *\n * Takes any number of objects and combines them together, with\n * greatest priority on the LAST item passed in.\n *\n * @param {...{ [key: string]: unknown }} configObjects - Config objects to merge\n * @returns {{ [key: string]: unknown }} A merged config object\n */\n mergeConfigs(...configObjects) {\n const formattedConfigObject = {}\n\n // Loop through each of the passed objects\n for (const configObject of configObjects) {\n for (const key of Object.keys(configObject)) {\n const option = formattedConfigObject[key]\n const override = configObject[key]\n\n // Push their keys one-by-one into formattedConfigObject. Any duplicate\n // keys with object values will be merged, otherwise the new value will\n // override the existing value.\n if (typeof option === 'object' && typeof override === 'object') {\n // @ts-expect-error Index signature for type 'string' is missing\n formattedConfigObject[key] = this.mergeConfigs(option, override)\n } else {\n formattedConfigObject[key] = override\n }\n }\n }\n\n return formattedConfigObject\n }\n}\n\n/**\n * @typedef {object} ButtonMenuConfig\n * @property {string} [buttonText='Actions'] - Label for the toggle button\n * @property {\"left\" | \"right\"} [alignMenu='left'] - the alignment of the menu\n * @property {string} [buttonClasses='govuk-button--secondary'] - css classes applied to the toggle button\n */\n","export class DatePicker {\n /**\n * @param {Element | null} $module - HTML element to use for date picker\n * @param {DatePickerConfig} [config] - Date picker config\n */\n constructor($module, config = {}) {\n if (!$module || !($module instanceof HTMLElement)) {\n return this\n }\n\n const $input = $module.querySelector('.moj-js-datepicker-input')\n\n // Check that required elements are present\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$module = $module\n this.$input = $input\n\n const schema = Object.freeze({\n properties: {\n excludedDates: { type: 'string' },\n excludedDays: { type: 'string' },\n leadingZeros: { type: 'string' },\n maxDate: { type: 'string' },\n minDate: { type: 'string' },\n weekStartDay: { type: 'string' }\n }\n })\n\n const defaults = {\n leadingZeros: false,\n weekStartDay: 'monday'\n }\n\n // data attributes override JS config, which overrides defaults\n this.config = this.mergeConfigs(\n defaults,\n config,\n this.parseDataset(schema, $module.dataset)\n )\n\n this.dayLabels = [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday'\n ]\n\n this.monthLabels = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n\n this.currentDate = new Date()\n this.currentDate.setHours(0, 0, 0, 0)\n this.calendarDays = []\n this.excludedDates = []\n this.excludedDays = []\n\n this.buttonClass = 'moj-datepicker__button'\n this.selectedDayButtonClass = 'moj-datepicker__button--selected'\n this.currentDayButtonClass = 'moj-datepicker__button--current'\n this.todayButtonClass = 'moj-datepicker__button--today'\n\n if (this.$module.dataset.initialized) {\n return this\n }\n\n this.setOptions()\n this.initControls()\n this.$module.setAttribute('data-initialized', 'true')\n }\n\n initControls() {\n this.id = `datepicker-${this.$input.id}`\n\n this.$dialog = this.createDialog()\n this.createCalendarHeaders()\n\n const $componentWrapper = document.createElement('div')\n const $inputWrapper = document.createElement('div')\n $componentWrapper.classList.add('moj-datepicker__wrapper')\n $inputWrapper.classList.add('govuk-input__wrapper')\n\n this.$input.parentElement.insertBefore($componentWrapper, this.$input)\n $componentWrapper.appendChild($inputWrapper)\n $inputWrapper.appendChild(this.$input)\n\n $inputWrapper.insertAdjacentHTML('beforeend', this.toggleTemplate())\n $componentWrapper.insertAdjacentElement('beforeend', this.$dialog)\n\n this.$calendarButton = this.$module.querySelector(\n '.moj-js-datepicker-toggle'\n )\n this.$dialogTitle = this.$dialog.querySelector(\n '.moj-js-datepicker-month-year'\n )\n\n this.createCalendar()\n\n this.$prevMonthButton = this.$dialog.querySelector(\n '.moj-js-datepicker-prev-month'\n )\n this.$prevYearButton = this.$dialog.querySelector(\n '.moj-js-datepicker-prev-year'\n )\n this.$nextMonthButton = this.$dialog.querySelector(\n '.moj-js-datepicker-next-month'\n )\n this.$nextYearButton = this.$dialog.querySelector(\n '.moj-js-datepicker-next-year'\n )\n this.$cancelButton = this.$dialog.querySelector('.moj-js-datepicker-cancel')\n this.$okButton = this.$dialog.querySelector('.moj-js-datepicker-ok')\n\n // add event listeners\n this.$prevMonthButton.addEventListener('click', (event) =>\n this.focusPreviousMonth(event, false)\n )\n this.$prevYearButton.addEventListener('click', (event) =>\n this.focusPreviousYear(event, false)\n )\n this.$nextMonthButton.addEventListener('click', (event) =>\n this.focusNextMonth(event, false)\n )\n this.$nextYearButton.addEventListener('click', (event) =>\n this.focusNextYear(event, false)\n )\n this.$cancelButton.addEventListener('click', (event) => {\n event.preventDefault()\n this.closeDialog()\n })\n this.$okButton.addEventListener('click', () => {\n this.selectDate(this.currentDate)\n })\n\n const dialogButtons = this.$dialog.querySelectorAll(\n 'button:not([disabled=\"true\"])'\n )\n\n this.$firstButtonInDialog = dialogButtons[0]\n this.$lastButtonInDialog = dialogButtons[dialogButtons.length - 1]\n this.$firstButtonInDialog.addEventListener('keydown', (event) =>\n this.firstButtonKeydown(event)\n )\n this.$lastButtonInDialog.addEventListener('keydown', (event) =>\n this.lastButtonKeydown(event)\n )\n\n this.$calendarButton.addEventListener('click', (event) =>\n this.toggleDialog(event)\n )\n\n this.$dialog.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') {\n this.closeDialog()\n event.preventDefault()\n event.stopPropagation()\n }\n })\n\n document.body.addEventListener('mouseup', (event) =>\n this.backgroundClick(event)\n )\n\n // populates calendar with initial dates, avoids Wave errors about null buttons\n this.updateCalendar()\n }\n\n createDialog() {\n const titleId = `datepicker-title-${this.$input.id}`\n const $dialog = document.createElement('div')\n\n $dialog.id = this.id\n $dialog.setAttribute('class', 'moj-datepicker__dialog')\n $dialog.setAttribute('role', 'dialog')\n $dialog.setAttribute('aria-modal', 'true')\n $dialog.setAttribute('aria-labelledby', titleId)\n $dialog.innerHTML = this.dialogTemplate(titleId)\n $dialog.hidden = true\n\n return $dialog\n }\n\n createCalendar() {\n const $tbody = this.$dialog.querySelector('tbody')\n let dayCount = 0\n for (let i = 0; i < 6; i++) {\n // create row\n const $row = $tbody.insertRow(i)\n\n for (let j = 0; j < 7; j++) {\n // create cell (day)\n const $cell = document.createElement('td')\n const $dateButton = document.createElement('button')\n\n $cell.appendChild($dateButton)\n $row.appendChild($cell)\n\n const calendarDay = new DSCalendarDay($dateButton, dayCount, i, j, this)\n this.calendarDays.push(calendarDay)\n dayCount++\n }\n }\n }\n\n toggleTemplate() {\n 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>`\n }\n\n /**\n * HTML template for calendar dialog\n *\n * @param {string} [titleId] - Id attribute for dialog title\n * @returns {string}\n */\n dialogTemplate(titleId) {\n 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=\"${titleId}\" 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=\"${titleId}\">\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>`\n }\n\n createCalendarHeaders() {\n this.dayLabels.forEach((day) => {\n const html = `<th scope=\"col\"><span aria-hidden=\"true\">${day.substring(0, 3)}</span><span class=\"govuk-visually-hidden\">${day}</span></th>`\n const $headerRow = this.$dialog.querySelector('thead > tr')\n $headerRow.insertAdjacentHTML('beforeend', html)\n })\n }\n\n /**\n * Pads given number with leading zeros\n *\n * @param {number} value - The value to be padded\n * @param {number} length - The length in characters of the output\n * @returns {string}\n */\n leadingZeros(value, length = 2) {\n let ret = value.toString()\n\n while (ret.length < length) {\n ret = `0${ret}`\n }\n\n return ret\n }\n\n setOptions() {\n this.setMinAndMaxDatesOnCalendar()\n this.setExcludedDates()\n this.setExcludedDays()\n this.setLeadingZeros()\n this.setWeekStartDay()\n }\n\n setMinAndMaxDatesOnCalendar() {\n if (this.config.minDate) {\n this.minDate = this.formattedDateFromString(this.config.minDate, null)\n if (this.minDate && this.currentDate < this.minDate) {\n this.currentDate = this.minDate\n }\n }\n\n if (this.config.maxDate) {\n this.maxDate = this.formattedDateFromString(this.config.maxDate, null)\n if (this.maxDate && this.currentDate > this.maxDate) {\n this.currentDate = this.maxDate\n }\n }\n }\n\n setExcludedDates() {\n if (this.config.excludedDates) {\n this.excludedDates = this.config.excludedDates\n .replace(/\\s+/, ' ')\n .split(' ')\n .map((item) => {\n return item.includes('-')\n ? this.parseDateRangeString(item)\n : [this.formattedDateFromString(item)]\n })\n .reduce((dates, items) => dates.concat(items))\n .filter((date) => date)\n }\n }\n\n /*\n * Parses a daterange string into an array of dates\n * @param {String} datestring - A daterange string in the format \"dd/mm/yyyy-dd/mm/yyyy\"\n * @returns {Date[]}\n */\n parseDateRangeString(datestring) {\n const dates = []\n const [startDate, endDate] = datestring\n .split('-')\n .map((d) => this.formattedDateFromString(d, null))\n\n if (startDate && endDate) {\n const date = new Date(startDate.getTime())\n /* eslint-disable no-unmodified-loop-condition */\n while (date <= endDate) {\n dates.push(new Date(date))\n date.setDate(date.getDate() + 1)\n }\n /* eslint-enable no-unmodified-loop-condition */\n }\n return dates\n }\n\n setExcludedDays() {\n if (this.config.excludedDays) {\n // lowercase and arrange dayLabels to put indexOf sunday == 0 for comparison\n // with getDay() function\n const weekDays = this.dayLabels.map((item) => item.toLowerCase())\n if (this.config.weekStartDay === 'monday') {\n weekDays.unshift(weekDays.pop())\n }\n\n this.excludedDays = this.config.excludedDays\n .replace(/\\s+/, ' ')\n .toLowerCase()\n .split(' ')\n .map((item) => weekDays.indexOf(item))\n .filter((item) => item !== -1)\n }\n }\n\n setLeadingZeros() {\n if (typeof this.config.leadingZeros !== 'boolean') {\n if (this.config.leadingZeros.toLowerCase() === 'true') {\n this.config.leadingZeros = true\n return\n }\n if (this.config.leadingZeros.toLowerCase() === 'false') {\n this.config.leadingZeros = false\n }\n }\n }\n\n setWeekStartDay() {\n const weekStartDayParam = this.config.weekStartDay\n if (weekStartDayParam && weekStartDayParam.toLowerCase() === 'sunday') {\n this.config.weekStartDay = 'sunday'\n // Rotate dayLabels array to put Sunday as the first item\n this.dayLabels.unshift(this.dayLabels.pop())\n } else {\n this.config.weekStartDay = 'monday'\n }\n }\n\n /**\n * Determine if a date is selecteable\n *\n * @param {Date} date - the date to check\n * @returns {boolean}\n */\n isExcludedDate(date) {\n // This comparison does not work correctly - it will exclude the mindate itself\n // see: https://github.com/ministryofjustice/moj-frontend/issues/923\n if (this.minDate && this.minDate > date) {\n return true\n }\n\n // This comparison works as expected - the maxdate will not be excluded\n if (this.maxDate && this.maxDate < date) {\n return true\n }\n\n for (const excludedDate of this.excludedDates) {\n if (date.toDateString() === excludedDate.toDateString()) {\n return true\n }\n }\n\n if (this.excludedDays.includes(date.getDay())) {\n return true\n }\n\n return false\n }\n\n /**\n * Get a Date object from a string\n *\n * @param {string} dateString - string in the format d/m/yyyy dd/mm/yyyy\n * @param {Date} fallback - date object to return if formatting fails\n * @returns {Date}\n */\n formattedDateFromString(dateString, fallback = new Date()) {\n let formattedDate = null\n // Accepts d/m/yyyy and dd/mm/yyyy\n const dateFormatPattern = /(\\d{1,2})([-/,. ])(\\d{1,2})\\2(\\d{4})/\n\n if (!dateFormatPattern.test(dateString)) return fallback\n\n const match = dateFormatPattern.exec(dateString)\n const day = match[1]\n const month = match[3]\n const year = match[4]\n\n formattedDate = new Date(`${year}-${month}-${day}`)\n if (\n formattedDate instanceof Date &&\n Number.isFinite(formattedDate.getTime())\n ) {\n return formattedDate\n }\n return fallback\n }\n\n /**\n * Get a formatted date string from a Date object\n *\n * @param {Date} date - date to format to a string\n * @returns {string}\n */\n formattedDateFromDate(date) {\n if (this.config.leadingZeros) {\n return `${this.leadingZeros(date.getDate())}/${this.leadingZeros(date.getMonth() + 1)}/${date.getFullYear()}`\n }\n\n return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`\n }\n\n /**\n * Get a human readable date in the format Monday 2 March 2024\n *\n * @param {Date} date - date to format\n * @returns {string}\n */\n formattedDateHuman(date) {\n return `${this.dayLabels[(date.getDay() + 6) % 7]} ${date.getDate()} ${this.monthLabels[date.getMonth()]} ${date.getFullYear()}`\n }\n\n backgroundClick(event) {\n if (\n this.isOpen() &&\n event.target instanceof Node &&\n !this.$dialog.contains(event.target) &&\n !this.$input.contains(event.target) &&\n !this.$calendarButton.contains(event.target)\n ) {\n event.preventDefault()\n this.closeDialog()\n }\n }\n\n firstButtonKeydown(event) {\n if (event.key === 'Tab' && event.shiftKey) {\n this.$lastButtonInDialog.focus()\n event.preventDefault()\n }\n }\n\n lastButtonKeydown(event) {\n if (event.key === 'Tab' && !event.shiftKey) {\n this.$firstButtonInDialog.focus()\n event.preventDefault()\n }\n }\n\n // render calendar\n updateCalendar() {\n this.$dialogTitle.innerHTML = `${this.monthLabels[this.currentDate.getMonth()]} ${this.currentDate.getFullYear()}`\n\n const day = this.currentDate\n const firstOfMonth = new Date(day.getFullYear(), day.getMonth(), 1)\n let dayOfWeek\n\n if (this.config.weekStartDay === 'monday') {\n dayOfWeek = firstOfMonth.getDay() === 0 ? 6 : firstOfMonth.getDay() - 1 // Change logic to make Monday first day of week, i.e. 0\n } else {\n dayOfWeek = firstOfMonth.getDay()\n }\n\n firstOfMonth.setDate(firstOfMonth.getDate() - dayOfWeek)\n\n const thisDay = new Date(firstOfMonth)\n\n // loop through our days\n for (const calendarDay of this.calendarDays) {\n const hidden = thisDay.getMonth() !== day.getMonth()\n const disabled = this.isExcludedDate(thisDay)\n\n calendarDay.update(thisDay, hidden, disabled)\n\n thisDay.setDate(thisDay.getDate() + 1)\n }\n }\n\n setCurrentDate(focus = true) {\n const { currentDate } = this\n this.calendarDays.forEach((calendarDay) => {\n calendarDay.button.classList.add('moj-datepicker__button')\n calendarDay.button.classList.add('moj-datepicker__calendar-day')\n calendarDay.button.setAttribute('tabindex', '-1')\n calendarDay.button.classList.remove(this.selectedDayButtonClass)\n const calendarDayDate = calendarDay.date\n calendarDayDate.setHours(0, 0, 0, 0)\n\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n\n if (\n calendarDayDate.getTime() ===\n currentDate.getTime() /* && !calendarDay.button.disabled */\n ) {\n if (focus) {\n calendarDay.button.setAttribute('tabindex', '0')\n calendarDay.button.focus()\n calendarDay.button.classList.add(this.selectedDayButtonClass)\n }\n }\n\n if (\n this.inputDate &&\n calendarDayDate.getTime() === this.inputDate.getTime()\n ) {\n calendarDay.button.classList.add(this.currentDayButtonClass)\n calendarDay.button.setAttribute('aria-current', 'date')\n } else {\n calendarDay.button.classList.remove(this.currentDayButtonClass)\n calendarDay.button.removeAttribute('aria-current')\n }\n\n if (calendarDayDate.getTime() === today.getTime()) {\n calendarDay.button.classList.add(this.todayButtonClass)\n } else {\n calendarDay.button.classList.remove(this.todayButtonClass)\n }\n })\n\n // if no date is tab-able, make the first non-disabled date tab-able\n if (!focus) {\n const enabledDays = this.calendarDays.filter((calendarDay) => {\n return (\n window.getComputedStyle(calendarDay.button).display === 'block' &&\n !calendarDay.button.disabled\n )\n })\n\n enabledDays[0].button.setAttribute('tabindex', '0')\n\n this.currentDate = enabledDays[0].date\n }\n }\n\n selectDate(date) {\n if (this.isExcludedDate(date)) {\n return\n }\n\n this.$calendarButton.querySelector('span').innerText =\n `Choose date. Selected date is ${this.formattedDateHuman(date)}`\n this.$input.value = this.formattedDateFromDate(date)\n\n const changeEvent = new Event('change', { bubbles: true, cancelable: true })\n this.$input.dispatchEvent(changeEvent)\n\n this.closeDialog()\n }\n\n isOpen() {\n return this.$dialog.classList.contains('moj-datepicker__dialog--open')\n }\n\n toggleDialog(event) {\n event.preventDefault()\n if (this.isOpen()) {\n this.closeDialog()\n } else {\n this.setMinAndMaxDatesOnCalendar()\n this.openDialog()\n }\n }\n\n openDialog() {\n this.$dialog.hidden = false\n this.$dialog.classList.add('moj-datepicker__dialog--open')\n this.$calendarButton.setAttribute('aria-expanded', 'true')\n\n // position the dialog\n // if input is wider than dialog pin it to the right\n if (this.$input.offsetWidth > this.$dialog.offsetWidth) {\n this.$dialog.style.right = `0px`\n }\n this.$dialog.style.top = `${this.$input.offsetHeight + 3}px`\n\n // get the date from the input element\n this.inputDate = this.formattedDateFromString(this.$input.value)\n this.currentDate = this.inputDate\n this.currentDate.setHours(0, 0, 0, 0)\n\n this.updateCalendar()\n this.setCurrentDate()\n }\n\n closeDialog() {\n this.$dialog.hidden = true\n this.$dialog.classList.remove('moj-datepicker__dialog--open')\n this.$calendarButton.setAttribute('aria-expanded', 'false')\n this.$calendarButton.focus()\n }\n\n goToDate(date, focus) {\n const current = this.currentDate\n this.currentDate = date\n\n if (\n current.getMonth() !== this.currentDate.getMonth() ||\n current.getFullYear() !== this.currentDate.getFullYear()\n ) {\n this.updateCalendar()\n }\n\n this.setCurrentDate(focus)\n }\n\n // day navigation\n focusNextDay() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() + 1)\n this.goToDate(date)\n }\n\n focusPreviousDay() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() - 1)\n this.goToDate(date)\n }\n\n // week navigation\n focusNextWeek() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() + 7)\n this.goToDate(date)\n }\n\n focusPreviousWeek() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() - 7)\n this.goToDate(date)\n }\n\n focusFirstDayOfWeek() {\n const date = new Date(this.currentDate)\n const firstDayOfWeekIndex = this.config.weekStartDay === 'sunday' ? 0 : 1\n const dayOfWeek = date.getDay()\n const diff =\n dayOfWeek >= firstDayOfWeekIndex\n ? dayOfWeek - firstDayOfWeekIndex\n : 6 - dayOfWeek\n\n date.setDate(date.getDate() - diff)\n date.setHours(0, 0, 0, 0)\n\n this.goToDate(date)\n }\n\n focusLastDayOfWeek() {\n const date = new Date(this.currentDate)\n const lastDayOfWeekIndex = this.config.weekStartDay === 'sunday' ? 6 : 0\n const dayOfWeek = date.getDay()\n const diff =\n dayOfWeek <= lastDayOfWeekIndex\n ? lastDayOfWeekIndex - dayOfWeek\n : 7 - dayOfWeek\n\n date.setDate(date.getDate() + diff)\n date.setHours(0, 0, 0, 0)\n\n this.goToDate(date)\n }\n\n // month navigation\n focusNextMonth(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setMonth(date.getMonth() + 1, 1)\n this.goToDate(date, focus)\n }\n\n focusPreviousMonth(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setMonth(date.getMonth() - 1, 1)\n this.goToDate(date, focus)\n }\n\n // year navigation\n focusNextYear(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setFullYear(date.getFullYear() + 1, date.getMonth(), 1)\n this.goToDate(date, focus)\n }\n\n focusPreviousYear(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setFullYear(date.getFullYear() - 1, date.getMonth(), 1)\n this.goToDate(date, focus)\n }\n\n /**\n * Parse dataset\n *\n * @param {Schema} schema - Component class\n * @param {DOMStringMap} dataset - HTML element dataset\n * @returns {object} Normalised dataset\n */\n parseDataset(schema, dataset) {\n const parsed = {}\n\n for (const [field, ,] of Object.entries(schema.properties)) {\n if (field in dataset) {\n parsed[field] = dataset[field]\n }\n }\n\n return parsed\n }\n\n /**\n * Config merging function\n *\n * Takes any number of objects and combines them together, with\n * greatest priority on the LAST item passed in.\n *\n * @param {...{ [key: string]: unknown }} configObjects - Config objects to merge\n * @returns {{ [key: string]: unknown }} A merged config object\n */\n mergeConfigs(...configObjects) {\n const formattedConfigObject = {}\n\n // Loop through each of the passed objects\n for (const configObject of configObjects) {\n for (const key of Object.keys(configObject)) {\n const option = formattedConfigObject[key]\n const override = configObject[key]\n\n // Push their keys one-by-one into formattedConfigObject. Any duplicate\n // keys with object values will be merged, otherwise the new value will\n // override the existing value.\n if (typeof option === 'object' && typeof override === 'object') {\n // @ts-expect-error Index signature for type 'string' is missing\n formattedConfigObject[key] = this.mergeConfigs(option, override)\n } else {\n formattedConfigObject[key] = override\n }\n }\n }\n\n return formattedConfigObject\n }\n}\n\nclass DSCalendarDay {\n /**\n *\n * @param {HTMLElement} button\n * @param {number} index\n * @param {number} row\n * @param {number} column\n * @param {DatePicker} picker\n */\n constructor(button, index, row, column, picker) {\n this.index = index\n this.row = row\n this.column = column\n this.button = button\n this.picker = picker\n\n this.date = new Date()\n this.button.addEventListener('keydown', this.keyPress.bind(this))\n this.button.addEventListener('click', this.click.bind(this))\n }\n\n /**\n * @param {Date} day - the Date for the calendar day\n * @param {boolean} hidden - visibility of the day\n * @param {boolean} disabled - is the day selectable or excluded\n */\n update(day, hidden, disabled) {\n const label = day.getDate()\n let accessibleLabel = this.picker.formattedDateHuman(day)\n\n if (disabled) {\n this.button.setAttribute('aria-disabled', 'true')\n accessibleLabel = `Excluded date, ${accessibleLabel}`\n } else {\n this.button.removeAttribute('aria-disabled')\n }\n\n if (hidden) {\n this.button.style.display = 'none'\n } else {\n this.button.style.display = 'block'\n }\n this.button.setAttribute(\n 'data-testid',\n this.picker.formattedDateFromDate(day)\n )\n\n this.button.innerHTML = `<span class=\"govuk-visually-hidden\">${accessibleLabel}</span><span aria-hidden=\"true\">${label}</span>`\n this.date = new Date(day)\n }\n\n click(event) {\n this.picker.goToDate(this.date)\n this.picker.selectDate(this.date)\n\n event.stopPropagation()\n event.preventDefault()\n }\n\n keyPress(event) {\n let calendarNavKey = true\n\n switch (event.key) {\n case 'ArrowLeft':\n this.picker.focusPreviousDay()\n break\n case 'ArrowRight':\n this.picker.focusNextDay()\n break\n case 'ArrowUp':\n this.picker.focusPreviousWeek()\n break\n case 'ArrowDown':\n this.picker.focusNextWeek()\n break\n case 'Home':\n this.picker.focusFirstDayOfWeek()\n break\n case 'End':\n this.picker.focusLastDayOfWeek()\n break\n case 'PageUp': {\n if (event.shiftKey) {\n this.picker.focusPreviousYear(event)\n } else {\n this.picker.focusPreviousMonth(event)\n }\n break\n }\n case 'PageDown': {\n if (event.shiftKey) {\n this.picker.focusNextYear(event)\n } else {\n this.picker.focusNextMonth(event)\n }\n break\n }\n default:\n calendarNavKey = false\n break\n }\n\n if (calendarNavKey) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n}\n\n/**\n * Date picker config\n *\n * @typedef {object} DatePickerConfig\n * @property {string} [excludedDates] - Dates that cannot be selected\n * @property {string} [excludedDays] - Days that cannot be selected\n * @property {boolean} [leadingZeroes] - Whether to add leading zeroes when populating the field\n * @property {string} [minDate] - The earliest available date\n * @property {string} [maxDate] - The latest available date\n * @property {string} [weekStartDay] - First day of the week in calendar view\n */\n\n/**\n * @import { Schema } from '../../all.mjs'\n */\n","export class FilterToggleButton {\n constructor(options) {\n this.options = options\n this.container = this.options.toggleButton.container\n this.filterContainer = this.options.filter.container\n\n this.createToggleButton()\n this.setupResponsiveChecks()\n this.filterContainer.setAttribute('tabindex', '-1')\n if (this.options.startHidden) {\n this.hideMenu()\n }\n }\n\n setupResponsiveChecks() {\n this.mq = window.matchMedia(this.options.bigModeMediaQuery)\n this.mq.addListener(this.checkMode.bind(this))\n this.checkMode(this.mq)\n }\n\n createToggleButton() {\n this.menuButton = document.createElement('button')\n this.menuButton.setAttribute('type', 'button')\n this.menuButton.setAttribute('aria-haspopup', 'true')\n this.menuButton.setAttribute('aria-expanded', 'false')\n\n this.menuButton.className = `govuk-button ${this.options.toggleButton.classes}`\n this.menuButton.textContent = this.options.toggleButton.showText\n\n this.menuButton.addEventListener('click', this.onMenuButtonClick.bind(this))\n this.container.append(this.menuButton)\n }\n\n checkMode(mq) {\n if (mq.matches) {\n this.enableBigMode()\n } else {\n this.enableSmallMode()\n }\n }\n\n enableBigMode() {\n this.showMenu()\n this.removeCloseButton()\n }\n\n enableSmallMode() {\n this.hideMenu()\n this.addCloseButton()\n }\n\n addCloseButton() {\n if (!this.options.closeButton) {\n return\n }\n\n this.closeButton = document.createElement('button')\n this.closeButton.setAttribute('type', 'button')\n\n this.closeButton.className = 'moj-filter__close'\n this.closeButton.textContent = this.options.closeButton.text\n\n this.closeButton.addEventListener('click', this.onCloseClick.bind(this))\n this.options.closeButton.container.append(this.closeButton)\n }\n\n onCloseClick() {\n this.hideMenu()\n this.menuButton.focus()\n }\n\n removeCloseButton() {\n if (this.closeButton) {\n this.closeButton.remove()\n this.closeButton = null\n }\n }\n\n hideMenu() {\n this.menuButton.setAttribute('aria-expanded', 'false')\n this.filterContainer.classList.add('moj-js-hidden')\n this.menuButton.textContent = this.options.toggleButton.showText\n }\n\n showMenu() {\n this.menuButton.setAttribute('aria-expanded', 'true')\n this.filterContainer.classList.remove('moj-js-hidden')\n this.menuButton.textContent = this.options.toggleButton.hideText\n }\n\n onMenuButtonClick() {\n this.toggle()\n }\n\n toggle() {\n if (this.menuButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n this.filterContainer.focus()\n } else {\n this.hideMenu()\n }\n }\n}\n","import { addAttributeValue, removeAttributeValue } from '../../helpers.mjs'\n\nexport class FormValidator {\n /**\n * @param {Element | null} form - HTML element to use for form validator\n * @param {FormValidatorConfig} [config] - Button menu config\n */\n constructor(form, config = {}) {\n if (!form || !(form instanceof HTMLFormElement)) {\n return this\n }\n\n this.form = form\n this.errors = []\n this.validators = []\n this.form.addEventListener('submit', this.onSubmit.bind(this))\n this.summary =\n config.summary || document.querySelector('.govuk-error-summary')\n this.originalTitle = document.title\n }\n\n escapeHtml(string) {\n return String(string).replace(/[&<>\"'`=/]/g, function fromEntityMap(s) {\n return FormValidator.entityMap[s]\n })\n }\n\n resetTitle() {\n document.title = this.originalTitle\n }\n\n updateTitle() {\n document.title = `${this.errors.length} errors - ${document.title}`\n }\n\n showSummary() {\n this.summary.innerHTML = this.getSummaryHtml()\n this.summary.classList.remove('moj-hidden')\n this.summary.setAttribute('aria-labelledby', 'errorSummary-heading')\n this.summary.focus()\n }\n\n getSummaryHtml() {\n let html =\n '<h2 id=\"error-summary-title\" class=\"govuk-error-summary__title\">There is a problem</h2>'\n html += '<div class=\"govuk-error-summary__body\">'\n html += '<ul class=\"govuk-list govuk-error-summary__list\">'\n for (const error of this.errors) {\n html += '<li>'\n html += `<a href=\"#${this.escapeHtml(error.fieldName)}\">`\n html += this.escapeHtml(error.message)\n html += '</a>'\n html += '</li>'\n }\n html += '</ul>'\n html += '</div>'\n return html\n }\n\n hideSummary() {\n this.summary.classList.add('moj-hidden')\n this.summary.removeAttribute('aria-labelledby')\n }\n\n onSubmit(event) {\n this.removeInlineErrors()\n this.hideSummary()\n this.resetTitle()\n if (!this.validate()) {\n event.preventDefault()\n this.updateTitle()\n this.showSummary()\n this.showInlineErrors()\n }\n }\n\n showInlineErrors() {\n for (const error of this.errors) {\n this.showInlineError(error)\n }\n }\n\n showInlineError(error) {\n const errorSpan = document.createElement('span')\n errorSpan.id = `${error.fieldName}-error`\n errorSpan.classList.add('govuk-error-message')\n errorSpan.innerHTML = this.escapeHtml(error.message)\n\n const control = document.querySelector(`#${error.fieldName}`)\n const fieldset = control.closest('.govuk-fieldset')\n const fieldContainer = (fieldset || control).closest('.govuk-form-group')\n\n const label = fieldContainer.querySelector('label')\n const legend = fieldContainer.querySelector('legend')\n\n fieldContainer.classList.add('govuk-form-group--error')\n\n if (fieldset && legend) {\n legend.after(errorSpan)\n fieldContainer.setAttribute('aria-invalid', 'true')\n addAttributeValue(fieldset, 'aria-describedby', errorSpan.id)\n } else if (label && control) {\n label.after(errorSpan)\n control.setAttribute('aria-invalid', 'true')\n addAttributeValue(control, 'aria-describedby', errorSpan.id)\n }\n }\n\n removeInlineErrors() {\n for (const error of this.errors) {\n this.removeInlineError(error)\n }\n }\n\n removeInlineError(error) {\n const errorSpan = document.querySelector(`#${error.fieldName}-error`)\n\n const control = document.querySelector(`#${error.fieldName}`)\n const fieldset = control.closest('.govuk-fieldset')\n const fieldContainer = (fieldset || control).closest('.govuk-form-group')\n\n const label = fieldContainer.querySelector('label')\n const legend = fieldContainer.querySelector('legend')\n\n errorSpan.remove()\n fieldContainer.classList.remove('govuk-form-group--error')\n\n if (fieldset && legend) {\n fieldContainer.removeAttribute('aria-invalid')\n removeAttributeValue(fieldset, 'aria-describedby', errorSpan.id)\n } else if (label && control) {\n control.removeAttribute('aria-invalid')\n removeAttributeValue(control, 'aria-describedby', errorSpan.id)\n }\n }\n\n addValidator(fieldName, rules) {\n this.validators.push({\n fieldName,\n rules,\n field: this.form.elements[fieldName]\n })\n }\n\n validate() {\n this.errors = []\n let validator = null\n let validatorReturnValue = true\n let i\n let j\n for (i = 0; i < this.validators.length; i++) {\n validator = this.validators[i]\n for (j = 0; j < validator.rules.length; j++) {\n validatorReturnValue = validator.rules[j].method(\n validator.field,\n validator.rules[j].params\n )\n\n if (\n typeof validatorReturnValue === 'boolean' &&\n !validatorReturnValue\n ) {\n this.errors.push({\n fieldName: validator.fieldName,\n message: validator.rules[j].message\n })\n break\n } else if (typeof validatorReturnValue === 'string') {\n this.errors.push({\n fieldName: validatorReturnValue,\n message: validator.rules[j].message\n })\n break\n }\n }\n }\n return this.errors.length === 0\n }\n\n static entityMap = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;',\n '`': '&#x60;',\n '=': '&#x3D;'\n }\n}\n\n/**\n * @typedef {object} FormValidatorConfig\n * @property {HTMLElement} [summary] - HTML element to use for error summary\n */\n","/* eslint-disable @typescript-eslint/no-empty-function */\n\nimport {\n dragAndDropSupported,\n fileApiSupported,\n formDataSupported\n} from '../../helpers.mjs'\n\nexport class MultiFileUpload {\n /**\n * @param {MultiFileUploadConfig} [params] - Multi file upload config\n */\n constructor(params = {}) {\n const { container } = params\n\n if (\n !container ||\n !(container instanceof HTMLElement) ||\n !(dragAndDropSupported() && formDataSupported() && fileApiSupported())\n ) {\n return this\n }\n\n this.container = container\n this.container.classList.add('moj-multi-file-upload--enhanced')\n\n this.defaultParams = {\n uploadFileEntryHook: () => {},\n uploadFileExitHook: () => {},\n uploadFileErrorHook: () => {},\n fileDeleteHook: () => {},\n uploadStatusText: 'Uploading files, please wait',\n dropzoneHintText: 'Drag and drop files here or',\n dropzoneButtonText: 'Choose files'\n }\n\n this.params = Object.assign({}, this.defaultParams, params)\n\n this.feedbackContainer = /** @type {HTMLDivElement} */ (\n this.container.querySelector('.moj-multi-file__uploaded-files')\n )\n\n this.setupFileInput()\n this.setupDropzone()\n this.setupLabel()\n this.setupStatusBox()\n\n this.container.addEventListener('click', this.onFileDeleteClick.bind(this))\n }\n\n setupDropzone() {\n this.dropzone = document.createElement('div')\n this.dropzone.classList.add('moj-multi-file-upload__dropzone')\n\n this.dropzone.addEventListener('dragover', this.onDragOver.bind(this))\n this.dropzone.addEventListener('dragleave', this.onDragLeave.bind(this))\n this.dropzone.addEventListener('drop', this.onDrop.bind(this))\n\n this.fileInput.replaceWith(this.dropzone)\n this.dropzone.appendChild(this.fileInput)\n }\n\n setupLabel() {\n const label = document.createElement('label')\n label.setAttribute('for', this.fileInput.id)\n label.classList.add('govuk-button', 'govuk-button--secondary')\n label.textContent = this.params.dropzoneButtonText\n\n const hint = document.createElement('p')\n hint.classList.add('govuk-body')\n hint.textContent = this.params.dropzoneHintText\n\n this.label = label\n this.dropzone.append(hint)\n this.dropzone.append(label)\n }\n\n setupFileInput() {\n this.fileInput = /** @type {HTMLInputElement} */ (\n this.container.querySelector('.moj-multi-file-upload__input')\n )\n this.fileInput.addEventListener('change', this.onFileChange.bind(this))\n this.fileInput.addEventListener('focus', this.onFileFocus.bind(this))\n this.fileInput.addEventListener('blur', this.onFileBlur.bind(this))\n }\n\n setupStatusBox() {\n this.status = document.createElement('div')\n this.status.classList.add('govuk-visually-hidden')\n this.status.setAttribute('aria-live', 'polite')\n this.status.setAttribute('role', 'status')\n this.dropzone.append(this.status)\n }\n\n onDragOver(event) {\n event.preventDefault()\n this.dropzone.classList.add('moj-multi-file-upload--dragover')\n }\n\n onDragLeave() {\n this.dropzone.classList.remove('moj-multi-file-upload--dragover')\n }\n\n onDrop(event) {\n event.preventDefault()\n this.dropzone.classList.remove('moj-multi-file-upload--dragover')\n this.feedbackContainer.classList.remove('moj-hidden')\n this.status.textContent = this.params.uploadStatusText\n this.uploadFiles(event.dataTransfer.files)\n }\n\n uploadFiles(files) {\n for (const file of Array.from(files)) {\n this.uploadFile(file)\n }\n }\n\n onFileChange() {\n this.feedbackContainer.classList.remove('moj-hidden')\n this.status.textContent = this.params.uploadStatusText\n this.uploadFiles(this.fileInput.files)\n\n const fileInput = this.fileInput.cloneNode(true)\n if (!fileInput || !(fileInput instanceof HTMLInputElement)) {\n return\n }\n\n fileInput.value = ''\n this.fileInput.replaceWith(fileInput)\n\n this.setupFileInput()\n this.fileInput.focus()\n }\n\n onFileFocus() {\n this.label.classList.add('moj-multi-file-upload--focused')\n }\n\n onFileBlur() {\n this.label.classList.remove('moj-multi-file-upload--focused')\n }\n\n getSuccessHtml(success) {\n 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>${success.messageHtml}</span>`\n }\n\n getErrorHtml(error) {\n 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>${error.message}</span>`\n }\n\n getFileRow(file) {\n const row = document.createElement('div')\n\n row.classList.add('govuk-summary-list__row', 'moj-multi-file-upload__row')\n\n row.innerHTML = `\n <div class=\"govuk-summary-list__value moj-multi-file-upload__message\">\n <span class=\"moj-multi-file-upload__filename\">${file.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 `\n\n return row\n }\n\n getDeleteButton(file) {\n const button = document.createElement('button')\n\n button.setAttribute('type', 'button')\n button.setAttribute('name', 'delete')\n button.setAttribute('value', file.filename)\n\n button.classList.add(\n 'moj-multi-file-upload__delete',\n 'govuk-button',\n 'govuk-button--secondary',\n 'govuk-!-margin-bottom-0'\n )\n\n button.innerHTML = `Delete <span class=\"govuk-visually-hidden\">${file.originalname}</span>`\n\n return button\n }\n\n uploadFile(file) {\n this.params.uploadFileEntryHook(this, file)\n\n const item = this.getFileRow(file)\n const message = item.querySelector('.moj-multi-file-upload__message')\n const actions = item.querySelector('.moj-multi-file-upload__actions')\n const progress = item.querySelector('.moj-multi-file-upload__progress')\n\n const formData = new FormData()\n formData.append('documents', file)\n\n this.feedbackContainer\n .querySelector('.moj-multi-file-upload__list')\n .append(item)\n\n const xhr = new XMLHttpRequest()\n\n const onLoad = () => {\n if (\n xhr.status < 200 ||\n xhr.status >= 300 ||\n !('success' in xhr.response)\n ) {\n return onError()\n }\n\n message.innerHTML = this.getSuccessHtml(xhr.response.success)\n this.status.textContent = xhr.response.success.messageText\n\n actions.append(this.getDeleteButton(xhr.response.file))\n this.params.uploadFileExitHook(this, file, xhr, xhr.responseText)\n }\n\n const onError = () => {\n const error = new Error(\n xhr.response && 'error' in xhr.response\n ? xhr.response.error.message\n : xhr.statusText || 'Upload failed'\n )\n\n message.innerHTML = this.getErrorHtml(error)\n this.status.textContent = error.message\n\n this.params.uploadFileErrorHook(this, file, xhr, xhr.responseText, error)\n }\n\n xhr.addEventListener('load', onLoad)\n xhr.addEventListener('error', onError)\n\n xhr.upload.addEventListener('progress', (event) => {\n if (!event.lengthComputable) {\n return\n }\n\n const percentComplete = Math.round((event.loaded / event.total) * 100)\n progress.textContent = ` ${percentComplete}%`\n })\n\n xhr.open('POST', this.params.uploadUrl)\n xhr.responseType = 'json'\n\n xhr.send(formData)\n }\n\n onFileDeleteClick(event) {\n const button = event.target\n\n if (\n !button ||\n !(button instanceof HTMLButtonElement) ||\n !button.classList.contains('moj-multi-file-upload__delete')\n ) {\n return\n }\n\n event.preventDefault() // if user refreshes page and then deletes\n\n const xhr = new XMLHttpRequest()\n\n xhr.addEventListener('load', () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n return\n }\n\n const rows = Array.from(\n this.feedbackContainer.querySelectorAll('.moj-multi-file-upload__row')\n )\n\n if (rows.length === 1) {\n this.feedbackContainer.classList.add('moj-hidden')\n }\n\n const row = rows.find((row) => row.contains(button))\n if (row) row.remove()\n\n this.params.fileDeleteHook(this, undefined, xhr, xhr.responseText)\n })\n\n xhr.open('POST', this.params.deleteUrl)\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.responseType = 'json'\n\n xhr.send(\n JSON.stringify({\n [button.name]: button.value\n })\n )\n }\n}\n","export class MultiSelect {\n constructor(options) {\n this.container = options.container\n\n if (this.container.hasAttribute('data-moj-multi-select-init')) {\n return this\n }\n\n this.container.setAttribute('data-moj-multi-select-init', '')\n\n const idPrefix = options.id_prefix\n this.setupToggle(idPrefix)\n\n this.toggleButton = this.toggle.querySelector('input')\n this.toggleButton.addEventListener('click', this.onButtonClick.bind(this))\n this.container.append(this.toggle)\n\n this.checkboxes = Array.from(options.checkboxes)\n this.checkboxes.forEach((el) =>\n el.addEventListener('click', this.onCheckboxClick.bind(this))\n )\n\n this.checked = options.checked || false\n }\n\n setupToggle(idPrefix = '') {\n const id = `${idPrefix}checkboxes-all`\n\n const toggle = document.createElement('div')\n const label = document.createElement('label')\n const input = document.createElement('input')\n const span = document.createElement('span')\n\n toggle.classList.add(\n 'govuk-checkboxes__item',\n 'govuk-checkboxes--small',\n 'moj-multi-select__checkbox'\n )\n\n input.id = id\n input.type = 'checkbox'\n input.classList.add('govuk-checkboxes__input')\n\n label.setAttribute('for', id)\n label.classList.add(\n 'govuk-label',\n 'govuk-checkboxes__label',\n 'moj-multi-select__toggle-label'\n )\n\n span.classList.add('govuk-visually-hidden')\n span.textContent = 'Select all'\n\n label.append(span)\n toggle.append(input, label)\n\n this.toggle = toggle\n }\n\n onButtonClick() {\n if (this.checked) {\n this.uncheckAll()\n this.toggleButton.checked = false\n } else {\n this.checkAll()\n this.toggleButton.checked = true\n }\n }\n\n checkAll() {\n this.checkboxes.forEach((el) => {\n el.checked = true\n })\n this.checked = true\n }\n\n uncheckAll() {\n this.checkboxes.forEach((el) => {\n el.checked = false\n })\n this.checked = false\n }\n\n onCheckboxClick(event) {\n if (!event.target.checked) {\n this.toggleButton.checked = false\n this.checked = false\n } else {\n if (\n this.checkboxes.filter((el) => el.checked).length ===\n this.checkboxes.length\n ) {\n this.toggleButton.checked = true\n this.checked = true\n }\n }\n }\n}\n","export class PasswordReveal {\n /**\n * @param {Element | null} element - HTML element to use for password reveal\n */\n constructor(element) {\n if (!element || !(element instanceof HTMLInputElement)) {\n return this\n }\n\n this.el = element\n this.container = element.parentElement\n\n if (this.container.hasAttribute('data-moj-password-reveal-init')) {\n return this\n }\n\n this.container.setAttribute('data-moj-password-reveal-init', '')\n\n this.el.setAttribute('spellcheck', 'false')\n this.createButton()\n }\n\n createButton() {\n this.group = document.createElement('div')\n this.button = document.createElement('button')\n\n this.button.setAttribute('type', 'button')\n\n this.group.className = 'moj-password-reveal'\n\n this.button.className =\n 'govuk-button govuk-button--secondary moj-password-reveal__button'\n\n this.button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n\n this.button.addEventListener('click', this.onButtonClick.bind(this))\n\n this.group.append(this.el, this.button)\n this.container.append(this.group)\n }\n\n onButtonClick() {\n if (this.el.type === 'password') {\n this.el.type = 'text'\n this.button.innerHTML =\n 'Hide <span class=\"govuk-visually-hidden\">password</span>'\n } else {\n this.el.type = 'password'\n this.button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n }\n }\n}\n","export class RichTextEditor {\n /**\n * @param {RichTextEditorConfig} options\n */\n constructor(options = {}) {\n const { textarea } = options\n\n if (\n !textarea ||\n !textarea.parentElement ||\n !(textarea instanceof HTMLTextAreaElement) ||\n !('contentEditable' in document.documentElement)\n ) {\n return this\n }\n\n options.toolbar = options.toolbar || {\n bold: false,\n italic: false,\n underline: false,\n bullets: true,\n numbers: true\n }\n\n this.textarea = textarea\n this.container = this.textarea.parentElement\n this.options = options\n\n if (this.container.hasAttribute('data-rich-text-editor-init')) {\n return this\n }\n\n this.container.setAttribute('data-rich-text-editor-init', '')\n\n this.createToolbar()\n this.hideDefault()\n this.configureToolbar()\n\n this.keys = {\n left: 37,\n right: 39,\n up: 38,\n down: 40\n }\n\n this.content.addEventListener('input', this.onEditorInput.bind(this))\n\n this.container\n .querySelector('label')\n .addEventListener('click', this.onLabelClick.bind(this))\n\n this.toolbar.addEventListener('keydown', this.onToolbarKeydown.bind(this))\n }\n\n onToolbarKeydown(event) {\n let focusableButton\n switch (event.keyCode) {\n case this.keys.right:\n case this.keys.down: {\n focusableButton = this.buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n const nextButton = focusableButton.nextElementSibling\n if (nextButton instanceof HTMLButtonElement) {\n nextButton.focus()\n focusableButton.setAttribute('tabindex', '-1')\n nextButton.setAttribute('tabindex', '0')\n }\n break\n }\n case this.keys.left:\n case this.keys.up: {\n focusableButton = this.buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n const previousButton = focusableButton.previousElementSibling\n if (previousButton instanceof HTMLButtonElement) {\n previousButton.focus()\n focusableButton.setAttribute('tabindex', '-1')\n previousButton.setAttribute('tabindex', '0')\n }\n break\n }\n }\n }\n\n getToolbarHtml() {\n let html = ''\n\n html += '<div class=\"moj-rich-text-editor__toolbar\" role=\"toolbar\">'\n\n if (this.options.toolbar.bold) {\n html +=\n '<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>'\n }\n\n if (this.options.toolbar.italic) {\n html +=\n '<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>'\n }\n\n if (this.options.toolbar.underline) {\n html +=\n '<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>'\n }\n\n if (this.options.toolbar.bullets) {\n html +=\n '<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>'\n }\n\n if (this.options.toolbar.numbers) {\n html +=\n '<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>'\n }\n\n html += '</div>'\n return html\n }\n\n getEnhancedHtml() {\n return `${this.getToolbarHtml()}<div class=\"govuk-textarea moj-rich-text-editor__content\" contenteditable=\"true\" spellcheck=\"false\"></div>`\n }\n\n hideDefault() {\n this.textarea.classList.add('govuk-visually-hidden')\n this.textarea.setAttribute('aria-hidden', 'true')\n this.textarea.setAttribute('tabindex', '-1')\n }\n\n createToolbar() {\n this.toolbar = document.createElement('div')\n this.toolbar.className = 'moj-rich-text-editor'\n this.toolbar.innerHTML = this.getEnhancedHtml()\n this.container.append(this.toolbar)\n\n this.content = /** @type {HTMLDivElement} */ (\n this.container.querySelector('.moj-rich-text-editor__content')\n )\n\n this.content.innerHTML = this.$textarea.value\n }\n\n configureToolbar() {\n this.buttons = Array.from(\n /** @type {NodeListOf<HTMLButtonElement>} */\n (this.container.querySelectorAll('.moj-rich-text-editor__toolbar-button'))\n )\n\n this.buttons.forEach((button, index) => {\n button.setAttribute('tabindex', !index ? '0' : '-1')\n button.addEventListener('click', this.onButtonClick.bind(this))\n })\n }\n\n onButtonClick(event) {\n if (!(event.currentTarget instanceof HTMLElement)) {\n return\n }\n\n document.execCommand(\n event.currentTarget.getAttribute('data-command'),\n false,\n undefined\n )\n }\n\n getContent() {\n return this.content.innerHTML\n }\n\n onEditorInput() {\n this.updateTextarea()\n }\n\n updateTextarea() {\n document.execCommand('defaultParagraphSeparator', false, 'p')\n this.textarea.value = this.getContent()\n }\n\n onLabelClick(event) {\n event.preventDefault()\n this.content.focus()\n }\n}\n","export class SearchToggle {\n constructor(options) {\n this.options = options\n this.container = this.options.search.container\n this.toggleButtonContainer = this.options.toggleButton.container\n\n if (this.container.hasAttribute('data-moj-search-toggle-init')) {\n return this\n }\n\n this.container.setAttribute('data-moj-search-toggle-init', '')\n\n const svg =\n '<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\n this.toggleButton = document.createElement('button')\n this.toggleButton.setAttribute('class', 'moj-search-toggle__button')\n this.toggleButton.setAttribute('type', 'button')\n this.toggleButton.setAttribute('aria-haspopup', 'true')\n this.toggleButton.setAttribute('aria-expanded', 'false')\n this.toggleButton.innerHTML = `${this.options.toggleButton.text} ${svg}`\n\n this.toggleButton.addEventListener(\n 'click',\n this.onToggleButtonClick.bind(this)\n )\n\n this.toggleButtonContainer.append(this.toggleButton)\n\n document.addEventListener('click', this.onDocumentClick.bind(this))\n document.addEventListener('focusin', this.onDocumentClick.bind(this))\n }\n\n showMenu() {\n this.toggleButton.setAttribute('aria-expanded', 'true')\n this.container.classList.remove('moj-js-hidden')\n this.container.querySelector('input').focus()\n }\n\n hideMenu() {\n this.container.classList.add('moj-js-hidden')\n this.toggleButton.setAttribute('aria-expanded', 'false')\n }\n\n onToggleButtonClick() {\n if (this.toggleButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n } else {\n this.hideMenu()\n }\n }\n\n onDocumentClick(event) {\n if (\n !this.toggleButtonContainer.contains(event.target) &&\n !this.container.contains(event.target)\n ) {\n this.hideMenu()\n }\n }\n}\n","export class SortableTable {\n constructor(params) {\n const table = params.table\n const head = table?.querySelector('thead')\n const body = table?.querySelector('tbody')\n\n if (!table || !(table instanceof HTMLElement) || !head || !body) {\n return this\n }\n\n this.table = table\n this.head = head\n this.body = body\n\n if (this.table.hasAttribute('data-moj-sortable-table-init')) {\n return this\n }\n\n this.table.setAttribute('data-moj-sortable-table-init', '')\n\n this.headings = this.head\n ? Array.from(this.head.querySelectorAll('th'))\n : []\n\n this.setupOptions(params)\n this.createHeadingButtons()\n this.createStatusBox()\n this.initialiseSortedColumn()\n\n this.head.addEventListener('click', this.onSortButtonClick.bind(this))\n }\n\n setupOptions(params) {\n params = params || {}\n this.statusMessage =\n params.statusMessage || 'Sort by %heading% (%direction%)'\n this.ascendingText = params.ascendingText || 'ascending'\n this.descendingText = params.descendingText || 'descending'\n }\n\n createHeadingButtons() {\n for (const heading of this.headings) {\n if (heading.hasAttribute('aria-sort')) {\n this.createHeadingButton(heading)\n }\n }\n }\n\n createHeadingButton(heading) {\n const index = this.headings.indexOf(heading)\n const button = document.createElement('button')\n\n button.setAttribute('type', 'button')\n button.setAttribute('data-index', `${index}`)\n button.textContent = heading.textContent\n\n heading.textContent = ''\n heading.appendChild(button)\n }\n\n createStatusBox() {\n this.status = document.createElement('div')\n\n this.status.setAttribute('aria-atomic', 'true')\n this.status.setAttribute('aria-live', 'polite')\n this.status.setAttribute('class', 'govuk-visually-hidden')\n this.status.setAttribute('role', 'status')\n\n this.table.insertAdjacentElement('afterend', this.status)\n }\n\n initialiseSortedColumn() {\n const rows = this.getTableRowsArray()\n\n const heading = this.table.querySelector('th[aria-sort]')\n const sortButton = heading?.querySelector('button')\n const sortDirection = heading?.getAttribute('aria-sort')\n const columnNumber = Number.parseInt(\n sortButton?.getAttribute('data-index') ?? '0',\n 10\n )\n\n if (\n !heading ||\n !sortButton ||\n !(sortDirection === 'ascending' || sortDirection === 'descending')\n ) {\n return\n }\n\n const sortedRows = this.sort(rows, columnNumber, sortDirection)\n this.addRows(sortedRows)\n }\n\n onSortButtonClick(event) {\n const button = event.target\n\n if (\n !button ||\n !(button instanceof HTMLButtonElement) ||\n !button.parentElement\n ) {\n return\n }\n\n const heading = button.parentElement\n const sortDirection = heading.getAttribute('aria-sort')\n const columnNumber = Number.parseInt(\n button?.getAttribute('data-index') ?? '0',\n 10\n )\n\n const newSortDirection =\n sortDirection === 'none' || sortDirection === 'descending'\n ? 'ascending'\n : 'descending'\n\n const rows = this.getTableRowsArray()\n const sortedRows = this.sort(rows, columnNumber, newSortDirection)\n\n this.addRows(sortedRows)\n this.removeButtonStates()\n this.updateButtonState(button, newSortDirection)\n }\n\n updateButtonState(button, direction) {\n if (!(direction === 'ascending' || direction === 'descending')) {\n return\n }\n\n button.parentElement.setAttribute('aria-sort', direction)\n let message = this.statusMessage\n message = message.replace(/%heading%/, button.textContent)\n message = message.replace(/%direction%/, this[`${direction}Text`])\n this.status.textContent = message\n }\n\n removeButtonStates() {\n for (const heading of this.headings) {\n heading.setAttribute('aria-sort', 'none')\n }\n }\n\n addRows(rows) {\n for (const row of rows) {\n this.body.append(row)\n }\n }\n\n getTableRowsArray() {\n return Array.from(this.body.querySelectorAll('tr'))\n }\n\n sort(rows, columnNumber, sortDirection) {\n return rows.sort((rowA, rowB) => {\n const tdA = rowA.querySelectorAll('td, th')[columnNumber]\n const tdB = rowB.querySelectorAll('td, th')[columnNumber]\n\n if (\n !tdA ||\n !tdB ||\n !(tdA instanceof HTMLElement) ||\n !(tdB instanceof HTMLElement)\n ) {\n return 0\n }\n\n const valueA =\n sortDirection === 'ascending'\n ? this.getCellValue(tdA)\n : this.getCellValue(tdB)\n\n const valueB =\n sortDirection === 'ascending'\n ? this.getCellValue(tdB)\n : this.getCellValue(tdA)\n\n return !(typeof valueA === 'number' && typeof valueB === 'number')\n ? valueA.toString().localeCompare(valueB.toString())\n : valueA - valueB\n })\n }\n\n getCellValue(cell) {\n const val = cell.getAttribute('data-sort-value') || cell.innerHTML\n const valAsNumber = Number(val)\n\n return Number.isFinite(valAsNumber)\n ? valAsNumber // Exclude invalid numbers, infinity etc\n : val\n }\n}\n","export const version = '0.0.0-development'\n","/* eslint-disable no-new */\n\nimport { AddAnother } from './components/add-another/add-another.mjs'\nimport { Alert } from './components/alert/alert.mjs'\nimport { ButtonMenu } from './components/button-menu/button-menu.mjs'\nimport { DatePicker } from './components/date-picker/date-picker.mjs'\nimport { FilterToggleButton } from './components/filter-toggle-button/filter-toggle-button.mjs'\nimport { FormValidator } from './components/form-validator/form-validator.mjs'\nimport { MultiFileUpload } from './components/multi-file-upload/multi-file-upload.mjs'\nimport { MultiSelect } from './components/multi-select/multi-select.mjs'\nimport { PasswordReveal } from './components/password-reveal/password-reveal.mjs'\nimport { RichTextEditor } from './components/rich-text-editor/rich-text-editor.mjs'\nimport { SearchToggle } from './components/search-toggle/search-toggle.mjs'\nimport { SortableTable } from './components/sortable-table/sortable-table.mjs'\nimport { version } from './version.mjs'\n\n/**\n * @param {Config} [config]\n */\nfunction initAll(config) {\n // Set the config to an empty object by default if no config is passed.\n config = typeof config !== 'undefined' ? config : {}\n\n // Allow the user to initialise MOJ Frontend in only certain sections of the page\n // Defaults to the entire document if nothing is set.\n const scope = typeof config.scope !== 'undefined' ? config.scope : document\n\n const $addAnothers = scope.querySelectorAll('[data-module=\"moj-add-another\"]')\n\n $addAnothers.forEach(($addAnother) => {\n new AddAnother($addAnother)\n })\n\n const $multiSelects = scope.querySelectorAll(\n '[data-module=\"moj-multi-select\"]'\n )\n\n $multiSelects.forEach(($multiSelect) => {\n const containerSelector = $multiSelect.getAttribute(\n 'data-multi-select-checkbox'\n )\n\n if (!($multiSelect instanceof HTMLElement) || !containerSelector) {\n return\n }\n\n new MultiSelect({\n container: $multiSelect.querySelector(containerSelector),\n checkboxes: $multiSelect.querySelectorAll(\n 'tbody .govuk-checkboxes__input'\n ),\n id_prefix: $multiSelect.getAttribute('data-multi-select-idprefix')\n })\n })\n\n const $passwordReveals = scope.querySelectorAll(\n '[data-module=\"moj-password-reveal\"]'\n )\n\n $passwordReveals.forEach(($passwordReveal) => {\n new PasswordReveal($passwordReveal)\n })\n\n const $richTextEditors = scope.querySelectorAll(\n '[data-module=\"moj-rich-text-editor\"]'\n )\n\n $richTextEditors.forEach(($richTextEditor) => {\n const options = {\n textarea: $richTextEditor\n }\n\n const toolbarAttr = $richTextEditor.getAttribute(\n 'data-moj-rich-text-editor-toolbar'\n )\n\n if (toolbarAttr) {\n const toolbar = toolbarAttr.split(',')\n\n options.toolbar = {}\n\n for (const option of toolbar) {\n if (\n option === 'bold' ||\n option === 'italic' ||\n option === 'underline' ||\n option === 'bullets' ||\n option === 'numbers'\n ) {\n options.toolbar[option] = true\n }\n }\n }\n\n new RichTextEditor(options)\n })\n\n const $searchToggles = scope.querySelectorAll(\n '[data-module=\"moj-search-toggle\"]'\n )\n\n $searchToggles.forEach(($searchToggle) => {\n new SearchToggle({\n toggleButton: {\n container: $searchToggle.querySelector('.moj-search-toggle__toggle'),\n text: $searchToggle.getAttribute('data-moj-search-toggle-text')\n },\n search: {\n container: $searchToggle.querySelector('.moj-search')\n }\n })\n })\n\n const $sortableTables = scope.querySelectorAll(\n '[data-module=\"moj-sortable-table\"]'\n )\n\n $sortableTables.forEach(($table) => {\n new SortableTable({\n table: $table\n })\n })\n\n const $datePickers = scope.querySelectorAll('[data-module=\"moj-date-picker\"]')\n\n $datePickers.forEach(($datePicker) => {\n new DatePicker($datePicker)\n })\n\n const $buttonMenus = scope.querySelectorAll('[data-module=\"moj-button-menu\"]')\n\n $buttonMenus.forEach(($buttonmenu) => {\n new ButtonMenu($buttonmenu)\n })\n\n const $alerts = scope.querySelectorAll('[data-module=\"moj-alert\"]')\n $alerts.forEach(($alert) => {\n new Alert($alert)\n })\n}\n\nexport {\n initAll,\n version,\n\n // Components\n AddAnother,\n Alert,\n ButtonMenu,\n DatePicker,\n FilterToggleButton,\n FormValidator,\n MultiFileUpload,\n MultiSelect,\n PasswordReveal,\n RichTextEditor,\n SearchToggle,\n SortableTable\n}\n\n/**\n * @typedef {object} Config\n * @property {Element} [scope=document] - Scope to query for components\n */\n\n/**\n * Schema for component config\n *\n * @typedef {object} Schema\n * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties\n */\n\n/**\n * Schema property for component config\n *\n * @typedef {object} SchemaProperty\n * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type\n */\n"],"names":["AddAnother","constructor","container","hasAttribute","setAttribute","addEventListener","onRemoveButtonClick","bind","onAddButtonClick","buttons","querySelectorAll","forEach","button","HTMLButtonElement","type","event","target","classList","contains","items","getItems","item","getNewItem","HTMLElement","updateAttributes","length","resetItem","firstItem","hasRemoveButton","createRemoveButton","after","input","querySelector","HTMLInputElement","focus","Array","from","filter","cloneNode","index","el","name","getAttribute","id","originalId","replace","label","parentElement","closest","HTMLLabelElement","htmlFor","document","createElement","add","textContent","append","checked","value","remove","focusHeading","heading","removeAttributeValue","attr","re","m","removeAttribute","RegExp","match","addAttributeValue","test","dragAndDropSupported","div","ondrop","formDataSupported","FormData","fileApiSupported","files","getPreviousSibling","$element","selector","$sibling","previousElementSibling","matches","findNearestMatchingElement","$currentElement","setFocus","options","isFocusable","onFocus","onBlur","once","call","onBeforeFocus","Alert","$module","config","schema","Object","freeze","properties","dismissible","dismissText","disableAutoFocus","focusOnDismissSelector","defaults","mergeConfigs","parseDataset","dataset","$dismissButton","innerHTML","Node","dimiss","$elementToRecieveFocus","$nextSibling","nextElementSibling","normaliseString","property","trimmedValue","trim","output","outputType","includes","Number","isFinite","parsed","field","entries","configObjects","formattedConfigObject","configObject","key","keys","option","override","ButtonMenu","buttonText","buttonClasses","alignMenu","children","className","startsWith","split","initMenu","$menu","createMenu","insertAdjacentHTML","toggleTemplate","setupMenuItems","$menuToggle","toggleMenu","handleKeyDown","closeMenu","hidden","appendChild","firstChild","listItem","insertBefore","tagName","setTimeout","isOpen","preventDefault","keyboardEvent","detail","focusIndex","openMenu","focusItem","moveFocus","menuItem","currentFocusIndex","activeElement","menuItems","indexOf","DatePicker","$input","excludedDates","excludedDays","leadingZeros","maxDate","minDate","weekStartDay","dayLabels","monthLabels","currentDate","Date","setHours","calendarDays","buttonClass","selectedDayButtonClass","currentDayButtonClass","todayButtonClass","initialized","setOptions","initControls","$dialog","createDialog","createCalendarHeaders","$componentWrapper","$inputWrapper","insertAdjacentElement","$calendarButton","$dialogTitle","createCalendar","$prevMonthButton","$prevYearButton","$nextMonthButton","$nextYearButton","$cancelButton","$okButton","focusPreviousMonth","focusPreviousYear","focusNextMonth","focusNextYear","closeDialog","selectDate","dialogButtons","$firstButtonInDialog","$lastButtonInDialog","firstButtonKeydown","lastButtonKeydown","toggleDialog","stopPropagation","body","backgroundClick","updateCalendar","titleId","dialogTemplate","$tbody","dayCount","i","$row","insertRow","j","$cell","$dateButton","calendarDay","DSCalendarDay","push","day","html","substring","$headerRow","ret","toString","setMinAndMaxDatesOnCalendar","setExcludedDates","setExcludedDays","setLeadingZeros","setWeekStartDay","formattedDateFromString","map","parseDateRangeString","reduce","dates","concat","date","datestring","startDate","endDate","d","getTime","setDate","getDate","weekDays","toLowerCase","unshift","pop","weekStartDayParam","isExcludedDate","excludedDate","toDateString","getDay","dateString","fallback","formattedDate","dateFormatPattern","exec","month","year","formattedDateFromDate","getMonth","getFullYear","formattedDateHuman","shiftKey","firstOfMonth","dayOfWeek","thisDay","disabled","update","setCurrentDate","calendarDayDate","today","inputDate","enabledDays","window","getComputedStyle","display","innerText","changeEvent","Event","bubbles","cancelable","dispatchEvent","openDialog","offsetWidth","style","right","top","offsetHeight","goToDate","current","focusNextDay","focusPreviousDay","focusNextWeek","focusPreviousWeek","focusFirstDayOfWeek","firstDayOfWeekIndex","diff","focusLastDayOfWeek","lastDayOfWeekIndex","setMonth","setFullYear","row","column","picker","keyPress","click","accessibleLabel","calendarNavKey","FilterToggleButton","toggleButton","filterContainer","createToggleButton","setupResponsiveChecks","startHidden","hideMenu","mq","matchMedia","bigModeMediaQuery","addListener","checkMode","menuButton","classes","showText","onMenuButtonClick","enableBigMode","enableSmallMode","showMenu","removeCloseButton","addCloseButton","closeButton","text","onCloseClick","hideText","toggle","FormValidator","form","HTMLFormElement","errors","validators","onSubmit","summary","originalTitle","title","escapeHtml","string","String","fromEntityMap","s","entityMap","resetTitle","updateTitle","showSummary","getSummaryHtml","error","fieldName","message","hideSummary","removeInlineErrors","validate","showInlineErrors","showInlineError","errorSpan","control","fieldset","fieldContainer","legend","removeInlineError","addValidator","rules","elements","validator","validatorReturnValue","method","params","MultiFileUpload","defaultParams","uploadFileEntryHook","uploadFileExitHook","uploadFileErrorHook","fileDeleteHook","uploadStatusText","dropzoneHintText","dropzoneButtonText","assign","feedbackContainer","setupFileInput","setupDropzone","setupLabel","setupStatusBox","onFileDeleteClick","dropzone","onDragOver","onDragLeave","onDrop","fileInput","replaceWith","hint","onFileChange","onFileFocus","onFileBlur","status","uploadFiles","dataTransfer","file","uploadFile","getSuccessHtml","success","messageHtml","getErrorHtml","getFileRow","getDeleteButton","filename","originalname","actions","progress","formData","xhr","XMLHttpRequest","onLoad","response","onError","messageText","responseText","Error","statusText","upload","lengthComputable","percentComplete","Math","round","loaded","total","open","uploadUrl","responseType","send","rows","find","undefined","deleteUrl","setRequestHeader","JSON","stringify","MultiSelect","idPrefix","id_prefix","setupToggle","onButtonClick","checkboxes","onCheckboxClick","span","uncheckAll","checkAll","PasswordReveal","element","createButton","group","RichTextEditor","textarea","HTMLTextAreaElement","documentElement","toolbar","bold","italic","underline","bullets","numbers","createToolbar","hideDefault","configureToolbar","left","up","down","content","onEditorInput","onLabelClick","onToolbarKeydown","focusableButton","keyCode","nextButton","previousButton","getToolbarHtml","getEnhancedHtml","$textarea","currentTarget","execCommand","getContent","updateTextarea","SearchToggle","search","toggleButtonContainer","svg","onToggleButtonClick","onDocumentClick","SortableTable","table","head","headings","setupOptions","createHeadingButtons","createStatusBox","initialiseSortedColumn","onSortButtonClick","statusMessage","ascendingText","descendingText","createHeadingButton","_sortButton$getAttrib","getTableRowsArray","sortButton","sortDirection","columnNumber","parseInt","sortedRows","sort","addRows","_button$getAttribute","newSortDirection","removeButtonStates","updateButtonState","direction","rowA","rowB","tdA","tdB","valueA","getCellValue","valueB","localeCompare","cell","val","valAsNumber","version","initAll","scope","$addAnothers","$addAnother","$multiSelects","$multiSelect","containerSelector","$passwordReveals","$passwordReveal","$richTextEditors","$richTextEditor","toolbarAttr","$searchToggles","$searchToggle","$sortableTables","$table","$datePickers","$datePicker","$buttonMenus","$buttonmenu","$alerts","$alert"],"mappings":"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"}