@ministryofjustice/frontend 4.0.1 → 5.1.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 (256) 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 +3010 -0
  5. package/moj/all.bundle.js.map +1 -0
  6. package/moj/all.bundle.mjs +3293 -0
  7. package/moj/all.bundle.mjs.map +1 -0
  8. package/moj/all.mjs +17 -110
  9. package/moj/all.mjs.map +1 -1
  10. package/moj/all.scss +3 -0
  11. package/moj/all.scss.map +1 -0
  12. package/moj/common/index.mjs +57 -0
  13. package/moj/common/index.mjs.map +1 -0
  14. package/moj/common/moj-frontend-version.mjs +14 -0
  15. package/moj/common/moj-frontend-version.mjs.map +1 -0
  16. package/moj/components/_all.scss +2 -0
  17. package/moj/components/_all.scss.map +1 -0
  18. package/moj/components/action-bar/_action-bar.scss +2 -0
  19. package/moj/components/action-bar/_action-bar.scss.map +1 -0
  20. package/moj/components/add-another/_add-another.scss +2 -0
  21. package/moj/components/add-another/_add-another.scss.map +1 -0
  22. package/moj/components/add-another/add-another.bundle.js +157 -0
  23. package/moj/components/add-another/add-another.bundle.js.map +1 -0
  24. package/moj/components/add-another/add-another.bundle.mjs +271 -0
  25. package/moj/components/add-another/add-another.bundle.mjs.map +1 -0
  26. package/moj/components/add-another/add-another.mjs +135 -91
  27. package/moj/components/add-another/add-another.mjs.map +1 -1
  28. package/moj/components/alert/_alert.scss +4 -0
  29. package/moj/components/alert/_alert.scss.map +1 -0
  30. package/moj/components/alert/alert.bundle.js +254 -0
  31. package/moj/components/alert/alert.bundle.js.map +1 -0
  32. package/moj/components/alert/alert.bundle.mjs +490 -0
  33. package/moj/components/alert/alert.bundle.mjs.map +1 -0
  34. package/moj/components/alert/alert.mjs +97 -218
  35. package/moj/components/alert/alert.mjs.map +1 -1
  36. package/moj/components/alert/{alert.spec.helper.js → alert.spec.helper.bundle.js} +1 -1
  37. package/moj/components/alert/alert.spec.helper.bundle.js.map +1 -0
  38. package/moj/components/alert/alert.spec.helper.bundle.mjs +67 -0
  39. package/moj/components/alert/alert.spec.helper.bundle.mjs.map +1 -0
  40. package/moj/components/alert/alert.spec.helper.mjs.map +1 -1
  41. package/moj/components/badge/_badge.scss +2 -0
  42. package/moj/components/badge/_badge.scss.map +1 -0
  43. package/moj/components/banner/_banner.scss +2 -0
  44. package/moj/components/banner/_banner.scss.map +1 -0
  45. package/moj/components/button-menu/README.md +12 -6
  46. package/moj/components/button-menu/_button-menu.scss +4 -1
  47. package/moj/components/button-menu/_button-menu.scss.map +1 -0
  48. package/moj/components/button-menu/button-menu.bundle.js +270 -0
  49. package/moj/components/button-menu/button-menu.bundle.js.map +1 -0
  50. package/moj/components/button-menu/button-menu.bundle.mjs +506 -0
  51. package/moj/components/button-menu/button-menu.bundle.mjs.map +1 -0
  52. package/moj/components/button-menu/button-menu.mjs +214 -280
  53. package/moj/components/button-menu/button-menu.mjs.map +1 -1
  54. package/moj/components/cookie-banner/_cookie-banner.scss +2 -0
  55. package/moj/components/cookie-banner/_cookie-banner.scss.map +1 -0
  56. package/moj/components/currency-input/_currency-input.scss +2 -0
  57. package/moj/components/currency-input/_currency-input.scss.map +1 -0
  58. package/moj/components/date-picker/_date-picker.scss +2 -0
  59. package/moj/components/date-picker/_date-picker.scss.map +1 -0
  60. package/moj/components/date-picker/date-picker.bundle.js +804 -0
  61. package/moj/components/date-picker/date-picker.bundle.js.map +1 -0
  62. package/moj/components/date-picker/date-picker.bundle.mjs +1040 -0
  63. package/moj/components/date-picker/date-picker.bundle.mjs.map +1 -0
  64. package/moj/components/date-picker/date-picker.mjs +663 -827
  65. package/moj/components/date-picker/date-picker.mjs.map +1 -1
  66. package/moj/components/filter/_filter.scss +2 -0
  67. package/moj/components/filter/_filter.scss.map +1 -0
  68. package/moj/components/filter/template.njk +1 -1
  69. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js +185 -0
  70. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js.map +1 -0
  71. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs +421 -0
  72. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs.map +1 -0
  73. package/moj/components/filter-toggle-button/filter-toggle-button.mjs +166 -81
  74. package/moj/components/filter-toggle-button/filter-toggle-button.mjs.map +1 -1
  75. package/moj/components/form-validator/form-validator.bundle.js +288 -0
  76. package/moj/components/form-validator/form-validator.bundle.js.map +1 -0
  77. package/moj/components/form-validator/form-validator.bundle.mjs +524 -0
  78. package/moj/components/form-validator/form-validator.bundle.mjs.map +1 -0
  79. package/moj/components/form-validator/form-validator.mjs +226 -149
  80. package/moj/components/form-validator/form-validator.mjs.map +1 -1
  81. package/moj/components/header/_header.scss +2 -0
  82. package/moj/components/header/_header.scss.map +1 -0
  83. package/moj/components/identity-bar/_identity-bar.scss +2 -0
  84. package/moj/components/identity-bar/_identity-bar.scss.map +1 -0
  85. package/moj/components/interruption-card/_interruption-card.scss +2 -0
  86. package/moj/components/interruption-card/_interruption-card.scss.map +1 -0
  87. package/moj/components/messages/_messages.scss +2 -0
  88. package/moj/components/messages/_messages.scss.map +1 -0
  89. package/moj/components/multi-file-upload/_multi-file-upload.scss +2 -0
  90. package/moj/components/multi-file-upload/_multi-file-upload.scss.map +1 -0
  91. package/moj/components/multi-file-upload/multi-file-upload.bundle.js +397 -0
  92. package/moj/components/multi-file-upload/multi-file-upload.bundle.js.map +1 -0
  93. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs +633 -0
  94. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs.map +1 -0
  95. package/moj/components/multi-file-upload/multi-file-upload.mjs +384 -213
  96. package/moj/components/multi-file-upload/multi-file-upload.mjs.map +1 -1
  97. package/moj/components/multi-file-upload/template.njk +1 -1
  98. package/moj/components/multi-select/_multi-select.scss +2 -0
  99. package/moj/components/multi-select/_multi-select.scss.map +1 -0
  100. package/moj/components/multi-select/multi-select.bundle.js +143 -0
  101. package/moj/components/multi-select/multi-select.bundle.js.map +1 -0
  102. package/moj/components/multi-select/multi-select.bundle.mjs +379 -0
  103. package/moj/components/multi-select/multi-select.bundle.mjs.map +1 -0
  104. package/moj/components/multi-select/multi-select.mjs +123 -64
  105. package/moj/components/multi-select/multi-select.mjs.map +1 -1
  106. package/moj/components/notification-badge/_notification-badge.scss +2 -0
  107. package/moj/components/notification-badge/_notification-badge.scss.map +1 -0
  108. package/moj/components/organisation-switcher/_organisation-switcher.scss +2 -0
  109. package/moj/components/organisation-switcher/_organisation-switcher.scss.map +1 -0
  110. package/moj/components/page-header-actions/_page-header-actions.scss +2 -0
  111. package/moj/components/page-header-actions/_page-header-actions.scss.map +1 -0
  112. package/moj/components/pagination/_pagination.scss +2 -2
  113. package/moj/components/pagination/_pagination.scss.map +1 -0
  114. package/moj/components/password-reveal/_password-reveal.scss +5 -1
  115. package/moj/components/password-reveal/_password-reveal.scss.map +1 -0
  116. package/moj/components/password-reveal/password-reveal.bundle.js +52 -0
  117. package/moj/components/password-reveal/password-reveal.bundle.js.map +1 -0
  118. package/moj/components/password-reveal/password-reveal.bundle.mjs +166 -0
  119. package/moj/components/password-reveal/password-reveal.bundle.mjs.map +1 -0
  120. package/moj/components/password-reveal/password-reveal.mjs +39 -29
  121. package/moj/components/password-reveal/password-reveal.mjs.map +1 -1
  122. package/moj/components/primary-navigation/_primary-navigation.scss +2 -0
  123. package/moj/components/primary-navigation/_primary-navigation.scss.map +1 -0
  124. package/moj/components/progress-bar/_progress-bar.scss +2 -0
  125. package/moj/components/progress-bar/_progress-bar.scss.map +1 -0
  126. package/moj/components/rich-text-editor/README.md +16 -9
  127. package/moj/components/rich-text-editor/_rich-text-editor.scss +2 -0
  128. package/moj/components/rich-text-editor/_rich-text-editor.scss.map +1 -0
  129. package/moj/components/rich-text-editor/rich-text-editor.bundle.js +210 -0
  130. package/moj/components/rich-text-editor/rich-text-editor.bundle.js.map +1 -0
  131. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs +446 -0
  132. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs.map +1 -0
  133. package/moj/components/rich-text-editor/rich-text-editor.mjs +186 -140
  134. package/moj/components/rich-text-editor/rich-text-editor.mjs.map +1 -1
  135. package/moj/components/search/_search.scss +2 -0
  136. package/moj/components/search/_search.scss.map +1 -0
  137. package/moj/components/search-toggle/{search-toggle.scss → _search-toggle.scss} +2 -0
  138. package/moj/components/search-toggle/_search-toggle.scss.map +1 -0
  139. package/moj/components/search-toggle/search-toggle.bundle.js +122 -0
  140. package/moj/components/search-toggle/search-toggle.bundle.js.map +1 -0
  141. package/moj/components/search-toggle/search-toggle.bundle.mjs +358 -0
  142. package/moj/components/search-toggle/search-toggle.bundle.mjs.map +1 -0
  143. package/moj/components/search-toggle/search-toggle.mjs +104 -43
  144. package/moj/components/search-toggle/search-toggle.mjs.map +1 -1
  145. package/moj/components/side-navigation/_side-navigation.scss +2 -0
  146. package/moj/components/side-navigation/_side-navigation.scss.map +1 -0
  147. package/moj/components/sortable-table/_sortable-table.scss +2 -2
  148. package/moj/components/sortable-table/_sortable-table.scss.map +1 -0
  149. package/moj/components/sortable-table/sortable-table.bundle.js +202 -0
  150. package/moj/components/sortable-table/sortable-table.bundle.js.map +1 -0
  151. package/moj/components/sortable-table/sortable-table.bundle.mjs +438 -0
  152. package/moj/components/sortable-table/sortable-table.bundle.mjs.map +1 -0
  153. package/moj/components/sortable-table/sortable-table.mjs +179 -122
  154. package/moj/components/sortable-table/sortable-table.mjs.map +1 -1
  155. package/moj/components/sub-navigation/_sub-navigation.scss +2 -0
  156. package/moj/components/sub-navigation/_sub-navigation.scss.map +1 -0
  157. package/moj/components/tag/_tag.scss +2 -0
  158. package/moj/components/tag/_tag.scss.map +1 -0
  159. package/moj/components/task-list/_task-list.scss +2 -0
  160. package/moj/components/task-list/_task-list.scss.map +1 -0
  161. package/moj/components/ticket-panel/_ticket-panel.scss +2 -0
  162. package/moj/components/ticket-panel/_ticket-panel.scss.map +1 -0
  163. package/moj/components/timeline/_timeline.scss +2 -0
  164. package/moj/components/timeline/_timeline.scss.map +1 -0
  165. package/moj/core/_all.scss +3 -0
  166. package/moj/core/_all.scss.map +1 -0
  167. package/moj/core/_moj-frontend-properties.scss +7 -0
  168. package/moj/core/_moj-frontend-properties.scss.map +1 -0
  169. package/moj/filters/all.js +44 -22
  170. package/moj/filters/prototype-kit-13-filters.js +4 -3
  171. package/moj/helpers/_all.scss +2 -0
  172. package/moj/helpers/_all.scss.map +1 -0
  173. package/moj/helpers/_hidden.scss +2 -0
  174. package/moj/helpers/_hidden.scss.map +1 -0
  175. package/moj/helpers/_links.scss +2 -0
  176. package/moj/helpers/_links.scss.map +1 -0
  177. package/moj/helpers.bundle.js +140 -0
  178. package/moj/helpers.bundle.js.map +1 -0
  179. package/moj/helpers.bundle.mjs +128 -0
  180. package/moj/helpers.bundle.mjs.map +1 -0
  181. package/moj/helpers.mjs +50 -77
  182. package/moj/helpers.mjs.map +1 -1
  183. package/moj/init.js +11 -2
  184. package/moj/moj-frontend.min.css +1 -1
  185. package/moj/moj-frontend.min.css.map +1 -1
  186. package/moj/moj-frontend.min.js +1 -1
  187. package/moj/moj-frontend.min.js.map +1 -1
  188. package/moj/objects/_all.scss +2 -0
  189. package/moj/objects/_all.scss.map +1 -0
  190. package/moj/objects/_button-group.scss +2 -0
  191. package/moj/objects/_button-group.scss.map +1 -0
  192. package/moj/objects/_filter-layout.scss +2 -0
  193. package/moj/objects/_filter-layout.scss.map +1 -0
  194. package/moj/objects/_scrollable-pane.scss +2 -0
  195. package/moj/objects/_scrollable-pane.scss.map +1 -0
  196. package/moj/objects/_width-container.scss +2 -0
  197. package/moj/objects/_width-container.scss.map +1 -0
  198. package/moj/settings/_all.scss +2 -0
  199. package/moj/settings/_all.scss.map +1 -0
  200. package/moj/settings/_assets.scss +2 -0
  201. package/moj/settings/_assets.scss.map +1 -0
  202. package/moj/settings/_colours.scss +2 -0
  203. package/moj/settings/_colours.scss.map +1 -0
  204. package/moj/settings/_measurements.scss +2 -0
  205. package/moj/settings/_measurements.scss.map +1 -0
  206. package/moj/settings/_typography.scss +2 -0
  207. package/moj/settings/_typography.scss.map +1 -0
  208. package/moj/template.njk +13 -0
  209. package/moj/utilities/_all.scss +2 -0
  210. package/moj/utilities/_all.scss.map +1 -0
  211. package/moj/utilities/_hidden.scss +2 -0
  212. package/moj/utilities/_hidden.scss.map +1 -0
  213. package/moj/utilities/_width-container.scss +2 -0
  214. package/moj/utilities/_width-container.scss.map +1 -0
  215. package/moj/vendor/govuk-frontend/_base.scss +2 -0
  216. package/moj/vendor/govuk-frontend/_base.scss.map +1 -0
  217. package/moj/vendor/govuk-frontend/_index.scss +2 -0
  218. package/moj/vendor/govuk-frontend/_index.scss.map +1 -0
  219. package/package.json +5 -6
  220. package/moj/all.jquery.min.js +0 -1
  221. package/moj/all.jquery.min.js.map +0 -1
  222. package/moj/all.js +0 -2662
  223. package/moj/all.js.map +0 -1
  224. package/moj/components/add-another/add-another.js +0 -115
  225. package/moj/components/add-another/add-another.js.map +0 -1
  226. package/moj/components/alert/alert.js +0 -356
  227. package/moj/components/alert/alert.js.map +0 -1
  228. package/moj/components/alert/alert.spec.helper.js.map +0 -1
  229. package/moj/components/button-menu/button-menu.js +0 -338
  230. package/moj/components/button-menu/button-menu.js.map +0 -1
  231. package/moj/components/date-picker/date-picker.js +0 -970
  232. package/moj/components/date-picker/date-picker.js.map +0 -1
  233. package/moj/components/filter-toggle-button/filter-toggle-button.js +0 -102
  234. package/moj/components/filter-toggle-button/filter-toggle-button.js.map +0 -1
  235. package/moj/components/form-validator/form-validator.js +0 -205
  236. package/moj/components/form-validator/form-validator.js.map +0 -1
  237. package/moj/components/multi-file-upload/multi-file-upload.js +0 -241
  238. package/moj/components/multi-file-upload/multi-file-upload.js.map +0 -1
  239. package/moj/components/multi-select/multi-select.js +0 -86
  240. package/moj/components/multi-select/multi-select.js.map +0 -1
  241. package/moj/components/password-reveal/password-reveal.js +0 -44
  242. package/moj/components/password-reveal/password-reveal.js.map +0 -1
  243. package/moj/components/rich-text-editor/rich-text-editor.js +0 -166
  244. package/moj/components/rich-text-editor/rich-text-editor.js.map +0 -1
  245. package/moj/components/search-toggle/search-toggle.js +0 -63
  246. package/moj/components/search-toggle/search-toggle.js.map +0 -1
  247. package/moj/components/sortable-table/sortable-table.js +0 -147
  248. package/moj/components/sortable-table/sortable-table.js.map +0 -1
  249. package/moj/helpers.js +0 -200
  250. package/moj/helpers.js.map +0 -1
  251. package/moj/vendor/html5shiv.js +0 -326
  252. package/moj/vendor/jquery.js +0 -9300
  253. package/moj/version.js +0 -12
  254. package/moj/version.js.map +0 -1
  255. package/moj/version.mjs +0 -4
  256. package/moj/version.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"date-picker.mjs","sources":["../../../../src/moj/components/date-picker/date-picker.mjs"],"sourcesContent":["/**\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 * @param {HTMLElement} $module - HTML element\n * @param {DatePickerConfig} config - config object\n * @class\n */\nexport function DatePicker($module, config = {}) {\n if (!$module) {\n return this\n }\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 this.$module = $module\n this.$input = $module.querySelector('.moj-js-datepicker-input')\n}\n\nDatePicker.prototype.init = function () {\n // Check that required elements are present\n if (!this.$input) {\n return\n }\n if (this.$module.dataset.initialized) {\n return\n }\n\n this.setOptions()\n this.initControls()\n this.$module.setAttribute('data-initialized', 'true')\n}\n\nDatePicker.prototype.initControls = function () {\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.parentNode.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('.moj-js-datepicker-toggle')\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(event)\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 // eslint-disable-next-line prefer-destructuring\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\nDatePicker.prototype.createDialog = function () {\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\nDatePicker.prototype.createCalendar = function () {\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 calendarDay.init()\n this.calendarDays.push(calendarDay)\n dayCount++\n }\n }\n}\n\nDatePicker.prototype.toggleTemplate = function () {\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 */\nDatePicker.prototype.dialogTemplate = function (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\nDatePicker.prototype.createCalendarHeaders = function () {\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 */\nDatePicker.prototype.leadingZeros = function (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\nDatePicker.prototype.setOptions = function () {\n this.setMinAndMaxDatesOnCalendar()\n this.setExcludedDates()\n this.setExcludedDays()\n this.setLeadingZeros()\n this.setWeekStartDay()\n}\n\nDatePicker.prototype.setMinAndMaxDatesOnCalendar = function () {\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\nDatePicker.prototype.setExcludedDates = function () {\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 .flat()\n .filter((item) => item)\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 */\nDatePicker.prototype.parseDateRangeString = function (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\nDatePicker.prototype.setExcludedDays = function () {\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\nDatePicker.prototype.setLeadingZeros = function () {\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\nDatePicker.prototype.setWeekStartDay = function () {\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 */\nDatePicker.prototype.isExcludedDate = function (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 */\nDatePicker.prototype.formattedDateFromString = function (\n dateString,\n fallback = new Date()\n) {\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 = dateString.match(dateFormatPattern)\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 (formattedDate instanceof Date && !isNaN(formattedDate)) {\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 */\nDatePicker.prototype.formattedDateFromDate = function (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 */\nDatePicker.prototype.formattedDateHuman = function (date) {\n return `${this.dayLabels[(date.getDay() + 6) % 7]} ${date.getDate()} ${this.monthLabels[date.getMonth()]} ${date.getFullYear()}`\n}\n\nDatePicker.prototype.backgroundClick = function (event) {\n if (\n this.isOpen() &&\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\nDatePicker.prototype.firstButtonKeydown = function (event) {\n if (event.key === 'Tab' && event.shiftKey) {\n this.$lastButtonInDialog.focus()\n event.preventDefault()\n }\n}\n\nDatePicker.prototype.lastButtonKeydown = function (event) {\n if (event.key === 'Tab' && !event.shiftKey) {\n this.$firstButtonInDialog.focus()\n event.preventDefault()\n }\n}\n\n// render calendar\nDatePicker.prototype.updateCalendar = function () {\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 (let i = 0; i < this.calendarDays.length; i++) {\n const hidden = thisDay.getMonth() !== day.getMonth()\n const disabled = this.isExcludedDate(thisDay)\n\n this.calendarDays[i].update(thisDay, hidden, disabled)\n\n thisDay.setDate(thisDay.getDate() + 1)\n }\n}\n\nDatePicker.prototype.setCurrentDate = function (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\nDatePicker.prototype.selectDate = function (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\nDatePicker.prototype.isOpen = function () {\n return this.$dialog.classList.contains('moj-datepicker__dialog--open')\n}\n\nDatePicker.prototype.toggleDialog = function (event) {\n event.preventDefault()\n if (this.isOpen()) {\n this.closeDialog()\n } else {\n this.setMinAndMaxDatesOnCalendar()\n this.openDialog()\n }\n}\n\nDatePicker.prototype.openDialog = function () {\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\nDatePicker.prototype.closeDialog = function () {\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\nDatePicker.prototype.goToDate = function (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\nDatePicker.prototype.focusNextDay = function () {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() + 1)\n this.goToDate(date)\n}\n\nDatePicker.prototype.focusPreviousDay = function () {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() - 1)\n this.goToDate(date)\n}\n\n// week navigation\nDatePicker.prototype.focusNextWeek = function () {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() + 7)\n this.goToDate(date)\n}\n\nDatePicker.prototype.focusPreviousWeek = function () {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() - 7)\n this.goToDate(date)\n}\n\nDatePicker.prototype.focusFirstDayOfWeek = function () {\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\nDatePicker.prototype.focusLastDayOfWeek = function () {\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\nDatePicker.prototype.focusNextMonth = function (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\nDatePicker.prototype.focusPreviousMonth = function (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\nDatePicker.prototype.focusNextYear = function (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\nDatePicker.prototype.focusPreviousYear = function (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 */\nDatePicker.prototype.parseDataset = function (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 */\nDatePicker.prototype.mergeConfigs = function (...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 * @param {HTMLElement} button\n * @param {number} index\n * @param {number} row\n * @param {number} column\n * @param {DatePicker} picker\n * @class\n */\nfunction DSCalendarDay(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}\n\nDSCalendarDay.prototype.init = function () {\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 */\nDSCalendarDay.prototype.update = function (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\nDSCalendarDay.prototype.click = function (event) {\n this.picker.goToDate(this.date)\n this.picker.selectDate(this.date)\n\n event.stopPropagation()\n event.preventDefault()\n}\n\nDSCalendarDay.prototype.keyPress = function (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 // eslint-disable-next-line no-unused-expressions\n event.shiftKey\n ? this.picker.focusPreviousYear(event)\n : this.picker.focusPreviousMonth(event)\n break\n case 'PageDown':\n // eslint-disable-next-line no-unused-expressions\n event.shiftKey\n ? this.picker.focusNextYear(event)\n : this.picker.focusNextMonth(event)\n break\n default:\n calendarNavKey = false\n break\n }\n\n if (calendarNavKey) {\n event.preventDefault()\n event.stopPropagation()\n }\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":[],"mappings":"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"}
