@ministryofjustice/frontend 3.6.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/govuk-prototype-kit.config.json +45 -33
  2. package/moj/_base.scss +8 -0
  3. package/moj/all.jquery.min.js +1 -1
  4. package/moj/all.jquery.min.js.map +1 -0
  5. package/moj/all.js +8 -7
  6. package/moj/all.js.map +1 -0
  7. package/moj/all.mjs +1 -0
  8. package/moj/all.mjs.map +1 -0
  9. package/moj/all.scss +4 -9
  10. package/moj/components/_all.scss +33 -33
  11. package/moj/components/action-bar/_action-bar.scss +2 -0
  12. package/moj/components/add-another/_add-another.scss +2 -0
  13. package/moj/components/add-another/add-another.js +1 -0
  14. package/moj/components/add-another/add-another.js.map +1 -0
  15. package/moj/components/add-another/add-another.mjs +1 -0
  16. package/moj/components/add-another/add-another.mjs.map +1 -0
  17. package/moj/components/alert/_alert.scss +18 -15
  18. package/moj/components/alert/alert.js +1 -0
  19. package/moj/components/alert/alert.js.map +1 -0
  20. package/moj/components/alert/alert.mjs +1 -0
  21. package/moj/components/alert/alert.mjs.map +1 -0
  22. package/moj/components/alert/alert.spec.helper.js +1 -0
  23. package/moj/components/alert/alert.spec.helper.js.map +1 -0
  24. package/moj/components/alert/alert.spec.helper.mjs +1 -0
  25. package/moj/components/alert/alert.spec.helper.mjs.map +1 -0
  26. package/moj/components/alert/template.njk +1 -1
  27. package/moj/components/badge/README.md +1 -1
  28. package/moj/components/badge/_badge.scss +3 -1
  29. package/moj/components/badge/macro.njk +1 -1
  30. package/moj/components/banner/README.md +3 -0
  31. package/moj/components/banner/_banner.scss +3 -1
  32. package/moj/components/button-menu/README.md +2 -2
  33. package/moj/components/button-menu/_button-menu.scss +9 -16
  34. package/moj/components/button-menu/button-menu.js +1 -0
  35. package/moj/components/button-menu/button-menu.js.map +1 -0
  36. package/moj/components/button-menu/button-menu.mjs +1 -0
  37. package/moj/components/button-menu/button-menu.mjs.map +1 -0
  38. package/moj/components/button-menu/template.njk +7 -9
  39. package/moj/components/cookie-banner/_cookie-banner.scss +3 -2
  40. package/moj/components/currency-input/README.md +4 -4
  41. package/moj/components/currency-input/_currency-input.scss +3 -1
  42. package/moj/components/date-picker/README.md +1 -1
  43. package/moj/components/date-picker/_date-picker.scss +11 -12
  44. package/moj/components/date-picker/date-picker.js +1 -0
  45. package/moj/components/date-picker/date-picker.js.map +1 -0
  46. package/moj/components/date-picker/date-picker.mjs +1 -0
  47. package/moj/components/date-picker/date-picker.mjs.map +1 -0
  48. package/moj/components/filter/_filter.scss +7 -4
  49. package/moj/components/filter-toggle-button/filter-toggle-button.js +1 -0
  50. package/moj/components/filter-toggle-button/filter-toggle-button.js.map +1 -0
  51. package/moj/components/filter-toggle-button/filter-toggle-button.mjs +1 -0
  52. package/moj/components/filter-toggle-button/filter-toggle-button.mjs.map +1 -0
  53. package/moj/components/form-validator/README.md +2 -4
  54. package/moj/components/form-validator/form-validator.js +1 -0
  55. package/moj/components/form-validator/form-validator.js.map +1 -0
  56. package/moj/components/form-validator/form-validator.mjs +1 -0
  57. package/moj/components/form-validator/form-validator.mjs.map +1 -0
  58. package/moj/components/header/README.md +1 -1
  59. package/moj/components/header/_header.scss +9 -6
  60. package/moj/components/header/template.njk +2 -2
  61. package/moj/components/identity-bar/_identity-bar.scss +5 -2
  62. package/moj/components/interruption-card/_interruption-card.scss +3 -1
  63. package/moj/components/messages/README.md +15 -10
  64. package/moj/components/messages/_messages.scss +4 -2
  65. package/moj/components/multi-file-upload/_multi-file-upload.scss +2 -0
  66. package/moj/components/multi-file-upload/multi-file-upload.js +7 -6
  67. package/moj/components/multi-file-upload/multi-file-upload.js.map +1 -0
  68. package/moj/components/multi-file-upload/multi-file-upload.mjs +7 -6
  69. package/moj/components/multi-file-upload/multi-file-upload.mjs.map +1 -0
  70. package/moj/components/multi-select/multi-select.js +1 -0
  71. package/moj/components/multi-select/multi-select.js.map +1 -0
  72. package/moj/components/multi-select/multi-select.mjs +1 -0
  73. package/moj/components/multi-select/multi-select.mjs.map +1 -0
  74. package/moj/components/notification-badge/_notification-badge.scss +3 -2
  75. package/moj/components/organisation-switcher/_organisation-switcher.scss +3 -1
  76. package/moj/components/page-header-actions/_page-header-actions.scss +2 -0
  77. package/moj/components/page-header-actions/template.njk +1 -1
  78. package/moj/components/pagination/_pagination.scss +13 -5
  79. package/moj/components/password-reveal/README.md +2 -2
  80. package/moj/components/password-reveal/_password-reveal.scss +2 -0
  81. package/moj/components/password-reveal/password-reveal.js +1 -0
  82. package/moj/components/password-reveal/password-reveal.js.map +1 -0
  83. package/moj/components/password-reveal/password-reveal.mjs +1 -0
  84. package/moj/components/password-reveal/password-reveal.mjs.map +1 -0
  85. package/moj/components/primary-navigation/README.md +1 -1
  86. package/moj/components/primary-navigation/_primary-navigation.scss +14 -5
  87. package/moj/components/progress-bar/_progress-bar.scss +5 -2
  88. package/moj/components/rich-text-editor/README.md +4 -4
  89. package/moj/components/rich-text-editor/_rich-text-editor.scss +3 -0
  90. package/moj/components/rich-text-editor/rich-text-editor.js +1 -0
  91. package/moj/components/rich-text-editor/rich-text-editor.js.map +1 -0
  92. package/moj/components/rich-text-editor/rich-text-editor.mjs +1 -0
  93. package/moj/components/rich-text-editor/rich-text-editor.mjs.map +1 -0
  94. package/moj/components/search/_search.scss +2 -0
  95. package/moj/components/search-toggle/search-toggle.js +1 -0
  96. package/moj/components/search-toggle/search-toggle.js.map +1 -0
  97. package/moj/components/search-toggle/search-toggle.mjs +1 -0
  98. package/moj/components/search-toggle/search-toggle.mjs.map +1 -0
  99. package/moj/components/search-toggle/search-toggle.scss +3 -1
  100. package/moj/components/side-navigation/README.md +1 -1
  101. package/moj/components/side-navigation/_side-navigation.scss +3 -1
  102. package/moj/components/sortable-table/_sortable-table.scss +2 -0
  103. package/moj/components/sortable-table/sortable-table.js +1 -0
  104. package/moj/components/sortable-table/sortable-table.js.map +1 -0
  105. package/moj/components/sortable-table/sortable-table.mjs +1 -0
  106. package/moj/components/sortable-table/sortable-table.mjs.map +1 -0
  107. package/moj/components/sub-navigation/README.md +1 -1
  108. package/moj/components/sub-navigation/_sub-navigation.scss +12 -4
  109. package/moj/components/tag/README.md +2 -2
  110. package/moj/components/tag/_tag.scss +2 -0
  111. package/moj/components/task-list/README.md +3 -3
  112. package/moj/components/task-list/_task-list.scss +4 -2
  113. package/moj/components/ticket-panel/README.md +1 -1
  114. package/moj/components/ticket-panel/_ticket-panel.scss +2 -0
  115. package/moj/components/timeline/README.md +15 -10
  116. package/moj/components/timeline/_timeline.scss +7 -4
  117. package/moj/helpers/_all.scss +2 -2
  118. package/moj/helpers/_links.scss +4 -2
  119. package/moj/helpers.js +1 -0
  120. package/moj/helpers.js.map +1 -0
  121. package/moj/helpers.mjs +1 -0
  122. package/moj/helpers.mjs.map +1 -0
  123. package/moj/moj-frontend.min.css +2 -2
  124. package/moj/moj-frontend.min.css.map +1 -0
  125. package/moj/moj-frontend.min.js +1 -1
  126. package/moj/moj-frontend.min.js.map +1 -0
  127. package/moj/objects/_all.scss +4 -4
  128. package/moj/objects/_button-group.scss +80 -13
  129. package/moj/objects/_filter-layout.scss +2 -0
  130. package/moj/objects/_scrollable-pane.scss +2 -0
  131. package/moj/objects/_width-container.scss +3 -0
  132. package/moj/settings/_all.scss +4 -3
  133. package/moj/settings/_assets.scss +5 -2
  134. package/moj/settings/_colours.scss +5 -0
  135. package/moj/settings/_measurements.scss +3 -1
  136. package/moj/settings/_typography.scss +13 -0
  137. package/moj/utilities/_all.scss +2 -2
  138. package/moj/utilities/_hidden.scss +2 -0
  139. package/moj/utilities/_width-container.scss +2 -0
  140. package/moj/vendor/govuk-frontend/_base.scss +5 -0
  141. package/moj/vendor/govuk-frontend/_index.scss +21 -0
  142. package/moj/version.js +1 -0
  143. package/moj/version.js.map +1 -0
  144. package/moj/version.mjs +1 -0
  145. package/moj/version.mjs.map +1 -0
  146. package/package.json +3 -1
