@ministryofjustice/frontend 5.0.0 → 5.1.1

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 (114) hide show
  1. package/moj/all.bundle.js +1598 -1062
  2. package/moj/all.bundle.js.map +1 -1
  3. package/moj/all.bundle.mjs +1894 -1054
  4. package/moj/all.bundle.mjs.map +1 -1
  5. package/moj/all.mjs +7 -90
  6. package/moj/all.mjs.map +1 -1
  7. package/moj/all.scss +1 -0
  8. package/moj/all.scss.map +1 -1
  9. package/moj/common/index.mjs +57 -0
  10. package/moj/common/index.mjs.map +1 -0
  11. package/moj/common/moj-frontend-version.mjs +14 -0
  12. package/moj/common/moj-frontend-version.mjs.map +1 -0
  13. package/moj/components/add-another/add-another.bundle.js +105 -76
  14. package/moj/components/add-another/add-another.bundle.js.map +1 -1
  15. package/moj/components/add-another/add-another.bundle.mjs +222 -71
  16. package/moj/components/add-another/add-another.bundle.mjs.map +1 -1
  17. package/moj/components/add-another/add-another.mjs +103 -72
  18. package/moj/components/add-another/add-another.mjs.map +1 -1
  19. package/moj/components/alert/alert.bundle.js +115 -191
  20. package/moj/components/alert/alert.bundle.js.map +1 -1
  21. package/moj/components/alert/alert.bundle.mjs +354 -186
  22. package/moj/components/alert/alert.bundle.mjs.map +1 -1
  23. package/moj/components/alert/alert.mjs +55 -140
  24. package/moj/components/alert/alert.mjs.map +1 -1
  25. package/moj/components/button-menu/README.md +3 -1
  26. package/moj/components/button-menu/button-menu.bundle.js +91 -120
  27. package/moj/components/button-menu/button-menu.bundle.js.map +1 -1
  28. package/moj/components/button-menu/button-menu.bundle.mjs +329 -114
  29. package/moj/components/button-menu/button-menu.bundle.mjs.map +1 -1
  30. package/moj/components/button-menu/button-menu.mjs +89 -116
  31. package/moj/components/button-menu/button-menu.mjs.map +1 -1
  32. package/moj/components/date-picker/date-picker.bundle.js +174 -154
  33. package/moj/components/date-picker/date-picker.bundle.js.map +1 -1
  34. package/moj/components/date-picker/date-picker.bundle.mjs +411 -147
  35. package/moj/components/date-picker/date-picker.bundle.mjs.map +1 -1
  36. package/moj/components/date-picker/date-picker.mjs +172 -150
  37. package/moj/components/date-picker/date-picker.mjs.map +1 -1
  38. package/moj/components/filter/template.njk +1 -1
  39. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js +133 -44
  40. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js.map +1 -1
  41. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs +374 -41
  42. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs.map +1 -1
  43. package/moj/components/filter-toggle-button/filter-toggle-button.mjs +131 -40
  44. package/moj/components/filter-toggle-button/filter-toggle-button.mjs.map +1 -1
  45. package/moj/components/form-validator/form-validator.bundle.js +159 -69
  46. package/moj/components/form-validator/form-validator.bundle.js.map +1 -1
  47. package/moj/components/form-validator/form-validator.bundle.mjs +399 -65
  48. package/moj/components/form-validator/form-validator.bundle.mjs.map +1 -1
  49. package/moj/components/form-validator/form-validator.mjs +134 -54
  50. package/moj/components/form-validator/form-validator.mjs.map +1 -1
  51. package/moj/components/multi-file-upload/multi-file-upload.bundle.js +291 -117
  52. package/moj/components/multi-file-upload/multi-file-upload.bundle.js.map +1 -1
  53. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs +527 -109
  54. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs.map +1 -1
  55. package/moj/components/multi-file-upload/multi-file-upload.mjs +288 -101
  56. package/moj/components/multi-file-upload/multi-file-upload.mjs.map +1 -1
  57. package/moj/components/multi-file-upload/template.njk +1 -1
  58. package/moj/components/multi-select/multi-select.bundle.js +106 -41
  59. package/moj/components/multi-select/multi-select.bundle.js.map +1 -1
  60. package/moj/components/multi-select/multi-select.bundle.mjs +346 -37
  61. package/moj/components/multi-select/multi-select.bundle.mjs.map +1 -1
  62. package/moj/components/multi-select/multi-select.mjs +104 -37
  63. package/moj/components/multi-select/multi-select.mjs.map +1 -1
  64. package/moj/components/password-reveal/_password-reveal.scss +3 -1
  65. package/moj/components/password-reveal/_password-reveal.scss.map +1 -1
  66. package/moj/components/password-reveal/password-reveal.bundle.js +32 -29
  67. package/moj/components/password-reveal/password-reveal.bundle.js.map +1 -1
  68. package/moj/components/password-reveal/password-reveal.bundle.mjs +149 -24
  69. package/moj/components/password-reveal/password-reveal.bundle.mjs.map +1 -1
  70. package/moj/components/password-reveal/password-reveal.mjs +30 -25
  71. package/moj/components/password-reveal/password-reveal.mjs.map +1 -1
  72. package/moj/components/rich-text-editor/README.md +4 -3
  73. package/moj/components/rich-text-editor/rich-text-editor.bundle.js +127 -62
  74. package/moj/components/rich-text-editor/rich-text-editor.bundle.js.map +1 -1
  75. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs +367 -58
  76. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs.map +1 -1
  77. package/moj/components/rich-text-editor/rich-text-editor.mjs +125 -58
  78. package/moj/components/rich-text-editor/rich-text-editor.mjs.map +1 -1
  79. package/moj/components/search-toggle/search-toggle.bundle.js +94 -26
  80. package/moj/components/search-toggle/search-toggle.bundle.js.map +1 -1
  81. package/moj/components/search-toggle/search-toggle.bundle.mjs +334 -22
  82. package/moj/components/search-toggle/search-toggle.bundle.mjs.map +1 -1
  83. package/moj/components/search-toggle/search-toggle.mjs +92 -22
  84. package/moj/components/search-toggle/search-toggle.mjs.map +1 -1
  85. package/moj/components/sortable-table/_sortable-table.scss +3 -42
  86. package/moj/components/sortable-table/_sortable-table.scss.map +1 -1
  87. package/moj/components/sortable-table/sortable-table.bundle.js +200 -83
  88. package/moj/components/sortable-table/sortable-table.bundle.js.map +1 -1
  89. package/moj/components/sortable-table/sortable-table.bundle.mjs +439 -78
  90. package/moj/components/sortable-table/sortable-table.bundle.mjs.map +1 -1
  91. package/moj/components/sortable-table/sortable-table.mjs +198 -79
  92. package/moj/components/sortable-table/sortable-table.mjs.map +1 -1
  93. package/moj/core/_all.scss +3 -0
  94. package/moj/core/_all.scss.map +1 -0
  95. package/moj/core/_moj-frontend-properties.scss +7 -0
  96. package/moj/core/_moj-frontend-properties.scss.map +1 -0
  97. package/moj/filters/prototype-kit-13-filters.js +4 -3
  98. package/moj/helpers.bundle.js +22 -77
  99. package/moj/helpers.bundle.js.map +1 -1
  100. package/moj/helpers.bundle.mjs +23 -74
  101. package/moj/helpers.bundle.mjs.map +1 -1
  102. package/moj/helpers.mjs +23 -74
  103. package/moj/helpers.mjs.map +1 -1
  104. package/moj/moj-frontend.min.css +1 -1
  105. package/moj/moj-frontend.min.css.map +1 -1
  106. package/moj/moj-frontend.min.js +1 -1
  107. package/moj/moj-frontend.min.js.map +1 -1
  108. package/package.json +1 -1
  109. package/moj/version.bundle.js +0 -12
  110. package/moj/version.bundle.js.map +0 -1
  111. package/moj/version.bundle.mjs +0 -4
  112. package/moj/version.bundle.mjs.map +0 -1
  113. package/moj/version.mjs +0 -4
  114. package/moj/version.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"date-picker.bundle.mjs","sources":["../../../../src/moj/components/date-picker/date-picker.mjs"],"sourcesContent":["export class DatePicker {\n /**\n * @param {Element | null} $module - HTML element to use for date picker\n * @param {DatePickerConfig} [config] - Date picker config\n */\n constructor($module, config = {}) {\n if (!$module || !($module instanceof HTMLElement)) {\n return this\n }\n\n const $input = $module.querySelector('.moj-js-datepicker-input')\n\n // Check that required elements are present\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$module = $module\n this.$input = $input\n\n const schema = Object.freeze({\n properties: {\n excludedDates: { type: 'string' },\n excludedDays: { type: 'string' },\n leadingZeros: { type: 'string' },\n maxDate: { type: 'string' },\n minDate: { type: 'string' },\n weekStartDay: { type: 'string' }\n }\n })\n\n const defaults = {\n leadingZeros: false,\n weekStartDay: 'monday'\n }\n\n // data attributes override JS config, which overrides defaults\n this.config = this.mergeConfigs(\n defaults,\n config,\n this.parseDataset(schema, $module.dataset)\n )\n\n this.dayLabels = [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday'\n ]\n\n this.monthLabels = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n\n this.currentDate = new Date()\n this.currentDate.setHours(0, 0, 0, 0)\n this.calendarDays = []\n this.excludedDates = []\n this.excludedDays = []\n\n this.buttonClass = 'moj-datepicker__button'\n this.selectedDayButtonClass = 'moj-datepicker__button--selected'\n this.currentDayButtonClass = 'moj-datepicker__button--current'\n this.todayButtonClass = 'moj-datepicker__button--today'\n\n if (this.$module.dataset.initialized) {\n return this\n }\n\n this.setOptions()\n this.initControls()\n this.$module.setAttribute('data-initialized', 'true')\n }\n\n initControls() {\n this.id = `datepicker-${this.$input.id}`\n\n this.$dialog = this.createDialog()\n this.createCalendarHeaders()\n\n const $componentWrapper = document.createElement('div')\n const $inputWrapper = document.createElement('div')\n $componentWrapper.classList.add('moj-datepicker__wrapper')\n $inputWrapper.classList.add('govuk-input__wrapper')\n\n this.$input.parentElement.insertBefore($componentWrapper, this.$input)\n $componentWrapper.appendChild($inputWrapper)\n $inputWrapper.appendChild(this.$input)\n\n $inputWrapper.insertAdjacentHTML('beforeend', this.toggleTemplate())\n $componentWrapper.insertAdjacentElement('beforeend', this.$dialog)\n\n this.$calendarButton = this.$module.querySelector(\n '.moj-js-datepicker-toggle'\n )\n this.$dialogTitle = this.$dialog.querySelector(\n '.moj-js-datepicker-month-year'\n )\n\n this.createCalendar()\n\n this.$prevMonthButton = this.$dialog.querySelector(\n '.moj-js-datepicker-prev-month'\n )\n this.$prevYearButton = this.$dialog.querySelector(\n '.moj-js-datepicker-prev-year'\n )\n this.$nextMonthButton = this.$dialog.querySelector(\n '.moj-js-datepicker-next-month'\n )\n this.$nextYearButton = this.$dialog.querySelector(\n '.moj-js-datepicker-next-year'\n )\n this.$cancelButton = this.$dialog.querySelector('.moj-js-datepicker-cancel')\n this.$okButton = this.$dialog.querySelector('.moj-js-datepicker-ok')\n\n // add event listeners\n this.$prevMonthButton.addEventListener('click', (event) =>\n this.focusPreviousMonth(event, false)\n )\n this.$prevYearButton.addEventListener('click', (event) =>\n this.focusPreviousYear(event, false)\n )\n this.$nextMonthButton.addEventListener('click', (event) =>\n this.focusNextMonth(event, false)\n )\n this.$nextYearButton.addEventListener('click', (event) =>\n this.focusNextYear(event, false)\n )\n this.$cancelButton.addEventListener('click', (event) => {\n event.preventDefault()\n this.closeDialog()\n })\n this.$okButton.addEventListener('click', () => {\n this.selectDate(this.currentDate)\n })\n\n const dialogButtons = this.$dialog.querySelectorAll(\n 'button:not([disabled=\"true\"])'\n )\n\n this.$firstButtonInDialog = dialogButtons[0]\n this.$lastButtonInDialog = dialogButtons[dialogButtons.length - 1]\n this.$firstButtonInDialog.addEventListener('keydown', (event) =>\n this.firstButtonKeydown(event)\n )\n this.$lastButtonInDialog.addEventListener('keydown', (event) =>\n this.lastButtonKeydown(event)\n )\n\n this.$calendarButton.addEventListener('click', (event) =>\n this.toggleDialog(event)\n )\n\n this.$dialog.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') {\n this.closeDialog()\n event.preventDefault()\n event.stopPropagation()\n }\n })\n\n document.body.addEventListener('mouseup', (event) =>\n this.backgroundClick(event)\n )\n\n // populates calendar with initial dates, avoids Wave errors about null buttons\n this.updateCalendar()\n }\n\n createDialog() {\n const titleId = `datepicker-title-${this.$input.id}`\n const $dialog = document.createElement('div')\n\n $dialog.id = this.id\n $dialog.setAttribute('class', 'moj-datepicker__dialog')\n $dialog.setAttribute('role', 'dialog')\n $dialog.setAttribute('aria-modal', 'true')\n $dialog.setAttribute('aria-labelledby', titleId)\n $dialog.innerHTML = this.dialogTemplate(titleId)\n $dialog.hidden = true\n\n return $dialog\n }\n\n createCalendar() {\n const $tbody = this.$dialog.querySelector('tbody')\n let dayCount = 0\n for (let i = 0; i < 6; i++) {\n // create row\n const $row = $tbody.insertRow(i)\n\n for (let j = 0; j < 7; j++) {\n // create cell (day)\n const $cell = document.createElement('td')\n const $dateButton = document.createElement('button')\n\n $cell.appendChild($dateButton)\n $row.appendChild($cell)\n\n const calendarDay = new DSCalendarDay($dateButton, dayCount, i, j, this)\n this.calendarDays.push(calendarDay)\n dayCount++\n }\n }\n }\n\n toggleTemplate() {\n return `<button class=\"moj-datepicker__toggle moj-js-datepicker-toggle\" type=\"button\" aria-haspopup=\"dialog\" aria-controls=\"${this.id}\" aria-expanded=\"false\">\n <span class=\"govuk-visually-hidden\">Choose date</span>\n <svg width=\"32\" height=\"24\" focusable=\"false\" class=\"moj-datepicker-icon\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\">\n <path\n fill=\"currentColor\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M16.1333 2.93333H5.86668V4.4C5.86668 5.21002 5.21003 5.86667 4.40002 5.86667C3.59 5.86667 2.93335 5.21002 2.93335 4.4V2.93333H2C0.895431 2.93333 0 3.82877 0 4.93334V19.2667C0 20.3712 0.89543 21.2667 2 21.2667H20C21.1046 21.2667 22 20.3712 22 19.2667V4.93333C22 3.82876 21.1046 2.93333 20 2.93333H19.0667V4.4C19.0667 5.21002 18.41 5.86667 17.6 5.86667C16.79 5.86667 16.1333 5.21002 16.1333 4.4V2.93333ZM20.5333 8.06667H1.46665V18.8C1.46665 19.3523 1.91436 19.8 2.46665 19.8H19.5333C20.0856 19.8 20.5333 19.3523 20.5333 18.8V8.06667Z\"\n ></path>\n <rect x=\"3.66669\" width=\"1.46667\" height=\"5.13333\" rx=\"0.733333\" fill=\"currentColor\"></rect>\n <rect x=\"16.8667\" width=\"1.46667\" height=\"5.13333\" rx=\"0.733333\" fill=\"currentColor\"></rect>\n </svg>\n </button>`\n }\n\n /**\n * HTML template for calendar dialog\n *\n * @param {string} [titleId] - Id attribute for dialog title\n * @returns {string}\n */\n dialogTemplate(titleId) {\n return `<div class=\"moj-datepicker__dialog-header\">\n <div class=\"moj-datepicker__dialog-navbuttons\">\n <button class=\"moj-datepicker__button moj-js-datepicker-prev-year\">\n <span class=\"govuk-visually-hidden\">Previous year</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.1643 20L28.9572 14.2071L27.5429 12.7929L20.3358 20L27.5429 27.2071L28.9572 25.7929L23.1643 20Z\" fill=\"currentColor\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.1643 20L22.9572 14.2071L21.5429 12.7929L14.3358 20L21.5429 27.2071L22.9572 25.7929L17.1643 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n\n <button class=\"moj-datepicker__button moj-js-datepicker-prev-month\">\n <span class=\"govuk-visually-hidden\">Previous month</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.5729 20L25.7865 14.2071L24.5137 12.7929L18.0273 20L24.5137 27.2071L25.7865 25.7929L20.5729 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n </div>\n\n <h2 id=\"${titleId}\" class=\"moj-datepicker__dialog-title moj-js-datepicker-month-year\" aria-live=\"polite\">June 2020</h2>\n\n <div class=\"moj-datepicker__dialog-navbuttons\">\n <button class=\"moj-datepicker__button moj-js-datepicker-next-month\">\n <span class=\"govuk-visually-hidden\">Next month</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.4271 20L18.2135 14.2071L19.4863 12.7929L25.9727 20L19.4863 27.2071L18.2135 25.7929L23.4271 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n\n <button class=\"moj-datepicker__button moj-js-datepicker-next-year\">\n <span class=\"govuk-visually-hidden\">Next year</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.8357 20L15.0428 14.2071L16.4571 12.7929L23.6642 20L16.4571 27.2071L15.0428 25.7929L20.8357 20Z\" fill=\"currentColor\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.8357 20L21.0428 14.2071L22.4571 12.7929L29.6642 20L22.4571 27.2071L21.0428 25.7929L26.8357 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <table class=\"moj-datepicker__calendar moj-js-datepicker-grid\" role=\"grid\" aria-labelledby=\"${titleId}\">\n <thead>\n <tr></tr>\n </thead>\n\n <tbody></tbody>\n </table>\n\n <div class=\"govuk-button-group\">\n <button type=\"button\" class=\"govuk-button moj-js-datepicker-ok\">Select</button>\n <button type=\"button\" class=\"govuk-button govuk-button--secondary moj-js-datepicker-cancel\">Close</button>\n </div>`\n }\n\n createCalendarHeaders() {\n this.dayLabels.forEach((day) => {\n const html = `<th scope=\"col\"><span aria-hidden=\"true\">${day.substring(0, 3)}</span><span class=\"govuk-visually-hidden\">${day}</span></th>`\n const $headerRow = this.$dialog.querySelector('thead > tr')\n $headerRow.insertAdjacentHTML('beforeend', html)\n })\n }\n\n /**\n * Pads given number with leading zeros\n *\n * @param {number} value - The value to be padded\n * @param {number} length - The length in characters of the output\n * @returns {string}\n */\n leadingZeros(value, length = 2) {\n let ret = value.toString()\n\n while (ret.length < length) {\n ret = `0${ret}`\n }\n\n return ret\n }\n\n setOptions() {\n this.setMinAndMaxDatesOnCalendar()\n this.setExcludedDates()\n this.setExcludedDays()\n this.setLeadingZeros()\n this.setWeekStartDay()\n }\n\n setMinAndMaxDatesOnCalendar() {\n if (this.config.minDate) {\n this.minDate = this.formattedDateFromString(this.config.minDate, null)\n if (this.minDate && this.currentDate < this.minDate) {\n this.currentDate = this.minDate\n }\n }\n\n if (this.config.maxDate) {\n this.maxDate = this.formattedDateFromString(this.config.maxDate, null)\n if (this.maxDate && this.currentDate > this.maxDate) {\n this.currentDate = this.maxDate\n }\n }\n }\n\n setExcludedDates() {\n if (this.config.excludedDates) {\n this.excludedDates = this.config.excludedDates\n .replace(/\\s+/, ' ')\n .split(' ')\n .map((item) => {\n return item.includes('-')\n ? this.parseDateRangeString(item)\n : [this.formattedDateFromString(item)]\n })\n .reduce((dates, items) => dates.concat(items))\n .filter((date) => date)\n }\n }\n\n /*\n * Parses a daterange string into an array of dates\n * @param {String} datestring - A daterange string in the format \"dd/mm/yyyy-dd/mm/yyyy\"\n * @returns {Date[]}\n */\n parseDateRangeString(datestring) {\n const dates = []\n const [startDate, endDate] = datestring\n .split('-')\n .map((d) => this.formattedDateFromString(d, null))\n\n if (startDate && endDate) {\n const date = new Date(startDate.getTime())\n /* eslint-disable no-unmodified-loop-condition */\n while (date <= endDate) {\n dates.push(new Date(date))\n date.setDate(date.getDate() + 1)\n }\n /* eslint-enable no-unmodified-loop-condition */\n }\n return dates\n }\n\n setExcludedDays() {\n if (this.config.excludedDays) {\n // lowercase and arrange dayLabels to put indexOf sunday == 0 for comparison\n // with getDay() function\n const weekDays = this.dayLabels.map((item) => item.toLowerCase())\n if (this.config.weekStartDay === 'monday') {\n weekDays.unshift(weekDays.pop())\n }\n\n this.excludedDays = this.config.excludedDays\n .replace(/\\s+/, ' ')\n .toLowerCase()\n .split(' ')\n .map((item) => weekDays.indexOf(item))\n .filter((item) => item !== -1)\n }\n }\n\n setLeadingZeros() {\n if (typeof this.config.leadingZeros !== 'boolean') {\n if (this.config.leadingZeros.toLowerCase() === 'true') {\n this.config.leadingZeros = true\n return\n }\n if (this.config.leadingZeros.toLowerCase() === 'false') {\n this.config.leadingZeros = false\n }\n }\n }\n\n setWeekStartDay() {\n const weekStartDayParam = this.config.weekStartDay\n if (weekStartDayParam && weekStartDayParam.toLowerCase() === 'sunday') {\n this.config.weekStartDay = 'sunday'\n // Rotate dayLabels array to put Sunday as the first item\n this.dayLabels.unshift(this.dayLabels.pop())\n } else {\n this.config.weekStartDay = 'monday'\n }\n }\n\n /**\n * Determine if a date is selecteable\n *\n * @param {Date} date - the date to check\n * @returns {boolean}\n */\n isExcludedDate(date) {\n // This comparison does not work correctly - it will exclude the mindate itself\n // see: https://github.com/ministryofjustice/moj-frontend/issues/923\n if (this.minDate && this.minDate > date) {\n return true\n }\n\n // This comparison works as expected - the maxdate will not be excluded\n if (this.maxDate && this.maxDate < date) {\n return true\n }\n\n for (const excludedDate of this.excludedDates) {\n if (date.toDateString() === excludedDate.toDateString()) {\n return true\n }\n }\n\n if (this.excludedDays.includes(date.getDay())) {\n return true\n }\n\n return false\n }\n\n /**\n * Get a Date object from a string\n *\n * @param {string} dateString - string in the format d/m/yyyy dd/mm/yyyy\n * @param {Date} fallback - date object to return if formatting fails\n * @returns {Date}\n */\n formattedDateFromString(dateString, fallback = new Date()) {\n let formattedDate = null\n // Accepts d/m/yyyy and dd/mm/yyyy\n const dateFormatPattern = /(\\d{1,2})([-/,. ])(\\d{1,2})\\2(\\d{4})/\n\n if (!dateFormatPattern.test(dateString)) return fallback\n\n const match = dateFormatPattern.exec(dateString)\n const day = match[1]\n const month = match[3]\n const year = match[4]\n\n formattedDate = new Date(`${year}-${month}-${day}`)\n if (\n formattedDate instanceof Date &&\n Number.isFinite(formattedDate.getTime())\n ) {\n return formattedDate\n }\n return fallback\n }\n\n /**\n * Get a formatted date string from a Date object\n *\n * @param {Date} date - date to format to a string\n * @returns {string}\n */\n formattedDateFromDate(date) {\n if (this.config.leadingZeros) {\n return `${this.leadingZeros(date.getDate())}/${this.leadingZeros(date.getMonth() + 1)}/${date.getFullYear()}`\n }\n\n return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`\n }\n\n /**\n * Get a human readable date in the format Monday 2 March 2024\n *\n * @param {Date} date - date to format\n * @returns {string}\n */\n formattedDateHuman(date) {\n return `${this.dayLabels[(date.getDay() + 6) % 7]} ${date.getDate()} ${this.monthLabels[date.getMonth()]} ${date.getFullYear()}`\n }\n\n backgroundClick(event) {\n if (\n this.isOpen() &&\n event.target instanceof Node &&\n !this.$dialog.contains(event.target) &&\n !this.$input.contains(event.target) &&\n !this.$calendarButton.contains(event.target)\n ) {\n event.preventDefault()\n this.closeDialog()\n }\n }\n\n firstButtonKeydown(event) {\n if (event.key === 'Tab' && event.shiftKey) {\n this.$lastButtonInDialog.focus()\n event.preventDefault()\n }\n }\n\n lastButtonKeydown(event) {\n if (event.key === 'Tab' && !event.shiftKey) {\n this.$firstButtonInDialog.focus()\n event.preventDefault()\n }\n }\n\n // render calendar\n updateCalendar() {\n this.$dialogTitle.innerHTML = `${this.monthLabels[this.currentDate.getMonth()]} ${this.currentDate.getFullYear()}`\n\n const day = this.currentDate\n const firstOfMonth = new Date(day.getFullYear(), day.getMonth(), 1)\n let dayOfWeek\n\n if (this.config.weekStartDay === 'monday') {\n dayOfWeek = firstOfMonth.getDay() === 0 ? 6 : firstOfMonth.getDay() - 1 // Change logic to make Monday first day of week, i.e. 0\n } else {\n dayOfWeek = firstOfMonth.getDay()\n }\n\n firstOfMonth.setDate(firstOfMonth.getDate() - dayOfWeek)\n\n const thisDay = new Date(firstOfMonth)\n\n // loop through our days\n for (const calendarDay of this.calendarDays) {\n const hidden = thisDay.getMonth() !== day.getMonth()\n const disabled = this.isExcludedDate(thisDay)\n\n calendarDay.update(thisDay, hidden, disabled)\n\n thisDay.setDate(thisDay.getDate() + 1)\n }\n }\n\n setCurrentDate(focus = true) {\n const { currentDate } = this\n this.calendarDays.forEach((calendarDay) => {\n calendarDay.button.classList.add('moj-datepicker__button')\n calendarDay.button.classList.add('moj-datepicker__calendar-day')\n calendarDay.button.setAttribute('tabindex', '-1')\n calendarDay.button.classList.remove(this.selectedDayButtonClass)\n const calendarDayDate = calendarDay.date\n calendarDayDate.setHours(0, 0, 0, 0)\n\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n\n if (\n calendarDayDate.getTime() ===\n currentDate.getTime() /* && !calendarDay.button.disabled */\n ) {\n if (focus) {\n calendarDay.button.setAttribute('tabindex', '0')\n calendarDay.button.focus()\n calendarDay.button.classList.add(this.selectedDayButtonClass)\n }\n }\n\n if (\n this.inputDate &&\n calendarDayDate.getTime() === this.inputDate.getTime()\n ) {\n calendarDay.button.classList.add(this.currentDayButtonClass)\n calendarDay.button.setAttribute('aria-current', 'date')\n } else {\n calendarDay.button.classList.remove(this.currentDayButtonClass)\n calendarDay.button.removeAttribute('aria-current')\n }\n\n if (calendarDayDate.getTime() === today.getTime()) {\n calendarDay.button.classList.add(this.todayButtonClass)\n } else {\n calendarDay.button.classList.remove(this.todayButtonClass)\n }\n })\n\n // if no date is tab-able, make the first non-disabled date tab-able\n if (!focus) {\n const enabledDays = this.calendarDays.filter((calendarDay) => {\n return (\n window.getComputedStyle(calendarDay.button).display === 'block' &&\n !calendarDay.button.disabled\n )\n })\n\n enabledDays[0].button.setAttribute('tabindex', '0')\n\n this.currentDate = enabledDays[0].date\n }\n }\n\n selectDate(date) {\n if (this.isExcludedDate(date)) {\n return\n }\n\n this.$calendarButton.querySelector('span').innerText =\n `Choose date. Selected date is ${this.formattedDateHuman(date)}`\n this.$input.value = this.formattedDateFromDate(date)\n\n const changeEvent = new Event('change', { bubbles: true, cancelable: true })\n this.$input.dispatchEvent(changeEvent)\n\n this.closeDialog()\n }\n\n isOpen() {\n return this.$dialog.classList.contains('moj-datepicker__dialog--open')\n }\n\n toggleDialog(event) {\n event.preventDefault()\n if (this.isOpen()) {\n this.closeDialog()\n } else {\n this.setMinAndMaxDatesOnCalendar()\n this.openDialog()\n }\n }\n\n openDialog() {\n this.$dialog.hidden = false\n this.$dialog.classList.add('moj-datepicker__dialog--open')\n this.$calendarButton.setAttribute('aria-expanded', 'true')\n\n // position the dialog\n // if input is wider than dialog pin it to the right\n if (this.$input.offsetWidth > this.$dialog.offsetWidth) {\n this.$dialog.style.right = `0px`\n }\n this.$dialog.style.top = `${this.$input.offsetHeight + 3}px`\n\n // get the date from the input element\n this.inputDate = this.formattedDateFromString(this.$input.value)\n this.currentDate = this.inputDate\n this.currentDate.setHours(0, 0, 0, 0)\n\n this.updateCalendar()\n this.setCurrentDate()\n }\n\n closeDialog() {\n this.$dialog.hidden = true\n this.$dialog.classList.remove('moj-datepicker__dialog--open')\n this.$calendarButton.setAttribute('aria-expanded', 'false')\n this.$calendarButton.focus()\n }\n\n goToDate(date, focus) {\n const current = this.currentDate\n this.currentDate = date\n\n if (\n current.getMonth() !== this.currentDate.getMonth() ||\n current.getFullYear() !== this.currentDate.getFullYear()\n ) {\n this.updateCalendar()\n }\n\n this.setCurrentDate(focus)\n }\n\n // day navigation\n focusNextDay() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() + 1)\n this.goToDate(date)\n }\n\n focusPreviousDay() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() - 1)\n this.goToDate(date)\n }\n\n // week navigation\n focusNextWeek() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() + 7)\n this.goToDate(date)\n }\n\n focusPreviousWeek() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() - 7)\n this.goToDate(date)\n }\n\n focusFirstDayOfWeek() {\n const date = new Date(this.currentDate)\n const firstDayOfWeekIndex = this.config.weekStartDay === 'sunday' ? 0 : 1\n const dayOfWeek = date.getDay()\n const diff =\n dayOfWeek >= firstDayOfWeekIndex\n ? dayOfWeek - firstDayOfWeekIndex\n : 6 - dayOfWeek\n\n date.setDate(date.getDate() - diff)\n date.setHours(0, 0, 0, 0)\n\n this.goToDate(date)\n }\n\n focusLastDayOfWeek() {\n const date = new Date(this.currentDate)\n const lastDayOfWeekIndex = this.config.weekStartDay === 'sunday' ? 6 : 0\n const dayOfWeek = date.getDay()\n const diff =\n dayOfWeek <= lastDayOfWeekIndex\n ? lastDayOfWeekIndex - dayOfWeek\n : 7 - dayOfWeek\n\n date.setDate(date.getDate() + diff)\n date.setHours(0, 0, 0, 0)\n\n this.goToDate(date)\n }\n\n // month navigation\n focusNextMonth(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setMonth(date.getMonth() + 1, 1)\n this.goToDate(date, focus)\n }\n\n focusPreviousMonth(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setMonth(date.getMonth() - 1, 1)\n this.goToDate(date, focus)\n }\n\n // year navigation\n focusNextYear(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setFullYear(date.getFullYear() + 1, date.getMonth(), 1)\n this.goToDate(date, focus)\n }\n\n focusPreviousYear(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setFullYear(date.getFullYear() - 1, date.getMonth(), 1)\n this.goToDate(date, focus)\n }\n\n /**\n * Parse dataset\n *\n * @param {Schema} schema - Component class\n * @param {DOMStringMap} dataset - HTML element dataset\n * @returns {object} Normalised dataset\n */\n parseDataset(schema, dataset) {\n const parsed = {}\n\n for (const [field, ,] of Object.entries(schema.properties)) {\n if (field in dataset) {\n parsed[field] = dataset[field]\n }\n }\n\n return parsed\n }\n\n /**\n * Config merging function\n *\n * Takes any number of objects and combines them together, with\n * greatest priority on the LAST item passed in.\n *\n * @param {...{ [key: string]: unknown }} configObjects - Config objects to merge\n * @returns {{ [key: string]: unknown }} A merged config object\n */\n mergeConfigs(...configObjects) {\n const formattedConfigObject = {}\n\n // Loop through each of the passed objects\n for (const configObject of configObjects) {\n for (const key of Object.keys(configObject)) {\n const option = formattedConfigObject[key]\n const override = configObject[key]\n\n // Push their keys one-by-one into formattedConfigObject. Any duplicate\n // keys with object values will be merged, otherwise the new value will\n // override the existing value.\n if (typeof option === 'object' && typeof override === 'object') {\n // @ts-expect-error Index signature for type 'string' is missing\n formattedConfigObject[key] = this.mergeConfigs(option, override)\n } else {\n formattedConfigObject[key] = override\n }\n }\n }\n\n return formattedConfigObject\n }\n}\n\nclass DSCalendarDay {\n /**\n *\n * @param {HTMLElement} button\n * @param {number} index\n * @param {number} row\n * @param {number} column\n * @param {DatePicker} picker\n */\n constructor(button, index, row, column, picker) {\n this.index = index\n this.row = row\n this.column = column\n this.button = button\n this.picker = picker\n\n this.date = new Date()\n this.button.addEventListener('keydown', this.keyPress.bind(this))\n this.button.addEventListener('click', this.click.bind(this))\n }\n\n /**\n * @param {Date} day - the Date for the calendar day\n * @param {boolean} hidden - visibility of the day\n * @param {boolean} disabled - is the day selectable or excluded\n */\n update(day, hidden, disabled) {\n const label = day.getDate()\n let accessibleLabel = this.picker.formattedDateHuman(day)\n\n if (disabled) {\n this.button.setAttribute('aria-disabled', 'true')\n accessibleLabel = `Excluded date, ${accessibleLabel}`\n } else {\n this.button.removeAttribute('aria-disabled')\n }\n\n if (hidden) {\n this.button.style.display = 'none'\n } else {\n this.button.style.display = 'block'\n }\n this.button.setAttribute(\n 'data-testid',\n this.picker.formattedDateFromDate(day)\n )\n\n this.button.innerHTML = `<span class=\"govuk-visually-hidden\">${accessibleLabel}</span><span aria-hidden=\"true\">${label}</span>`\n this.date = new Date(day)\n }\n\n click(event) {\n this.picker.goToDate(this.date)\n this.picker.selectDate(this.date)\n\n event.stopPropagation()\n event.preventDefault()\n }\n\n keyPress(event) {\n let calendarNavKey = true\n\n switch (event.key) {\n case 'ArrowLeft':\n this.picker.focusPreviousDay()\n break\n case 'ArrowRight':\n this.picker.focusNextDay()\n break\n case 'ArrowUp':\n this.picker.focusPreviousWeek()\n break\n case 'ArrowDown':\n this.picker.focusNextWeek()\n break\n case 'Home':\n this.picker.focusFirstDayOfWeek()\n break\n case 'End':\n this.picker.focusLastDayOfWeek()\n break\n case 'PageUp': {\n if (event.shiftKey) {\n this.picker.focusPreviousYear(event)\n } else {\n this.picker.focusPreviousMonth(event)\n }\n break\n }\n case 'PageDown': {\n if (event.shiftKey) {\n this.picker.focusNextYear(event)\n } else {\n this.picker.focusNextMonth(event)\n }\n break\n }\n default:\n calendarNavKey = false\n break\n }\n\n if (calendarNavKey) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n}\n\n/**\n * Date picker config\n *\n * @typedef {object} DatePickerConfig\n * @property {string} [excludedDates] - Dates that cannot be selected\n * @property {string} [excludedDays] - Days that cannot be selected\n * @property {boolean} [leadingZeroes] - Whether to add leading zeroes when populating the field\n * @property {string} [minDate] - The earliest available date\n * @property {string} [maxDate] - The latest available date\n * @property {string} [weekStartDay] - First day of the week in calendar view\n */\n\n/**\n * @import { Schema } from '../../all.mjs'\n */\n"],"names":["DatePicker","constructor","$module","config","HTMLElement","$input","querySelector","HTMLInputElement","schema","Object","freeze","properties","excludedDates","type","excludedDays","leadingZeros","maxDate","minDate","weekStartDay","defaults","mergeConfigs","parseDataset","dataset","dayLabels","monthLabels","currentDate","Date","setHours","calendarDays","buttonClass","selectedDayButtonClass","currentDayButtonClass","todayButtonClass","initialized","setOptions","initControls","setAttribute","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","innerHTML","dialogTemplate","hidden","$tbody","dayCount","i","$row","insertRow","j","$cell","$dateButton","calendarDay","DSCalendarDay","push","forEach","day","html","substring","$headerRow","value","ret","toString","setMinAndMaxDatesOnCalendar","setExcludedDates","setExcludedDays","setLeadingZeros","setWeekStartDay","formattedDateFromString","replace","split","map","item","includes","parseDateRangeString","reduce","dates","items","concat","filter","date","datestring","startDate","endDate","d","getTime","setDate","getDate","weekDays","toLowerCase","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","parsed","field","entries","configObjects","formattedConfigObject","configObject","keys","option","override","index","row","column","picker","keyPress","bind","click","label","accessibleLabel","calendarNavKey"],"mappings":"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"}
