@ministryofjustice/frontend 8.0.0-beta.1 → 9.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/moj/all.bundle.js +5 -3
  2. package/moj/all.bundle.js.map +1 -1
  3. package/moj/all.bundle.mjs +5 -3
  4. package/moj/all.bundle.mjs.map +1 -1
  5. package/moj/common/moj-frontend-version.mjs +1 -1
  6. package/moj/components/action-bar/_action-bar.scss +1 -1
  7. package/moj/components/action-bar/_action-bar.scss.map +1 -1
  8. package/moj/components/add-another/_add-another.scss +4 -4
  9. package/moj/components/add-another/_add-another.scss.map +1 -1
  10. package/moj/components/alert/_alert.scss +2 -2
  11. package/moj/components/alert/_alert.scss.map +1 -1
  12. package/moj/components/badge/_badge.scss +17 -7
  13. package/moj/components/badge/_badge.scss.map +1 -1
  14. package/moj/components/banner/_banner.scss +2 -2
  15. package/moj/components/banner/_banner.scss.map +1 -1
  16. package/moj/components/button-menu/_button-menu.scss +1 -1
  17. package/moj/components/button-menu/_button-menu.scss.map +1 -1
  18. package/moj/components/currency-input/_currency-input.scss +1 -1
  19. package/moj/components/currency-input/_currency-input.scss.map +1 -1
  20. package/moj/components/date-picker/_date-picker.scss +2 -1
  21. package/moj/components/date-picker/_date-picker.scss.map +1 -1
  22. package/moj/components/date-picker/date-picker.bundle.js +4 -2
  23. package/moj/components/date-picker/date-picker.bundle.js.map +1 -1
  24. package/moj/components/date-picker/date-picker.bundle.mjs +4 -2
  25. package/moj/components/date-picker/date-picker.bundle.mjs.map +1 -1
  26. package/moj/components/date-picker/date-picker.mjs +4 -2
  27. package/moj/components/date-picker/date-picker.mjs.map +1 -1
  28. package/moj/components/domain-specific/probation/footer/_footer.scss +2 -2
  29. package/moj/components/domain-specific/probation/footer/_footer.scss.map +1 -1
  30. package/moj/components/domain-specific/probation/header/README.md +3 -1
  31. package/moj/components/domain-specific/probation/header/_header.scss +11 -10
  32. package/moj/components/domain-specific/probation/header/_header.scss.map +1 -1
  33. package/moj/components/domain-specific/probation/header/template.njk +2 -2
  34. package/moj/components/filter/_filter.scss +11 -11
  35. package/moj/components/filter/_filter.scss.map +1 -1
  36. package/moj/components/header/_header.scss +4 -0
  37. package/moj/components/header/_header.scss.map +1 -1
  38. package/moj/components/identity-bar/_identity-bar.scss +18 -6
  39. package/moj/components/identity-bar/_identity-bar.scss.map +1 -1
  40. package/moj/components/messages/_messages.scss +3 -3
  41. package/moj/components/messages/_messages.scss.map +1 -1
  42. package/moj/components/pagination/_pagination.scss +8 -105
  43. package/moj/components/pagination/_pagination.scss.map +1 -1
  44. package/moj/components/pagination/template.njk +55 -28
  45. package/moj/components/primary-navigation/_primary-navigation.scss +8 -7
  46. package/moj/components/primary-navigation/_primary-navigation.scss.map +1 -1
  47. package/moj/components/search-toggle/_search-toggle.scss +6 -6
  48. package/moj/components/search-toggle/_search-toggle.scss.map +1 -1
  49. package/moj/components/side-navigation/_side-navigation.scss +16 -16
  50. package/moj/components/side-navigation/_side-navigation.scss.map +1 -1
  51. package/moj/components/sortable-table/_sortable-table.scss +4 -4
  52. package/moj/components/sortable-table/_sortable-table.scss.map +1 -1
  53. package/moj/components/sub-navigation/_sub-navigation.scss +5 -5
  54. package/moj/components/sub-navigation/_sub-navigation.scss.map +1 -1
  55. package/moj/components/tag/_tag.scss +6 -6
  56. package/moj/components/tag/_tag.scss.map +1 -1
  57. package/moj/components/ticket-panel/_ticket-panel.scss +2 -2
  58. package/moj/components/ticket-panel/_ticket-panel.scss.map +1 -1
  59. package/moj/components/timeline/_timeline.scss +3 -3
  60. package/moj/components/timeline/_timeline.scss.map +1 -1
  61. package/moj/core/_moj-frontend-properties.scss +1 -1
  62. package/moj/helpers/_links.scss +1 -1
  63. package/moj/helpers/_links.scss.map +1 -1
  64. package/moj/moj-frontend.min.css +1 -1
  65. package/moj/moj-frontend.min.css.map +1 -1
  66. package/moj/moj-frontend.min.js +1 -1
  67. package/moj/moj-frontend.min.js.map +1 -1
  68. package/moj/objects/_filter-layout.scss +1 -1
  69. package/moj/objects/_filter-layout.scss.map +1 -1
  70. package/moj/objects/_scrollable-pane.scss +4 -0
  71. package/moj/objects/_scrollable-pane.scss.map +1 -1
  72. package/moj/vendor/govuk-frontend/_base.scss +1 -5
  73. package/moj/vendor/govuk-frontend/_base.scss.map +1 -1
  74. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"date-picker.bundle.mjs","sources":["../../../../node_modules/govuk-frontend/dist/govuk/common/index.mjs","../../../../node_modules/govuk-frontend/dist/govuk/errors/index.mjs","../../../../node_modules/govuk-frontend/dist/govuk/component.mjs","../../../../node_modules/govuk-frontend/dist/govuk/common/configuration.mjs","../../../../src/moj/components/date-picker/date-picker.mjs"],"sourcesContent":["function getBreakpoint(name) {\n const property = `--govuk-breakpoint-${name}`;\n const value = window.getComputedStyle(document.documentElement).getPropertyValue(property);\n return {\n property,\n value: value || undefined\n };\n}\nfunction setFocus($element, options = {}) {\n var _options$onBeforeFocu;\n const isFocusable = $element.getAttribute('tabindex');\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1');\n }\n function onFocus() {\n $element.addEventListener('blur', onBlur, {\n once: true\n });\n }\n function onBlur() {\n var _options$onBlur;\n (_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);\n if (!isFocusable) {\n $element.removeAttribute('tabindex');\n }\n }\n $element.addEventListener('focus', onFocus, {\n once: true\n });\n (_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);\n $element.focus();\n}\nfunction isInitialised($root, moduleName) {\n return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);\n}\n\n/**\n * Checks if GOV.UK Frontend is supported on this page\n *\n * Some browsers will load and run our JavaScript but GOV.UK Frontend\n * won't be supported.\n *\n * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support\n * @returns {boolean} Whether GOV.UK Frontend is supported on this page\n */\nfunction isSupported($scope = document.body) {\n if (!$scope) {\n return false;\n }\n return $scope.classList.contains('govuk-frontend-supported');\n}\nfunction isArray(option) {\n return Array.isArray(option);\n}\nfunction isObject(option) {\n return !!option && typeof option === 'object' && !isArray(option);\n}\nfunction isScope($scope) {\n return !!$scope && ($scope instanceof Element || $scope instanceof Document);\n}\nfunction formatErrorMessage(Component, message) {\n return `${Component.moduleName}: ${message}`;\n}\n/**\n * @typedef ComponentWithModuleName\n * @property {string} moduleName - Name of the component\n */\n\nexport { formatErrorMessage, getBreakpoint, isInitialised, isObject, isScope, isSupported, setFocus };\n//# sourceMappingURL=index.mjs.map\n","import { isObject, formatErrorMessage } from '../common/index.mjs';\n\nclass GOVUKFrontendError extends Error {\n constructor(...args) {\n super(...args);\n this.name = 'GOVUKFrontendError';\n }\n}\nclass SupportError extends GOVUKFrontendError {\n /**\n * Checks if GOV.UK Frontend is supported on this page\n *\n * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support\n */\n constructor($scope = document.body) {\n const supportMessage = 'noModule' in HTMLScriptElement.prototype ? 'GOV.UK Frontend initialised without `<body class=\"govuk-frontend-supported\">` from template `<script>` snippet' : 'GOV.UK Frontend is not supported in this browser';\n super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type=\"module\">`');\n this.name = 'SupportError';\n }\n}\nclass ConfigError extends GOVUKFrontendError {\n constructor(...args) {\n super(...args);\n this.name = 'ConfigError';\n }\n}\nclass ElementError extends GOVUKFrontendError {\n constructor(messageOrOptions) {\n let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';\n if (isObject(messageOrOptions)) {\n const {\n component,\n identifier,\n element,\n expectedType\n } = messageOrOptions;\n message = identifier;\n message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';\n if (component) {\n message = formatErrorMessage(component, message);\n }\n }\n super(message);\n this.name = 'ElementError';\n }\n}\nclass InitError extends GOVUKFrontendError {\n constructor(componentOrMessage) {\n const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\\`$root\\`) already initialised`);\n super(message);\n this.name = 'InitError';\n }\n}\n/**\n * @import { ComponentWithModuleName } from '../common/index.mjs'\n */\n\nexport { ConfigError, ElementError, GOVUKFrontendError, InitError, SupportError };\n//# sourceMappingURL=index.mjs.map\n","import { isInitialised, isSupported } from './common/index.mjs';\nimport { InitError, ElementError, SupportError } from './errors/index.mjs';\n\nclass Component {\n /**\n * Returns the root element of the component\n *\n * @protected\n * @returns {RootElementType} - the root element of component\n */\n get $root() {\n return this._$root;\n }\n constructor($root) {\n this._$root = void 0;\n const childConstructor = this.constructor;\n if (typeof childConstructor.moduleName !== 'string') {\n throw new InitError(`\\`moduleName\\` not defined in component`);\n }\n if (!($root instanceof childConstructor.elementType)) {\n throw new ElementError({\n element: $root,\n component: childConstructor,\n identifier: 'Root element (`$root`)',\n expectedType: childConstructor.elementType.name\n });\n } else {\n this._$root = $root;\n }\n childConstructor.checkSupport();\n this.checkInitialised();\n const moduleName = childConstructor.moduleName;\n this.$root.setAttribute(`data-${moduleName}-init`, '');\n }\n checkInitialised() {\n const constructor = this.constructor;\n const moduleName = constructor.moduleName;\n if (moduleName && isInitialised(this.$root, moduleName)) {\n throw new InitError(constructor);\n }\n }\n static checkSupport() {\n if (!isSupported()) {\n throw new SupportError();\n }\n }\n}\n\n/**\n * @typedef ChildClass\n * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component\n */\n\n/**\n * @typedef {typeof Component & ChildClass} ChildClassConstructor\n */\nComponent.elementType = HTMLElement;\n\nexport { Component };\n//# sourceMappingURL=component.mjs.map\n","import { Component } from '../component.mjs';\nimport { ConfigError } from '../errors/index.mjs';\nimport { isObject, formatErrorMessage, isScope } from './index.mjs';\n\nconst configOverride = Symbol.for('configOverride');\nclass ConfigurableComponent extends Component {\n [configOverride](param) {\n return {};\n }\n\n /**\n * Returns the root element of the component\n *\n * @protected\n * @returns {ConfigurationType} - the root element of component\n */\n get config() {\n return this._config;\n }\n constructor($root, config) {\n super($root);\n this._config = void 0;\n const childConstructor = this.constructor;\n if (!isObject(childConstructor.defaults)) {\n throw new ConfigError(formatErrorMessage(childConstructor, 'Config passed as parameter into constructor but no defaults defined'));\n }\n const datasetConfig = normaliseDataset(childConstructor, this._$root.dataset);\n this._config = mergeConfigs(childConstructor.defaults, config != null ? config : {}, this[configOverride](datasetConfig), datasetConfig);\n }\n}\nfunction normaliseString(value, property) {\n const trimmedValue = value ? value.trim() : '';\n let output;\n let outputType = property == null ? void 0 : property.type;\n if (!outputType) {\n if (['true', 'false'].includes(trimmedValue)) {\n outputType = 'boolean';\n }\n if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {\n outputType = 'number';\n }\n }\n switch (outputType) {\n case 'boolean':\n output = trimmedValue === 'true';\n break;\n case 'number':\n output = Number(trimmedValue);\n break;\n default:\n output = value;\n }\n return output;\n}\nfunction normaliseDataset(Component, dataset) {\n if (!isObject(Component.schema)) {\n throw new ConfigError(formatErrorMessage(Component, 'Config passed as parameter into constructor but no schema defined'));\n }\n const out = {};\n const entries = Object.entries(Component.schema.properties);\n for (const entry of entries) {\n const [namespace, property] = entry;\n const field = namespace.toString();\n if (field in dataset) {\n out[field] = normaliseString(dataset[field], property);\n }\n if ((property == null ? void 0 : property.type) === 'object') {\n out[field] = extractConfigByNamespace(Component.schema, dataset, namespace);\n }\n }\n return out;\n}\nfunction normaliseOptions(scopeOrOptions) {\n let $scope = document;\n let onError;\n if (isObject(scopeOrOptions)) {\n const options = scopeOrOptions;\n if (isScope(options.scope) || options.scope === null) {\n $scope = options.scope;\n }\n if (typeof options.onError === 'function') {\n onError = options.onError;\n }\n }\n if (isScope(scopeOrOptions)) {\n $scope = scopeOrOptions;\n } else if (scopeOrOptions === null) {\n $scope = null;\n } else if (typeof scopeOrOptions === 'function') {\n onError = scopeOrOptions;\n }\n return {\n scope: $scope,\n onError\n };\n}\nfunction mergeConfigs(...configObjects) {\n const formattedConfigObject = {};\n for (const configObject of configObjects) {\n for (const key of Object.keys(configObject)) {\n const option = formattedConfigObject[key];\n const override = configObject[key];\n if (isObject(option) && isObject(override)) {\n formattedConfigObject[key] = mergeConfigs(option, override);\n } else {\n formattedConfigObject[key] = override;\n }\n }\n }\n return formattedConfigObject;\n}\nfunction validateConfig(schema, config) {\n const validationErrors = [];\n for (const [name, conditions] of Object.entries(schema)) {\n const errors = [];\n if (Array.isArray(conditions)) {\n for (const {\n required,\n errorMessage\n } of conditions) {\n if (!required.every(key => !!config[key])) {\n errors.push(errorMessage);\n }\n }\n if (name === 'anyOf' && !(conditions.length - errors.length >= 1)) {\n validationErrors.push(...errors);\n }\n }\n }\n return validationErrors;\n}\nfunction extractConfigByNamespace(schema, dataset, namespace) {\n const property = schema.properties[namespace];\n if ((property == null ? void 0 : property.type) !== 'object') {\n return;\n }\n const newObject = {\n [namespace]: {}\n };\n for (const [key, value] of Object.entries(dataset)) {\n let current = newObject;\n const keyParts = key.split('.');\n for (const [index, name] of keyParts.entries()) {\n if (isObject(current)) {\n if (index < keyParts.length - 1) {\n if (!isObject(current[name])) {\n current[name] = {};\n }\n current = current[name];\n } else if (key !== namespace) {\n current[name] = normaliseString(value);\n }\n }\n }\n }\n return newObject[namespace];\n}\n/**\n * Schema for component config\n *\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType\n * @typedef {object} Schema\n * @property {Record<keyof ConfigurationType, SchemaProperty | undefined>} properties - Schema properties\n * @property {SchemaCondition<ConfigurationType>[]} [anyOf] - List of schema conditions\n */\n/**\n * Schema property for component config\n *\n * @typedef {object} SchemaProperty\n * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type\n */\n/**\n * Schema condition for component config\n *\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType\n * @typedef {object} SchemaCondition\n * @property {(keyof ConfigurationType)[]} required - List of required config fields\n * @property {string} errorMessage - Error message when required config fields not provided\n */\n/**\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]\n * @typedef ChildClass\n * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component\n * @property {Schema<ConfigurationType>} [schema] - The schema of the component configuration\n * @property {ConfigurationType} [defaults] - The default values of the configuration of the component\n */\n/**\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]\n * @typedef {typeof Component & ChildClass<ConfigurationType>} ChildClassConstructor<ConfigurationType>\n */\n/**\n * @import { CompatibleClass, Config, CreateAllOptions, OnErrorCallback } from '../init.mjs'\n */\n\nexport { ConfigurableComponent, configOverride, extractConfigByNamespace, mergeConfigs, normaliseDataset, normaliseOptions, normaliseString, validateConfig };\n//# sourceMappingURL=configuration.mjs.map\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<DatePickerConfig>}\n */\nexport class DatePicker extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for date picker\n * @param {DatePickerConfig} [config] - Date picker config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $input =\n this.config.input.element ??\n this.$root.querySelector(this.config.input.selector)\n\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\n\n this.dayLabels = [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday'\n ]\n\n this.monthLabels = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n\n this.currentDate = new Date()\n this.currentDate.setHours(0, 0, 0, 0)\n this.calendarDays = /** @type {DSCalendarDay[]} */ ([])\n this.excludedDates = /** @type {Date[]} */ ([])\n this.excludedDays = /** @type {number[]} */ ([])\n\n this.buttonClass = 'moj-datepicker__button'\n this.selectedDayButtonClass = 'moj-datepicker__button--selected'\n this.currentDayButtonClass = 'moj-datepicker__button--current'\n this.todayButtonClass = 'moj-datepicker__button--today'\n\n this.setOptions()\n this.initControls()\n }\n\n initControls() {\n this.id = `datepicker-${this.$input.id}`\n\n this.$dialog = this.createDialog()\n this.createCalendarHeaders()\n\n const $componentWrapper = document.createElement('div')\n const $inputWrapper = document.createElement('div')\n $componentWrapper.classList.add('moj-datepicker__wrapper')\n $inputWrapper.classList.add('govuk-input__wrapper')\n\n this.$input.parentElement.insertBefore($componentWrapper, this.$input)\n $componentWrapper.appendChild($inputWrapper)\n $inputWrapper.appendChild(this.$input)\n\n $inputWrapper.insertAdjacentHTML('beforeend', this.toggleTemplate())\n $componentWrapper.insertAdjacentElement('beforeend', this.$dialog)\n\n this.$calendarButton = /** @type {HTMLButtonElement} */ (\n this.$root.querySelector('.moj-js-datepicker-toggle')\n )\n\n this.$dialogTitle = /** @type {HTMLHeadingElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-month-year')\n )\n\n this.createCalendar()\n\n this.$prevMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-month')\n )\n\n this.$prevYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-year')\n )\n\n this.$nextMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-month')\n )\n\n this.$nextYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-year')\n )\n\n this.$cancelButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-cancel')\n )\n\n this.$okButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-ok')\n )\n\n // add event listeners\n this.$prevMonthButton.addEventListener('click', (event) =>\n this.focusPreviousMonth(event, false)\n )\n this.$prevYearButton.addEventListener('click', (event) =>\n this.focusPreviousYear(event, false)\n )\n this.$nextMonthButton.addEventListener('click', (event) =>\n this.focusNextMonth(event, false)\n )\n this.$nextYearButton.addEventListener('click', (event) =>\n this.focusNextYear(event, false)\n )\n this.$cancelButton.addEventListener('click', (event) => {\n event.preventDefault()\n this.closeDialog()\n })\n this.$okButton.addEventListener('click', () => {\n this.selectDate(this.currentDate)\n })\n\n const $dialogButtons = this.$dialog.querySelectorAll(\n 'button:not([disabled=\"true\"])'\n )\n\n this.$firstButtonInDialog = $dialogButtons[0]\n this.$lastButtonInDialog = $dialogButtons[$dialogButtons.length - 1]\n this.$firstButtonInDialog.addEventListener('keydown', (event) =>\n this.firstButtonKeydown(event)\n )\n this.$lastButtonInDialog.addEventListener('keydown', (event) =>\n this.lastButtonKeydown(event)\n )\n\n this.$calendarButton.addEventListener('click', (event) =>\n this.toggleDialog(event)\n )\n\n this.$dialog.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') {\n this.closeDialog()\n event.preventDefault()\n event.stopPropagation()\n }\n })\n\n document.body.addEventListener('mouseup', (event) => {\n this.backgroundClick(event)\n })\n\n // populates calendar with initial dates, avoids Wave errors about null buttons\n this.updateCalendar()\n }\n\n createDialog() {\n const titleId = `datepicker-title-${this.$input.id}`\n const $dialog = document.createElement('div')\n\n $dialog.id = this.id\n $dialog.setAttribute('class', 'moj-datepicker__dialog')\n $dialog.setAttribute('role', 'dialog')\n $dialog.setAttribute('aria-modal', 'true')\n $dialog.setAttribute('aria-labelledby', titleId)\n $dialog.innerHTML = this.dialogTemplate(titleId)\n $dialog.hidden = true\n\n return $dialog\n }\n\n createCalendar() {\n const $tbody = this.$dialog.querySelector('tbody')\n let dayCount = 0\n for (let i = 0; i < 6; i++) {\n // create row\n const $row = $tbody.insertRow(i)\n\n for (let j = 0; j < 7; j++) {\n // create cell (day)\n const $cell = document.createElement('td')\n $row.appendChild($cell)\n const $dateButton = document.createElement('button')\n $dateButton.setAttribute('type', 'button')\n $cell.appendChild($dateButton)\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 type=\"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 type=\"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 type=\"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 type=\"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=\"application\" 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\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\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 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(Number(year), Number(month) - 1, Number(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 // move current date to the closest selectable date if it is out of range\n if (this.minDate && this.minDate > this.inputDate) {\n this.inputDate = new Date(this.minDate.getTime())\n }\n if (this.maxDate && this.maxDate < this.inputDate) {\n this.inputDate = new Date(this.maxDate.getTime())\n }\n if (this.minDate && this.maxDate && this.minDate > this.maxDate) {\n console.error('min date is after max date. No dates will be selectable')\n }\n\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 this.date = new Date()\n this.$button.addEventListener('keydown', this.keyPress.bind(this))\n this.$button.addEventListener('click', this.click.bind(this))\n }\n\n /**\n * @param {Date} day - the Date for the calendar day\n * @param {boolean} hidden - visibility of the day\n * @param {boolean} disabled - is the day selectable or excluded\n */\n update(day, hidden, disabled) {\n const label = day.getDate()\n let accessibleLabel = this.picker.formattedDateHuman(day)\n\n if (disabled) {\n this.$button.setAttribute('aria-disabled', 'true')\n accessibleLabel = `Excluded date, ${accessibleLabel}`\n } else {\n this.$button.removeAttribute('aria-disabled')\n }\n\n if (hidden) {\n this.$button.style.display = 'none'\n } else {\n this.$button.style.display = 'block'\n }\n this.$button.setAttribute(\n 'data-testid',\n this.picker.formattedDateFromDate(day)\n )\n\n this.$button.innerHTML = `<span class=\"govuk-visually-hidden\">${accessibleLabel}</span><span aria-hidden=\"true\">${label}</span>`\n this.date = new Date(day)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n click(event) {\n this.picker.goToDate(this.date)\n this.picker.selectDate(this.date)\n\n event.stopPropagation()\n event.preventDefault()\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n keyPress(event) {\n let calendarNavKey = true\n\n switch (event.key) {\n case 'ArrowLeft':\n this.picker.focusPreviousDay()\n break\n case 'ArrowRight':\n this.picker.focusNextDay()\n break\n case 'ArrowUp':\n this.picker.focusPreviousWeek()\n break\n case 'ArrowDown':\n this.picker.focusNextWeek()\n break\n case 'Home':\n this.picker.focusFirstDayOfWeek()\n break\n case 'End':\n this.picker.focusLastDayOfWeek()\n break\n case 'PageUp': {\n if (event.shiftKey) {\n this.picker.focusPreviousYear(event)\n } else {\n this.picker.focusPreviousMonth(event)\n }\n break\n }\n case 'PageDown': {\n if (event.shiftKey) {\n this.picker.focusNextYear(event)\n } else {\n this.picker.focusNextMonth(event)\n }\n break\n }\n default:\n calendarNavKey = false\n break\n }\n\n if (calendarNavKey) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n}\n\n/**\n * Date picker config\n *\n * @typedef {object} DatePickerConfig\n * @property {string} [excludedDates] - Dates that cannot be selected\n * @property {string} [excludedDays] - Days that cannot be selected\n * @property {boolean} [leadingZeros] - Whether to add leading zeroes when populating the field\n * @property {string} [minDate] - The earliest available date\n * @property {string} [maxDate] - The latest available date\n * @property {string} [weekStartDay] - First day of the week in calendar view\n * @property {object} [input] - Input config\n * @property {string} [input.selector] - Selector for the input element\n * @property {Element | null} [input.element] - HTML element for the input\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n"],"names":["isInitialised","$root","moduleName","HTMLElement","hasAttribute","isSupported","$scope","document","body","classList","contains","isArray","option","Array","isObject","formatErrorMessage","Component","message","GOVUKFrontendError","Error","constructor","args","name","SupportError","supportMessage","HTMLScriptElement","prototype","ConfigError","ElementError","messageOrOptions","component","identifier","element","expectedType","InitError","componentOrMessage","_$root","childConstructor","elementType","checkSupport","checkInitialised","setAttribute","configOverride","Symbol","for","ConfigurableComponent","param","config","_config","defaults","datasetConfig","normaliseDataset","dataset","mergeConfigs","normaliseString","value","property","trimmedValue","trim","output","outputType","type","includes","length","isFinite","Number","schema","out","entries","Object","properties","entry","namespace","field","toString","extractConfigByNamespace","configObjects","formattedConfigObject","configObject","key","keys","override","newObject","current","keyParts","split","index","DatePicker","_this$config$input$el","$input","input","querySelector","selector","HTMLInputElement","dayLabels","monthLabels","currentDate","Date","setHours","calendarDays","excludedDates","excludedDays","buttonClass","selectedDayButtonClass","currentDayButtonClass","todayButtonClass","setOptions","initControls","id","$dialog","createDialog","createCalendarHeaders","$componentWrapper","createElement","$inputWrapper","add","parentElement","insertBefore","appendChild","insertAdjacentHTML","toggleTemplate","insertAdjacentElement","$calendarButton","$dialogTitle","createCalendar","$prevMonthButton","$prevYearButton","$nextMonthButton","$nextYearButton","$cancelButton","$okButton","addEventListener","event","focusPreviousMonth","focusPreviousYear","focusNextMonth","focusNextYear","preventDefault","closeDialog","selectDate","$dialogButtons","querySelectorAll","$firstButtonInDialog","$lastButtonInDialog","firstButtonKeydown","lastButtonKeydown","toggleDialog","stopPropagation","backgroundClick","updateCalendar","titleId","innerHTML","dialogTemplate","hidden","$tbody","dayCount","i","$row","insertRow","j","$cell","$dateButton","calendarDay","DSCalendarDay","push","forEach","day","html","substring","$headerRow","leadingZeros","ret","setMinAndMaxDatesOnCalendar","setExcludedDates","setExcludedDays","setWeekStartDay","minDate","formattedDateFromString","maxDate","replace","map","item","parseDateRangeString","reduce","dates","items","concat","filter","date","datestring","startDate","endDate","d","getTime","setDate","getDate","weekDays","toLowerCase","weekStartDay","unshift","pop","indexOf","weekStartDayParam","isExcludedDate","excludedDate","toDateString","getDay","dateString","fallback","formattedDate","dateFormatPattern","test","match","exec","month","year","formattedDateFromDate","getMonth","getFullYear","formattedDateHuman","isOpen","target","Node","shiftKey","focus","firstOfMonth","dayOfWeek","thisDay","disabled","update","setCurrentDate","$button","remove","calendarDayDate","today","inputDate","removeAttribute","enabledDays","window","getComputedStyle","display","innerText","changeEvent","Event","bubbles","cancelable","dispatchEvent","openDialog","offsetWidth","style","right","top","offsetHeight","console","error","goToDate","focusNextDay","focusPreviousDay","focusNextWeek","focusPreviousWeek","focusFirstDayOfWeek","firstDayOfWeekIndex","diff","focusLastDayOfWeek","lastDayOfWeekIndex","setMonth","setFullYear","freeze","row","column","picker","keyPress","bind","click","label","accessibleLabel","calendarNavKey"],"mappings":"AAmFO,SAASA,aAAaA,CAACC,KAAK,EAAEC,UAAU,EAAE;EAC/C,OACED,KAAK,YAAYE,WAAW,IAC5BF,KAAK,CAACG,YAAY,CAAC,CAAA,KAAA,EAAQF,UAAU,CAAA,KAAA,CAAO,CAAC;AAEjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,WAAWA,CAACC,MAAM,GAAGC,QAAQ,CAACC,IAAI,EAAE;EAClD,IAAI,CAACF,MAAM,EAAE;AACX,IAAA,OAAO,KAAK;AACd,EAAA;AAEA,EAAA,OAAOA,MAAM,CAACG,SAAS,CAACC,QAAQ,CAAC,0BAA0B,CAAC;AAC9D;AASA,SAASC,OAAOA,CAACC,MAAM,EAAE;AACvB,EAAA,OAAOC,KAAK,CAACF,OAAO,CAACC,MAAM,CAAC;AAC9B;AAUO,SAASE,QAAQA,CAACF,MAAM,EAAE;AAC/B,EAAA,OAAO,CAAC,CAACA,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAI,CAACD,OAAO,CAACC,MAAM,CAAC;AACnE;AAsBO,SAASG,kBAAkBA,CAACC,SAAS,EAAEC,OAAO,EAAE;AACrD,EAAA,OAAO,GAAGD,SAAS,CAACd,UAAU,CAAA,EAAA,EAAKe,OAAO,CAAA,CAAE;AAC9C;;AClIO,MAAMC,kBAAkB,SAASC,KAAK,CAAC;AAAAC,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA;IAAA,IAAA,CAC5CC,IAAI,GAAG,oBAAoB;AAAA,EAAA;AAC7B;AAKO,MAAMC,YAAY,SAASL,kBAAkB,CAAC;AAGnD;AACF;AACA;AACA;AACA;AACEE,EAAAA,WAAWA,CAACd,MAAM,GAAGC,QAAQ,CAACC,IAAI,EAAE;IAClC,MAAMgB,cAAc,GAClB,UAAU,IAAIC,iBAAiB,CAACC,SAAS,GACrC,gHAAgH,GAChH,kDAAkD;AAExD,IAAA,KAAK,CACHpB,MAAM,GACFkB,cAAc,GACd,8DACN,CAAC;IAAA,IAAA,CAjBHF,IAAI,GAAG,cAAc;AAkBrB,EAAA;AACF;AAKO,MAAMK,WAAW,SAAST,kBAAkB,CAAC;AAAAE,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA;IAAA,IAAA,CAClDC,IAAI,GAAG,aAAa;AAAA,EAAA;AACtB;AAKO,MAAMM,YAAY,SAASV,kBAAkB,CAAC;EAmBnDE,WAAWA,CAACS,gBAAgB,EAAE;IAC5B,IAAIZ,OAAO,GAAG,OAAOY,gBAAgB,KAAK,QAAQ,GAAGA,gBAAgB,GAAG,EAAE;AAG1E,IAAA,IAAIf,QAAQ,CAACe,gBAAgB,CAAC,EAAE;MAC9B,MAAM;QAAEC,SAAS;QAAEC,UAAU;QAAEC,OAAO;AAAEC,QAAAA;AAAa,OAAC,GAAGJ,gBAAgB;AAEzEZ,MAAAA,OAAO,GAAGc,UAAU;MAGpBd,OAAO,IAAIe,OAAO,GACd,CAAA,gBAAA,EAAmBC,YAAY,IAAA,IAAA,GAAZA,YAAY,GAAI,aAAa,CAAA,CAAE,GAClD,YAAY;AAGhB,MAAA,IAAIH,SAAS,EAAE;AACbb,QAAAA,OAAO,GAAGF,kBAAkB,CAACe,SAAS,EAAEb,OAAO,CAAC;AAClD,MAAA;AACF,IAAA;IAEA,KAAK,CAACA,OAAO,CAAC;IAAA,IAAA,CAtChBK,IAAI,GAAG,cAAc;AAuCrB,EAAA;AACF;AAKO,MAAMY,SAAS,SAAShB,kBAAkB,CAAC;EAOhDE,WAAWA,CAACe,kBAAkB,EAAE;AAC9B,IAAA,MAAMlB,OAAO,GACX,OAAOkB,kBAAkB,KAAK,QAAQ,GAClCA,kBAAkB,GAClBpB,kBAAkB,CAChBoB,kBAAkB,EAClB,8CACF,CAAC;IAEP,KAAK,CAAClB,OAAO,CAAC;IAAA,IAAA,CAfhBK,IAAI,GAAG,WAAW;AAgBlB,EAAA;AACF;;AClHO,MAAMN,SAAS,CAAC;AASrB;AACF;AACA;AACA;AACA;AACA;EACE,IAAIf,KAAKA,GAAG;IACV,OAAO,IAAI,CAACmC,MAAM;AACpB,EAAA;EAcAhB,WAAWA,CAACnB,KAAK,EAAE;AAAA,IAAA,IAAA,CARnBmC,MAAM,GAAA,MAAA;AASJ,IAAA,MAAMC,gBAAgB,GACpB,IAAI,CAACjB,WACN;AASD,IAAA,IAAI,OAAOiB,gBAAgB,CAACnC,UAAU,KAAK,QAAQ,EAAE;AACnD,MAAA,MAAM,IAAIgC,SAAS,CAAC,CAAA,uCAAA,CAAyC,CAAC;AAChE,IAAA;AAEA,IAAA,IAAI,EAAEjC,KAAK,YAAYoC,gBAAgB,CAACC,WAAW,CAAC,EAAE;MACpD,MAAM,IAAIV,YAAY,CAAC;AACrBI,QAAAA,OAAO,EAAE/B,KAAK;AACd6B,QAAAA,SAAS,EAAEO,gBAAgB;AAC3BN,QAAAA,UAAU,EAAE,wBAAwB;AACpCE,QAAAA,YAAY,EAAEI,gBAAgB,CAACC,WAAW,CAAChB;AAC7C,OAAC,CAAC;AACJ,IAAA,CAAC,MAAM;MACL,IAAI,CAACc,MAAM,GAAmCnC,KAAM;AACtD,IAAA;IAEAoC,gBAAgB,CAACE,YAAY,EAAE;IAE/B,IAAI,CAACC,gBAAgB,EAAE;AAEvB,IAAA,MAAMtC,UAAU,GAAGmC,gBAAgB,CAACnC,UAAU;IAE9C,IAAI,CAACD,KAAK,CAACwC,YAAY,CAAC,QAAQvC,UAAU,CAAA,KAAA,CAAO,EAAE,EAAE,CAAC;AACxD,EAAA;AAQAsC,EAAAA,gBAAgBA,GAAG;AACjB,IAAA,MAAMpB,WAAW,GAAyC,IAAI,CAACA,WAAY;AAC3E,IAAA,MAAMlB,UAAU,GAAGkB,WAAW,CAAClB,UAAU;IAEzC,IAAIA,UAAU,IAAIF,aAAa,CAAC,IAAI,CAACC,KAAK,EAAEC,UAAU,CAAC,EAAE;AACvD,MAAA,MAAM,IAAIgC,SAAS,CAACd,WAAW,CAAC;AAClC,IAAA;AACF,EAAA;EAOA,OAAOmB,YAAYA,GAAG;IACpB,IAAI,CAAClC,WAAW,EAAE,EAAE;MAClB,MAAM,IAAIkB,YAAY,EAAE;AAC1B,IAAA;AACF,EAAA;AACF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AArGaP,SAAS,CAIbsB,WAAW,GAAGnC,WAAW;;ACV3B,MAAMuC,cAAc,GAAGC,MAAM,CAACC,GAAG,CAAC,gBAAgB,CAAA;AAYlD,MAAMC,qBAAqB,SAAS7B,SAAS,CAAC;EAkBnD,CAAC0B,cAAc,CAAA,CAAEI,KAAK,EAAE;AACtB,IAAA,OAAO,EAAE;AACX,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACE,IAAIC,MAAMA,GAAG;IACX,OAAO,IAAI,CAACC,OAAO;AACrB,EAAA;AAeA5B,EAAAA,WAAWA,CAACnB,KAAK,EAAE8C,MAAM,EAAE;IACzB,KAAK,CAAC9C,KAAK,CAAC;AAAA,IAAA,IAAA,CAVd+C,OAAO,GAAA,MAAA;AAYL,IAAA,MAAMX,gBAAgB,GACqC,IAAI,CAACjB,WAAY;AAE5E,IAAA,IAAI,CAACN,QAAQ,CAACuB,gBAAgB,CAACY,QAAQ,CAAC,EAAE;MACxC,MAAM,IAAItB,WAAW,CACnBZ,kBAAkB,CAChBsB,gBAAgB,EAChB,qEACF,CACF,CAAC;AACH,IAAA;IAEA,MAAMa,aAAa,GACjBC,gBAAgB,CAACd,gBAAgB,EAAE,IAAI,CAACD,MAAM,CAACgB,OAAO,CACvD;IAED,IAAI,CAACJ,OAAO,GACVK,YAAY,CACVhB,gBAAgB,CAACY,QAAQ,EACzBF,MAAM,IAAA,IAAA,GAANA,MAAM,GAAI,EAAE,EACZ,IAAI,CAACL,cAAc,CAAC,CAACQ,aAAa,CAAC,EACnCA,aACF,CACD;AACH,EAAA;AACF;AAkBO,SAASI,eAAeA,CAACC,KAAK,EAAEC,QAAQ,EAAE;EAC/C,MAAMC,YAAY,GAAGF,KAAK,GAAGA,KAAK,CAACG,IAAI,EAAE,GAAG,EAAE;AAE9C,EAAA,IAAIC,MAAM;AACV,EAAA,IAAIC,UAAU,GAAGJ,QAAQ,IAAA,IAAA,GAAA,MAAA,GAARA,QAAQ,CAAEK,IAAI;EAG/B,IAAI,CAACD,UAAU,EAAE;IACf,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAACE,QAAQ,CAACL,YAAY,CAAC,EAAE;AAC5CG,MAAAA,UAAU,GAAG,SAAS;AACxB,IAAA;AAIA,IAAA,IAAIH,YAAY,CAACM,MAAM,GAAG,CAAC,IAAIC,QAAQ,CAACC,MAAM,CAACR,YAAY,CAAC,CAAC,EAAE;AAC7DG,MAAAA,UAAU,GAAG,QAAQ;AACvB,IAAA;AACF,EAAA;AAEA,EAAA,QAAQA,UAAU;AAChB,IAAA,KAAK,SAAS;MACZD,MAAM,GAAGF,YAAY,KAAK,MAAM;AAChC,MAAA;AAEF,IAAA,KAAK,QAAQ;AACXE,MAAAA,MAAM,GAAGM,MAAM,CAACR,YAAY,CAAC;AAC7B,MAAA;AAEF,IAAA;AACEE,MAAAA,MAAM,GAAGJ,KAAK;AAClB;AAEA,EAAA,OAAOI,MAAM;AACf;AAeO,SAASR,gBAAgBA,CAACnC,SAAS,EAAEoC,OAAO,EAAE;AACnD,EAAA,IAAI,CAACtC,QAAQ,CAACE,SAAS,CAACkD,MAAM,CAAC,EAAE;IAC/B,MAAM,IAAIvC,WAAW,CACnBZ,kBAAkB,CAChBC,SAAS,EACT,mEACF,CACF,CAAC;AACH,EAAA;EAEA,MAAMmD,GAAG,GAAgC,EAAG;EAC5C,MAAMC,OAAO,GACXC,MAAM,CAACD,OAAO,CAACpD,SAAS,CAACkD,MAAM,CAACI,UAAU,CAC3C;AAGD,EAAA,KAAK,MAAMC,KAAK,IAAIH,OAAO,EAAE;AAC3B,IAAA,MAAM,CAACI,SAAS,EAAEhB,QAAQ,CAAC,GAAGe,KAAK;AAGnC,IAAA,MAAME,KAAK,GAAGD,SAAS,CAACE,QAAQ,EAAE;IAElC,IAAID,KAAK,IAAIrB,OAAO,EAAE;AACpBe,MAAAA,GAAG,CAACM,KAAK,CAAC,GAAGnB,eAAe,CAACF,OAAO,CAACqB,KAAK,CAAC,EAAEjB,QAAQ,CAAC;AACxD,IAAA;IAMA,IAAI,CAAAA,QAAQ,IAAA,IAAA,GAAA,MAAA,GAARA,QAAQ,CAAEK,IAAI,MAAK,QAAQ,EAAE;AAC/BM,MAAAA,GAAG,CAACM,KAAK,CAAC,GAAGE,wBAAwB,CACnC3D,SAAS,CAACkD,MAAM,EAChBd,OAAO,EACPoB,SACF,CAAC;AACH,IAAA;AACF,EAAA;AAEA,EAAA,OAAOL,GAAG;AACZ;AAqDO,SAASd,YAAYA,CAAC,GAAGuB,aAAa,EAAE;EAG7C,MAAMC,qBAAqB,GAAG,EAAE;AAGhC,EAAA,KAAK,MAAMC,YAAY,IAAIF,aAAa,EAAE;IACxC,KAAK,MAAMG,GAAG,IAAIV,MAAM,CAACW,IAAI,CAACF,YAAY,CAAC,EAAE;AAC3C,MAAA,MAAMlE,MAAM,GAAGiE,qBAAqB,CAACE,GAAG,CAAC;AACzC,MAAA,MAAME,QAAQ,GAAGH,YAAY,CAACC,GAAG,CAAC;MAKlC,IAAIjE,QAAQ,CAACF,MAAM,CAAC,IAAIE,QAAQ,CAACmE,QAAQ,CAAC,EAAE;QAC1CJ,qBAAqB,CAACE,GAAG,CAAC,GAAG1B,YAAY,CAACzC,MAAM,EAAEqE,QAAQ,CAAC;AAC7D,MAAA,CAAC,MAAM;AAELJ,QAAAA,qBAAqB,CAACE,GAAG,CAAC,GAAGE,QAAQ;AACvC,MAAA;AACF,IAAA;AACF,EAAA;AAEA,EAAA,OAAOJ,qBAAqB;AAC9B;AAoDO,SAASF,wBAAwBA,CAACT,MAAM,EAAEd,OAAO,EAAEoB,SAAS,EAAE;AACnE,EAAA,MAAMhB,QAAQ,GAAGU,MAAM,CAACI,UAAU,CAACE,SAAS,CAAC;EAG7C,IAAI,CAAAhB,QAAQ,IAAA,IAAA,GAAA,MAAA,GAARA,QAAQ,CAAEK,IAAI,MAAK,QAAQ,EAAE;AAC/B,IAAA;AACF,EAAA;AAGA,EAAA,MAAMqB,SAAS,GAA0D;AACvE,IAAA,CAACV,SAAS,GAAG;AACb,GAAA;AAEF,EAAA,KAAK,MAAM,CAACO,GAAG,EAAExB,KAAK,CAAC,IAAIc,MAAM,CAACD,OAAO,CAAChB,OAAO,CAAC,EAAE;IAElD,IAAI+B,OAAO,GAAGD,SAAS;AAGvB,IAAA,MAAME,QAAQ,GAAGL,GAAG,CAACM,KAAK,CAAC,GAAG,CAAC;IAQ/B,KAAK,MAAM,CAACC,KAAK,EAAEhE,IAAI,CAAC,IAAI8D,QAAQ,CAAChB,OAAO,EAAE,EAAE;AAC9C,MAAA,IAAItD,QAAQ,CAACqE,OAAO,CAAC,EAAE;AAErB,QAAA,IAAIG,KAAK,GAAGF,QAAQ,CAACrB,MAAM,GAAG,CAAC,EAAE;UAE/B,IAAI,CAACjD,QAAQ,CAACqE,OAAO,CAAC7D,IAAI,CAAC,CAAC,EAAE;AAC5B6D,YAAAA,OAAO,CAAC7D,IAAI,CAAC,GAAG,EAAE;AACpB,UAAA;AAGA6D,UAAAA,OAAO,GAAGA,OAAO,CAAC7D,IAAI,CAAC;AACzB,QAAA,CAAC,MAAM,IAAIyD,GAAG,KAAKP,SAAS,EAAE;AAE5BW,UAAAA,OAAO,CAAC7D,IAAI,CAAC,GAAGgC,eAAe,CAACC,KAAK,CAAC;AACxC,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;EAEA,OAAO2B,SAAS,CAACV,SAAS,CAAC;AAC7B;;ACjXA;AACA;AACA;AACO,MAAMe,UAAU,SAAS1C,qBAAqB,CAAC;AACpD;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACnB,KAAK,EAAE8C,MAAM,GAAG,EAAE,EAAE;AAAA,IAAA,IAAAyC,qBAAA;AAC9B,IAAA,KAAK,CAACvF,KAAK,EAAE8C,MAAM,CAAC;IAEpB,MAAM0C,MAAM,GAAA,CAAAD,qBAAA,GACV,IAAI,CAACzC,MAAM,CAAC2C,KAAK,CAAC1D,OAAO,KAAA,IAAA,GAAAwD,qBAAA,GACzB,IAAI,CAACvF,KAAK,CAAC0F,aAAa,CAAC,IAAI,CAAC5C,MAAM,CAAC2C,KAAK,CAACE,QAAQ,CAAC;IAEtD,IAAI,CAACH,MAAM,IAAI,EAAEA,MAAM,YAAYI,gBAAgB,CAAC,EAAE;AACpD,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAACJ,MAAM,GAAGA,MAAM;AAEpB,IAAA,IAAI,CAACK,SAAS,GAAG,CACf,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,CACT;IAED,IAAI,CAACC,WAAW,GAAG,CACjB,SAAS,EACT,UAAU,EACV,OAAO,EACP,OAAO,EACP,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,CACX;AAED,IAAA,IAAI,CAACC,WAAW,GAAG,IAAIC,IAAI,EAAE;AAC7B,IAAA,IAAI,CAACD,WAAW,CAACE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACrC,IAAA,IAAI,CAACC,YAAY,iCAAmC,EAAG;AACvD,IAAA,IAAI,CAACC,aAAa,wBAA0B,EAAG;AAC/C,IAAA,IAAI,CAACC,YAAY,0BAA4B,EAAG;IAEhD,IAAI,CAACC,WAAW,GAAG,wBAAwB;IAC3C,IAAI,CAACC,sBAAsB,GAAG,kCAAkC;IAChE,IAAI,CAACC,qBAAqB,GAAG,iCAAiC;IAC9D,IAAI,CAACC,gBAAgB,GAAG,+BAA+B;IAEvD,IAAI,CAACC,UAAU,EAAE;IACjB,IAAI,CAACC,YAAY,EAAE;AACrB,EAAA;AAEAA,EAAAA,YAAYA,GAAG;IACb,IAAI,CAACC,EAAE,GAAG,CAAA,WAAA,EAAc,IAAI,CAACnB,MAAM,CAACmB,EAAE,CAAA,CAAE;AAExC,IAAA,IAAI,CAACC,OAAO,GAAG,IAAI,CAACC,YAAY,EAAE;IAClC,IAAI,CAACC,qBAAqB,EAAE;AAE5B,IAAA,MAAMC,iBAAiB,GAAGzG,QAAQ,CAAC0G,aAAa,CAAC,KAAK,CAAC;AACvD,IAAA,MAAMC,aAAa,GAAG3G,QAAQ,CAAC0G,aAAa,CAAC,KAAK,CAAC;AACnDD,IAAAA,iBAAiB,CAACvG,SAAS,CAAC0G,GAAG,CAAC,yBAAyB,CAAC;AAC1DD,IAAAA,aAAa,CAACzG,SAAS,CAAC0G,GAAG,CAAC,sBAAsB,CAAC;AAEnD,IAAA,IAAI,CAAC1B,MAAM,CAAC2B,aAAa,CAACC,YAAY,CAACL,iBAAiB,EAAE,IAAI,CAACvB,MAAM,CAAC;AACtEuB,IAAAA,iBAAiB,CAACM,WAAW,CAACJ,aAAa,CAAC;AAC5CA,IAAAA,aAAa,CAACI,WAAW,CAAC,IAAI,CAAC7B,MAAM,CAAC;IAEtCyB,aAAa,CAACK,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAACC,cAAc,EAAE,CAAC;IACpER,iBAAiB,CAACS,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAACZ,OAAO,CAAC;IAElE,IAAI,CAACa,eAAe;AAClB,IAAA,IAAI,CAACzH,KAAK,CAAC0F,aAAa,CAAC,2BAA2B,CACrD;IAED,IAAI,CAACgC,YAAY;AACf,IAAA,IAAI,CAACd,OAAO,CAAClB,aAAa,CAAC,+BAA+B,CAC3D;IAED,IAAI,CAACiC,cAAc,EAAE;IAErB,IAAI,CAACC,gBAAgB;AACnB,IAAA,IAAI,CAAChB,OAAO,CAAClB,aAAa,CAAC,+BAA+B,CAC3D;IAED,IAAI,CAACmC,eAAe;AAClB,IAAA,IAAI,CAACjB,OAAO,CAAClB,aAAa,CAAC,8BAA8B,CAC1D;IAED,IAAI,CAACoC,gBAAgB;AACnB,IAAA,IAAI,CAAClB,OAAO,CAAClB,aAAa,CAAC,+BAA+B,CAC3D;IAED,IAAI,CAACqC,eAAe;AAClB,IAAA,IAAI,CAACnB,OAAO,CAAClB,aAAa,CAAC,8BAA8B,CAC1D;IAED,IAAI,CAACsC,aAAa;AAChB,IAAA,IAAI,CAACpB,OAAO,CAAClB,aAAa,CAAC,2BAA2B,CACvD;IAED,IAAI,CAACuC,SAAS;AACZ,IAAA,IAAI,CAACrB,OAAO,CAAClB,aAAa,CAAC,uBAAuB,CACnD;;AAED;AACA,IAAA,IAAI,CAACkC,gBAAgB,CAACM,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IACpD,IAAI,CAACC,kBAAkB,CAACD,KAAK,EAAE,KAAK,CACtC,CAAC;AACD,IAAA,IAAI,CAACN,eAAe,CAACK,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IACnD,IAAI,CAACE,iBAAiB,CAACF,KAAK,EAAE,KAAK,CACrC,CAAC;AACD,IAAA,IAAI,CAACL,gBAAgB,CAACI,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IACpD,IAAI,CAACG,cAAc,CAACH,KAAK,EAAE,KAAK,CAClC,CAAC;AACD,IAAA,IAAI,CAACJ,eAAe,CAACG,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IACnD,IAAI,CAACI,aAAa,CAACJ,KAAK,EAAE,KAAK,CACjC,CAAC;IACD,IAAI,CAACH,aAAa,CAACE,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IAAK;MACtDA,KAAK,CAACK,cAAc,EAAE;MACtB,IAAI,CAACC,WAAW,EAAE;AACpB,IAAA,CAAC,CAAC;AACF,IAAA,IAAI,CAACR,SAAS,CAACC,gBAAgB,CAAC,OAAO,EAAE,MAAM;AAC7C,MAAA,IAAI,CAACQ,UAAU,CAAC,IAAI,CAAC3C,WAAW,CAAC;AACnC,IAAA,CAAC,CAAC;IAEF,MAAM4C,cAAc,GAAG,IAAI,CAAC/B,OAAO,CAACgC,gBAAgB,CAClD,+BACF,CAAC;AAED,IAAA,IAAI,CAACC,oBAAoB,GAAGF,cAAc,CAAC,CAAC,CAAC;IAC7C,IAAI,CAACG,mBAAmB,GAAGH,cAAc,CAACA,cAAc,CAAC7E,MAAM,GAAG,CAAC,CAAC;AACpE,IAAA,IAAI,CAAC+E,oBAAoB,CAACX,gBAAgB,CAAC,SAAS,EAAGC,KAAK,IAC1D,IAAI,CAACY,kBAAkB,CAACZ,KAAK,CAC/B,CAAC;AACD,IAAA,IAAI,CAACW,mBAAmB,CAACZ,gBAAgB,CAAC,SAAS,EAAGC,KAAK,IACzD,IAAI,CAACa,iBAAiB,CAACb,KAAK,CAC9B,CAAC;AAED,IAAA,IAAI,CAACV,eAAe,CAACS,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IACnD,IAAI,CAACc,YAAY,CAACd,KAAK,CACzB,CAAC;IAED,IAAI,CAACvB,OAAO,CAACsB,gBAAgB,CAAC,SAAS,EAAGC,KAAK,IAAK;AAClD,MAAA,IAAIA,KAAK,CAACrD,GAAG,KAAK,QAAQ,EAAE;QAC1B,IAAI,CAAC2D,WAAW,EAAE;QAClBN,KAAK,CAACK,cAAc,EAAE;QACtBL,KAAK,CAACe,eAAe,EAAE;AACzB,MAAA;AACF,IAAA,CAAC,CAAC;IAEF5I,QAAQ,CAACC,IAAI,CAAC2H,gBAAgB,CAAC,SAAS,EAAGC,KAAK,IAAK;AACnD,MAAA,IAAI,CAACgB,eAAe,CAAChB,KAAK,CAAC;AAC7B,IAAA,CAAC,CAAC;;AAEF;IACA,IAAI,CAACiB,cAAc,EAAE;AACvB,EAAA;AAEAvC,EAAAA,YAAYA,GAAG;IACb,MAAMwC,OAAO,GAAG,CAAA,iBAAA,EAAoB,IAAI,CAAC7D,MAAM,CAACmB,EAAE,CAAA,CAAE;AACpD,IAAA,MAAMC,OAAO,GAAGtG,QAAQ,CAAC0G,aAAa,CAAC,KAAK,CAAC;AAE7CJ,IAAAA,OAAO,CAACD,EAAE,GAAG,IAAI,CAACA,EAAE;AACpBC,IAAAA,OAAO,CAACpE,YAAY,CAAC,OAAO,EAAE,wBAAwB,CAAC;AACvDoE,IAAAA,OAAO,CAACpE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AACtCoE,IAAAA,OAAO,CAACpE,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC;AAC1CoE,IAAAA,OAAO,CAACpE,YAAY,CAAC,iBAAiB,EAAE6G,OAAO,CAAC;IAChDzC,OAAO,CAAC0C,SAAS,GAAG,IAAI,CAACC,cAAc,CAACF,OAAO,CAAC;IAChDzC,OAAO,CAAC4C,MAAM,GAAG,IAAI;AAErB,IAAA,OAAO5C,OAAO;AAChB,EAAA;AAEAe,EAAAA,cAAcA,GAAG;IACf,MAAM8B,MAAM,GAAG,IAAI,CAAC7C,OAAO,CAAClB,aAAa,CAAC,OAAO,CAAC;IAClD,IAAIgE,QAAQ,GAAG,CAAC;IAChB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;AAC1B;AACA,MAAA,MAAMC,IAAI,GAAGH,MAAM,CAACI,SAAS,CAACF,CAAC,CAAC;MAEhC,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;AAC1B;AACA,QAAA,MAAMC,KAAK,GAAGzJ,QAAQ,CAAC0G,aAAa,CAAC,IAAI,CAAC;AAC1C4C,QAAAA,IAAI,CAACvC,WAAW,CAAC0C,KAAK,CAAC;AACvB,QAAA,MAAMC,WAAW,GAAG1J,QAAQ,CAAC0G,aAAa,CAAC,QAAQ,CAAC;AACpDgD,QAAAA,WAAW,CAACxH,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC1CuH,QAAAA,KAAK,CAAC1C,WAAW,CAAC2C,WAAW,CAAC;AAE9B,QAAA,MAAMC,WAAW,GAAG,IAAIC,aAAa,CAACF,WAAW,EAAEN,QAAQ,EAAEC,CAAC,EAAEG,CAAC,EAAE,IAAI,CAAC;AACxE,QAAA,IAAI,CAAC5D,YAAY,CAACiE,IAAI,CAACF,WAAW,CAAC;AACnCP,QAAAA,QAAQ,EAAE;AACZ,MAAA;AACF,IAAA;AACF,EAAA;AAEAnC,EAAAA,cAAcA,GAAG;IACf,OAAO,CAAA,oHAAA,EAAuH,IAAI,CAACZ,EAAE,CAAA;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAA,CAAoB;AAClB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACE4C,cAAcA,CAACF,OAAO,EAAE;IACtB,OAAO,CAAA;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAA,EAAsBA,OAAO,CAAA;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6GAAA,EAA+GA,OAAO,CAAA;AACtH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,gBAAA,CAAiB;AACf,EAAA;AAEAvC,EAAAA,qBAAqBA,GAAG;AACtB,IAAA,IAAI,CAACjB,SAAS,CAACuE,OAAO,CAAEC,GAAG,IAAK;AAC9B,MAAA,MAAMC,IAAI,GAAG,CAAA,yCAAA,EAA4CD,GAAG,CAACE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,2CAAA,EAA8CF,GAAG,CAAA,YAAA,CAAc;MAC3I,MAAMG,UAAU,GAAG,IAAI,CAAC5D,OAAO,CAAClB,aAAa,CAAC,YAAY,CAAC;AAC3D8E,MAAAA,UAAU,CAAClD,kBAAkB,CAAC,WAAW,EAAEgD,IAAI,CAAC;AAClD,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEG,EAAAA,YAAYA,CAACnH,KAAK,EAAEQ,MAAM,GAAG,CAAC,EAAE;AAC9B,IAAA,IAAI4G,GAAG,GAAGpH,KAAK,CAACmB,QAAQ,EAAE;AAE1B,IAAA,OAAOiG,GAAG,CAAC5G,MAAM,GAAGA,MAAM,EAAE;MAC1B4G,GAAG,GAAG,CAAA,CAAA,EAAIA,GAAG,CAAA,CAAE;AACjB,IAAA;AAEA,IAAA,OAAOA,GAAG;AACZ,EAAA;AAEAjE,EAAAA,UAAUA,GAAG;IACX,IAAI,CAACkE,2BAA2B,EAAE;IAClC,IAAI,CAACC,gBAAgB,EAAE;IACvB,IAAI,CAACC,eAAe,EAAE;IACtB,IAAI,CAACC,eAAe,EAAE;AACxB,EAAA;AAEAH,EAAAA,2BAA2BA,GAAG;AAC5B,IAAA,IAAI,IAAI,CAAC7H,MAAM,CAACiI,OAAO,EAAE;AACvB,MAAA,IAAI,CAACA,OAAO,GAAG,IAAI,CAACC,uBAAuB,CAAC,IAAI,CAAClI,MAAM,CAACiI,OAAO,EAAE,IAAI,CAAC;MAEtE,IAAI,IAAI,CAACA,OAAO,IAAI,IAAI,CAAChF,WAAW,GAAG,IAAI,CAACgF,OAAO,EAAE;AACnD,QAAA,IAAI,CAAChF,WAAW,GAAG,IAAI,CAACgF,OAAO;AACjC,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,IAAI,CAACjI,MAAM,CAACmI,OAAO,EAAE;AACvB,MAAA,IAAI,CAACA,OAAO,GAAG,IAAI,CAACD,uBAAuB,CAAC,IAAI,CAAClI,MAAM,CAACmI,OAAO,EAAE,IAAI,CAAC;MAEtE,IAAI,IAAI,CAACA,OAAO,IAAI,IAAI,CAAClF,WAAW,GAAG,IAAI,CAACkF,OAAO,EAAE;AACnD,QAAA,IAAI,CAAClF,WAAW,GAAG,IAAI,CAACkF,OAAO;AACjC,MAAA;AACF,IAAA;AACF,EAAA;AAEAL,EAAAA,gBAAgBA,GAAG;AACjB,IAAA,IAAI,IAAI,CAAC9H,MAAM,CAACqD,aAAa,EAAE;MAC7B,IAAI,CAACA,aAAa,GAAG,IAAI,CAACrD,MAAM,CAACqD,aAAa,CAC3C+E,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CACnB9F,KAAK,CAAC,GAAG,CAAC,CACV+F,GAAG,CAAEC,IAAI,IAAK;QACb,OAAOA,IAAI,CAACvH,QAAQ,CAAC,GAAG,CAAC,GACrB,IAAI,CAACwH,oBAAoB,CAACD,IAAI,CAAC,GAC/B,CAAC,IAAI,CAACJ,uBAAuB,CAACI,IAAI,CAAC,CAAC;MAC1C,CAAC,CAAC,CACDE,MAAM,CAAC,CAACC,KAAK,EAAEC,KAAK,KAAKD,KAAK,CAACE,MAAM,CAACD,KAAK,CAAC,CAAC,CAC7CE,MAAM,CAAEC,IAAI,IAAKA,IAAI,CAAC;AAC3B,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACEN,oBAAoBA,CAACO,UAAU,EAAE;IAC/B,MAAML,KAAK,GAAG,EAAE;IAChB,MAAM,CAACM,SAAS,EAAEC,OAAO,CAAC,GAAGF,UAAU,CACpCxG,KAAK,CAAC,GAAG,CAAC,CACV+F,GAAG,CAAEY,CAAC,IAAK,IAAI,CAACf,uBAAuB,CAACe,CAAC,EAAE,IAAI,CAAC,CAAC;IAEpD,IAAIF,SAAS,IAAIC,OAAO,EAAE;MACxB,MAAMH,IAAI,GAAG,IAAI3F,IAAI,CAAC6F,SAAS,CAACG,OAAO,EAAE,CAAC;AAC1C;MACA,OAAOL,IAAI,IAAIG,OAAO,EAAE;QACtBP,KAAK,CAACpB,IAAI,CAAC,IAAInE,IAAI,CAAC2F,IAAI,CAAC,CAAC;QAC1BA,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAClC,MAAA;AACA;AACF,IAAA;AACA,IAAA,OAAOX,KAAK;AACd,EAAA;AAEAV,EAAAA,eAAeA,GAAG;AAChB,IAAA,IAAI,IAAI,CAAC/H,MAAM,CAACsD,YAAY,EAAE;AAC5B;AACN;AACM,MAAA,MAAM+F,QAAQ,GAAG,IAAI,CAACtG,SAAS,CAACsF,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACgB,WAAW,EAAE,CAAC;AACjE,MAAA,IAAI,IAAI,CAACtJ,MAAM,CAACuJ,YAAY,KAAK,QAAQ,EAAE;QACzCF,QAAQ,CAACG,OAAO,CAACH,QAAQ,CAACI,GAAG,EAAE,CAAC;AAClC,MAAA;MAEA,IAAI,CAACnG,YAAY,GAAG,IAAI,CAACtD,MAAM,CAACsD,YAAY,CACzC8E,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CACnBkB,WAAW,EAAE,CACbhH,KAAK,CAAC,GAAG,CAAC,CACV+F,GAAG,CAAEC,IAAI,IAAKe,QAAQ,CAACK,OAAO,CAACpB,IAAI,CAAC,CAAC,CACrCM,MAAM,CAAEN,IAAI,IAAKA,IAAI,KAAK,EAAE,CAAC;AAClC,IAAA;AACF,EAAA;AAEAN,EAAAA,eAAeA,GAAG;AAChB,IAAA,MAAM2B,iBAAiB,GAAG,IAAI,CAAC3J,MAAM,CAACuJ,YAAY;IAClD,IAAII,iBAAiB,IAAIA,iBAAiB,CAACL,WAAW,EAAE,KAAK,QAAQ,EAAE;AACrE,MAAA,IAAI,CAACtJ,MAAM,CAACuJ,YAAY,GAAG,QAAQ;AACnC;AACA,MAAA,IAAI,CAACxG,SAAS,CAACyG,OAAO,CAAC,IAAI,CAACzG,SAAS,CAAC0G,GAAG,EAAE,CAAC;AAC9C,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAACzJ,MAAM,CAACuJ,YAAY,GAAG,QAAQ;AACrC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEK,cAAcA,CAACf,IAAI,EAAE;IACnB,IAAI,IAAI,CAACZ,OAAO,IAAI,IAAI,CAACA,OAAO,GAAGY,IAAI,EAAE;AACvC,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;IACA,IAAI,IAAI,CAACV,OAAO,IAAI,IAAI,CAACA,OAAO,GAAGU,IAAI,EAAE;AACvC,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,KAAK,MAAMgB,YAAY,IAAI,IAAI,CAACxG,aAAa,EAAE;MAC7C,IAAIwF,IAAI,CAACiB,YAAY,EAAE,KAAKD,YAAY,CAACC,YAAY,EAAE,EAAE;AACvD,QAAA,OAAO,IAAI;AACb,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,IAAI,CAACxG,YAAY,CAACvC,QAAQ,CAAC8H,IAAI,CAACkB,MAAM,EAAE,CAAC,EAAE;AAC7C,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,OAAO,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE7B,uBAAuBA,CAAC8B,UAAU,EAAEC,QAAQ,GAAG,IAAI/G,IAAI,EAAE,EAAE;IACzD,IAAIgH,aAAa,GAAG,IAAI;AACxB;IACA,MAAMC,iBAAiB,GAAG,sCAAsC;IAEhE,IAAI,CAACA,iBAAiB,CAACC,IAAI,CAACJ,UAAU,CAAC,EAAE,OAAOC,QAAQ;AAExD,IAAA,MAAMI,KAAK,GAAGF,iBAAiB,CAACG,IAAI,CAACN,UAAU,CAAC;AAChD,IAAA,MAAMzC,GAAG,GAAG8C,KAAK,CAAC,CAAC,CAAC;AACpB,IAAA,MAAME,KAAK,GAAGF,KAAK,CAAC,CAAC,CAAC;AACtB,IAAA,MAAMG,IAAI,GAAGH,KAAK,CAAC,CAAC,CAAC;IAErBH,aAAa,GAAG,IAAIhH,IAAI,CAAChC,MAAM,CAACsJ,IAAI,CAAC,EAAEtJ,MAAM,CAACqJ,KAAK,CAAC,GAAG,CAAC,EAAErJ,MAAM,CAACqG,GAAG,CAAC,CAAC;AACtE,IAAA,IACE2C,aAAa,YAAYhH,IAAI,IAC7BhC,MAAM,CAACD,QAAQ,CAACiJ,aAAa,CAAChB,OAAO,EAAE,CAAC,EACxC;AACA,MAAA,OAAOgB,aAAa;AACtB,IAAA;AACA,IAAA,OAAOD,QAAQ;AACjB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEQ,qBAAqBA,CAAC5B,IAAI,EAAE;AAC1B,IAAA,IAAI,IAAI,CAAC7I,MAAM,CAAC2H,YAAY,EAAE;AAC5B,MAAA,OAAO,CAAA,EAAG,IAAI,CAACA,YAAY,CAACkB,IAAI,CAACO,OAAO,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAACzB,YAAY,CAACkB,IAAI,CAAC6B,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI7B,IAAI,CAAC8B,WAAW,EAAE,CAAA,CAAE;AAC/G,IAAA;IAEA,OAAO,CAAA,EAAG9B,IAAI,CAACO,OAAO,EAAE,CAAA,CAAA,EAAIP,IAAI,CAAC6B,QAAQ,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI7B,IAAI,CAAC8B,WAAW,EAAE,CAAA,CAAE;AACzE,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEC,kBAAkBA,CAAC/B,IAAI,EAAE;AACvB,IAAA,OAAO,GAAG,IAAI,CAAC9F,SAAS,CAAC,CAAC8F,IAAI,CAACkB,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,IAAIlB,IAAI,CAACO,OAAO,EAAE,CAAA,CAAA,EAAI,IAAI,CAACpG,WAAW,CAAC6F,IAAI,CAAC6B,QAAQ,EAAE,CAAC,CAAA,CAAA,EAAI7B,IAAI,CAAC8B,WAAW,EAAE,CAAA,CAAE;AAClI,EAAA;;AAEA;AACF;AACA;EACEtE,eAAeA,CAAChB,KAAK,EAAE;IACrB,IACE,IAAI,CAACwF,MAAM,EAAE,IACbxF,KAAK,CAACyF,MAAM,YAAYC,IAAI,IAC5B,CAAC,IAAI,CAACjH,OAAO,CAACnG,QAAQ,CAAC0H,KAAK,CAACyF,MAAM,CAAC,IACpC,CAAC,IAAI,CAACpI,MAAM,CAAC/E,QAAQ,CAAC0H,KAAK,CAACyF,MAAM,CAAC,IACnC,CAAC,IAAI,CAACnG,eAAe,CAAChH,QAAQ,CAAC0H,KAAK,CAACyF,MAAM,CAAC,EAC5C;MACAzF,KAAK,CAACK,cAAc,EAAE;MACtB,IAAI,CAACC,WAAW,EAAE;AACpB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEM,kBAAkBA,CAACZ,KAAK,EAAE;IACxB,IAAIA,KAAK,CAACrD,GAAG,KAAK,KAAK,IAAIqD,KAAK,CAAC2F,QAAQ,EAAE;AACzC,MAAA,IAAI,CAAChF,mBAAmB,CAACiF,KAAK,EAAE;MAChC5F,KAAK,CAACK,cAAc,EAAE;AACxB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEQ,iBAAiBA,CAACb,KAAK,EAAE;IACvB,IAAIA,KAAK,CAACrD,GAAG,KAAK,KAAK,IAAI,CAACqD,KAAK,CAAC2F,QAAQ,EAAE;AAC1C,MAAA,IAAI,CAACjF,oBAAoB,CAACkF,KAAK,EAAE;MACjC5F,KAAK,CAACK,cAAc,EAAE;AACxB,IAAA;AACF,EAAA;;AAEA;AACAY,EAAAA,cAAcA,GAAG;IACf,IAAI,CAAC1B,YAAY,CAAC4B,SAAS,GAAG,CAAA,EAAG,IAAI,CAACxD,WAAW,CAAC,IAAI,CAACC,WAAW,CAACyH,QAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAACzH,WAAW,CAAC0H,WAAW,EAAE,CAAA,CAAE;AAElH,IAAA,MAAMpD,GAAG,GAAG,IAAI,CAACtE,WAAW;AAC5B,IAAA,MAAMiI,YAAY,GAAG,IAAIhI,IAAI,CAACqE,GAAG,CAACoD,WAAW,EAAE,EAAEpD,GAAG,CAACmD,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnE,IAAA,IAAIS,SAAS;AAEb,IAAA,IAAI,IAAI,CAACnL,MAAM,CAACuJ,YAAY,KAAK,QAAQ,EAAE;AACzC4B,MAAAA,SAAS,GAAGD,YAAY,CAACnB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAGmB,YAAY,CAACnB,MAAM,EAAE,GAAG,CAAC,CAAA;AACzE,IAAA,CAAC,MAAM;AACLoB,MAAAA,SAAS,GAAGD,YAAY,CAACnB,MAAM,EAAE;AACnC,IAAA;IAEAmB,YAAY,CAAC/B,OAAO,CAAC+B,YAAY,CAAC9B,OAAO,EAAE,GAAG+B,SAAS,CAAC;AAExD,IAAA,MAAMC,OAAO,GAAG,IAAIlI,IAAI,CAACgI,YAAY,CAAC;;AAEtC;AACA,IAAA,KAAK,MAAM/D,WAAW,IAAI,IAAI,CAAC/D,YAAY,EAAE;AAC3C,MAAA,MAAMsD,MAAM,GAAG0E,OAAO,CAACV,QAAQ,EAAE,KAAKnD,GAAG,CAACmD,QAAQ,EAAE;AACpD,MAAA,MAAMW,QAAQ,GAAG,IAAI,CAACzB,cAAc,CAACwB,OAAO,CAAC;MAE7CjE,WAAW,CAACmE,MAAM,CAACF,OAAO,EAAE1E,MAAM,EAAE2E,QAAQ,CAAC;MAE7CD,OAAO,CAACjC,OAAO,CAACiC,OAAO,CAAChC,OAAO,EAAE,GAAG,CAAC,CAAC;AACxC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACEmC,EAAAA,cAAcA,CAACN,KAAK,GAAG,IAAI,EAAE;IAC3B,MAAM;AAAEhI,MAAAA;AAAY,KAAC,GAAG,IAAI;AAC5B,IAAA,IAAI,CAACG,YAAY,CAACkE,OAAO,CAAEH,WAAW,IAAK;MACzCA,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC0G,GAAG,CAAC,wBAAwB,CAAC;MAC3D+C,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC0G,GAAG,CAAC,8BAA8B,CAAC;MACjE+C,WAAW,CAACqE,OAAO,CAAC9L,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;MAClDyH,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC+N,MAAM,CAAC,IAAI,CAACjI,sBAAsB,CAAC;AACjE,MAAA,MAAMkI,eAAe,GAAGvE,WAAW,CAAC0B,IAAI;MACxC6C,eAAe,CAACvI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEpC,MAAA,MAAMwI,KAAK,GAAG,IAAIzI,IAAI,EAAE;MACxByI,KAAK,CAACxI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE1B,MAAA,IACEuI,eAAe,CAACxC,OAAO,EAAE,KACzBjG,WAAW,CAACiG,OAAO,EAAE,wCACrB;AACA,QAAA,IAAI+B,KAAK,EAAE;UACT9D,WAAW,CAACqE,OAAO,CAAC9L,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;AACjDyH,UAAAA,WAAW,CAACqE,OAAO,CAACP,KAAK,EAAE;UAC3B9D,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC0G,GAAG,CAAC,IAAI,CAACZ,sBAAsB,CAAC;AAChE,QAAA;AACF,MAAA;AAEA,MAAA,IACE,IAAI,CAACoI,SAAS,IACdF,eAAe,CAACxC,OAAO,EAAE,KAAK,IAAI,CAAC0C,SAAS,CAAC1C,OAAO,EAAE,EACtD;QACA/B,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC0G,GAAG,CAAC,IAAI,CAACX,qBAAqB,CAAC;QAC7D0D,WAAW,CAACqE,OAAO,CAAC9L,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;AAC1D,MAAA,CAAC,MAAM;QACLyH,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC+N,MAAM,CAAC,IAAI,CAAChI,qBAAqB,CAAC;AAChE0D,QAAAA,WAAW,CAACqE,OAAO,CAACK,eAAe,CAAC,cAAc,CAAC;AACrD,MAAA;MAEA,IAAIH,eAAe,CAACxC,OAAO,EAAE,KAAKyC,KAAK,CAACzC,OAAO,EAAE,EAAE;QACjD/B,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC0G,GAAG,CAAC,IAAI,CAACV,gBAAgB,CAAC;AAC1D,MAAA,CAAC,MAAM;QACLyD,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC+N,MAAM,CAAC,IAAI,CAAC/H,gBAAgB,CAAC;AAC7D,MAAA;AACF,IAAA,CAAC,CAAC;;AAEF;IACA,IAAI,CAACuH,KAAK,EAAE;MACV,MAAMa,WAAW,GAAG,IAAI,CAAC1I,YAAY,CAACwF,MAAM,CAAEzB,WAAW,IAAK;AAC5D,QAAA,OACE4E,MAAM,CAACC,gBAAgB,CAAC7E,WAAW,CAACqE,OAAO,CAAC,CAACS,OAAO,KAAK,OAAO,IAChE,CAAC9E,WAAW,CAACqE,OAAO,CAACH,QAAQ;AAEjC,MAAA,CAAC,CAAC;MAEFS,WAAW,CAAC,CAAC,CAAC,CAACN,OAAO,CAAC9L,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;MAEpD,IAAI,CAACuD,WAAW,GAAG6I,WAAW,CAAC,CAAC,CAAC,CAACjD,IAAI;AACxC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEjD,UAAUA,CAACiD,IAAI,EAAE;AACf,IAAA,IAAI,IAAI,CAACe,cAAc,CAACf,IAAI,CAAC,EAAE;AAC7B,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAAClE,eAAe,CAAC/B,aAAa,CAAC,MAAM,CAAC,CAACsJ,SAAS,GAClD,iCAAiC,IAAI,CAACtB,kBAAkB,CAAC/B,IAAI,CAAC,CAAA,CAAE;IAClE,IAAI,CAACnG,MAAM,CAAClC,KAAK,GAAG,IAAI,CAACiK,qBAAqB,CAAC5B,IAAI,CAAC;AAEpD,IAAA,MAAMsD,WAAW,GAAG,IAAIC,KAAK,CAAC,QAAQ,EAAE;AAAEC,MAAAA,OAAO,EAAE,IAAI;AAAEC,MAAAA,UAAU,EAAE;AAAK,KAAC,CAAC;AAC5E,IAAA,IAAI,CAAC5J,MAAM,CAAC6J,aAAa,CAACJ,WAAW,CAAC;IAEtC,IAAI,CAACxG,WAAW,EAAE;AACpB,EAAA;AAEAkF,EAAAA,MAAMA,GAAG;IACP,OAAO,IAAI,CAAC/G,OAAO,CAACpG,SAAS,CAACC,QAAQ,CAAC,8BAA8B,CAAC;AACxE,EAAA;;AAEA;AACF;AACA;EACEwI,YAAYA,CAACd,KAAK,EAAE;IAClBA,KAAK,CAACK,cAAc,EAAE;AACtB,IAAA,IAAI,IAAI,CAACmF,MAAM,EAAE,EAAE;MACjB,IAAI,CAAClF,WAAW,EAAE;AACpB,IAAA,CAAC,MAAM;MACL,IAAI,CAACkC,2BAA2B,EAAE;MAClC,IAAI,CAAC2E,UAAU,EAAE;AACnB,IAAA;AACF,EAAA;AAEAA,EAAAA,UAAUA,GAAG;AACX,IAAA,IAAI,CAAC1I,OAAO,CAAC4C,MAAM,GAAG,KAAK;IAC3B,IAAI,CAAC5C,OAAO,CAACpG,SAAS,CAAC0G,GAAG,CAAC,8BAA8B,CAAC;IAC1D,IAAI,CAACO,eAAe,CAACjF,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;;AAE1D;AACA;IACA,IAAI,IAAI,CAACgD,MAAM,CAAC+J,WAAW,GAAG,IAAI,CAAC3I,OAAO,CAAC2I,WAAW,EAAE;AACtD,MAAA,IAAI,CAAC3I,OAAO,CAAC4I,KAAK,CAACC,KAAK,GAAG,CAAA,GAAA,CAAK;AAClC,IAAA;AACA,IAAA,IAAI,CAAC7I,OAAO,CAAC4I,KAAK,CAACE,GAAG,GAAG,CAAA,EAAG,IAAI,CAAClK,MAAM,CAACmK,YAAY,GAAG,CAAC,CAAA,EAAA,CAAI;;AAE5D;AACA,IAAA,IAAI,CAACjB,SAAS,GAAG,IAAI,CAAC1D,uBAAuB,CAAC,IAAI,CAACxF,MAAM,CAAClC,KAAK,CAAC;AAChE;IACA,IAAI,IAAI,CAACyH,OAAO,IAAI,IAAI,CAACA,OAAO,GAAG,IAAI,CAAC2D,SAAS,EAAE;AACjD,MAAA,IAAI,CAACA,SAAS,GAAG,IAAI1I,IAAI,CAAC,IAAI,CAAC+E,OAAO,CAACiB,OAAO,EAAE,CAAC;AACnD,IAAA;IACA,IAAI,IAAI,CAACf,OAAO,IAAI,IAAI,CAACA,OAAO,GAAG,IAAI,CAACyD,SAAS,EAAE;AACjD,MAAA,IAAI,CAACA,SAAS,GAAG,IAAI1I,IAAI,CAAC,IAAI,CAACiF,OAAO,CAACe,OAAO,EAAE,CAAC;AACnD,IAAA;AACA,IAAA,IAAI,IAAI,CAACjB,OAAO,IAAI,IAAI,CAACE,OAAO,IAAI,IAAI,CAACF,OAAO,GAAG,IAAI,CAACE,OAAO,EAAE;AAC/D2E,MAAAA,OAAO,CAACC,KAAK,CAAC,yDAAyD,CAAC;AAC1E,IAAA;AAEA,IAAA,IAAI,CAAC9J,WAAW,GAAG,IAAI,CAAC2I,SAAS;AACjC,IAAA,IAAI,CAAC3I,WAAW,CAACE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAErC,IAAI,CAACmD,cAAc,EAAE;IACrB,IAAI,CAACiF,cAAc,EAAE;AACvB,EAAA;AAEA5F,EAAAA,WAAWA,GAAG;AACZ,IAAA,IAAI,CAAC7B,OAAO,CAAC4C,MAAM,GAAG,IAAI;IAC1B,IAAI,CAAC5C,OAAO,CAACpG,SAAS,CAAC+N,MAAM,CAAC,8BAA8B,CAAC;IAC7D,IAAI,CAAC9G,eAAe,CAACjF,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AAC3D,IAAA,IAAI,CAACiF,eAAe,CAACsG,KAAK,EAAE;AAC9B,EAAA;;AAEA;AACF;AACA;AACA;AACE+B,EAAAA,QAAQA,CAACnE,IAAI,EAAEoC,KAAK,EAAE;AACpB,IAAA,MAAM7I,OAAO,GAAG,IAAI,CAACa,WAAW;IAChC,IAAI,CAACA,WAAW,GAAG4F,IAAI;IAEvB,IACEzG,OAAO,CAACsI,QAAQ,EAAE,KAAK,IAAI,CAACzH,WAAW,CAACyH,QAAQ,EAAE,IAClDtI,OAAO,CAACuI,WAAW,EAAE,KAAK,IAAI,CAAC1H,WAAW,CAAC0H,WAAW,EAAE,EACxD;MACA,IAAI,CAACrE,cAAc,EAAE;AACvB,IAAA;AAEA,IAAA,IAAI,CAACiF,cAAc,CAACN,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACAgC,EAAAA,YAAYA,GAAG;IACb,MAAMpE,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvC4F,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC4D,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;AAEAqE,EAAAA,gBAAgBA,GAAG;IACjB,MAAMrE,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvC4F,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC4D,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;;AAEA;AACAsE,EAAAA,aAAaA,GAAG;IACd,MAAMtE,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvC4F,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC4D,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;AAEAuE,EAAAA,iBAAiBA,GAAG;IAClB,MAAMvE,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvC4F,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC4D,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;AAEAwE,EAAAA,mBAAmBA,GAAG;IACpB,MAAMxE,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC,IAAA,MAAMqK,mBAAmB,GAAG,IAAI,CAACtN,MAAM,CAACuJ,YAAY,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;AACzE,IAAA,MAAM4B,SAAS,GAAGtC,IAAI,CAACkB,MAAM,EAAE;AAC/B,IAAA,MAAMwD,IAAI,GACRpC,SAAS,IAAImC,mBAAmB,GAC5BnC,SAAS,GAAGmC,mBAAmB,GAC/B,CAAC,GAAGnC,SAAS;IAEnBtC,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAGmE,IAAI,CAAC;IACnC1E,IAAI,CAAC1F,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEzB,IAAA,IAAI,CAAC6J,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;AAEA2E,EAAAA,kBAAkBA,GAAG;IACnB,MAAM3E,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC,IAAA,MAAMwK,kBAAkB,GAAG,IAAI,CAACzN,MAAM,CAACuJ,YAAY,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;AACxE,IAAA,MAAM4B,SAAS,GAAGtC,IAAI,CAACkB,MAAM,EAAE;AAC/B,IAAA,MAAMwD,IAAI,GACRpC,SAAS,IAAIsC,kBAAkB,GAC3BA,kBAAkB,GAAGtC,SAAS,GAC9B,CAAC,GAAGA,SAAS;IAEnBtC,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAGmE,IAAI,CAAC;IACnC1E,IAAI,CAAC1F,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEzB,IAAA,IAAI,CAAC6J,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACErD,EAAAA,cAAcA,CAACH,KAAK,EAAE4F,KAAK,GAAG,IAAI,EAAE;IAClC5F,KAAK,CAACK,cAAc,EAAE;IACtB,MAAMmD,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC4F,IAAAA,IAAI,CAAC6E,QAAQ,CAAC7E,IAAI,CAAC6B,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACrC,IAAA,IAAI,CAACsC,QAAQ,CAACnE,IAAI,EAAEoC,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AACA;AACE3F,EAAAA,kBAAkBA,CAACD,KAAK,EAAE4F,KAAK,GAAG,IAAI,EAAE;IACtC5F,KAAK,CAACK,cAAc,EAAE;IACtB,MAAMmD,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC4F,IAAAA,IAAI,CAAC6E,QAAQ,CAAC7E,IAAI,CAAC6B,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACrC,IAAA,IAAI,CAACsC,QAAQ,CAACnE,IAAI,EAAEoC,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACExF,EAAAA,aAAaA,CAACJ,KAAK,EAAE4F,KAAK,GAAG,IAAI,EAAE;IACjC5F,KAAK,CAACK,cAAc,EAAE;IACtB,MAAMmD,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC4F,IAAAA,IAAI,CAAC8E,WAAW,CAAC9E,IAAI,CAAC8B,WAAW,EAAE,GAAG,CAAC,EAAE9B,IAAI,CAAC6B,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC5D,IAAA,IAAI,CAACsC,QAAQ,CAACnE,IAAI,EAAEoC,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AACA;AACE1F,EAAAA,iBAAiBA,CAACF,KAAK,EAAE4F,KAAK,GAAG,IAAI,EAAE;IACrC5F,KAAK,CAACK,cAAc,EAAE;IACtB,MAAMmD,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC4F,IAAAA,IAAI,CAAC8E,WAAW,CAAC9E,IAAI,CAAC8B,WAAW,EAAE,GAAG,CAAC,EAAE9B,IAAI,CAAC6B,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC5D,IAAA,IAAI,CAACsC,QAAQ,CAACnE,IAAI,EAAEoC,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AAkCA;AAh0BazI,UAAU,CA+xBdrF,UAAU,GAAG,iBAAiB;AAErC;AACF;AACA;AACA;AACA;AAryBaqF,UAAU,CAsyBdtC,QAAQ,GAAGoB,MAAM,CAACsM,MAAM,CAAC;AAC9BjG,EAAAA,YAAY,EAAE,KAAK;AACnB4B,EAAAA,YAAY,EAAE,QAAQ;AACtB5G,EAAAA,KAAK,EAAE;AACLE,IAAAA,QAAQ,EAAE;AACZ;AACF,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AAlzBaL,UAAU,CAmzBdrB,MAAM,GAAGG,MAAM,CAACsM,MAAM,qBACL;AACpBrM,EAAAA,UAAU,EAAE;AACV8B,IAAAA,aAAa,EAAE;AAAEvC,MAAAA,IAAI,EAAE;KAAU;AACjCwC,IAAAA,YAAY,EAAE;AAAExC,MAAAA,IAAI,EAAE;KAAU;AAChC6G,IAAAA,YAAY,EAAE;AAAE7G,MAAAA,IAAI,EAAE;KAAW;AACjCqH,IAAAA,OAAO,EAAE;AAAErH,MAAAA,IAAI,EAAE;KAAU;AAC3BmH,IAAAA,OAAO,EAAE;AAAEnH,MAAAA,IAAI,EAAE;KAAU;AAC3ByI,IAAAA,YAAY,EAAE;AAAEzI,MAAAA,IAAI,EAAE;KAAU;AAChC6B,IAAAA,KAAK,EAAE;AAAE7B,MAAAA,IAAI,EAAE;AAAS;AAC1B;AACF,CACF,CAAC;AAGH,MAAMsG,aAAa,CAAC;AAClB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE/I,WAAWA,CAACmN,OAAO,EAAEjJ,KAAK,EAAEsL,GAAG,EAAEC,MAAM,EAAEC,MAAM,EAAE;IAC/C,IAAI,CAACxL,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACsL,GAAG,GAAGA,GAAG;IACd,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACtC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACuC,MAAM,GAAGA,MAAM;AACpB,IAAA,IAAI,CAAClF,IAAI,GAAG,IAAI3F,IAAI,EAAE;AACtB,IAAA,IAAI,CAACsI,OAAO,CAACpG,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC4I,QAAQ,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClE,IAAA,IAAI,CAACzC,OAAO,CAACpG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC8I,KAAK,CAACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACE3C,EAAAA,MAAMA,CAAC/D,GAAG,EAAEb,MAAM,EAAE2E,QAAQ,EAAE;AAC5B,IAAA,MAAM8C,KAAK,GAAG5G,GAAG,CAAC6B,OAAO,EAAE;IAC3B,IAAIgF,eAAe,GAAG,IAAI,CAACL,MAAM,CAACnD,kBAAkB,CAACrD,GAAG,CAAC;AAEzD,IAAA,IAAI8D,QAAQ,EAAE;MACZ,IAAI,CAACG,OAAO,CAAC9L,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;MAClD0O,eAAe,GAAG,CAAA,eAAA,EAAkBA,eAAe,CAAA,CAAE;AACvD,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAAC5C,OAAO,CAACK,eAAe,CAAC,eAAe,CAAC;AAC/C,IAAA;AAEA,IAAA,IAAInF,MAAM,EAAE;AACV,MAAA,IAAI,CAAC8E,OAAO,CAACkB,KAAK,CAACT,OAAO,GAAG,MAAM;AACrC,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAACT,OAAO,CAACkB,KAAK,CAACT,OAAO,GAAG,OAAO;AACtC,IAAA;AACA,IAAA,IAAI,CAACT,OAAO,CAAC9L,YAAY,CACvB,aAAa,EACb,IAAI,CAACqO,MAAM,CAACtD,qBAAqB,CAAClD,GAAG,CACvC,CAAC;IAED,IAAI,CAACiE,OAAO,CAAChF,SAAS,GAAG,CAAA,oCAAA,EAAuC4H,eAAe,CAAA,gCAAA,EAAmCD,KAAK,CAAA,OAAA,CAAS;AAChI,IAAA,IAAI,CAACtF,IAAI,GAAG,IAAI3F,IAAI,CAACqE,GAAG,CAAC;AAC3B,EAAA;;AAEA;AACF;AACA;EACE2G,KAAKA,CAAC7I,KAAK,EAAE;IACX,IAAI,CAAC0I,MAAM,CAACf,QAAQ,CAAC,IAAI,CAACnE,IAAI,CAAC;IAC/B,IAAI,CAACkF,MAAM,CAACnI,UAAU,CAAC,IAAI,CAACiD,IAAI,CAAC;IAEjCxD,KAAK,CAACe,eAAe,EAAE;IACvBf,KAAK,CAACK,cAAc,EAAE;AACxB,EAAA;;AAEA;AACF;AACA;EACEsI,QAAQA,CAAC3I,KAAK,EAAE;IACd,IAAIgJ,cAAc,GAAG,IAAI;IAEzB,QAAQhJ,KAAK,CAACrD,GAAG;AACf,MAAA,KAAK,WAAW;AACd,QAAA,IAAI,CAAC+L,MAAM,CAACb,gBAAgB,EAAE;AAC9B,QAAA;AACF,MAAA,KAAK,YAAY;AACf,QAAA,IAAI,CAACa,MAAM,CAACd,YAAY,EAAE;AAC1B,QAAA;AACF,MAAA,KAAK,SAAS;AACZ,QAAA,IAAI,CAACc,MAAM,CAACX,iBAAiB,EAAE;AAC/B,QAAA;AACF,MAAA,KAAK,WAAW;AACd,QAAA,IAAI,CAACW,MAAM,CAACZ,aAAa,EAAE;AAC3B,QAAA;AACF,MAAA,KAAK,MAAM;AACT,QAAA,IAAI,CAACY,MAAM,CAACV,mBAAmB,EAAE;AACjC,QAAA;AACF,MAAA,KAAK,KAAK;AACR,QAAA,IAAI,CAACU,MAAM,CAACP,kBAAkB,EAAE;AAChC,QAAA;AACF,MAAA,KAAK,QAAQ;AAAE,QAAA;UACb,IAAInI,KAAK,CAAC2F,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC+C,MAAM,CAACxI,iBAAiB,CAACF,KAAK,CAAC;AACtC,UAAA,CAAC,MAAM;AACL,YAAA,IAAI,CAAC0I,MAAM,CAACzI,kBAAkB,CAACD,KAAK,CAAC;AACvC,UAAA;AACA,UAAA;AACF,QAAA;AACA,MAAA,KAAK,UAAU;AAAE,QAAA;UACf,IAAIA,KAAK,CAAC2F,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC+C,MAAM,CAACtI,aAAa,CAACJ,KAAK,CAAC;AAClC,UAAA,CAAC,MAAM;AACL,YAAA,IAAI,CAAC0I,MAAM,CAACvI,cAAc,CAACH,KAAK,CAAC;AACnC,UAAA;AACA,UAAA;AACF,QAAA;AACA,MAAA;AACEgJ,QAAAA,cAAc,GAAG,KAAK;AACtB,QAAA;AACJ;AAEA,IAAA,IAAIA,cAAc,EAAE;MAClBhJ,KAAK,CAACK,cAAc,EAAE;MACtBL,KAAK,CAACe,eAAe,EAAE;AACzB,IAAA;AACF,EAAA;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;","x_google_ignoreList":[0,1,2,3]}