@@ -1,6 +1,5 @@
1
- // Custom colour required for passing WCAG 2.2 AA contrast text/background and
2
- // background/surrounding
3
- $moj-datepicker-mid-grey: #949494;
1
+ @use "../../settings/colours" as *;
2
+ @use "../../vendor/govuk-frontend" as *;
4
3
 
5
4
  .moj-datepicker {
6
5
  position: relative;
@@ -35,10 +34,10 @@ $moj-datepicker-mid-grey: #949494;
35
34
  }
36
35
 
37
36
  .moj-datepicker__dialog-title {
38
- @include govuk-font(16);
39
37
  margin-top: 0;
40
38
  margin-bottom: 0;
41
39
  font-weight: bold;
40
+ @include govuk-font(16);
42
41
  }
43
42
 
44
43
  .moj-datepicker__dialog-navbuttons {
@@ -62,9 +61,9 @@ $moj-datepicker-mid-grey: #949494;
62
61
  }
63
62
 
64
63
  th {
65
- @include govuk-font(16);
66
64
  color: $govuk-text-colour;
67
65
  font-weight: bold;
66
+ @include govuk-font(16);
68
67
  }
69
68
  }
70
69
 
@@ -77,7 +76,6 @@ $moj-datepicker-mid-grey: #949494;
77
76
  }