1
+ {"version":3,"file":"date-picker.mjs","sources":["../../../../src/moj/components/date-picker/date-picker.mjs"],"sourcesContent":["import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<DatePickerConfig>}\n */\nexport class DatePicker extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for date picker\n * @param {DatePickerConfig} [config] - Date picker config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $input =\n this.config.input.element ??\n this.$root.querySelector(this.config.input.selector)\n\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\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 = /** @type {DSCalendarDay[]} */ ([])\n this.excludedDates = /** @type {Date[]} */ ([])\n this.excludedDays = /** @type {number[]} */ ([])\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 this.setOptions()\n this.initControls()\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 = /** @type {HTMLButtonElement} */ (\n this.$root.querySelector('.moj-js-datepicker-toggle')\n )\n\n this.$dialogTitle = /** @type {HTMLHeadingElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-month-year')\n )\n\n this.createCalendar()\n\n this.$prevMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-month')\n )\n\n this.$prevYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-year')\n )\n\n this.$nextMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-month')\n )\n\n this.$nextYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-year')\n )\n\n this.$cancelButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-cancel')\n )\n\n this.$okButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-ok')\n )\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.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 *\n * @param {string} datestring - A daterange string in the format \"dd/mm/yyyy-dd/mm/yyyy\"\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 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 selectable\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 /**\n * @param {MouseEvent} event - Click event\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 /**\n * @param {KeyboardEvent} event - Keydown event\n */\n firstButtonKeydown(event) {\n if (event.key === 'Tab' && event.shiftKey) {\n this.$lastButtonInDialog.focus()\n event.preventDefault()\n }\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\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 /**\n * @param {boolean} [focus] - Focus the day button\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 /**\n * @param {Date} date - Date to select\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 /**\n * @param {MouseEvent} event - Click event\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 /**\n * @param {Date} date - Date to go to\n * @param {boolean} [focus] - Focus the day button\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 /**\n * Month navigation\n *\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\n */\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 /**\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\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 /**\n * Year navigation\n *\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\n */\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 /**\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\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 * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-date-picker'\n\n /**\n * Date picker default config\n *\n * @type {DatePickerConfig}\n */\n static defaults = Object.freeze({\n leadingZeros: false,\n weekStartDay: 'monday',\n input: {\n selector: '.moj-js-datepicker-input'\n }\n })\n\n /**\n * Date picker config schema\n *\n * @satisfies {Schema<DatePickerConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n excludedDates: { type: 'string' },\n excludedDays: { type: 'string' },\n leadingZeros: { type: 'boolean' },\n maxDate: { type: 'string' },\n minDate: { type: 'string' },\n weekStartDay: { type: 'string' },\n input: { type: 'object' }\n }\n })\n )\n}\n\nclass DSCalendarDay {\n /**\n *\n * @param {HTMLButtonElement} $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 /**\n * @param {MouseEvent} event - Click event\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 /**\n * @param {KeyboardEvent} event - Keydown event\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} [leadingZeros] - 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 * @property {object} [input] - Input config\n * @property {string} [input.selector] - Selector for the input element\n * @property {Element | null} [input.element] - HTML element for the input\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n"],"names":["DatePicker","ConfigurableComponent","constructor","$root","config","_this$config$input$el","$input","input","element","querySelector","selector","HTMLInputElement","dayLabels","monthLabels","currentDate","Date","setHours","calendarDays","excludedDates","excludedDays","buttonClass","selectedDayButtonClass","currentDayButtonClass","todayButtonClass","setOptions","initControls","id","$dialog","createDialog","createCalendarHeaders","$componentWrapper","document","createElement","$inputWrapper","classList","add","parentElement","insertBefore","appendChild","insertAdjacentHTML","toggleTemplate","insertAdjacentElement","$calendarButton","$dialogTitle","createCalendar","$prevMonthButton","$prevYearButton","$nextMonthButton","$nextYearButton","$cancelButton","$okButton","addEventListener","event","focusPreviousMonth","focusPreviousYear","focusNextMonth","focusNextYear","preventDefault","closeDialog","selectDate","$dialogButtons","querySelectorAll","$firstButtonInDialog","$lastButtonInDialog","length","firstButtonKeydown","lastButtonKeydown","toggleDialog","key","stopPropagation","body","backgroundClick","updateCalendar","titleId","setAttribute","innerHTML","dialogTemplate","hidden","$tbody","dayCount","i","$row","insertRow","j","$cell","$dateButton","calendarDay","DSCalendarDay","push","forEach","day","html","substring","$headerRow","leadingZeros","value","ret","toString","setMinAndMaxDatesOnCalendar","setExcludedDates","setExcludedDays","setWeekStartDay","minDate","formattedDateFromString","maxDate","replace","split","map","item","includes","parseDateRangeString","reduce","dates","items","concat","filter","date","datestring","startDate","endDate","d","getTime","setDate","getDate","weekDays","toLowerCase","weekStartDay","unshift","pop","indexOf","weekStartDayParam","isExcludedDate","excludedDate","toDateString","getDay","dateString","fallback","formattedDate","dateFormatPattern","test","match","exec","month","year","Number","isFinite","formattedDateFromDate","getMonth","getFullYear","formattedDateHuman","isOpen","target","Node","contains","shiftKey","focus","firstOfMonth","dayOfWeek","thisDay","disabled","update","setCurrentDate","$button","remove","calendarDayDate","today","inputDate","removeAttribute","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","moduleName","defaults","Object","freeze","schema","properties","type","index","row","column","picker","keyPress","bind","click","label","accessibleLabel","calendarNavKey"],"mappings":"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"}
@@ -217,3 +217,5 @@
217
217
  margin-bottom: 0; // IE9 +