1
+ {"version":3,"file":"date-picker.bundle.mjs","sources":["../../../../node_modules/govuk-frontend/dist/govuk/common/index.mjs","../../../../node_modules/govuk-frontend/dist/govuk/errors/index.mjs","../../../../node_modules/govuk-frontend/dist/govuk/component.mjs","../../../../node_modules/govuk-frontend/dist/govuk/common/configuration.mjs","../../../../src/moj/components/date-picker/date-picker.mjs"],"sourcesContent":["function getBreakpoint(name) {\n const property = `--govuk-breakpoint-${name}`;\n const value = window.getComputedStyle(document.documentElement).getPropertyValue(property);\n return {\n property,\n value: value || undefined\n };\n}\nfunction setFocus($element, options = {}) {\n var _options$onBeforeFocu;\n const isFocusable = $element.getAttribute('tabindex');\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1');\n }\n function onFocus() {\n $element.addEventListener('blur', onBlur, {\n once: true\n });\n }\n function onBlur() {\n var _options$onBlur;\n (_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);\n if (!isFocusable) {\n $element.removeAttribute('tabindex');\n }\n }\n $element.addEventListener('focus', onFocus, {\n once: true\n });\n (_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);\n $element.focus();\n}\nfunction isInitialised($root, moduleName) {\n return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);\n}\n\n/**\n * Checks if GOV.UK Frontend is supported on this page\n *\n * Some browsers will load and run our JavaScript but GOV.UK Frontend\n * won't be supported.\n *\n * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support\n * @returns {boolean} Whether GOV.UK Frontend is supported on this page\n */\nfunction isSupported($scope = document.body) {\n if (!$scope) {\n return false;\n }\n return $scope.classList.contains('govuk-frontend-supported');\n}\nfunction isArray(option) {\n return Array.isArray(option);\n}\nfunction isObject(option) {\n return !!option && typeof option === 'object' && !isArray(option);\n}\nfunction isScope($scope) {\n return !!$scope && ($scope instanceof Element || $scope instanceof Document);\n}\nfunction formatErrorMessage(Component, message) {\n return `${Component.moduleName}: ${message}`;\n}\n/**\n * @typedef ComponentWithModuleName\n * @property {string} moduleName - Name of the component\n */\n\nexport { formatErrorMessage, getBreakpoint, isInitialised, isObject, isScope, isSupported, setFocus };\n//# sourceMappingURL=index.mjs.map\n","import { isObject, formatErrorMessage } from '../common/index.mjs';\n\nclass GOVUKFrontendError extends Error {\n constructor(...args) {\n super(...args);\n this.name = 'GOVUKFrontendError';\n }\n}\nclass SupportError extends GOVUKFrontendError {\n /**\n * Checks if GOV.UK Frontend is supported on this page\n *\n * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support\n */\n constructor($scope = document.body) {\n const supportMessage = 'noModule' in HTMLScriptElement.prototype ? 'GOV.UK Frontend initialised without `<body class=\"govuk-frontend-supported\">` from template `<script>` snippet' : 'GOV.UK Frontend is not supported in this browser';\n super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type=\"module\">`');\n this.name = 'SupportError';\n }\n}\nclass ConfigError extends GOVUKFrontendError {\n constructor(...args) {\n super(...args);\n this.name = 'ConfigError';\n }\n}\nclass ElementError extends GOVUKFrontendError {\n constructor(messageOrOptions) {\n let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';\n if (isObject(messageOrOptions)) {\n const {\n component,\n identifier,\n element,\n expectedType\n } = messageOrOptions;\n message = identifier;\n message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';\n if (component) {\n message = formatErrorMessage(component, message);\n }\n }\n super(message);\n this.name = 'ElementError';\n }\n}\nclass InitError extends GOVUKFrontendError {\n constructor(componentOrMessage) {\n const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\\`$root\\`) already initialised`);\n super(message);\n this.name = 'InitError';\n }\n}\n/**\n * @import { ComponentWithModuleName } from '../common/index.mjs'\n */\n\nexport { ConfigError, ElementError, GOVUKFrontendError, InitError, SupportError };\n//# sourceMappingURL=index.mjs.map\n","import { isInitialised, isSupported } from './common/index.mjs';\nimport { InitError, ElementError, SupportError } from './errors/index.mjs';\n\nclass Component {\n /**\n * Returns the root element of the component\n *\n * @protected\n * @returns {RootElementType} - the root element of component\n */\n get $root() {\n return this._$root;\n }\n constructor($root) {\n this._$root = void 0;\n const childConstructor = this.constructor;\n if (typeof childConstructor.moduleName !== 'string') {\n throw new InitError(`\\`moduleName\\` not defined in component`);\n }\n if (!($root instanceof childConstructor.elementType)) {\n throw new ElementError({\n element: $root,\n component: childConstructor,\n identifier: 'Root element (`$root`)',\n expectedType: childConstructor.elementType.name\n });\n } else {\n this._$root = $root;\n }\n childConstructor.checkSupport();\n this.checkInitialised();\n const moduleName = childConstructor.moduleName;\n this.$root.setAttribute(`data-${moduleName}-init`, '');\n }\n checkInitialised() {\n const constructor = this.constructor;\n const moduleName = constructor.moduleName;\n if (moduleName && isInitialised(this.$root, moduleName)) {\n throw new InitError(constructor);\n }\n }\n static checkSupport() {\n if (!isSupported()) {\n throw new SupportError();\n }\n }\n}\n\n/**\n * @typedef ChildClass\n * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component\n */\n\n/**\n * @typedef {typeof Component & ChildClass} ChildClassConstructor\n */\nComponent.elementType = HTMLElement;\n\nexport { Component };\n//# sourceMappingURL=component.mjs.map\n","import { Component } from '../component.mjs';\nimport { ConfigError } from '../errors/index.mjs';\nimport { isObject, formatErrorMessage, isScope } from './index.mjs';\n\nconst configOverride = Symbol.for('configOverride');\nclass ConfigurableComponent extends Component {\n [configOverride](param) {\n return {};\n }\n\n /**\n * Returns the root element of the component\n *\n * @protected\n * @returns {ConfigurationType} - the root element of component\n */\n get config() {\n return this._config;\n }\n constructor($root, config) {\n super($root);\n this._config = void 0;\n const childConstructor = this.constructor;\n if (!isObject(childConstructor.defaults)) {\n throw new ConfigError(formatErrorMessage(childConstructor, 'Config passed as parameter into constructor but no defaults defined'));\n }\n const datasetConfig = normaliseDataset(childConstructor, this._$root.dataset);\n this._config = mergeConfigs(childConstructor.defaults, config != null ? config : {}, this[configOverride](datasetConfig), datasetConfig);\n }\n}\nfunction normaliseString(value, property) {\n const trimmedValue = value ? value.trim() : '';\n let output;\n let outputType = property == null ? void 0 : property.type;\n if (!outputType) {\n if (['true', 'false'].includes(trimmedValue)) {\n outputType = 'boolean';\n }\n if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {\n outputType = 'number';\n }\n }\n switch (outputType) {\n case 'boolean':\n output = trimmedValue === 'true';\n break;\n case 'number':\n output = Number(trimmedValue);\n break;\n default:\n output = value;\n }\n return output;\n}\nfunction normaliseDataset(Component, dataset) {\n if (!isObject(Component.schema)) {\n throw new ConfigError(formatErrorMessage(Component, 'Config passed as parameter into constructor but no schema defined'));\n }\n const out = {};\n const entries = Object.entries(Component.schema.properties);\n for (const entry of entries) {\n const [namespace, property] = entry;\n const field = namespace.toString();\n if (field in dataset) {\n out[field] = normaliseString(dataset[field], property);\n }\n if ((property == null ? void 0 : property.type) === 'object') {\n out[field] = extractConfigByNamespace(Component.schema, dataset, namespace);\n }\n }\n return out;\n}\nfunction normaliseOptions(scopeOrOptions) {\n let $scope = document;\n let onError;\n if (isObject(scopeOrOptions)) {\n const options = scopeOrOptions;\n if (isScope(options.scope) || options.scope === null) {\n $scope = options.scope;\n }\n if (typeof options.onError === 'function') {\n onError = options.onError;\n }\n }\n if (isScope(scopeOrOptions)) {\n $scope = scopeOrOptions;\n } else if (scopeOrOptions === null) {\n $scope = null;\n } else if (typeof scopeOrOptions === 'function') {\n onError = scopeOrOptions;\n }\n return {\n scope: $scope,\n onError\n };\n}\nfunction mergeConfigs(...configObjects) {\n const formattedConfigObject = {};\n for (const configObject of configObjects) {\n for (const key of Object.keys(configObject)) {\n const option = formattedConfigObject[key];\n const override = configObject[key];\n if (isObject(option) && isObject(override)) {\n formattedConfigObject[key] = mergeConfigs(option, override);\n } else {\n formattedConfigObject[key] = override;\n }\n }\n }\n return formattedConfigObject;\n}\nfunction validateConfig(schema, config) {\n const validationErrors = [];\n for (const [name, conditions] of Object.entries(schema)) {\n const errors = [];\n if (Array.isArray(conditions)) {\n for (const {\n required,\n errorMessage\n } of conditions) {\n if (!required.every(key => !!config[key])) {\n errors.push(errorMessage);\n }\n }\n if (name === 'anyOf' && !(conditions.length - errors.length >= 1)) {\n validationErrors.push(...errors);\n }\n }\n }\n return validationErrors;\n}\nfunction extractConfigByNamespace(schema, dataset, namespace) {\n const property = schema.properties[namespace];\n if ((property == null ? void 0 : property.type) !== 'object') {\n return;\n }\n const newObject = {\n [namespace]: {}\n };\n for (const [key, value] of Object.entries(dataset)) {\n let current = newObject;\n const keyParts = key.split('.');\n for (const [index, name] of keyParts.entries()) {\n if (isObject(current)) {\n if (index < keyParts.length - 1) {\n if (!isObject(current[name])) {\n current[name] = {};\n }\n current = current[name];\n } else if (key !== namespace) {\n current[name] = normaliseString(value);\n }\n }\n }\n }\n return newObject[namespace];\n}\n/**\n * Schema for component config\n *\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType\n * @typedef {object} Schema\n * @property {Record<keyof ConfigurationType, SchemaProperty | undefined>} properties - Schema properties\n * @property {SchemaCondition<ConfigurationType>[]} [anyOf] - List of schema conditions\n */\n/**\n * Schema property for component config\n *\n * @typedef {object} SchemaProperty\n * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type\n */\n/**\n * Schema condition for component config\n *\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType\n * @typedef {object} SchemaCondition\n * @property {(keyof ConfigurationType)[]} required - List of required config fields\n * @property {string} errorMessage - Error message when required config fields not provided\n */\n/**\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]\n * @typedef ChildClass\n * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component\n * @property {Schema<ConfigurationType>} [schema] - The schema of the component configuration\n * @property {ConfigurationType} [defaults] - The default values of the configuration of the component\n */\n/**\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]\n * @typedef {typeof Component & ChildClass<ConfigurationType>} ChildClassConstructor<ConfigurationType>\n */\n/**\n * @import { CompatibleClass, Config, CreateAllOptions, OnErrorCallback } from '../init.mjs'\n */\n\nexport { ConfigurableComponent, configOverride, extractConfigByNamespace, mergeConfigs, normaliseDataset, normaliseOptions, normaliseString, validateConfig };\n//# sourceMappingURL=configuration.mjs.map\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<DatePickerConfig>}\n */\nexport class DatePicker extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for date picker\n * @param {DatePickerConfig} [config] - Date picker config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $input =\n this.config.input.element ??\n this.$root.querySelector(this.config.input.selector)\n\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\n\n this.dayLabels = [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday'\n ]\n\n this.monthLabels = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n\n this.currentDate = new Date()\n this.currentDate.setHours(0, 0, 0, 0)\n this.calendarDays = /** @type {DSCalendarDay[]} */ ([])\n this.excludedDates = /** @type {Date[]} */ ([])\n this.excludedDays = /** @type {number[]} */ ([])\n\n this.buttonClass = 'moj-datepicker__button'\n this.selectedDayButtonClass = 'moj-datepicker__button--selected'\n this.currentDayButtonClass = 'moj-datepicker__button--current'\n this.todayButtonClass = 'moj-datepicker__button--today'\n\n this.setOptions()\n this.initControls()\n }\n\n initControls() {\n this.id = `datepicker-${this.$input.id}`\n\n this.$dialog = this.createDialog()\n this.createCalendarHeaders()\n\n const $componentWrapper = document.createElement('div')\n const $inputWrapper = document.createElement('div')\n $componentWrapper.classList.add('moj-datepicker__wrapper')\n $inputWrapper.classList.add('govuk-input__wrapper')\n\n this.$input.parentElement.insertBefore($componentWrapper, this.$input)\n $componentWrapper.appendChild($inputWrapper)\n $inputWrapper.appendChild(this.$input)\n\n $inputWrapper.insertAdjacentHTML('beforeend', this.toggleTemplate())\n $componentWrapper.insertAdjacentElement('beforeend', this.$dialog)\n\n this.$calendarButton = /** @type {HTMLButtonElement} */ (\n this.$root.querySelector('.moj-js-datepicker-toggle')\n )\n\n this.$dialogTitle = /** @type {HTMLHeadingElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-month-year')\n )\n\n this.createCalendar()\n\n this.$prevMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-month')\n )\n\n this.$prevYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-year')\n )\n\n this.$nextMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-month')\n )\n\n this.$nextYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-year')\n )\n\n this.$cancelButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-cancel')\n )\n\n this.$okButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-ok')\n )\n\n // add event listeners\n this.$prevMonthButton.addEventListener('click', (event) =>\n this.focusPreviousMonth(event, false)\n )\n this.$prevYearButton.addEventListener('click', (event) =>\n this.focusPreviousYear(event, false)\n )\n this.$nextMonthButton.addEventListener('click', (event) =>\n this.focusNextMonth(event, false)\n )\n this.$nextYearButton.addEventListener('click', (event) =>\n this.focusNextYear(event, false)\n )\n this.$cancelButton.addEventListener('click', (event) => {\n event.preventDefault()\n this.closeDialog()\n })\n this.$okButton.addEventListener('click', () => {\n this.selectDate(this.currentDate)\n })\n\n const $dialogButtons = this.$dialog.querySelectorAll(\n 'button:not([disabled=\"true\"])'\n )\n\n this.$firstButtonInDialog = $dialogButtons[0]\n this.$lastButtonInDialog = $dialogButtons[$dialogButtons.length - 1]\n this.$firstButtonInDialog.addEventListener('keydown', (event) =>\n this.firstButtonKeydown(event)\n )\n this.$lastButtonInDialog.addEventListener('keydown', (event) =>\n this.lastButtonKeydown(event)\n )\n\n this.$calendarButton.addEventListener('click', (event) =>\n this.toggleDialog(event)\n )\n\n this.$dialog.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') {\n this.closeDialog()\n event.preventDefault()\n event.stopPropagation()\n }\n })\n\n document.body.addEventListener('mouseup', (event) => {\n this.backgroundClick(event)\n })\n\n // populates calendar with initial dates, avoids Wave errors about null buttons\n this.updateCalendar()\n }\n\n createDialog() {\n const titleId = `datepicker-title-${this.$input.id}`\n const $dialog = document.createElement('div')\n\n $dialog.id = this.id\n $dialog.setAttribute('class', 'moj-datepicker__dialog')\n $dialog.setAttribute('role', 'dialog')\n $dialog.setAttribute('aria-modal', 'true')\n $dialog.setAttribute('aria-labelledby', titleId)\n $dialog.innerHTML = this.dialogTemplate(titleId)\n $dialog.hidden = true\n\n return $dialog\n }\n\n createCalendar() {\n const $tbody = this.$dialog.querySelector('tbody')\n let dayCount = 0\n for (let i = 0; i < 6; i++) {\n // create row\n const $row = $tbody.insertRow(i)\n\n for (let j = 0; j < 7; j++) {\n // create cell (day)\n const $cell = document.createElement('td')\n $row.appendChild($cell)\n const $dateButton = document.createElement('button')\n $dateButton.setAttribute('type', 'button')\n $cell.appendChild($dateButton)\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 type=\"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 type=\"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 type=\"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 type=\"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=\"application\" 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(Number(year), Number(month) - 1, Number(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 // move current date to the closest selectable date if it is out of range\n if (this.minDate && this.minDate > this.inputDate) {\n this.inputDate = new Date(this.minDate.getTime())\n }\n if (this.maxDate && this.maxDate < this.inputDate) {\n this.inputDate = new Date(this.maxDate.getTime())\n }\n if (this.minDate && this.maxDate && this.minDate > this.maxDate) {\n console.error('min date is after max date. No dates will be selectable')\n }\n\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 this.date = new Date()\n this.$button.addEventListener('keydown', this.keyPress.bind(this))\n this.$button.addEventListener('click', this.click.bind(this))\n }\n\n /**\n * @param {Date} day - the Date for the calendar day\n * @param {boolean} hidden - visibility of the day\n * @param {boolean} disabled - is the day selectable or excluded\n */\n update(day, hidden, disabled) {\n const label = day.getDate()\n let accessibleLabel = this.picker.formattedDateHuman(day)\n\n if (disabled) {\n this.$button.setAttribute('aria-disabled', 'true')\n accessibleLabel = `Excluded date, ${accessibleLabel}`\n } else {\n this.$button.removeAttribute('aria-disabled')\n }\n\n if (hidden) {\n this.$button.style.display = 'none'\n } else {\n this.$button.style.display = 'block'\n }\n this.$button.setAttribute(\n 'data-testid',\n this.picker.formattedDateFromDate(day)\n )\n\n this.$button.innerHTML = `<span class=\"govuk-visually-hidden\">${accessibleLabel}</span><span aria-hidden=\"true\">${label}</span>`\n this.date = new Date(day)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n click(event) {\n this.picker.goToDate(this.date)\n this.picker.selectDate(this.date)\n\n event.stopPropagation()\n event.preventDefault()\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n keyPress(event) {\n let calendarNavKey = true\n\n switch (event.key) {\n case 'ArrowLeft':\n this.picker.focusPreviousDay()\n break\n case 'ArrowRight':\n this.picker.focusNextDay()\n break\n case 'ArrowUp':\n this.picker.focusPreviousWeek()\n break\n case 'ArrowDown':\n this.picker.focusNextWeek()\n break\n case 'Home':\n this.picker.focusFirstDayOfWeek()\n break\n case 'End':\n this.picker.focusLastDayOfWeek()\n break\n case 'PageUp': {\n if (event.shiftKey) {\n this.picker.focusPreviousYear(event)\n } else {\n this.picker.focusPreviousMonth(event)\n }\n break\n }\n case 'PageDown': {\n if (event.shiftKey) {\n this.picker.focusNextYear(event)\n } else {\n this.picker.focusNextMonth(event)\n }\n break\n }\n default:\n calendarNavKey = false\n break\n }\n\n if (calendarNavKey) {\n event.preventDefault()\n event.stopPropagation()\n }\n }\n}\n\n/**\n * Date picker config\n *\n * @typedef {object} DatePickerConfig\n * @property {string} [excludedDates] - Dates that cannot be selected\n * @property {string} [excludedDays] - Days that cannot be selected\n * @property {boolean} [leadingZeros] - Whether to add leading zeroes when populating the field\n * @property {string} [minDate] - The earliest available date\n * @property {string} [maxDate] - The latest available date\n * @property {string} [weekStartDay] - First day of the week in calendar view\n * @property {object} [input] - Input config\n * @property {string} [input.selector] - Selector for the input element\n * @property {Element | null} [input.element] - HTML element for the input\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n"],"names":["isInitialised","$root","moduleName","HTMLElement","hasAttribute","isSupported","$scope","document","body","classList","contains","isArray","option","Array","isObject","formatErrorMessage","Component","message","GOVUKFrontendError","Error","constructor","args","name","SupportError","supportMessage","HTMLScriptElement","prototype","ConfigError","ElementError","messageOrOptions","component","identifier","element","expectedType","InitError","componentOrMessage","_$root","childConstructor","elementType","checkSupport","checkInitialised","setAttribute","configOverride","Symbol","for","ConfigurableComponent","param","config","_config","defaults","datasetConfig","normaliseDataset","dataset","mergeConfigs","normaliseString","value","property","trimmedValue","trim","output","outputType","type","includes","length","isFinite","Number","schema","out","entries","Object","properties","entry","namespace","field","toString","extractConfigByNamespace","configObjects","formattedConfigObject","configObject","key","keys","override","newObject","current","keyParts","split","index","DatePicker","_this$config$input$el","$input","input","querySelector","selector","HTMLInputElement","dayLabels","monthLabels","currentDate","Date","setHours","calendarDays","excludedDates","excludedDays","buttonClass","selectedDayButtonClass","currentDayButtonClass","todayButtonClass","setOptions","initControls","id","$dialog","createDialog","createCalendarHeaders","$componentWrapper","createElement","$inputWrapper","add","parentElement","insertBefore","appendChild","insertAdjacentHTML","toggleTemplate","insertAdjacentElement","$calendarButton","$dialogTitle","createCalendar","$prevMonthButton","$prevYearButton","$nextMonthButton","$nextYearButton","$cancelButton","$okButton","addEventListener","event","focusPreviousMonth","focusPreviousYear","focusNextMonth","focusNextYear","preventDefault","closeDialog","selectDate","$dialogButtons","querySelectorAll","$firstButtonInDialog","$lastButtonInDialog","firstButtonKeydown","lastButtonKeydown","toggleDialog","stopPropagation","backgroundClick","updateCalendar","titleId","innerHTML","dialogTemplate","hidden","$tbody","dayCount","i","$row","insertRow","j","$cell","$dateButton","calendarDay","DSCalendarDay","push","forEach","day","html","substring","$headerRow","leadingZeros","ret","setMinAndMaxDatesOnCalendar","setExcludedDates","setExcludedDays","setWeekStartDay","minDate","formattedDateFromString","maxDate","replace","map","item","parseDateRangeString","reduce","dates","items","concat","filter","date","datestring","startDate","endDate","d","getTime","setDate","getDate","weekDays","toLowerCase","weekStartDay","unshift","pop","indexOf","weekStartDayParam","isExcludedDate","excludedDate","toDateString","getDay","dateString","fallback","formattedDate","dateFormatPattern","test","match","exec","month","year","formattedDateFromDate","getMonth","getFullYear","formattedDateHuman","isOpen","target","Node","shiftKey","focus","firstOfMonth","dayOfWeek","thisDay","disabled","update","setCurrentDate","$button","remove","calendarDayDate","today","inputDate","removeAttribute","enabledDays","window","getComputedStyle","display","innerText","changeEvent","Event","bubbles","cancelable","dispatchEvent","openDialog","offsetWidth","style","right","top","offsetHeight","console","error","goToDate","focusNextDay","focusPreviousDay","focusNextWeek","focusPreviousWeek","focusFirstDayOfWeek","firstDayOfWeekIndex","diff","focusLastDayOfWeek","lastDayOfWeekIndex","setMonth","setFullYear","freeze","row","column","picker","keyPress","bind","click","label","accessibleLabel","calendarNavKey"],"mappings":"AAmFO,SAASA,aAAaA,CAACC,KAAK,EAAEC,UAAU,EAAE;EAC/C,OACED,KAAK,YAAYE,WAAW,IAC5BF,KAAK,CAACG,YAAY,CAAC,CAAA,KAAA,EAAQF,UAAU,CAAA,KAAA,CAAO,CAAC;AAEjD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,WAAWA,CAACC,MAAM,GAAGC,QAAQ,CAACC,IAAI,EAAE;EAClD,IAAI,CAACF,MAAM,EAAE;AACX,IAAA,OAAO,KAAK;AACd,EAAA;AAEA,EAAA,OAAOA,MAAM,CAACG,SAAS,CAACC,QAAQ,CAAC,0BAA0B,CAAC;AAC9D;AASA,SAASC,OAAOA,CAACC,MAAM,EAAE;AACvB,EAAA,OAAOC,KAAK,CAACF,OAAO,CAACC,MAAM,CAAC;AAC9B;AAUO,SAASE,QAAQA,CAACF,MAAM,EAAE;AAC/B,EAAA,OAAO,CAAC,CAACA,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAI,CAACD,OAAO,CAACC,MAAM,CAAC;AACnE;AAsBO,SAASG,kBAAkBA,CAACC,SAAS,EAAEC,OAAO,EAAE;AACrD,EAAA,OAAO,GAAGD,SAAS,CAACd,UAAU,CAAA,EAAA,EAAKe,OAAO,CAAA,CAAE;AAC9C;;AClIO,MAAMC,kBAAkB,SAASC,KAAK,CAAC;AAAAC,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA;IAAA,IAAA,CAC5CC,IAAI,GAAG,oBAAoB;AAAA,EAAA;AAC7B;AAKO,MAAMC,YAAY,SAASL,kBAAkB,CAAC;AAGnD;AACF;AACA;AACA;AACA;AACEE,EAAAA,WAAWA,CAACd,MAAM,GAAGC,QAAQ,CAACC,IAAI,EAAE;IAClC,MAAMgB,cAAc,GAClB,UAAU,IAAIC,iBAAiB,CAACC,SAAS,GACrC,gHAAgH,GAChH,kDAAkD;AAExD,IAAA,KAAK,CACHpB,MAAM,GACFkB,cAAc,GACd,8DACN,CAAC;IAAA,IAAA,CAjBHF,IAAI,GAAG,cAAc;AAkBrB,EAAA;AACF;AAKO,MAAMK,WAAW,SAAST,kBAAkB,CAAC;AAAAE,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;AAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA;IAAA,IAAA,CAClDC,IAAI,GAAG,aAAa;AAAA,EAAA;AACtB;AAKO,MAAMM,YAAY,SAASV,kBAAkB,CAAC;EAmBnDE,WAAWA,CAACS,gBAAgB,EAAE;IAC5B,IAAIZ,OAAO,GAAG,OAAOY,gBAAgB,KAAK,QAAQ,GAAGA,gBAAgB,GAAG,EAAE;AAG1E,IAAA,IAAIf,QAAQ,CAACe,gBAAgB,CAAC,EAAE;MAC9B,MAAM;QAAEC,SAAS;QAAEC,UAAU;QAAEC,OAAO;AAAEC,QAAAA;AAAa,OAAC,GAAGJ,gBAAgB;AAEzEZ,MAAAA,OAAO,GAAGc,UAAU;MAGpBd,OAAO,IAAIe,OAAO,GACd,CAAA,gBAAA,EAAmBC,YAAY,IAAA,IAAA,GAAZA,YAAY,GAAI,aAAa,CAAA,CAAE,GAClD,YAAY;AAGhB,MAAA,IAAIH,SAAS,EAAE;AACbb,QAAAA,OAAO,GAAGF,kBAAkB,CAACe,SAAS,EAAEb,OAAO,CAAC;AAClD,MAAA;AACF,IAAA;IAEA,KAAK,CAACA,OAAO,CAAC;IAAA,IAAA,CAtChBK,IAAI,GAAG,cAAc;AAuCrB,EAAA;AACF;AAKO,MAAMY,SAAS,SAAShB,kBAAkB,CAAC;EAOhDE,WAAWA,CAACe,kBAAkB,EAAE;AAC9B,IAAA,MAAMlB,OAAO,GACX,OAAOkB,kBAAkB,KAAK,QAAQ,GAClCA,kBAAkB,GAClBpB,kBAAkB,CAChBoB,kBAAkB,EAClB,8CACF,CAAC;IAEP,KAAK,CAAClB,OAAO,CAAC;IAAA,IAAA,CAfhBK,IAAI,GAAG,WAAW;AAgBlB,EAAA;AACF;;AClHO,MAAMN,SAAS,CAAC;AASrB;AACF;AACA;AACA;AACA;AACA;EACE,IAAIf,KAAKA,GAAG;IACV,OAAO,IAAI,CAACmC,MAAM;AACpB,EAAA;EAcAhB,WAAWA,CAACnB,KAAK,EAAE;AAAA,IAAA,IAAA,CARnBmC,MAAM,GAAA,MAAA;AASJ,IAAA,MAAMC,gBAAgB,GACpB,IAAI,CAACjB,WACN;AASD,IAAA,IAAI,OAAOiB,gBAAgB,CAACnC,UAAU,KAAK,QAAQ,EAAE;AACnD,MAAA,MAAM,IAAIgC,SAAS,CAAC,CAAA,uCAAA,CAAyC,CAAC;AAChE,IAAA;AAEA,IAAA,IAAI,EAAEjC,KAAK,YAAYoC,gBAAgB,CAACC,WAAW,CAAC,EAAE;MACpD,MAAM,IAAIV,YAAY,CAAC;AACrBI,QAAAA,OAAO,EAAE/B,KAAK;AACd6B,QAAAA,SAAS,EAAEO,gBAAgB;AAC3BN,QAAAA,UAAU,EAAE,wBAAwB;AACpCE,QAAAA,YAAY,EAAEI,gBAAgB,CAACC,WAAW,CAAChB;AAC7C,OAAC,CAAC;AACJ,IAAA,CAAC,MAAM;MACL,IAAI,CAACc,MAAM,GAAmCnC,KAAM;AACtD,IAAA;IAEAoC,gBAAgB,CAACE,YAAY,EAAE;IAE/B,IAAI,CAACC,gBAAgB,EAAE;AAEvB,IAAA,MAAMtC,UAAU,GAAGmC,gBAAgB,CAACnC,UAAU;IAE9C,IAAI,CAACD,KAAK,CAACwC,YAAY,CAAC,QAAQvC,UAAU,CAAA,KAAA,CAAO,EAAE,EAAE,CAAC;AACxD,EAAA;AAQAsC,EAAAA,gBAAgBA,GAAG;AACjB,IAAA,MAAMpB,WAAW,GAAyC,IAAI,CAACA,WAAY;AAC3E,IAAA,MAAMlB,UAAU,GAAGkB,WAAW,CAAClB,UAAU;IAEzC,IAAIA,UAAU,IAAIF,aAAa,CAAC,IAAI,CAACC,KAAK,EAAEC,UAAU,CAAC,EAAE;AACvD,MAAA,MAAM,IAAIgC,SAAS,CAACd,WAAW,CAAC;AAClC,IAAA;AACF,EAAA;EAOA,OAAOmB,YAAYA,GAAG;IACpB,IAAI,CAAClC,WAAW,EAAE,EAAE;MAClB,MAAM,IAAIkB,YAAY,EAAE;AAC1B,IAAA;AACF,EAAA;AACF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AArGaP,SAAS,CAIbsB,WAAW,GAAGnC,WAAW;;ACV3B,MAAMuC,cAAc,GAAGC,MAAM,CAACC,GAAG,CAAC,gBAAgB,CAAA;AAYlD,MAAMC,qBAAqB,SAAS7B,SAAS,CAAC;EAkBnD,CAAC0B,cAAc,CAAA,CAAEI,KAAK,EAAE;AACtB,IAAA,OAAO,EAAE;AACX,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACE,IAAIC,MAAMA,GAAG;IACX,OAAO,IAAI,CAACC,OAAO;AACrB,EAAA;AAeA5B,EAAAA,WAAWA,CAACnB,KAAK,EAAE8C,MAAM,EAAE;IACzB,KAAK,CAAC9C,KAAK,CAAC;AAAA,IAAA,IAAA,CAVd+C,OAAO,GAAA,MAAA;AAYL,IAAA,MAAMX,gBAAgB,GACqC,IAAI,CAACjB,WAAY;AAE5E,IAAA,IAAI,CAACN,QAAQ,CAACuB,gBAAgB,CAACY,QAAQ,CAAC,EAAE;MACxC,MAAM,IAAItB,WAAW,CACnBZ,kBAAkB,CAChBsB,gBAAgB,EAChB,qEACF,CACF,CAAC;AACH,IAAA;IAEA,MAAMa,aAAa,GACjBC,gBAAgB,CAACd,gBAAgB,EAAE,IAAI,CAACD,MAAM,CAACgB,OAAO,CACvD;IAED,IAAI,CAACJ,OAAO,GACVK,YAAY,CACVhB,gBAAgB,CAACY,QAAQ,EACzBF,MAAM,IAAA,IAAA,GAANA,MAAM,GAAI,EAAE,EACZ,IAAI,CAACL,cAAc,CAAC,CAACQ,aAAa,CAAC,EACnCA,aACF,CACD;AACH,EAAA;AACF;AAkBO,SAASI,eAAeA,CAACC,KAAK,EAAEC,QAAQ,EAAE;EAC/C,MAAMC,YAAY,GAAGF,KAAK,GAAGA,KAAK,CAACG,IAAI,EAAE,GAAG,EAAE;AAE9C,EAAA,IAAIC,MAAM;AACV,EAAA,IAAIC,UAAU,GAAGJ,QAAQ,IAAA,IAAA,GAAA,MAAA,GAARA,QAAQ,CAAEK,IAAI;EAG/B,IAAI,CAACD,UAAU,EAAE;IACf,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAACE,QAAQ,CAACL,YAAY,CAAC,EAAE;AAC5CG,MAAAA,UAAU,GAAG,SAAS;AACxB,IAAA;AAIA,IAAA,IAAIH,YAAY,CAACM,MAAM,GAAG,CAAC,IAAIC,QAAQ,CAACC,MAAM,CAACR,YAAY,CAAC,CAAC,EAAE;AAC7DG,MAAAA,UAAU,GAAG,QAAQ;AACvB,IAAA;AACF,EAAA;AAEA,EAAA,QAAQA,UAAU;AAChB,IAAA,KAAK,SAAS;MACZD,MAAM,GAAGF,YAAY,KAAK,MAAM;AAChC,MAAA;AAEF,IAAA,KAAK,QAAQ;AACXE,MAAAA,MAAM,GAAGM,MAAM,CAACR,YAAY,CAAC;AAC7B,MAAA;AAEF,IAAA;AACEE,MAAAA,MAAM,GAAGJ,KAAK;AAClB;AAEA,EAAA,OAAOI,MAAM;AACf;AAeO,SAASR,gBAAgBA,CAACnC,SAAS,EAAEoC,OAAO,EAAE;AACnD,EAAA,IAAI,CAACtC,QAAQ,CAACE,SAAS,CAACkD,MAAM,CAAC,EAAE;IAC/B,MAAM,IAAIvC,WAAW,CACnBZ,kBAAkB,CAChBC,SAAS,EACT,mEACF,CACF,CAAC;AACH,EAAA;EAEA,MAAMmD,GAAG,GAAgC,EAAG;EAC5C,MAAMC,OAAO,GACXC,MAAM,CAACD,OAAO,CAACpD,SAAS,CAACkD,MAAM,CAACI,UAAU,CAC3C;AAGD,EAAA,KAAK,MAAMC,KAAK,IAAIH,OAAO,EAAE;AAC3B,IAAA,MAAM,CAACI,SAAS,EAAEhB,QAAQ,CAAC,GAAGe,KAAK;AAGnC,IAAA,MAAME,KAAK,GAAGD,SAAS,CAACE,QAAQ,EAAE;IAElC,IAAID,KAAK,IAAIrB,OAAO,EAAE;AACpBe,MAAAA,GAAG,CAACM,KAAK,CAAC,GAAGnB,eAAe,CAACF,OAAO,CAACqB,KAAK,CAAC,EAAEjB,QAAQ,CAAC;AACxD,IAAA;IAMA,IAAI,CAAAA,QAAQ,IAAA,IAAA,GAAA,MAAA,GAARA,QAAQ,CAAEK,IAAI,MAAK,QAAQ,EAAE;AAC/BM,MAAAA,GAAG,CAACM,KAAK,CAAC,GAAGE,wBAAwB,CACnC3D,SAAS,CAACkD,MAAM,EAChBd,OAAO,EACPoB,SACF,CAAC;AACH,IAAA;AACF,EAAA;AAEA,EAAA,OAAOL,GAAG;AACZ;AAqDO,SAASd,YAAYA,CAAC,GAAGuB,aAAa,EAAE;EAG7C,MAAMC,qBAAqB,GAAG,EAAE;AAGhC,EAAA,KAAK,MAAMC,YAAY,IAAIF,aAAa,EAAE;IACxC,KAAK,MAAMG,GAAG,IAAIV,MAAM,CAACW,IAAI,CAACF,YAAY,CAAC,EAAE;AAC3C,MAAA,MAAMlE,MAAM,GAAGiE,qBAAqB,CAACE,GAAG,CAAC;AACzC,MAAA,MAAME,QAAQ,GAAGH,YAAY,CAACC,GAAG,CAAC;MAKlC,IAAIjE,QAAQ,CAACF,MAAM,CAAC,IAAIE,QAAQ,CAACmE,QAAQ,CAAC,EAAE;QAC1CJ,qBAAqB,CAACE,GAAG,CAAC,GAAG1B,YAAY,CAACzC,MAAM,EAAEqE,QAAQ,CAAC;AAC7D,MAAA,CAAC,MAAM;AAELJ,QAAAA,qBAAqB,CAACE,GAAG,CAAC,GAAGE,QAAQ;AACvC,MAAA;AACF,IAAA;AACF,EAAA;AAEA,EAAA,OAAOJ,qBAAqB;AAC9B;AAoDO,SAASF,wBAAwBA,CAACT,MAAM,EAAEd,OAAO,EAAEoB,SAAS,EAAE;AACnE,EAAA,MAAMhB,QAAQ,GAAGU,MAAM,CAACI,UAAU,CAACE,SAAS,CAAC;EAG7C,IAAI,CAAAhB,QAAQ,IAAA,IAAA,GAAA,MAAA,GAARA,QAAQ,CAAEK,IAAI,MAAK,QAAQ,EAAE;AAC/B,IAAA;AACF,EAAA;AAGA,EAAA,MAAMqB,SAAS,GAA0D;AACvE,IAAA,CAACV,SAAS,GAAG;AACb,GAAA;AAEF,EAAA,KAAK,MAAM,CAACO,GAAG,EAAExB,KAAK,CAAC,IAAIc,MAAM,CAACD,OAAO,CAAChB,OAAO,CAAC,EAAE;IAElD,IAAI+B,OAAO,GAAGD,SAAS;AAGvB,IAAA,MAAME,QAAQ,GAAGL,GAAG,CAACM,KAAK,CAAC,GAAG,CAAC;IAQ/B,KAAK,MAAM,CAACC,KAAK,EAAEhE,IAAI,CAAC,IAAI8D,QAAQ,CAAChB,OAAO,EAAE,EAAE;AAC9C,MAAA,IAAItD,QAAQ,CAACqE,OAAO,CAAC,EAAE;AAErB,QAAA,IAAIG,KAAK,GAAGF,QAAQ,CAACrB,MAAM,GAAG,CAAC,EAAE;UAE/B,IAAI,CAACjD,QAAQ,CAACqE,OAAO,CAAC7D,IAAI,CAAC,CAAC,EAAE;AAC5B6D,YAAAA,OAAO,CAAC7D,IAAI,CAAC,GAAG,EAAE;AACpB,UAAA;AAGA6D,UAAAA,OAAO,GAAGA,OAAO,CAAC7D,IAAI,CAAC;AACzB,QAAA,CAAC,MAAM,IAAIyD,GAAG,KAAKP,SAAS,EAAE;AAE5BW,UAAAA,OAAO,CAAC7D,IAAI,CAAC,GAAGgC,eAAe,CAACC,KAAK,CAAC;AACxC,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;EAEA,OAAO2B,SAAS,CAACV,SAAS,CAAC;AAC7B;;ACjXA;AACA;AACA;AACO,MAAMe,UAAU,SAAS1C,qBAAqB,CAAC;AACpD;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACnB,KAAK,EAAE8C,MAAM,GAAG,EAAE,EAAE;AAAA,IAAA,IAAAyC,qBAAA;AAC9B,IAAA,KAAK,CAACvF,KAAK,EAAE8C,MAAM,CAAC;IAEpB,MAAM0C,MAAM,GAAA,CAAAD,qBAAA,GACV,IAAI,CAACzC,MAAM,CAAC2C,KAAK,CAAC1D,OAAO,KAAA,IAAA,GAAAwD,qBAAA,GACzB,IAAI,CAACvF,KAAK,CAAC0F,aAAa,CAAC,IAAI,CAAC5C,MAAM,CAAC2C,KAAK,CAACE,QAAQ,CAAC;IAEtD,IAAI,CAACH,MAAM,IAAI,EAAEA,MAAM,YAAYI,gBAAgB,CAAC,EAAE;AACpD,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAACJ,MAAM,GAAGA,MAAM;AAEpB,IAAA,IAAI,CAACK,SAAS,GAAG,CACf,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,QAAQ,EACR,UAAU,EACV,QAAQ,CACT;IAED,IAAI,CAACC,WAAW,GAAG,CACjB,SAAS,EACT,UAAU,EACV,OAAO,EACP,OAAO,EACP,KAAK,EACL,MAAM,EACN,MAAM,EACN,QAAQ,EACR,WAAW,EACX,SAAS,EACT,UAAU,EACV,UAAU,CACX;AAED,IAAA,IAAI,CAACC,WAAW,GAAG,IAAIC,IAAI,EAAE;AAC7B,IAAA,IAAI,CAACD,WAAW,CAACE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACrC,IAAA,IAAI,CAACC,YAAY,iCAAmC,EAAG;AACvD,IAAA,IAAI,CAACC,aAAa,wBAA0B,EAAG;AAC/C,IAAA,IAAI,CAACC,YAAY,0BAA4B,EAAG;IAEhD,IAAI,CAACC,WAAW,GAAG,wBAAwB;IAC3C,IAAI,CAACC,sBAAsB,GAAG,kCAAkC;IAChE,IAAI,CAACC,qBAAqB,GAAG,iCAAiC;IAC9D,IAAI,CAACC,gBAAgB,GAAG,+BAA+B;IAEvD,IAAI,CAACC,UAAU,EAAE;IACjB,IAAI,CAACC,YAAY,EAAE;AACrB,EAAA;AAEAA,EAAAA,YAAYA,GAAG;IACb,IAAI,CAACC,EAAE,GAAG,CAAA,WAAA,EAAc,IAAI,CAACnB,MAAM,CAACmB,EAAE,CAAA,CAAE;AAExC,IAAA,IAAI,CAACC,OAAO,GAAG,IAAI,CAACC,YAAY,EAAE;IAClC,IAAI,CAACC,qBAAqB,EAAE;AAE5B,IAAA,MAAMC,iBAAiB,GAAGzG,QAAQ,CAAC0G,aAAa,CAAC,KAAK,CAAC;AACvD,IAAA,MAAMC,aAAa,GAAG3G,QAAQ,CAAC0G,aAAa,CAAC,KAAK,CAAC;AACnDD,IAAAA,iBAAiB,CAACvG,SAAS,CAAC0G,GAAG,CAAC,yBAAyB,CAAC;AAC1DD,IAAAA,aAAa,CAACzG,SAAS,CAAC0G,GAAG,CAAC,sBAAsB,CAAC;AAEnD,IAAA,IAAI,CAAC1B,MAAM,CAAC2B,aAAa,CAACC,YAAY,CAACL,iBAAiB,EAAE,IAAI,CAACvB,MAAM,CAAC;AACtEuB,IAAAA,iBAAiB,CAACM,WAAW,CAACJ,aAAa,CAAC;AAC5CA,IAAAA,aAAa,CAACI,WAAW,CAAC,IAAI,CAAC7B,MAAM,CAAC;IAEtCyB,aAAa,CAACK,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAACC,cAAc,EAAE,CAAC;IACpER,iBAAiB,CAACS,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAACZ,OAAO,CAAC;IAElE,IAAI,CAACa,eAAe;AAClB,IAAA,IAAI,CAACzH,KAAK,CAAC0F,aAAa,CAAC,2BAA2B,CACrD;IAED,IAAI,CAACgC,YAAY;AACf,IAAA,IAAI,CAACd,OAAO,CAAClB,aAAa,CAAC,+BAA+B,CAC3D;IAED,IAAI,CAACiC,cAAc,EAAE;IAErB,IAAI,CAACC,gBAAgB;AACnB,IAAA,IAAI,CAAChB,OAAO,CAAClB,aAAa,CAAC,+BAA+B,CAC3D;IAED,IAAI,CAACmC,eAAe;AAClB,IAAA,IAAI,CAACjB,OAAO,CAAClB,aAAa,CAAC,8BAA8B,CAC1D;IAED,IAAI,CAACoC,gBAAgB;AACnB,IAAA,IAAI,CAAClB,OAAO,CAAClB,aAAa,CAAC,+BAA+B,CAC3D;IAED,IAAI,CAACqC,eAAe;AAClB,IAAA,IAAI,CAACnB,OAAO,CAAClB,aAAa,CAAC,8BAA8B,CAC1D;IAED,IAAI,CAACsC,aAAa;AAChB,IAAA,IAAI,CAACpB,OAAO,CAAClB,aAAa,CAAC,2BAA2B,CACvD;IAED,IAAI,CAACuC,SAAS;AACZ,IAAA,IAAI,CAACrB,OAAO,CAAClB,aAAa,CAAC,uBAAuB,CACnD;;AAED;AACA,IAAA,IAAI,CAACkC,gBAAgB,CAACM,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IACpD,IAAI,CAACC,kBAAkB,CAACD,KAAK,EAAE,KAAK,CACtC,CAAC;AACD,IAAA,IAAI,CAACN,eAAe,CAACK,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IACnD,IAAI,CAACE,iBAAiB,CAACF,KAAK,EAAE,KAAK,CACrC,CAAC;AACD,IAAA,IAAI,CAACL,gBAAgB,CAACI,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IACpD,IAAI,CAACG,cAAc,CAACH,KAAK,EAAE,KAAK,CAClC,CAAC;AACD,IAAA,IAAI,CAACJ,eAAe,CAACG,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IACnD,IAAI,CAACI,aAAa,CAACJ,KAAK,EAAE,KAAK,CACjC,CAAC;IACD,IAAI,CAACH,aAAa,CAACE,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IAAK;MACtDA,KAAK,CAACK,cAAc,EAAE;MACtB,IAAI,CAACC,WAAW,EAAE;AACpB,IAAA,CAAC,CAAC;AACF,IAAA,IAAI,CAACR,SAAS,CAACC,gBAAgB,CAAC,OAAO,EAAE,MAAM;AAC7C,MAAA,IAAI,CAACQ,UAAU,CAAC,IAAI,CAAC3C,WAAW,CAAC;AACnC,IAAA,CAAC,CAAC;IAEF,MAAM4C,cAAc,GAAG,IAAI,CAAC/B,OAAO,CAACgC,gBAAgB,CAClD,+BACF,CAAC;AAED,IAAA,IAAI,CAACC,oBAAoB,GAAGF,cAAc,CAAC,CAAC,CAAC;IAC7C,IAAI,CAACG,mBAAmB,GAAGH,cAAc,CAACA,cAAc,CAAC7E,MAAM,GAAG,CAAC,CAAC;AACpE,IAAA,IAAI,CAAC+E,oBAAoB,CAACX,gBAAgB,CAAC,SAAS,EAAGC,KAAK,IAC1D,IAAI,CAACY,kBAAkB,CAACZ,KAAK,CAC/B,CAAC;AACD,IAAA,IAAI,CAACW,mBAAmB,CAACZ,gBAAgB,CAAC,SAAS,EAAGC,KAAK,IACzD,IAAI,CAACa,iBAAiB,CAACb,KAAK,CAC9B,CAAC;AAED,IAAA,IAAI,CAACV,eAAe,CAACS,gBAAgB,CAAC,OAAO,EAAGC,KAAK,IACnD,IAAI,CAACc,YAAY,CAACd,KAAK,CACzB,CAAC;IAED,IAAI,CAACvB,OAAO,CAACsB,gBAAgB,CAAC,SAAS,EAAGC,KAAK,IAAK;AAClD,MAAA,IAAIA,KAAK,CAACrD,GAAG,KAAK,QAAQ,EAAE;QAC1B,IAAI,CAAC2D,WAAW,EAAE;QAClBN,KAAK,CAACK,cAAc,EAAE;QACtBL,KAAK,CAACe,eAAe,EAAE;AACzB,MAAA;AACF,IAAA,CAAC,CAAC;IAEF5I,QAAQ,CAACC,IAAI,CAAC2H,gBAAgB,CAAC,SAAS,EAAGC,KAAK,IAAK;AACnD,MAAA,IAAI,CAACgB,eAAe,CAAChB,KAAK,CAAC;AAC7B,IAAA,CAAC,CAAC;;AAEF;IACA,IAAI,CAACiB,cAAc,EAAE;AACvB,EAAA;AAEAvC,EAAAA,YAAYA,GAAG;IACb,MAAMwC,OAAO,GAAG,CAAA,iBAAA,EAAoB,IAAI,CAAC7D,MAAM,CAACmB,EAAE,CAAA,CAAE;AACpD,IAAA,MAAMC,OAAO,GAAGtG,QAAQ,CAAC0G,aAAa,CAAC,KAAK,CAAC;AAE7CJ,IAAAA,OAAO,CAACD,EAAE,GAAG,IAAI,CAACA,EAAE;AACpBC,IAAAA,OAAO,CAACpE,YAAY,CAAC,OAAO,EAAE,wBAAwB,CAAC;AACvDoE,IAAAA,OAAO,CAACpE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AACtCoE,IAAAA,OAAO,CAACpE,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC;AAC1CoE,IAAAA,OAAO,CAACpE,YAAY,CAAC,iBAAiB,EAAE6G,OAAO,CAAC;IAChDzC,OAAO,CAAC0C,SAAS,GAAG,IAAI,CAACC,cAAc,CAACF,OAAO,CAAC;IAChDzC,OAAO,CAAC4C,MAAM,GAAG,IAAI;AAErB,IAAA,OAAO5C,OAAO;AAChB,EAAA;AAEAe,EAAAA,cAAcA,GAAG;IACf,MAAM8B,MAAM,GAAG,IAAI,CAAC7C,OAAO,CAAClB,aAAa,CAAC,OAAO,CAAC;IAClD,IAAIgE,QAAQ,GAAG,CAAC;IAChB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;AAC1B;AACA,MAAA,MAAMC,IAAI,GAAGH,MAAM,CAACI,SAAS,CAACF,CAAC,CAAC;MAEhC,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;AAC1B;AACA,QAAA,MAAMC,KAAK,GAAGzJ,QAAQ,CAAC0G,aAAa,CAAC,IAAI,CAAC;AAC1C4C,QAAAA,IAAI,CAACvC,WAAW,CAAC0C,KAAK,CAAC;AACvB,QAAA,MAAMC,WAAW,GAAG1J,QAAQ,CAAC0G,aAAa,CAAC,QAAQ,CAAC;AACpDgD,QAAAA,WAAW,CAACxH,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC1CuH,QAAAA,KAAK,CAAC1C,WAAW,CAAC2C,WAAW,CAAC;AAE9B,QAAA,MAAMC,WAAW,GAAG,IAAIC,aAAa,CAACF,WAAW,EAAEN,QAAQ,EAAEC,CAAC,EAAEG,CAAC,EAAE,IAAI,CAAC;AACxE,QAAA,IAAI,CAAC5D,YAAY,CAACiE,IAAI,CAACF,WAAW,CAAC;AACnCP,QAAAA,QAAQ,EAAE;AACZ,MAAA;AACF,IAAA;AACF,EAAA;AAEAnC,EAAAA,cAAcA,GAAG;IACf,OAAO,CAAA,oHAAA,EAAuH,IAAI,CAACZ,EAAE,CAAA;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAA,CAAoB;AAClB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACE4C,cAAcA,CAACF,OAAO,EAAE;IACtB,OAAO,CAAA;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,oBAAA,EAAsBA,OAAO,CAAA;;AAE7B;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,6GAAA,EAA+GA,OAAO,CAAA;AACtH;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,gBAAA,CAAiB;AACf,EAAA;AAEAvC,EAAAA,qBAAqBA,GAAG;AACtB,IAAA,IAAI,CAACjB,SAAS,CAACuE,OAAO,CAAEC,GAAG,IAAK;AAC9B,MAAA,MAAMC,IAAI,GAAG,CAAA,yCAAA,EAA4CD,GAAG,CAACE,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,2CAAA,EAA8CF,GAAG,CAAA,YAAA,CAAc;MAC3I,MAAMG,UAAU,GAAG,IAAI,CAAC5D,OAAO,CAAClB,aAAa,CAAC,YAAY,CAAC;AAC3D8E,MAAAA,UAAU,CAAClD,kBAAkB,CAAC,WAAW,EAAEgD,IAAI,CAAC;AAClD,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEG,EAAAA,YAAYA,CAACnH,KAAK,EAAEQ,MAAM,GAAG,CAAC,EAAE;AAC9B,IAAA,IAAI4G,GAAG,GAAGpH,KAAK,CAACmB,QAAQ,EAAE;AAE1B,IAAA,OAAOiG,GAAG,CAAC5G,MAAM,GAAGA,MAAM,EAAE;MAC1B4G,GAAG,GAAG,CAAA,CAAA,EAAIA,GAAG,CAAA,CAAE;AACjB,IAAA;AAEA,IAAA,OAAOA,GAAG;AACZ,EAAA;AAEAjE,EAAAA,UAAUA,GAAG;IACX,IAAI,CAACkE,2BAA2B,EAAE;IAClC,IAAI,CAACC,gBAAgB,EAAE;IACvB,IAAI,CAACC,eAAe,EAAE;IACtB,IAAI,CAACC,eAAe,EAAE;AACxB,EAAA;AAEAH,EAAAA,2BAA2BA,GAAG;AAC5B,IAAA,IAAI,IAAI,CAAC7H,MAAM,CAACiI,OAAO,EAAE;AACvB,MAAA,IAAI,CAACA,OAAO,GAAG,IAAI,CAACC,uBAAuB,CAAC,IAAI,CAAClI,MAAM,CAACiI,OAAO,EAAE,IAAI,CAAC;MACtE,IAAI,IAAI,CAACA,OAAO,IAAI,IAAI,CAAChF,WAAW,GAAG,IAAI,CAACgF,OAAO,EAAE;AACnD,QAAA,IAAI,CAAChF,WAAW,GAAG,IAAI,CAACgF,OAAO;AACjC,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,IAAI,CAACjI,MAAM,CAACmI,OAAO,EAAE;AACvB,MAAA,IAAI,CAACA,OAAO,GAAG,IAAI,CAACD,uBAAuB,CAAC,IAAI,CAAClI,MAAM,CAACmI,OAAO,EAAE,IAAI,CAAC;MACtE,IAAI,IAAI,CAACA,OAAO,IAAI,IAAI,CAAClF,WAAW,GAAG,IAAI,CAACkF,OAAO,EAAE;AACnD,QAAA,IAAI,CAAClF,WAAW,GAAG,IAAI,CAACkF,OAAO;AACjC,MAAA;AACF,IAAA;AACF,EAAA;AAEAL,EAAAA,gBAAgBA,GAAG;AACjB,IAAA,IAAI,IAAI,CAAC9H,MAAM,CAACqD,aAAa,EAAE;MAC7B,IAAI,CAACA,aAAa,GAAG,IAAI,CAACrD,MAAM,CAACqD,aAAa,CAC3C+E,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CACnB9F,KAAK,CAAC,GAAG,CAAC,CACV+F,GAAG,CAAEC,IAAI,IAAK;QACb,OAAOA,IAAI,CAACvH,QAAQ,CAAC,GAAG,CAAC,GACrB,IAAI,CAACwH,oBAAoB,CAACD,IAAI,CAAC,GAC/B,CAAC,IAAI,CAACJ,uBAAuB,CAACI,IAAI,CAAC,CAAC;MAC1C,CAAC,CAAC,CACDE,MAAM,CAAC,CAACC,KAAK,EAAEC,KAAK,KAAKD,KAAK,CAACE,MAAM,CAACD,KAAK,CAAC,CAAC,CAC7CE,MAAM,CAAEC,IAAI,IAAKA,IAAI,CAAC;AAC3B,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACEN,oBAAoBA,CAACO,UAAU,EAAE;IAC/B,MAAML,KAAK,GAAG,EAAE;IAChB,MAAM,CAACM,SAAS,EAAEC,OAAO,CAAC,GAAGF,UAAU,CACpCxG,KAAK,CAAC,GAAG,CAAC,CACV+F,GAAG,CAAEY,CAAC,IAAK,IAAI,CAACf,uBAAuB,CAACe,CAAC,EAAE,IAAI,CAAC,CAAC;IAEpD,IAAIF,SAAS,IAAIC,OAAO,EAAE;MACxB,MAAMH,IAAI,GAAG,IAAI3F,IAAI,CAAC6F,SAAS,CAACG,OAAO,EAAE,CAAC;AAC1C;MACA,OAAOL,IAAI,IAAIG,OAAO,EAAE;QACtBP,KAAK,CAACpB,IAAI,CAAC,IAAInE,IAAI,CAAC2F,IAAI,CAAC,CAAC;QAC1BA,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAClC,MAAA;AACA;AACF,IAAA;AACA,IAAA,OAAOX,KAAK;AACd,EAAA;AAEAV,EAAAA,eAAeA,GAAG;AAChB,IAAA,IAAI,IAAI,CAAC/H,MAAM,CAACsD,YAAY,EAAE;AAC5B;AACA;AACA,MAAA,MAAM+F,QAAQ,GAAG,IAAI,CAACtG,SAAS,CAACsF,GAAG,CAAEC,IAAI,IAAKA,IAAI,CAACgB,WAAW,EAAE,CAAC;AACjE,MAAA,IAAI,IAAI,CAACtJ,MAAM,CAACuJ,YAAY,KAAK,QAAQ,EAAE;QACzCF,QAAQ,CAACG,OAAO,CAACH,QAAQ,CAACI,GAAG,EAAE,CAAC;AAClC,MAAA;MAEA,IAAI,CAACnG,YAAY,GAAG,IAAI,CAACtD,MAAM,CAACsD,YAAY,CACzC8E,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CACnBkB,WAAW,EAAE,CACbhH,KAAK,CAAC,GAAG,CAAC,CACV+F,GAAG,CAAEC,IAAI,IAAKe,QAAQ,CAACK,OAAO,CAACpB,IAAI,CAAC,CAAC,CACrCM,MAAM,CAAEN,IAAI,IAAKA,IAAI,KAAK,EAAE,CAAC;AAClC,IAAA;AACF,EAAA;AAEAN,EAAAA,eAAeA,GAAG;AAChB,IAAA,MAAM2B,iBAAiB,GAAG,IAAI,CAAC3J,MAAM,CAACuJ,YAAY;IAClD,IAAII,iBAAiB,IAAIA,iBAAiB,CAACL,WAAW,EAAE,KAAK,QAAQ,EAAE;AACrE,MAAA,IAAI,CAACtJ,MAAM,CAACuJ,YAAY,GAAG,QAAQ;AACnC;AACA,MAAA,IAAI,CAACxG,SAAS,CAACyG,OAAO,CAAC,IAAI,CAACzG,SAAS,CAAC0G,GAAG,EAAE,CAAC;AAC9C,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAACzJ,MAAM,CAACuJ,YAAY,GAAG,QAAQ;AACrC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEK,cAAcA,CAACf,IAAI,EAAE;AACnB;AACA;IACA,IAAI,IAAI,CAACZ,OAAO,IAAI,IAAI,CAACA,OAAO,GAAGY,IAAI,EAAE;AACvC,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;IACA,IAAI,IAAI,CAACV,OAAO,IAAI,IAAI,CAACA,OAAO,GAAGU,IAAI,EAAE;AACvC,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,KAAK,MAAMgB,YAAY,IAAI,IAAI,CAACxG,aAAa,EAAE;MAC7C,IAAIwF,IAAI,CAACiB,YAAY,EAAE,KAAKD,YAAY,CAACC,YAAY,EAAE,EAAE;AACvD,QAAA,OAAO,IAAI;AACb,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,IAAI,CAACxG,YAAY,CAACvC,QAAQ,CAAC8H,IAAI,CAACkB,MAAM,EAAE,CAAC,EAAE;AAC7C,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,OAAO,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE7B,uBAAuBA,CAAC8B,UAAU,EAAEC,QAAQ,GAAG,IAAI/G,IAAI,EAAE,EAAE;IACzD,IAAIgH,aAAa,GAAG,IAAI;AACxB;IACA,MAAMC,iBAAiB,GAAG,sCAAsC;IAEhE,IAAI,CAACA,iBAAiB,CAACC,IAAI,CAACJ,UAAU,CAAC,EAAE,OAAOC,QAAQ;AAExD,IAAA,MAAMI,KAAK,GAAGF,iBAAiB,CAACG,IAAI,CAACN,UAAU,CAAC;AAChD,IAAA,MAAMzC,GAAG,GAAG8C,KAAK,CAAC,CAAC,CAAC;AACpB,IAAA,MAAME,KAAK,GAAGF,KAAK,CAAC,CAAC,CAAC;AACtB,IAAA,MAAMG,IAAI,GAAGH,KAAK,CAAC,CAAC,CAAC;IAErBH,aAAa,GAAG,IAAIhH,IAAI,CAAChC,MAAM,CAACsJ,IAAI,CAAC,EAAEtJ,MAAM,CAACqJ,KAAK,CAAC,GAAG,CAAC,EAAErJ,MAAM,CAACqG,GAAG,CAAC,CAAC;AACtE,IAAA,IACE2C,aAAa,YAAYhH,IAAI,IAC7BhC,MAAM,CAACD,QAAQ,CAACiJ,aAAa,CAAChB,OAAO,EAAE,CAAC,EACxC;AACA,MAAA,OAAOgB,aAAa;AACtB,IAAA;AACA,IAAA,OAAOD,QAAQ;AACjB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEQ,qBAAqBA,CAAC5B,IAAI,EAAE;AAC1B,IAAA,IAAI,IAAI,CAAC7I,MAAM,CAAC2H,YAAY,EAAE;AAC5B,MAAA,OAAO,CAAA,EAAG,IAAI,CAACA,YAAY,CAACkB,IAAI,CAACO,OAAO,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAACzB,YAAY,CAACkB,IAAI,CAAC6B,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI7B,IAAI,CAAC8B,WAAW,EAAE,CAAA,CAAE;AAC/G,IAAA;IAEA,OAAO,CAAA,EAAG9B,IAAI,CAACO,OAAO,EAAE,CAAA,CAAA,EAAIP,IAAI,CAAC6B,QAAQ,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI7B,IAAI,CAAC8B,WAAW,EAAE,CAAA,CAAE;AACzE,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEC,kBAAkBA,CAAC/B,IAAI,EAAE;AACvB,IAAA,OAAO,GAAG,IAAI,CAAC9F,SAAS,CAAC,CAAC8F,IAAI,CAACkB,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,IAAIlB,IAAI,CAACO,OAAO,EAAE,CAAA,CAAA,EAAI,IAAI,CAACpG,WAAW,CAAC6F,IAAI,CAAC6B,QAAQ,EAAE,CAAC,CAAA,CAAA,EAAI7B,IAAI,CAAC8B,WAAW,EAAE,CAAA,CAAE;AAClI,EAAA;;AAEA;AACF;AACA;EACEtE,eAAeA,CAAChB,KAAK,EAAE;IACrB,IACE,IAAI,CAACwF,MAAM,EAAE,IACbxF,KAAK,CAACyF,MAAM,YAAYC,IAAI,IAC5B,CAAC,IAAI,CAACjH,OAAO,CAACnG,QAAQ,CAAC0H,KAAK,CAACyF,MAAM,CAAC,IACpC,CAAC,IAAI,CAACpI,MAAM,CAAC/E,QAAQ,CAAC0H,KAAK,CAACyF,MAAM,CAAC,IACnC,CAAC,IAAI,CAACnG,eAAe,CAAChH,QAAQ,CAAC0H,KAAK,CAACyF,MAAM,CAAC,EAC5C;MACAzF,KAAK,CAACK,cAAc,EAAE;MACtB,IAAI,CAACC,WAAW,EAAE;AACpB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEM,kBAAkBA,CAACZ,KAAK,EAAE;IACxB,IAAIA,KAAK,CAACrD,GAAG,KAAK,KAAK,IAAIqD,KAAK,CAAC2F,QAAQ,EAAE;AACzC,MAAA,IAAI,CAAChF,mBAAmB,CAACiF,KAAK,EAAE;MAChC5F,KAAK,CAACK,cAAc,EAAE;AACxB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEQ,iBAAiBA,CAACb,KAAK,EAAE;IACvB,IAAIA,KAAK,CAACrD,GAAG,KAAK,KAAK,IAAI,CAACqD,KAAK,CAAC2F,QAAQ,EAAE;AAC1C,MAAA,IAAI,CAACjF,oBAAoB,CAACkF,KAAK,EAAE;MACjC5F,KAAK,CAACK,cAAc,EAAE;AACxB,IAAA;AACF,EAAA;;AAEA;AACAY,EAAAA,cAAcA,GAAG;IACf,IAAI,CAAC1B,YAAY,CAAC4B,SAAS,GAAG,CAAA,EAAG,IAAI,CAACxD,WAAW,CAAC,IAAI,CAACC,WAAW,CAACyH,QAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAACzH,WAAW,CAAC0H,WAAW,EAAE,CAAA,CAAE;AAElH,IAAA,MAAMpD,GAAG,GAAG,IAAI,CAACtE,WAAW;AAC5B,IAAA,MAAMiI,YAAY,GAAG,IAAIhI,IAAI,CAACqE,GAAG,CAACoD,WAAW,EAAE,EAAEpD,GAAG,CAACmD,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnE,IAAA,IAAIS,SAAS;AAEb,IAAA,IAAI,IAAI,CAACnL,MAAM,CAACuJ,YAAY,KAAK,QAAQ,EAAE;AACzC4B,MAAAA,SAAS,GAAGD,YAAY,CAACnB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAGmB,YAAY,CAACnB,MAAM,EAAE,GAAG,CAAC,CAAA;AACzE,IAAA,CAAC,MAAM;AACLoB,MAAAA,SAAS,GAAGD,YAAY,CAACnB,MAAM,EAAE;AACnC,IAAA;IAEAmB,YAAY,CAAC/B,OAAO,CAAC+B,YAAY,CAAC9B,OAAO,EAAE,GAAG+B,SAAS,CAAC;AAExD,IAAA,MAAMC,OAAO,GAAG,IAAIlI,IAAI,CAACgI,YAAY,CAAC;;AAEtC;AACA,IAAA,KAAK,MAAM/D,WAAW,IAAI,IAAI,CAAC/D,YAAY,EAAE;AAC3C,MAAA,MAAMsD,MAAM,GAAG0E,OAAO,CAACV,QAAQ,EAAE,KAAKnD,GAAG,CAACmD,QAAQ,EAAE;AACpD,MAAA,MAAMW,QAAQ,GAAG,IAAI,CAACzB,cAAc,CAACwB,OAAO,CAAC;MAE7CjE,WAAW,CAACmE,MAAM,CAACF,OAAO,EAAE1E,MAAM,EAAE2E,QAAQ,CAAC;MAE7CD,OAAO,CAACjC,OAAO,CAACiC,OAAO,CAAChC,OAAO,EAAE,GAAG,CAAC,CAAC;AACxC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACEmC,EAAAA,cAAcA,CAACN,KAAK,GAAG,IAAI,EAAE;IAC3B,MAAM;AAAEhI,MAAAA;AAAY,KAAC,GAAG,IAAI;AAC5B,IAAA,IAAI,CAACG,YAAY,CAACkE,OAAO,CAAEH,WAAW,IAAK;MACzCA,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC0G,GAAG,CAAC,wBAAwB,CAAC;MAC3D+C,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC0G,GAAG,CAAC,8BAA8B,CAAC;MACjE+C,WAAW,CAACqE,OAAO,CAAC9L,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;MAClDyH,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC+N,MAAM,CAAC,IAAI,CAACjI,sBAAsB,CAAC;AACjE,MAAA,MAAMkI,eAAe,GAAGvE,WAAW,CAAC0B,IAAI;MACxC6C,eAAe,CAACvI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEpC,MAAA,MAAMwI,KAAK,GAAG,IAAIzI,IAAI,EAAE;MACxByI,KAAK,CAACxI,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE1B,MAAA,IACEuI,eAAe,CAACxC,OAAO,EAAE,KACzBjG,WAAW,CAACiG,OAAO,EAAE,wCACrB;AACA,QAAA,IAAI+B,KAAK,EAAE;UACT9D,WAAW,CAACqE,OAAO,CAAC9L,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;AACjDyH,UAAAA,WAAW,CAACqE,OAAO,CAACP,KAAK,EAAE;UAC3B9D,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC0G,GAAG,CAAC,IAAI,CAACZ,sBAAsB,CAAC;AAChE,QAAA;AACF,MAAA;AAEA,MAAA,IACE,IAAI,CAACoI,SAAS,IACdF,eAAe,CAACxC,OAAO,EAAE,KAAK,IAAI,CAAC0C,SAAS,CAAC1C,OAAO,EAAE,EACtD;QACA/B,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC0G,GAAG,CAAC,IAAI,CAACX,qBAAqB,CAAC;QAC7D0D,WAAW,CAACqE,OAAO,CAAC9L,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;AAC1D,MAAA,CAAC,MAAM;QACLyH,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC+N,MAAM,CAAC,IAAI,CAAChI,qBAAqB,CAAC;AAChE0D,QAAAA,WAAW,CAACqE,OAAO,CAACK,eAAe,CAAC,cAAc,CAAC;AACrD,MAAA;MAEA,IAAIH,eAAe,CAACxC,OAAO,EAAE,KAAKyC,KAAK,CAACzC,OAAO,EAAE,EAAE;QACjD/B,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC0G,GAAG,CAAC,IAAI,CAACV,gBAAgB,CAAC;AAC1D,MAAA,CAAC,MAAM;QACLyD,WAAW,CAACqE,OAAO,CAAC9N,SAAS,CAAC+N,MAAM,CAAC,IAAI,CAAC/H,gBAAgB,CAAC;AAC7D,MAAA;AACF,IAAA,CAAC,CAAC;;AAEF;IACA,IAAI,CAACuH,KAAK,EAAE;MACV,MAAMa,WAAW,GAAG,IAAI,CAAC1I,YAAY,CAACwF,MAAM,CAAEzB,WAAW,IAAK;AAC5D,QAAA,OACE4E,MAAM,CAACC,gBAAgB,CAAC7E,WAAW,CAACqE,OAAO,CAAC,CAACS,OAAO,KAAK,OAAO,IAChE,CAAC9E,WAAW,CAACqE,OAAO,CAACH,QAAQ;AAEjC,MAAA,CAAC,CAAC;MAEFS,WAAW,CAAC,CAAC,CAAC,CAACN,OAAO,CAAC9L,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;MAEpD,IAAI,CAACuD,WAAW,GAAG6I,WAAW,CAAC,CAAC,CAAC,CAACjD,IAAI;AACxC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEjD,UAAUA,CAACiD,IAAI,EAAE;AACf,IAAA,IAAI,IAAI,CAACe,cAAc,CAACf,IAAI,CAAC,EAAE;AAC7B,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAAClE,eAAe,CAAC/B,aAAa,CAAC,MAAM,CAAC,CAACsJ,SAAS,GAClD,iCAAiC,IAAI,CAACtB,kBAAkB,CAAC/B,IAAI,CAAC,CAAA,CAAE;IAClE,IAAI,CAACnG,MAAM,CAAClC,KAAK,GAAG,IAAI,CAACiK,qBAAqB,CAAC5B,IAAI,CAAC;AAEpD,IAAA,MAAMsD,WAAW,GAAG,IAAIC,KAAK,CAAC,QAAQ,EAAE;AAAEC,MAAAA,OAAO,EAAE,IAAI;AAAEC,MAAAA,UAAU,EAAE;AAAK,KAAC,CAAC;AAC5E,IAAA,IAAI,CAAC5J,MAAM,CAAC6J,aAAa,CAACJ,WAAW,CAAC;IAEtC,IAAI,CAACxG,WAAW,EAAE;AACpB,EAAA;AAEAkF,EAAAA,MAAMA,GAAG;IACP,OAAO,IAAI,CAAC/G,OAAO,CAACpG,SAAS,CAACC,QAAQ,CAAC,8BAA8B,CAAC;AACxE,EAAA;;AAEA;AACF;AACA;EACEwI,YAAYA,CAACd,KAAK,EAAE;IAClBA,KAAK,CAACK,cAAc,EAAE;AACtB,IAAA,IAAI,IAAI,CAACmF,MAAM,EAAE,EAAE;MACjB,IAAI,CAAClF,WAAW,EAAE;AACpB,IAAA,CAAC,MAAM;MACL,IAAI,CAACkC,2BAA2B,EAAE;MAClC,IAAI,CAAC2E,UAAU,EAAE;AACnB,IAAA;AACF,EAAA;AAEAA,EAAAA,UAAUA,GAAG;AACX,IAAA,IAAI,CAAC1I,OAAO,CAAC4C,MAAM,GAAG,KAAK;IAC3B,IAAI,CAAC5C,OAAO,CAACpG,SAAS,CAAC0G,GAAG,CAAC,8BAA8B,CAAC;IAC1D,IAAI,CAACO,eAAe,CAACjF,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;;AAE1D;AACA;IACA,IAAI,IAAI,CAACgD,MAAM,CAAC+J,WAAW,GAAG,IAAI,CAAC3I,OAAO,CAAC2I,WAAW,EAAE;AACtD,MAAA,IAAI,CAAC3I,OAAO,CAAC4I,KAAK,CAACC,KAAK,GAAG,CAAA,GAAA,CAAK;AAClC,IAAA;AACA,IAAA,IAAI,CAAC7I,OAAO,CAAC4I,KAAK,CAACE,GAAG,GAAG,CAAA,EAAG,IAAI,CAAClK,MAAM,CAACmK,YAAY,GAAG,CAAC,CAAA,EAAA,CAAI;;AAE5D;AACA,IAAA,IAAI,CAACjB,SAAS,GAAG,IAAI,CAAC1D,uBAAuB,CAAC,IAAI,CAACxF,MAAM,CAAClC,KAAK,CAAC;AAChE;IACA,IAAI,IAAI,CAACyH,OAAO,IAAI,IAAI,CAACA,OAAO,GAAG,IAAI,CAAC2D,SAAS,EAAE;AACjD,MAAA,IAAI,CAACA,SAAS,GAAG,IAAI1I,IAAI,CAAC,IAAI,CAAC+E,OAAO,CAACiB,OAAO,EAAE,CAAC;AACnD,IAAA;IACA,IAAI,IAAI,CAACf,OAAO,IAAI,IAAI,CAACA,OAAO,GAAG,IAAI,CAACyD,SAAS,EAAE;AACjD,MAAA,IAAI,CAACA,SAAS,GAAG,IAAI1I,IAAI,CAAC,IAAI,CAACiF,OAAO,CAACe,OAAO,EAAE,CAAC;AACnD,IAAA;AACA,IAAA,IAAI,IAAI,CAACjB,OAAO,IAAI,IAAI,CAACE,OAAO,IAAI,IAAI,CAACF,OAAO,GAAG,IAAI,CAACE,OAAO,EAAE;AAC/D2E,MAAAA,OAAO,CAACC,KAAK,CAAC,yDAAyD,CAAC;AAC1E,IAAA;AAEA,IAAA,IAAI,CAAC9J,WAAW,GAAG,IAAI,CAAC2I,SAAS;AACjC,IAAA,IAAI,CAAC3I,WAAW,CAACE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAErC,IAAI,CAACmD,cAAc,EAAE;IACrB,IAAI,CAACiF,cAAc,EAAE;AACvB,EAAA;AAEA5F,EAAAA,WAAWA,GAAG;AACZ,IAAA,IAAI,CAAC7B,OAAO,CAAC4C,MAAM,GAAG,IAAI;IAC1B,IAAI,CAAC5C,OAAO,CAACpG,SAAS,CAAC+N,MAAM,CAAC,8BAA8B,CAAC;IAC7D,IAAI,CAAC9G,eAAe,CAACjF,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AAC3D,IAAA,IAAI,CAACiF,eAAe,CAACsG,KAAK,EAAE;AAC9B,EAAA;;AAEA;AACF;AACA;AACA;AACE+B,EAAAA,QAAQA,CAACnE,IAAI,EAAEoC,KAAK,EAAE;AACpB,IAAA,MAAM7I,OAAO,GAAG,IAAI,CAACa,WAAW;IAChC,IAAI,CAACA,WAAW,GAAG4F,IAAI;IAEvB,IACEzG,OAAO,CAACsI,QAAQ,EAAE,KAAK,IAAI,CAACzH,WAAW,CAACyH,QAAQ,EAAE,IAClDtI,OAAO,CAACuI,WAAW,EAAE,KAAK,IAAI,CAAC1H,WAAW,CAAC0H,WAAW,EAAE,EACxD;MACA,IAAI,CAACrE,cAAc,EAAE;AACvB,IAAA;AAEA,IAAA,IAAI,CAACiF,cAAc,CAACN,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACAgC,EAAAA,YAAYA,GAAG;IACb,MAAMpE,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvC4F,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC4D,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;AAEAqE,EAAAA,gBAAgBA,GAAG;IACjB,MAAMrE,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvC4F,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC4D,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;;AAEA;AACAsE,EAAAA,aAAaA,GAAG;IACd,MAAMtE,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvC4F,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC4D,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;AAEAuE,EAAAA,iBAAiBA,GAAG;IAClB,MAAMvE,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvC4F,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC4D,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;AAEAwE,EAAAA,mBAAmBA,GAAG;IACpB,MAAMxE,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC,IAAA,MAAMqK,mBAAmB,GAAG,IAAI,CAACtN,MAAM,CAACuJ,YAAY,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;AACzE,IAAA,MAAM4B,SAAS,GAAGtC,IAAI,CAACkB,MAAM,EAAE;AAC/B,IAAA,MAAMwD,IAAI,GACRpC,SAAS,IAAImC,mBAAmB,GAC5BnC,SAAS,GAAGmC,mBAAmB,GAC/B,CAAC,GAAGnC,SAAS;IAEnBtC,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAGmE,IAAI,CAAC;IACnC1E,IAAI,CAAC1F,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEzB,IAAA,IAAI,CAAC6J,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;AAEA2E,EAAAA,kBAAkBA,GAAG;IACnB,MAAM3E,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC,IAAA,MAAMwK,kBAAkB,GAAG,IAAI,CAACzN,MAAM,CAACuJ,YAAY,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;AACxE,IAAA,MAAM4B,SAAS,GAAGtC,IAAI,CAACkB,MAAM,EAAE;AAC/B,IAAA,MAAMwD,IAAI,GACRpC,SAAS,IAAIsC,kBAAkB,GAC3BA,kBAAkB,GAAGtC,SAAS,GAC9B,CAAC,GAAGA,SAAS;IAEnBtC,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAGmE,IAAI,CAAC;IACnC1E,IAAI,CAAC1F,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEzB,IAAA,IAAI,CAAC6J,QAAQ,CAACnE,IAAI,CAAC;AACrB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACErD,EAAAA,cAAcA,CAACH,KAAK,EAAE4F,KAAK,GAAG,IAAI,EAAE;IAClC5F,KAAK,CAACK,cAAc,EAAE;IACtB,MAAMmD,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC4F,IAAAA,IAAI,CAAC6E,QAAQ,CAAC7E,IAAI,CAAC6B,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACrC,IAAA,IAAI,CAACsC,QAAQ,CAACnE,IAAI,EAAEoC,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AACA;AACE3F,EAAAA,kBAAkBA,CAACD,KAAK,EAAE4F,KAAK,GAAG,IAAI,EAAE;IACtC5F,KAAK,CAACK,cAAc,EAAE;IACtB,MAAMmD,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC4F,IAAAA,IAAI,CAAC6E,QAAQ,CAAC7E,IAAI,CAAC6B,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACrC,IAAA,IAAI,CAACsC,QAAQ,CAACnE,IAAI,EAAEoC,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACExF,EAAAA,aAAaA,CAACJ,KAAK,EAAE4F,KAAK,GAAG,IAAI,EAAE;IACjC5F,KAAK,CAACK,cAAc,EAAE;IACtB,MAAMmD,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC4F,IAAAA,IAAI,CAAC8E,WAAW,CAAC9E,IAAI,CAAC8B,WAAW,EAAE,GAAG,CAAC,EAAE9B,IAAI,CAAC6B,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC5D,IAAA,IAAI,CAACsC,QAAQ,CAACnE,IAAI,EAAEoC,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AACA;AACE1F,EAAAA,iBAAiBA,CAACF,KAAK,EAAE4F,KAAK,GAAG,IAAI,EAAE;IACrC5F,KAAK,CAACK,cAAc,EAAE;IACtB,MAAMmD,IAAI,GAAG,IAAI3F,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC4F,IAAAA,IAAI,CAAC8E,WAAW,CAAC9E,IAAI,CAAC8B,WAAW,EAAE,GAAG,CAAC,EAAE9B,IAAI,CAAC6B,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC5D,IAAA,IAAI,CAACsC,QAAQ,CAACnE,IAAI,EAAEoC,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AAkCA;AAh0BazI,UAAU,CA+xBdrF,UAAU,GAAG,iBAAiB;AAErC;AACF;AACA;AACA;AACA;AAryBaqF,UAAU,CAsyBdtC,QAAQ,GAAGoB,MAAM,CAACsM,MAAM,CAAC;AAC9BjG,EAAAA,YAAY,EAAE,KAAK;AACnB4B,EAAAA,YAAY,EAAE,QAAQ;AACtB5G,EAAAA,KAAK,EAAE;AACLE,IAAAA,QAAQ,EAAE;AACZ;AACF,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AAlzBaL,UAAU,CAmzBdrB,MAAM,GAAGG,MAAM,CAACsM,MAAM,qBACL;AACpBrM,EAAAA,UAAU,EAAE;AACV8B,IAAAA,aAAa,EAAE;AAAEvC,MAAAA,IAAI,EAAE;KAAU;AACjCwC,IAAAA,YAAY,EAAE;AAAExC,MAAAA,IAAI,EAAE;KAAU;AAChC6G,IAAAA,YAAY,EAAE;AAAE7G,MAAAA,IAAI,EAAE;KAAW;AACjCqH,IAAAA,OAAO,EAAE;AAAErH,MAAAA,IAAI,EAAE;KAAU;AAC3BmH,IAAAA,OAAO,EAAE;AAAEnH,MAAAA,IAAI,EAAE;KAAU;AAC3ByI,IAAAA,YAAY,EAAE;AAAEzI,MAAAA,IAAI,EAAE;KAAU;AAChC6B,IAAAA,KAAK,EAAE;AAAE7B,MAAAA,IAAI,EAAE;AAAS;AAC1B;AACF,CACF,CAAC;AAGH,MAAMsG,aAAa,CAAC;AAClB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE/I,WAAWA,CAACmN,OAAO,EAAEjJ,KAAK,EAAEsL,GAAG,EAAEC,MAAM,EAAEC,MAAM,EAAE;IAC/C,IAAI,CAACxL,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACsL,GAAG,GAAGA,GAAG;IACd,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACtC,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACuC,MAAM,GAAGA,MAAM;AACpB,IAAA,IAAI,CAAClF,IAAI,GAAG,IAAI3F,IAAI,EAAE;AACtB,IAAA,IAAI,CAACsI,OAAO,CAACpG,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC4I,QAAQ,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClE,IAAA,IAAI,CAACzC,OAAO,CAACpG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC8I,KAAK,CAACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACE3C,EAAAA,MAAMA,CAAC/D,GAAG,EAAEb,MAAM,EAAE2E,QAAQ,EAAE;AAC5B,IAAA,MAAM8C,KAAK,GAAG5G,GAAG,CAAC6B,OAAO,EAAE;IAC3B,IAAIgF,eAAe,GAAG,IAAI,CAACL,MAAM,CAACnD,kBAAkB,CAACrD,GAAG,CAAC;AAEzD,IAAA,IAAI8D,QAAQ,EAAE;MACZ,IAAI,CAACG,OAAO,CAAC9L,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;MAClD0O,eAAe,GAAG,CAAA,eAAA,EAAkBA,eAAe,CAAA,CAAE;AACvD,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAAC5C,OAAO,CAACK,eAAe,CAAC,eAAe,CAAC;AAC/C,IAAA;AAEA,IAAA,IAAInF,MAAM,EAAE;AACV,MAAA,IAAI,CAAC8E,OAAO,CAACkB,KAAK,CAACT,OAAO,GAAG,MAAM;AACrC,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAACT,OAAO,CAACkB,KAAK,CAACT,OAAO,GAAG,OAAO;AACtC,IAAA;AACA,IAAA,IAAI,CAACT,OAAO,CAAC9L,YAAY,CACvB,aAAa,EACb,IAAI,CAACqO,MAAM,CAACtD,qBAAqB,CAAClD,GAAG,CACvC,CAAC;IAED,IAAI,CAACiE,OAAO,CAAChF,SAAS,GAAG,CAAA,oCAAA,EAAuC4H,eAAe,CAAA,gCAAA,EAAmCD,KAAK,CAAA,OAAA,CAAS;AAChI,IAAA,IAAI,CAACtF,IAAI,GAAG,IAAI3F,IAAI,CAACqE,GAAG,CAAC;AAC3B,EAAA;;AAEA;AACF;AACA;EACE2G,KAAKA,CAAC7I,KAAK,EAAE;IACX,IAAI,CAAC0I,MAAM,CAACf,QAAQ,CAAC,IAAI,CAACnE,IAAI,CAAC;IAC/B,IAAI,CAACkF,MAAM,CAACnI,UAAU,CAAC,IAAI,CAACiD,IAAI,CAAC;IAEjCxD,KAAK,CAACe,eAAe,EAAE;IACvBf,KAAK,CAACK,cAAc,EAAE;AACxB,EAAA;;AAEA;AACF;AACA;EACEsI,QAAQA,CAAC3I,KAAK,EAAE;IACd,IAAIgJ,cAAc,GAAG,IAAI;IAEzB,QAAQhJ,KAAK,CAACrD,GAAG;AACf,MAAA,KAAK,WAAW;AACd,QAAA,IAAI,CAAC+L,MAAM,CAACb,gBAAgB,EAAE;AAC9B,QAAA;AACF,MAAA,KAAK,YAAY;AACf,QAAA,IAAI,CAACa,MAAM,CAACd,YAAY,EAAE;AAC1B,QAAA;AACF,MAAA,KAAK,SAAS;AACZ,QAAA,IAAI,CAACc,MAAM,CAACX,iBAAiB,EAAE;AAC/B,QAAA;AACF,MAAA,KAAK,WAAW;AACd,QAAA,IAAI,CAACW,MAAM,CAACZ,aAAa,EAAE;AAC3B,QAAA;AACF,MAAA,KAAK,MAAM;AACT,QAAA,IAAI,CAACY,MAAM,CAACV,mBAAmB,EAAE;AACjC,QAAA;AACF,MAAA,KAAK,KAAK;AACR,QAAA,IAAI,CAACU,MAAM,CAACP,kBAAkB,EAAE;AAChC,QAAA;AACF,MAAA,KAAK,QAAQ;AAAE,QAAA;UACb,IAAInI,KAAK,CAAC2F,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC+C,MAAM,CAACxI,iBAAiB,CAACF,KAAK,CAAC;AACtC,UAAA,CAAC,MAAM;AACL,YAAA,IAAI,CAAC0I,MAAM,CAACzI,kBAAkB,CAACD,KAAK,CAAC;AACvC,UAAA;AACA,UAAA;AACF,QAAA;AACA,MAAA,KAAK,UAAU;AAAE,QAAA;UACf,IAAIA,KAAK,CAAC2F,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC+C,MAAM,CAACtI,aAAa,CAACJ,KAAK,CAAC;AAClC,UAAA,CAAC,MAAM;AACL,YAAA,IAAI,CAAC0I,MAAM,CAACvI,cAAc,CAACH,KAAK,CAAC;AACnC,UAAA;AACA,UAAA;AACF,QAAA;AACA,MAAA;AACEgJ,QAAAA,cAAc,GAAG,KAAK;AACtB,QAAA;AACJ;AAEA,IAAA,IAAIA,cAAc,EAAE;MAClBhJ,KAAK,CAACK,cAAc,EAAE;MACtBL,KAAK,CAACe,eAAe,EAAE;AACzB,IAAA;AACF,EAAA;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;","x_google_ignoreList":[0,1,2,3]}
@@ -269,8 +269,8 @@ class DatePicker extends ConfigurableComponent {
269
269
  }
270
270
  setExcludedDays() {
271
271
  if (this.config.excludedDays) {
272
- /* lowercase and arrange dayLabels to put indexOf sunday == 0 for comparison
273
- with getDay() function */
272
+ // lowercase and arrange dayLabels to put indexOf sunday == 0 for comparison
273
+ // with getDay() function
274
274
  const weekDays = this.dayLabels.map(item => item.toLowerCase());
275
275
  if (this.config.weekStartDay === 'monday') {
276
276
  weekDays.unshift(weekDays.pop());
@@ -296,6 +296,8 @@ class DatePicker extends ConfigurableComponent {
296
296
  * @returns {boolean}
297
297
  */
298
298
  isExcludedDate(date) {
299
+ // This comparison does not work correctly - it will exclude the mindate itself
300
+ // see: https://github.com/ministryofjustice/moj-frontend/issues/923
299
301
  if (this.minDate && this.minDate > date) {
300
302
  return true;
301
303
  }