1
+ {"version":3,"file":"date-picker.bundle.mjs","sources":["../../../../node_modules/govuk-frontend/dist/govuk/common/index.mjs","../../../../node_modules/govuk-frontend/dist/govuk/errors/index.mjs","../../../../node_modules/govuk-frontend/dist/govuk/component.mjs","../../../../node_modules/govuk-frontend/dist/govuk/common/configuration.mjs","../../../../src/moj/components/date-picker/date-picker.mjs"],"sourcesContent":["function getFragmentFromUrl(url) {\n if (!url.includes('#')) {\n return undefined;\n }\n return url.split('#').pop();\n}\nfunction getBreakpoint(name) {\n const property = `--govuk-frontend-breakpoint-${name}`;\n const value = window.getComputedStyle(document.documentElement).getPropertyValue(property);\n return {\n property,\n value: value || undefined\n };\n}\nfunction setFocus($element, options = {}) {\n var _options$onBeforeFocu;\n const isFocusable = $element.getAttribute('tabindex');\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1');\n }\n function onFocus() {\n $element.addEventListener('blur', onBlur, {\n once: true\n });\n }\n function onBlur() {\n var _options$onBlur;\n (_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);\n if (!isFocusable) {\n $element.removeAttribute('tabindex');\n }\n }\n $element.addEventListener('focus', onFocus, {\n once: true\n });\n (_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);\n $element.focus();\n}\nfunction isInitialised($root, moduleName) {\n return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);\n}\n\n/**\n * Checks if GOV.UK Frontend is supported on this page\n *\n * Some browsers will load and run our JavaScript but GOV.UK Frontend\n * won't be supported.\n *\n * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support\n * @returns {boolean} Whether GOV.UK Frontend is supported on this page\n */\nfunction isSupported($scope = document.body) {\n if (!$scope) {\n return false;\n }\n return $scope.classList.contains('govuk-frontend-supported');\n}\nfunction isArray(option) {\n return Array.isArray(option);\n}\nfunction isObject(option) {\n return !!option && typeof option === 'object' && !isArray(option);\n}\nfunction formatErrorMessage(Component, message) {\n return `${Component.moduleName}: ${message}`;\n}\n/**\n * @typedef ComponentWithModuleName\n * @property {string} moduleName - Name of the component\n */\n/**\n * @import { ObjectNested } from './configuration.mjs'\n */\n\nexport { formatErrorMessage, getBreakpoint, getFragmentFromUrl, isInitialised, isObject, isSupported, setFocus };\n//# sourceMappingURL=index.mjs.map\n","import { formatErrorMessage } from '../common/index.mjs';\n\nclass GOVUKFrontendError extends Error {\n constructor(...args) {\n super(...args);\n this.name = 'GOVUKFrontendError';\n }\n}\nclass SupportError extends GOVUKFrontendError {\n /**\n * Checks if GOV.UK Frontend is supported on this page\n *\n * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support\n */\n constructor($scope = document.body) {\n const supportMessage = 'noModule' in HTMLScriptElement.prototype ? 'GOV.UK Frontend initialised without `<body class=\"govuk-frontend-supported\">` from template `<script>` snippet' : 'GOV.UK Frontend is not supported in this browser';\n super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type=\"module\">`');\n this.name = 'SupportError';\n }\n}\nclass ConfigError extends GOVUKFrontendError {\n constructor(...args) {\n super(...args);\n this.name = 'ConfigError';\n }\n}\nclass ElementError extends GOVUKFrontendError {\n constructor(messageOrOptions) {\n let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';\n if (typeof messageOrOptions === 'object') {\n const {\n component,\n identifier,\n element,\n expectedType\n } = messageOrOptions;\n message = identifier;\n message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';\n message = formatErrorMessage(component, message);\n }\n super(message);\n this.name = 'ElementError';\n }\n}\nclass InitError extends GOVUKFrontendError {\n constructor(componentOrMessage) {\n const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\\`$root\\`) already initialised`);\n super(message);\n this.name = 'InitError';\n }\n}\n/**\n * @import { ComponentWithModuleName } from '../common/index.mjs'\n */\n\nexport { ConfigError, ElementError, GOVUKFrontendError, InitError, SupportError };\n//# sourceMappingURL=index.mjs.map\n","import { isInitialised, isSupported } from './common/index.mjs';\nimport { InitError, ElementError, SupportError } from './errors/index.mjs';\n\nclass Component {\n /**\n * Returns the root element of the component\n *\n * @protected\n * @returns {RootElementType} - the root element of component\n */\n get $root() {\n return this._$root;\n }\n constructor($root) {\n this._$root = void 0;\n const childConstructor = this.constructor;\n if (typeof childConstructor.moduleName !== 'string') {\n throw new InitError(`\\`moduleName\\` not defined in component`);\n }\n if (!($root instanceof childConstructor.elementType)) {\n throw new ElementError({\n element: $root,\n component: childConstructor,\n identifier: 'Root element (`$root`)',\n expectedType: childConstructor.elementType.name\n });\n } else {\n this._$root = $root;\n }\n childConstructor.checkSupport();\n this.checkInitialised();\n const moduleName = childConstructor.moduleName;\n this.$root.setAttribute(`data-${moduleName}-init`, '');\n }\n checkInitialised() {\n const constructor = this.constructor;\n const moduleName = constructor.moduleName;\n if (moduleName && isInitialised(this.$root, moduleName)) {\n throw new InitError(constructor);\n }\n }\n static checkSupport() {\n if (!isSupported()) {\n throw new SupportError();\n }\n }\n}\n\n/**\n * @typedef ChildClass\n * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component\n */\n\n/**\n * @typedef {typeof Component & ChildClass} ChildClassConstructor\n */\nComponent.elementType = HTMLElement;\n\nexport { Component };\n//# sourceMappingURL=component.mjs.map\n","import { Component } from '../component.mjs';\nimport { ConfigError } from '../errors/index.mjs';\nimport { isObject, formatErrorMessage } from './index.mjs';\n\nconst configOverride = Symbol.for('configOverride');\nclass ConfigurableComponent extends Component {\n [configOverride](param) {\n return {};\n }\n\n /**\n * Returns the root element of the component\n *\n * @protected\n * @returns {ConfigurationType} - the root element of component\n */\n get config() {\n return this._config;\n }\n constructor($root, config) {\n super($root);\n this._config = void 0;\n const childConstructor = this.constructor;\n if (!isObject(childConstructor.defaults)) {\n throw new ConfigError(formatErrorMessage(childConstructor, 'Config passed as parameter into constructor but no defaults defined'));\n }\n const datasetConfig = normaliseDataset(childConstructor, this._$root.dataset);\n this._config = mergeConfigs(childConstructor.defaults, config != null ? config : {}, this[configOverride](datasetConfig), datasetConfig);\n }\n}\nfunction normaliseString(value, property) {\n const trimmedValue = value ? value.trim() : '';\n let output;\n let outputType = property == null ? void 0 : property.type;\n if (!outputType) {\n if (['true', 'false'].includes(trimmedValue)) {\n outputType = 'boolean';\n }\n if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {\n outputType = 'number';\n }\n }\n switch (outputType) {\n case 'boolean':\n output = trimmedValue === 'true';\n break;\n case 'number':\n output = Number(trimmedValue);\n break;\n default:\n output = value;\n }\n return output;\n}\nfunction normaliseDataset(Component, dataset) {\n if (!isObject(Component.schema)) {\n throw new ConfigError(formatErrorMessage(Component, 'Config passed as parameter into constructor but no schema defined'));\n }\n const out = {};\n const entries = Object.entries(Component.schema.properties);\n for (const entry of entries) {\n const [namespace, property] = entry;\n const field = namespace.toString();\n if (field in dataset) {\n out[field] = normaliseString(dataset[field], property);\n }\n if ((property == null ? void 0 : property.type) === 'object') {\n out[field] = extractConfigByNamespace(Component.schema, dataset, namespace);\n }\n }\n return out;\n}\nfunction mergeConfigs(...configObjects) {\n const formattedConfigObject = {};\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 if (isObject(option) && isObject(override)) {\n formattedConfigObject[key] = mergeConfigs(option, override);\n } else {\n formattedConfigObject[key] = override;\n }\n }\n }\n return formattedConfigObject;\n}\nfunction validateConfig(schema, config) {\n const validationErrors = [];\n for (const [name, conditions] of Object.entries(schema)) {\n const errors = [];\n if (Array.isArray(conditions)) {\n for (const {\n required,\n errorMessage\n } of conditions) {\n if (!required.every(key => !!config[key])) {\n errors.push(errorMessage);\n }\n }\n if (name === 'anyOf' && !(conditions.length - errors.length >= 1)) {\n validationErrors.push(...errors);\n }\n }\n }\n return validationErrors;\n}\nfunction extractConfigByNamespace(schema, dataset, namespace) {\n const property = schema.properties[namespace];\n if ((property == null ? void 0 : property.type) !== 'object') {\n return;\n }\n const newObject = {\n [namespace]: {}\n };\n for (const [key, value] of Object.entries(dataset)) {\n let current = newObject;\n const keyParts = key.split('.');\n for (const [index, name] of keyParts.entries()) {\n if (isObject(current)) {\n if (index < keyParts.length - 1) {\n if (!isObject(current[name])) {\n current[name] = {};\n }\n current = current[name];\n } else if (key !== namespace) {\n current[name] = normaliseString(value);\n }\n }\n }\n }\n return newObject[namespace];\n}\n/**\n * Schema for component config\n *\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType\n * @typedef {object} Schema\n * @property {Record<keyof ConfigurationType, SchemaProperty | undefined>} properties - Schema properties\n * @property {SchemaCondition<ConfigurationType>[]} [anyOf] - List of schema conditions\n */\n/**\n * Schema property for component config\n *\n * @typedef {object} SchemaProperty\n * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type\n */\n/**\n * Schema condition for component config\n *\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType\n * @typedef {object} SchemaCondition\n * @property {(keyof ConfigurationType)[]} required - List of required config fields\n * @property {string} errorMessage - Error message when required config fields not provided\n */\n/**\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]\n * @typedef ChildClass\n * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component\n * @property {Schema<ConfigurationType>} [schema] - The schema of the component configuration\n * @property {ConfigurationType} [defaults] - The default values of the configuration of the component\n */\n/**\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]\n * @typedef {typeof Component & ChildClass<ConfigurationType>} ChildClassConstructor<ConfigurationType>\n */\n\nexport { ConfigurableComponent, configOverride, extractConfigByNamespace, mergeConfigs, normaliseDataset, normaliseString, validateConfig };\n//# sourceMappingURL=configuration.mjs.map\n","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":["isInitialised","$root","moduleName","HTMLElement","hasAttribute","isSupported","$scope","document","body","classList","contains","isArray","option","Array","isObject","formatErrorMessage","Component","message","GOVUKFrontendError","Error","constructor","args","name","SupportError","supportMessage","HTMLScriptElement","prototype","ConfigError","ElementError","messageOrOptions","component","identifier","element","expectedType","InitError","componentOrMessage","_$root","childConstructor","elementType","checkSupport","checkInitialised","setAttribute","configOverride","Symbol","for","ConfigurableComponent","param","config","_config","defaults","datasetConfig","normaliseDataset","dataset","mergeConfigs","normaliseString","value","property","trimmedValue","trim","output","outputType","type","includes","length","isFinite","Number","schema","out","entries","Object","properties","entry","namespace","field","toString","extractConfigByNamespace","configObjects","formattedConfigObject","configObject","key","keys","override","newObject","current","keyParts","split","index","DatePicker","_this$config$input$el","$input","input","querySelector","selector","HTMLInputElement","dayLabels","monthLabels","currentDate","Date","setHours","calendarDays","excludedDates","excludedDays","buttonClass","selectedDayButtonClass","currentDayButtonClass","todayButtonClass","setOptions","initControls","id","$dialog","createDialog","createCalendarHeaders","$componentWrapper","createElement","$inputWrapper","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","firstButtonKeydown","lastButtonKeydown","toggleDialog","stopPropagation","backgroundClick","updateCalendar","titleId","innerHTML","dialogTemplate","hidden","$tbody","dayCount","i","$row","insertRow","j","$cell","$dateButton","calendarDay","DSCalendarDay","push","forEach","day","html","substring","$headerRow","leadingZeros","ret","setMinAndMaxDatesOnCalendar","setExcludedDates","setExcludedDays","setWeekStartDay","minDate","formattedDateFromString","maxDate","replace","map","item","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","formattedDateFromDate","getMonth","getFullYear","formattedDateHuman","isOpen","target","Node","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","focusNextDay","focusPreviousDay","focusNextWeek","focusPreviousWeek","focusFirstDayOfWeek","firstDayOfWeekIndex","diff","focusLastDayOfWeek","lastDayOfWeekIndex","setMonth","setFullYear","freeze","row","column","picker","keyPress","bind","click","label","accessibleLabel","calendarNavKey"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}