@ministryofjustice/frontend 5.1.0 → 5.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/moj/all.bundle.js +52 -3
- package/moj/all.bundle.js.map +1 -1
- package/moj/all.bundle.mjs +52 -3
- package/moj/all.bundle.mjs.map +1 -1
- package/moj/common/moj-frontend-version.mjs +1 -1
- package/moj/components/sortable-table/_sortable-table.scss +3 -42
- package/moj/components/sortable-table/_sortable-table.scss.map +1 -1
- package/moj/components/sortable-table/sortable-table.bundle.js +51 -2
- package/moj/components/sortable-table/sortable-table.bundle.js.map +1 -1
- package/moj/components/sortable-table/sortable-table.bundle.mjs +51 -2
- package/moj/components/sortable-table/sortable-table.bundle.mjs.map +1 -1
- package/moj/components/sortable-table/sortable-table.mjs +51 -2
- package/moj/components/sortable-table/sortable-table.mjs.map +1 -1
- package/moj/core/_moj-frontend-properties.scss +1 -1
- package/moj/moj-frontend.min.css +1 -1
- package/moj/moj-frontend.min.css.map +1 -1
- package/moj/moj-frontend.min.js +1 -1
- package/moj/moj-frontend.min.js.map +1 -1
- package/package.json +1 -1
package/moj/all.bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all.bundle.js","sources":["../../src/moj/common/moj-frontend-version.mjs","../../src/moj/components/add-another/add-another.mjs","../../src/moj/common/index.mjs","../../src/moj/helpers.mjs","../../src/moj/components/alert/alert.mjs","../../src/moj/components/button-menu/button-menu.mjs","../../src/moj/components/date-picker/date-picker.mjs","../../src/moj/components/filter-toggle-button/filter-toggle-button.mjs","../../src/moj/components/form-validator/form-validator.mjs","../../src/moj/components/multi-file-upload/multi-file-upload.mjs","../../src/moj/components/multi-select/multi-select.mjs","../../src/moj/components/password-reveal/password-reveal.mjs","../../src/moj/components/rich-text-editor/rich-text-editor.mjs","../../src/moj/components/search-toggle/search-toggle.mjs","../../src/moj/components/sortable-table/sortable-table.mjs","../../src/moj/all.mjs"],"sourcesContent":["/*\n * This variable is automatically overwritten during builds and releases.\n * It doesn't need to be updated manually.\n */\n\n/**\n * MoJ Frontend release version\n *\n * {@link https://github.com/ministryofjustice/moj-frontend/releases}\n */\nexport const version = 'development'\n","import { Component } from 'govuk-frontend'\n\nexport class AddAnother extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for add another\n */\n constructor($root) {\n super($root)\n\n this.$root.addEventListener('click', this.onRemoveButtonClick.bind(this))\n this.$root.addEventListener('click', this.onAddButtonClick.bind(this))\n\n const $buttons = this.$root.querySelectorAll(\n '.moj-add-another__add-button, moj-add-another__remove-button'\n )\n\n $buttons.forEach(($button) => {\n if (!($button instanceof HTMLButtonElement)) {\n return\n }\n\n $button.type = 'button'\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onAddButtonClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-add-another__add-button')\n ) {\n return\n }\n\n const $items = this.getItems()\n const $item = this.getNewItem()\n\n if (!$item || !($item instanceof HTMLElement)) {\n return\n }\n\n this.updateAttributes($item, $items.length)\n this.resetItem($item)\n\n const $firstItem = $items[0]\n if (!this.hasRemoveButton($firstItem)) {\n this.createRemoveButton($firstItem)\n }\n\n $items[$items.length - 1].after($item)\n\n const $input = $item.querySelector('input, textarea, select')\n if ($input && $input instanceof HTMLInputElement) {\n $input.focus()\n }\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n hasRemoveButton($item) {\n return $item.querySelectorAll('.moj-add-another__remove-button').length\n }\n\n getItems() {\n if (!this.$root) {\n return []\n }\n\n const $items = Array.from(\n this.$root.querySelectorAll('.moj-add-another__item')\n )\n\n return $items.filter((item) => item instanceof HTMLElement)\n }\n\n getNewItem() {\n const $items = this.getItems()\n const $item = $items[0].cloneNode(true)\n\n if (!$item || !($item instanceof HTMLElement)) {\n return\n }\n\n if (!this.hasRemoveButton($item)) {\n this.createRemoveButton($item)\n }\n\n return $item\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n * @param {number} index - Add another item index\n */\n updateAttributes($item, index) {\n $item.querySelectorAll('[data-name]').forEach(($input) => {\n if (!($input instanceof HTMLInputElement)) {\n return\n }\n\n const name = $input.getAttribute('data-name') || ''\n const id = $input.getAttribute('data-id') || ''\n const originalId = $input.id\n\n $input.name = name.replace(/%index%/, `${index}`)\n $input.id = id.replace(/%index%/, `${index}`)\n\n const $label =\n $input.parentElement.querySelector('label') ||\n $input.closest('label') ||\n $item.querySelector(`[for=\"${originalId}\"]`)\n\n if ($label && $label instanceof HTMLLabelElement) {\n $label.htmlFor = $input.id\n }\n })\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n createRemoveButton($item) {\n const $button = document.createElement('button')\n $button.type = 'button'\n\n $button.classList.add(\n 'govuk-button',\n 'govuk-button--secondary',\n 'moj-add-another__remove-button'\n )\n\n $button.textContent = 'Remove'\n\n $item.append($button)\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n resetItem($item) {\n $item.querySelectorAll('[data-name], [data-id]').forEach(($input) => {\n if (!($input instanceof HTMLInputElement)) {\n return\n }\n\n if ($input.type === 'checkbox' || $input.type === 'radio') {\n $input.checked = false\n } else {\n $input.value = ''\n }\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onRemoveButtonClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-add-another__remove-button')\n ) {\n return\n }\n\n $button.closest('.moj-add-another__item').remove()\n\n const $items = this.getItems()\n\n if ($items.length === 1) {\n $items[0].querySelector('.moj-add-another__remove-button').remove()\n }\n\n $items.forEach(($item, index) => {\n this.updateAttributes($item, index)\n })\n\n this.focusHeading()\n }\n\n focusHeading() {\n const $heading = this.$root.querySelector('.moj-add-another__heading')\n\n if ($heading && $heading instanceof HTMLElement) {\n $heading.focus()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-add-another'\n}\n","/**\n * GOV.UK Frontend helpers\n *\n * @todo Import from GOV.UK Frontend\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 * @template {HTMLElement} FocusElement\n * @param {FocusElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: FocusElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: FocusElement): 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 options.onBlur?.call($element)\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 options.onBeforeFocus?.call($element)\n $element.focus()\n}\n","/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n let re, m\n if ($element.getAttribute(attr)) {\n if ($element.getAttribute(attr) === value) {\n $element.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = $element.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n $element.setAttribute(\n attr,\n $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n let re\n if (!$element.getAttribute(attr)) {\n $element.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test($element.getAttribute(attr))) {\n $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n }\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 {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return\n if (!$element || !($element instanceof HTMLElement) || !selector) {\n return\n }\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n","import { ConfigurableComponent } from 'govuk-frontend'\n\nimport { setFocus } from '../../common/index.mjs'\nimport {\n findNearestMatchingElement,\n getPreviousSibling\n} from '../../helpers.mjs'\n\n/**\n * @augments {ConfigurableComponent<AlertConfig>}\n */\nexport class Alert extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for alert\n * @param {AlertConfig} [config] - Alert config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n /**\n * Focus the alert\n *\n * If `role=\"alert\"` is set, focus the element to help some assistive\n * technologies prioritise announcing it.\n *\n * You can turn off the auto-focus functionality by setting\n * `data-disable-auto-focus=\"true\"` in the component HTML. You might wish to\n * do this based on user research findings, or to avoid a clash with another\n * element which should be focused when the page loads.\n */\n if (\n this.$root.getAttribute('role') === 'alert' &&\n !this.config.disableAutoFocus\n ) {\n setFocus(this.$root)\n }\n\n this.$dismissButton = this.$root.querySelector('.moj-alert__dismiss')\n\n if (this.config.dismissible && this.$dismissButton) {\n this.$dismissButton.innerHTML = this.config.dismissText\n this.$dismissButton.removeAttribute('hidden')\n\n this.$root.addEventListener('click', (event) => {\n if (\n event.target instanceof Node &&\n this.$dismissButton.contains(event.target)\n ) {\n this.dimiss()\n }\n })\n }\n }\n\n /**\n * Handle dismissing the alert\n */\n dimiss() {\n let $elementToRecieveFocus\n\n // If a selector has been provided, attempt to find that element\n if (this.config.focusOnDismissSelector) {\n $elementToRecieveFocus = document.querySelector(\n this.config.focusOnDismissSelector\n )\n }\n\n // Is the next sibling another alert\n if (!$elementToRecieveFocus) {\n const $nextSibling = this.$root.nextElementSibling\n if ($nextSibling && $nextSibling.matches('.moj-alert')) {\n $elementToRecieveFocus = $nextSibling\n }\n }\n\n // Else try to find any preceding sibling alert or heading\n if (!$elementToRecieveFocus) {\n $elementToRecieveFocus = getPreviousSibling(\n this.$root,\n '.moj-alert, h1, h2, h3, h4, h5, h6'\n )\n }\n\n // Else find the closest ancestor heading, or fallback to main, or last resort\n // use the body element\n if (!$elementToRecieveFocus) {\n $elementToRecieveFocus = findNearestMatchingElement(\n this.$root,\n 'h1, h2, h3, h4, h5, h6, main, body'\n )\n }\n\n // If we have an element, place focus on it\n if ($elementToRecieveFocus instanceof HTMLElement) {\n setFocus($elementToRecieveFocus)\n }\n\n // Remove the alert\n this.$root.remove()\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-alert'\n\n /**\n * Alert default config\n *\n * @type {AlertConfig}\n */\n static defaults = Object.freeze({\n dismissible: false,\n dismissText: 'Dismiss',\n disableAutoFocus: false\n })\n\n /**\n * Alert config schema\n *\n * @satisfies {Schema<AlertConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n dismissible: { type: 'boolean' },\n dismissText: { type: 'string' },\n disableAutoFocus: { type: 'boolean' },\n focusOnDismissSelector: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} AlertConfig\n * @property {boolean} [dismissible=false] - Can the alert be dismissed by the user\n * @property {string} [dismissText=Dismiss] - the label text for the dismiss button\n * @property {boolean} [disableAutoFocus=false] - whether the alert will be autofocused\n * @property {string} [focusOnDismissSelector] - CSS Selector for element to be focused on dismiss\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<ButtonMenuConfig>}\n */\nexport class ButtonMenu extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for button menu\n * @param {ButtonMenuConfig} [config] - Button menu config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n // If only one button is provided, don't initiate a menu and toggle button\n // if classes have been provided for the toggleButton, apply them to the single item\n if (this.$root.children.length === 1) {\n const $button = this.$root.children[0]\n\n $button.classList.forEach((className) => {\n if (className.startsWith('govuk-button-')) {\n $button.classList.remove(className)\n }\n\n $button.classList.remove('moj-button-menu__item')\n $button.classList.add('moj-button-menu__single-button')\n })\n\n if (this.config.buttonClasses) {\n $button.classList.add(...this.config.buttonClasses.split(' '))\n }\n }\n // Otherwise initialise a button menu\n if (this.$root.children.length > 1) {\n this.initMenu()\n }\n }\n\n initMenu() {\n this.$menu = this.createMenu()\n this.$root.insertAdjacentHTML('afterbegin', this.toggleTemplate())\n this.setupMenuItems()\n\n this.$menuToggle = this.$root.querySelector(':scope > button')\n this.$items = this.$menu.querySelectorAll('a, button')\n\n this.$menuToggle.addEventListener('click', (event) => {\n this.toggleMenu(event)\n })\n\n this.$root.addEventListener('keydown', (event) => {\n this.handleKeyDown(event)\n })\n\n document.addEventListener('click', (event) => {\n if (event.target instanceof Node && !this.$root.contains(event.target)) {\n this.closeMenu(false)\n }\n })\n }\n\n createMenu() {\n const $menu = document.createElement('ul')\n\n $menu.setAttribute('role', 'list')\n $menu.hidden = true\n $menu.classList.add('moj-button-menu__wrapper')\n\n if (this.config.alignMenu === 'right') {\n $menu.classList.add('moj-button-menu__wrapper--right')\n }\n\n this.$root.appendChild($menu)\n\n while (this.$root.firstChild !== $menu) {\n $menu.appendChild(this.$root.firstChild)\n }\n\n return $menu\n }\n\n setupMenuItems() {\n Array.from(this.$menu.children).forEach(($menuItem) => {\n // wrap item in li tag\n const $listItem = document.createElement('li')\n this.$menu.insertBefore($listItem, $menuItem)\n $listItem.appendChild($menuItem)\n\n $menuItem.setAttribute('tabindex', '-1')\n\n if ($menuItem.tagName === 'BUTTON') {\n $menuItem.setAttribute('type', 'button')\n }\n\n $menuItem.classList.forEach((className) => {\n if (className.startsWith('govuk-button')) {\n $menuItem.classList.remove(className)\n }\n })\n\n // add a slight delay after click before closing the menu, makes it *feel* better\n $menuItem.addEventListener('click', () => {\n setTimeout(() => {\n this.closeMenu(false)\n }, 50)\n })\n })\n }\n\n toggleTemplate() {\n return `\n <button type=\"button\" class=\"govuk-button moj-button-menu__toggle-button ${this.config.buttonClasses || ''}\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <span>\n ${this.config.buttonText}\n <svg width=\"11\" height=\"5\" viewBox=\"0 0 11 5\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.5 0L11 5L0 5L5.5 0Z\" fill=\"currentColor\"/>\n </svg>\n </span>\n </button>`\n }\n\n /**\n * @returns {boolean}\n */\n isOpen() {\n return this.$menuToggle.getAttribute('aria-expanded') === 'true'\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n toggleMenu(event) {\n event.preventDefault()\n\n // If menu is triggered with mouse don't move focus to first item\n const keyboardEvent = event.detail === 0\n const focusIndex = keyboardEvent ? 0 : -1\n\n if (this.isOpen()) {\n this.closeMenu()\n } else {\n this.openMenu(focusIndex)\n }\n }\n\n /**\n * Opens the menu and optionally sets the focus to the item with given index\n *\n * @param {number} focusIndex - The index of the item to focus\n */\n openMenu(focusIndex = 0) {\n this.$menu.hidden = false\n this.$menuToggle.setAttribute('aria-expanded', 'true')\n if (focusIndex !== -1) {\n this.focusItem(focusIndex)\n }\n }\n\n /**\n * Closes the menu and optionally returns focus back to menuToggle\n *\n * @param {boolean} moveFocus - whether to return focus to the toggle button\n */\n closeMenu(moveFocus = true) {\n this.$menu.hidden = true\n this.$menuToggle.setAttribute('aria-expanded', 'false')\n if (moveFocus) {\n this.$menuToggle.focus()\n }\n }\n\n /**\n * Focuses the menu item at the specified index\n *\n * @param {number} index - the index of the item to focus\n */\n focusItem(index) {\n if (index >= this.$items.length) index = 0\n if (index < 0) index = this.$items.length - 1\n\n const $menuItem = this.$items.item(index)\n if ($menuItem) {\n $menuItem.focus()\n }\n }\n\n currentFocusIndex() {\n const $activeElement = document.activeElement\n const $menuItems = Array.from(this.$items)\n\n return (\n ($activeElement instanceof HTMLAnchorElement ||\n $activeElement instanceof HTMLButtonElement) &&\n $menuItems.indexOf($activeElement)\n )\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n handleKeyDown(event) {\n if (event.target === this.$menuToggle) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n this.openMenu()\n break\n case 'ArrowUp':\n event.preventDefault()\n this.openMenu(this.$items.length - 1)\n break\n }\n }\n\n if (\n event.target instanceof Node &&\n this.$menu.contains(event.target) &&\n this.isOpen()\n ) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n if (this.currentFocusIndex() !== -1) {\n this.focusItem(this.currentFocusIndex() + 1)\n }\n break\n case 'ArrowUp':\n event.preventDefault()\n if (this.currentFocusIndex() !== -1) {\n this.focusItem(this.currentFocusIndex() - 1)\n }\n break\n case 'Home':\n event.preventDefault()\n this.focusItem(0)\n break\n case 'End':\n event.preventDefault()\n this.focusItem(this.$items.length - 1)\n break\n }\n }\n\n if (event.key === 'Escape' && this.isOpen()) {\n this.closeMenu()\n }\n if (event.key === 'Tab' && this.isOpen()) {\n this.closeMenu(false)\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-button-menu'\n\n /**\n * Button menu config\n *\n * @type {ButtonMenuConfig}\n */\n static defaults = Object.freeze({\n buttonText: 'Actions',\n alignMenu: 'left',\n buttonClasses: ''\n })\n\n /**\n * Button menu config schema\n *\n * @type {Schema<ButtonMenuConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n buttonText: { type: 'string' },\n buttonClasses: { type: 'string' },\n alignMenu: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} ButtonMenuConfig\n * @property {string} [buttonText='Actions'] - Label for the toggle button\n * @property {\"left\" | \"right\"} [alignMenu='left'] - the alignment of the menu\n * @property {string} [buttonClasses='govuk-button--secondary'] - css classes applied to the toggle button\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<DatePickerConfig>}\n */\nexport class DatePicker extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for date picker\n * @param {DatePickerConfig} [config] - Date picker config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $input =\n this.config.input.element ??\n this.$root.querySelector(this.config.input.selector)\n\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\n\n this.dayLabels = [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday'\n ]\n\n this.monthLabels = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n\n this.currentDate = new Date()\n this.currentDate.setHours(0, 0, 0, 0)\n this.calendarDays = /** @type {DSCalendarDay[]} */ ([])\n this.excludedDates = /** @type {Date[]} */ ([])\n this.excludedDays = /** @type {number[]} */ ([])\n\n this.buttonClass = 'moj-datepicker__button'\n this.selectedDayButtonClass = 'moj-datepicker__button--selected'\n this.currentDayButtonClass = 'moj-datepicker__button--current'\n this.todayButtonClass = 'moj-datepicker__button--today'\n\n this.setOptions()\n this.initControls()\n }\n\n initControls() {\n this.id = `datepicker-${this.$input.id}`\n\n this.$dialog = this.createDialog()\n this.createCalendarHeaders()\n\n const $componentWrapper = document.createElement('div')\n const $inputWrapper = document.createElement('div')\n $componentWrapper.classList.add('moj-datepicker__wrapper')\n $inputWrapper.classList.add('govuk-input__wrapper')\n\n this.$input.parentElement.insertBefore($componentWrapper, this.$input)\n $componentWrapper.appendChild($inputWrapper)\n $inputWrapper.appendChild(this.$input)\n\n $inputWrapper.insertAdjacentHTML('beforeend', this.toggleTemplate())\n $componentWrapper.insertAdjacentElement('beforeend', this.$dialog)\n\n this.$calendarButton = /** @type {HTMLButtonElement} */ (\n this.$root.querySelector('.moj-js-datepicker-toggle')\n )\n\n this.$dialogTitle = /** @type {HTMLHeadingElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-month-year')\n )\n\n this.createCalendar()\n\n this.$prevMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-month')\n )\n\n this.$prevYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-year')\n )\n\n this.$nextMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-month')\n )\n\n this.$nextYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-year')\n )\n\n this.$cancelButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-cancel')\n )\n\n this.$okButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-ok')\n )\n\n // add event listeners\n this.$prevMonthButton.addEventListener('click', (event) =>\n this.focusPreviousMonth(event, false)\n )\n this.$prevYearButton.addEventListener('click', (event) =>\n this.focusPreviousYear(event, false)\n )\n this.$nextMonthButton.addEventListener('click', (event) =>\n this.focusNextMonth(event, false)\n )\n this.$nextYearButton.addEventListener('click', (event) =>\n this.focusNextYear(event, false)\n )\n this.$cancelButton.addEventListener('click', (event) => {\n event.preventDefault()\n this.closeDialog()\n })\n this.$okButton.addEventListener('click', () => {\n this.selectDate(this.currentDate)\n })\n\n const $dialogButtons = this.$dialog.querySelectorAll(\n 'button:not([disabled=\"true\"])'\n )\n\n this.$firstButtonInDialog = $dialogButtons[0]\n this.$lastButtonInDialog = $dialogButtons[$dialogButtons.length - 1]\n this.$firstButtonInDialog.addEventListener('keydown', (event) =>\n this.firstButtonKeydown(event)\n )\n this.$lastButtonInDialog.addEventListener('keydown', (event) =>\n this.lastButtonKeydown(event)\n )\n\n this.$calendarButton.addEventListener('click', (event) =>\n this.toggleDialog(event)\n )\n\n this.$dialog.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') {\n this.closeDialog()\n event.preventDefault()\n event.stopPropagation()\n }\n })\n\n document.body.addEventListener('mouseup', (event) =>\n this.backgroundClick(event)\n )\n\n // populates calendar with initial dates, avoids Wave errors about null buttons\n this.updateCalendar()\n }\n\n createDialog() {\n const titleId = `datepicker-title-${this.$input.id}`\n const $dialog = document.createElement('div')\n\n $dialog.id = this.id\n $dialog.setAttribute('class', 'moj-datepicker__dialog')\n $dialog.setAttribute('role', 'dialog')\n $dialog.setAttribute('aria-modal', 'true')\n $dialog.setAttribute('aria-labelledby', titleId)\n $dialog.innerHTML = this.dialogTemplate(titleId)\n $dialog.hidden = true\n\n return $dialog\n }\n\n createCalendar() {\n const $tbody = this.$dialog.querySelector('tbody')\n let dayCount = 0\n for (let i = 0; i < 6; i++) {\n // create row\n const $row = $tbody.insertRow(i)\n\n for (let j = 0; j < 7; j++) {\n // create cell (day)\n const $cell = document.createElement('td')\n const $dateButton = document.createElement('button')\n\n $cell.appendChild($dateButton)\n $row.appendChild($cell)\n\n const calendarDay = new DSCalendarDay($dateButton, dayCount, i, j, this)\n this.calendarDays.push(calendarDay)\n dayCount++\n }\n }\n }\n\n toggleTemplate() {\n return `<button class=\"moj-datepicker__toggle moj-js-datepicker-toggle\" type=\"button\" aria-haspopup=\"dialog\" aria-controls=\"${this.id}\" aria-expanded=\"false\">\n <span class=\"govuk-visually-hidden\">Choose date</span>\n <svg width=\"32\" height=\"24\" focusable=\"false\" class=\"moj-datepicker-icon\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\">\n <path\n fill=\"currentColor\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M16.1333 2.93333H5.86668V4.4C5.86668 5.21002 5.21003 5.86667 4.40002 5.86667C3.59 5.86667 2.93335 5.21002 2.93335 4.4V2.93333H2C0.895431 2.93333 0 3.82877 0 4.93334V19.2667C0 20.3712 0.89543 21.2667 2 21.2667H20C21.1046 21.2667 22 20.3712 22 19.2667V4.93333C22 3.82876 21.1046 2.93333 20 2.93333H19.0667V4.4C19.0667 5.21002 18.41 5.86667 17.6 5.86667C16.79 5.86667 16.1333 5.21002 16.1333 4.4V2.93333ZM20.5333 8.06667H1.46665V18.8C1.46665 19.3523 1.91436 19.8 2.46665 19.8H19.5333C20.0856 19.8 20.5333 19.3523 20.5333 18.8V8.06667Z\"\n ></path>\n <rect x=\"3.66669\" width=\"1.46667\" height=\"5.13333\" rx=\"0.733333\" fill=\"currentColor\"></rect>\n <rect x=\"16.8667\" width=\"1.46667\" height=\"5.13333\" rx=\"0.733333\" fill=\"currentColor\"></rect>\n </svg>\n </button>`\n }\n\n /**\n * HTML template for calendar dialog\n *\n * @param {string} [titleId] - Id attribute for dialog title\n * @returns {string}\n */\n dialogTemplate(titleId) {\n return `<div class=\"moj-datepicker__dialog-header\">\n <div class=\"moj-datepicker__dialog-navbuttons\">\n <button class=\"moj-datepicker__button moj-js-datepicker-prev-year\">\n <span class=\"govuk-visually-hidden\">Previous year</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.1643 20L28.9572 14.2071L27.5429 12.7929L20.3358 20L27.5429 27.2071L28.9572 25.7929L23.1643 20Z\" fill=\"currentColor\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.1643 20L22.9572 14.2071L21.5429 12.7929L14.3358 20L21.5429 27.2071L22.9572 25.7929L17.1643 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n\n <button class=\"moj-datepicker__button moj-js-datepicker-prev-month\">\n <span class=\"govuk-visually-hidden\">Previous month</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.5729 20L25.7865 14.2071L24.5137 12.7929L18.0273 20L24.5137 27.2071L25.7865 25.7929L20.5729 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n </div>\n\n <h2 id=\"${titleId}\" class=\"moj-datepicker__dialog-title moj-js-datepicker-month-year\" aria-live=\"polite\">June 2020</h2>\n\n <div class=\"moj-datepicker__dialog-navbuttons\">\n <button class=\"moj-datepicker__button moj-js-datepicker-next-month\">\n <span class=\"govuk-visually-hidden\">Next month</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.4271 20L18.2135 14.2071L19.4863 12.7929L25.9727 20L19.4863 27.2071L18.2135 25.7929L23.4271 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n\n <button class=\"moj-datepicker__button moj-js-datepicker-next-year\">\n <span class=\"govuk-visually-hidden\">Next year</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.8357 20L15.0428 14.2071L16.4571 12.7929L23.6642 20L16.4571 27.2071L15.0428 25.7929L20.8357 20Z\" fill=\"currentColor\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.8357 20L21.0428 14.2071L22.4571 12.7929L29.6642 20L22.4571 27.2071L21.0428 25.7929L26.8357 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <table class=\"moj-datepicker__calendar moj-js-datepicker-grid\" role=\"grid\" aria-labelledby=\"${titleId}\">\n <thead>\n <tr></tr>\n </thead>\n\n <tbody></tbody>\n </table>\n\n <div class=\"govuk-button-group\">\n <button type=\"button\" class=\"govuk-button moj-js-datepicker-ok\">Select</button>\n <button type=\"button\" class=\"govuk-button govuk-button--secondary moj-js-datepicker-cancel\">Close</button>\n </div>`\n }\n\n createCalendarHeaders() {\n this.dayLabels.forEach((day) => {\n const html = `<th scope=\"col\"><span aria-hidden=\"true\">${day.substring(0, 3)}</span><span class=\"govuk-visually-hidden\">${day}</span></th>`\n const $headerRow = this.$dialog.querySelector('thead > tr')\n $headerRow.insertAdjacentHTML('beforeend', html)\n })\n }\n\n /**\n * Pads given number with leading zeros\n *\n * @param {number} value - The value to be padded\n * @param {number} length - The length in characters of the output\n * @returns {string}\n */\n leadingZeros(value, length = 2) {\n let ret = value.toString()\n\n while (ret.length < length) {\n ret = `0${ret}`\n }\n\n return ret\n }\n\n setOptions() {\n this.setMinAndMaxDatesOnCalendar()\n this.setExcludedDates()\n this.setExcludedDays()\n this.setWeekStartDay()\n }\n\n setMinAndMaxDatesOnCalendar() {\n if (this.config.minDate) {\n this.minDate = this.formattedDateFromString(this.config.minDate, null)\n if (this.minDate && this.currentDate < this.minDate) {\n this.currentDate = this.minDate\n }\n }\n\n if (this.config.maxDate) {\n this.maxDate = this.formattedDateFromString(this.config.maxDate, null)\n if (this.maxDate && this.currentDate > this.maxDate) {\n this.currentDate = this.maxDate\n }\n }\n }\n\n setExcludedDates() {\n if (this.config.excludedDates) {\n this.excludedDates = this.config.excludedDates\n .replace(/\\s+/, ' ')\n .split(' ')\n .map((item) => {\n return item.includes('-')\n ? this.parseDateRangeString(item)\n : [this.formattedDateFromString(item)]\n })\n .reduce((dates, items) => dates.concat(items))\n .filter((date) => date)\n }\n }\n\n /**\n * Parses a daterange string into an array of dates\n *\n * @param {string} datestring - A daterange string in the format \"dd/mm/yyyy-dd/mm/yyyy\"\n */\n parseDateRangeString(datestring) {\n const dates = []\n const [startDate, endDate] = datestring\n .split('-')\n .map((d) => this.formattedDateFromString(d, null))\n\n if (startDate && endDate) {\n const date = new Date(startDate.getTime())\n /* eslint-disable no-unmodified-loop-condition */\n while (date <= endDate) {\n dates.push(new Date(date))\n date.setDate(date.getDate() + 1)\n }\n /* eslint-enable no-unmodified-loop-condition */\n }\n return dates\n }\n\n setExcludedDays() {\n if (this.config.excludedDays) {\n // lowercase and arrange dayLabels to put indexOf sunday == 0 for comparison\n // with getDay() function\n const weekDays = this.dayLabels.map((item) => item.toLowerCase())\n if (this.config.weekStartDay === 'monday') {\n weekDays.unshift(weekDays.pop())\n }\n\n this.excludedDays = this.config.excludedDays\n .replace(/\\s+/, ' ')\n .toLowerCase()\n .split(' ')\n .map((item) => weekDays.indexOf(item))\n .filter((item) => item !== -1)\n }\n }\n\n setWeekStartDay() {\n const weekStartDayParam = this.config.weekStartDay\n if (weekStartDayParam && weekStartDayParam.toLowerCase() === 'sunday') {\n this.config.weekStartDay = 'sunday'\n // Rotate dayLabels array to put Sunday as the first item\n this.dayLabels.unshift(this.dayLabels.pop())\n } else {\n this.config.weekStartDay = 'monday'\n }\n }\n\n /**\n * Determine if a date is selectable\n *\n * @param {Date} date - the date to check\n * @returns {boolean}\n */\n isExcludedDate(date) {\n // This comparison does not work correctly - it will exclude the mindate itself\n // see: https://github.com/ministryofjustice/moj-frontend/issues/923\n if (this.minDate && this.minDate > date) {\n return true\n }\n\n // This comparison works as expected - the maxdate will not be excluded\n if (this.maxDate && this.maxDate < date) {\n return true\n }\n\n for (const excludedDate of this.excludedDates) {\n if (date.toDateString() === excludedDate.toDateString()) {\n return true\n }\n }\n\n if (this.excludedDays.includes(date.getDay())) {\n return true\n }\n\n return false\n }\n\n /**\n * Get a Date object from a string\n *\n * @param {string} dateString - string in the format d/m/yyyy dd/mm/yyyy\n * @param {Date} fallback - date object to return if formatting fails\n * @returns {Date}\n */\n formattedDateFromString(dateString, fallback = new Date()) {\n let formattedDate = null\n // Accepts d/m/yyyy and dd/mm/yyyy\n const dateFormatPattern = /(\\d{1,2})([-/,. ])(\\d{1,2})\\2(\\d{4})/\n\n if (!dateFormatPattern.test(dateString)) return fallback\n\n const match = dateFormatPattern.exec(dateString)\n const day = match[1]\n const month = match[3]\n const year = match[4]\n\n formattedDate = new Date(`${year}-${month}-${day}`)\n if (\n formattedDate instanceof Date &&\n Number.isFinite(formattedDate.getTime())\n ) {\n return formattedDate\n }\n return fallback\n }\n\n /**\n * Get a formatted date string from a Date object\n *\n * @param {Date} date - date to format to a string\n * @returns {string}\n */\n formattedDateFromDate(date) {\n if (this.config.leadingZeros) {\n return `${this.leadingZeros(date.getDate())}/${this.leadingZeros(date.getMonth() + 1)}/${date.getFullYear()}`\n }\n\n return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`\n }\n\n /**\n * Get a human readable date in the format Monday 2 March 2024\n *\n * @param {Date} date - Date to format\n * @returns {string}\n */\n formattedDateHuman(date) {\n return `${this.dayLabels[(date.getDay() + 6) % 7]} ${date.getDate()} ${this.monthLabels[date.getMonth()]} ${date.getFullYear()}`\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n backgroundClick(event) {\n if (\n this.isOpen() &&\n event.target instanceof Node &&\n !this.$dialog.contains(event.target) &&\n !this.$input.contains(event.target) &&\n !this.$calendarButton.contains(event.target)\n ) {\n event.preventDefault()\n this.closeDialog()\n }\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n firstButtonKeydown(event) {\n if (event.key === 'Tab' && event.shiftKey) {\n this.$lastButtonInDialog.focus()\n event.preventDefault()\n }\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n lastButtonKeydown(event) {\n if (event.key === 'Tab' && !event.shiftKey) {\n this.$firstButtonInDialog.focus()\n event.preventDefault()\n }\n }\n\n // render calendar\n updateCalendar() {\n this.$dialogTitle.innerHTML = `${this.monthLabels[this.currentDate.getMonth()]} ${this.currentDate.getFullYear()}`\n\n const day = this.currentDate\n const firstOfMonth = new Date(day.getFullYear(), day.getMonth(), 1)\n let dayOfWeek\n\n if (this.config.weekStartDay === 'monday') {\n dayOfWeek = firstOfMonth.getDay() === 0 ? 6 : firstOfMonth.getDay() - 1 // Change logic to make Monday first day of week, i.e. 0\n } else {\n dayOfWeek = firstOfMonth.getDay()\n }\n\n firstOfMonth.setDate(firstOfMonth.getDate() - dayOfWeek)\n\n const thisDay = new Date(firstOfMonth)\n\n // loop through our days\n for (const calendarDay of this.calendarDays) {\n const hidden = thisDay.getMonth() !== day.getMonth()\n const disabled = this.isExcludedDate(thisDay)\n\n calendarDay.update(thisDay, hidden, disabled)\n\n thisDay.setDate(thisDay.getDate() + 1)\n }\n }\n\n /**\n * @param {boolean} [focus] - Focus the day button\n */\n setCurrentDate(focus = true) {\n const { currentDate } = this\n this.calendarDays.forEach((calendarDay) => {\n calendarDay.$button.classList.add('moj-datepicker__button')\n calendarDay.$button.classList.add('moj-datepicker__calendar-day')\n calendarDay.$button.setAttribute('tabindex', '-1')\n calendarDay.$button.classList.remove(this.selectedDayButtonClass)\n const calendarDayDate = calendarDay.date\n calendarDayDate.setHours(0, 0, 0, 0)\n\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n\n if (\n calendarDayDate.getTime() ===\n currentDate.getTime() /* && !calendarDay.button.disabled */\n ) {\n if (focus) {\n calendarDay.$button.setAttribute('tabindex', '0')\n calendarDay.$button.focus()\n calendarDay.$button.classList.add(this.selectedDayButtonClass)\n }\n }\n\n if (\n this.inputDate &&\n calendarDayDate.getTime() === this.inputDate.getTime()\n ) {\n calendarDay.$button.classList.add(this.currentDayButtonClass)\n calendarDay.$button.setAttribute('aria-current', 'date')\n } else {\n calendarDay.$button.classList.remove(this.currentDayButtonClass)\n calendarDay.$button.removeAttribute('aria-current')\n }\n\n if (calendarDayDate.getTime() === today.getTime()) {\n calendarDay.$button.classList.add(this.todayButtonClass)\n } else {\n calendarDay.$button.classList.remove(this.todayButtonClass)\n }\n })\n\n // if no date is tab-able, make the first non-disabled date tab-able\n if (!focus) {\n const enabledDays = this.calendarDays.filter((calendarDay) => {\n return (\n window.getComputedStyle(calendarDay.$button).display === 'block' &&\n !calendarDay.$button.disabled\n )\n })\n\n enabledDays[0].$button.setAttribute('tabindex', '0')\n\n this.currentDate = enabledDays[0].date\n }\n }\n\n /**\n * @param {Date} date - Date to select\n */\n selectDate(date) {\n if (this.isExcludedDate(date)) {\n return\n }\n\n this.$calendarButton.querySelector('span').innerText =\n `Choose date. Selected date is ${this.formattedDateHuman(date)}`\n this.$input.value = this.formattedDateFromDate(date)\n\n const changeEvent = new Event('change', { bubbles: true, cancelable: true })\n this.$input.dispatchEvent(changeEvent)\n\n this.closeDialog()\n }\n\n isOpen() {\n return this.$dialog.classList.contains('moj-datepicker__dialog--open')\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n toggleDialog(event) {\n event.preventDefault()\n if (this.isOpen()) {\n this.closeDialog()\n } else {\n this.setMinAndMaxDatesOnCalendar()\n this.openDialog()\n }\n }\n\n openDialog() {\n this.$dialog.hidden = false\n this.$dialog.classList.add('moj-datepicker__dialog--open')\n this.$calendarButton.setAttribute('aria-expanded', 'true')\n\n // position the dialog\n // if input is wider than dialog pin it to the right\n if (this.$input.offsetWidth > this.$dialog.offsetWidth) {\n this.$dialog.style.right = `0px`\n }\n this.$dialog.style.top = `${this.$input.offsetHeight + 3}px`\n\n // get the date from the input element\n this.inputDate = this.formattedDateFromString(this.$input.value)\n this.currentDate = this.inputDate\n this.currentDate.setHours(0, 0, 0, 0)\n\n this.updateCalendar()\n this.setCurrentDate()\n }\n\n closeDialog() {\n this.$dialog.hidden = true\n this.$dialog.classList.remove('moj-datepicker__dialog--open')\n this.$calendarButton.setAttribute('aria-expanded', 'false')\n this.$calendarButton.focus()\n }\n\n /**\n * @param {Date} date - Date to go to\n * @param {boolean} [focus] - Focus the day button\n */\n goToDate(date, focus) {\n const current = this.currentDate\n this.currentDate = date\n\n if (\n current.getMonth() !== this.currentDate.getMonth() ||\n current.getFullYear() !== this.currentDate.getFullYear()\n ) {\n this.updateCalendar()\n }\n\n this.setCurrentDate(focus)\n }\n\n // day navigation\n focusNextDay() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() + 1)\n this.goToDate(date)\n }\n\n focusPreviousDay() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() - 1)\n this.goToDate(date)\n }\n\n // week navigation\n focusNextWeek() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() + 7)\n this.goToDate(date)\n }\n\n focusPreviousWeek() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() - 7)\n this.goToDate(date)\n }\n\n focusFirstDayOfWeek() {\n const date = new Date(this.currentDate)\n const firstDayOfWeekIndex = this.config.weekStartDay === 'sunday' ? 0 : 1\n const dayOfWeek = date.getDay()\n const diff =\n dayOfWeek >= firstDayOfWeekIndex\n ? dayOfWeek - firstDayOfWeekIndex\n : 6 - dayOfWeek\n\n date.setDate(date.getDate() - diff)\n date.setHours(0, 0, 0, 0)\n\n this.goToDate(date)\n }\n\n focusLastDayOfWeek() {\n const date = new Date(this.currentDate)\n const lastDayOfWeekIndex = this.config.weekStartDay === 'sunday' ? 6 : 0\n const dayOfWeek = date.getDay()\n const diff =\n dayOfWeek <= lastDayOfWeekIndex\n ? lastDayOfWeekIndex - dayOfWeek\n : 7 - dayOfWeek\n\n date.setDate(date.getDate() + diff)\n date.setHours(0, 0, 0, 0)\n\n this.goToDate(date)\n }\n\n /**\n * Month navigation\n *\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\n */\n focusNextMonth(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setMonth(date.getMonth() + 1, 1)\n this.goToDate(date, focus)\n }\n\n /**\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\n */\n focusPreviousMonth(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setMonth(date.getMonth() - 1, 1)\n this.goToDate(date, focus)\n }\n\n /**\n * Year navigation\n *\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\n */\n focusNextYear(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setFullYear(date.getFullYear() + 1, date.getMonth(), 1)\n this.goToDate(date, focus)\n }\n\n /**\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\n */\n focusPreviousYear(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setFullYear(date.getFullYear() - 1, date.getMonth(), 1)\n this.goToDate(date, focus)\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-date-picker'\n\n /**\n * Date picker default config\n *\n * @type {DatePickerConfig}\n */\n static defaults = Object.freeze({\n leadingZeros: false,\n weekStartDay: 'monday',\n input: {\n selector: '.moj-js-datepicker-input'\n }\n })\n\n /**\n * Date picker config schema\n *\n * @satisfies {Schema<DatePickerConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n excludedDates: { type: 'string' },\n excludedDays: { type: 'string' },\n leadingZeros: { type: 'boolean' },\n maxDate: { type: 'string' },\n minDate: { type: 'string' },\n weekStartDay: { type: 'string' },\n input: { type: 'object' }\n }\n })\n )\n}\n\nclass DSCalendarDay {\n /**\n *\n * @param {HTMLButtonElement} $button\n * @param {number} index\n * @param {number} row\n * @param {number} column\n * @param {DatePicker} picker\n */\n constructor($button, index, row, column, picker) {\n this.index = index\n this.row = row\n this.column = column\n this.$button = $button\n this.picker = picker\n\n this.date = new Date()\n this.$button.addEventListener('keydown', this.keyPress.bind(this))\n this.$button.addEventListener('click', this.click.bind(this))\n }\n\n /**\n * @param {Date} day - the Date for the calendar day\n * @param {boolean} hidden - visibility of the day\n * @param {boolean} disabled - is the day selectable or excluded\n */\n update(day, hidden, disabled) {\n const label = day.getDate()\n let accessibleLabel = this.picker.formattedDateHuman(day)\n\n if (disabled) {\n this.$button.setAttribute('aria-disabled', 'true')\n accessibleLabel = `Excluded date, ${accessibleLabel}`\n } else {\n this.$button.removeAttribute('aria-disabled')\n }\n\n if (hidden) {\n this.$button.style.display = 'none'\n } else {\n this.$button.style.display = 'block'\n }\n this.$button.setAttribute(\n 'data-testid',\n this.picker.formattedDateFromDate(day)\n )\n\n this.$button.innerHTML = `<span class=\"govuk-visually-hidden\">${accessibleLabel}</span><span aria-hidden=\"true\">${label}</span>`\n this.date = new Date(day)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n click(event) {\n this.picker.goToDate(this.date)\n this.picker.selectDate(this.date)\n\n event.stopPropagation()\n event.preventDefault()\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n keyPress(event) {\n let calendarNavKey = true\n\n switch (event.key) {\n case 'ArrowLeft':\n this.picker.focusPreviousDay()\n break\n case 'ArrowRight':\n this.picker.focusNextDay()\n break\n case 'ArrowUp':\n this.picker.focusPreviousWeek()\n break\n case 'ArrowDown':\n this.picker.focusNextWeek()\n break\n case 'Home':\n this.picker.focusFirstDayOfWeek()\n break\n case 'End':\n this.picker.focusLastDayOfWeek()\n break\n case 'PageUp': {\n if (event.shiftKey) {\n this.picker.focusPreviousYear(event)\n } else {\n this.picker.focusPreviousMonth(event)\n }\n break\n }\n case 'PageDown': {\n if (event.shiftKey) {\n this.picker.focusNextYear(event)\n } else {\n this.picker.focusNextMonth(event)\n }\n break\n }\n default:\n calendarNavKey = false\n break\n }\n\n if (calendarNavKey) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n}\n\n/**\n * Date picker config\n *\n * @typedef {object} DatePickerConfig\n * @property {string} [excludedDates] - Dates that cannot be selected\n * @property {string} [excludedDays] - Days that cannot be selected\n * @property {boolean} [leadingZeros] - Whether to add leading zeroes when populating the field\n * @property {string} [minDate] - The earliest available date\n * @property {string} [maxDate] - The latest available date\n * @property {string} [weekStartDay] - First day of the week in calendar view\n * @property {object} [input] - Input config\n * @property {string} [input.selector] - Selector for the input element\n * @property {Element | null} [input.element] - HTML element for the input\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<FilterToggleButtonConfig>}\n */\nexport class FilterToggleButton extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for filter toggle button\n * @param {FilterToggleButtonConfig} [config] - Filter toggle button config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $toggleButtonContainer =\n this.config.toggleButtonContainer.element ??\n document.querySelector(this.config.toggleButtonContainer.selector)\n\n const $closeButtonContainer =\n this.config.closeButtonContainer.element ??\n this.$root.querySelector(this.config.closeButtonContainer.selector)\n\n if (\n !(\n $toggleButtonContainer instanceof HTMLElement &&\n $closeButtonContainer instanceof HTMLElement\n )\n ) {\n return this\n }\n\n this.$toggleButtonContainer = $toggleButtonContainer\n this.$closeButtonContainer = $closeButtonContainer\n\n this.createToggleButton()\n this.setupResponsiveChecks()\n\n this.$root.setAttribute('tabindex', '-1')\n\n if (this.config.startHidden) {\n this.hideMenu()\n }\n }\n\n setupResponsiveChecks() {\n this.mq = window.matchMedia(this.config.bigModeMediaQuery)\n this.mq.addListener(this.checkMode.bind(this))\n this.checkMode()\n }\n\n createToggleButton() {\n this.$menuButton = document.createElement('button')\n this.$menuButton.setAttribute('type', 'button')\n this.$menuButton.setAttribute('aria-haspopup', 'true')\n this.$menuButton.setAttribute('aria-expanded', 'false')\n\n this.$menuButton.className = `govuk-button ${this.config.toggleButton.classes}`\n this.$menuButton.textContent = this.config.toggleButton.showText\n\n this.$menuButton.addEventListener(\n 'click',\n this.onMenuButtonClick.bind(this)\n )\n\n this.$toggleButtonContainer.append(this.$menuButton)\n }\n\n checkMode() {\n if (this.mq.matches) {\n this.enableBigMode()\n } else {\n this.enableSmallMode()\n }\n }\n\n enableBigMode() {\n this.showMenu()\n this.removeCloseButton()\n }\n\n enableSmallMode() {\n this.hideMenu()\n this.addCloseButton()\n }\n\n addCloseButton() {\n this.$closeButton = document.createElement('button')\n this.$closeButton.setAttribute('type', 'button')\n\n this.$closeButton.className = this.config.closeButton.classes\n this.$closeButton.textContent = this.config.closeButton.text\n\n this.$closeButton.addEventListener('click', this.onCloseClick.bind(this))\n this.$closeButtonContainer.append(this.$closeButton)\n }\n\n onCloseClick() {\n this.hideMenu()\n this.$menuButton.focus()\n }\n\n removeCloseButton() {\n if (this.$closeButton) {\n this.$closeButton.remove()\n this.$closeButton = null\n }\n }\n\n hideMenu() {\n this.$menuButton.setAttribute('aria-expanded', 'false')\n this.$root.classList.add('moj-js-hidden')\n this.$menuButton.textContent = this.config.toggleButton.showText\n }\n\n showMenu() {\n this.$menuButton.setAttribute('aria-expanded', 'true')\n this.$root.classList.remove('moj-js-hidden')\n this.$menuButton.textContent = this.config.toggleButton.hideText\n }\n\n onMenuButtonClick() {\n this.toggle()\n }\n\n toggle() {\n if (this.$menuButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n this.$root.focus()\n } else {\n this.hideMenu()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-filter'\n\n /**\n * Filter toggle button config\n *\n * @type {FilterToggleButtonConfig}\n */\n static defaults = Object.freeze({\n bigModeMediaQuery: '(min-width: 48.0625em)',\n startHidden: true,\n toggleButton: {\n showText: 'Show filter',\n hideText: 'Hide filter',\n classes: 'govuk-button--secondary'\n },\n toggleButtonContainer: {\n selector: '.moj-action-bar__filter'\n },\n closeButton: {\n text: 'Close',\n classes: 'moj-filter__close'\n },\n closeButtonContainer: {\n selector: '.moj-filter__header-action'\n }\n })\n\n /**\n * Filter toggle button config schema\n *\n * @satisfies {Schema<FilterToggleButtonConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n bigModeMediaQuery: { type: 'string' },\n startHidden: { type: 'boolean' },\n toggleButton: { type: 'object' },\n toggleButtonContainer: { type: 'object' },\n closeButton: { type: 'object' },\n closeButtonContainer: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} FilterToggleButtonConfig\n * @property {string} [bigModeMediaQuery] - Media query for big mode\n * @property {boolean} [startHidden] - Whether to start hidden\n * @property {object} [toggleButton] - Toggle button config\n * @property {string} [toggleButton.showText] - Text for show button\n * @property {string} [toggleButton.hideText] - Text for hide button\n * @property {string} [toggleButton.classes] - Classes for toggle button\n * @property {object} [toggleButtonContainer] - Toggle button container config\n * @property {string} [toggleButtonContainer.selector] - Selector for toggle button container\n * @property {Element | null} [toggleButtonContainer.element] - HTML element for toggle button container\n * @property {object} [closeButton] - Close button config\n * @property {string} [closeButton.text] - Text for close button\n * @property {string} [closeButton.classes] - Classes for close button\n * @property {object} [closeButtonContainer] - Close button container config\n * @property {string} [closeButtonContainer.selector] - Selector for close button container\n * @property {Element | null} [closeButtonContainer.element] - HTML element for close button container\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\nimport { addAttributeValue, removeAttributeValue } from '../../helpers.mjs'\n\n/**\n * @augments {ConfigurableComponent<FormValidatorConfig, HTMLFormElement>}\n */\nexport class FormValidator extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for form validator\n * @param {FormValidatorConfig} [config] - Form validator config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $summary =\n this.config.summary.element ||\n document.querySelector(this.config.summary.selector)\n\n if (!$summary || !($summary instanceof HTMLElement)) {\n return this\n }\n\n this.$summary = $summary\n\n this.errors = /** @type {ValidationError[]} */ ([])\n this.validators = /** @type {Validator[]} */ ([])\n this.originalTitle = document.title\n\n this.$root.addEventListener('submit', this.onSubmit.bind(this))\n }\n\n escapeHtml(string = '') {\n return String(string).replace(\n /[&<>\"'`=/]/g,\n (name) => FormValidator.entityMap[name]\n )\n }\n\n resetTitle() {\n document.title = this.originalTitle\n }\n\n updateTitle() {\n document.title = `${this.errors.length} errors - ${document.title}`\n }\n\n showSummary() {\n this.$summary.innerHTML = this.getSummaryHtml()\n this.$summary.classList.remove('moj-hidden')\n this.$summary.setAttribute('aria-labelledby', 'errorSummary-heading')\n this.$summary.focus()\n }\n\n getSummaryHtml() {\n let html =\n '<h2 id=\"error-summary-title\" class=\"govuk-error-summary__title\">There is a problem</h2>'\n html += '<div class=\"govuk-error-summary__body\">'\n html += '<ul class=\"govuk-list govuk-error-summary__list\">'\n for (const error of this.errors) {\n html += '<li>'\n html += `<a href=\"#${this.escapeHtml(error.fieldName)}\">`\n html += this.escapeHtml(error.message)\n html += '</a>'\n html += '</li>'\n }\n html += '</ul>'\n html += '</div>'\n return html\n }\n\n hideSummary() {\n this.$summary.classList.add('moj-hidden')\n this.$summary.removeAttribute('aria-labelledby')\n }\n\n /**\n * @param {SubmitEvent} event - Form submit event\n */\n onSubmit(event) {\n this.removeInlineErrors()\n this.hideSummary()\n this.resetTitle()\n if (!this.validate()) {\n event.preventDefault()\n this.updateTitle()\n this.showSummary()\n this.showInlineErrors()\n }\n }\n\n showInlineErrors() {\n for (const error of this.errors) {\n this.showInlineError(error)\n }\n }\n\n /**\n * @param {ValidationError} error\n */\n showInlineError(error) {\n const $errorSpan = document.createElement('span')\n $errorSpan.id = `${error.fieldName}-error`\n $errorSpan.classList.add('govuk-error-message')\n $errorSpan.innerHTML = this.escapeHtml(error.message)\n\n const $control = document.querySelector(`#${error.fieldName}`)\n const $fieldset = $control.closest('.govuk-fieldset')\n const $fieldContainer = ($fieldset || $control).closest('.govuk-form-group')\n\n const $label = $fieldContainer.querySelector('label')\n const $legend = $fieldContainer.querySelector('legend')\n\n $fieldContainer.classList.add('govuk-form-group--error')\n\n if ($fieldset && $legend) {\n $legend.after($errorSpan)\n $fieldContainer.setAttribute('aria-invalid', 'true')\n addAttributeValue($fieldset, 'aria-describedby', $errorSpan.id)\n } else if ($label && $control) {\n $label.after($errorSpan)\n $control.setAttribute('aria-invalid', 'true')\n addAttributeValue($control, 'aria-describedby', $errorSpan.id)\n }\n }\n\n removeInlineErrors() {\n for (const error of this.errors) {\n this.removeInlineError(error)\n }\n }\n\n /**\n * @param {ValidationError} error\n */\n removeInlineError(error) {\n const $errorSpan = document.querySelector(`#${error.fieldName}-error`)\n\n const $control = document.querySelector(`#${error.fieldName}`)\n const $fieldset = $control.closest('.govuk-fieldset')\n const $fieldContainer = ($fieldset || $control).closest('.govuk-form-group')\n\n const $label = $fieldContainer.querySelector('label')\n const $legend = $fieldContainer.querySelector('legend')\n\n $errorSpan.remove()\n $fieldContainer.classList.remove('govuk-form-group--error')\n\n if ($fieldset && $legend) {\n $fieldContainer.removeAttribute('aria-invalid')\n removeAttributeValue($fieldset, 'aria-describedby', $errorSpan.id)\n } else if ($label && $control) {\n $control.removeAttribute('aria-invalid')\n removeAttributeValue($control, 'aria-describedby', $errorSpan.id)\n }\n }\n\n /**\n * @param {string} fieldName - Field name\n * @param {ValidationRule[]} rules - Validation rules\n */\n addValidator(fieldName, rules) {\n this.validators.push({\n fieldName,\n rules,\n field: this.$root.elements.namedItem(fieldName)\n })\n }\n\n validate() {\n this.errors = []\n\n /** @type {Validator | null} */\n let validator = null\n\n /** @type {boolean | string} */\n let validatorReturnValue = true\n\n let i\n let j\n\n for (i = 0; i < this.validators.length; i++) {\n validator = this.validators[i]\n for (j = 0; j < validator.rules.length; j++) {\n validatorReturnValue = validator.rules[j].method(\n validator.field,\n validator.rules[j].params\n )\n\n if (\n typeof validatorReturnValue === 'boolean' &&\n !validatorReturnValue\n ) {\n this.errors.push({\n fieldName: validator.fieldName,\n message: validator.rules[j].message\n })\n break\n } else if (typeof validatorReturnValue === 'string') {\n this.errors.push({\n fieldName: validatorReturnValue,\n message: validator.rules[j].message\n })\n break\n }\n }\n }\n return this.errors.length === 0\n }\n\n /**\n * @type {Record<string, string>}\n */\n static entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/',\n '`': '`',\n '=': '='\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-form-validator'\n\n /**\n * Multi file upload default config\n *\n * @type {FormValidatorConfig}\n */\n static defaults = Object.freeze({\n summary: {\n selector: '.govuk-error-summary'\n }\n })\n\n /**\n * Multi file upload config schema\n *\n * @satisfies {Schema<FormValidatorConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n summary: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} FormValidatorConfig\n * @property {object} [summary] - Error summary config\n * @property {string} [summary.selector] - Selector for error summary\n * @property {Element | null} [summary.element] - HTML element for error summary\n */\n\n/**\n * @typedef {object} ValidationRule\n * @property {(field: Validator['field'], params: Record<string, Validator['field']>) => boolean | string} method - Validation method\n * @property {string} message - Error message\n * @property {Record<string, Validator['field']>} [params] - Parameters for validation\n */\n\n/**\n * @typedef {object} ValidationError\n * @property {string} fieldName - Name of the field\n * @property {string} message - Validation error message\n */\n\n/**\n * @typedef {object} Validator\n * @property {string} fieldName - Name of the field\n * @property {ValidationRule[]} rules - Validation rules\n * @property {Element | RadioNodeList} field - Form field\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","/* eslint-disable @typescript-eslint/no-empty-function */\n\nimport { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<MultiFileUploadConfig>}\n */\nexport class MultiFileUpload extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for multi file upload\n * @param {MultiFileUploadConfig} [config] - Multi file upload config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n if (!MultiFileUpload.isSupported()) {\n return this\n }\n\n const $feedbackContainer =\n this.config.feedbackContainer.element ??\n this.$root.querySelector(this.config.feedbackContainer.selector)\n\n if (!$feedbackContainer || !($feedbackContainer instanceof HTMLElement)) {\n return this\n }\n\n this.$feedbackContainer = $feedbackContainer\n\n this.setupFileInput()\n this.setupDropzone()\n this.setupLabel()\n this.setupStatusBox()\n\n this.$root.addEventListener('click', this.onFileDeleteClick.bind(this))\n this.$root.classList.add('moj-multi-file-upload--enhanced')\n }\n\n setupDropzone() {\n this.$dropzone = document.createElement('div')\n this.$dropzone.classList.add('moj-multi-file-upload__dropzone')\n\n this.$dropzone.addEventListener('dragover', this.onDragOver.bind(this))\n this.$dropzone.addEventListener('dragleave', this.onDragLeave.bind(this))\n this.$dropzone.addEventListener('drop', this.onDrop.bind(this))\n\n this.$fileInput.replaceWith(this.$dropzone)\n this.$dropzone.appendChild(this.$fileInput)\n }\n\n setupLabel() {\n const $label = document.createElement('label')\n $label.setAttribute('for', this.$fileInput.id)\n $label.classList.add('govuk-button', 'govuk-button--secondary')\n $label.textContent = this.config.dropzoneButtonText\n\n const $hint = document.createElement('p')\n $hint.classList.add('govuk-body')\n $hint.textContent = this.config.dropzoneHintText\n\n this.$label = $label\n this.$dropzone.append($hint)\n this.$dropzone.append($label)\n }\n\n setupFileInput() {\n this.$fileInput = /** @type {HTMLInputElement} */ (\n this.$root.querySelector('.moj-multi-file-upload__input')\n )\n this.$fileInput.addEventListener('change', this.onFileChange.bind(this))\n this.$fileInput.addEventListener('focus', this.onFileFocus.bind(this))\n this.$fileInput.addEventListener('blur', this.onFileBlur.bind(this))\n }\n\n setupStatusBox() {\n this.$status = document.createElement('div')\n this.$status.classList.add('govuk-visually-hidden')\n this.$status.setAttribute('aria-live', 'polite')\n this.$status.setAttribute('role', 'status')\n this.$dropzone.append(this.$status)\n }\n\n /**\n * @param {DragEvent} event - Drag event\n */\n onDragOver(event) {\n event.preventDefault()\n this.$dropzone.classList.add('moj-multi-file-upload--dragover')\n }\n\n onDragLeave() {\n this.$dropzone.classList.remove('moj-multi-file-upload--dragover')\n }\n\n /**\n * @param {DragEvent} event - Drag event\n */\n onDrop(event) {\n event.preventDefault()\n this.$dropzone.classList.remove('moj-multi-file-upload--dragover')\n this.$feedbackContainer.classList.remove('moj-hidden')\n this.$status.textContent = this.config.uploadStatusText\n this.uploadFiles(event.dataTransfer.files)\n }\n\n /**\n * @param {FileList} files - File list\n */\n uploadFiles(files) {\n for (const file of Array.from(files)) {\n this.uploadFile(file)\n }\n }\n\n onFileChange() {\n this.$feedbackContainer.classList.remove('moj-hidden')\n this.$status.textContent = this.config.uploadStatusText\n this.uploadFiles(this.$fileInput.files)\n\n const $fileInput = this.$fileInput.cloneNode(true)\n if (!$fileInput || !($fileInput instanceof HTMLInputElement)) {\n return\n }\n\n $fileInput.value = ''\n this.$fileInput.replaceWith($fileInput)\n\n this.setupFileInput()\n this.$fileInput.focus()\n }\n\n onFileFocus() {\n this.$label.classList.add('moj-multi-file-upload--focused')\n }\n\n onFileBlur() {\n this.$label.classList.remove('moj-multi-file-upload--focused')\n }\n\n /**\n * @param {UploadResponseSuccess['success']} success\n */\n getSuccessHtml(success) {\n return `<span class=\"moj-multi-file-upload__success\"> <svg class=\"moj-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\"><path d=\"M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z\"/></svg>${success.messageHtml}</span>`\n }\n\n /**\n * @param {UploadResponseError['error']} error\n */\n getErrorHtml(error) {\n return `<span class=\"moj-multi-file-upload__error\"> <svg class=\"moj-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\"><path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"/></svg>${error.message}</span>`\n }\n\n /**\n * @param {File} file\n */\n getFileRow(file) {\n const $row = document.createElement('div')\n\n $row.classList.add('govuk-summary-list__row', 'moj-multi-file-upload__row')\n\n $row.innerHTML = `\n <div class=\"govuk-summary-list__value moj-multi-file-upload__message\">\n <span class=\"moj-multi-file-upload__filename\">${file.name}</span>\n <span class=\"moj-multi-file-upload__progress\">0%</span>\n </div>\n <div class=\"govuk-summary-list__actions moj-multi-file-upload__actions\"></div>\n `\n\n return $row\n }\n\n /**\n * @param {UploadResponseFile} file\n */\n getDeleteButton(file) {\n const $button = document.createElement('button')\n\n $button.setAttribute('type', 'button')\n $button.setAttribute('name', 'delete')\n $button.setAttribute('value', file.filename)\n\n $button.classList.add(\n 'moj-multi-file-upload__delete',\n 'govuk-button',\n 'govuk-button--secondary',\n 'govuk-!-margin-bottom-0'\n )\n\n $button.innerHTML = `Delete <span class=\"govuk-visually-hidden\">${file.originalname}</span>`\n\n return $button\n }\n\n /**\n * @param {File} file\n */\n uploadFile(file) {\n this.config.hooks.entryHook(this, file)\n\n const $item = this.getFileRow(file)\n const $message = $item.querySelector('.moj-multi-file-upload__message')\n const $actions = $item.querySelector('.moj-multi-file-upload__actions')\n const $progress = $item.querySelector('.moj-multi-file-upload__progress')\n\n const formData = new FormData()\n formData.append('documents', file)\n\n this.$feedbackContainer\n .querySelector('.moj-multi-file-upload__list')\n .append($item)\n\n const xhr = new XMLHttpRequest()\n\n const onLoad = () => {\n if (\n xhr.status < 200 ||\n xhr.status >= 300 ||\n !('success' in xhr.response)\n ) {\n return onError()\n }\n\n $message.innerHTML = this.getSuccessHtml(xhr.response.success)\n this.$status.textContent = xhr.response.success.messageText\n\n $actions.append(this.getDeleteButton(xhr.response.file))\n this.config.hooks.exitHook(this, file, xhr, xhr.responseText)\n }\n\n const onError = () => {\n const error = new Error(\n xhr.response && 'error' in xhr.response\n ? xhr.response.error.message\n : xhr.statusText || 'Upload failed'\n )\n\n $message.innerHTML = this.getErrorHtml(error)\n this.$status.textContent = error.message\n\n this.config.hooks.errorHook(this, file, xhr, xhr.responseText, error)\n }\n\n xhr.addEventListener('load', onLoad)\n xhr.addEventListener('error', onError)\n\n xhr.upload.addEventListener('progress', (event) => {\n if (!event.lengthComputable) {\n return\n }\n\n const percentComplete = Math.round((event.loaded / event.total) * 100)\n $progress.textContent = ` ${percentComplete}%`\n })\n\n xhr.open('POST', this.config.uploadUrl)\n xhr.responseType = 'json'\n\n xhr.send(formData)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onFileDeleteClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-multi-file-upload__delete')\n ) {\n return\n }\n\n event.preventDefault() // if user refreshes page and then deletes\n\n const xhr = new XMLHttpRequest()\n\n xhr.addEventListener('load', () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n return\n }\n\n const $rows = Array.from(\n this.$feedbackContainer.querySelectorAll('.moj-multi-file-upload__row')\n )\n\n if ($rows.length === 1) {\n this.$feedbackContainer.classList.add('moj-hidden')\n }\n\n const $rowDelete = $rows.find(($row) => $row.contains($button))\n if ($rowDelete) $rowDelete.remove()\n\n this.config.hooks.deleteHook(this, undefined, xhr, xhr.responseText)\n })\n\n xhr.open('POST', this.config.deleteUrl)\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.responseType = 'json'\n\n xhr.send(\n JSON.stringify({\n [$button.name]: $button.value\n })\n )\n }\n\n static isSupported() {\n return (\n this.isDragAndDropSupported() &&\n this.isFormDataSupported() &&\n this.isFileApiSupported()\n )\n }\n\n static isDragAndDropSupported() {\n const div = document.createElement('div')\n return typeof div.ondrop !== 'undefined'\n }\n\n static isFormDataSupported() {\n return typeof FormData === 'function'\n }\n\n static isFileApiSupported() {\n const input = document.createElement('input')\n input.type = 'file'\n return typeof input.files !== 'undefined'\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-multi-file-upload'\n\n /**\n * Multi file upload default config\n *\n * @type {MultiFileUploadConfig}\n */\n static defaults = Object.freeze({\n uploadStatusText: 'Uploading files, please wait',\n dropzoneHintText: 'Drag and drop files here or',\n dropzoneButtonText: 'Choose files',\n feedbackContainer: {\n selector: '.moj-multi-file__uploaded-files'\n },\n hooks: {\n entryHook: () => {},\n exitHook: () => {},\n errorHook: () => {},\n deleteHook: () => {}\n }\n })\n\n /**\n * Multi file upload config schema\n *\n * @satisfies {Schema<MultiFileUploadConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n uploadUrl: { type: 'string' },\n deleteUrl: { type: 'string' },\n uploadStatusText: { type: 'string' },\n dropzoneHintText: { type: 'string' },\n dropzoneButtonText: { type: 'string' },\n feedbackContainer: { type: 'object' },\n hooks: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Multi file upload config\n *\n * @typedef {object} MultiFileUploadConfig\n * @property {string} [uploadUrl] - File upload URL\n * @property {string} [deleteUrl] - File delete URL\n * @property {string} [uploadStatusText] - Upload status text\n * @property {string} [dropzoneHintText] - Dropzone hint text\n * @property {string} [dropzoneButtonText] - Dropzone button text\n * @property {object} [feedbackContainer] - Feedback container config\n * @property {string} [feedbackContainer.selector] - Selector for feedback container\n * @property {Element | null} [feedbackContainer.element] - HTML element for feedback container\n * @property {MultiFileUploadHooks} [hooks] - Upload hooks\n */\n\n/**\n * Multi file upload hooks\n *\n * @typedef {object} MultiFileUploadHooks\n * @property {OnUploadFileEntryHook} [entryHook] - File upload entry hook\n * @property {OnUploadFileExitHook} [exitHook] - File upload exit hook\n * @property {OnUploadFileErrorHook} [errorHook] - File upload error hook\n * @property {OnUploadFileDeleteHook} [deleteHook] - File delete hook\n */\n\n/**\n * Upload hook: File entry\n *\n * @callback OnUploadFileEntryHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n */\n\n/**\n * Upload hook: File exit\n *\n * @callback OnUploadFileExitHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n */\n\n/**\n * Upload hook: File error\n *\n * @callback OnUploadFileErrorHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n * @param {Error} errorThrown - Error thrown\n */\n\n/**\n * Upload hook: File delete\n *\n * @callback OnUploadFileDeleteHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} [file] - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n */\n\n/**\n * @typedef {object} UploadResponseSuccess\n * @property {{ messageText: string, messageHtml: string }} success - Response success\n * @property {UploadResponseFile} file - Response file\n */\n\n/**\n * @typedef {object} UploadResponseError\n * @property {{ message: string }} error - Response error\n * @property {UploadResponseFile} file - Response file\n */\n\n/**\n * @typedef {object} UploadResponseFile\n * @property {string} filename - File name\n * @property {string} originalname - Original file name\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<MultiSelectConfig>}\n */\nexport class MultiSelect extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for multi select\n * @param {MultiSelectConfig} [config] - Multi select config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $container = this.$root.querySelector(\n `#${this.config.idPrefix}select-all`\n )\n\n const $checkboxes = /** @type {NodeListOf<HTMLInputElement>} */ (\n this.config.checkboxes.items ??\n this.$root.querySelectorAll(this.config.checkboxes.selector)\n )\n\n if (\n !$container ||\n !($container instanceof HTMLElement) ||\n !$checkboxes.length\n ) {\n return this\n }\n\n this.setupToggle(this.config.idPrefix)\n\n this.$toggleButton = this.$toggle.querySelector('input')\n this.$toggleButton.addEventListener('click', this.onButtonClick.bind(this))\n\n this.$container = $container\n this.$container.append(this.$toggle)\n\n this.$checkboxes = Array.from($checkboxes)\n this.$checkboxes.forEach(($input) =>\n $input.addEventListener('click', this.onCheckboxClick.bind(this))\n )\n\n this.checked = config.checked || false\n }\n\n setupToggle(idPrefix = '') {\n const id = `${idPrefix}checkboxes-all`\n\n const $toggle = document.createElement('div')\n const $label = document.createElement('label')\n const $input = document.createElement('input')\n const $span = document.createElement('span')\n\n $toggle.classList.add(\n 'govuk-checkboxes__item',\n 'govuk-checkboxes--small',\n 'moj-multi-select__checkbox'\n )\n\n $input.id = id\n $input.type = 'checkbox'\n $input.classList.add('govuk-checkboxes__input')\n\n $label.setAttribute('for', id)\n $label.classList.add(\n 'govuk-label',\n 'govuk-checkboxes__label',\n 'moj-multi-select__toggle-label'\n )\n\n $span.classList.add('govuk-visually-hidden')\n $span.textContent = 'Select all'\n\n $label.append($span)\n $toggle.append($input, $label)\n\n this.$toggle = $toggle\n }\n\n onButtonClick() {\n if (this.checked) {\n this.uncheckAll()\n this.$toggleButton.checked = false\n } else {\n this.checkAll()\n this.$toggleButton.checked = true\n }\n }\n\n checkAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = true\n })\n\n this.checked = true\n }\n\n uncheckAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = false\n })\n\n this.checked = false\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onCheckboxClick(event) {\n if (!(event.target instanceof HTMLInputElement)) {\n return\n }\n\n if (!event.target.checked) {\n this.$toggleButton.checked = false\n this.checked = false\n } else {\n if (\n this.$checkboxes.filter(($input) => $input.checked).length ===\n this.$checkboxes.length\n ) {\n this.$toggleButton.checked = true\n this.checked = true\n }\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-multi-select'\n\n /**\n * Multi select config\n *\n * @type {MultiSelectConfig}\n */\n static defaults = Object.freeze({\n idPrefix: '',\n checkboxes: {\n selector: 'tbody input.govuk-checkboxes__input'\n }\n })\n\n /**\n * Multi select config schema\n *\n * @satisfies {Schema<MultiSelectConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n idPrefix: { type: 'string' },\n checked: { type: 'boolean' },\n checkboxes: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Multi select config\n *\n * @typedef {object} MultiSelectConfig\n * @property {string} [idPrefix] - Prefix for the Select all\" checkbox `id` attribute\n * @property {boolean} [checked] - Whether the \"Select all\" checkbox is checked\n * @property {object} [checkboxes] - Checkboxes config\n * @property {string} [checkboxes.selector] - Checkboxes query selector\n * @property {NodeListOf<HTMLInputElement>} [checkboxes.items] - Checkboxes query selector results\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { Component } from 'govuk-frontend'\n\nexport class PasswordReveal extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for password reveal\n */\n constructor($root) {\n super($root)\n\n const $input = this.$root.querySelector('.govuk-input')\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\n this.$input.setAttribute('spellcheck', 'false')\n\n this.createButton()\n }\n\n createButton() {\n this.$group = document.createElement('div')\n this.$button = document.createElement('button')\n\n this.$button.setAttribute('type', 'button')\n\n this.$root.classList.add('moj-password-reveal')\n this.$group.classList.add('moj-password-reveal__wrapper')\n this.$button.classList.add(\n 'govuk-button',\n 'govuk-button--secondary',\n 'moj-password-reveal__button'\n )\n\n this.$button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n\n this.$button.addEventListener('click', this.onButtonClick.bind(this))\n\n this.$group.append(this.$input, this.$button)\n this.$root.append(this.$group)\n }\n\n onButtonClick() {\n if (this.$input.type === 'password') {\n this.$input.type = 'text'\n this.$button.innerHTML =\n 'Hide <span class=\"govuk-visually-hidden\">password</span>'\n } else {\n this.$input.type = 'password'\n this.$button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-password-reveal'\n}\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<RichTextEditorConfig>}\n */\nexport class RichTextEditor extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for rich text editor\n * @param {RichTextEditorConfig} config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n if (!RichTextEditor.isSupported()) {\n return this\n }\n\n const $textarea = this.$root.querySelector('.govuk-textarea')\n if (!$textarea || !($textarea instanceof HTMLTextAreaElement)) {\n return this\n }\n\n this.$textarea = $textarea\n\n this.createToolbar()\n this.hideDefault()\n this.configureToolbar()\n\n this.keys = {\n left: 37,\n right: 39,\n up: 38,\n down: 40\n }\n\n this.$content.addEventListener('input', this.onEditorInput.bind(this))\n\n this.$root\n .querySelector('label')\n .addEventListener('click', this.onLabelClick.bind(this))\n\n this.$toolbar.addEventListener('keydown', this.onToolbarKeydown.bind(this))\n }\n\n /**\n * @param {KeyboardEvent} event - Click event\n */\n onToolbarKeydown(event) {\n let $focusableButton\n switch (event.keyCode) {\n case this.keys.right:\n case this.keys.down: {\n $focusableButton = this.$buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n\n if ($focusableButton) {\n const $nextButton = $focusableButton.nextElementSibling\n\n if ($nextButton && $nextButton instanceof HTMLButtonElement) {\n $nextButton.focus()\n $focusableButton.setAttribute('tabindex', '-1')\n $nextButton.setAttribute('tabindex', '0')\n }\n }\n\n break\n }\n\n case this.keys.left:\n case this.keys.up: {\n $focusableButton = this.$buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n\n if ($focusableButton) {\n const $previousButton = $focusableButton.previousElementSibling\n\n if ($previousButton && $previousButton instanceof HTMLButtonElement) {\n $previousButton.focus()\n $focusableButton.setAttribute('tabindex', '-1')\n $previousButton.setAttribute('tabindex', '0')\n }\n }\n\n break\n }\n }\n }\n\n getToolbarHtml() {\n let html = ''\n\n html += '<div class=\"moj-rich-text-editor__toolbar\" role=\"toolbar\">'\n\n if (this.config.toolbar.bold) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--bold\" type=\"button\" data-command=\"bold\"><span class=\"govuk-visually-hidden\">Bold</span></button>'\n }\n\n if (this.config.toolbar.italic) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--italic\" type=\"button\" data-command=\"italic\"><span class=\"govuk-visually-hidden\">Italic</span></button>'\n }\n\n if (this.config.toolbar.underline) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--underline\" type=\"button\" data-command=\"underline\"><span class=\"govuk-visually-hidden\">Underline</span></button>'\n }\n\n if (this.config.toolbar.bullets) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--unordered-list\" type=\"button\" data-command=\"insertUnorderedList\"><span class=\"govuk-visually-hidden\">Unordered list</span></button>'\n }\n\n if (this.config.toolbar.numbers) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--ordered-list\" type=\"button\" data-command=\"insertOrderedList\"><span class=\"govuk-visually-hidden\">Ordered list</span></button>'\n }\n\n html += '</div>'\n return html\n }\n\n getEnhancedHtml() {\n return `${this.getToolbarHtml()}<div class=\"govuk-textarea moj-rich-text-editor__content\" contenteditable=\"true\" spellcheck=\"false\"></div>`\n }\n\n hideDefault() {\n this.$textarea.classList.add('govuk-visually-hidden')\n this.$textarea.setAttribute('aria-hidden', 'true')\n this.$textarea.setAttribute('tabindex', '-1')\n }\n\n createToolbar() {\n this.$toolbar = document.createElement('div')\n this.$toolbar.className = 'moj-rich-text-editor'\n this.$toolbar.innerHTML = this.getEnhancedHtml()\n this.$root.append(this.$toolbar)\n\n this.$content = /** @type {HTMLElement} */ (\n this.$root.querySelector('.moj-rich-text-editor__content')\n )\n\n this.$content.innerHTML = this.$textarea.value\n }\n\n configureToolbar() {\n this.$buttons = Array.from(\n /** @type {NodeListOf<HTMLButtonElement>} */\n (this.$root.querySelectorAll('.moj-rich-text-editor__toolbar-button'))\n )\n\n this.$buttons.forEach(($button, index) => {\n $button.setAttribute('tabindex', !index ? '0' : '-1')\n $button.addEventListener('click', this.onButtonClick.bind(this))\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onButtonClick(event) {\n if (!(event.currentTarget instanceof HTMLElement)) {\n return\n }\n\n document.execCommand(\n event.currentTarget.getAttribute('data-command'),\n false,\n undefined\n )\n }\n\n getContent() {\n return this.$content.innerHTML\n }\n\n onEditorInput() {\n this.updateTextarea()\n }\n\n updateTextarea() {\n document.execCommand('defaultParagraphSeparator', false, 'p')\n this.$textarea.value = this.getContent()\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onLabelClick(event) {\n event.preventDefault()\n this.$content.focus()\n }\n\n static isSupported() {\n return 'contentEditable' in document.documentElement\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-rich-text-editor'\n\n /**\n * Rich text editor config\n *\n * @type {RichTextEditorConfig}\n */\n static defaults = Object.freeze({\n toolbar: {\n bold: false,\n italic: false,\n underline: false,\n bullets: true,\n numbers: true\n }\n })\n\n /**\n * Rich text editor config schema\n *\n * @satisfies {Schema<RichTextEditorConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n toolbar: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Rich text editor config\n *\n * @typedef {object} RichTextEditorConfig\n * @property {RichTextEditorToolbar} [toolbar] - Toolbar options\n */\n\n/**\n * Rich text editor toolbar options\n *\n * @typedef {object} RichTextEditorToolbar\n * @property {boolean} [bold] - Show the bold button\n * @property {boolean} [italic] - Show the italic button\n * @property {boolean} [underline] - Show the underline button\n * @property {boolean} [bullets] - Show the bullets button\n * @property {boolean} [numbers] - Show the numbers button\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<SearchToggleConfig>}\n */\nexport class SearchToggle extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for search toggle\n * @param {SearchToggleConfig} [config] - Search toggle config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $searchContainer =\n this.config.searchContainer.element ??\n this.$root.querySelector(this.config.searchContainer.selector)\n\n const $toggleButtonContainer =\n this.config.toggleButtonContainer.element ??\n this.$root.querySelector(this.config.toggleButtonContainer.selector)\n\n if (\n !$searchContainer ||\n !$toggleButtonContainer ||\n !($searchContainer instanceof HTMLElement) ||\n !($toggleButtonContainer instanceof HTMLElement)\n ) {\n return this\n }\n\n this.$searchContainer = $searchContainer\n this.$toggleButtonContainer = $toggleButtonContainer\n\n const svg =\n '<svg viewBox=\"0 0 20 20\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" class=\"moj-search-toggle__button__icon\"><path d=\"M7.433,12.5790048 C6.06762625,12.5808611 4.75763941,12.0392925 3.79217348,11.0738265 C2.82670755,10.1083606 2.28513891,8.79837375 2.28699522,7.433 C2.28513891,6.06762625 2.82670755,4.75763941 3.79217348,3.79217348 C4.75763941,2.82670755 6.06762625,2.28513891 7.433,2.28699522 C8.79837375,2.28513891 10.1083606,2.82670755 11.0738265,3.79217348 C12.0392925,4.75763941 12.5808611,6.06762625 12.5790048,7.433 C12.5808611,8.79837375 12.0392925,10.1083606 11.0738265,11.0738265 C10.1083606,12.0392925 8.79837375,12.5808611 7.433,12.5790048 L7.433,12.5790048 Z M14.293,12.579 L13.391,12.579 L13.071,12.269 C14.2300759,10.9245158 14.8671539,9.20813198 14.866,7.433 C14.866,3.32786745 11.5381325,-1.65045755e-15 7.433,-1.65045755e-15 C3.32786745,-1.65045755e-15 -1.65045755e-15,3.32786745 -1.65045755e-15,7.433 C-1.65045755e-15,11.5381325 3.32786745,14.866 7.433,14.866 C9.208604,14.8671159 10.9253982,14.2296624 12.27,13.07 L12.579,13.39 L12.579,14.294 L18.296,20 L20,18.296 L14.294,12.579 L14.293,12.579 Z\"></path></svg>'\n\n this.$toggleButton = document.createElement('button')\n this.$toggleButton.setAttribute('class', 'moj-search-toggle__button')\n this.$toggleButton.setAttribute('type', 'button')\n this.$toggleButton.setAttribute('aria-haspopup', 'true')\n this.$toggleButton.setAttribute('aria-expanded', 'false')\n this.$toggleButton.innerHTML = `${this.config.toggleButton.text} ${svg}`\n\n this.$toggleButton.addEventListener(\n 'click',\n this.onToggleButtonClick.bind(this)\n )\n\n this.$toggleButtonContainer.append(this.$toggleButton)\n\n document.addEventListener('click', this.onDocumentClick.bind(this))\n document.addEventListener('focusin', this.onDocumentClick.bind(this))\n }\n\n showMenu() {\n this.$toggleButton.setAttribute('aria-expanded', 'true')\n this.$searchContainer.classList.remove('moj-js-hidden')\n this.$searchContainer.querySelector('input').focus()\n }\n\n hideMenu() {\n this.$searchContainer.classList.add('moj-js-hidden')\n this.$toggleButton.setAttribute('aria-expanded', 'false')\n }\n\n onToggleButtonClick() {\n if (this.$toggleButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n } else {\n this.hideMenu()\n }\n }\n\n /**\n * @param {MouseEvent | FocusEvent} event\n */\n onDocumentClick(event) {\n if (\n event.target instanceof Node &&\n !this.$toggleButtonContainer.contains(event.target) &&\n !this.$searchContainer.contains(event.target)\n ) {\n this.hideMenu()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-search-toggle'\n\n /**\n * Search toggle config\n *\n * @type {SearchToggleConfig}\n */\n static defaults = Object.freeze({\n searchContainer: {\n selector: '.moj-search'\n },\n toggleButton: {\n text: 'Search'\n },\n toggleButtonContainer: {\n selector: '.moj-search-toggle__toggle'\n }\n })\n\n /**\n * Search toggle config schema\n *\n * @satisfies {Schema<SearchToggleConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n searchContainer: { type: 'object' },\n toggleButton: { type: 'object' },\n toggleButtonContainer: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} SearchToggleConfig\n * @property {object} [searchContainer] - Search config\n * @property {string} [searchContainer.selector] - Selector for search container\n * @property {Element | null} [searchContainer.element] - HTML element for search container\n * @property {object} [toggleButton] - Toggle button config\n * @property {string} [toggleButton.text] - Text for toggle button\n * @property {object} [toggleButtonContainer] - Toggle button container config\n * @property {string} [toggleButtonContainer.selector] - Selector for toggle button container\n * @property {Element | null} [toggleButtonContainer.element] - HTML element for toggle button container\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<SortableTableConfig>}\n */\nexport class SortableTable extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for sortable table\n * @param {SortableTableConfig} [config] - Sortable table config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $head = $root?.querySelector('thead')\n const $body = $root?.querySelector('tbody')\n\n if (!$head || !$body) {\n return this\n }\n\n this.$head = $head\n this.$body = $body\n\n this.$headings = this.$head\n ? Array.from(this.$head.querySelectorAll('th'))\n : []\n\n this.createHeadingButtons()\n this.createStatusBox()\n this.initialiseSortedColumn()\n\n this.$head.addEventListener('click', this.onSortButtonClick.bind(this))\n }\n\n createHeadingButtons() {\n for (const $heading of this.$headings) {\n if ($heading.hasAttribute('aria-sort')) {\n this.createHeadingButton($heading)\n }\n }\n }\n\n /**\n * @param {HTMLTableCellElement} $heading\n */\n createHeadingButton($heading) {\n const index = this.$headings.indexOf($heading)\n const $button = document.createElement('button')\n\n $button.setAttribute('type', 'button')\n $button.setAttribute('data-index', `${index}`)\n $button.textContent = $heading.textContent\n\n $heading.textContent = ''\n $heading.appendChild($button)\n }\n\n createStatusBox() {\n this.$status = document.createElement('div')\n\n this.$status.setAttribute('aria-atomic', 'true')\n this.$status.setAttribute('aria-live', 'polite')\n this.$status.setAttribute('class', 'govuk-visually-hidden')\n this.$status.setAttribute('role', 'status')\n\n this.$root.insertAdjacentElement('afterend', this.$status)\n }\n\n initialiseSortedColumn() {\n const $rows = this.getTableRowsArray()\n\n const $heading = this.$root.querySelector('th[aria-sort]')\n const $sortButton = $heading?.querySelector('button')\n const sortDirection = $heading?.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $sortButton?.getAttribute('data-index') ?? '0',\n 10\n )\n\n if (\n !$heading ||\n !$sortButton ||\n !(sortDirection === 'ascending' || sortDirection === 'descending')\n ) {\n return\n }\n\n const $sortedRows = this.sort($rows, columnNumber, sortDirection)\n this.addRows($sortedRows)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onSortButtonClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.parentElement\n ) {\n return\n }\n\n const $heading = $button.parentElement\n const sortDirection = $heading.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $button?.getAttribute('data-index') ?? '0',\n 10\n )\n\n const newSortDirection =\n sortDirection === 'none' || sortDirection === 'descending'\n ? 'ascending'\n : 'descending'\n\n const $rows = this.getTableRowsArray()\n const $sortedRows = this.sort($rows, columnNumber, newSortDirection)\n\n this.addRows($sortedRows)\n this.removeButtonStates()\n this.updateButtonState($button, newSortDirection)\n }\n\n /**\n * @param {HTMLButtonElement} $button\n * @param {string} direction\n */\n updateButtonState($button, direction) {\n if (!(direction === 'ascending' || direction === 'descending')) {\n return\n }\n\n $button.parentElement.setAttribute('aria-sort', direction)\n let message = this.config.statusMessage\n message = message.replace(/%heading%/, $button.textContent)\n message = message.replace(/%direction%/, this.config[`${direction}Text`])\n this.$status.textContent = message\n }\n\n removeButtonStates() {\n for (const $heading of this.$headings) {\n $heading.setAttribute('aria-sort', 'none')\n }\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n */\n addRows($rows) {\n for (const $row of $rows) {\n this.$body.append($row)\n }\n }\n\n getTableRowsArray() {\n return Array.from(this.$body.querySelectorAll('tr'))\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n * @param {number} columnNumber\n * @param {string} sortDirection\n */\n sort($rows, columnNumber, sortDirection) {\n return $rows.sort(($rowA, $rowB) => {\n const $tdA = $rowA.querySelectorAll('td, th')[columnNumber]\n const $tdB = $rowB.querySelectorAll('td, th')[columnNumber]\n\n if (\n !$tdA ||\n !$tdB ||\n !($tdA instanceof HTMLElement) ||\n !($tdB instanceof HTMLElement)\n ) {\n return 0\n }\n\n const valueA =\n sortDirection === 'ascending'\n ? this.getCellValue($tdA)\n : this.getCellValue($tdB)\n\n const valueB =\n sortDirection === 'ascending'\n ? this.getCellValue($tdB)\n : this.getCellValue($tdA)\n\n return !(typeof valueA === 'number' && typeof valueB === 'number')\n ? valueA.toString().localeCompare(valueB.toString())\n : valueA - valueB\n })\n }\n\n /**\n * @param {HTMLElement} $cell\n */\n getCellValue($cell) {\n const val = $cell.getAttribute('data-sort-value') || $cell.innerHTML\n const valAsNumber = Number(val)\n\n return Number.isFinite(valAsNumber)\n ? valAsNumber // Exclude invalid numbers, infinity etc\n : val\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-sortable-table'\n\n /**\n * Sortable table config\n *\n * @type {SortableTableConfig}\n */\n static defaults = Object.freeze({\n statusMessage: 'Sort by %heading% (%direction%)',\n ascendingText: 'ascending',\n descendingText: 'descending'\n })\n\n /**\n * Sortable table config schema\n *\n * @satisfies {Schema<SortableTableConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n statusMessage: { type: 'string' },\n ascendingText: { type: 'string' },\n descendingText: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * Sortable table config\n *\n * @typedef {object} SortableTableConfig\n * @property {string} [statusMessage] - Status message\n * @property {string} [ascendingText] - Ascending text\n * @property {string} [descendingText] - Descending text\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { createAll } from 'govuk-frontend'\n\nimport { version } from './common/moj-frontend-version.mjs'\nimport { AddAnother } from './components/add-another/add-another.mjs'\nimport { Alert } from './components/alert/alert.mjs'\nimport { ButtonMenu } from './components/button-menu/button-menu.mjs'\nimport { DatePicker } from './components/date-picker/date-picker.mjs'\nimport { FilterToggleButton } from './components/filter-toggle-button/filter-toggle-button.mjs'\nimport { FormValidator } from './components/form-validator/form-validator.mjs'\nimport { MultiFileUpload } from './components/multi-file-upload/multi-file-upload.mjs'\nimport { MultiSelect } from './components/multi-select/multi-select.mjs'\nimport { PasswordReveal } from './components/password-reveal/password-reveal.mjs'\nimport { RichTextEditor } from './components/rich-text-editor/rich-text-editor.mjs'\nimport { SearchToggle } from './components/search-toggle/search-toggle.mjs'\nimport { SortableTable } from './components/sortable-table/sortable-table.mjs'\n\n/**\n * @param {Config} [config]\n */\nfunction initAll(config) {\n for (const Component of [\n AddAnother,\n Alert,\n ButtonMenu,\n DatePicker,\n MultiSelect,\n PasswordReveal,\n RichTextEditor,\n SearchToggle,\n SortableTable\n ]) {\n createAll(Component, undefined, config)\n }\n}\n\nexport {\n initAll,\n version,\n\n // Components\n AddAnother,\n Alert,\n ButtonMenu,\n DatePicker,\n FilterToggleButton,\n FormValidator,\n MultiFileUpload,\n MultiSelect,\n PasswordReveal,\n RichTextEditor,\n SearchToggle,\n SortableTable\n}\n\n/**\n * @typedef {Parameters<typeof GOVUKFrontend.initAll>[0]} Config\n */\n\n/**\n * @import * as GOVUKFrontend from 'govuk-frontend'\n */\n"],"names":["version","AddAnother","Component","constructor","$root","addEventListener","onRemoveButtonClick","bind","onAddButtonClick","$buttons","querySelectorAll","forEach","$button","HTMLButtonElement","type","event","target","classList","contains","$items","getItems","$item","getNewItem","HTMLElement","updateAttributes","length","resetItem","$firstItem","hasRemoveButton","createRemoveButton","after","$input","querySelector","HTMLInputElement","focus","Array","from","filter","item","cloneNode","index","name","getAttribute","id","originalId","replace","$label","parentElement","closest","HTMLLabelElement","htmlFor","document","createElement","add","textContent","append","checked","value","remove","focusHeading","$heading","moduleName","setFocus","$element","options","_options$onBeforeFocu","isFocusable","setAttribute","onFocus","onBlur","once","_options$onBlur","call","removeAttribute","onBeforeFocus","removeAttributeValue","attr","re","m","RegExp","match","addAttributeValue","test","getPreviousSibling","selector","$sibling","previousElementSibling","matches","findNearestMatchingElement","$currentElement","Alert","ConfigurableComponent","config","disableAutoFocus","$dismissButton","dismissible","innerHTML","dismissText","Node","dimiss","$elementToRecieveFocus","focusOnDismissSelector","$nextSibling","nextElementSibling","defaults","Object","freeze","schema","properties","ButtonMenu","children","className","startsWith","buttonClasses","split","initMenu","$menu","createMenu","insertAdjacentHTML","toggleTemplate","setupMenuItems","$menuToggle","toggleMenu","handleKeyDown","closeMenu","hidden","alignMenu","appendChild","firstChild","$menuItem","$listItem","insertBefore","tagName","setTimeout","buttonText","isOpen","preventDefault","keyboardEvent","detail","focusIndex","openMenu","focusItem","moveFocus","currentFocusIndex","$activeElement","activeElement","$menuItems","HTMLAnchorElement","indexOf","key","DatePicker","_this$config$input$el","input","element","dayLabels","monthLabels","currentDate","Date","setHours","calendarDays","excludedDates","excludedDays","buttonClass","selectedDayButtonClass","currentDayButtonClass","todayButtonClass","setOptions","initControls","$dialog","createDialog","createCalendarHeaders","$componentWrapper","$inputWrapper","insertAdjacentElement","$calendarButton","$dialogTitle","createCalendar","$prevMonthButton","$prevYearButton","$nextMonthButton","$nextYearButton","$cancelButton","$okButton","focusPreviousMonth","focusPreviousYear","focusNextMonth","focusNextYear","closeDialog","selectDate","$dialogButtons","$firstButtonInDialog","$lastButtonInDialog","firstButtonKeydown","lastButtonKeydown","toggleDialog","stopPropagation","body","backgroundClick","updateCalendar","titleId","dialogTemplate","$tbody","dayCount","i","$row","insertRow","j","$cell","$dateButton","calendarDay","DSCalendarDay","push","day","html","substring","$headerRow","leadingZeros","ret","toString","setMinAndMaxDatesOnCalendar","setExcludedDates","setExcludedDays","setWeekStartDay","minDate","formattedDateFromString","maxDate","map","includes","parseDateRangeString","reduce","dates","items","concat","date","datestring","startDate","endDate","d","getTime","setDate","getDate","weekDays","toLowerCase","weekStartDay","unshift","pop","weekStartDayParam","isExcludedDate","excludedDate","toDateString","getDay","dateString","fallback","formattedDate","dateFormatPattern","exec","month","year","Number","isFinite","formattedDateFromDate","getMonth","getFullYear","formattedDateHuman","shiftKey","firstOfMonth","dayOfWeek","thisDay","disabled","update","setCurrentDate","calendarDayDate","today","inputDate","enabledDays","window","getComputedStyle","display","innerText","changeEvent","Event","bubbles","cancelable","dispatchEvent","openDialog","offsetWidth","style","right","top","offsetHeight","goToDate","current","focusNextDay","focusPreviousDay","focusNextWeek","focusPreviousWeek","focusFirstDayOfWeek","firstDayOfWeekIndex","diff","focusLastDayOfWeek","lastDayOfWeekIndex","setMonth","setFullYear","row","column","picker","keyPress","click","label","accessibleLabel","calendarNavKey","FilterToggleButton","_this$config$toggleBu","_this$config$closeBut","$toggleButtonContainer","toggleButtonContainer","$closeButtonContainer","closeButtonContainer","createToggleButton","setupResponsiveChecks","startHidden","hideMenu","mq","matchMedia","bigModeMediaQuery","addListener","checkMode","$menuButton","toggleButton","classes","showText","onMenuButtonClick","enableBigMode","enableSmallMode","showMenu","removeCloseButton","addCloseButton","$closeButton","closeButton","text","onCloseClick","hideText","toggle","FormValidator","$summary","summary","errors","validators","originalTitle","title","onSubmit","escapeHtml","string","String","entityMap","resetTitle","updateTitle","showSummary","getSummaryHtml","error","fieldName","message","hideSummary","removeInlineErrors","validate","showInlineErrors","showInlineError","$errorSpan","$control","$fieldset","$fieldContainer","$legend","removeInlineError","addValidator","rules","field","elements","namedItem","validator","validatorReturnValue","method","params","MultiFileUpload","_this$config$feedback","isSupported","$feedbackContainer","feedbackContainer","setupFileInput","setupDropzone","setupLabel","setupStatusBox","onFileDeleteClick","$dropzone","onDragOver","onDragLeave","onDrop","$fileInput","replaceWith","dropzoneButtonText","$hint","dropzoneHintText","onFileChange","onFileFocus","onFileBlur","$status","uploadStatusText","uploadFiles","dataTransfer","files","file","uploadFile","getSuccessHtml","success","messageHtml","getErrorHtml","getFileRow","getDeleteButton","filename","originalname","hooks","entryHook","$message","$actions","$progress","formData","FormData","xhr","XMLHttpRequest","onLoad","status","response","onError","messageText","exitHook","responseText","Error","statusText","errorHook","upload","lengthComputable","percentComplete","Math","round","loaded","total","open","uploadUrl","responseType","send","$rows","$rowDelete","find","deleteHook","undefined","deleteUrl","setRequestHeader","JSON","stringify","isDragAndDropSupported","isFormDataSupported","isFileApiSupported","div","ondrop","MultiSelect","_this$config$checkbox","$container","idPrefix","$checkboxes","checkboxes","setupToggle","$toggleButton","$toggle","onButtonClick","onCheckboxClick","$span","uncheckAll","checkAll","PasswordReveal","createButton","$group","RichTextEditor","$textarea","HTMLTextAreaElement","createToolbar","hideDefault","configureToolbar","keys","left","up","down","$content","onEditorInput","onLabelClick","$toolbar","onToolbarKeydown","$focusableButton","keyCode","button","$nextButton","$previousButton","getToolbarHtml","toolbar","bold","italic","underline","bullets","numbers","getEnhancedHtml","currentTarget","execCommand","getContent","updateTextarea","documentElement","SearchToggle","_this$config$searchCo","$searchContainer","searchContainer","svg","onToggleButtonClick","onDocumentClick","SortableTable","$head","$body","$headings","createHeadingButtons","createStatusBox","initialiseSortedColumn","onSortButtonClick","hasAttribute","createHeadingButton","_$sortButton$getAttri","getTableRowsArray","$sortButton","sortDirection","columnNumber","parseInt","$sortedRows","sort","addRows","_$button$getAttribute","newSortDirection","removeButtonStates","updateButtonState","direction","statusMessage","$rowA","$rowB","$tdA","$tdB","valueA","getCellValue","valueB","localeCompare","val","valAsNumber","ascendingText","descendingText","initAll","createAll"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"all.bundle.js","sources":["../../src/moj/common/moj-frontend-version.mjs","../../src/moj/components/add-another/add-another.mjs","../../src/moj/common/index.mjs","../../src/moj/helpers.mjs","../../src/moj/components/alert/alert.mjs","../../src/moj/components/button-menu/button-menu.mjs","../../src/moj/components/date-picker/date-picker.mjs","../../src/moj/components/filter-toggle-button/filter-toggle-button.mjs","../../src/moj/components/form-validator/form-validator.mjs","../../src/moj/components/multi-file-upload/multi-file-upload.mjs","../../src/moj/components/multi-select/multi-select.mjs","../../src/moj/components/password-reveal/password-reveal.mjs","../../src/moj/components/rich-text-editor/rich-text-editor.mjs","../../src/moj/components/search-toggle/search-toggle.mjs","../../src/moj/components/sortable-table/sortable-table.mjs","../../src/moj/all.mjs"],"sourcesContent":["/*\n * This variable is automatically overwritten during builds and releases.\n * It doesn't need to be updated manually.\n */\n\n/**\n * MoJ Frontend release version\n *\n * {@link https://github.com/ministryofjustice/moj-frontend/releases}\n */\nexport const version = 'development'\n","import { Component } from 'govuk-frontend'\n\nexport class AddAnother extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for add another\n */\n constructor($root) {\n super($root)\n\n this.$root.addEventListener('click', this.onRemoveButtonClick.bind(this))\n this.$root.addEventListener('click', this.onAddButtonClick.bind(this))\n\n const $buttons = this.$root.querySelectorAll(\n '.moj-add-another__add-button, moj-add-another__remove-button'\n )\n\n $buttons.forEach(($button) => {\n if (!($button instanceof HTMLButtonElement)) {\n return\n }\n\n $button.type = 'button'\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onAddButtonClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-add-another__add-button')\n ) {\n return\n }\n\n const $items = this.getItems()\n const $item = this.getNewItem()\n\n if (!$item || !($item instanceof HTMLElement)) {\n return\n }\n\n this.updateAttributes($item, $items.length)\n this.resetItem($item)\n\n const $firstItem = $items[0]\n if (!this.hasRemoveButton($firstItem)) {\n this.createRemoveButton($firstItem)\n }\n\n $items[$items.length - 1].after($item)\n\n const $input = $item.querySelector('input, textarea, select')\n if ($input && $input instanceof HTMLInputElement) {\n $input.focus()\n }\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n hasRemoveButton($item) {\n return $item.querySelectorAll('.moj-add-another__remove-button').length\n }\n\n getItems() {\n if (!this.$root) {\n return []\n }\n\n const $items = Array.from(\n this.$root.querySelectorAll('.moj-add-another__item')\n )\n\n return $items.filter((item) => item instanceof HTMLElement)\n }\n\n getNewItem() {\n const $items = this.getItems()\n const $item = $items[0].cloneNode(true)\n\n if (!$item || !($item instanceof HTMLElement)) {\n return\n }\n\n if (!this.hasRemoveButton($item)) {\n this.createRemoveButton($item)\n }\n\n return $item\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n * @param {number} index - Add another item index\n */\n updateAttributes($item, index) {\n $item.querySelectorAll('[data-name]').forEach(($input) => {\n if (!($input instanceof HTMLInputElement)) {\n return\n }\n\n const name = $input.getAttribute('data-name') || ''\n const id = $input.getAttribute('data-id') || ''\n const originalId = $input.id\n\n $input.name = name.replace(/%index%/, `${index}`)\n $input.id = id.replace(/%index%/, `${index}`)\n\n const $label =\n $input.parentElement.querySelector('label') ||\n $input.closest('label') ||\n $item.querySelector(`[for=\"${originalId}\"]`)\n\n if ($label && $label instanceof HTMLLabelElement) {\n $label.htmlFor = $input.id\n }\n })\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n createRemoveButton($item) {\n const $button = document.createElement('button')\n $button.type = 'button'\n\n $button.classList.add(\n 'govuk-button',\n 'govuk-button--secondary',\n 'moj-add-another__remove-button'\n )\n\n $button.textContent = 'Remove'\n\n $item.append($button)\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n resetItem($item) {\n $item.querySelectorAll('[data-name], [data-id]').forEach(($input) => {\n if (!($input instanceof HTMLInputElement)) {\n return\n }\n\n if ($input.type === 'checkbox' || $input.type === 'radio') {\n $input.checked = false\n } else {\n $input.value = ''\n }\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onRemoveButtonClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-add-another__remove-button')\n ) {\n return\n }\n\n $button.closest('.moj-add-another__item').remove()\n\n const $items = this.getItems()\n\n if ($items.length === 1) {\n $items[0].querySelector('.moj-add-another__remove-button').remove()\n }\n\n $items.forEach(($item, index) => {\n this.updateAttributes($item, index)\n })\n\n this.focusHeading()\n }\n\n focusHeading() {\n const $heading = this.$root.querySelector('.moj-add-another__heading')\n\n if ($heading && $heading instanceof HTMLElement) {\n $heading.focus()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-add-another'\n}\n","/**\n * GOV.UK Frontend helpers\n *\n * @todo Import from GOV.UK Frontend\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 * @template {HTMLElement} FocusElement\n * @param {FocusElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: FocusElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: FocusElement): 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 options.onBlur?.call($element)\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 options.onBeforeFocus?.call($element)\n $element.focus()\n}\n","/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n let re, m\n if ($element.getAttribute(attr)) {\n if ($element.getAttribute(attr) === value) {\n $element.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = $element.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n $element.setAttribute(\n attr,\n $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n let re\n if (!$element.getAttribute(attr)) {\n $element.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test($element.getAttribute(attr))) {\n $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n }\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 {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return\n if (!$element || !($element instanceof HTMLElement) || !selector) {\n return\n }\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n","import { ConfigurableComponent } from 'govuk-frontend'\n\nimport { setFocus } from '../../common/index.mjs'\nimport {\n findNearestMatchingElement,\n getPreviousSibling\n} from '../../helpers.mjs'\n\n/**\n * @augments {ConfigurableComponent<AlertConfig>}\n */\nexport class Alert extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for alert\n * @param {AlertConfig} [config] - Alert config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n /**\n * Focus the alert\n *\n * If `role=\"alert\"` is set, focus the element to help some assistive\n * technologies prioritise announcing it.\n *\n * You can turn off the auto-focus functionality by setting\n * `data-disable-auto-focus=\"true\"` in the component HTML. You might wish to\n * do this based on user research findings, or to avoid a clash with another\n * element which should be focused when the page loads.\n */\n if (\n this.$root.getAttribute('role') === 'alert' &&\n !this.config.disableAutoFocus\n ) {\n setFocus(this.$root)\n }\n\n this.$dismissButton = this.$root.querySelector('.moj-alert__dismiss')\n\n if (this.config.dismissible && this.$dismissButton) {\n this.$dismissButton.innerHTML = this.config.dismissText\n this.$dismissButton.removeAttribute('hidden')\n\n this.$root.addEventListener('click', (event) => {\n if (\n event.target instanceof Node &&\n this.$dismissButton.contains(event.target)\n ) {\n this.dimiss()\n }\n })\n }\n }\n\n /**\n * Handle dismissing the alert\n */\n dimiss() {\n let $elementToRecieveFocus\n\n // If a selector has been provided, attempt to find that element\n if (this.config.focusOnDismissSelector) {\n $elementToRecieveFocus = document.querySelector(\n this.config.focusOnDismissSelector\n )\n }\n\n // Is the next sibling another alert\n if (!$elementToRecieveFocus) {\n const $nextSibling = this.$root.nextElementSibling\n if ($nextSibling && $nextSibling.matches('.moj-alert')) {\n $elementToRecieveFocus = $nextSibling\n }\n }\n\n // Else try to find any preceding sibling alert or heading\n if (!$elementToRecieveFocus) {\n $elementToRecieveFocus = getPreviousSibling(\n this.$root,\n '.moj-alert, h1, h2, h3, h4, h5, h6'\n )\n }\n\n // Else find the closest ancestor heading, or fallback to main, or last resort\n // use the body element\n if (!$elementToRecieveFocus) {\n $elementToRecieveFocus = findNearestMatchingElement(\n this.$root,\n 'h1, h2, h3, h4, h5, h6, main, body'\n )\n }\n\n // If we have an element, place focus on it\n if ($elementToRecieveFocus instanceof HTMLElement) {\n setFocus($elementToRecieveFocus)\n }\n\n // Remove the alert\n this.$root.remove()\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-alert'\n\n /**\n * Alert default config\n *\n * @type {AlertConfig}\n */\n static defaults = Object.freeze({\n dismissible: false,\n dismissText: 'Dismiss',\n disableAutoFocus: false\n })\n\n /**\n * Alert config schema\n *\n * @satisfies {Schema<AlertConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n dismissible: { type: 'boolean' },\n dismissText: { type: 'string' },\n disableAutoFocus: { type: 'boolean' },\n focusOnDismissSelector: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} AlertConfig\n * @property {boolean} [dismissible=false] - Can the alert be dismissed by the user\n * @property {string} [dismissText=Dismiss] - the label text for the dismiss button\n * @property {boolean} [disableAutoFocus=false] - whether the alert will be autofocused\n * @property {string} [focusOnDismissSelector] - CSS Selector for element to be focused on dismiss\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<ButtonMenuConfig>}\n */\nexport class ButtonMenu extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for button menu\n * @param {ButtonMenuConfig} [config] - Button menu config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n // If only one button is provided, don't initiate a menu and toggle button\n // if classes have been provided for the toggleButton, apply them to the single item\n if (this.$root.children.length === 1) {\n const $button = this.$root.children[0]\n\n $button.classList.forEach((className) => {\n if (className.startsWith('govuk-button-')) {\n $button.classList.remove(className)\n }\n\n $button.classList.remove('moj-button-menu__item')\n $button.classList.add('moj-button-menu__single-button')\n })\n\n if (this.config.buttonClasses) {\n $button.classList.add(...this.config.buttonClasses.split(' '))\n }\n }\n // Otherwise initialise a button menu\n if (this.$root.children.length > 1) {\n this.initMenu()\n }\n }\n\n initMenu() {\n this.$menu = this.createMenu()\n this.$root.insertAdjacentHTML('afterbegin', this.toggleTemplate())\n this.setupMenuItems()\n\n this.$menuToggle = this.$root.querySelector(':scope > button')\n this.$items = this.$menu.querySelectorAll('a, button')\n\n this.$menuToggle.addEventListener('click', (event) => {\n this.toggleMenu(event)\n })\n\n this.$root.addEventListener('keydown', (event) => {\n this.handleKeyDown(event)\n })\n\n document.addEventListener('click', (event) => {\n if (event.target instanceof Node && !this.$root.contains(event.target)) {\n this.closeMenu(false)\n }\n })\n }\n\n createMenu() {\n const $menu = document.createElement('ul')\n\n $menu.setAttribute('role', 'list')\n $menu.hidden = true\n $menu.classList.add('moj-button-menu__wrapper')\n\n if (this.config.alignMenu === 'right') {\n $menu.classList.add('moj-button-menu__wrapper--right')\n }\n\n this.$root.appendChild($menu)\n\n while (this.$root.firstChild !== $menu) {\n $menu.appendChild(this.$root.firstChild)\n }\n\n return $menu\n }\n\n setupMenuItems() {\n Array.from(this.$menu.children).forEach(($menuItem) => {\n // wrap item in li tag\n const $listItem = document.createElement('li')\n this.$menu.insertBefore($listItem, $menuItem)\n $listItem.appendChild($menuItem)\n\n $menuItem.setAttribute('tabindex', '-1')\n\n if ($menuItem.tagName === 'BUTTON') {\n $menuItem.setAttribute('type', 'button')\n }\n\n $menuItem.classList.forEach((className) => {\n if (className.startsWith('govuk-button')) {\n $menuItem.classList.remove(className)\n }\n })\n\n // add a slight delay after click before closing the menu, makes it *feel* better\n $menuItem.addEventListener('click', () => {\n setTimeout(() => {\n this.closeMenu(false)\n }, 50)\n })\n })\n }\n\n toggleTemplate() {\n return `\n <button type=\"button\" class=\"govuk-button moj-button-menu__toggle-button ${this.config.buttonClasses || ''}\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <span>\n ${this.config.buttonText}\n <svg width=\"11\" height=\"5\" viewBox=\"0 0 11 5\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.5 0L11 5L0 5L5.5 0Z\" fill=\"currentColor\"/>\n </svg>\n </span>\n </button>`\n }\n\n /**\n * @returns {boolean}\n */\n isOpen() {\n return this.$menuToggle.getAttribute('aria-expanded') === 'true'\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n toggleMenu(event) {\n event.preventDefault()\n\n // If menu is triggered with mouse don't move focus to first item\n const keyboardEvent = event.detail === 0\n const focusIndex = keyboardEvent ? 0 : -1\n\n if (this.isOpen()) {\n this.closeMenu()\n } else {\n this.openMenu(focusIndex)\n }\n }\n\n /**\n * Opens the menu and optionally sets the focus to the item with given index\n *\n * @param {number} focusIndex - The index of the item to focus\n */\n openMenu(focusIndex = 0) {\n this.$menu.hidden = false\n this.$menuToggle.setAttribute('aria-expanded', 'true')\n if (focusIndex !== -1) {\n this.focusItem(focusIndex)\n }\n }\n\n /**\n * Closes the menu and optionally returns focus back to menuToggle\n *\n * @param {boolean} moveFocus - whether to return focus to the toggle button\n */\n closeMenu(moveFocus = true) {\n this.$menu.hidden = true\n this.$menuToggle.setAttribute('aria-expanded', 'false')\n if (moveFocus) {\n this.$menuToggle.focus()\n }\n }\n\n /**\n * Focuses the menu item at the specified index\n *\n * @param {number} index - the index of the item to focus\n */\n focusItem(index) {\n if (index >= this.$items.length) index = 0\n if (index < 0) index = this.$items.length - 1\n\n const $menuItem = this.$items.item(index)\n if ($menuItem) {\n $menuItem.focus()\n }\n }\n\n currentFocusIndex() {\n const $activeElement = document.activeElement\n const $menuItems = Array.from(this.$items)\n\n return (\n ($activeElement instanceof HTMLAnchorElement ||\n $activeElement instanceof HTMLButtonElement) &&\n $menuItems.indexOf($activeElement)\n )\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n handleKeyDown(event) {\n if (event.target === this.$menuToggle) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n this.openMenu()\n break\n case 'ArrowUp':\n event.preventDefault()\n this.openMenu(this.$items.length - 1)\n break\n }\n }\n\n if (\n event.target instanceof Node &&\n this.$menu.contains(event.target) &&\n this.isOpen()\n ) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n if (this.currentFocusIndex() !== -1) {\n this.focusItem(this.currentFocusIndex() + 1)\n }\n break\n case 'ArrowUp':\n event.preventDefault()\n if (this.currentFocusIndex() !== -1) {\n this.focusItem(this.currentFocusIndex() - 1)\n }\n break\n case 'Home':\n event.preventDefault()\n this.focusItem(0)\n break\n case 'End':\n event.preventDefault()\n this.focusItem(this.$items.length - 1)\n break\n }\n }\n\n if (event.key === 'Escape' && this.isOpen()) {\n this.closeMenu()\n }\n if (event.key === 'Tab' && this.isOpen()) {\n this.closeMenu(false)\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-button-menu'\n\n /**\n * Button menu config\n *\n * @type {ButtonMenuConfig}\n */\n static defaults = Object.freeze({\n buttonText: 'Actions',\n alignMenu: 'left',\n buttonClasses: ''\n })\n\n /**\n * Button menu config schema\n *\n * @type {Schema<ButtonMenuConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n buttonText: { type: 'string' },\n buttonClasses: { type: 'string' },\n alignMenu: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} ButtonMenuConfig\n * @property {string} [buttonText='Actions'] - Label for the toggle button\n * @property {\"left\" | \"right\"} [alignMenu='left'] - the alignment of the menu\n * @property {string} [buttonClasses='govuk-button--secondary'] - css classes applied to the toggle button\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<DatePickerConfig>}\n */\nexport class DatePicker extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for date picker\n * @param {DatePickerConfig} [config] - Date picker config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $input =\n this.config.input.element ??\n this.$root.querySelector(this.config.input.selector)\n\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\n\n this.dayLabels = [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday'\n ]\n\n this.monthLabels = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n\n this.currentDate = new Date()\n this.currentDate.setHours(0, 0, 0, 0)\n this.calendarDays = /** @type {DSCalendarDay[]} */ ([])\n this.excludedDates = /** @type {Date[]} */ ([])\n this.excludedDays = /** @type {number[]} */ ([])\n\n this.buttonClass = 'moj-datepicker__button'\n this.selectedDayButtonClass = 'moj-datepicker__button--selected'\n this.currentDayButtonClass = 'moj-datepicker__button--current'\n this.todayButtonClass = 'moj-datepicker__button--today'\n\n this.setOptions()\n this.initControls()\n }\n\n initControls() {\n this.id = `datepicker-${this.$input.id}`\n\n this.$dialog = this.createDialog()\n this.createCalendarHeaders()\n\n const $componentWrapper = document.createElement('div')\n const $inputWrapper = document.createElement('div')\n $componentWrapper.classList.add('moj-datepicker__wrapper')\n $inputWrapper.classList.add('govuk-input__wrapper')\n\n this.$input.parentElement.insertBefore($componentWrapper, this.$input)\n $componentWrapper.appendChild($inputWrapper)\n $inputWrapper.appendChild(this.$input)\n\n $inputWrapper.insertAdjacentHTML('beforeend', this.toggleTemplate())\n $componentWrapper.insertAdjacentElement('beforeend', this.$dialog)\n\n this.$calendarButton = /** @type {HTMLButtonElement} */ (\n this.$root.querySelector('.moj-js-datepicker-toggle')\n )\n\n this.$dialogTitle = /** @type {HTMLHeadingElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-month-year')\n )\n\n this.createCalendar()\n\n this.$prevMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-month')\n )\n\n this.$prevYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-year')\n )\n\n this.$nextMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-month')\n )\n\n this.$nextYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-year')\n )\n\n this.$cancelButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-cancel')\n )\n\n this.$okButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-ok')\n )\n\n // add event listeners\n this.$prevMonthButton.addEventListener('click', (event) =>\n this.focusPreviousMonth(event, false)\n )\n this.$prevYearButton.addEventListener('click', (event) =>\n this.focusPreviousYear(event, false)\n )\n this.$nextMonthButton.addEventListener('click', (event) =>\n this.focusNextMonth(event, false)\n )\n this.$nextYearButton.addEventListener('click', (event) =>\n this.focusNextYear(event, false)\n )\n this.$cancelButton.addEventListener('click', (event) => {\n event.preventDefault()\n this.closeDialog()\n })\n this.$okButton.addEventListener('click', () => {\n this.selectDate(this.currentDate)\n })\n\n const $dialogButtons = this.$dialog.querySelectorAll(\n 'button:not([disabled=\"true\"])'\n )\n\n this.$firstButtonInDialog = $dialogButtons[0]\n this.$lastButtonInDialog = $dialogButtons[$dialogButtons.length - 1]\n this.$firstButtonInDialog.addEventListener('keydown', (event) =>\n this.firstButtonKeydown(event)\n )\n this.$lastButtonInDialog.addEventListener('keydown', (event) =>\n this.lastButtonKeydown(event)\n )\n\n this.$calendarButton.addEventListener('click', (event) =>\n this.toggleDialog(event)\n )\n\n this.$dialog.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') {\n this.closeDialog()\n event.preventDefault()\n event.stopPropagation()\n }\n })\n\n document.body.addEventListener('mouseup', (event) =>\n this.backgroundClick(event)\n )\n\n // populates calendar with initial dates, avoids Wave errors about null buttons\n this.updateCalendar()\n }\n\n createDialog() {\n const titleId = `datepicker-title-${this.$input.id}`\n const $dialog = document.createElement('div')\n\n $dialog.id = this.id\n $dialog.setAttribute('class', 'moj-datepicker__dialog')\n $dialog.setAttribute('role', 'dialog')\n $dialog.setAttribute('aria-modal', 'true')\n $dialog.setAttribute('aria-labelledby', titleId)\n $dialog.innerHTML = this.dialogTemplate(titleId)\n $dialog.hidden = true\n\n return $dialog\n }\n\n createCalendar() {\n const $tbody = this.$dialog.querySelector('tbody')\n let dayCount = 0\n for (let i = 0; i < 6; i++) {\n // create row\n const $row = $tbody.insertRow(i)\n\n for (let j = 0; j < 7; j++) {\n // create cell (day)\n const $cell = document.createElement('td')\n const $dateButton = document.createElement('button')\n\n $cell.appendChild($dateButton)\n $row.appendChild($cell)\n\n const calendarDay = new DSCalendarDay($dateButton, dayCount, i, j, this)\n this.calendarDays.push(calendarDay)\n dayCount++\n }\n }\n }\n\n toggleTemplate() {\n return `<button class=\"moj-datepicker__toggle moj-js-datepicker-toggle\" type=\"button\" aria-haspopup=\"dialog\" aria-controls=\"${this.id}\" aria-expanded=\"false\">\n <span class=\"govuk-visually-hidden\">Choose date</span>\n <svg width=\"32\" height=\"24\" focusable=\"false\" class=\"moj-datepicker-icon\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\">\n <path\n fill=\"currentColor\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M16.1333 2.93333H5.86668V4.4C5.86668 5.21002 5.21003 5.86667 4.40002 5.86667C3.59 5.86667 2.93335 5.21002 2.93335 4.4V2.93333H2C0.895431 2.93333 0 3.82877 0 4.93334V19.2667C0 20.3712 0.89543 21.2667 2 21.2667H20C21.1046 21.2667 22 20.3712 22 19.2667V4.93333C22 3.82876 21.1046 2.93333 20 2.93333H19.0667V4.4C19.0667 5.21002 18.41 5.86667 17.6 5.86667C16.79 5.86667 16.1333 5.21002 16.1333 4.4V2.93333ZM20.5333 8.06667H1.46665V18.8C1.46665 19.3523 1.91436 19.8 2.46665 19.8H19.5333C20.0856 19.8 20.5333 19.3523 20.5333 18.8V8.06667Z\"\n ></path>\n <rect x=\"3.66669\" width=\"1.46667\" height=\"5.13333\" rx=\"0.733333\" fill=\"currentColor\"></rect>\n <rect x=\"16.8667\" width=\"1.46667\" height=\"5.13333\" rx=\"0.733333\" fill=\"currentColor\"></rect>\n </svg>\n </button>`\n }\n\n /**\n * HTML template for calendar dialog\n *\n * @param {string} [titleId] - Id attribute for dialog title\n * @returns {string}\n */\n dialogTemplate(titleId) {\n return `<div class=\"moj-datepicker__dialog-header\">\n <div class=\"moj-datepicker__dialog-navbuttons\">\n <button class=\"moj-datepicker__button moj-js-datepicker-prev-year\">\n <span class=\"govuk-visually-hidden\">Previous year</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.1643 20L28.9572 14.2071L27.5429 12.7929L20.3358 20L27.5429 27.2071L28.9572 25.7929L23.1643 20Z\" fill=\"currentColor\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M17.1643 20L22.9572 14.2071L21.5429 12.7929L14.3358 20L21.5429 27.2071L22.9572 25.7929L17.1643 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n\n <button class=\"moj-datepicker__button moj-js-datepicker-prev-month\">\n <span class=\"govuk-visually-hidden\">Previous month</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.5729 20L25.7865 14.2071L24.5137 12.7929L18.0273 20L24.5137 27.2071L25.7865 25.7929L20.5729 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n </div>\n\n <h2 id=\"${titleId}\" class=\"moj-datepicker__dialog-title moj-js-datepicker-month-year\" aria-live=\"polite\">June 2020</h2>\n\n <div class=\"moj-datepicker__dialog-navbuttons\">\n <button class=\"moj-datepicker__button moj-js-datepicker-next-month\">\n <span class=\"govuk-visually-hidden\">Next month</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23.4271 20L18.2135 14.2071L19.4863 12.7929L25.9727 20L19.4863 27.2071L18.2135 25.7929L23.4271 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n\n <button class=\"moj-datepicker__button moj-js-datepicker-next-year\">\n <span class=\"govuk-visually-hidden\">Next year</span>\n <svg width=\"44\" height=\"40\" viewBox=\"0 0 44 40\" fill=\"none\" fill=\"none\" focusable=\"false\" aria-hidden=\"true\" role=\"img\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.8357 20L15.0428 14.2071L16.4571 12.7929L23.6642 20L16.4571 27.2071L15.0428 25.7929L20.8357 20Z\" fill=\"currentColor\"/>\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M26.8357 20L21.0428 14.2071L22.4571 12.7929L29.6642 20L22.4571 27.2071L21.0428 25.7929L26.8357 20Z\" fill=\"currentColor\"/>\n </svg>\n </button>\n </div>\n </div>\n\n <table class=\"moj-datepicker__calendar moj-js-datepicker-grid\" role=\"grid\" aria-labelledby=\"${titleId}\">\n <thead>\n <tr></tr>\n </thead>\n\n <tbody></tbody>\n </table>\n\n <div class=\"govuk-button-group\">\n <button type=\"button\" class=\"govuk-button moj-js-datepicker-ok\">Select</button>\n <button type=\"button\" class=\"govuk-button govuk-button--secondary moj-js-datepicker-cancel\">Close</button>\n </div>`\n }\n\n createCalendarHeaders() {\n this.dayLabels.forEach((day) => {\n const html = `<th scope=\"col\"><span aria-hidden=\"true\">${day.substring(0, 3)}</span><span class=\"govuk-visually-hidden\">${day}</span></th>`\n const $headerRow = this.$dialog.querySelector('thead > tr')\n $headerRow.insertAdjacentHTML('beforeend', html)\n })\n }\n\n /**\n * Pads given number with leading zeros\n *\n * @param {number} value - The value to be padded\n * @param {number} length - The length in characters of the output\n * @returns {string}\n */\n leadingZeros(value, length = 2) {\n let ret = value.toString()\n\n while (ret.length < length) {\n ret = `0${ret}`\n }\n\n return ret\n }\n\n setOptions() {\n this.setMinAndMaxDatesOnCalendar()\n this.setExcludedDates()\n this.setExcludedDays()\n this.setWeekStartDay()\n }\n\n setMinAndMaxDatesOnCalendar() {\n if (this.config.minDate) {\n this.minDate = this.formattedDateFromString(this.config.minDate, null)\n if (this.minDate && this.currentDate < this.minDate) {\n this.currentDate = this.minDate\n }\n }\n\n if (this.config.maxDate) {\n this.maxDate = this.formattedDateFromString(this.config.maxDate, null)\n if (this.maxDate && this.currentDate > this.maxDate) {\n this.currentDate = this.maxDate\n }\n }\n }\n\n setExcludedDates() {\n if (this.config.excludedDates) {\n this.excludedDates = this.config.excludedDates\n .replace(/\\s+/, ' ')\n .split(' ')\n .map((item) => {\n return item.includes('-')\n ? this.parseDateRangeString(item)\n : [this.formattedDateFromString(item)]\n })\n .reduce((dates, items) => dates.concat(items))\n .filter((date) => date)\n }\n }\n\n /**\n * Parses a daterange string into an array of dates\n *\n * @param {string} datestring - A daterange string in the format \"dd/mm/yyyy-dd/mm/yyyy\"\n */\n parseDateRangeString(datestring) {\n const dates = []\n const [startDate, endDate] = datestring\n .split('-')\n .map((d) => this.formattedDateFromString(d, null))\n\n if (startDate && endDate) {\n const date = new Date(startDate.getTime())\n /* eslint-disable no-unmodified-loop-condition */\n while (date <= endDate) {\n dates.push(new Date(date))\n date.setDate(date.getDate() + 1)\n }\n /* eslint-enable no-unmodified-loop-condition */\n }\n return dates\n }\n\n setExcludedDays() {\n if (this.config.excludedDays) {\n // lowercase and arrange dayLabels to put indexOf sunday == 0 for comparison\n // with getDay() function\n const weekDays = this.dayLabels.map((item) => item.toLowerCase())\n if (this.config.weekStartDay === 'monday') {\n weekDays.unshift(weekDays.pop())\n }\n\n this.excludedDays = this.config.excludedDays\n .replace(/\\s+/, ' ')\n .toLowerCase()\n .split(' ')\n .map((item) => weekDays.indexOf(item))\n .filter((item) => item !== -1)\n }\n }\n\n setWeekStartDay() {\n const weekStartDayParam = this.config.weekStartDay\n if (weekStartDayParam && weekStartDayParam.toLowerCase() === 'sunday') {\n this.config.weekStartDay = 'sunday'\n // Rotate dayLabels array to put Sunday as the first item\n this.dayLabels.unshift(this.dayLabels.pop())\n } else {\n this.config.weekStartDay = 'monday'\n }\n }\n\n /**\n * Determine if a date is selectable\n *\n * @param {Date} date - the date to check\n * @returns {boolean}\n */\n isExcludedDate(date) {\n // This comparison does not work correctly - it will exclude the mindate itself\n // see: https://github.com/ministryofjustice/moj-frontend/issues/923\n if (this.minDate && this.minDate > date) {\n return true\n }\n\n // This comparison works as expected - the maxdate will not be excluded\n if (this.maxDate && this.maxDate < date) {\n return true\n }\n\n for (const excludedDate of this.excludedDates) {\n if (date.toDateString() === excludedDate.toDateString()) {\n return true\n }\n }\n\n if (this.excludedDays.includes(date.getDay())) {\n return true\n }\n\n return false\n }\n\n /**\n * Get a Date object from a string\n *\n * @param {string} dateString - string in the format d/m/yyyy dd/mm/yyyy\n * @param {Date} fallback - date object to return if formatting fails\n * @returns {Date}\n */\n formattedDateFromString(dateString, fallback = new Date()) {\n let formattedDate = null\n // Accepts d/m/yyyy and dd/mm/yyyy\n const dateFormatPattern = /(\\d{1,2})([-/,. ])(\\d{1,2})\\2(\\d{4})/\n\n if (!dateFormatPattern.test(dateString)) return fallback\n\n const match = dateFormatPattern.exec(dateString)\n const day = match[1]\n const month = match[3]\n const year = match[4]\n\n formattedDate = new Date(`${year}-${month}-${day}`)\n if (\n formattedDate instanceof Date &&\n Number.isFinite(formattedDate.getTime())\n ) {\n return formattedDate\n }\n return fallback\n }\n\n /**\n * Get a formatted date string from a Date object\n *\n * @param {Date} date - date to format to a string\n * @returns {string}\n */\n formattedDateFromDate(date) {\n if (this.config.leadingZeros) {\n return `${this.leadingZeros(date.getDate())}/${this.leadingZeros(date.getMonth() + 1)}/${date.getFullYear()}`\n }\n\n return `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`\n }\n\n /**\n * Get a human readable date in the format Monday 2 March 2024\n *\n * @param {Date} date - Date to format\n * @returns {string}\n */\n formattedDateHuman(date) {\n return `${this.dayLabels[(date.getDay() + 6) % 7]} ${date.getDate()} ${this.monthLabels[date.getMonth()]} ${date.getFullYear()}`\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n backgroundClick(event) {\n if (\n this.isOpen() &&\n event.target instanceof Node &&\n !this.$dialog.contains(event.target) &&\n !this.$input.contains(event.target) &&\n !this.$calendarButton.contains(event.target)\n ) {\n event.preventDefault()\n this.closeDialog()\n }\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n firstButtonKeydown(event) {\n if (event.key === 'Tab' && event.shiftKey) {\n this.$lastButtonInDialog.focus()\n event.preventDefault()\n }\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n lastButtonKeydown(event) {\n if (event.key === 'Tab' && !event.shiftKey) {\n this.$firstButtonInDialog.focus()\n event.preventDefault()\n }\n }\n\n // render calendar\n updateCalendar() {\n this.$dialogTitle.innerHTML = `${this.monthLabels[this.currentDate.getMonth()]} ${this.currentDate.getFullYear()}`\n\n const day = this.currentDate\n const firstOfMonth = new Date(day.getFullYear(), day.getMonth(), 1)\n let dayOfWeek\n\n if (this.config.weekStartDay === 'monday') {\n dayOfWeek = firstOfMonth.getDay() === 0 ? 6 : firstOfMonth.getDay() - 1 // Change logic to make Monday first day of week, i.e. 0\n } else {\n dayOfWeek = firstOfMonth.getDay()\n }\n\n firstOfMonth.setDate(firstOfMonth.getDate() - dayOfWeek)\n\n const thisDay = new Date(firstOfMonth)\n\n // loop through our days\n for (const calendarDay of this.calendarDays) {\n const hidden = thisDay.getMonth() !== day.getMonth()\n const disabled = this.isExcludedDate(thisDay)\n\n calendarDay.update(thisDay, hidden, disabled)\n\n thisDay.setDate(thisDay.getDate() + 1)\n }\n }\n\n /**\n * @param {boolean} [focus] - Focus the day button\n */\n setCurrentDate(focus = true) {\n const { currentDate } = this\n this.calendarDays.forEach((calendarDay) => {\n calendarDay.$button.classList.add('moj-datepicker__button')\n calendarDay.$button.classList.add('moj-datepicker__calendar-day')\n calendarDay.$button.setAttribute('tabindex', '-1')\n calendarDay.$button.classList.remove(this.selectedDayButtonClass)\n const calendarDayDate = calendarDay.date\n calendarDayDate.setHours(0, 0, 0, 0)\n\n const today = new Date()\n today.setHours(0, 0, 0, 0)\n\n if (\n calendarDayDate.getTime() ===\n currentDate.getTime() /* && !calendarDay.button.disabled */\n ) {\n if (focus) {\n calendarDay.$button.setAttribute('tabindex', '0')\n calendarDay.$button.focus()\n calendarDay.$button.classList.add(this.selectedDayButtonClass)\n }\n }\n\n if (\n this.inputDate &&\n calendarDayDate.getTime() === this.inputDate.getTime()\n ) {\n calendarDay.$button.classList.add(this.currentDayButtonClass)\n calendarDay.$button.setAttribute('aria-current', 'date')\n } else {\n calendarDay.$button.classList.remove(this.currentDayButtonClass)\n calendarDay.$button.removeAttribute('aria-current')\n }\n\n if (calendarDayDate.getTime() === today.getTime()) {\n calendarDay.$button.classList.add(this.todayButtonClass)\n } else {\n calendarDay.$button.classList.remove(this.todayButtonClass)\n }\n })\n\n // if no date is tab-able, make the first non-disabled date tab-able\n if (!focus) {\n const enabledDays = this.calendarDays.filter((calendarDay) => {\n return (\n window.getComputedStyle(calendarDay.$button).display === 'block' &&\n !calendarDay.$button.disabled\n )\n })\n\n enabledDays[0].$button.setAttribute('tabindex', '0')\n\n this.currentDate = enabledDays[0].date\n }\n }\n\n /**\n * @param {Date} date - Date to select\n */\n selectDate(date) {\n if (this.isExcludedDate(date)) {\n return\n }\n\n this.$calendarButton.querySelector('span').innerText =\n `Choose date. Selected date is ${this.formattedDateHuman(date)}`\n this.$input.value = this.formattedDateFromDate(date)\n\n const changeEvent = new Event('change', { bubbles: true, cancelable: true })\n this.$input.dispatchEvent(changeEvent)\n\n this.closeDialog()\n }\n\n isOpen() {\n return this.$dialog.classList.contains('moj-datepicker__dialog--open')\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n toggleDialog(event) {\n event.preventDefault()\n if (this.isOpen()) {\n this.closeDialog()\n } else {\n this.setMinAndMaxDatesOnCalendar()\n this.openDialog()\n }\n }\n\n openDialog() {\n this.$dialog.hidden = false\n this.$dialog.classList.add('moj-datepicker__dialog--open')\n this.$calendarButton.setAttribute('aria-expanded', 'true')\n\n // position the dialog\n // if input is wider than dialog pin it to the right\n if (this.$input.offsetWidth > this.$dialog.offsetWidth) {\n this.$dialog.style.right = `0px`\n }\n this.$dialog.style.top = `${this.$input.offsetHeight + 3}px`\n\n // get the date from the input element\n this.inputDate = this.formattedDateFromString(this.$input.value)\n this.currentDate = this.inputDate\n this.currentDate.setHours(0, 0, 0, 0)\n\n this.updateCalendar()\n this.setCurrentDate()\n }\n\n closeDialog() {\n this.$dialog.hidden = true\n this.$dialog.classList.remove('moj-datepicker__dialog--open')\n this.$calendarButton.setAttribute('aria-expanded', 'false')\n this.$calendarButton.focus()\n }\n\n /**\n * @param {Date} date - Date to go to\n * @param {boolean} [focus] - Focus the day button\n */\n goToDate(date, focus) {\n const current = this.currentDate\n this.currentDate = date\n\n if (\n current.getMonth() !== this.currentDate.getMonth() ||\n current.getFullYear() !== this.currentDate.getFullYear()\n ) {\n this.updateCalendar()\n }\n\n this.setCurrentDate(focus)\n }\n\n // day navigation\n focusNextDay() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() + 1)\n this.goToDate(date)\n }\n\n focusPreviousDay() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() - 1)\n this.goToDate(date)\n }\n\n // week navigation\n focusNextWeek() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() + 7)\n this.goToDate(date)\n }\n\n focusPreviousWeek() {\n const date = new Date(this.currentDate)\n date.setDate(date.getDate() - 7)\n this.goToDate(date)\n }\n\n focusFirstDayOfWeek() {\n const date = new Date(this.currentDate)\n const firstDayOfWeekIndex = this.config.weekStartDay === 'sunday' ? 0 : 1\n const dayOfWeek = date.getDay()\n const diff =\n dayOfWeek >= firstDayOfWeekIndex\n ? dayOfWeek - firstDayOfWeekIndex\n : 6 - dayOfWeek\n\n date.setDate(date.getDate() - diff)\n date.setHours(0, 0, 0, 0)\n\n this.goToDate(date)\n }\n\n focusLastDayOfWeek() {\n const date = new Date(this.currentDate)\n const lastDayOfWeekIndex = this.config.weekStartDay === 'sunday' ? 6 : 0\n const dayOfWeek = date.getDay()\n const diff =\n dayOfWeek <= lastDayOfWeekIndex\n ? lastDayOfWeekIndex - dayOfWeek\n : 7 - dayOfWeek\n\n date.setDate(date.getDate() + diff)\n date.setHours(0, 0, 0, 0)\n\n this.goToDate(date)\n }\n\n /**\n * Month navigation\n *\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\n */\n focusNextMonth(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setMonth(date.getMonth() + 1, 1)\n this.goToDate(date, focus)\n }\n\n /**\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\n */\n focusPreviousMonth(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setMonth(date.getMonth() - 1, 1)\n this.goToDate(date, focus)\n }\n\n /**\n * Year navigation\n *\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\n */\n focusNextYear(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setFullYear(date.getFullYear() + 1, date.getMonth(), 1)\n this.goToDate(date, focus)\n }\n\n /**\n * @param {KeyboardEvent | MouseEvent} event - Key press or click event\n * @param {boolean} [focus] - Focus the day button\n */\n focusPreviousYear(event, focus = true) {\n event.preventDefault()\n const date = new Date(this.currentDate)\n date.setFullYear(date.getFullYear() - 1, date.getMonth(), 1)\n this.goToDate(date, focus)\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-date-picker'\n\n /**\n * Date picker default config\n *\n * @type {DatePickerConfig}\n */\n static defaults = Object.freeze({\n leadingZeros: false,\n weekStartDay: 'monday',\n input: {\n selector: '.moj-js-datepicker-input'\n }\n })\n\n /**\n * Date picker config schema\n *\n * @satisfies {Schema<DatePickerConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n excludedDates: { type: 'string' },\n excludedDays: { type: 'string' },\n leadingZeros: { type: 'boolean' },\n maxDate: { type: 'string' },\n minDate: { type: 'string' },\n weekStartDay: { type: 'string' },\n input: { type: 'object' }\n }\n })\n )\n}\n\nclass DSCalendarDay {\n /**\n *\n * @param {HTMLButtonElement} $button\n * @param {number} index\n * @param {number} row\n * @param {number} column\n * @param {DatePicker} picker\n */\n constructor($button, index, row, column, picker) {\n this.index = index\n this.row = row\n this.column = column\n this.$button = $button\n this.picker = picker\n\n this.date = new Date()\n this.$button.addEventListener('keydown', this.keyPress.bind(this))\n this.$button.addEventListener('click', this.click.bind(this))\n }\n\n /**\n * @param {Date} day - the Date for the calendar day\n * @param {boolean} hidden - visibility of the day\n * @param {boolean} disabled - is the day selectable or excluded\n */\n update(day, hidden, disabled) {\n const label = day.getDate()\n let accessibleLabel = this.picker.formattedDateHuman(day)\n\n if (disabled) {\n this.$button.setAttribute('aria-disabled', 'true')\n accessibleLabel = `Excluded date, ${accessibleLabel}`\n } else {\n this.$button.removeAttribute('aria-disabled')\n }\n\n if (hidden) {\n this.$button.style.display = 'none'\n } else {\n this.$button.style.display = 'block'\n }\n this.$button.setAttribute(\n 'data-testid',\n this.picker.formattedDateFromDate(day)\n )\n\n this.$button.innerHTML = `<span class=\"govuk-visually-hidden\">${accessibleLabel}</span><span aria-hidden=\"true\">${label}</span>`\n this.date = new Date(day)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n click(event) {\n this.picker.goToDate(this.date)\n this.picker.selectDate(this.date)\n\n event.stopPropagation()\n event.preventDefault()\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n keyPress(event) {\n let calendarNavKey = true\n\n switch (event.key) {\n case 'ArrowLeft':\n this.picker.focusPreviousDay()\n break\n case 'ArrowRight':\n this.picker.focusNextDay()\n break\n case 'ArrowUp':\n this.picker.focusPreviousWeek()\n break\n case 'ArrowDown':\n this.picker.focusNextWeek()\n break\n case 'Home':\n this.picker.focusFirstDayOfWeek()\n break\n case 'End':\n this.picker.focusLastDayOfWeek()\n break\n case 'PageUp': {\n if (event.shiftKey) {\n this.picker.focusPreviousYear(event)\n } else {\n this.picker.focusPreviousMonth(event)\n }\n break\n }\n case 'PageDown': {\n if (event.shiftKey) {\n this.picker.focusNextYear(event)\n } else {\n this.picker.focusNextMonth(event)\n }\n break\n }\n default:\n calendarNavKey = false\n break\n }\n\n if (calendarNavKey) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n}\n\n/**\n * Date picker config\n *\n * @typedef {object} DatePickerConfig\n * @property {string} [excludedDates] - Dates that cannot be selected\n * @property {string} [excludedDays] - Days that cannot be selected\n * @property {boolean} [leadingZeros] - Whether to add leading zeroes when populating the field\n * @property {string} [minDate] - The earliest available date\n * @property {string} [maxDate] - The latest available date\n * @property {string} [weekStartDay] - First day of the week in calendar view\n * @property {object} [input] - Input config\n * @property {string} [input.selector] - Selector for the input element\n * @property {Element | null} [input.element] - HTML element for the input\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<FilterToggleButtonConfig>}\n */\nexport class FilterToggleButton extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for filter toggle button\n * @param {FilterToggleButtonConfig} [config] - Filter toggle button config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $toggleButtonContainer =\n this.config.toggleButtonContainer.element ??\n document.querySelector(this.config.toggleButtonContainer.selector)\n\n const $closeButtonContainer =\n this.config.closeButtonContainer.element ??\n this.$root.querySelector(this.config.closeButtonContainer.selector)\n\n if (\n !(\n $toggleButtonContainer instanceof HTMLElement &&\n $closeButtonContainer instanceof HTMLElement\n )\n ) {\n return this\n }\n\n this.$toggleButtonContainer = $toggleButtonContainer\n this.$closeButtonContainer = $closeButtonContainer\n\n this.createToggleButton()\n this.setupResponsiveChecks()\n\n this.$root.setAttribute('tabindex', '-1')\n\n if (this.config.startHidden) {\n this.hideMenu()\n }\n }\n\n setupResponsiveChecks() {\n this.mq = window.matchMedia(this.config.bigModeMediaQuery)\n this.mq.addListener(this.checkMode.bind(this))\n this.checkMode()\n }\n\n createToggleButton() {\n this.$menuButton = document.createElement('button')\n this.$menuButton.setAttribute('type', 'button')\n this.$menuButton.setAttribute('aria-haspopup', 'true')\n this.$menuButton.setAttribute('aria-expanded', 'false')\n\n this.$menuButton.className = `govuk-button ${this.config.toggleButton.classes}`\n this.$menuButton.textContent = this.config.toggleButton.showText\n\n this.$menuButton.addEventListener(\n 'click',\n this.onMenuButtonClick.bind(this)\n )\n\n this.$toggleButtonContainer.append(this.$menuButton)\n }\n\n checkMode() {\n if (this.mq.matches) {\n this.enableBigMode()\n } else {\n this.enableSmallMode()\n }\n }\n\n enableBigMode() {\n this.showMenu()\n this.removeCloseButton()\n }\n\n enableSmallMode() {\n this.hideMenu()\n this.addCloseButton()\n }\n\n addCloseButton() {\n this.$closeButton = document.createElement('button')\n this.$closeButton.setAttribute('type', 'button')\n\n this.$closeButton.className = this.config.closeButton.classes\n this.$closeButton.textContent = this.config.closeButton.text\n\n this.$closeButton.addEventListener('click', this.onCloseClick.bind(this))\n this.$closeButtonContainer.append(this.$closeButton)\n }\n\n onCloseClick() {\n this.hideMenu()\n this.$menuButton.focus()\n }\n\n removeCloseButton() {\n if (this.$closeButton) {\n this.$closeButton.remove()\n this.$closeButton = null\n }\n }\n\n hideMenu() {\n this.$menuButton.setAttribute('aria-expanded', 'false')\n this.$root.classList.add('moj-js-hidden')\n this.$menuButton.textContent = this.config.toggleButton.showText\n }\n\n showMenu() {\n this.$menuButton.setAttribute('aria-expanded', 'true')\n this.$root.classList.remove('moj-js-hidden')\n this.$menuButton.textContent = this.config.toggleButton.hideText\n }\n\n onMenuButtonClick() {\n this.toggle()\n }\n\n toggle() {\n if (this.$menuButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n this.$root.focus()\n } else {\n this.hideMenu()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-filter'\n\n /**\n * Filter toggle button config\n *\n * @type {FilterToggleButtonConfig}\n */\n static defaults = Object.freeze({\n bigModeMediaQuery: '(min-width: 48.0625em)',\n startHidden: true,\n toggleButton: {\n showText: 'Show filter',\n hideText: 'Hide filter',\n classes: 'govuk-button--secondary'\n },\n toggleButtonContainer: {\n selector: '.moj-action-bar__filter'\n },\n closeButton: {\n text: 'Close',\n classes: 'moj-filter__close'\n },\n closeButtonContainer: {\n selector: '.moj-filter__header-action'\n }\n })\n\n /**\n * Filter toggle button config schema\n *\n * @satisfies {Schema<FilterToggleButtonConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n bigModeMediaQuery: { type: 'string' },\n startHidden: { type: 'boolean' },\n toggleButton: { type: 'object' },\n toggleButtonContainer: { type: 'object' },\n closeButton: { type: 'object' },\n closeButtonContainer: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} FilterToggleButtonConfig\n * @property {string} [bigModeMediaQuery] - Media query for big mode\n * @property {boolean} [startHidden] - Whether to start hidden\n * @property {object} [toggleButton] - Toggle button config\n * @property {string} [toggleButton.showText] - Text for show button\n * @property {string} [toggleButton.hideText] - Text for hide button\n * @property {string} [toggleButton.classes] - Classes for toggle button\n * @property {object} [toggleButtonContainer] - Toggle button container config\n * @property {string} [toggleButtonContainer.selector] - Selector for toggle button container\n * @property {Element | null} [toggleButtonContainer.element] - HTML element for toggle button container\n * @property {object} [closeButton] - Close button config\n * @property {string} [closeButton.text] - Text for close button\n * @property {string} [closeButton.classes] - Classes for close button\n * @property {object} [closeButtonContainer] - Close button container config\n * @property {string} [closeButtonContainer.selector] - Selector for close button container\n * @property {Element | null} [closeButtonContainer.element] - HTML element for close button container\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\nimport { addAttributeValue, removeAttributeValue } from '../../helpers.mjs'\n\n/**\n * @augments {ConfigurableComponent<FormValidatorConfig, HTMLFormElement>}\n */\nexport class FormValidator extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for form validator\n * @param {FormValidatorConfig} [config] - Form validator config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $summary =\n this.config.summary.element ||\n document.querySelector(this.config.summary.selector)\n\n if (!$summary || !($summary instanceof HTMLElement)) {\n return this\n }\n\n this.$summary = $summary\n\n this.errors = /** @type {ValidationError[]} */ ([])\n this.validators = /** @type {Validator[]} */ ([])\n this.originalTitle = document.title\n\n this.$root.addEventListener('submit', this.onSubmit.bind(this))\n }\n\n escapeHtml(string = '') {\n return String(string).replace(\n /[&<>\"'`=/]/g,\n (name) => FormValidator.entityMap[name]\n )\n }\n\n resetTitle() {\n document.title = this.originalTitle\n }\n\n updateTitle() {\n document.title = `${this.errors.length} errors - ${document.title}`\n }\n\n showSummary() {\n this.$summary.innerHTML = this.getSummaryHtml()\n this.$summary.classList.remove('moj-hidden')\n this.$summary.setAttribute('aria-labelledby', 'errorSummary-heading')\n this.$summary.focus()\n }\n\n getSummaryHtml() {\n let html =\n '<h2 id=\"error-summary-title\" class=\"govuk-error-summary__title\">There is a problem</h2>'\n html += '<div class=\"govuk-error-summary__body\">'\n html += '<ul class=\"govuk-list govuk-error-summary__list\">'\n for (const error of this.errors) {\n html += '<li>'\n html += `<a href=\"#${this.escapeHtml(error.fieldName)}\">`\n html += this.escapeHtml(error.message)\n html += '</a>'\n html += '</li>'\n }\n html += '</ul>'\n html += '</div>'\n return html\n }\n\n hideSummary() {\n this.$summary.classList.add('moj-hidden')\n this.$summary.removeAttribute('aria-labelledby')\n }\n\n /**\n * @param {SubmitEvent} event - Form submit event\n */\n onSubmit(event) {\n this.removeInlineErrors()\n this.hideSummary()\n this.resetTitle()\n if (!this.validate()) {\n event.preventDefault()\n this.updateTitle()\n this.showSummary()\n this.showInlineErrors()\n }\n }\n\n showInlineErrors() {\n for (const error of this.errors) {\n this.showInlineError(error)\n }\n }\n\n /**\n * @param {ValidationError} error\n */\n showInlineError(error) {\n const $errorSpan = document.createElement('span')\n $errorSpan.id = `${error.fieldName}-error`\n $errorSpan.classList.add('govuk-error-message')\n $errorSpan.innerHTML = this.escapeHtml(error.message)\n\n const $control = document.querySelector(`#${error.fieldName}`)\n const $fieldset = $control.closest('.govuk-fieldset')\n const $fieldContainer = ($fieldset || $control).closest('.govuk-form-group')\n\n const $label = $fieldContainer.querySelector('label')\n const $legend = $fieldContainer.querySelector('legend')\n\n $fieldContainer.classList.add('govuk-form-group--error')\n\n if ($fieldset && $legend) {\n $legend.after($errorSpan)\n $fieldContainer.setAttribute('aria-invalid', 'true')\n addAttributeValue($fieldset, 'aria-describedby', $errorSpan.id)\n } else if ($label && $control) {\n $label.after($errorSpan)\n $control.setAttribute('aria-invalid', 'true')\n addAttributeValue($control, 'aria-describedby', $errorSpan.id)\n }\n }\n\n removeInlineErrors() {\n for (const error of this.errors) {\n this.removeInlineError(error)\n }\n }\n\n /**\n * @param {ValidationError} error\n */\n removeInlineError(error) {\n const $errorSpan = document.querySelector(`#${error.fieldName}-error`)\n\n const $control = document.querySelector(`#${error.fieldName}`)\n const $fieldset = $control.closest('.govuk-fieldset')\n const $fieldContainer = ($fieldset || $control).closest('.govuk-form-group')\n\n const $label = $fieldContainer.querySelector('label')\n const $legend = $fieldContainer.querySelector('legend')\n\n $errorSpan.remove()\n $fieldContainer.classList.remove('govuk-form-group--error')\n\n if ($fieldset && $legend) {\n $fieldContainer.removeAttribute('aria-invalid')\n removeAttributeValue($fieldset, 'aria-describedby', $errorSpan.id)\n } else if ($label && $control) {\n $control.removeAttribute('aria-invalid')\n removeAttributeValue($control, 'aria-describedby', $errorSpan.id)\n }\n }\n\n /**\n * @param {string} fieldName - Field name\n * @param {ValidationRule[]} rules - Validation rules\n */\n addValidator(fieldName, rules) {\n this.validators.push({\n fieldName,\n rules,\n field: this.$root.elements.namedItem(fieldName)\n })\n }\n\n validate() {\n this.errors = []\n\n /** @type {Validator | null} */\n let validator = null\n\n /** @type {boolean | string} */\n let validatorReturnValue = true\n\n let i\n let j\n\n for (i = 0; i < this.validators.length; i++) {\n validator = this.validators[i]\n for (j = 0; j < validator.rules.length; j++) {\n validatorReturnValue = validator.rules[j].method(\n validator.field,\n validator.rules[j].params\n )\n\n if (\n typeof validatorReturnValue === 'boolean' &&\n !validatorReturnValue\n ) {\n this.errors.push({\n fieldName: validator.fieldName,\n message: validator.rules[j].message\n })\n break\n } else if (typeof validatorReturnValue === 'string') {\n this.errors.push({\n fieldName: validatorReturnValue,\n message: validator.rules[j].message\n })\n break\n }\n }\n }\n return this.errors.length === 0\n }\n\n /**\n * @type {Record<string, string>}\n */\n static entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/',\n '`': '`',\n '=': '='\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-form-validator'\n\n /**\n * Multi file upload default config\n *\n * @type {FormValidatorConfig}\n */\n static defaults = Object.freeze({\n summary: {\n selector: '.govuk-error-summary'\n }\n })\n\n /**\n * Multi file upload config schema\n *\n * @satisfies {Schema<FormValidatorConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n summary: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} FormValidatorConfig\n * @property {object} [summary] - Error summary config\n * @property {string} [summary.selector] - Selector for error summary\n * @property {Element | null} [summary.element] - HTML element for error summary\n */\n\n/**\n * @typedef {object} ValidationRule\n * @property {(field: Validator['field'], params: Record<string, Validator['field']>) => boolean | string} method - Validation method\n * @property {string} message - Error message\n * @property {Record<string, Validator['field']>} [params] - Parameters for validation\n */\n\n/**\n * @typedef {object} ValidationError\n * @property {string} fieldName - Name of the field\n * @property {string} message - Validation error message\n */\n\n/**\n * @typedef {object} Validator\n * @property {string} fieldName - Name of the field\n * @property {ValidationRule[]} rules - Validation rules\n * @property {Element | RadioNodeList} field - Form field\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","/* eslint-disable @typescript-eslint/no-empty-function */\n\nimport { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<MultiFileUploadConfig>}\n */\nexport class MultiFileUpload extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for multi file upload\n * @param {MultiFileUploadConfig} [config] - Multi file upload config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n if (!MultiFileUpload.isSupported()) {\n return this\n }\n\n const $feedbackContainer =\n this.config.feedbackContainer.element ??\n this.$root.querySelector(this.config.feedbackContainer.selector)\n\n if (!$feedbackContainer || !($feedbackContainer instanceof HTMLElement)) {\n return this\n }\n\n this.$feedbackContainer = $feedbackContainer\n\n this.setupFileInput()\n this.setupDropzone()\n this.setupLabel()\n this.setupStatusBox()\n\n this.$root.addEventListener('click', this.onFileDeleteClick.bind(this))\n this.$root.classList.add('moj-multi-file-upload--enhanced')\n }\n\n setupDropzone() {\n this.$dropzone = document.createElement('div')\n this.$dropzone.classList.add('moj-multi-file-upload__dropzone')\n\n this.$dropzone.addEventListener('dragover', this.onDragOver.bind(this))\n this.$dropzone.addEventListener('dragleave', this.onDragLeave.bind(this))\n this.$dropzone.addEventListener('drop', this.onDrop.bind(this))\n\n this.$fileInput.replaceWith(this.$dropzone)\n this.$dropzone.appendChild(this.$fileInput)\n }\n\n setupLabel() {\n const $label = document.createElement('label')\n $label.setAttribute('for', this.$fileInput.id)\n $label.classList.add('govuk-button', 'govuk-button--secondary')\n $label.textContent = this.config.dropzoneButtonText\n\n const $hint = document.createElement('p')\n $hint.classList.add('govuk-body')\n $hint.textContent = this.config.dropzoneHintText\n\n this.$label = $label\n this.$dropzone.append($hint)\n this.$dropzone.append($label)\n }\n\n setupFileInput() {\n this.$fileInput = /** @type {HTMLInputElement} */ (\n this.$root.querySelector('.moj-multi-file-upload__input')\n )\n this.$fileInput.addEventListener('change', this.onFileChange.bind(this))\n this.$fileInput.addEventListener('focus', this.onFileFocus.bind(this))\n this.$fileInput.addEventListener('blur', this.onFileBlur.bind(this))\n }\n\n setupStatusBox() {\n this.$status = document.createElement('div')\n this.$status.classList.add('govuk-visually-hidden')\n this.$status.setAttribute('aria-live', 'polite')\n this.$status.setAttribute('role', 'status')\n this.$dropzone.append(this.$status)\n }\n\n /**\n * @param {DragEvent} event - Drag event\n */\n onDragOver(event) {\n event.preventDefault()\n this.$dropzone.classList.add('moj-multi-file-upload--dragover')\n }\n\n onDragLeave() {\n this.$dropzone.classList.remove('moj-multi-file-upload--dragover')\n }\n\n /**\n * @param {DragEvent} event - Drag event\n */\n onDrop(event) {\n event.preventDefault()\n this.$dropzone.classList.remove('moj-multi-file-upload--dragover')\n this.$feedbackContainer.classList.remove('moj-hidden')\n this.$status.textContent = this.config.uploadStatusText\n this.uploadFiles(event.dataTransfer.files)\n }\n\n /**\n * @param {FileList} files - File list\n */\n uploadFiles(files) {\n for (const file of Array.from(files)) {\n this.uploadFile(file)\n }\n }\n\n onFileChange() {\n this.$feedbackContainer.classList.remove('moj-hidden')\n this.$status.textContent = this.config.uploadStatusText\n this.uploadFiles(this.$fileInput.files)\n\n const $fileInput = this.$fileInput.cloneNode(true)\n if (!$fileInput || !($fileInput instanceof HTMLInputElement)) {\n return\n }\n\n $fileInput.value = ''\n this.$fileInput.replaceWith($fileInput)\n\n this.setupFileInput()\n this.$fileInput.focus()\n }\n\n onFileFocus() {\n this.$label.classList.add('moj-multi-file-upload--focused')\n }\n\n onFileBlur() {\n this.$label.classList.remove('moj-multi-file-upload--focused')\n }\n\n /**\n * @param {UploadResponseSuccess['success']} success\n */\n getSuccessHtml(success) {\n return `<span class=\"moj-multi-file-upload__success\"> <svg class=\"moj-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\"><path d=\"M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z\"/></svg>${success.messageHtml}</span>`\n }\n\n /**\n * @param {UploadResponseError['error']} error\n */\n getErrorHtml(error) {\n return `<span class=\"moj-multi-file-upload__error\"> <svg class=\"moj-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\"><path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"/></svg>${error.message}</span>`\n }\n\n /**\n * @param {File} file\n */\n getFileRow(file) {\n const $row = document.createElement('div')\n\n $row.classList.add('govuk-summary-list__row', 'moj-multi-file-upload__row')\n\n $row.innerHTML = `\n <div class=\"govuk-summary-list__value moj-multi-file-upload__message\">\n <span class=\"moj-multi-file-upload__filename\">${file.name}</span>\n <span class=\"moj-multi-file-upload__progress\">0%</span>\n </div>\n <div class=\"govuk-summary-list__actions moj-multi-file-upload__actions\"></div>\n `\n\n return $row\n }\n\n /**\n * @param {UploadResponseFile} file\n */\n getDeleteButton(file) {\n const $button = document.createElement('button')\n\n $button.setAttribute('type', 'button')\n $button.setAttribute('name', 'delete')\n $button.setAttribute('value', file.filename)\n\n $button.classList.add(\n 'moj-multi-file-upload__delete',\n 'govuk-button',\n 'govuk-button--secondary',\n 'govuk-!-margin-bottom-0'\n )\n\n $button.innerHTML = `Delete <span class=\"govuk-visually-hidden\">${file.originalname}</span>`\n\n return $button\n }\n\n /**\n * @param {File} file\n */\n uploadFile(file) {\n this.config.hooks.entryHook(this, file)\n\n const $item = this.getFileRow(file)\n const $message = $item.querySelector('.moj-multi-file-upload__message')\n const $actions = $item.querySelector('.moj-multi-file-upload__actions')\n const $progress = $item.querySelector('.moj-multi-file-upload__progress')\n\n const formData = new FormData()\n formData.append('documents', file)\n\n this.$feedbackContainer\n .querySelector('.moj-multi-file-upload__list')\n .append($item)\n\n const xhr = new XMLHttpRequest()\n\n const onLoad = () => {\n if (\n xhr.status < 200 ||\n xhr.status >= 300 ||\n !('success' in xhr.response)\n ) {\n return onError()\n }\n\n $message.innerHTML = this.getSuccessHtml(xhr.response.success)\n this.$status.textContent = xhr.response.success.messageText\n\n $actions.append(this.getDeleteButton(xhr.response.file))\n this.config.hooks.exitHook(this, file, xhr, xhr.responseText)\n }\n\n const onError = () => {\n const error = new Error(\n xhr.response && 'error' in xhr.response\n ? xhr.response.error.message\n : xhr.statusText || 'Upload failed'\n )\n\n $message.innerHTML = this.getErrorHtml(error)\n this.$status.textContent = error.message\n\n this.config.hooks.errorHook(this, file, xhr, xhr.responseText, error)\n }\n\n xhr.addEventListener('load', onLoad)\n xhr.addEventListener('error', onError)\n\n xhr.upload.addEventListener('progress', (event) => {\n if (!event.lengthComputable) {\n return\n }\n\n const percentComplete = Math.round((event.loaded / event.total) * 100)\n $progress.textContent = ` ${percentComplete}%`\n })\n\n xhr.open('POST', this.config.uploadUrl)\n xhr.responseType = 'json'\n\n xhr.send(formData)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onFileDeleteClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-multi-file-upload__delete')\n ) {\n return\n }\n\n event.preventDefault() // if user refreshes page and then deletes\n\n const xhr = new XMLHttpRequest()\n\n xhr.addEventListener('load', () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n return\n }\n\n const $rows = Array.from(\n this.$feedbackContainer.querySelectorAll('.moj-multi-file-upload__row')\n )\n\n if ($rows.length === 1) {\n this.$feedbackContainer.classList.add('moj-hidden')\n }\n\n const $rowDelete = $rows.find(($row) => $row.contains($button))\n if ($rowDelete) $rowDelete.remove()\n\n this.config.hooks.deleteHook(this, undefined, xhr, xhr.responseText)\n })\n\n xhr.open('POST', this.config.deleteUrl)\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.responseType = 'json'\n\n xhr.send(\n JSON.stringify({\n [$button.name]: $button.value\n })\n )\n }\n\n static isSupported() {\n return (\n this.isDragAndDropSupported() &&\n this.isFormDataSupported() &&\n this.isFileApiSupported()\n )\n }\n\n static isDragAndDropSupported() {\n const div = document.createElement('div')\n return typeof div.ondrop !== 'undefined'\n }\n\n static isFormDataSupported() {\n return typeof FormData === 'function'\n }\n\n static isFileApiSupported() {\n const input = document.createElement('input')\n input.type = 'file'\n return typeof input.files !== 'undefined'\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-multi-file-upload'\n\n /**\n * Multi file upload default config\n *\n * @type {MultiFileUploadConfig}\n */\n static defaults = Object.freeze({\n uploadStatusText: 'Uploading files, please wait',\n dropzoneHintText: 'Drag and drop files here or',\n dropzoneButtonText: 'Choose files',\n feedbackContainer: {\n selector: '.moj-multi-file__uploaded-files'\n },\n hooks: {\n entryHook: () => {},\n exitHook: () => {},\n errorHook: () => {},\n deleteHook: () => {}\n }\n })\n\n /**\n * Multi file upload config schema\n *\n * @satisfies {Schema<MultiFileUploadConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n uploadUrl: { type: 'string' },\n deleteUrl: { type: 'string' },\n uploadStatusText: { type: 'string' },\n dropzoneHintText: { type: 'string' },\n dropzoneButtonText: { type: 'string' },\n feedbackContainer: { type: 'object' },\n hooks: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Multi file upload config\n *\n * @typedef {object} MultiFileUploadConfig\n * @property {string} [uploadUrl] - File upload URL\n * @property {string} [deleteUrl] - File delete URL\n * @property {string} [uploadStatusText] - Upload status text\n * @property {string} [dropzoneHintText] - Dropzone hint text\n * @property {string} [dropzoneButtonText] - Dropzone button text\n * @property {object} [feedbackContainer] - Feedback container config\n * @property {string} [feedbackContainer.selector] - Selector for feedback container\n * @property {Element | null} [feedbackContainer.element] - HTML element for feedback container\n * @property {MultiFileUploadHooks} [hooks] - Upload hooks\n */\n\n/**\n * Multi file upload hooks\n *\n * @typedef {object} MultiFileUploadHooks\n * @property {OnUploadFileEntryHook} [entryHook] - File upload entry hook\n * @property {OnUploadFileExitHook} [exitHook] - File upload exit hook\n * @property {OnUploadFileErrorHook} [errorHook] - File upload error hook\n * @property {OnUploadFileDeleteHook} [deleteHook] - File delete hook\n */\n\n/**\n * Upload hook: File entry\n *\n * @callback OnUploadFileEntryHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n */\n\n/**\n * Upload hook: File exit\n *\n * @callback OnUploadFileExitHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n */\n\n/**\n * Upload hook: File error\n *\n * @callback OnUploadFileErrorHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n * @param {Error} errorThrown - Error thrown\n */\n\n/**\n * Upload hook: File delete\n *\n * @callback OnUploadFileDeleteHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} [file] - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n */\n\n/**\n * @typedef {object} UploadResponseSuccess\n * @property {{ messageText: string, messageHtml: string }} success - Response success\n * @property {UploadResponseFile} file - Response file\n */\n\n/**\n * @typedef {object} UploadResponseError\n * @property {{ message: string }} error - Response error\n * @property {UploadResponseFile} file - Response file\n */\n\n/**\n * @typedef {object} UploadResponseFile\n * @property {string} filename - File name\n * @property {string} originalname - Original file name\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<MultiSelectConfig>}\n */\nexport class MultiSelect extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for multi select\n * @param {MultiSelectConfig} [config] - Multi select config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $container = this.$root.querySelector(\n `#${this.config.idPrefix}select-all`\n )\n\n const $checkboxes = /** @type {NodeListOf<HTMLInputElement>} */ (\n this.config.checkboxes.items ??\n this.$root.querySelectorAll(this.config.checkboxes.selector)\n )\n\n if (\n !$container ||\n !($container instanceof HTMLElement) ||\n !$checkboxes.length\n ) {\n return this\n }\n\n this.setupToggle(this.config.idPrefix)\n\n this.$toggleButton = this.$toggle.querySelector('input')\n this.$toggleButton.addEventListener('click', this.onButtonClick.bind(this))\n\n this.$container = $container\n this.$container.append(this.$toggle)\n\n this.$checkboxes = Array.from($checkboxes)\n this.$checkboxes.forEach(($input) =>\n $input.addEventListener('click', this.onCheckboxClick.bind(this))\n )\n\n this.checked = config.checked || false\n }\n\n setupToggle(idPrefix = '') {\n const id = `${idPrefix}checkboxes-all`\n\n const $toggle = document.createElement('div')\n const $label = document.createElement('label')\n const $input = document.createElement('input')\n const $span = document.createElement('span')\n\n $toggle.classList.add(\n 'govuk-checkboxes__item',\n 'govuk-checkboxes--small',\n 'moj-multi-select__checkbox'\n )\n\n $input.id = id\n $input.type = 'checkbox'\n $input.classList.add('govuk-checkboxes__input')\n\n $label.setAttribute('for', id)\n $label.classList.add(\n 'govuk-label',\n 'govuk-checkboxes__label',\n 'moj-multi-select__toggle-label'\n )\n\n $span.classList.add('govuk-visually-hidden')\n $span.textContent = 'Select all'\n\n $label.append($span)\n $toggle.append($input, $label)\n\n this.$toggle = $toggle\n }\n\n onButtonClick() {\n if (this.checked) {\n this.uncheckAll()\n this.$toggleButton.checked = false\n } else {\n this.checkAll()\n this.$toggleButton.checked = true\n }\n }\n\n checkAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = true\n })\n\n this.checked = true\n }\n\n uncheckAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = false\n })\n\n this.checked = false\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onCheckboxClick(event) {\n if (!(event.target instanceof HTMLInputElement)) {\n return\n }\n\n if (!event.target.checked) {\n this.$toggleButton.checked = false\n this.checked = false\n } else {\n if (\n this.$checkboxes.filter(($input) => $input.checked).length ===\n this.$checkboxes.length\n ) {\n this.$toggleButton.checked = true\n this.checked = true\n }\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-multi-select'\n\n /**\n * Multi select config\n *\n * @type {MultiSelectConfig}\n */\n static defaults = Object.freeze({\n idPrefix: '',\n checkboxes: {\n selector: 'tbody input.govuk-checkboxes__input'\n }\n })\n\n /**\n * Multi select config schema\n *\n * @satisfies {Schema<MultiSelectConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n idPrefix: { type: 'string' },\n checked: { type: 'boolean' },\n checkboxes: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Multi select config\n *\n * @typedef {object} MultiSelectConfig\n * @property {string} [idPrefix] - Prefix for the Select all\" checkbox `id` attribute\n * @property {boolean} [checked] - Whether the \"Select all\" checkbox is checked\n * @property {object} [checkboxes] - Checkboxes config\n * @property {string} [checkboxes.selector] - Checkboxes query selector\n * @property {NodeListOf<HTMLInputElement>} [checkboxes.items] - Checkboxes query selector results\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { Component } from 'govuk-frontend'\n\nexport class PasswordReveal extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for password reveal\n */\n constructor($root) {\n super($root)\n\n const $input = this.$root.querySelector('.govuk-input')\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\n this.$input.setAttribute('spellcheck', 'false')\n\n this.createButton()\n }\n\n createButton() {\n this.$group = document.createElement('div')\n this.$button = document.createElement('button')\n\n this.$button.setAttribute('type', 'button')\n\n this.$root.classList.add('moj-password-reveal')\n this.$group.classList.add('moj-password-reveal__wrapper')\n this.$button.classList.add(\n 'govuk-button',\n 'govuk-button--secondary',\n 'moj-password-reveal__button'\n )\n\n this.$button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n\n this.$button.addEventListener('click', this.onButtonClick.bind(this))\n\n this.$group.append(this.$input, this.$button)\n this.$root.append(this.$group)\n }\n\n onButtonClick() {\n if (this.$input.type === 'password') {\n this.$input.type = 'text'\n this.$button.innerHTML =\n 'Hide <span class=\"govuk-visually-hidden\">password</span>'\n } else {\n this.$input.type = 'password'\n this.$button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-password-reveal'\n}\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<RichTextEditorConfig>}\n */\nexport class RichTextEditor extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for rich text editor\n * @param {RichTextEditorConfig} config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n if (!RichTextEditor.isSupported()) {\n return this\n }\n\n const $textarea = this.$root.querySelector('.govuk-textarea')\n if (!$textarea || !($textarea instanceof HTMLTextAreaElement)) {\n return this\n }\n\n this.$textarea = $textarea\n\n this.createToolbar()\n this.hideDefault()\n this.configureToolbar()\n\n this.keys = {\n left: 37,\n right: 39,\n up: 38,\n down: 40\n }\n\n this.$content.addEventListener('input', this.onEditorInput.bind(this))\n\n this.$root\n .querySelector('label')\n .addEventListener('click', this.onLabelClick.bind(this))\n\n this.$toolbar.addEventListener('keydown', this.onToolbarKeydown.bind(this))\n }\n\n /**\n * @param {KeyboardEvent} event - Click event\n */\n onToolbarKeydown(event) {\n let $focusableButton\n switch (event.keyCode) {\n case this.keys.right:\n case this.keys.down: {\n $focusableButton = this.$buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n\n if ($focusableButton) {\n const $nextButton = $focusableButton.nextElementSibling\n\n if ($nextButton && $nextButton instanceof HTMLButtonElement) {\n $nextButton.focus()\n $focusableButton.setAttribute('tabindex', '-1')\n $nextButton.setAttribute('tabindex', '0')\n }\n }\n\n break\n }\n\n case this.keys.left:\n case this.keys.up: {\n $focusableButton = this.$buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n\n if ($focusableButton) {\n const $previousButton = $focusableButton.previousElementSibling\n\n if ($previousButton && $previousButton instanceof HTMLButtonElement) {\n $previousButton.focus()\n $focusableButton.setAttribute('tabindex', '-1')\n $previousButton.setAttribute('tabindex', '0')\n }\n }\n\n break\n }\n }\n }\n\n getToolbarHtml() {\n let html = ''\n\n html += '<div class=\"moj-rich-text-editor__toolbar\" role=\"toolbar\">'\n\n if (this.config.toolbar.bold) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--bold\" type=\"button\" data-command=\"bold\"><span class=\"govuk-visually-hidden\">Bold</span></button>'\n }\n\n if (this.config.toolbar.italic) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--italic\" type=\"button\" data-command=\"italic\"><span class=\"govuk-visually-hidden\">Italic</span></button>'\n }\n\n if (this.config.toolbar.underline) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--underline\" type=\"button\" data-command=\"underline\"><span class=\"govuk-visually-hidden\">Underline</span></button>'\n }\n\n if (this.config.toolbar.bullets) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--unordered-list\" type=\"button\" data-command=\"insertUnorderedList\"><span class=\"govuk-visually-hidden\">Unordered list</span></button>'\n }\n\n if (this.config.toolbar.numbers) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--ordered-list\" type=\"button\" data-command=\"insertOrderedList\"><span class=\"govuk-visually-hidden\">Ordered list</span></button>'\n }\n\n html += '</div>'\n return html\n }\n\n getEnhancedHtml() {\n return `${this.getToolbarHtml()}<div class=\"govuk-textarea moj-rich-text-editor__content\" contenteditable=\"true\" spellcheck=\"false\"></div>`\n }\n\n hideDefault() {\n this.$textarea.classList.add('govuk-visually-hidden')\n this.$textarea.setAttribute('aria-hidden', 'true')\n this.$textarea.setAttribute('tabindex', '-1')\n }\n\n createToolbar() {\n this.$toolbar = document.createElement('div')\n this.$toolbar.className = 'moj-rich-text-editor'\n this.$toolbar.innerHTML = this.getEnhancedHtml()\n this.$root.append(this.$toolbar)\n\n this.$content = /** @type {HTMLElement} */ (\n this.$root.querySelector('.moj-rich-text-editor__content')\n )\n\n this.$content.innerHTML = this.$textarea.value\n }\n\n configureToolbar() {\n this.$buttons = Array.from(\n /** @type {NodeListOf<HTMLButtonElement>} */\n (this.$root.querySelectorAll('.moj-rich-text-editor__toolbar-button'))\n )\n\n this.$buttons.forEach(($button, index) => {\n $button.setAttribute('tabindex', !index ? '0' : '-1')\n $button.addEventListener('click', this.onButtonClick.bind(this))\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onButtonClick(event) {\n if (!(event.currentTarget instanceof HTMLElement)) {\n return\n }\n\n document.execCommand(\n event.currentTarget.getAttribute('data-command'),\n false,\n undefined\n )\n }\n\n getContent() {\n return this.$content.innerHTML\n }\n\n onEditorInput() {\n this.updateTextarea()\n }\n\n updateTextarea() {\n document.execCommand('defaultParagraphSeparator', false, 'p')\n this.$textarea.value = this.getContent()\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onLabelClick(event) {\n event.preventDefault()\n this.$content.focus()\n }\n\n static isSupported() {\n return 'contentEditable' in document.documentElement\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-rich-text-editor'\n\n /**\n * Rich text editor config\n *\n * @type {RichTextEditorConfig}\n */\n static defaults = Object.freeze({\n toolbar: {\n bold: false,\n italic: false,\n underline: false,\n bullets: true,\n numbers: true\n }\n })\n\n /**\n * Rich text editor config schema\n *\n * @satisfies {Schema<RichTextEditorConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n toolbar: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Rich text editor config\n *\n * @typedef {object} RichTextEditorConfig\n * @property {RichTextEditorToolbar} [toolbar] - Toolbar options\n */\n\n/**\n * Rich text editor toolbar options\n *\n * @typedef {object} RichTextEditorToolbar\n * @property {boolean} [bold] - Show the bold button\n * @property {boolean} [italic] - Show the italic button\n * @property {boolean} [underline] - Show the underline button\n * @property {boolean} [bullets] - Show the bullets button\n * @property {boolean} [numbers] - Show the numbers button\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<SearchToggleConfig>}\n */\nexport class SearchToggle extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for search toggle\n * @param {SearchToggleConfig} [config] - Search toggle config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $searchContainer =\n this.config.searchContainer.element ??\n this.$root.querySelector(this.config.searchContainer.selector)\n\n const $toggleButtonContainer =\n this.config.toggleButtonContainer.element ??\n this.$root.querySelector(this.config.toggleButtonContainer.selector)\n\n if (\n !$searchContainer ||\n !$toggleButtonContainer ||\n !($searchContainer instanceof HTMLElement) ||\n !($toggleButtonContainer instanceof HTMLElement)\n ) {\n return this\n }\n\n this.$searchContainer = $searchContainer\n this.$toggleButtonContainer = $toggleButtonContainer\n\n const svg =\n '<svg viewBox=\"0 0 20 20\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" class=\"moj-search-toggle__button__icon\"><path d=\"M7.433,12.5790048 C6.06762625,12.5808611 4.75763941,12.0392925 3.79217348,11.0738265 C2.82670755,10.1083606 2.28513891,8.79837375 2.28699522,7.433 C2.28513891,6.06762625 2.82670755,4.75763941 3.79217348,3.79217348 C4.75763941,2.82670755 6.06762625,2.28513891 7.433,2.28699522 C8.79837375,2.28513891 10.1083606,2.82670755 11.0738265,3.79217348 C12.0392925,4.75763941 12.5808611,6.06762625 12.5790048,7.433 C12.5808611,8.79837375 12.0392925,10.1083606 11.0738265,11.0738265 C10.1083606,12.0392925 8.79837375,12.5808611 7.433,12.5790048 L7.433,12.5790048 Z M14.293,12.579 L13.391,12.579 L13.071,12.269 C14.2300759,10.9245158 14.8671539,9.20813198 14.866,7.433 C14.866,3.32786745 11.5381325,-1.65045755e-15 7.433,-1.65045755e-15 C3.32786745,-1.65045755e-15 -1.65045755e-15,3.32786745 -1.65045755e-15,7.433 C-1.65045755e-15,11.5381325 3.32786745,14.866 7.433,14.866 C9.208604,14.8671159 10.9253982,14.2296624 12.27,13.07 L12.579,13.39 L12.579,14.294 L18.296,20 L20,18.296 L14.294,12.579 L14.293,12.579 Z\"></path></svg>'\n\n this.$toggleButton = document.createElement('button')\n this.$toggleButton.setAttribute('class', 'moj-search-toggle__button')\n this.$toggleButton.setAttribute('type', 'button')\n this.$toggleButton.setAttribute('aria-haspopup', 'true')\n this.$toggleButton.setAttribute('aria-expanded', 'false')\n this.$toggleButton.innerHTML = `${this.config.toggleButton.text} ${svg}`\n\n this.$toggleButton.addEventListener(\n 'click',\n this.onToggleButtonClick.bind(this)\n )\n\n this.$toggleButtonContainer.append(this.$toggleButton)\n\n document.addEventListener('click', this.onDocumentClick.bind(this))\n document.addEventListener('focusin', this.onDocumentClick.bind(this))\n }\n\n showMenu() {\n this.$toggleButton.setAttribute('aria-expanded', 'true')\n this.$searchContainer.classList.remove('moj-js-hidden')\n this.$searchContainer.querySelector('input').focus()\n }\n\n hideMenu() {\n this.$searchContainer.classList.add('moj-js-hidden')\n this.$toggleButton.setAttribute('aria-expanded', 'false')\n }\n\n onToggleButtonClick() {\n if (this.$toggleButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n } else {\n this.hideMenu()\n }\n }\n\n /**\n * @param {MouseEvent | FocusEvent} event\n */\n onDocumentClick(event) {\n if (\n event.target instanceof Node &&\n !this.$toggleButtonContainer.contains(event.target) &&\n !this.$searchContainer.contains(event.target)\n ) {\n this.hideMenu()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-search-toggle'\n\n /**\n * Search toggle config\n *\n * @type {SearchToggleConfig}\n */\n static defaults = Object.freeze({\n searchContainer: {\n selector: '.moj-search'\n },\n toggleButton: {\n text: 'Search'\n },\n toggleButtonContainer: {\n selector: '.moj-search-toggle__toggle'\n }\n })\n\n /**\n * Search toggle config schema\n *\n * @satisfies {Schema<SearchToggleConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n searchContainer: { type: 'object' },\n toggleButton: { type: 'object' },\n toggleButtonContainer: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} SearchToggleConfig\n * @property {object} [searchContainer] - Search config\n * @property {string} [searchContainer.selector] - Selector for search container\n * @property {Element | null} [searchContainer.element] - HTML element for search container\n * @property {object} [toggleButton] - Toggle button config\n * @property {string} [toggleButton.text] - Text for toggle button\n * @property {object} [toggleButtonContainer] - Toggle button container config\n * @property {string} [toggleButtonContainer.selector] - Selector for toggle button container\n * @property {Element | null} [toggleButtonContainer.element] - HTML element for toggle button container\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<SortableTableConfig>}\n */\nexport class SortableTable extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for sortable table\n * @param {SortableTableConfig} [config] - Sortable table config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $head = $root?.querySelector('thead')\n const $body = $root?.querySelector('tbody')\n\n if (!$head || !$body) {\n return this\n }\n\n this.$head = $head\n this.$body = $body\n this.$caption = this.$root.querySelector('caption')\n\n this.$upArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.5625 15.5L11 6.63125L15.4375 15.5H6.5625Z\" fill=\"currentColor\"/>\n</svg>`\n this.$downArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" vviewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M15.4375 7L11 15.8687L6.5625 7L15.4375 7Z\" fill=\"currentColor\"/>\n</svg>`\n this.$upDownArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" vviewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M8.1875 9.5L10.9609 3.95703L13.7344 9.5H8.1875Z\" fill=\"currentColor\"/>\n<path d=\"M13.7344 12.0781L10.9609 17.6211L8.1875 12.0781H13.7344Z\" fill=\"currentColor\"/>\n</svg>`\n\n this.$headings = this.$head\n ? Array.from(this.$head.querySelectorAll('th'))\n : []\n\n this.createHeadingButtons()\n this.updateCaption()\n this.updateDirectionIndicators()\n this.createStatusBox()\n this.initialiseSortedColumn()\n\n this.$head.addEventListener('click', this.onSortButtonClick.bind(this))\n }\n\n createHeadingButtons() {\n for (const $heading of this.$headings) {\n if ($heading.hasAttribute('aria-sort')) {\n this.createHeadingButton($heading)\n }\n }\n }\n\n /**\n * @param {HTMLTableCellElement} $heading\n */\n createHeadingButton($heading) {\n const index = this.$headings.indexOf($heading)\n const $button = document.createElement('button')\n\n $button.setAttribute('type', 'button')\n $button.setAttribute('data-index', `${index}`)\n $button.textContent = $heading.textContent\n\n $heading.textContent = ''\n $heading.appendChild($button)\n }\n\n createStatusBox() {\n this.$status = document.createElement('div')\n\n this.$status.setAttribute('aria-atomic', 'true')\n this.$status.setAttribute('aria-live', 'polite')\n this.$status.setAttribute('class', 'govuk-visually-hidden')\n this.$status.setAttribute('role', 'status')\n\n this.$root.insertAdjacentElement('afterend', this.$status)\n }\n\n initialiseSortedColumn() {\n const $rows = this.getTableRowsArray()\n\n const $heading = this.$root.querySelector(\n 'th[aria-sort=\"ascending\"], th[aria-sort=\"descending\"]'\n )\n const $sortButton = $heading?.querySelector('button')\n const sortDirection = $heading?.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $sortButton?.getAttribute('data-index') ?? '0',\n 10\n )\n\n if (\n !$heading ||\n !$sortButton ||\n !(sortDirection === 'ascending' || sortDirection === 'descending')\n ) {\n return\n }\n\n const $sortedRows = this.sort($rows, columnNumber, sortDirection)\n this.addRows($sortedRows)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onSortButtonClick(event) {\n const $target = /** @type {HTMLElement} */ (event.target)\n const $button = $target.closest('button')\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.parentElement\n ) {\n return\n }\n\n const $heading = $button.parentElement\n const sortDirection = $heading.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $button?.getAttribute('data-index') ?? '0',\n 10\n )\n\n const newSortDirection =\n sortDirection === 'none' || sortDirection === 'descending'\n ? 'ascending'\n : 'descending'\n\n const $rows = this.getTableRowsArray()\n const $sortedRows = this.sort($rows, columnNumber, newSortDirection)\n\n this.addRows($sortedRows)\n this.removeButtonStates()\n this.updateButtonState($button, newSortDirection)\n this.updateDirectionIndicators()\n }\n\n updateCaption() {\n if (!this.$caption) {\n return\n }\n\n let assistiveText = this.$caption.querySelector('.govuk-visually-hidden')\n if (assistiveText) {\n return\n }\n\n assistiveText = document.createElement('span')\n assistiveText.classList.add('govuk-visually-hidden')\n assistiveText.textContent = ' (column headers with buttons are sortable).'\n\n this.$caption.appendChild(assistiveText)\n }\n\n /**\n * @param {HTMLButtonElement} $button\n * @param {string} direction\n */\n updateButtonState($button, direction) {\n if (!(direction === 'ascending' || direction === 'descending')) {\n return\n }\n\n $button.parentElement.setAttribute('aria-sort', direction)\n let message = this.config.statusMessage\n message = message.replace(/%heading%/, $button.textContent)\n message = message.replace(/%direction%/, this.config[`${direction}Text`])\n this.$status.textContent = message\n }\n\n updateDirectionIndicators() {\n for (const $heading of this.$headings) {\n const $button = /** @type {HTMLButtonElement} */ (\n $heading.querySelector('button')\n )\n if ($heading.hasAttribute('aria-sort') && $button) {\n const direction = $heading.getAttribute('aria-sort')\n $button.querySelector('svg')?.remove()\n\n switch (direction) {\n case 'ascending':\n $button.insertAdjacentHTML('beforeend', this.$upArrow)\n break\n case 'descending':\n $button.insertAdjacentHTML('beforeend', this.$downArrow)\n break\n default:\n $button.insertAdjacentHTML('beforeend', this.$upDownArrow)\n }\n }\n }\n }\n\n removeButtonStates() {\n for (const $heading of this.$headings) {\n $heading.setAttribute('aria-sort', 'none')\n }\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n */\n addRows($rows) {\n for (const $row of $rows) {\n this.$body.append($row)\n }\n }\n\n getTableRowsArray() {\n return Array.from(this.$body.querySelectorAll('tr'))\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n * @param {number} columnNumber\n * @param {string} sortDirection\n */\n sort($rows, columnNumber, sortDirection) {\n return $rows.sort(($rowA, $rowB) => {\n const $tdA = $rowA.querySelectorAll('td, th')[columnNumber]\n const $tdB = $rowB.querySelectorAll('td, th')[columnNumber]\n\n if (\n !$tdA ||\n !$tdB ||\n !($tdA instanceof HTMLElement) ||\n !($tdB instanceof HTMLElement)\n ) {\n return 0\n }\n\n const valueA =\n sortDirection === 'ascending'\n ? this.getCellValue($tdA)\n : this.getCellValue($tdB)\n\n const valueB =\n sortDirection === 'ascending'\n ? this.getCellValue($tdB)\n : this.getCellValue($tdA)\n\n return !(typeof valueA === 'number' && typeof valueB === 'number')\n ? valueA.toString().localeCompare(valueB.toString())\n : valueA - valueB\n })\n }\n\n /**\n * @param {HTMLElement} $cell\n */\n getCellValue($cell) {\n const val = $cell.getAttribute('data-sort-value') || $cell.innerHTML\n const valAsNumber = Number(val)\n\n return Number.isFinite(valAsNumber)\n ? valAsNumber // Exclude invalid numbers, infinity etc\n : val\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-sortable-table'\n\n /**\n * Sortable table config\n *\n * @type {SortableTableConfig}\n */\n static defaults = Object.freeze({\n statusMessage: 'Sort by %heading% (%direction%)',\n ascendingText: 'ascending',\n descendingText: 'descending'\n })\n\n /**\n * Sortable table config schema\n *\n * @satisfies {Schema<SortableTableConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n statusMessage: { type: 'string' },\n ascendingText: { type: 'string' },\n descendingText: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * Sortable table config\n *\n * @typedef {object} SortableTableConfig\n * @property {string} [statusMessage] - Status message\n * @property {string} [ascendingText] - Ascending text\n * @property {string} [descendingText] - Descending text\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { createAll } from 'govuk-frontend'\n\nimport { version } from './common/moj-frontend-version.mjs'\nimport { AddAnother } from './components/add-another/add-another.mjs'\nimport { Alert } from './components/alert/alert.mjs'\nimport { ButtonMenu } from './components/button-menu/button-menu.mjs'\nimport { DatePicker } from './components/date-picker/date-picker.mjs'\nimport { FilterToggleButton } from './components/filter-toggle-button/filter-toggle-button.mjs'\nimport { FormValidator } from './components/form-validator/form-validator.mjs'\nimport { MultiFileUpload } from './components/multi-file-upload/multi-file-upload.mjs'\nimport { MultiSelect } from './components/multi-select/multi-select.mjs'\nimport { PasswordReveal } from './components/password-reveal/password-reveal.mjs'\nimport { RichTextEditor } from './components/rich-text-editor/rich-text-editor.mjs'\nimport { SearchToggle } from './components/search-toggle/search-toggle.mjs'\nimport { SortableTable } from './components/sortable-table/sortable-table.mjs'\n\n/**\n * @param {Config} [config]\n */\nfunction initAll(config) {\n for (const Component of [\n AddAnother,\n Alert,\n ButtonMenu,\n DatePicker,\n MultiSelect,\n PasswordReveal,\n RichTextEditor,\n SearchToggle,\n SortableTable\n ]) {\n createAll(Component, undefined, config)\n }\n}\n\nexport {\n initAll,\n version,\n\n // Components\n AddAnother,\n Alert,\n ButtonMenu,\n DatePicker,\n FilterToggleButton,\n FormValidator,\n MultiFileUpload,\n MultiSelect,\n PasswordReveal,\n RichTextEditor,\n SearchToggle,\n SortableTable\n}\n\n/**\n * @typedef {Parameters<typeof GOVUKFrontend.initAll>[0]} Config\n */\n\n/**\n * @import * as GOVUKFrontend from 'govuk-frontend'\n */\n"],"names":["version","AddAnother","Component","constructor","$root","addEventListener","onRemoveButtonClick","bind","onAddButtonClick","$buttons","querySelectorAll","forEach","$button","HTMLButtonElement","type","event","target","classList","contains","$items","getItems","$item","getNewItem","HTMLElement","updateAttributes","length","resetItem","$firstItem","hasRemoveButton","createRemoveButton","after","$input","querySelector","HTMLInputElement","focus","Array","from","filter","item","cloneNode","index","name","getAttribute","id","originalId","replace","$label","parentElement","closest","HTMLLabelElement","htmlFor","document","createElement","add","textContent","append","checked","value","remove","focusHeading","$heading","moduleName","setFocus","$element","options","_options$onBeforeFocu","isFocusable","setAttribute","onFocus","onBlur","once","_options$onBlur","call","removeAttribute","onBeforeFocus","removeAttributeValue","attr","re","m","RegExp","match","addAttributeValue","test","getPreviousSibling","selector","$sibling","previousElementSibling","matches","findNearestMatchingElement","$currentElement","Alert","ConfigurableComponent","config","disableAutoFocus","$dismissButton","dismissible","innerHTML","dismissText","Node","dimiss","$elementToRecieveFocus","focusOnDismissSelector","$nextSibling","nextElementSibling","defaults","Object","freeze","schema","properties","ButtonMenu","children","className","startsWith","buttonClasses","split","initMenu","$menu","createMenu","insertAdjacentHTML","toggleTemplate","setupMenuItems","$menuToggle","toggleMenu","handleKeyDown","closeMenu","hidden","alignMenu","appendChild","firstChild","$menuItem","$listItem","insertBefore","tagName","setTimeout","buttonText","isOpen","preventDefault","keyboardEvent","detail","focusIndex","openMenu","focusItem","moveFocus","currentFocusIndex","$activeElement","activeElement","$menuItems","HTMLAnchorElement","indexOf","key","DatePicker","_this$config$input$el","input","element","dayLabels","monthLabels","currentDate","Date","setHours","calendarDays","excludedDates","excludedDays","buttonClass","selectedDayButtonClass","currentDayButtonClass","todayButtonClass","setOptions","initControls","$dialog","createDialog","createCalendarHeaders","$componentWrapper","$inputWrapper","insertAdjacentElement","$calendarButton","$dialogTitle","createCalendar","$prevMonthButton","$prevYearButton","$nextMonthButton","$nextYearButton","$cancelButton","$okButton","focusPreviousMonth","focusPreviousYear","focusNextMonth","focusNextYear","closeDialog","selectDate","$dialogButtons","$firstButtonInDialog","$lastButtonInDialog","firstButtonKeydown","lastButtonKeydown","toggleDialog","stopPropagation","body","backgroundClick","updateCalendar","titleId","dialogTemplate","$tbody","dayCount","i","$row","insertRow","j","$cell","$dateButton","calendarDay","DSCalendarDay","push","day","html","substring","$headerRow","leadingZeros","ret","toString","setMinAndMaxDatesOnCalendar","setExcludedDates","setExcludedDays","setWeekStartDay","minDate","formattedDateFromString","maxDate","map","includes","parseDateRangeString","reduce","dates","items","concat","date","datestring","startDate","endDate","d","getTime","setDate","getDate","weekDays","toLowerCase","weekStartDay","unshift","pop","weekStartDayParam","isExcludedDate","excludedDate","toDateString","getDay","dateString","fallback","formattedDate","dateFormatPattern","exec","month","year","Number","isFinite","formattedDateFromDate","getMonth","getFullYear","formattedDateHuman","shiftKey","firstOfMonth","dayOfWeek","thisDay","disabled","update","setCurrentDate","calendarDayDate","today","inputDate","enabledDays","window","getComputedStyle","display","innerText","changeEvent","Event","bubbles","cancelable","dispatchEvent","openDialog","offsetWidth","style","right","top","offsetHeight","goToDate","current","focusNextDay","focusPreviousDay","focusNextWeek","focusPreviousWeek","focusFirstDayOfWeek","firstDayOfWeekIndex","diff","focusLastDayOfWeek","lastDayOfWeekIndex","setMonth","setFullYear","row","column","picker","keyPress","click","label","accessibleLabel","calendarNavKey","FilterToggleButton","_this$config$toggleBu","_this$config$closeBut","$toggleButtonContainer","toggleButtonContainer","$closeButtonContainer","closeButtonContainer","createToggleButton","setupResponsiveChecks","startHidden","hideMenu","mq","matchMedia","bigModeMediaQuery","addListener","checkMode","$menuButton","toggleButton","classes","showText","onMenuButtonClick","enableBigMode","enableSmallMode","showMenu","removeCloseButton","addCloseButton","$closeButton","closeButton","text","onCloseClick","hideText","toggle","FormValidator","$summary","summary","errors","validators","originalTitle","title","onSubmit","escapeHtml","string","String","entityMap","resetTitle","updateTitle","showSummary","getSummaryHtml","error","fieldName","message","hideSummary","removeInlineErrors","validate","showInlineErrors","showInlineError","$errorSpan","$control","$fieldset","$fieldContainer","$legend","removeInlineError","addValidator","rules","field","elements","namedItem","validator","validatorReturnValue","method","params","MultiFileUpload","_this$config$feedback","isSupported","$feedbackContainer","feedbackContainer","setupFileInput","setupDropzone","setupLabel","setupStatusBox","onFileDeleteClick","$dropzone","onDragOver","onDragLeave","onDrop","$fileInput","replaceWith","dropzoneButtonText","$hint","dropzoneHintText","onFileChange","onFileFocus","onFileBlur","$status","uploadStatusText","uploadFiles","dataTransfer","files","file","uploadFile","getSuccessHtml","success","messageHtml","getErrorHtml","getFileRow","getDeleteButton","filename","originalname","hooks","entryHook","$message","$actions","$progress","formData","FormData","xhr","XMLHttpRequest","onLoad","status","response","onError","messageText","exitHook","responseText","Error","statusText","errorHook","upload","lengthComputable","percentComplete","Math","round","loaded","total","open","uploadUrl","responseType","send","$rows","$rowDelete","find","deleteHook","undefined","deleteUrl","setRequestHeader","JSON","stringify","isDragAndDropSupported","isFormDataSupported","isFileApiSupported","div","ondrop","MultiSelect","_this$config$checkbox","$container","idPrefix","$checkboxes","checkboxes","setupToggle","$toggleButton","$toggle","onButtonClick","onCheckboxClick","$span","uncheckAll","checkAll","PasswordReveal","createButton","$group","RichTextEditor","$textarea","HTMLTextAreaElement","createToolbar","hideDefault","configureToolbar","keys","left","up","down","$content","onEditorInput","onLabelClick","$toolbar","onToolbarKeydown","$focusableButton","keyCode","button","$nextButton","$previousButton","getToolbarHtml","toolbar","bold","italic","underline","bullets","numbers","getEnhancedHtml","currentTarget","execCommand","getContent","updateTextarea","documentElement","SearchToggle","_this$config$searchCo","$searchContainer","searchContainer","svg","onToggleButtonClick","onDocumentClick","SortableTable","$head","$body","$caption","$upArrow","$downArrow","$upDownArrow","$headings","createHeadingButtons","updateCaption","updateDirectionIndicators","createStatusBox","initialiseSortedColumn","onSortButtonClick","hasAttribute","createHeadingButton","_$sortButton$getAttri","getTableRowsArray","$sortButton","sortDirection","columnNumber","parseInt","$sortedRows","sort","addRows","_$button$getAttribute","$target","newSortDirection","removeButtonStates","updateButtonState","assistiveText","direction","statusMessage","_$button$querySelecto","$rowA","$rowB","$tdA","$tdB","valueA","getCellValue","valueB","localeCompare","val","valAsNumber","ascendingText","descendingText","initAll","createAll"],"mappings":"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"}
|