78
77
 
79
78
  .moj-datepicker__button {
80
- @include govuk-font(16);
81
79
  position: relative;
82
80
  width: 44px;
83
81
  height: 40px;
@@ -88,6 +86,7 @@ $moj-datepicker-mid-grey: #949494;
88
86
  outline-offset: -2px;
89
87
  color: $govuk-text-colour;
90
88
  background-color: transparent;
89
+ @include govuk-font(16);
91
90
 
92
91
  @media (forced-colors: active) {
93
92
  // Don't show the bottom bar in forced-color modes as it blocks the outline
@@ -116,7 +115,7 @@ $moj-datepicker-mid-grey: #949494;
116
115
 
117
116
  &:hover {
118
117
  color: $govuk-text-colour;
119
- background-color: $moj-datepicker-mid-grey;
118
+ background-color: $moj-button-menu-color;
120
119
  text-decoration: none;
121
120
  -webkit-box-decoration-break: clone;
122
121
  box-decoration-break: clone;
@@ -137,7 +136,7 @@ $moj-datepicker-mid-grey: #949494;
137
136
 
138
137
  &:focus:hover {
139
138
  outline-color: $govuk-focus-colour;
140
- background-color: $moj-datepicker-mid-grey;
139
+ background-color: $moj-button-menu-color;
141
140
 
142
141
  &::after {
143
142
  background-color: transparent;
@@ -179,7 +178,7 @@ $moj-datepicker-mid-grey: #949494;
179
178
  &:hover {
180
179
  outline-color: $govuk-link-colour;
181
180
  color: $govuk-text-colour;
182
- background-color: $moj-datepicker-mid-grey;
181
+ background-color: $moj-button-menu-color;
183
182
 
184
183
  &::after {
185
184
  background-color: transparent;
@@ -296,14 +295,14 @@ $moj-datepicker-mid-grey: #949494;
296
295
  }
297
296
 
298
297
  &:hover {
299
- border-bottom: 4px solid $moj-datepicker-mid-grey;
298
+ border-bottom: 4px solid $moj-button-menu-color;
300
299
  color: $govuk-text-colour;
301
- background-color: $moj-datepicker-mid-grey;
300
+ background-color: $moj-button-menu-color;
302
301
  }
303
302
 
304
303
  &:focus:hover {
305
304
  border-bottom: 4px solid $govuk-text-colour;
306
305
  color: $govuk-text-colour;
307
- background-color: $moj-datepicker-mid-grey;
306
+ background-color: $moj-button-menu-color;
308
307
  }
309
308
  }
@@ -967,3 +967,4 @@
967
967
  exports.DatePicker = DatePicker;
968
968
 
969
969
  }));
970
+ //# sourceMappingURL=date-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-picker.js","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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"}
@@ -959,3 +959,4 @@ DSCalendarDay.prototype.keyPress = function (event) {
959
959
  */
960
960
 
961
961
  export { DatePicker };
962
+ //# sourceMappingURL=date-picker.mjs.map
@@ -0,0 +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,3 +1,6 @@
1
+ @use "../../settings/assets" as *;
2
+ @use "../../vendor/govuk-frontend" as *;
3
+
1
4
  /* ==========================================================================
2
5
  #FILTER
3
6
  ========================================================================== */
@@ -36,7 +39,6 @@
36
39
  overflow: visible; // Override govuk to allow for focus style to be seen
37
40
 
38
41
  button {
39
- @include govuk-font($size: 24, $weight: bold);
40
42
  appearance: none;
41
43
  box-sizing: border-box;
42
44
  display: block;
@@ -50,6 +52,7 @@
50
52
  text-align: left;
51
53
  cursor: pointer; // Adam would not approve
52
54
  -webkit-appearance: none;
55
+ @include govuk-font($size: 24, $weight: bold);
53
56
 
54
57
  // Fix unwanted button padding in Firefox
55
58
  &::-moz-focus-inner {
@@ -84,7 +87,6 @@
84
87
  }
85
88
 
86
89
  .moj-filter__close {
87
- @include govuk-font(19);
88
90
  margin: 0;
89
91
  padding: 0;
90
92
  border: none;
@@ -95,6 +97,7 @@
95
97
  cursor: pointer; // I know Adam won’t like this
96
98
  -webkit-appearance: none;
97
99
  appearance: none;
100
+ @include govuk-font(19);
98
101
 
99
102
  &:focus {
100
103
  outline: none;
@@ -147,10 +150,10 @@
147
150
 
148
151
  .moj-filter__heading-title,
149
152
  .moj-filter__heading-action {
150
- @include govuk-font(16);
151
153
  display: inline-block;
152
154
  text-align: left;
153
155
  vertical-align: middle;
156
+ @include govuk-font(16);
154
157
  }
155
158
 
156
159
  .moj-filter-tags {
@@ -165,7 +168,6 @@
165
168
  }
166
169
 
167
170
  .moj-filter__tag {
168
- @include govuk-font(16);
169
171
  display: inline-block;
170
172
  margin-top: govuk-spacing(1);
171
173
  padding: govuk-spacing(1);
@@ -173,6 +175,7 @@
173
175
  color: govuk-colour("black");
174
176
  background-color: govuk-colour("white");
175
177
  text-decoration: none;
178
+ @include govuk-font(16);
176
179
 
177
180
  &:link,
178
181
  &:visited {
@@ -99,3 +99,4 @@
99
99
  exports.FilterToggleButton = FilterToggleButton;
100
100
 
101
101
  }));
102
+ //# sourceMappingURL=filter-toggle-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-toggle-button.js","sources":["../../../../src/moj/components/filter-toggle-button/filter-toggle-button.mjs"],"sourcesContent":["import $ from 'jquery'\n\nexport function FilterToggleButton(options) {\n this.options = options\n this.container = $(this.options.toggleButton.container)\n this.filterContainer = $(this.options.filter.container)\n\n this.createToggleButton()\n this.setupResponsiveChecks()\n this.filterContainer.attr('tabindex', '-1')\n if (this.options.startHidden) {\n this.hideMenu()\n }\n}\n\nFilterToggleButton.prototype.setupResponsiveChecks = function () {\n this.mq = window.matchMedia(this.options.bigModeMediaQuery)\n this.mq.addListener($.proxy(this, 'checkMode'))\n this.checkMode(this.mq)\n}\n\nFilterToggleButton.prototype.createToggleButton = function () {\n this.menuButton = $(\n `<button class=\"govuk-button ${this.options.toggleButton.classes}\" type=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\">${this.options.toggleButton.showText}</button>`\n )\n this.menuButton.on('click', $.proxy(this, 'onMenuButtonClick'))\n this.container.append(this.menuButton)\n}\n\nFilterToggleButton.prototype.checkMode = function (mq) {\n if (mq.matches) {\n this.enableBigMode()\n } else {\n this.enableSmallMode()\n }\n}\n\nFilterToggleButton.prototype.enableBigMode = function () {\n this.showMenu()\n this.removeCloseButton()\n}\n\nFilterToggleButton.prototype.enableSmallMode = function () {\n this.hideMenu()\n this.addCloseButton()\n}\n\nFilterToggleButton.prototype.addCloseButton = function () {\n if (this.options.closeButton) {\n this.closeButton = $(\n `<button class=\"moj-filter__close\" type=\"button\">${this.options.closeButton.text}</button>`\n )\n this.closeButton.on('click', $.proxy(this, 'onCloseClick'))\n $(this.options.closeButton.container).append(this.closeButton)\n }\n}\n\nFilterToggleButton.prototype.onCloseClick = function () {\n this.hideMenu()\n this.menuButton.focus()\n}\n\nFilterToggleButton.prototype.removeCloseButton = function () {\n if (this.closeButton) {\n this.closeButton.remove()\n this.closeButton = null\n }\n}\n\nFilterToggleButton.prototype.hideMenu = function () {\n this.menuButton.attr('aria-expanded', 'false')\n this.filterContainer.addClass('moj-js-hidden')\n this.menuButton.text(this.options.toggleButton.showText)\n}\n\nFilterToggleButton.prototype.showMenu = function () {\n this.menuButton.attr('aria-expanded', 'true')\n this.filterContainer.removeClass('moj-js-hidden')\n this.menuButton.text(this.options.toggleButton.hideText)\n}\n\nFilterToggleButton.prototype.onMenuButtonClick = function () {\n this.toggle()\n}\n\nFilterToggleButton.prototype.toggle = function () {\n if (this.menuButton.attr('aria-expanded') === 'false') {\n this.showMenu()\n this.filterContainer.get(0).focus()\n } else {\n this.hideMenu()\n }\n}\n"],"names":[],"mappings":";;;;;;EAEA,SAAA,kBAAA,CAAA,OAAA,EAAA;EACA,EAAA,IAAA,CAAA,OAAA,GAAA;EACA,EAAA,IAAA,CAAA,SAAA,GAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,YAAA,CAAA,SAAA;EACA,EAAA,IAAA,CAAA,eAAA,GAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,MAAA,CAAA,SAAA;;EAEA,EAAA,IAAA,CAAA,kBAAA;EACA,EAAA,IAAA,CAAA,qBAAA;EACA,EAAA,IAAA,CAAA,eAAA,CAAA,IAAA,CAAA,UAAA,EAAA,IAAA;EACA,EAAA,IAAA,IAAA,CAAA,OAAA,CAAA,WAAA,EAAA;EACA,IAAA,IAAA,CAAA,QAAA;EACA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,qBAAA,GAAA,YAAA;EACA,EAAA,IAAA,CAAA,EAAA,GAAA,MAAA,CAAA,UAAA,CAAA,IAAA,CAAA,OAAA,CAAA,iBAAA;EACA,EAAA,IAAA,CAAA,EAAA,CAAA,WAAA,CAAA,CAAA,CAAA,KAAA,CAAA,IAAA,EAAA,WAAA,CAAA;EACA,EAAA,IAAA,CAAA,SAAA,CAAA,IAAA,CAAA,EAAA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,kBAAA,GAAA,YAAA;EACA,EAAA,IAAA,CAAA,UAAA,GAAA,CAAA;EACA,IAAA,CAAA,4BAAA,EAAA,IAAA,CAAA,OAAA,CAAA,YAAA,CAAA,OAAA,CAAA,2DAAA,EAAA,IAAA,CAAA,OAAA,CAAA,YAAA,CAAA,QAAA,CAAA,SAAA;EACA;EACA,EAAA,IAAA,CAAA,UAAA,CAAA,EAAA,CAAA,OAAA,EAAA,CAAA,CAAA,KAAA,CAAA,IAAA,EAAA,mBAAA,CAAA;EACA,EAAA,IAAA,CAAA,SAAA,CAAA,MAAA,CAAA,IAAA,CAAA,UAAA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,SAAA,GAAA,UAAA,EAAA,EAAA;EACA,EAAA,IAAA,EAAA,CAAA,OAAA,EAAA;EACA,IAAA,IAAA,CAAA,aAAA;EACA,GAAA,MAAA;EACA,IAAA,IAAA,CAAA,eAAA;EACA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,aAAA,GAAA,YAAA;EACA,EAAA,IAAA,CAAA,QAAA;EACA,EAAA,IAAA,CAAA,iBAAA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,eAAA,GAAA,YAAA;EACA,EAAA,IAAA,CAAA,QAAA;EACA,EAAA,IAAA,CAAA,cAAA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,cAAA,GAAA,YAAA;EACA,EAAA,IAAA,IAAA,CAAA,OAAA,CAAA,WAAA,EAAA;EACA,IAAA,IAAA,CAAA,WAAA,GAAA,CAAA;EACA,MAAA,CAAA,gDAAA,EAAA,IAAA,CAAA,OAAA,CAAA,WAAA,CAAA,IAAA,CAAA,SAAA;EACA;EACA,IAAA,IAAA,CAAA,WAAA,CAAA,EAAA,CAAA,OAAA,EAAA,CAAA,CAAA,KAAA,CAAA,IAAA,EAAA,cAAA,CAAA;EACA,IAAA,CAAA,CAAA,IAAA,CAAA,OAAA,CAAA,WAAA,CAAA,SAAA,CAAA,CAAA,MAAA,CAAA,IAAA,CAAA,WAAA;EACA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,YAAA,GAAA,YAAA;EACA,EAAA,IAAA,CAAA,QAAA;EACA,EAAA,IAAA,CAAA,UAAA,CAAA,KAAA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,iBAAA,GAAA,YAAA;EACA,EAAA,IAAA,IAAA,CAAA,WAAA,EAAA;EACA,IAAA,IAAA,CAAA,WAAA,CAAA,MAAA;EACA,IAAA,IAAA,CAAA,WAAA,GAAA;EACA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,QAAA,GAAA,YAAA;EACA,EAAA,IAAA,CAAA,UAAA,CAAA,IAAA,CAAA,eAAA,EAAA,OAAA;EACA,EAAA,IAAA,CAAA,eAAA,CAAA,QAAA,CAAA,eAAA;EACA,EAAA,IAAA,CAAA,UAAA,CAAA,IAAA,CAAA,IAAA,CAAA,OAAA,CAAA,YAAA,CAAA,QAAA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,QAAA,GAAA,YAAA;EACA,EAAA,IAAA,CAAA,UAAA,CAAA,IAAA,CAAA,eAAA,EAAA,MAAA;EACA,EAAA,IAAA,CAAA,eAAA,CAAA,WAAA,CAAA,eAAA;EACA,EAAA,IAAA,CAAA,UAAA,CAAA,IAAA,CAAA,IAAA,CAAA,OAAA,CAAA,YAAA,CAAA,QAAA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,iBAAA,GAAA,YAAA;EACA,EAAA,IAAA,CAAA,MAAA;EACA;;EAEA,kBAAA,CAAA,SAAA,CAAA,MAAA,GAAA,YAAA;EACA,EAAA,IAAA,IAAA,CAAA,UAAA,CAAA,IAAA,CAAA,eAAA,CAAA,KAAA,OAAA,EAAA;EACA,IAAA,IAAA,CAAA,QAAA;EACA,IAAA,IAAA,CAAA,eAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,KAAA;EACA,GAAA,MAAA;EACA,IAAA,IAAA,CAAA,QAAA;EACA;EACA;;;;;;;;"}
@@ -91,3 +91,4 @@ FilterToggleButton.prototype.toggle = function () {
91
91
  };
92
92
 
93
93
  export { FilterToggleButton };
94
+ //# sourceMappingURL=filter-toggle-button.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-toggle-button.mjs","sources":["../../../../src/moj/components/filter-toggle-button/filter-toggle-button.mjs"],"sourcesContent":["import $ from 'jquery'\n\nexport function FilterToggleButton(options) {\n this.options = options\n this.container = $(this.options.toggleButton.container)\n this.filterContainer = $(this.options.filter.container)\n\n this.createToggleButton()\n this.setupResponsiveChecks()\n this.filterContainer.attr('tabindex', '-1')\n if (this.options.startHidden) {\n this.hideMenu()\n }\n}\n\nFilterToggleButton.prototype.setupResponsiveChecks = function () {\n this.mq = window.matchMedia(this.options.bigModeMediaQuery)\n this.mq.addListener($.proxy(this, 'checkMode'))\n this.checkMode(this.mq)\n}\n\nFilterToggleButton.prototype.createToggleButton = function () {\n this.menuButton = $(\n `<button class=\"govuk-button ${this.options.toggleButton.classes}\" type=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\">${this.options.toggleButton.showText}</button>`\n )\n this.menuButton.on('click', $.proxy(this, 'onMenuButtonClick'))\n this.container.append(this.menuButton)\n}\n\nFilterToggleButton.prototype.checkMode = function (mq) {\n if (mq.matches) {\n this.enableBigMode()\n } else {\n this.enableSmallMode()\n }\n}\n\nFilterToggleButton.prototype.enableBigMode = function () {\n this.showMenu()\n this.removeCloseButton()\n}\n\nFilterToggleButton.prototype.enableSmallMode = function () {\n this.hideMenu()\n this.addCloseButton()\n}\n\nFilterToggleButton.prototype.addCloseButton = function () {\n if (this.options.closeButton) {\n this.closeButton = $(\n `<button class=\"moj-filter__close\" type=\"button\">${this.options.closeButton.text}</button>`\n )\n this.closeButton.on('click', $.proxy(this, 'onCloseClick'))\n $(this.options.closeButton.container).append(this.closeButton)\n }\n}\n\nFilterToggleButton.prototype.onCloseClick = function () {\n this.hideMenu()\n this.menuButton.focus()\n}\n\nFilterToggleButton.prototype.removeCloseButton = function () {\n if (this.closeButton) {\n this.closeButton.remove()\n this.closeButton = null\n }\n}\n\nFilterToggleButton.prototype.hideMenu = function () {\n this.menuButton.attr('aria-expanded', 'false')\n this.filterContainer.addClass('moj-js-hidden')\n this.menuButton.text(this.options.toggleButton.showText)\n}\n\nFilterToggleButton.prototype.showMenu = function () {\n this.menuButton.attr('aria-expanded', 'true')\n this.filterContainer.removeClass('moj-js-hidden')\n this.menuButton.text(this.options.toggleButton.hideText)\n}\n\nFilterToggleButton.prototype.onMenuButtonClick = function () {\n this.toggle()\n}\n\nFilterToggleButton.prototype.toggle = function () {\n if (this.menuButton.attr('aria-expanded') === 'false') {\n this.showMenu()\n this.filterContainer.get(0).focus()\n } else {\n this.hideMenu()\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,3 @@
1
- # Form validator
1
+ # Form validator (Archived)
2
2
 
3
- - [Guidance](https://design-patterns.service.justice.gov.uk/components/form-validator)
4
-
5
- ## Arguments
3
+ - [Guidance](https://design-patterns.service.justice.gov.uk/archive/form-validator)
@@ -202,3 +202,4 @@
202
202
  exports.FormValidator = FormValidator;
203
203
 
204
204
  }));
205
+ //# sourceMappingURL=form-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-validator.js","sources":["../../../../src/moj/helpers.mjs","../../../../src/moj/components/form-validator/form-validator.mjs"],"sourcesContent":["export function removeAttributeValue(el, attr, value) {\n let re, m\n if (el.getAttribute(attr)) {\n if (el.getAttribute(attr) === value) {\n el.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = el.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n el.setAttribute(\n attr,\n el.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\nexport function addAttributeValue(el, attr, value) {\n let re\n if (!el.getAttribute(attr)) {\n el.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test(el.getAttribute(attr))) {\n el.setAttribute(attr, `${el.getAttribute(attr)} ${value}`)\n }\n }\n}\n\nexport function dragAndDropSupported() {\n const div = document.createElement('div')\n return typeof div.ondrop !== 'undefined'\n}\n\nexport function formDataSupported() {\n return typeof FormData === 'function'\n}\n\nexport function fileApiSupported() {\n const input = document.createElement('input')\n input.type = 'file'\n return typeof input.files !== 'undefined'\n}\n\nexport function nodeListForEach(nodes, callback) {\n if (window.NodeList.prototype.forEach) {\n return nodes.forEach(callback)\n }\n for (let i = 0; i < nodes.length; i++) {\n callback.call(window, nodes[i], i, nodes)\n }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {HTMLElement} $element - Element to find siblings for\n * @param {string} selector - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element) return\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {HTMLElement} $element - Element to find siblings for\n * @param {string} selector - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element) return\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return null\n if (!$element) return\n if (!selector) return\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n\n/**\n * Move focus to element\n *\n * Sets tabindex to -1 to make the element programmatically focusable,\n * but removes it on blur as the element doesn't need to be focused again.\n *\n * @param {HTMLElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: HTMLElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: HTMLElement): void} [options.onBlur] - Callback on blur\n */\nexport function setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute('tabindex')\n\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1')\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener('blur', onBlur, { once: true })\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n if (options.onBlur) {\n options.onBlur.call($element)\n }\n\n if (!isFocusable) {\n $element.removeAttribute('tabindex')\n }\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener('focus', onFocus, { once: true })\n\n // Focus element\n if (options.onBeforeFocus) {\n options.onBeforeFocus.call($element)\n }\n $element.focus()\n}\n","import $ from 'jquery'\n\nimport { addAttributeValue, removeAttributeValue } from '../../helpers.mjs'\n\nexport function FormValidator(form, options) {\n this.form = form\n this.errors = []\n this.validators = []\n $(this.form).on('submit', $.proxy(this, 'onSubmit'))\n this.summary =\n options && options.summary ? $(options.summary) : $('.govuk-error-summary')\n this.originalTitle = document.title\n}\n\nFormValidator.entityMap = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;',\n '`': '&#x60;',\n '=': '&#x3D;'\n}\n\nFormValidator.prototype.escapeHtml = function (string) {\n return String(string).replace(/[&<>\"'`=/]/g, function fromEntityMap(s) {\n return FormValidator.entityMap[s]\n })\n}\n\nFormValidator.prototype.resetTitle = function () {\n document.title = this.originalTitle\n}\n\nFormValidator.prototype.updateTitle = function () {\n document.title = `${this.errors.length} errors - ${document.title}`\n}\n\nFormValidator.prototype.showSummary = function () {\n this.summary.html(this.getSummaryHtml())\n this.summary.removeClass('moj-hidden')\n this.summary.attr('aria-labelledby', 'errorSummary-heading')\n this.summary.focus()\n}\n\nFormValidator.prototype.getSummaryHtml = function () {\n let html =\n '<h2 id=\"error-summary-title\" class=\"govuk-error-summary__title\">There is a problem</h2>'\n html += '<div class=\"govuk-error-summary__body\">'\n html += '<ul class=\"govuk-list govuk-error-summary__list\">'\n for (let i = 0, j = this.errors.length; i < j; i++) {\n const error = this.errors[i]\n html += '<li>'\n html += `<a href=\"#${this.escapeHtml(error.fieldName)}\">`\n html += this.escapeHtml(error.message)\n html += '</a>'\n html += '</li>'\n }\n html += '</ul>'\n html += '</div>'\n return html\n}\n\nFormValidator.prototype.hideSummary = function () {\n this.summary.addClass('moj-hidden')\n this.summary.removeAttr('aria-labelledby')\n}\n\nFormValidator.prototype.onSubmit = function (e) {\n this.removeInlineErrors()\n this.hideSummary()\n this.resetTitle()\n if (!this.validate()) {\n e.preventDefault()\n this.updateTitle()\n this.showSummary()\n this.showInlineErrors()\n }\n}\n\nFormValidator.prototype.showInlineErrors = function () {\n for (let i = 0, j = this.errors.length; i < j; i++) {\n this.showInlineError(this.errors[i])\n }\n}\n\nFormValidator.prototype.showInlineError = function (error) {\n const errorSpanId = `${error.fieldName}-error`\n const errorSpan = `<span class=\"govuk-error-message\" id=\"${\n errorSpanId\n }\">${this.escapeHtml(error.message)}</span>`\n const control = $(`#${error.fieldName}`)\n const fieldContainer = control.parents('.govuk-form-group')\n const label = fieldContainer.find('label')\n const legend = fieldContainer.find('legend')\n const fieldset = fieldContainer.find('fieldset')\n fieldContainer.addClass('govuk-form-group--error')\n if (legend.length) {\n legend.after(errorSpan)\n fieldContainer.attr('aria-invalid', 'true')\n addAttributeValue(fieldset[0], 'aria-describedby', errorSpanId)\n } else {\n label.after(errorSpan)\n control.attr('aria-invalid', 'true')\n addAttributeValue(control[0], 'aria-describedby', errorSpanId)\n }\n}\n\nFormValidator.prototype.removeInlineErrors = function () {\n for (let i = 0; i < this.errors.length; i++) {\n this.removeInlineError(this.errors[i])\n }\n}\n\nFormValidator.prototype.removeInlineError = function (error) {\n const control = $(`#${error.fieldName}`)\n const fieldContainer = control.parents('.govuk-form-group')\n fieldContainer.find('.govuk-error-message').remove()\n fieldContainer.removeClass('govuk-form-group--error')\n fieldContainer.find('[aria-invalid]').attr('aria-invalid', 'false')\n const errorSpanId = `${error.fieldName}-error`\n removeAttributeValue(\n fieldContainer.find('[aria-describedby]')[0],\n 'aria-describedby',\n errorSpanId\n )\n}\n\nFormValidator.prototype.addValidator = function (fieldName, rules) {\n this.validators.push({\n fieldName,\n rules,\n field: this.form.elements[fieldName]\n })\n}\n\nFormValidator.prototype.validate = function () {\n this.errors = []\n let validator = null\n let validatorReturnValue = true\n let i\n let j\n for (i = 0; i < this.validators.length; i++) {\n validator = this.validators[i]\n for (j = 0; j < validator.rules.length; j++) {\n validatorReturnValue = validator.rules[j].method(\n validator.field,\n validator.rules[j].params\n )\n\n if (typeof validatorReturnValue === 'boolean' && !validatorReturnValue) {\n this.errors.push({\n fieldName: validator.fieldName,\n message: validator.rules[j].message\n })\n break\n } else if (typeof validatorReturnValue === 'string') {\n this.errors.push({\n fieldName: validatorReturnValue,\n message: validator.rules[j].message\n })\n break\n }\n }\n }\n return this.errors.length === 0\n}\n"],"names":[],"mappings":"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"}
@@ -166,3 +166,4 @@ FormValidator.prototype.validate = function () {
166
166
  };
167
167
 
168
168
  export { FormValidator };
169
+ //# sourceMappingURL=form-validator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-validator.mjs","sources":["../../../../src/moj/components/form-validator/form-validator.mjs"],"sourcesContent":["import $ from 'jquery'\n\nimport { addAttributeValue, removeAttributeValue } from '../../helpers.mjs'\n\nexport function FormValidator(form, options) {\n this.form = form\n this.errors = []\n this.validators = []\n $(this.form).on('submit', $.proxy(this, 'onSubmit'))\n this.summary =\n options && options.summary ? $(options.summary) : $('.govuk-error-summary')\n this.originalTitle = document.title\n}\n\nFormValidator.entityMap = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;',\n '`': '&#x60;',\n '=': '&#x3D;'\n}\n\nFormValidator.prototype.escapeHtml = function (string) {\n return String(string).replace(/[&<>\"'`=/]/g, function fromEntityMap(s) {\n return FormValidator.entityMap[s]\n })\n}\n\nFormValidator.prototype.resetTitle = function () {\n document.title = this.originalTitle\n}\n\nFormValidator.prototype.updateTitle = function () {\n document.title = `${this.errors.length} errors - ${document.title}`\n}\n\nFormValidator.prototype.showSummary = function () {\n this.summary.html(this.getSummaryHtml())\n this.summary.removeClass('moj-hidden')\n this.summary.attr('aria-labelledby', 'errorSummary-heading')\n this.summary.focus()\n}\n\nFormValidator.prototype.getSummaryHtml = function () {\n let html =\n '<h2 id=\"error-summary-title\" class=\"govuk-error-summary__title\">There is a problem</h2>'\n html += '<div class=\"govuk-error-summary__body\">'\n html += '<ul class=\"govuk-list govuk-error-summary__list\">'\n for (let i = 0, j = this.errors.length; i < j; i++) {\n const error = this.errors[i]\n html += '<li>'\n html += `<a href=\"#${this.escapeHtml(error.fieldName)}\">`\n html += this.escapeHtml(error.message)\n html += '</a>'\n html += '</li>'\n }\n html += '</ul>'\n html += '</div>'\n return html\n}\n\nFormValidator.prototype.hideSummary = function () {\n this.summary.addClass('moj-hidden')\n this.summary.removeAttr('aria-labelledby')\n}\n\nFormValidator.prototype.onSubmit = function (e) {\n this.removeInlineErrors()\n this.hideSummary()\n this.resetTitle()\n if (!this.validate()) {\n e.preventDefault()\n this.updateTitle()\n this.showSummary()\n this.showInlineErrors()\n }\n}\n\nFormValidator.prototype.showInlineErrors = function () {\n for (let i = 0, j = this.errors.length; i < j; i++) {\n this.showInlineError(this.errors[i])\n }\n}\n\nFormValidator.prototype.showInlineError = function (error) {\n const errorSpanId = `${error.fieldName}-error`\n const errorSpan = `<span class=\"govuk-error-message\" id=\"${\n errorSpanId\n }\">${this.escapeHtml(error.message)}</span>`\n const control = $(`#${error.fieldName}`)\n const fieldContainer = control.parents('.govuk-form-group')\n const label = fieldContainer.find('label')\n const legend = fieldContainer.find('legend')\n const fieldset = fieldContainer.find('fieldset')\n fieldContainer.addClass('govuk-form-group--error')\n if (legend.length) {\n legend.after(errorSpan)\n fieldContainer.attr('aria-invalid', 'true')\n addAttributeValue(fieldset[0], 'aria-describedby', errorSpanId)\n } else {\n label.after(errorSpan)\n control.attr('aria-invalid', 'true')\n addAttributeValue(control[0], 'aria-describedby', errorSpanId)\n }\n}\n\nFormValidator.prototype.removeInlineErrors = function () {\n for (let i = 0; i < this.errors.length; i++) {\n this.removeInlineError(this.errors[i])\n }\n}\n\nFormValidator.prototype.removeInlineError = function (error) {\n const control = $(`#${error.fieldName}`)\n const fieldContainer = control.parents('.govuk-form-group')\n fieldContainer.find('.govuk-error-message').remove()\n fieldContainer.removeClass('govuk-form-group--error')\n fieldContainer.find('[aria-invalid]').attr('aria-invalid', 'false')\n const errorSpanId = `${error.fieldName}-error`\n removeAttributeValue(\n fieldContainer.find('[aria-describedby]')[0],\n 'aria-describedby',\n errorSpanId\n )\n}\n\nFormValidator.prototype.addValidator = function (fieldName, rules) {\n this.validators.push({\n fieldName,\n rules,\n field: this.form.elements[fieldName]\n })\n}\n\nFormValidator.prototype.validate = function () {\n this.errors = []\n let validator = null\n let validatorReturnValue = true\n let i\n let j\n for (i = 0; i < this.validators.length; i++) {\n validator = this.validators[i]\n for (j = 0; j < validator.rules.length; j++) {\n validatorReturnValue = validator.rules[j].method(\n validator.field,\n validator.rules[j].params\n )\n\n if (typeof validatorReturnValue === 'boolean' && !validatorReturnValue) {\n this.errors.push({\n fieldName: validator.fieldName,\n message: validator.rules[j].message\n })\n break\n } else if (typeof validatorReturnValue === 'string') {\n this.errors.push({\n fieldName: validatorReturnValue,\n message: validator.rules[j].message\n })\n break\n }\n }\n }\n return this.errors.length === 0\n}\n"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Examples
6
6
 
7
- ```
7
+ ```njk
8
8
  {{ mojHeader({
9
9
  organisationLabel: {
10
10
  text: 'Organisation name',