218
218
  }
219
219
  }
220
+
221
+ /*# sourceMappingURL=_filter.scss.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/moj/components/filter/_filter.scss"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,uCAAuC;;AAEvC;;+EAE+E;;AAE/E;EACE,uCAAuC;EACvC,oDAAoD;;EAEpD;IACE;;oCAEgC;EAClC;AACF;;AAEA;EACE,0CAA0C;EAC1C,0CAA0C;EAC1C,YAAY,EAAE,kCAAkC;EAChD,mBAAmB,EAAE,qCAAqC;;EAE1D;IACE,WAAW;IACX,qBAAqB;IACrB,WAAW;EACb;;EAEA;IACE,gBAAgB;EAClB;AACF;;AAEA,YAAY;AACZ;EACE,WAAW;EACX,iBAAiB,EAAE,oDAAoD;;EAEvE;IACE,gBAAgB;IAChB,sBAAsB;IACtB,cAAc;IACd,kBAAkB;IAClB,WAAW;IACX,SAAS;IACT,UAAU;IACV,cAAc;IACd,gBAAgB;IAChB,6BAA6B;IAC7B,gBAAgB;IAChB,eAAe,EAAE,wBAAwB;IACzC,wBAAwB;IACxB,6CAA6C;;IAE7C,wCAAwC;IACxC;MACE,UAAU;MACV,SAAS;IACX;;IAEA;MACE,WAAW;MACX,cAAc;MACd,kBAAkB;MAClB,QAAQ;MACR,QAAQ;MACR,WAAW;MACX,YAAY;MACZ,gBAAgB,EAAE,6BAA6B;MAC/C,oEAAoE;MACpE,wBAAwB;IAC1B;;IAEA;MACE,8BAA8B;IAChC;EACF;AACF;;AAEA;;EAEE,qBAAqB;EACrB,gBAAgB;EAChB,sBAAsB;AACxB;;AAEA;EACE,SAAS;EACT,UAAU;EACV,YAAY;EACZ,gBAAgB;EAChB,2BAA2B;EAC3B,4BAA4B;EAC5B,6BAA6B;EAC7B,eAAe,EAAE,6BAA6B;EAC9C,wBAAwB;EACxB,gBAAgB;EAChB,uBAAuB;;EAEvB;IACE,aAAa;IACb,+BAA+B;IAC/B,qCAAqC;IACrC;;oCAEgC;EAClC;;EAEA,wCAAwC;EACxC;IACE,UAAU;IACV,SAAS;EACX;;EAEA;IACE,WAAW;IACX,qBAAqB;IACrB,kBAAkB;IAClB,SAAS,EAAE,iBAAiB;IAC5B,WAAW;IACX,YAAY;IACZ,8BAA8B;IAC9B,oEAAoE;IACpE,sBAAsB;EACxB;AACF;;AAEA;EACE,yBAAyB;EACzB,4CAA4C;EAC5C,oDAAoD;;EAEpD;IACE,gBAAgB,EAAE,OAAO;EAC3B;AACF;;AAEA;EACE,YAAY,EAAE,kCAAkC;EAChD,mBAAmB,EAAE,qCAAqC;;EAE1D;IACE,WAAW;IACX,qBAAqB;IACrB,WAAW;EACb;AACF;;AAEA;;EAEE,qBAAqB;EACrB,gBAAgB;EAChB,sBAAsB;EACtB,uBAAuB;AACzB;;AAEA;EACE,+BAA+B,EAAE,mCAAmC;EACpE,eAAe;EACf,YAAY;;EAEZ;IACE,qBAAqB;IACrB,8BAA8B;EAChC;AACF;;AAEA;EACE,qBAAqB;EACrB,4BAA4B;EAC5B,yBAAyB;EACzB,uCAAuC;EACvC,4BAA4B;EAC5B,uCAAuC;EACvC,qBAAqB;EACrB,uBAAuB;;EAEvB;;IAEE,4BAA4B;EAC9B;;EAEA;IACE,+BAA+B;IAC/B,qCAAqC;EACvC;;EAEA;IACE,4BAA4B;IAC5B,uCAAuC;EACzC;;EAEA;IACE,WAAW;IACX,qBAAqB;IACrB,WAAW;IACX,YAAY;IACZ,6BAA6B;IAC7B,mEAAmE;IACnE,iBAAiB;IACjB,sBAAsB;EACxB;;EAEA;IACE,yEAAyE;EAC3E;AACF;;AAEA;EACE,gBAAgB;EAChB,yBAAyB;EACzB,oDAAoD;;EAEpD;IACE,gBAAgB,EAAE,OAAO;EAC3B;AACF","file":"_filter.scss","sourcesContent":["@use \"../../settings/assets\" as *;\n@use \"../../vendor/govuk-frontend\" as *;\n\n/* ==========================================================================\n #FILTER\n ========================================================================== */\n\n.moj-filter {\n background-color: govuk-colour(\"white\");\n box-shadow: inset 0 0 0 1px govuk-colour(\"mid-grey\");\n\n &:focus {\n box-shadow:\n 0 -2px $govuk-focus-colour,\n 0 4px $govuk-focus-text-colour;\n }\n}\n\n.moj-filter__header {\n padding: govuk-spacing(2) govuk-spacing(4);\n background-color: govuk-colour(\"mid-grey\");\n font-size: 0; // Hide whitespace between elements\n text-align: justify; // Trick to remove the need for floats\n\n &::after {\n content: \"\";\n display: inline-block;\n width: 100%;\n }\n\n [class^=\"govuk-heading-\"] {\n margin-bottom: 0;\n }\n}\n\n// JavaScript\n.moj-filter__legend {\n width: 100%;\n overflow: visible; // Override govuk to allow for focus style to be seen\n\n button {\n appearance: none;\n box-sizing: border-box;\n display: block;\n position: relative;\n width: 100%;\n margin: 0;\n padding: 0;\n border: 0 none;\n border-radius: 0;\n background-color: transparent;\n text-align: left;\n cursor: pointer; // Adam would not approve\n -webkit-appearance: none;\n @include govuk-font($size: 24, $weight: bold);\n\n // Fix unwanted button padding in Firefox\n &::-moz-focus-inner {\n padding: 0;\n border: 0;\n }\n\n &::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n right: 0;\n width: 16px;\n height: 16px;\n margin-top: -8px; // Half the height of the icon\n background-image: url(#{$moj-images-path}icon-toggle-plus-minus.svg);\n background-position: 0 0;\n }\n\n &[aria-expanded=\"true\"]::after {\n background-position: 16px 16px;\n }\n }\n}\n\n.moj-filter__header-title,\n.moj-filter__header-action {\n display: inline-block;\n text-align: left;\n vertical-align: middle;\n}\n\n.moj-filter__close {\n margin: 0;\n padding: 0;\n border: none;\n border-radius: 0;\n // @include govuk-focusable;\n color: govuk-colour(\"black\");\n background-color: transparent;\n cursor: pointer; // I know Adam won’t like this\n -webkit-appearance: none;\n appearance: none;\n @include govuk-font(19);\n\n &:focus {\n outline: none;\n color: $govuk-focus-text-colour;\n background-color: $govuk-focus-colour;\n box-shadow:\n 0 -2px $govuk-focus-colour,\n 0 4px $govuk-focus-text-colour;\n }\n\n // Fix unwanted button padding in Firefox\n &::-moz-focus-inner {\n padding: 0;\n border: 0;\n }\n\n &::before {\n content: \"\";\n display: inline-block;\n position: relative;\n top: -1px; // Alignment tweak\n width: 14px;\n height: 14px;\n margin-right: govuk-spacing(1);\n background-image: url(#{$moj-images-path}icon-close-cross-black.svg);\n vertical-align: middle;\n }\n}\n\n.moj-filter__selected {\n padding: govuk-spacing(4);\n background-color: govuk-colour(\"light-grey\");\n box-shadow: inset 0 0 0 1px govuk-colour(\"mid-grey\");\n\n ul:last-of-type {\n margin-bottom: 0; // IE9 +\n }\n}\n\n.moj-filter__selected-heading {\n font-size: 0; // Hide whitespace between elements\n text-align: justify; // Trick to remove the need for floats\n\n &::after {\n content: \"\";\n display: inline-block;\n width: 100%;\n }\n}\n\n.moj-filter__heading-title,\n.moj-filter__heading-action {\n display: inline-block;\n text-align: left;\n vertical-align: middle;\n @include govuk-font(16);\n}\n\n.moj-filter-tags {\n margin-bottom: govuk-spacing(4); // Needs to adjust to 15px on mobile\n padding-left: 0;\n font-size: 0;\n\n li {\n display: inline-block;\n margin-right: govuk-spacing(2);\n }\n}\n\n.moj-filter__tag {\n display: inline-block;\n margin-top: govuk-spacing(1);\n padding: govuk-spacing(1);\n border: 1px solid govuk-colour(\"black\");\n color: govuk-colour(\"black\");\n background-color: govuk-colour(\"white\");\n text-decoration: none;\n @include govuk-font(16);\n\n &:link,\n &:visited {\n color: govuk-colour(\"black\");\n }\n\n &:focus {\n color: $govuk-focus-text-colour;\n background-color: $govuk-focus-colour;\n }\n\n &:hover {\n color: govuk-colour(\"white\");\n background-color: govuk-colour(\"black\");\n }\n\n &::after {\n content: \"\";\n display: inline-block;\n width: 10px;\n height: 10px;\n margin-left: govuk-spacing(1);\n background-image: url(#{$moj-images-path}icon-tag-remove-cross.svg);\n font-weight: bold;\n vertical-align: middle;\n }\n\n &:hover::after {\n background-image: url(#{$moj-images-path}icon-tag-remove-cross-white.svg);\n }\n}\n\n.moj-filter__options {\n margin-top: -1px;\n padding: govuk-spacing(4);\n box-shadow: inset 0 0 0 1px govuk-colour(\"mid-grey\");\n\n div:last-of-type {\n margin-bottom: 0; // IE9 +\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  {% from "govuk/components/button/macro.njk" import govukButton %}
2
2
 
3
- <div class="moj-filter" {%- for attribute, value in params.attributes %} {{ attribute }}="{{ value }}"{% endfor %}>
3
+ <div class="moj-filter" data-module="moj-filter" {%- for attribute, value in params.attributes %} {{ attribute }}="{{ value }}"{% endfor %}>
4
4
 
5
5
  <div class="moj-filter__header">
6
6
 
@@ -0,0 +1,185 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('govuk-frontend')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'govuk-frontend'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.MOJFrontend = global.MOJFrontend || {}, global.GOVUKFrontend));
5
+ })(this, (function (exports, govukFrontend) { 'use strict';
6
+
7
+ /**
8
+ * @augments {ConfigurableComponent<FilterToggleButtonConfig>}
9
+ */
10
+ class FilterToggleButton extends govukFrontend.ConfigurableComponent {
11
+ /**
12
+ * @param {Element | null} $root - HTML element to use for filter toggle button
13
+ * @param {FilterToggleButtonConfig} [config] - Filter toggle button config
14
+ */
15
+ constructor($root, config = {}) {
16
+ var _this$config$toggleBu, _this$config$closeBut;
17
+ super($root, config);
18
+ const $toggleButtonContainer = (_this$config$toggleBu = this.config.toggleButtonContainer.element) != null ? _this$config$toggleBu : document.querySelector(this.config.toggleButtonContainer.selector);
19
+ const $closeButtonContainer = (_this$config$closeBut = this.config.closeButtonContainer.element) != null ? _this$config$closeBut : this.$root.querySelector(this.config.closeButtonContainer.selector);
20
+ if (!($toggleButtonContainer instanceof HTMLElement && $closeButtonContainer instanceof HTMLElement)) {
21
+ return this;
22
+ }
23
+ this.$toggleButtonContainer = $toggleButtonContainer;
24
+ this.$closeButtonContainer = $closeButtonContainer;
25
+ this.createToggleButton();
26
+ this.setupResponsiveChecks();
27
+ this.$root.setAttribute('tabindex', '-1');
28
+ if (this.config.startHidden) {
29
+ this.hideMenu();
30
+ }
31
+ }
32
+ setupResponsiveChecks() {
33
+ this.mq = window.matchMedia(this.config.bigModeMediaQuery);
34
+ this.mq.addListener(this.checkMode.bind(this));
35
+ this.checkMode();
36
+ }
37
+ createToggleButton() {
38
+ this.$menuButton = document.createElement('button');
39
+ this.$menuButton.setAttribute('type', 'button');
40
+ this.$menuButton.setAttribute('aria-haspopup', 'true');
41
+ this.$menuButton.setAttribute('aria-expanded', 'false');
42
+ this.$menuButton.className = `govuk-button ${this.config.toggleButton.classes}`;
43
+ this.$menuButton.textContent = this.config.toggleButton.showText;
44
+ this.$menuButton.addEventListener('click', this.onMenuButtonClick.bind(this));
45
+ this.$toggleButtonContainer.append(this.$menuButton);
46
+ }
47
+ checkMode() {
48
+ if (this.mq.matches) {
49
+ this.enableBigMode();
50
+ } else {
51
+ this.enableSmallMode();
52
+ }
53
+ }
54
+ enableBigMode() {
55
+ this.showMenu();
56
+ this.removeCloseButton();
57
+ }
58
+ enableSmallMode() {
59
+ this.hideMenu();
60
+ this.addCloseButton();
61
+ }
62
+ addCloseButton() {
63
+ this.$closeButton = document.createElement('button');
64
+ this.$closeButton.setAttribute('type', 'button');
65
+ this.$closeButton.className = this.config.closeButton.classes;
66
+ this.$closeButton.textContent = this.config.closeButton.text;
67
+ this.$closeButton.addEventListener('click', this.onCloseClick.bind(this));
68
+ this.$closeButtonContainer.append(this.$closeButton);
69
+ }
70
+ onCloseClick() {
71
+ this.hideMenu();
72
+ this.$menuButton.focus();
73
+ }
74
+ removeCloseButton() {
75
+ if (this.$closeButton) {
76
+ this.$closeButton.remove();
77
+ this.$closeButton = null;
78
+ }
79
+ }
80
+ hideMenu() {
81
+ this.$menuButton.setAttribute('aria-expanded', 'false');
82
+ this.$root.classList.add('moj-js-hidden');
83
+ this.$menuButton.textContent = this.config.toggleButton.showText;
84
+ }
85
+ showMenu() {
86
+ this.$menuButton.setAttribute('aria-expanded', 'true');
87
+ this.$root.classList.remove('moj-js-hidden');
88
+ this.$menuButton.textContent = this.config.toggleButton.hideText;
89
+ }
90
+ onMenuButtonClick() {
91
+ this.toggle();
92
+ }
93
+ toggle() {
94
+ if (this.$menuButton.getAttribute('aria-expanded') === 'false') {
95
+ this.showMenu();
96
+ this.$root.focus();
97
+ } else {
98
+ this.hideMenu();
99
+ }
100
+ }
101
+
102
+ /**
103
+ * Name for the component used when initialising using data-module attributes.
104
+ */
105
+ }
106
+
107
+ /**
108
+ * @typedef {object} FilterToggleButtonConfig
109
+ * @property {string} [bigModeMediaQuery] - Media query for big mode
110
+ * @property {boolean} [startHidden] - Whether to start hidden
111
+ * @property {object} [toggleButton] - Toggle button config
112
+ * @property {string} [toggleButton.showText] - Text for show button
113
+ * @property {string} [toggleButton.hideText] - Text for hide button
114
+ * @property {string} [toggleButton.classes] - Classes for toggle button
115
+ * @property {object} [toggleButtonContainer] - Toggle button container config
116
+ * @property {string} [toggleButtonContainer.selector] - Selector for toggle button container
117
+ * @property {Element | null} [toggleButtonContainer.element] - HTML element for toggle button container
118
+ * @property {object} [closeButton] - Close button config
119
+ * @property {string} [closeButton.text] - Text for close button
120
+ * @property {string} [closeButton.classes] - Classes for close button
121
+ * @property {object} [closeButtonContainer] - Close button container config
122
+ * @property {string} [closeButtonContainer.selector] - Selector for close button container
123
+ * @property {Element | null} [closeButtonContainer.element] - HTML element for close button container
124
+ */
125
+
126
+ /**
127
+ * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'
128
+ */
129
+ FilterToggleButton.moduleName = 'moj-filter';
130
+ /**
131
+ * Filter toggle button config
132
+ *
133
+ * @type {FilterToggleButtonConfig}
134
+ */
135
+ FilterToggleButton.defaults = Object.freeze({
136
+ bigModeMediaQuery: '(min-width: 48.0625em)',
137
+ startHidden: true,
138
+ toggleButton: {
139
+ showText: 'Show filter',
140
+ hideText: 'Hide filter',
141
+ classes: 'govuk-button--secondary'
142
+ },
143
+ toggleButtonContainer: {
144
+ selector: '.moj-action-bar__filter'
145
+ },
146
+ closeButton: {
147
+ text: 'Close',
148
+ classes: 'moj-filter__close'
149
+ },
150
+ closeButtonContainer: {
151
+ selector: '.moj-filter__header-action'
152
+ }
153
+ });
154
+ /**
155
+ * Filter toggle button config schema
156
+ *
157
+ * @satisfies {Schema<FilterToggleButtonConfig>}
158
+ */
159
+ FilterToggleButton.schema = Object.freeze(/** @type {const} */{
160
+ properties: {
161
+ bigModeMediaQuery: {
162
+ type: 'string'
163
+ },
164
+ startHidden: {
165
+ type: 'boolean'
166
+ },
167
+ toggleButton: {
168
+ type: 'object'
169
+ },
170
+ toggleButtonContainer: {
171
+ type: 'object'
172
+ },
173
+ closeButton: {
174
+ type: 'object'
175
+ },
176
+ closeButtonContainer: {
177
+ type: 'object'
178
+ }
179
+ }
180
+ });
181
+
182
+ exports.FilterToggleButton = FilterToggleButton;
183
+
184
+ }));
185
+ //# sourceMappingURL=filter-toggle-button.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-toggle-button.bundle.js","sources":["../../../../src/moj/components/filter-toggle-button/filter-toggle-button.mjs"],"sourcesContent":["import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<FilterToggleButtonConfig>}\n */\nexport class FilterToggleButton extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for filter toggle button\n * @param {FilterToggleButtonConfig} [config] - Filter toggle button config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $toggleButtonContainer =\n this.config.toggleButtonContainer.element ??\n document.querySelector(this.config.toggleButtonContainer.selector)\n\n const $closeButtonContainer =\n this.config.closeButtonContainer.element ??\n this.$root.querySelector(this.config.closeButtonContainer.selector)\n\n if (\n !(\n $toggleButtonContainer instanceof HTMLElement &&\n $closeButtonContainer instanceof HTMLElement\n )\n ) {\n return this\n }\n\n this.$toggleButtonContainer = $toggleButtonContainer\n this.$closeButtonContainer = $closeButtonContainer\n\n this.createToggleButton()\n this.setupResponsiveChecks()\n\n this.$root.setAttribute('tabindex', '-1')\n\n if (this.config.startHidden) {\n this.hideMenu()\n }\n }\n\n setupResponsiveChecks() {\n this.mq = window.matchMedia(this.config.bigModeMediaQuery)\n this.mq.addListener(this.checkMode.bind(this))\n this.checkMode()\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.config.toggleButton.classes}`\n this.$menuButton.textContent = this.config.toggleButton.showText\n\n this.$menuButton.addEventListener(\n 'click',\n this.onMenuButtonClick.bind(this)\n )\n\n this.$toggleButtonContainer.append(this.$menuButton)\n }\n\n checkMode() {\n if (this.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 this.$closeButton = document.createElement('button')\n this.$closeButton.setAttribute('type', 'button')\n\n this.$closeButton.className = this.config.closeButton.classes\n this.$closeButton.textContent = this.config.closeButton.text\n\n this.$closeButton.addEventListener('click', this.onCloseClick.bind(this))\n this.$closeButtonContainer.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.$root.classList.add('moj-js-hidden')\n this.$menuButton.textContent = this.config.toggleButton.showText\n }\n\n showMenu() {\n this.$menuButton.setAttribute('aria-expanded', 'true')\n this.$root.classList.remove('moj-js-hidden')\n this.$menuButton.textContent = this.config.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.$root.focus()\n } else {\n this.hideMenu()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-filter'\n\n /**\n * Filter toggle button config\n *\n * @type {FilterToggleButtonConfig}\n */\n static defaults = Object.freeze({\n bigModeMediaQuery: '(min-width: 48.0625em)',\n startHidden: true,\n toggleButton: {\n showText: 'Show filter',\n hideText: 'Hide filter',\n classes: 'govuk-button--secondary'\n },\n toggleButtonContainer: {\n selector: '.moj-action-bar__filter'\n },\n closeButton: {\n text: 'Close',\n classes: 'moj-filter__close'\n },\n closeButtonContainer: {\n selector: '.moj-filter__header-action'\n }\n })\n\n /**\n * Filter toggle button config schema\n *\n * @satisfies {Schema<FilterToggleButtonConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n bigModeMediaQuery: { type: 'string' },\n startHidden: { type: 'boolean' },\n toggleButton: { type: 'object' },\n toggleButtonContainer: { type: 'object' },\n closeButton: { type: 'object' },\n closeButtonContainer: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} FilterToggleButtonConfig\n * @property {string} [bigModeMediaQuery] - Media query for big mode\n * @property {boolean} [startHidden] - Whether to start hidden\n * @property {object} [toggleButton] - Toggle button config\n * @property {string} [toggleButton.showText] - Text for show button\n * @property {string} [toggleButton.hideText] - Text for hide button\n * @property {string} [toggleButton.classes] - Classes for toggle button\n * @property {object} [toggleButtonContainer] - Toggle button container config\n * @property {string} [toggleButtonContainer.selector] - Selector for toggle button container\n * @property {Element | null} [toggleButtonContainer.element] - HTML element for toggle button container\n * @property {object} [closeButton] - Close button config\n * @property {string} [closeButton.text] - Text for close button\n * @property {string} [closeButton.classes] - Classes for close button\n * @property {object} [closeButtonContainer] - Close button container config\n * @property {string} [closeButtonContainer.selector] - Selector for close button container\n * @property {Element | null} [closeButtonContainer.element] - HTML element for close button container\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n"],"names":["FilterToggleButton","ConfigurableComponent","constructor","$root","config","_this$config$toggleBu","_this$config$closeBut","$toggleButtonContainer","toggleButtonContainer","element","document","querySelector","selector","$closeButtonContainer","closeButtonContainer","HTMLElement","createToggleButton","setupResponsiveChecks","setAttribute","startHidden","hideMenu","mq","window","matchMedia","bigModeMediaQuery","addListener","checkMode","bind","$menuButton","createElement","className","toggleButton","classes","textContent","showText","addEventListener","onMenuButtonClick","append","matches","enableBigMode","enableSmallMode","showMenu","removeCloseButton","addCloseButton","$closeButton","closeButton","text","onCloseClick","focus","remove","classList","add","hideText","toggle","getAttribute","moduleName","defaults","Object","freeze","schema","properties","type"],"mappings":"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"}