@ministryofjustice/frontend 8.0.0 → 9.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/moj/all.bundle.js +1 -1
- package/moj/all.bundle.mjs +1 -1
- package/moj/all.bundle.mjs.map +1 -1
- package/moj/common/moj-frontend-version.mjs +1 -1
- package/moj/components/action-bar/_action-bar.scss +1 -1
- package/moj/components/action-bar/_action-bar.scss.map +1 -1
- package/moj/components/add-another/_add-another.scss +4 -4
- package/moj/components/add-another/_add-another.scss.map +1 -1
- package/moj/components/alert/_alert.scss +2 -2
- package/moj/components/alert/_alert.scss.map +1 -1
- package/moj/components/badge/_badge.scss +17 -7
- package/moj/components/badge/_badge.scss.map +1 -1
- package/moj/components/banner/_banner.scss +2 -2
- package/moj/components/banner/_banner.scss.map +1 -1
- package/moj/components/button-menu/_button-menu.scss +1 -1
- package/moj/components/button-menu/_button-menu.scss.map +1 -1
- package/moj/components/currency-input/_currency-input.scss +1 -1
- package/moj/components/currency-input/_currency-input.scss.map +1 -1
- package/moj/components/date-picker/_date-picker.scss +2 -1
- package/moj/components/date-picker/_date-picker.scss.map +1 -1
- package/moj/components/domain-specific/probation/footer/_footer.scss +2 -2
- package/moj/components/domain-specific/probation/footer/_footer.scss.map +1 -1
- package/moj/components/domain-specific/probation/header/_header.scss +11 -10
- package/moj/components/domain-specific/probation/header/_header.scss.map +1 -1
- package/moj/components/filter/_filter.scss +11 -11
- package/moj/components/filter/_filter.scss.map +1 -1
- package/moj/components/identity-bar/_identity-bar.scss +18 -6
- package/moj/components/identity-bar/_identity-bar.scss.map +1 -1
- package/moj/components/messages/_messages.scss +3 -3
- package/moj/components/messages/_messages.scss.map +1 -1
- package/moj/components/primary-navigation/_primary-navigation.scss +8 -7
- package/moj/components/primary-navigation/_primary-navigation.scss.map +1 -1
- package/moj/components/search-toggle/_search-toggle.scss +6 -6
- package/moj/components/search-toggle/_search-toggle.scss.map +1 -1
- package/moj/components/side-navigation/_side-navigation.scss +16 -16
- package/moj/components/side-navigation/_side-navigation.scss.map +1 -1
- package/moj/components/sortable-table/_sortable-table.scss +4 -4
- package/moj/components/sortable-table/_sortable-table.scss.map +1 -1
- package/moj/components/sub-navigation/_sub-navigation.scss +5 -5
- package/moj/components/sub-navigation/_sub-navigation.scss.map +1 -1
- package/moj/components/tag/_tag.scss +6 -6
- package/moj/components/tag/_tag.scss.map +1 -1
- package/moj/components/ticket-panel/_ticket-panel.scss +2 -2
- package/moj/components/ticket-panel/_ticket-panel.scss.map +1 -1
- package/moj/components/timeline/_timeline.scss +3 -3
- package/moj/components/timeline/_timeline.scss.map +1 -1
- package/moj/core/_moj-frontend-properties.scss +1 -1
- package/moj/core/_moj-frontend-properties.scss.map +1 -1
- package/moj/helpers/_links.scss +1 -1
- package/moj/helpers/_links.scss.map +1 -1
- package/moj/moj-frontend.min.css +1 -1
- package/moj/moj-frontend.min.css.map +1 -1
- package/moj/moj-frontend.min.js +1 -1
- package/moj/moj-frontend.min.js.map +1 -1
- package/moj/objects/_filter-layout.scss +1 -1
- package/moj/objects/_filter-layout.scss.map +1 -1
- package/moj/objects/_scrollable-pane.scss +4 -0
- package/moj/objects/_scrollable-pane.scss.map +1 -1
- package/moj/vendor/govuk-frontend/_base.scss +1 -5
- package/moj/vendor/govuk-frontend/_base.scss.map +1 -1
- package/package.json +2 -2
package/moj/all.bundle.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"all.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","../../node_modules/govuk-frontend/dist/govuk/init.mjs","../../src/moj/common/moj-frontend-version.mjs","../../src/moj/components/add-another/add-another.mjs","../../src/moj/common/index.mjs","../../src/moj/helpers.mjs","../../src/moj/components/alert/alert.mjs","../../src/moj/components/button-menu/button-menu.mjs","../../src/moj/components/date-picker/date-picker.mjs","../../src/moj/components/domain-specific/probation/header/header.mjs","../../src/moj/components/filter-toggle-button/filter-toggle-button.mjs","../../src/moj/components/form-validator/form-validator.mjs","../../src/moj/components/multi-file-upload/multi-file-upload.mjs","../../src/moj/components/multi-select/multi-select.mjs","../../src/moj/components/password-reveal/password-reveal.mjs","../../src/moj/components/rich-text-editor/rich-text-editor.mjs","../../src/moj/components/search-toggle/search-toggle.mjs","../../src/moj/components/sortable-table/sortable-table.mjs","../../src/moj/all.mjs"],"sourcesContent":["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 { normaliseOptions } from './common/configuration.mjs';\nimport { isSupported, isObject } from './common/index.mjs';\nimport { Accordion } from './components/accordion/accordion.mjs';\nimport { Button } from './components/button/button.mjs';\nimport { CharacterCount } from './components/character-count/character-count.mjs';\nimport { Checkboxes } from './components/checkboxes/checkboxes.mjs';\nimport { ErrorSummary } from './components/error-summary/error-summary.mjs';\nimport { ExitThisPage } from './components/exit-this-page/exit-this-page.mjs';\nimport { FileUpload } from './components/file-upload/file-upload.mjs';\nimport { Header } from './components/header/header.mjs';\nimport { NotificationBanner } from './components/notification-banner/notification-banner.mjs';\nimport { PasswordInput } from './components/password-input/password-input.mjs';\nimport { Radios } from './components/radios/radios.mjs';\nimport { ServiceNavigation } from './components/service-navigation/service-navigation.mjs';\nimport { SkipLink } from './components/skip-link/skip-link.mjs';\nimport { Tabs } from './components/tabs/tabs.mjs';\nimport { SupportError, ElementError } from './errors/index.mjs';\n\n/**\n * Initialise all components\n *\n * Use the `data-module` attributes to find, instantiate and init all of the\n * components provided as part of GOV.UK Frontend.\n *\n * @param {Config | Element | Document | null} [scopeOrConfig] - Scope of the document to search within or config for all components (with optional scope)\n */\nfunction initAll(scopeOrConfig = {}) {\n const config = isObject(scopeOrConfig) ? scopeOrConfig : {};\n const options = normaliseOptions(scopeOrConfig);\n try {\n if (!isSupported()) {\n throw new SupportError();\n }\n if (options.scope === null) {\n throw new ElementError({\n element: options.scope,\n identifier: 'GOV.UK Frontend scope element (`$scope`)'\n });\n }\n } catch (error) {\n if (options.onError) {\n options.onError(error, {\n config\n });\n } else {\n console.log(error);\n }\n return;\n }\n const components = [[Accordion, config.accordion], [Button, config.button], [CharacterCount, config.characterCount], [Checkboxes], [ErrorSummary, config.errorSummary], [ExitThisPage, config.exitThisPage], [FileUpload, config.fileUpload], [Header], [NotificationBanner, config.notificationBanner], [PasswordInput, config.passwordInput], [Radios], [ServiceNavigation], [SkipLink], [Tabs]];\n components.forEach(([Component, componentConfig]) => {\n createAll(Component, componentConfig, options);\n });\n}\n\n/**\n * Create all instances of a specific component on the page\n *\n * Uses the `data-module` attribute to find all elements matching the specified\n * component on the page, creating instances of the component object for each\n * of them.\n *\n * Any component errors will be caught and logged to the console.\n *\n * @template {CompatibleClass} ComponentClass\n * @param {ComponentClass} Component - class of the component to create\n * @param {ComponentConfig<ComponentClass>} [config] - Config supplied to component\n * @param {OnErrorCallback<ComponentClass> | Element | Document | null | CreateAllOptions<ComponentClass>} [scopeOrOptions] - options for createAll including scope of the document to search within and callback function if error throw by component on init\n * @returns {Array<InstanceType<ComponentClass>>} - array of instantiated components\n */\nfunction createAll(Component, config, scopeOrOptions) {\n let $elements;\n const options = normaliseOptions(scopeOrOptions);\n try {\n var _options$scope;\n if (!isSupported()) {\n throw new SupportError();\n }\n if (options.scope === null) {\n throw new ElementError({\n element: options.scope,\n component: Component,\n identifier: 'Scope element (`$scope`)'\n });\n }\n $elements = (_options$scope = options.scope) == null ? void 0 : _options$scope.querySelectorAll(`[data-module=\"${Component.moduleName}\"]`);\n } catch (error) {\n if (options.onError) {\n options.onError(error, {\n component: Component,\n config\n });\n } else {\n console.log(error);\n }\n return [];\n }\n return Array.from($elements != null ? $elements : []).map($element => {\n try {\n return typeof config !== 'undefined' ? new Component($element, config) : new Component($element);\n } catch (error) {\n if (options.onError) {\n options.onError(error, {\n element: $element,\n component: Component,\n config\n });\n } else {\n console.log(error);\n }\n return null;\n }\n }).filter(Boolean);\n}\n/**\n * @typedef {{new (...args: any[]): any, moduleName: string}} CompatibleClass\n */\n/**\n * Config for all components via `initAll()`\n *\n * @typedef {object} Config\n * @property {Element | Document | null} [scope] - Scope of the document to search within\n * @property {OnErrorCallback<CompatibleClass>} [onError] - Initialisation error callback\n * @property {AccordionConfig} [accordion] - Accordion config\n * @property {ButtonConfig} [button] - Button config\n * @property {CharacterCountConfig} [characterCount] - Character Count config\n * @property {ErrorSummaryConfig} [errorSummary] - Error Summary config\n * @property {ExitThisPageConfig} [exitThisPage] - Exit This Page config\n * @property {FileUploadConfig} [fileUpload] - File Upload config\n * @property {NotificationBannerConfig} [notificationBanner] - Notification Banner config\n * @property {PasswordInputConfig} [passwordInput] - Password input config\n */\n/**\n * Config for individual components\n *\n * @import { AccordionConfig } from './components/accordion/accordion.mjs'\n * @import { ButtonConfig } from './components/button/button.mjs'\n * @import { CharacterCountConfig } from './components/character-count/character-count.mjs'\n * @import { ErrorSummaryConfig } from './components/error-summary/error-summary.mjs'\n * @import { ExitThisPageConfig } from './components/exit-this-page/exit-this-page.mjs'\n * @import { NotificationBannerConfig } from './components/notification-banner/notification-banner.mjs'\n * @import { PasswordInputConfig } from './components/password-input/password-input.mjs'\n * @import { FileUploadConfig } from './components/file-upload/file-upload.mjs'\n */\n/**\n * Component config keys, e.g. `accordion` and `characterCount`\n *\n * @typedef {keyof Omit<Config, 'scope' | 'onError'>} ConfigKey\n */\n/**\n * @template {CompatibleClass} ComponentClass\n * @typedef {ConstructorParameters<ComponentClass>[1]} ComponentConfig\n */\n/**\n * @template {CompatibleClass} ComponentClass\n * @typedef {object} ErrorContext\n * @property {Element} [element] - Element used for component module initialisation\n * @property {ComponentClass} [component] - Class of component\n * @property {Config | ComponentConfig<ComponentClass>} [config] - Config supplied to components\n */\n/**\n * @template {CompatibleClass} ComponentClass\n * @callback OnErrorCallback\n * @param {unknown} error - Thrown error\n * @param {ErrorContext<ComponentClass>} context - Object containing the element, component class and configuration\n */\n/**\n * @template {CompatibleClass} ComponentClass\n * @typedef {object} CreateAllOptions\n * @property {Element | Document | null} [scope] - scope of the document to search within\n * @property {OnErrorCallback<ComponentClass>} [onError] - callback function if error throw by component on init\n */\n\nexport { createAll, initAll };\n//# sourceMappingURL=init.mjs.map\n","/*\n * This variable is automatically overwritten during builds and releases.\n * It doesn't need to be updated manually.\n */\n\n/**\n * MOJ Frontend release version\n *\n * {@link https://github.com/ministryofjustice/moj-frontend/releases}\n */\nexport const version = 'development'\n","import { Component } from 'govuk-frontend'\n\nexport class AddAnother extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for add another\n */\n constructor($root) {\n super($root)\n\n this.$root.addEventListener('click', this.onRemoveButtonClick.bind(this))\n this.$root.addEventListener('click', this.onAddButtonClick.bind(this))\n\n const $buttons = this.$root.querySelectorAll(\n '.moj-add-another__add-button, moj-add-another__remove-button'\n )\n\n $buttons.forEach(($button) => {\n if (!($button instanceof HTMLButtonElement)) {\n return\n }\n\n $button.type = 'button'\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onAddButtonClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-add-another__add-button')\n ) {\n return\n }\n\n const $items = this.getItems()\n const $item = this.getNewItem()\n\n if (!$item || !($item instanceof HTMLElement)) {\n return\n }\n\n this.updateAttributes($item, $items.length)\n this.resetItem($item)\n\n const $firstItem = $items[0]\n if (!this.hasRemoveButton($firstItem)) {\n this.createRemoveButton($firstItem)\n }\n\n $items[$items.length - 1].after($item)\n\n const $input = $item.querySelector('input, textarea, select')\n if ($input && $input instanceof HTMLInputElement) {\n $input.focus()\n }\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n hasRemoveButton($item) {\n return $item.querySelectorAll('.moj-add-another__remove-button').length\n }\n\n getItems() {\n if (!this.$root) {\n return []\n }\n\n const $items = Array.from(\n this.$root.querySelectorAll('.moj-add-another__item')\n )\n\n return $items.filter((item) => item instanceof HTMLElement)\n }\n\n getNewItem() {\n const $items = this.getItems()\n const $item = $items[0].cloneNode(true)\n\n if (!$item || !($item instanceof HTMLElement)) {\n return\n }\n\n if (!this.hasRemoveButton($item)) {\n this.createRemoveButton($item)\n }\n\n return $item\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n * @param {number} index - Add another item index\n */\n updateAttributes($item, index) {\n $item.querySelectorAll('[data-name]').forEach(($input) => {\n if (!this.isValidInputElement($input)) {\n return\n }\n\n const name = $input.getAttribute('data-name') || ''\n const id = $input.getAttribute('data-id') || ''\n const originalId = $input.id\n\n $input.name = name.replace(/%index%/, `${index}`)\n $input.id = id.replace(/%index%/, `${index}`)\n\n const $label =\n $input.parentElement.querySelector('label') ||\n $input.closest('label') ||\n $item.querySelector(`[for=\"${originalId}\"]`)\n\n if ($label && $label instanceof HTMLLabelElement) {\n $label.htmlFor = $input.id\n }\n })\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n createRemoveButton($item) {\n const $button = document.createElement('button')\n $button.type = 'button'\n\n $button.classList.add(\n 'govuk-button',\n 'govuk-button--secondary',\n 'moj-add-another__remove-button'\n )\n\n $button.textContent = 'Remove'\n\n $item.append($button)\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n resetItem($item) {\n $item.querySelectorAll('[data-name], [data-id]').forEach(($input) => {\n if (!this.isValidInputElement($input)) {\n return\n }\n\n if ($input instanceof HTMLSelectElement) {\n $input.selectedIndex = -1\n $input.value = ''\n } else if ($input instanceof HTMLTextAreaElement) {\n $input.value = ''\n } else {\n switch ($input.type) {\n case 'checkbox':\n case 'radio':\n $input.checked = false\n break\n default:\n $input.value = ''\n }\n }\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onRemoveButtonClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-add-another__remove-button')\n ) {\n return\n }\n\n $button.closest('.moj-add-another__item').remove()\n\n const $items = this.getItems()\n\n if ($items.length === 1) {\n $items[0].querySelector('.moj-add-another__remove-button').remove()\n }\n\n $items.forEach(($item, index) => {\n this.updateAttributes($item, index)\n })\n\n this.focusHeading()\n }\n\n focusHeading() {\n const $heading = this.$root.querySelector('.moj-add-another__heading')\n\n if ($heading && $heading instanceof HTMLElement) {\n $heading.focus()\n }\n }\n\n /**\n * @param {Element} $input - the input to validate\n */\n isValidInputElement($input) {\n return (\n $input instanceof HTMLInputElement ||\n $input instanceof HTMLSelectElement ||\n $input instanceof HTMLTextAreaElement\n )\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-add-another'\n}\n","/**\n * GOV.UK Frontend helpers\n *\n * @todo Import from GOV.UK Frontend\n */\n\n/**\n * Move focus to element\n *\n * Sets tabindex to -1 to make the element programmatically focusable,\n * but removes it on blur as the element doesn't need to be focused again.\n *\n * @template {HTMLElement} FocusElement\n * @param {FocusElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: FocusElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: FocusElement): void} [options.onBlur] - Callback on blur\n */\nexport function setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute('tabindex')\n\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1')\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener('blur', onBlur, { once: true })\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n options.onBlur?.call($element)\n\n if (!isFocusable) {\n $element.removeAttribute('tabindex')\n }\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener('focus', onFocus, { once: true })\n\n // Focus element\n options.onBeforeFocus?.call($element)\n $element.focus()\n}\n","/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n let re, m\n if ($element.getAttribute(attr)) {\n if ($element.getAttribute(attr) === value) {\n $element.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = $element.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n $element.setAttribute(\n attr,\n $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n let re\n if (!$element.getAttribute(attr)) {\n $element.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test($element.getAttribute(attr))) {\n $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n }\n }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return\n if (!$element || !($element instanceof HTMLElement) || !selector) {\n return\n }\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n","import { ConfigurableComponent } from 'govuk-frontend'\n\nimport { setFocus } from '../../common/index.mjs'\nimport {\n findNearestMatchingElement,\n getPreviousSibling\n} from '../../helpers.mjs'\n\n/**\n * @augments {ConfigurableComponent<AlertConfig>}\n */\nexport class Alert extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for alert\n * @param {AlertConfig} [config] - Alert config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n /**\n * Focus the alert\n *\n * If `role=\"alert\"` is set, focus the element to help some assistive\n * technologies prioritise announcing it.\n *\n * You can turn off the auto-focus functionality by setting\n * `data-disable-auto-focus=\"true\"` in the component HTML. You might wish to\n * do this based on user research findings, or to avoid a clash with another\n * element which should be focused when the page loads.\n */\n if (\n this.$root.getAttribute('role') === 'alert' &&\n !this.config.disableAutoFocus\n ) {\n setFocus(this.$root)\n }\n\n this.$dismissButton = this.$root.querySelector('.moj-alert__dismiss')\n\n if (this.config.dismissible && this.$dismissButton) {\n this.$dismissButton.innerHTML = this.config.dismissText\n this.$dismissButton.removeAttribute('hidden')\n\n this.$root.addEventListener('click', (event) => {\n if (\n event.target instanceof Node &&\n this.$dismissButton.contains(event.target)\n ) {\n this.dimiss()\n }\n })\n }\n }\n\n /**\n * Handle dismissing the alert\n */\n dimiss() {\n let $elementToRecieveFocus\n\n // If a selector has been provided, attempt to find that element\n if (this.config.focusOnDismissSelector) {\n $elementToRecieveFocus = document.querySelector(\n this.config.focusOnDismissSelector\n )\n }\n\n // Is the next sibling another alert\n if (!$elementToRecieveFocus) {\n const $nextSibling = this.$root.nextElementSibling\n if ($nextSibling && $nextSibling.matches('.moj-alert')) {\n $elementToRecieveFocus = $nextSibling\n }\n }\n\n // Else try to find any preceding sibling alert or heading\n if (!$elementToRecieveFocus) {\n $elementToRecieveFocus = getPreviousSibling(\n this.$root,\n '.moj-alert, h1, h2, h3, h4, h5, h6'\n )\n }\n\n // Else find the closest ancestor heading, or fallback to main, or last resort\n // use the body element\n if (!$elementToRecieveFocus) {\n $elementToRecieveFocus = findNearestMatchingElement(\n this.$root,\n 'h1, h2, h3, h4, h5, h6, main, body'\n )\n }\n\n // If we have an element, place focus on it\n if ($elementToRecieveFocus instanceof HTMLElement) {\n setFocus($elementToRecieveFocus)\n }\n\n // Remove the alert\n this.$root.remove()\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-alert'\n\n /**\n * Alert default config\n *\n * @type {AlertConfig}\n */\n static defaults = Object.freeze({\n dismissible: false,\n dismissText: 'Dismiss',\n disableAutoFocus: false\n })\n\n /**\n * Alert config schema\n *\n * @satisfies {Schema<AlertConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n dismissible: { type: 'boolean' },\n dismissText: { type: 'string' },\n disableAutoFocus: { type: 'boolean' },\n focusOnDismissSelector: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} AlertConfig\n * @property {boolean} [dismissible=false] - Can the alert be dismissed by the user\n * @property {string} [dismissText=Dismiss] - the label text for the dismiss button\n * @property {boolean} [disableAutoFocus=false] - whether the alert will be autofocused\n * @property {string} [focusOnDismissSelector] - CSS Selector for element to be focused on dismiss\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<ButtonMenuConfig>}\n */\nexport class ButtonMenu extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for button menu\n * @param {ButtonMenuConfig} [config] - Button menu config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n // If only one button is provided, don't initiate a menu and toggle button\n // if classes have been provided for the toggleButton, apply them to the single item\n if (this.$root.children.length === 1) {\n const $button = this.$root.children[0]\n\n $button.classList.forEach((className) => {\n if (className.startsWith('govuk-button-')) {\n $button.classList.remove(className)\n }\n\n $button.classList.remove('moj-button-menu__item')\n $button.classList.add('moj-button-menu__single-button')\n })\n\n if (this.config.buttonClasses) {\n $button.classList.add(...this.config.buttonClasses.split(' '))\n }\n }\n // Otherwise initialise a button menu\n if (this.$root.children.length > 1) {\n this.initMenu()\n }\n }\n\n initMenu() {\n this.$menu = this.createMenu()\n this.$root.insertAdjacentHTML('afterbegin', this.toggleTemplate())\n this.setupMenuItems()\n\n this.$menuToggle = this.$root.querySelector(':scope > button')\n this.$items = this.$menu.querySelectorAll('a, button')\n\n this.$menuToggle.addEventListener('click', (event) => {\n this.toggleMenu(event)\n })\n\n this.$root.addEventListener('keydown', (event) => {\n this.handleKeyDown(event)\n })\n\n document.addEventListener('click', (event) => {\n if (event.target instanceof Node && !this.$root.contains(event.target)) {\n this.closeMenu(false)\n }\n })\n }\n\n createMenu() {\n const $menu = document.createElement('ul')\n\n $menu.setAttribute('role', 'list')\n $menu.hidden = true\n $menu.classList.add('moj-button-menu__wrapper')\n\n if (this.config.alignMenu === 'right') {\n $menu.classList.add('moj-button-menu__wrapper--right')\n }\n\n this.$root.appendChild($menu)\n\n while (this.$root.firstChild !== $menu) {\n $menu.appendChild(this.$root.firstChild)\n }\n\n return $menu\n }\n\n setupMenuItems() {\n Array.from(this.$menu.children).forEach(($menuItem) => {\n // wrap item in li tag\n const $listItem = document.createElement('li')\n this.$menu.insertBefore($listItem, $menuItem)\n $listItem.appendChild($menuItem)\n\n $menuItem.setAttribute('tabindex', '-1')\n\n if ($menuItem.tagName === 'BUTTON') {\n $menuItem.setAttribute('type', 'button')\n }\n\n $menuItem.classList.forEach((className) => {\n if (className.startsWith('govuk-button')) {\n $menuItem.classList.remove(className)\n }\n })\n\n // add a slight delay after click before closing the menu, makes it *feel* better\n $menuItem.addEventListener('click', () => {\n setTimeout(() => {\n this.closeMenu(false)\n }, 50)\n })\n })\n }\n\n toggleTemplate() {\n return `\n <button type=\"button\" class=\"govuk-button moj-button-menu__toggle-button ${this.config.buttonClasses || ''}\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <span>\n ${this.config.buttonText}\n <svg width=\"11\" height=\"5\" viewBox=\"0 0 11 5\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.5 0L11 5L0 5L5.5 0Z\" fill=\"currentColor\"/>\n </svg>\n </span>\n </button>`\n }\n\n /**\n * @returns {boolean}\n */\n isOpen() {\n return this.$menuToggle.getAttribute('aria-expanded') === 'true'\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n toggleMenu(event) {\n event.preventDefault()\n\n // If menu is triggered with mouse don't move focus to first item\n const keyboardEvent = event.detail === 0\n const focusIndex = keyboardEvent ? 0 : -1\n\n if (this.isOpen()) {\n this.closeMenu()\n } else {\n this.openMenu(focusIndex)\n }\n }\n\n /**\n * Opens the menu and optionally sets the focus to the item with given index\n *\n * @param {number} focusIndex - The index of the item to focus\n */\n openMenu(focusIndex = 0) {\n this.$menu.hidden = false\n this.$menuToggle.setAttribute('aria-expanded', 'true')\n if (focusIndex !== -1) {\n this.focusItem(focusIndex)\n }\n }\n\n /**\n * Closes the menu and optionally returns focus back to menuToggle\n *\n * @param {boolean} moveFocus - whether to return focus to the toggle button\n */\n closeMenu(moveFocus = true) {\n this.$menu.hidden = true\n this.$menuToggle.setAttribute('aria-expanded', 'false')\n if (moveFocus) {\n this.$menuToggle.focus()\n }\n }\n\n /**\n * Focuses the menu item at the specified index\n *\n * @param {number} index - the index of the item to focus\n */\n focusItem(index) {\n if (index >= this.$items.length) index = 0\n if (index < 0) index = this.$items.length - 1\n\n const $menuItem = this.$items.item(index)\n if ($menuItem) {\n $menuItem.focus()\n }\n }\n\n currentFocusIndex() {\n const $activeElement = document.activeElement\n const $menuItems = Array.from(this.$items)\n\n return (\n ($activeElement instanceof HTMLAnchorElement ||\n $activeElement instanceof HTMLButtonElement) &&\n $menuItems.indexOf($activeElement)\n )\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n handleKeyDown(event) {\n if (event.target === this.$menuToggle) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n this.openMenu()\n break\n case 'ArrowUp':\n event.preventDefault()\n this.openMenu(this.$items.length - 1)\n break\n }\n }\n\n if (\n event.target instanceof Node &&\n this.$menu.contains(event.target) &&\n this.isOpen()\n ) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n if (this.currentFocusIndex() !== -1) {\n this.focusItem(this.currentFocusIndex() + 1)\n }\n break\n case 'ArrowUp':\n event.preventDefault()\n if (this.currentFocusIndex() !== -1) {\n this.focusItem(this.currentFocusIndex() - 1)\n }\n break\n case 'Home':\n event.preventDefault()\n this.focusItem(0)\n break\n case 'End':\n event.preventDefault()\n this.focusItem(this.$items.length - 1)\n break\n }\n }\n\n if (event.key === 'Escape' && this.isOpen()) {\n this.closeMenu()\n }\n if (event.key === 'Tab' && this.isOpen()) {\n this.closeMenu(false)\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-button-menu'\n\n /**\n * Button menu config\n *\n * @type {ButtonMenuConfig}\n */\n static defaults = Object.freeze({\n buttonText: 'Actions',\n alignMenu: 'left',\n buttonClasses: ''\n })\n\n /**\n * Button menu config schema\n *\n * @type {Schema<ButtonMenuConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n buttonText: { type: 'string' },\n buttonClasses: { type: 'string' },\n alignMenu: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} ButtonMenuConfig\n * @property {string} [buttonText='Actions'] - Label for the toggle button\n * @property {\"left\" | \"right\"} [alignMenu='left'] - the alignment of the menu\n * @property {string} [buttonClasses='govuk-button--secondary'] - css classes applied to the toggle button\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<DatePickerConfig>}\n */\nexport class DatePicker extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for date picker\n * @param {DatePickerConfig} [config] - Date picker config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $input =\n this.config.input.element ??\n this.$root.querySelector(this.config.input.selector)\n\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\n\n this.dayLabels = [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday'\n ]\n\n this.monthLabels = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n\n this.currentDate = new Date()\n this.currentDate.setHours(0, 0, 0, 0)\n this.calendarDays = /** @type {DSCalendarDay[]} */ ([])\n this.excludedDates = /** @type {Date[]} */ ([])\n this.excludedDays = /** @type {number[]} */ ([])\n\n this.buttonClass = 'moj-datepicker__button'\n this.selectedDayButtonClass = 'moj-datepicker__button--selected'\n this.currentDayButtonClass = 'moj-datepicker__button--current'\n this.todayButtonClass = 'moj-datepicker__button--today'\n\n this.setOptions()\n this.initControls()\n }\n\n initControls() {\n this.id = `datepicker-${this.$input.id}`\n\n this.$dialog = this.createDialog()\n this.createCalendarHeaders()\n\n const $componentWrapper = document.createElement('div')\n const $inputWrapper = document.createElement('div')\n $componentWrapper.classList.add('moj-datepicker__wrapper')\n $inputWrapper.classList.add('govuk-input__wrapper')\n\n this.$input.parentElement.insertBefore($componentWrapper, this.$input)\n $componentWrapper.appendChild($inputWrapper)\n $inputWrapper.appendChild(this.$input)\n\n $inputWrapper.insertAdjacentHTML('beforeend', this.toggleTemplate())\n $componentWrapper.insertAdjacentElement('beforeend', this.$dialog)\n\n this.$calendarButton = /** @type {HTMLButtonElement} */ (\n this.$root.querySelector('.moj-js-datepicker-toggle')\n )\n\n this.$dialogTitle = /** @type {HTMLHeadingElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-month-year')\n )\n\n this.createCalendar()\n\n this.$prevMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-month')\n )\n\n this.$prevYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-year')\n )\n\n this.$nextMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-month')\n )\n\n this.$nextYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-year')\n )\n\n this.$cancelButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-cancel')\n )\n\n this.$okButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-ok')\n )\n\n // add event listeners\n this.$prevMonthButton.addEventListener('click', (event) =>\n this.focusPreviousMonth(event, false)\n )\n this.$prevYearButton.addEventListener('click', (event) =>\n this.focusPreviousYear(event, false)\n )\n this.$nextMonthButton.addEventListener('click', (event) =>\n this.focusNextMonth(event, false)\n )\n this.$nextYearButton.addEventListener('click', (event) =>\n this.focusNextYear(event, false)\n )\n this.$cancelButton.addEventListener('click', (event) => {\n event.preventDefault()\n this.closeDialog()\n })\n this.$okButton.addEventListener('click', () => {\n this.selectDate(this.currentDate)\n })\n\n const $dialogButtons = this.$dialog.querySelectorAll(\n 'button:not([disabled=\"true\"])'\n )\n\n this.$firstButtonInDialog = $dialogButtons[0]\n this.$lastButtonInDialog = $dialogButtons[$dialogButtons.length - 1]\n this.$firstButtonInDialog.addEventListener('keydown', (event) =>\n this.firstButtonKeydown(event)\n )\n this.$lastButtonInDialog.addEventListener('keydown', (event) =>\n this.lastButtonKeydown(event)\n )\n\n this.$calendarButton.addEventListener('click', (event) =>\n this.toggleDialog(event)\n )\n\n this.$dialog.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') {\n this.closeDialog()\n event.preventDefault()\n event.stopPropagation()\n }\n })\n\n document.body.addEventListener('mouseup', (event) => {\n this.backgroundClick(event)\n })\n\n // populates calendar with initial dates, avoids Wave errors about null buttons\n this.updateCalendar()\n }\n\n createDialog() {\n const titleId = `datepicker-title-${this.$input.id}`\n const $dialog = document.createElement('div')\n\n $dialog.id = this.id\n $dialog.setAttribute('class', 'moj-datepicker__dialog')\n $dialog.setAttribute('role', 'dialog')\n $dialog.setAttribute('aria-modal', 'true')\n $dialog.setAttribute('aria-labelledby', titleId)\n $dialog.innerHTML = this.dialogTemplate(titleId)\n $dialog.hidden = true\n\n return $dialog\n }\n\n createCalendar() {\n const $tbody = this.$dialog.querySelector('tbody')\n let dayCount = 0\n for (let i = 0; i < 6; i++) {\n // create row\n const $row = $tbody.insertRow(i)\n\n for (let j = 0; j < 7; j++) {\n // create cell (day)\n const $cell = document.createElement('td')\n $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","import { Component } from 'govuk-frontend'\n\nexport class PdsHeader extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for PDS header\n */\n constructor($root) {\n super($root)\n this.initHeader()\n }\n\n initHeader() {\n this.$tabOpenClass = 'probation-common-header__toggle-open'\n const $userToggle = this.$root.querySelector(\n '.probation-common-header__user-menu-toggle'\n )\n const $userMenu = this.$root.querySelector(\n '#probation-common-header-user-menu'\n )\n\n const $servicesToggle = this.$root.querySelector(\n '.probation-common-header__services-menu-toggle'\n )\n\n const $servicesMenu = this.$root.querySelector(\n '#probation-common-header-services-menu'\n )\n\n if (\n !$userToggle ||\n !$userMenu ||\n !$servicesToggle ||\n !$servicesMenu ||\n !($userToggle instanceof HTMLElement) ||\n !($userMenu instanceof HTMLElement) ||\n !($servicesToggle instanceof HTMLElement) ||\n !($servicesMenu instanceof HTMLElement)\n ) {\n return 0\n }\n\n this.hideFallbackLinks()\n $userToggle.removeAttribute('hidden')\n $servicesToggle.removeAttribute('hidden')\n\n this.closeTabs([\n [$userToggle, $userMenu],\n [$servicesToggle, $servicesMenu]\n ])\n\n $userToggle.addEventListener('click', (_event) => {\n this.closeTabs([[$servicesToggle, $servicesMenu]])\n this.toggleMenu($userToggle, $userMenu)\n })\n\n $servicesToggle.addEventListener('click', (_event) => {\n this.closeTabs([[$userToggle, $userMenu]])\n this.toggleMenu($servicesToggle, $servicesMenu)\n })\n }\n\n /**\n * @param {[any, any][]} tabTuples\n */\n closeTabs(tabTuples) {\n tabTuples.forEach(([toggle, menu]) => {\n if (menu && toggle) {\n menu.setAttribute('hidden', 'hidden')\n toggle.classList.remove(this.$tabOpenClass)\n toggle.parentElement.classList.remove('item-open')\n toggle.setAttribute('aria-expanded', 'false')\n if (toggle.dataset.textForShow)\n toggle.setAttribute('aria-label', toggle.dataset.textForShow)\n }\n })\n }\n\n /**\n * @param {HTMLElement} toggle\n * @param {HTMLElement} menu\n */\n toggleMenu(toggle, menu) {\n const isOpen = !menu.getAttribute('hidden')\n\n if (isOpen) {\n this.closeTabs([[toggle, menu]])\n } else if (menu && toggle) {\n menu.removeAttribute('hidden')\n toggle.classList.add(this.$tabOpenClass)\n toggle.parentElement.classList.add('item-open')\n toggle.setAttribute('aria-expanded', 'true')\n if (toggle.dataset.textForHide)\n toggle.setAttribute('aria-label', toggle.dataset.textForHide)\n }\n }\n\n hideFallbackLinks() {\n const $userLink = this.$root.querySelector(\n '.probation-common-header__user-menu-link'\n )\n const $servicesLink = this.$root.querySelector(\n '.probation-common-header__services-menu-link'\n )\n if ($userLink) $userLink.setAttribute('hidden', 'hidden')\n if ($servicesLink) $servicesLink.setAttribute('hidden', 'hidden')\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'pds-header'\n}\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<FilterToggleButtonConfig>}\n */\nexport class FilterToggleButton extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for filter toggle button\n * @param {FilterToggleButtonConfig} [config] - Filter toggle button config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $toggleButtonContainer =\n this.config.toggleButtonContainer.element ??\n document.querySelector(this.config.toggleButtonContainer.selector)\n\n const $closeButtonContainer =\n this.config.closeButtonContainer.element ??\n this.$root.querySelector(this.config.closeButtonContainer.selector)\n\n if (\n !(\n $toggleButtonContainer instanceof HTMLElement &&\n $closeButtonContainer instanceof HTMLElement\n )\n ) {\n return this\n }\n\n this.$toggleButtonContainer = $toggleButtonContainer\n this.$closeButtonContainer = $closeButtonContainer\n\n this.createToggleButton()\n this.setupResponsiveChecks()\n\n this.$root.setAttribute('tabindex', '-1')\n\n if (this.config.startHidden) {\n this.hideMenu()\n }\n }\n\n setupResponsiveChecks() {\n this.mq = window.matchMedia(this.config.bigModeMediaQuery)\n this.mq.addListener(this.checkMode.bind(this))\n this.checkMode()\n }\n\n createToggleButton() {\n this.$menuButton = document.createElement('button')\n this.$menuButton.setAttribute('type', 'button')\n this.$menuButton.setAttribute('aria-haspopup', 'true')\n this.$menuButton.setAttribute('aria-expanded', 'false')\n\n this.$menuButton.className = `govuk-button ${this.config.toggleButton.classes}`\n this.$menuButton.textContent = this.config.toggleButton.showText\n\n this.$menuButton.addEventListener(\n 'click',\n this.onMenuButtonClick.bind(this)\n )\n\n this.$toggleButtonContainer.append(this.$menuButton)\n }\n\n checkMode() {\n if (this.mq.matches) {\n this.enableBigMode()\n } else {\n this.enableSmallMode()\n }\n }\n\n enableBigMode() {\n this.showMenu()\n this.removeCloseButton()\n }\n\n enableSmallMode() {\n this.hideMenu()\n this.addCloseButton()\n }\n\n addCloseButton() {\n this.$closeButton = document.createElement('button')\n this.$closeButton.setAttribute('type', 'button')\n\n this.$closeButton.className = this.config.closeButton.classes\n this.$closeButton.textContent = this.config.closeButton.text\n\n this.$closeButton.addEventListener('click', this.onCloseClick.bind(this))\n this.$closeButtonContainer.append(this.$closeButton)\n }\n\n onCloseClick() {\n this.hideMenu()\n this.$menuButton.focus()\n }\n\n removeCloseButton() {\n if (this.$closeButton) {\n this.$closeButton.remove()\n this.$closeButton = null\n }\n }\n\n hideMenu() {\n this.$menuButton.setAttribute('aria-expanded', 'false')\n this.$root.classList.add('moj-js-hidden')\n this.$menuButton.textContent = this.config.toggleButton.showText\n }\n\n showMenu() {\n this.$menuButton.setAttribute('aria-expanded', 'true')\n this.$root.classList.remove('moj-js-hidden')\n this.$menuButton.textContent = this.config.toggleButton.hideText\n }\n\n onMenuButtonClick() {\n this.toggle()\n }\n\n toggle() {\n if (this.$menuButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n this.$root.focus()\n } else {\n this.hideMenu()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-filter'\n\n /**\n * Filter toggle button config\n *\n * @type {FilterToggleButtonConfig}\n */\n static defaults = Object.freeze({\n bigModeMediaQuery: '(min-width: 48.0625em)',\n startHidden: true,\n toggleButton: {\n showText: 'Show filter',\n hideText: 'Hide filter',\n classes: 'govuk-button--secondary'\n },\n toggleButtonContainer: {\n selector: '.moj-action-bar__filter'\n },\n closeButton: {\n text: 'Close',\n classes: 'moj-filter__close'\n },\n closeButtonContainer: {\n selector: '.moj-filter__header-action'\n }\n })\n\n /**\n * Filter toggle button config schema\n *\n * @satisfies {Schema<FilterToggleButtonConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n bigModeMediaQuery: { type: 'string' },\n startHidden: { type: 'boolean' },\n toggleButton: { type: 'object' },\n toggleButtonContainer: { type: 'object' },\n closeButton: { type: 'object' },\n closeButtonContainer: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} FilterToggleButtonConfig\n * @property {string} [bigModeMediaQuery] - Media query for big mode\n * @property {boolean} [startHidden] - Whether to start hidden\n * @property {object} [toggleButton] - Toggle button config\n * @property {string} [toggleButton.showText] - Text for show button\n * @property {string} [toggleButton.hideText] - Text for hide button\n * @property {string} [toggleButton.classes] - Classes for toggle button\n * @property {object} [toggleButtonContainer] - Toggle button container config\n * @property {string} [toggleButtonContainer.selector] - Selector for toggle button container\n * @property {Element | null} [toggleButtonContainer.element] - HTML element for toggle button container\n * @property {object} [closeButton] - Close button config\n * @property {string} [closeButton.text] - Text for close button\n * @property {string} [closeButton.classes] - Classes for close button\n * @property {object} [closeButtonContainer] - Close button container config\n * @property {string} [closeButtonContainer.selector] - Selector for close button container\n * @property {Element | null} [closeButtonContainer.element] - HTML element for close button container\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\nimport { addAttributeValue, removeAttributeValue } from '../../helpers.mjs'\n\n/**\n * @augments {ConfigurableComponent<FormValidatorConfig, HTMLFormElement>}\n */\nexport class FormValidator extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for form validator\n * @param {FormValidatorConfig} [config] - Form validator config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $summary =\n this.config.summary.element ||\n document.querySelector(this.config.summary.selector)\n\n if (!$summary || !($summary instanceof HTMLElement)) {\n return this\n }\n\n this.$summary = $summary\n\n this.errors = /** @type {ValidationError[]} */ ([])\n this.validators = /** @type {Validator[]} */ ([])\n this.originalTitle = document.title\n\n this.$root.addEventListener('submit', this.onSubmit.bind(this))\n }\n\n escapeHtml(string = '') {\n return String(string).replace(\n /[&<>\"'`=/]/g,\n (name) => FormValidator.entityMap[name]\n )\n }\n\n resetTitle() {\n document.title = this.originalTitle\n }\n\n updateTitle() {\n document.title = `${this.errors.length} errors - ${document.title}`\n }\n\n showSummary() {\n this.$summary.innerHTML = this.getSummaryHtml()\n this.$summary.classList.remove('moj-hidden')\n this.$summary.setAttribute('aria-labelledby', 'errorSummary-heading')\n this.$summary.focus()\n }\n\n getSummaryHtml() {\n let html =\n '<h2 id=\"error-summary-title\" class=\"govuk-error-summary__title\">There is a problem</h2>'\n html += '<div class=\"govuk-error-summary__body\">'\n html += '<ul class=\"govuk-list govuk-error-summary__list\">'\n for (const error of this.errors) {\n html += '<li>'\n html += `<a href=\"#${this.escapeHtml(error.fieldName)}\">`\n html += this.escapeHtml(error.message)\n html += '</a>'\n html += '</li>'\n }\n html += '</ul>'\n html += '</div>'\n return html\n }\n\n hideSummary() {\n this.$summary.classList.add('moj-hidden')\n this.$summary.removeAttribute('aria-labelledby')\n }\n\n /**\n * @param {SubmitEvent} event - Form submit event\n */\n onSubmit(event) {\n this.removeInlineErrors()\n this.hideSummary()\n this.resetTitle()\n if (!this.validate()) {\n event.preventDefault()\n this.updateTitle()\n this.showSummary()\n this.showInlineErrors()\n }\n }\n\n showInlineErrors() {\n for (const error of this.errors) {\n this.showInlineError(error)\n }\n }\n\n /**\n * @param {ValidationError} error\n */\n showInlineError(error) {\n const $errorSpan = document.createElement('span')\n $errorSpan.id = `${error.fieldName}-error`\n $errorSpan.classList.add('govuk-error-message')\n $errorSpan.innerHTML = this.escapeHtml(error.message)\n\n const $control = document.querySelector(`#${error.fieldName}`)\n const $fieldset = $control.closest('.govuk-fieldset')\n const $fieldContainer = ($fieldset || $control).closest('.govuk-form-group')\n\n const $label = $fieldContainer.querySelector('label')\n const $legend = $fieldContainer.querySelector('legend')\n\n $fieldContainer.classList.add('govuk-form-group--error')\n\n if ($fieldset && $legend) {\n $legend.after($errorSpan)\n $fieldContainer.setAttribute('aria-invalid', 'true')\n addAttributeValue($fieldset, 'aria-describedby', $errorSpan.id)\n } else if ($label && $control) {\n $label.after($errorSpan)\n $control.setAttribute('aria-invalid', 'true')\n addAttributeValue($control, 'aria-describedby', $errorSpan.id)\n }\n }\n\n removeInlineErrors() {\n for (const error of this.errors) {\n this.removeInlineError(error)\n }\n }\n\n /**\n * @param {ValidationError} error\n */\n removeInlineError(error) {\n const $errorSpan = document.querySelector(`#${error.fieldName}-error`)\n\n const $control = document.querySelector(`#${error.fieldName}`)\n const $fieldset = $control.closest('.govuk-fieldset')\n const $fieldContainer = ($fieldset || $control).closest('.govuk-form-group')\n\n const $label = $fieldContainer.querySelector('label')\n const $legend = $fieldContainer.querySelector('legend')\n\n $errorSpan.remove()\n $fieldContainer.classList.remove('govuk-form-group--error')\n\n if ($fieldset && $legend) {\n $fieldContainer.removeAttribute('aria-invalid')\n removeAttributeValue($fieldset, 'aria-describedby', $errorSpan.id)\n } else if ($label && $control) {\n $control.removeAttribute('aria-invalid')\n removeAttributeValue($control, 'aria-describedby', $errorSpan.id)\n }\n }\n\n /**\n * @param {string} fieldName - Field name\n * @param {ValidationRule[]} rules - Validation rules\n */\n addValidator(fieldName, rules) {\n this.validators.push({\n fieldName,\n rules,\n field: this.$root.elements.namedItem(fieldName)\n })\n }\n\n validate() {\n this.errors = []\n\n /** @type {Validator | null} */\n let validator = null\n\n /** @type {boolean | string} */\n let validatorReturnValue = true\n\n let i\n let j\n\n for (i = 0; i < this.validators.length; i++) {\n validator = this.validators[i]\n for (j = 0; j < validator.rules.length; j++) {\n validatorReturnValue = validator.rules[j].method(\n validator.field,\n validator.rules[j].params\n )\n\n if (\n typeof validatorReturnValue === 'boolean' &&\n !validatorReturnValue\n ) {\n this.errors.push({\n fieldName: validator.fieldName,\n message: validator.rules[j].message\n })\n break\n } else if (typeof validatorReturnValue === 'string') {\n this.errors.push({\n fieldName: validatorReturnValue,\n message: validator.rules[j].message\n })\n break\n }\n }\n }\n return this.errors.length === 0\n }\n\n /**\n * @type {Record<string, string>}\n */\n static entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/',\n '`': '`',\n '=': '='\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-form-validator'\n\n /**\n * Multi file upload default config\n *\n * @type {FormValidatorConfig}\n */\n static defaults = Object.freeze({\n summary: {\n selector: '.govuk-error-summary'\n }\n })\n\n /**\n * Multi file upload config schema\n *\n * @satisfies {Schema<FormValidatorConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n summary: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} FormValidatorConfig\n * @property {object} [summary] - Error summary config\n * @property {string} [summary.selector] - Selector for error summary\n * @property {Element | null} [summary.element] - HTML element for error summary\n */\n\n/**\n * @typedef {object} ValidationRule\n * @property {(field: Validator['field'], params: Record<string, Validator['field']>) => boolean | string} method - Validation method\n * @property {string} message - Error message\n * @property {Record<string, Validator['field']>} [params] - Parameters for validation\n */\n\n/**\n * @typedef {object} ValidationError\n * @property {string} fieldName - Name of the field\n * @property {string} message - Validation error message\n */\n\n/**\n * @typedef {object} Validator\n * @property {string} fieldName - Name of the field\n * @property {ValidationRule[]} rules - Validation rules\n * @property {Element | RadioNodeList} field - Form field\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","/* eslint-disable @typescript-eslint/no-empty-function */\n\nimport { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<MultiFileUploadConfig>}\n */\nexport class MultiFileUpload extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for multi file upload\n * @param {MultiFileUploadConfig} [config] - Multi file upload config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n if (!MultiFileUpload.isSupported()) {\n return this\n }\n\n const $feedbackContainer =\n this.config.feedbackContainer.element ??\n this.$root.querySelector(this.config.feedbackContainer.selector)\n\n if (!$feedbackContainer || !($feedbackContainer instanceof HTMLElement)) {\n return this\n }\n\n this.$feedbackContainer = $feedbackContainer\n\n this.setupFileInput()\n this.setupDropzone()\n this.setupLabel()\n this.setupStatusBox()\n\n this.$root.addEventListener('click', this.onFileDeleteClick.bind(this))\n this.$root.classList.add('moj-multi-file-upload--enhanced')\n }\n\n setupDropzone() {\n this.$dropzone = document.createElement('div')\n this.$dropzone.classList.add('moj-multi-file-upload__dropzone')\n\n this.$dropzone.addEventListener('dragover', this.onDragOver.bind(this))\n this.$dropzone.addEventListener('dragleave', this.onDragLeave.bind(this))\n this.$dropzone.addEventListener('drop', this.onDrop.bind(this))\n\n this.$fileInput.replaceWith(this.$dropzone)\n this.$dropzone.appendChild(this.$fileInput)\n }\n\n setupLabel() {\n const $label = document.createElement('label')\n $label.setAttribute('for', this.$fileInput.id)\n $label.classList.add('govuk-button', 'govuk-button--secondary')\n $label.textContent = this.config.dropzoneButtonText\n\n const $hint = document.createElement('p')\n $hint.classList.add('govuk-body')\n $hint.textContent = this.config.dropzoneHintText\n\n this.$label = $label\n this.$dropzone.append($hint)\n this.$dropzone.append($label)\n }\n\n setupFileInput() {\n this.$fileInput = /** @type {HTMLInputElement} */ (\n this.$root.querySelector('.moj-multi-file-upload__input')\n )\n this.$fileInput.addEventListener('change', this.onFileChange.bind(this))\n this.$fileInput.addEventListener('focus', this.onFileFocus.bind(this))\n this.$fileInput.addEventListener('blur', this.onFileBlur.bind(this))\n }\n\n setupStatusBox() {\n this.$status = document.createElement('div')\n this.$status.classList.add('govuk-visually-hidden')\n this.$status.setAttribute('aria-live', 'polite')\n this.$status.setAttribute('role', 'status')\n this.$dropzone.append(this.$status)\n }\n\n /**\n * @param {DragEvent} event - Drag event\n */\n onDragOver(event) {\n event.preventDefault()\n this.$dropzone.classList.add('moj-multi-file-upload--dragover')\n }\n\n onDragLeave() {\n this.$dropzone.classList.remove('moj-multi-file-upload--dragover')\n }\n\n /**\n * @param {DragEvent} event - Drag event\n */\n onDrop(event) {\n event.preventDefault()\n this.$dropzone.classList.remove('moj-multi-file-upload--dragover')\n this.$feedbackContainer.classList.remove('moj-hidden')\n this.$status.textContent = this.config.uploadStatusText\n this.uploadFiles(event.dataTransfer.files)\n }\n\n /**\n * @param {FileList} files - File list\n */\n uploadFiles(files) {\n for (const file of Array.from(files)) {\n this.uploadFile(file)\n }\n }\n\n onFileChange() {\n this.$feedbackContainer.classList.remove('moj-hidden')\n this.$status.textContent = this.config.uploadStatusText\n this.uploadFiles(this.$fileInput.files)\n\n const $fileInput = this.$fileInput.cloneNode(true)\n if (!$fileInput || !($fileInput instanceof HTMLInputElement)) {\n return\n }\n\n $fileInput.value = ''\n this.$fileInput.replaceWith($fileInput)\n\n this.setupFileInput()\n this.$fileInput.focus()\n }\n\n onFileFocus() {\n this.$label.classList.add('moj-multi-file-upload--focused')\n }\n\n onFileBlur() {\n this.$label.classList.remove('moj-multi-file-upload--focused')\n }\n\n /**\n * @param {UploadResponseSuccess['success']} success\n */\n getSuccessHtml(success) {\n return `<span class=\"moj-multi-file-upload__success\"> <svg class=\"moj-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\"><path d=\"M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z\"/></svg>${success.messageHtml}</span>`\n }\n\n /**\n * @param {UploadResponseError['error']} error\n */\n getErrorHtml(error) {\n return `<span class=\"moj-multi-file-upload__error\"> <svg class=\"moj-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\"><path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"/></svg>${error.message}</span>`\n }\n\n /**\n * @param {File} file\n */\n getFileRow(file) {\n const $row = document.createElement('div')\n\n $row.classList.add('govuk-summary-list__row', 'moj-multi-file-upload__row')\n\n $row.innerHTML = `\n <div class=\"govuk-summary-list__value moj-multi-file-upload__message\">\n <span class=\"moj-multi-file-upload__filename\">${file.name}</span>\n <span class=\"moj-multi-file-upload__progress\">0%</span>\n </div>\n <div class=\"govuk-summary-list__actions moj-multi-file-upload__actions\"></div>\n `\n\n return $row\n }\n\n /**\n * @param {UploadResponseFile} file\n */\n getDeleteButton(file) {\n const $button = document.createElement('button')\n\n $button.setAttribute('type', 'button')\n $button.setAttribute('name', 'delete')\n $button.setAttribute('value', file.filename)\n\n $button.classList.add(\n 'moj-multi-file-upload__delete',\n 'govuk-button',\n 'govuk-button--secondary',\n 'govuk-!-margin-bottom-0'\n )\n\n $button.innerHTML = `Delete <span class=\"govuk-visually-hidden\">${file.originalname}</span>`\n\n return $button\n }\n\n /**\n * @param {File} file\n */\n uploadFile(file) {\n this.config.hooks.entryHook(this, file)\n\n const $item = this.getFileRow(file)\n const $message = $item.querySelector('.moj-multi-file-upload__message')\n const $actions = $item.querySelector('.moj-multi-file-upload__actions')\n const $progress = $item.querySelector('.moj-multi-file-upload__progress')\n\n const formData = new FormData()\n formData.append('documents', file)\n\n this.$feedbackContainer\n .querySelector('.moj-multi-file-upload__list')\n .append($item)\n\n const xhr = new XMLHttpRequest()\n\n const onLoad = () => {\n if (\n xhr.status < 200 ||\n xhr.status >= 300 ||\n !('success' in xhr.response)\n ) {\n return onError()\n }\n\n $message.innerHTML = this.getSuccessHtml(xhr.response.success)\n this.$status.textContent = xhr.response.success.messageText\n\n $actions.append(this.getDeleteButton(xhr.response.file))\n this.config.hooks.exitHook(this, file, xhr, xhr.statusText)\n }\n\n const onError = () => {\n const error = new Error(\n xhr.response && 'error' in xhr.response\n ? xhr.response.error.message\n : xhr.statusText || 'Upload failed'\n )\n\n $message.innerHTML = this.getErrorHtml(error)\n this.$status.textContent = error.message\n\n this.config.hooks.errorHook(this, file, xhr, xhr.statusText, error)\n }\n\n xhr.addEventListener('load', onLoad)\n xhr.addEventListener('error', onError)\n\n xhr.upload.addEventListener('progress', (event) => {\n if (!event.lengthComputable) {\n return\n }\n\n const percentComplete = Math.round((event.loaded / event.total) * 100)\n $progress.textContent = ` ${percentComplete}%`\n })\n\n xhr.open('POST', this.config.uploadUrl)\n xhr.responseType = 'json'\n\n xhr.send(formData)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onFileDeleteClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-multi-file-upload__delete')\n ) {\n return\n }\n\n event.preventDefault() // if user refreshes page and then deletes\n\n const xhr = new XMLHttpRequest()\n\n xhr.addEventListener('load', () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n return\n }\n\n const $rows = Array.from(\n this.$feedbackContainer.querySelectorAll('.moj-multi-file-upload__row')\n )\n\n if ($rows.length === 1) {\n this.$feedbackContainer.classList.add('moj-hidden')\n }\n\n const $rowDelete = $rows.find(($row) => $row.contains($button))\n if ($rowDelete) $rowDelete.remove()\n\n this.config.hooks.deleteHook(this, undefined, xhr, xhr.statusText)\n })\n\n xhr.open('POST', this.config.deleteUrl)\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.responseType = 'json'\n\n xhr.send(\n JSON.stringify({\n [$button.name]: $button.value\n })\n )\n }\n\n static isSupported() {\n return (\n this.isDragAndDropSupported() &&\n this.isFormDataSupported() &&\n this.isFileApiSupported()\n )\n }\n\n static isDragAndDropSupported() {\n const div = document.createElement('div')\n return typeof div.ondrop !== 'undefined'\n }\n\n static isFormDataSupported() {\n return typeof FormData === 'function'\n }\n\n static isFileApiSupported() {\n const input = document.createElement('input')\n input.type = 'file'\n return typeof input.files !== 'undefined'\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-multi-file-upload'\n\n /**\n * Multi file upload default config\n *\n * @type {MultiFileUploadConfig}\n */\n static defaults = Object.freeze({\n uploadStatusText: 'Uploading files, please wait',\n dropzoneHintText: 'Drag and drop files here or',\n dropzoneButtonText: 'Choose files',\n feedbackContainer: {\n selector: '.moj-multi-file__uploaded-files'\n },\n hooks: {\n entryHook: () => {},\n exitHook: () => {},\n errorHook: () => {},\n deleteHook: () => {}\n }\n })\n\n /**\n * Multi file upload config schema\n *\n * @satisfies {Schema<MultiFileUploadConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n uploadUrl: { type: 'string' },\n deleteUrl: { type: 'string' },\n uploadStatusText: { type: 'string' },\n dropzoneHintText: { type: 'string' },\n dropzoneButtonText: { type: 'string' },\n feedbackContainer: { type: 'object' },\n hooks: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Multi file upload config\n *\n * @typedef {object} MultiFileUploadConfig\n * @property {string} [uploadUrl] - File upload URL\n * @property {string} [deleteUrl] - File delete URL\n * @property {string} [uploadStatusText] - Upload status text\n * @property {string} [dropzoneHintText] - Dropzone hint text\n * @property {string} [dropzoneButtonText] - Dropzone button text\n * @property {object} [feedbackContainer] - Feedback container config\n * @property {string} [feedbackContainer.selector] - Selector for feedback container\n * @property {Element | null} [feedbackContainer.element] - HTML element for feedback container\n * @property {MultiFileUploadHooks} [hooks] - Upload hooks\n */\n\n/**\n * Multi file upload hooks\n *\n * @typedef {object} MultiFileUploadHooks\n * @property {OnUploadFileEntryHook} [entryHook] - File upload entry hook\n * @property {OnUploadFileExitHook} [exitHook] - File upload exit hook\n * @property {OnUploadFileErrorHook} [errorHook] - File upload error hook\n * @property {OnUploadFileDeleteHook} [deleteHook] - File delete hook\n */\n\n/**\n * Upload hook: File entry\n *\n * @callback OnUploadFileEntryHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n */\n\n/**\n * Upload hook: File exit\n *\n * @callback OnUploadFileExitHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n */\n\n/**\n * Upload hook: File error\n *\n * @callback OnUploadFileErrorHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n * @param {Error} errorThrown - Error thrown\n */\n\n/**\n * Upload hook: File delete\n *\n * @callback OnUploadFileDeleteHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} [file] - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n */\n\n/**\n * @typedef {object} UploadResponseSuccess\n * @property {{ messageText: string, messageHtml: string }} success - Response success\n * @property {UploadResponseFile} file - Response file\n */\n\n/**\n * @typedef {object} UploadResponseError\n * @property {{ message: string }} error - Response error\n * @property {UploadResponseFile} file - Response file\n */\n\n/**\n * @typedef {object} UploadResponseFile\n * @property {string} filename - File name\n * @property {string} originalname - Original file name\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<MultiSelectConfig>}\n */\nexport class MultiSelect extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for multi select\n * @param {MultiSelectConfig} [config] - Multi select config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $container = this.$root.querySelector(\n `#${this.config.idPrefix}select-all`\n )\n\n const $checkboxes = /** @type {NodeListOf<HTMLInputElement>} */ (\n this.config.checkboxes.items ??\n this.$root.querySelectorAll(this.config.checkboxes.selector)\n )\n\n if (\n !$container ||\n !($container instanceof HTMLElement) ||\n !$checkboxes.length\n ) {\n return this\n }\n\n this.setupToggle(this.config.idPrefix)\n\n this.$toggleButton = this.$toggle.querySelector('input')\n this.$toggleButton.addEventListener('click', this.onButtonClick.bind(this))\n\n this.$container = $container\n this.$container.append(this.$toggle)\n\n this.$checkboxes = Array.from($checkboxes)\n this.$checkboxes.forEach(($input) =>\n $input.addEventListener('click', this.onCheckboxClick.bind(this))\n )\n\n this.checked = config.checked || false\n }\n\n setupToggle(idPrefix = '') {\n const id = `${idPrefix}checkboxes-all`\n\n const $toggle = document.createElement('div')\n const $label = document.createElement('label')\n const $input = document.createElement('input')\n const $span = document.createElement('span')\n\n $toggle.classList.add(\n 'govuk-checkboxes__item',\n 'govuk-checkboxes--small',\n 'moj-multi-select__checkbox'\n )\n\n $input.id = id\n $input.type = 'checkbox'\n $input.classList.add('govuk-checkboxes__input')\n\n $label.setAttribute('for', id)\n $label.classList.add(\n 'govuk-label',\n 'govuk-checkboxes__label',\n 'moj-multi-select__toggle-label'\n )\n\n $span.classList.add('govuk-visually-hidden')\n $span.textContent = 'Select all'\n\n $label.append($span)\n $toggle.append($input, $label)\n\n this.$toggle = $toggle\n }\n\n onButtonClick() {\n if (this.checked) {\n this.uncheckAll()\n this.$toggleButton.checked = false\n } else {\n this.checkAll()\n this.$toggleButton.checked = true\n }\n }\n\n checkAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = true\n })\n\n this.checked = true\n }\n\n uncheckAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = false\n })\n\n this.checked = false\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onCheckboxClick(event) {\n if (!(event.target instanceof HTMLInputElement)) {\n return\n }\n\n if (!event.target.checked) {\n this.$toggleButton.checked = false\n this.checked = false\n } else {\n if (\n this.$checkboxes.filter(($input) => $input.checked).length ===\n this.$checkboxes.length\n ) {\n this.$toggleButton.checked = true\n this.checked = true\n }\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-multi-select'\n\n /**\n * Multi select config\n *\n * @type {MultiSelectConfig}\n */\n static defaults = Object.freeze({\n idPrefix: '',\n checkboxes: {\n selector: 'tbody input.govuk-checkboxes__input'\n }\n })\n\n /**\n * Multi select config schema\n *\n * @satisfies {Schema<MultiSelectConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n idPrefix: { type: 'string' },\n checked: { type: 'boolean' },\n checkboxes: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Multi select config\n *\n * @typedef {object} MultiSelectConfig\n * @property {string} [idPrefix] - Prefix for the Select all\" checkbox `id` attribute\n * @property {boolean} [checked] - Whether the \"Select all\" checkbox is checked\n * @property {object} [checkboxes] - Checkboxes config\n * @property {string} [checkboxes.selector] - Checkboxes query selector\n * @property {NodeListOf<HTMLInputElement>} [checkboxes.items] - Checkboxes query selector results\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { Component } from 'govuk-frontend'\n\nexport class PasswordReveal extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for password reveal\n */\n constructor($root) {\n super($root)\n\n const $input = this.$root.querySelector('.govuk-input')\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\n this.$input.setAttribute('spellcheck', 'false')\n\n this.createButton()\n }\n\n createButton() {\n this.$group = document.createElement('div')\n this.$button = document.createElement('button')\n\n this.$button.setAttribute('type', 'button')\n\n this.$root.classList.add('moj-password-reveal')\n this.$group.classList.add('moj-password-reveal__wrapper')\n this.$button.classList.add(\n 'govuk-button',\n 'govuk-button--secondary',\n 'moj-password-reveal__button'\n )\n\n this.$button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n\n this.$button.addEventListener('click', this.onButtonClick.bind(this))\n\n this.$group.append(this.$input, this.$button)\n this.$root.append(this.$group)\n }\n\n onButtonClick() {\n if (this.$input.type === 'password') {\n this.$input.type = 'text'\n this.$button.innerHTML =\n 'Hide <span class=\"govuk-visually-hidden\">password</span>'\n } else {\n this.$input.type = 'password'\n this.$button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-password-reveal'\n}\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<RichTextEditorConfig>}\n */\nexport class RichTextEditor extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for rich text editor\n * @param {RichTextEditorConfig} config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n if (!RichTextEditor.isSupported()) {\n return this\n }\n\n const $textarea = this.$root.querySelector('.govuk-textarea')\n if (!$textarea || !($textarea instanceof HTMLTextAreaElement)) {\n return this\n }\n\n this.$textarea = $textarea\n\n this.createToolbar()\n this.hideDefault()\n this.configureToolbar()\n\n this.keys = {\n left: 37,\n right: 39,\n up: 38,\n down: 40\n }\n\n this.$content.addEventListener('input', this.onEditorInput.bind(this))\n\n this.$root\n .querySelector('label')\n .addEventListener('click', this.onLabelClick.bind(this))\n\n this.$toolbar.addEventListener('keydown', this.onToolbarKeydown.bind(this))\n }\n\n /**\n * @param {KeyboardEvent} event - Click event\n */\n onToolbarKeydown(event) {\n let $focusableButton\n switch (event.keyCode) {\n case this.keys.right:\n case this.keys.down: {\n $focusableButton = this.$buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n\n if ($focusableButton) {\n const $nextButton = $focusableButton.nextElementSibling\n\n if ($nextButton && $nextButton instanceof HTMLButtonElement) {\n $nextButton.focus()\n $focusableButton.setAttribute('tabindex', '-1')\n $nextButton.setAttribute('tabindex', '0')\n }\n }\n\n break\n }\n\n case this.keys.left:\n case this.keys.up: {\n $focusableButton = this.$buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n\n if ($focusableButton) {\n const $previousButton = $focusableButton.previousElementSibling\n\n if ($previousButton && $previousButton instanceof HTMLButtonElement) {\n $previousButton.focus()\n $focusableButton.setAttribute('tabindex', '-1')\n $previousButton.setAttribute('tabindex', '0')\n }\n }\n\n break\n }\n }\n }\n\n getToolbarHtml() {\n let html = ''\n\n html += '<div class=\"moj-rich-text-editor__toolbar\" role=\"toolbar\">'\n\n if (this.config.toolbar.bold) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--bold\" type=\"button\" data-command=\"bold\"><span class=\"govuk-visually-hidden\">Bold</span></button>'\n }\n\n if (this.config.toolbar.italic) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--italic\" type=\"button\" data-command=\"italic\"><span class=\"govuk-visually-hidden\">Italic</span></button>'\n }\n\n if (this.config.toolbar.underline) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--underline\" type=\"button\" data-command=\"underline\"><span class=\"govuk-visually-hidden\">Underline</span></button>'\n }\n\n if (this.config.toolbar.bullets) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--unordered-list\" type=\"button\" data-command=\"insertUnorderedList\"><span class=\"govuk-visually-hidden\">Unordered list</span></button>'\n }\n\n if (this.config.toolbar.numbers) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--ordered-list\" type=\"button\" data-command=\"insertOrderedList\"><span class=\"govuk-visually-hidden\">Ordered list</span></button>'\n }\n\n html += '</div>'\n return html\n }\n\n getEnhancedHtml() {\n return `${this.getToolbarHtml()}<div class=\"govuk-textarea moj-rich-text-editor__content\" contenteditable=\"true\" spellcheck=\"false\"></div>`\n }\n\n hideDefault() {\n this.$textarea.classList.add('govuk-visually-hidden')\n this.$textarea.setAttribute('aria-hidden', 'true')\n this.$textarea.setAttribute('tabindex', '-1')\n }\n\n createToolbar() {\n this.$toolbar = document.createElement('div')\n this.$toolbar.className = 'moj-rich-text-editor'\n this.$toolbar.innerHTML = this.getEnhancedHtml()\n this.$root.append(this.$toolbar)\n\n this.$content = /** @type {HTMLElement} */ (\n this.$root.querySelector('.moj-rich-text-editor__content')\n )\n\n this.$content.innerHTML = this.$textarea.value\n }\n\n configureToolbar() {\n this.$buttons = Array.from(\n /** @type {NodeListOf<HTMLButtonElement>} */\n (this.$root.querySelectorAll('.moj-rich-text-editor__toolbar-button'))\n )\n\n this.$buttons.forEach(($button, index) => {\n $button.setAttribute('tabindex', !index ? '0' : '-1')\n $button.addEventListener('click', this.onButtonClick.bind(this))\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onButtonClick(event) {\n if (!(event.currentTarget instanceof HTMLElement)) {\n return\n }\n\n document.execCommand(\n event.currentTarget.getAttribute('data-command'),\n false,\n undefined\n )\n }\n\n getContent() {\n return this.$content.innerHTML\n }\n\n onEditorInput() {\n this.updateTextarea()\n }\n\n updateTextarea() {\n document.execCommand('defaultParagraphSeparator', false, 'p')\n this.$textarea.value = this.getContent()\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onLabelClick(event) {\n event.preventDefault()\n this.$content.focus()\n }\n\n static isSupported() {\n return 'contentEditable' in document.documentElement\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-rich-text-editor'\n\n /**\n * Rich text editor config\n *\n * @type {RichTextEditorConfig}\n */\n static defaults = Object.freeze({\n toolbar: {\n bold: false,\n italic: false,\n underline: false,\n bullets: true,\n numbers: true\n }\n })\n\n /**\n * Rich text editor config schema\n *\n * @satisfies {Schema<RichTextEditorConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n toolbar: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Rich text editor config\n *\n * @typedef {object} RichTextEditorConfig\n * @property {RichTextEditorToolbar} [toolbar] - Toolbar options\n */\n\n/**\n * Rich text editor toolbar options\n *\n * @typedef {object} RichTextEditorToolbar\n * @property {boolean} [bold] - Show the bold button\n * @property {boolean} [italic] - Show the italic button\n * @property {boolean} [underline] - Show the underline button\n * @property {boolean} [bullets] - Show the bullets button\n * @property {boolean} [numbers] - Show the numbers button\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<SearchToggleConfig>}\n */\nexport class SearchToggle extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for search toggle\n * @param {SearchToggleConfig} [config] - Search toggle config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $searchContainer =\n this.config.searchContainer.element ??\n this.$root.querySelector(this.config.searchContainer.selector)\n\n const $toggleButtonContainer =\n this.config.toggleButtonContainer.element ??\n this.$root.querySelector(this.config.toggleButtonContainer.selector)\n\n if (\n !$searchContainer ||\n !$toggleButtonContainer ||\n !($searchContainer instanceof HTMLElement) ||\n !($toggleButtonContainer instanceof HTMLElement)\n ) {\n return this\n }\n\n this.$searchContainer = $searchContainer\n this.$toggleButtonContainer = $toggleButtonContainer\n\n const svg =\n '<svg viewBox=\"0 0 20 20\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" class=\"moj-search-toggle__button__icon\"><path d=\"M7.433,12.5790048 C6.06762625,12.5808611 4.75763941,12.0392925 3.79217348,11.0738265 C2.82670755,10.1083606 2.28513891,8.79837375 2.28699522,7.433 C2.28513891,6.06762625 2.82670755,4.75763941 3.79217348,3.79217348 C4.75763941,2.82670755 6.06762625,2.28513891 7.433,2.28699522 C8.79837375,2.28513891 10.1083606,2.82670755 11.0738265,3.79217348 C12.0392925,4.75763941 12.5808611,6.06762625 12.5790048,7.433 C12.5808611,8.79837375 12.0392925,10.1083606 11.0738265,11.0738265 C10.1083606,12.0392925 8.79837375,12.5808611 7.433,12.5790048 L7.433,12.5790048 Z M14.293,12.579 L13.391,12.579 L13.071,12.269 C14.2300759,10.9245158 14.8671539,9.20813198 14.866,7.433 C14.866,3.32786745 11.5381325,-1.65045755e-15 7.433,-1.65045755e-15 C3.32786745,-1.65045755e-15 -1.65045755e-15,3.32786745 -1.65045755e-15,7.433 C-1.65045755e-15,11.5381325 3.32786745,14.866 7.433,14.866 C9.208604,14.8671159 10.9253982,14.2296624 12.27,13.07 L12.579,13.39 L12.579,14.294 L18.296,20 L20,18.296 L14.294,12.579 L14.293,12.579 Z\"></path></svg>'\n\n this.$toggleButton = document.createElement('button')\n this.$toggleButton.setAttribute('class', 'moj-search-toggle__button')\n this.$toggleButton.setAttribute('type', 'button')\n this.$toggleButton.setAttribute('aria-haspopup', 'true')\n this.$toggleButton.setAttribute('aria-expanded', 'false')\n this.$toggleButton.innerHTML = `${this.config.toggleButton.text} ${svg}`\n\n this.$toggleButton.addEventListener(\n 'click',\n this.onToggleButtonClick.bind(this)\n )\n\n this.$toggleButtonContainer.append(this.$toggleButton)\n\n document.addEventListener('click', this.onDocumentClick.bind(this))\n document.addEventListener('focusin', this.onDocumentClick.bind(this))\n }\n\n showMenu() {\n this.$toggleButton.setAttribute('aria-expanded', 'true')\n this.$searchContainer.classList.remove('moj-js-hidden')\n this.$searchContainer.querySelector('input').focus()\n }\n\n hideMenu() {\n this.$searchContainer.classList.add('moj-js-hidden')\n this.$toggleButton.setAttribute('aria-expanded', 'false')\n }\n\n onToggleButtonClick() {\n if (this.$toggleButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n } else {\n this.hideMenu()\n }\n }\n\n /**\n * @param {MouseEvent | FocusEvent} event\n */\n onDocumentClick(event) {\n if (\n event.target instanceof Node &&\n !this.$toggleButtonContainer.contains(event.target) &&\n !this.$searchContainer.contains(event.target)\n ) {\n this.hideMenu()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-search-toggle'\n\n /**\n * Search toggle config\n *\n * @type {SearchToggleConfig}\n */\n static defaults = Object.freeze({\n searchContainer: {\n selector: '.moj-search'\n },\n toggleButton: {\n text: 'Search'\n },\n toggleButtonContainer: {\n selector: '.moj-search-toggle__toggle'\n }\n })\n\n /**\n * Search toggle config schema\n *\n * @satisfies {Schema<SearchToggleConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n searchContainer: { type: 'object' },\n toggleButton: { type: 'object' },\n toggleButtonContainer: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} SearchToggleConfig\n * @property {object} [searchContainer] - Search config\n * @property {string} [searchContainer.selector] - Selector for search container\n * @property {Element | null} [searchContainer.element] - HTML element for search container\n * @property {object} [toggleButton] - Toggle button config\n * @property {string} [toggleButton.text] - Text for toggle button\n * @property {object} [toggleButtonContainer] - Toggle button container config\n * @property {string} [toggleButtonContainer.selector] - Selector for toggle button container\n * @property {Element | null} [toggleButtonContainer.element] - HTML element for toggle button container\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<SortableTableConfig>}\n */\nexport class SortableTable extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for sortable table\n * @param {SortableTableConfig} [config] - Sortable table config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $head = $root?.querySelector('thead')\n const $body = $root?.querySelector('tbody')\n\n if (!$head || !$body) {\n return this\n }\n\n this.$head = $head\n this.$body = $body\n this.$caption = this.$root.querySelector('caption')\n\n this.$upArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.5625 15.5L11 6.63125L15.4375 15.5H6.5625Z\" fill=\"currentColor\"/>\n</svg>`\n this.$downArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M15.4375 7L11 15.8687L6.5625 7L15.4375 7Z\" fill=\"currentColor\"/>\n</svg>`\n this.$upDownArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M8.1875 9.5L10.9609 3.95703L13.7344 9.5H8.1875Z\" fill=\"currentColor\"/>\n<path d=\"M13.7344 12.0781L10.9609 17.6211L8.1875 12.0781H13.7344Z\" fill=\"currentColor\"/>\n</svg>`\n\n this.$headings = this.$head\n ? Array.from(this.$head.querySelectorAll('th'))\n : []\n\n this.createHeadingButtons()\n this.updateCaption()\n this.updateDirectionIndicators()\n this.createStatusBox()\n this.initialiseSortedColumn()\n\n this.$head.addEventListener('click', this.onSortButtonClick.bind(this))\n }\n\n createHeadingButtons() {\n for (const $heading of this.$headings) {\n if ($heading.hasAttribute('aria-sort')) {\n this.createHeadingButton($heading)\n }\n }\n }\n\n /**\n * @param {HTMLTableCellElement} $heading\n */\n createHeadingButton($heading) {\n const index = this.$headings.indexOf($heading)\n const $button = document.createElement('button')\n\n $button.setAttribute('type', 'button')\n $button.setAttribute('data-index', `${index}`)\n $button.textContent = $heading.textContent\n\n $heading.textContent = ''\n $heading.appendChild($button)\n }\n\n createStatusBox() {\n this.$status = document.createElement('div')\n\n this.$status.setAttribute('aria-atomic', 'true')\n this.$status.setAttribute('aria-live', 'polite')\n this.$status.setAttribute('class', 'govuk-visually-hidden')\n this.$status.setAttribute('role', 'status')\n\n this.$root.insertAdjacentElement('afterend', this.$status)\n }\n\n initialiseSortedColumn() {\n const $rows = this.getTableRowsArray()\n\n const $heading = this.$root.querySelector(\n 'th[aria-sort=\"ascending\"], th[aria-sort=\"descending\"]'\n )\n const $sortButton = $heading?.querySelector('button')\n const sortDirection = $heading?.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $sortButton?.getAttribute('data-index') ?? '0',\n 10\n )\n\n if (\n !$heading ||\n !$sortButton ||\n !(sortDirection === 'ascending' || sortDirection === 'descending')\n ) {\n return\n }\n\n const $sortedRows = this.sort($rows, columnNumber, sortDirection)\n this.addRows($sortedRows)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onSortButtonClick(event) {\n const $target = /** @type {HTMLElement} */ (event.target)\n const $button = $target.closest('button')\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.parentElement\n ) {\n return\n }\n\n const $heading = $button.parentElement\n const sortDirection = $heading.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $button?.getAttribute('data-index') ?? '0',\n 10\n )\n\n const newSortDirection =\n sortDirection === 'none' || sortDirection === 'descending'\n ? 'ascending'\n : 'descending'\n\n const $rows = this.getTableRowsArray()\n const $sortedRows = this.sort($rows, columnNumber, newSortDirection)\n\n this.addRows($sortedRows)\n this.removeButtonStates()\n this.updateButtonState($button, newSortDirection)\n this.updateDirectionIndicators()\n }\n\n updateCaption() {\n if (!this.$caption) {\n return\n }\n\n let assistiveText = this.$caption.querySelector('.govuk-visually-hidden')\n if (assistiveText) {\n return\n }\n\n assistiveText = document.createElement('span')\n assistiveText.classList.add('govuk-visually-hidden')\n assistiveText.textContent = ' (column headers with buttons are sortable).'\n\n this.$caption.appendChild(assistiveText)\n }\n\n /**\n * @param {HTMLButtonElement} $button\n * @param {string} direction\n */\n updateButtonState($button, direction) {\n if (!(direction === 'ascending' || direction === 'descending')) {\n return\n }\n\n $button.parentElement.setAttribute('aria-sort', direction)\n let message = this.config.statusMessage\n message = message.replace(/%heading%/, $button.textContent)\n message = message.replace(/%direction%/, this.config[`${direction}Text`])\n this.$status.textContent = message\n }\n\n updateDirectionIndicators() {\n for (const $heading of this.$headings) {\n const $button = /** @type {HTMLButtonElement} */ (\n $heading.querySelector('button')\n )\n if ($heading.hasAttribute('aria-sort') && $button) {\n const direction = $heading.getAttribute('aria-sort')\n $button.querySelector('svg')?.remove()\n\n switch (direction) {\n case 'ascending':\n $button.insertAdjacentHTML('beforeend', this.$upArrow)\n break\n case 'descending':\n $button.insertAdjacentHTML('beforeend', this.$downArrow)\n break\n default:\n $button.insertAdjacentHTML('beforeend', this.$upDownArrow)\n }\n }\n }\n }\n\n removeButtonStates() {\n for (const $heading of this.$headings) {\n $heading.setAttribute('aria-sort', 'none')\n }\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n */\n addRows($rows) {\n for (const $row of $rows) {\n this.$body.append($row)\n }\n }\n\n getTableRowsArray() {\n return Array.from(this.$body.querySelectorAll('tr'))\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n * @param {number} columnNumber\n * @param {string} sortDirection\n */\n sort($rows, columnNumber, sortDirection) {\n return $rows.sort(($rowA, $rowB) => {\n const $tdA = $rowA.querySelectorAll('td, th')[columnNumber]\n const $tdB = $rowB.querySelectorAll('td, th')[columnNumber]\n\n if (\n !$tdA ||\n !$tdB ||\n !($tdA instanceof HTMLElement) ||\n !($tdB instanceof HTMLElement)\n ) {\n return 0\n }\n\n const valueA =\n sortDirection === 'ascending'\n ? this.getCellValue($tdA)\n : this.getCellValue($tdB)\n\n const valueB =\n sortDirection === 'ascending'\n ? this.getCellValue($tdB)\n : this.getCellValue($tdA)\n\n return !(typeof valueA === 'number' && typeof valueB === 'number')\n ? valueA.toString().localeCompare(valueB.toString())\n : valueA - valueB\n })\n }\n\n /**\n * @param {HTMLElement} $cell\n */\n getCellValue($cell) {\n const val = $cell.getAttribute('data-sort-value') || $cell.innerHTML\n const valAsNumber = Number(val)\n\n return Number.isFinite(valAsNumber)\n ? valAsNumber // Exclude invalid numbers, infinity etc\n : val\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-sortable-table'\n\n /**\n * Sortable table config\n *\n * @type {SortableTableConfig}\n */\n static defaults = Object.freeze({\n statusMessage: 'Sort by %heading% (%direction%)',\n ascendingText: 'ascending',\n descendingText: 'descending'\n })\n\n /**\n * Sortable table config schema\n *\n * @satisfies {Schema<SortableTableConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n statusMessage: { type: 'string' },\n ascendingText: { type: 'string' },\n descendingText: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * Sortable table config\n *\n * @typedef {object} SortableTableConfig\n * @property {string} [statusMessage] - Status message\n * @property {string} [ascendingText] - Ascending text\n * @property {string} [descendingText] - Descending text\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { createAll } from 'govuk-frontend'\n\nimport { version } from './common/moj-frontend-version.mjs'\nimport { AddAnother } from './components/add-another/add-another.mjs'\nimport { Alert } from './components/alert/alert.mjs'\nimport { ButtonMenu } from './components/button-menu/button-menu.mjs'\nimport { DatePicker } from './components/date-picker/date-picker.mjs'\nimport { PdsHeader } from './components/domain-specific/probation/header/header.mjs'\nimport { FilterToggleButton } from './components/filter-toggle-button/filter-toggle-button.mjs'\nimport { FormValidator } from './components/form-validator/form-validator.mjs'\nimport { MultiFileUpload } from './components/multi-file-upload/multi-file-upload.mjs'\nimport { MultiSelect } from './components/multi-select/multi-select.mjs'\nimport { PasswordReveal } from './components/password-reveal/password-reveal.mjs'\nimport { RichTextEditor } from './components/rich-text-editor/rich-text-editor.mjs'\nimport { SearchToggle } from './components/search-toggle/search-toggle.mjs'\nimport { SortableTable } from './components/sortable-table/sortable-table.mjs'\n\n/**\n * Initialise all components\n *\n * Use the `data-module` attributes to find, instantiate and init all of the\n * components provided as part of MOJ Frontend.\n *\n * @param {Config | Element | Document | null} [scopeOrConfig]\n */\nfunction initAll(scopeOrConfig) {\n for (const Component of [\n AddAnother,\n Alert,\n ButtonMenu,\n DatePicker,\n MultiSelect,\n PasswordReveal,\n PdsHeader,\n RichTextEditor,\n SearchToggle,\n SortableTable\n ]) {\n createAll(Component, undefined, scopeOrConfig)\n }\n}\n\nexport {\n initAll,\n version,\n\n // Components\n AddAnother,\n Alert,\n ButtonMenu,\n DatePicker,\n FilterToggleButton,\n FormValidator,\n MultiFileUpload,\n MultiSelect,\n PasswordReveal,\n PdsHeader,\n RichTextEditor,\n SearchToggle,\n SortableTable\n}\n\n/**\n * Config for all components via `initAll()`\n *\n * @typedef {object} Config\n * @property {Element | Document | null } scope - the scope to search for components in\n */\n\n/**\n * @import * as GOVUKFrontend from 'govuk-frontend'\n */\n"],"names":["isInitialised","$root","moduleName","HTMLElement","hasAttribute","isSupported","$scope","document","body","classList","contains","isArray","option","Array","isObject","isScope","Element","Document","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","normaliseOptions","scopeOrOptions","onError","options","scope","configObjects","formattedConfigObject","configObject","key","keys","override","newObject","current","keyParts","split","index","createAll","$elements","_options$scope","querySelectorAll","error","console","log","from","map","$element","filter","Boolean","version","AddAnother","addEventListener","onRemoveButtonClick","bind","onAddButtonClick","$buttons","forEach","$button","HTMLButtonElement","event","target","$items","getItems","$item","getNewItem","updateAttributes","resetItem","$firstItem","hasRemoveButton","createRemoveButton","after","$input","querySelector","HTMLInputElement","focus","item","cloneNode","isValidInputElement","getAttribute","id","originalId","replace","$label","parentElement","closest","HTMLLabelElement","htmlFor","createElement","add","textContent","append","HTMLSelectElement","selectedIndex","HTMLTextAreaElement","checked","remove","focusHeading","$heading","setFocus","_options$onBeforeFocu","isFocusable","onFocus","onBlur","once","_options$onBlur","call","removeAttribute","onBeforeFocus","removeAttributeValue","attr","re","m","RegExp","match","addAttributeValue","test","getPreviousSibling","selector","$sibling","previousElementSibling","matches","findNearestMatchingElement","$currentElement","Alert","disableAutoFocus","$dismissButton","dismissible","innerHTML","dismissText","Node","dimiss","$elementToRecieveFocus","focusOnDismissSelector","$nextSibling","nextElementSibling","freeze","ButtonMenu","children","className","startsWith","buttonClasses","initMenu","$menu","createMenu","insertAdjacentHTML","toggleTemplate","setupMenuItems","$menuToggle","toggleMenu","handleKeyDown","closeMenu","hidden","alignMenu","appendChild","firstChild","$menuItem","$listItem","insertBefore","tagName","setTimeout","buttonText","isOpen","preventDefault","keyboardEvent","detail","focusIndex","openMenu","focusItem","moveFocus","currentFocusIndex","$activeElement","activeElement","$menuItems","HTMLAnchorElement","indexOf","DatePicker","_this$config$input$el","input","dayLabels","monthLabels","currentDate","Date","setHours","calendarDays","excludedDates","excludedDays","buttonClass","selectedDayButtonClass","currentDayButtonClass","todayButtonClass","setOptions","initControls","$dialog","createDialog","createCalendarHeaders","$componentWrapper","$inputWrapper","insertAdjacentElement","$calendarButton","$dialogTitle","createCalendar","$prevMonthButton","$prevYearButton","$nextMonthButton","$nextYearButton","$cancelButton","$okButton","focusPreviousMonth","focusPreviousYear","focusNextMonth","focusNextYear","closeDialog","selectDate","$dialogButtons","$firstButtonInDialog","$lastButtonInDialog","firstButtonKeydown","lastButtonKeydown","toggleDialog","stopPropagation","backgroundClick","updateCalendar","titleId","dialogTemplate","$tbody","dayCount","i","$row","insertRow","j","$cell","$dateButton","calendarDay","DSCalendarDay","push","day","html","substring","$headerRow","leadingZeros","ret","setMinAndMaxDatesOnCalendar","setExcludedDates","setExcludedDays","setWeekStartDay","minDate","formattedDateFromString","maxDate","parseDateRangeString","reduce","dates","items","concat","date","datestring","startDate","endDate","d","getTime","setDate","getDate","weekDays","toLowerCase","weekStartDay","unshift","pop","weekStartDayParam","isExcludedDate","excludedDate","toDateString","getDay","dateString","fallback","formattedDate","dateFormatPattern","exec","month","year","formattedDateFromDate","getMonth","getFullYear","formattedDateHuman","shiftKey","firstOfMonth","dayOfWeek","thisDay","disabled","update","setCurrentDate","calendarDayDate","today","inputDate","enabledDays","window","getComputedStyle","display","innerText","changeEvent","Event","bubbles","cancelable","dispatchEvent","openDialog","offsetWidth","style","right","top","offsetHeight","goToDate","focusNextDay","focusPreviousDay","focusNextWeek","focusPreviousWeek","focusFirstDayOfWeek","firstDayOfWeekIndex","diff","focusLastDayOfWeek","lastDayOfWeekIndex","setMonth","setFullYear","row","column","picker","keyPress","click","label","accessibleLabel","calendarNavKey","PdsHeader","initHeader","$tabOpenClass","$userToggle","$userMenu","$servicesToggle","$servicesMenu","hideFallbackLinks","closeTabs","_event","tabTuples","toggle","menu","textForShow","textForHide","$userLink","$servicesLink","FilterToggleButton","_this$config$toggleBu","_this$config$closeBut","$toggleButtonContainer","toggleButtonContainer","$closeButtonContainer","closeButtonContainer","createToggleButton","setupResponsiveChecks","startHidden","hideMenu","mq","matchMedia","bigModeMediaQuery","addListener","checkMode","$menuButton","toggleButton","classes","showText","onMenuButtonClick","enableBigMode","enableSmallMode","showMenu","removeCloseButton","addCloseButton","$closeButton","closeButton","text","onCloseClick","hideText","FormValidator","$summary","summary","errors","validators","originalTitle","title","onSubmit","escapeHtml","string","String","entityMap","resetTitle","updateTitle","showSummary","getSummaryHtml","fieldName","hideSummary","removeInlineErrors","validate","showInlineErrors","showInlineError","$errorSpan","$control","$fieldset","$fieldContainer","$legend","removeInlineError","addValidator","rules","elements","namedItem","validator","validatorReturnValue","method","params","MultiFileUpload","_this$config$feedback","$feedbackContainer","feedbackContainer","setupFileInput","setupDropzone","setupLabel","setupStatusBox","onFileDeleteClick","$dropzone","onDragOver","onDragLeave","onDrop","$fileInput","replaceWith","dropzoneButtonText","$hint","dropzoneHintText","onFileChange","onFileFocus","onFileBlur","$status","uploadStatusText","uploadFiles","dataTransfer","files","file","uploadFile","getSuccessHtml","success","messageHtml","getErrorHtml","getFileRow","getDeleteButton","filename","originalname","hooks","entryHook","$message","$actions","$progress","formData","FormData","xhr","XMLHttpRequest","onLoad","status","response","messageText","exitHook","statusText","errorHook","upload","lengthComputable","percentComplete","Math","round","loaded","total","open","uploadUrl","responseType","send","$rows","$rowDelete","find","deleteHook","undefined","deleteUrl","setRequestHeader","JSON","stringify","isDragAndDropSupported","isFormDataSupported","isFileApiSupported","div","ondrop","MultiSelect","_this$config$checkbox","$container","idPrefix","$checkboxes","checkboxes","setupToggle","$toggleButton","$toggle","onButtonClick","onCheckboxClick","$span","uncheckAll","checkAll","PasswordReveal","createButton","$group","RichTextEditor","$textarea","createToolbar","hideDefault","configureToolbar","left","up","down","$content","onEditorInput","onLabelClick","$toolbar","onToolbarKeydown","$focusableButton","keyCode","button","$nextButton","$previousButton","getToolbarHtml","toolbar","bold","italic","underline","bullets","numbers","getEnhancedHtml","currentTarget","execCommand","getContent","updateTextarea","documentElement","SearchToggle","_this$config$searchCo","$searchContainer","searchContainer","svg","onToggleButtonClick","onDocumentClick","SortableTable","$head","$body","$caption","$upArrow","$downArrow","$upDownArrow","$headings","createHeadingButtons","updateCaption","updateDirectionIndicators","createStatusBox","initialiseSortedColumn","onSortButtonClick","createHeadingButton","_$sortButton$getAttri","getTableRowsArray","$sortButton","sortDirection","columnNumber","parseInt","$sortedRows","sort","addRows","_$button$getAttribute","$target","newSortDirection","removeButtonStates","updateButtonState","assistiveText","direction","statusMessage","_$button$querySelecto","$rowA","$rowB","$tdA","$tdB","valueA","getCellValue","valueB","localeCompare","val","valAsNumber","ascendingText","descendingText","initAll","scopeOrConfig"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
|
|
1
|
+
{"version":3,"file":"all.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","../../node_modules/govuk-frontend/dist/govuk/init.mjs","../../src/moj/common/moj-frontend-version.mjs","../../src/moj/components/add-another/add-another.mjs","../../src/moj/common/index.mjs","../../src/moj/helpers.mjs","../../src/moj/components/alert/alert.mjs","../../src/moj/components/button-menu/button-menu.mjs","../../src/moj/components/date-picker/date-picker.mjs","../../src/moj/components/domain-specific/probation/header/header.mjs","../../src/moj/components/filter-toggle-button/filter-toggle-button.mjs","../../src/moj/components/form-validator/form-validator.mjs","../../src/moj/components/multi-file-upload/multi-file-upload.mjs","../../src/moj/components/multi-select/multi-select.mjs","../../src/moj/components/password-reveal/password-reveal.mjs","../../src/moj/components/rich-text-editor/rich-text-editor.mjs","../../src/moj/components/search-toggle/search-toggle.mjs","../../src/moj/components/sortable-table/sortable-table.mjs","../../src/moj/all.mjs"],"sourcesContent":["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 { normaliseOptions } from './common/configuration.mjs';\nimport { isSupported, isObject } from './common/index.mjs';\nimport { Accordion } from './components/accordion/accordion.mjs';\nimport { Button } from './components/button/button.mjs';\nimport { CharacterCount } from './components/character-count/character-count.mjs';\nimport { Checkboxes } from './components/checkboxes/checkboxes.mjs';\nimport { ErrorSummary } from './components/error-summary/error-summary.mjs';\nimport { ExitThisPage } from './components/exit-this-page/exit-this-page.mjs';\nimport { FileUpload } from './components/file-upload/file-upload.mjs';\nimport { NotificationBanner } from './components/notification-banner/notification-banner.mjs';\nimport { PasswordInput } from './components/password-input/password-input.mjs';\nimport { Radios } from './components/radios/radios.mjs';\nimport { ServiceNavigation } from './components/service-navigation/service-navigation.mjs';\nimport { SkipLink } from './components/skip-link/skip-link.mjs';\nimport { Tabs } from './components/tabs/tabs.mjs';\nimport { SupportError, ElementError } from './errors/index.mjs';\n\n/**\n * Initialise all components\n *\n * Use the `data-module` attributes to find, instantiate and init all of the\n * components provided as part of GOV.UK Frontend.\n *\n * @param {Config | Element | Document | null} [scopeOrConfig] - Scope of the document to search within or config for all components (with optional scope)\n */\nfunction initAll(scopeOrConfig = {}) {\n const config = isObject(scopeOrConfig) ? scopeOrConfig : {};\n const options = normaliseOptions(scopeOrConfig);\n try {\n if (!isSupported()) {\n throw new SupportError();\n }\n if (options.scope === null) {\n throw new ElementError({\n element: options.scope,\n identifier: 'GOV.UK Frontend scope element (`$scope`)'\n });\n }\n } catch (error) {\n if (options.onError) {\n options.onError(error, {\n config\n });\n } else {\n console.log(error);\n }\n return;\n }\n const components = [[Accordion, config.accordion], [Button, config.button], [CharacterCount, config.characterCount], [Checkboxes], [ErrorSummary, config.errorSummary], [ExitThisPage, config.exitThisPage], [FileUpload, config.fileUpload], [NotificationBanner, config.notificationBanner], [PasswordInput, config.passwordInput], [Radios], [ServiceNavigation], [SkipLink], [Tabs]];\n components.forEach(([Component, componentConfig]) => {\n createAll(Component, componentConfig, options);\n });\n}\n\n/**\n * Create all instances of a specific component on the page\n *\n * Uses the `data-module` attribute to find all elements matching the specified\n * component on the page, creating instances of the component object for each\n * of them.\n *\n * Any component errors will be caught and logged to the console.\n *\n * @template {CompatibleClass} ComponentClass\n * @param {ComponentClass} Component - class of the component to create\n * @param {ComponentConfig<ComponentClass>} [config] - Config supplied to component\n * @param {OnErrorCallback<ComponentClass> | Element | Document | null | CreateAllOptions<ComponentClass>} [scopeOrOptions] - options for createAll including scope of the document to search within and callback function if error throw by component on init\n * @returns {Array<InstanceType<ComponentClass>>} - array of instantiated components\n */\nfunction createAll(Component, config, scopeOrOptions) {\n let $elements;\n const options = normaliseOptions(scopeOrOptions);\n try {\n var _options$scope;\n if (!isSupported()) {\n throw new SupportError();\n }\n if (options.scope === null) {\n throw new ElementError({\n element: options.scope,\n component: Component,\n identifier: 'Scope element (`$scope`)'\n });\n }\n $elements = (_options$scope = options.scope) == null ? void 0 : _options$scope.querySelectorAll(`[data-module=\"${Component.moduleName}\"]`);\n } catch (error) {\n if (options.onError) {\n options.onError(error, {\n component: Component,\n config\n });\n } else {\n console.log(error);\n }\n return [];\n }\n return Array.from($elements != null ? $elements : []).map($element => {\n try {\n return typeof config !== 'undefined' ? new Component($element, config) : new Component($element);\n } catch (error) {\n if (options.onError) {\n options.onError(error, {\n element: $element,\n component: Component,\n config\n });\n } else {\n console.log(error);\n }\n return null;\n }\n }).filter(Boolean);\n}\n/**\n * @typedef {{new (...args: any[]): any, moduleName: string}} CompatibleClass\n */\n/**\n * Config for all components via `initAll()`\n *\n * @typedef {object} Config\n * @property {Element | Document | null} [scope] - Scope of the document to search within\n * @property {OnErrorCallback<CompatibleClass>} [onError] - Initialisation error callback\n * @property {AccordionConfig} [accordion] - Accordion config\n * @property {ButtonConfig} [button] - Button config\n * @property {CharacterCountConfig} [characterCount] - Character Count config\n * @property {ErrorSummaryConfig} [errorSummary] - Error Summary config\n * @property {ExitThisPageConfig} [exitThisPage] - Exit This Page config\n * @property {FileUploadConfig} [fileUpload] - File Upload config\n * @property {NotificationBannerConfig} [notificationBanner] - Notification Banner config\n * @property {PasswordInputConfig} [passwordInput] - Password input config\n */\n/**\n * Config for individual components\n *\n * @import { AccordionConfig } from './components/accordion/accordion.mjs'\n * @import { ButtonConfig } from './components/button/button.mjs'\n * @import { CharacterCountConfig } from './components/character-count/character-count.mjs'\n * @import { ErrorSummaryConfig } from './components/error-summary/error-summary.mjs'\n * @import { ExitThisPageConfig } from './components/exit-this-page/exit-this-page.mjs'\n * @import { NotificationBannerConfig } from './components/notification-banner/notification-banner.mjs'\n * @import { PasswordInputConfig } from './components/password-input/password-input.mjs'\n * @import { FileUploadConfig } from './components/file-upload/file-upload.mjs'\n */\n/**\n * Component config keys, e.g. `accordion` and `characterCount`\n *\n * @typedef {keyof Omit<Config, 'scope' | 'onError'>} ConfigKey\n */\n/**\n * @template {CompatibleClass} ComponentClass\n * @typedef {ConstructorParameters<ComponentClass>[1]} ComponentConfig\n */\n/**\n * @template {CompatibleClass} ComponentClass\n * @typedef {object} ErrorContext\n * @property {Element} [element] - Element used for component module initialisation\n * @property {ComponentClass} [component] - Class of component\n * @property {Config | ComponentConfig<ComponentClass>} [config] - Config supplied to components\n */\n/**\n * @template {CompatibleClass} ComponentClass\n * @callback OnErrorCallback\n * @param {unknown} error - Thrown error\n * @param {ErrorContext<ComponentClass>} context - Object containing the element, component class and configuration\n */\n/**\n * @template {CompatibleClass} ComponentClass\n * @typedef {object} CreateAllOptions\n * @property {Element | Document | null} [scope] - scope of the document to search within\n * @property {OnErrorCallback<ComponentClass>} [onError] - callback function if error throw by component on init\n */\n\nexport { createAll, initAll };\n//# sourceMappingURL=init.mjs.map\n","/*\n * This variable is automatically overwritten during builds and releases.\n * It doesn't need to be updated manually.\n */\n\n/**\n * MOJ Frontend release version\n *\n * {@link https://github.com/ministryofjustice/moj-frontend/releases}\n */\nexport const version = 'development'\n","import { Component } from 'govuk-frontend'\n\nexport class AddAnother extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for add another\n */\n constructor($root) {\n super($root)\n\n this.$root.addEventListener('click', this.onRemoveButtonClick.bind(this))\n this.$root.addEventListener('click', this.onAddButtonClick.bind(this))\n\n const $buttons = this.$root.querySelectorAll(\n '.moj-add-another__add-button, moj-add-another__remove-button'\n )\n\n $buttons.forEach(($button) => {\n if (!($button instanceof HTMLButtonElement)) {\n return\n }\n\n $button.type = 'button'\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onAddButtonClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-add-another__add-button')\n ) {\n return\n }\n\n const $items = this.getItems()\n const $item = this.getNewItem()\n\n if (!$item || !($item instanceof HTMLElement)) {\n return\n }\n\n this.updateAttributes($item, $items.length)\n this.resetItem($item)\n\n const $firstItem = $items[0]\n if (!this.hasRemoveButton($firstItem)) {\n this.createRemoveButton($firstItem)\n }\n\n $items[$items.length - 1].after($item)\n\n const $input = $item.querySelector('input, textarea, select')\n if ($input && $input instanceof HTMLInputElement) {\n $input.focus()\n }\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n hasRemoveButton($item) {\n return $item.querySelectorAll('.moj-add-another__remove-button').length\n }\n\n getItems() {\n if (!this.$root) {\n return []\n }\n\n const $items = Array.from(\n this.$root.querySelectorAll('.moj-add-another__item')\n )\n\n return $items.filter((item) => item instanceof HTMLElement)\n }\n\n getNewItem() {\n const $items = this.getItems()\n const $item = $items[0].cloneNode(true)\n\n if (!$item || !($item instanceof HTMLElement)) {\n return\n }\n\n if (!this.hasRemoveButton($item)) {\n this.createRemoveButton($item)\n }\n\n return $item\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n * @param {number} index - Add another item index\n */\n updateAttributes($item, index) {\n $item.querySelectorAll('[data-name]').forEach(($input) => {\n if (!this.isValidInputElement($input)) {\n return\n }\n\n const name = $input.getAttribute('data-name') || ''\n const id = $input.getAttribute('data-id') || ''\n const originalId = $input.id\n\n $input.name = name.replace(/%index%/, `${index}`)\n $input.id = id.replace(/%index%/, `${index}`)\n\n const $label =\n $input.parentElement.querySelector('label') ||\n $input.closest('label') ||\n $item.querySelector(`[for=\"${originalId}\"]`)\n\n if ($label && $label instanceof HTMLLabelElement) {\n $label.htmlFor = $input.id\n }\n })\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n createRemoveButton($item) {\n const $button = document.createElement('button')\n $button.type = 'button'\n\n $button.classList.add(\n 'govuk-button',\n 'govuk-button--secondary',\n 'moj-add-another__remove-button'\n )\n\n $button.textContent = 'Remove'\n\n $item.append($button)\n }\n\n /**\n * @param {HTMLElement} $item - Add another item\n */\n resetItem($item) {\n $item.querySelectorAll('[data-name], [data-id]').forEach(($input) => {\n if (!this.isValidInputElement($input)) {\n return\n }\n\n if ($input instanceof HTMLSelectElement) {\n $input.selectedIndex = -1\n $input.value = ''\n } else if ($input instanceof HTMLTextAreaElement) {\n $input.value = ''\n } else {\n switch ($input.type) {\n case 'checkbox':\n case 'radio':\n $input.checked = false\n break\n default:\n $input.value = ''\n }\n }\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onRemoveButtonClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-add-another__remove-button')\n ) {\n return\n }\n\n $button.closest('.moj-add-another__item').remove()\n\n const $items = this.getItems()\n\n if ($items.length === 1) {\n $items[0].querySelector('.moj-add-another__remove-button').remove()\n }\n\n $items.forEach(($item, index) => {\n this.updateAttributes($item, index)\n })\n\n this.focusHeading()\n }\n\n focusHeading() {\n const $heading = this.$root.querySelector('.moj-add-another__heading')\n\n if ($heading && $heading instanceof HTMLElement) {\n $heading.focus()\n }\n }\n\n /**\n * @param {Element} $input - the input to validate\n */\n isValidInputElement($input) {\n return (\n $input instanceof HTMLInputElement ||\n $input instanceof HTMLSelectElement ||\n $input instanceof HTMLTextAreaElement\n )\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-add-another'\n}\n","/**\n * GOV.UK Frontend helpers\n *\n * @todo Import from GOV.UK Frontend\n */\n\n/**\n * Move focus to element\n *\n * Sets tabindex to -1 to make the element programmatically focusable,\n * but removes it on blur as the element doesn't need to be focused again.\n *\n * @template {HTMLElement} FocusElement\n * @param {FocusElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: FocusElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: FocusElement): void} [options.onBlur] - Callback on blur\n */\nexport function setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute('tabindex')\n\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1')\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener('blur', onBlur, { once: true })\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n options.onBlur?.call($element)\n\n if (!isFocusable) {\n $element.removeAttribute('tabindex')\n }\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener('focus', onFocus, { once: true })\n\n // Focus element\n options.onBeforeFocus?.call($element)\n $element.focus()\n}\n","/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n let re, m\n if ($element.getAttribute(attr)) {\n if ($element.getAttribute(attr) === value) {\n $element.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = $element.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n $element.setAttribute(\n attr,\n $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n let re\n if (!$element.getAttribute(attr)) {\n $element.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test($element.getAttribute(attr))) {\n $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n }\n }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return\n if (!$element || !($element instanceof HTMLElement) || !selector) {\n return\n }\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n","import { ConfigurableComponent } from 'govuk-frontend'\n\nimport { setFocus } from '../../common/index.mjs'\nimport {\n findNearestMatchingElement,\n getPreviousSibling\n} from '../../helpers.mjs'\n\n/**\n * @augments {ConfigurableComponent<AlertConfig>}\n */\nexport class Alert extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for alert\n * @param {AlertConfig} [config] - Alert config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n /**\n * Focus the alert\n *\n * If `role=\"alert\"` is set, focus the element to help some assistive\n * technologies prioritise announcing it.\n *\n * You can turn off the auto-focus functionality by setting\n * `data-disable-auto-focus=\"true\"` in the component HTML. You might wish to\n * do this based on user research findings, or to avoid a clash with another\n * element which should be focused when the page loads.\n */\n if (\n this.$root.getAttribute('role') === 'alert' &&\n !this.config.disableAutoFocus\n ) {\n setFocus(this.$root)\n }\n\n this.$dismissButton = this.$root.querySelector('.moj-alert__dismiss')\n\n if (this.config.dismissible && this.$dismissButton) {\n this.$dismissButton.innerHTML = this.config.dismissText\n this.$dismissButton.removeAttribute('hidden')\n\n this.$root.addEventListener('click', (event) => {\n if (\n event.target instanceof Node &&\n this.$dismissButton.contains(event.target)\n ) {\n this.dimiss()\n }\n })\n }\n }\n\n /**\n * Handle dismissing the alert\n */\n dimiss() {\n let $elementToRecieveFocus\n\n // If a selector has been provided, attempt to find that element\n if (this.config.focusOnDismissSelector) {\n $elementToRecieveFocus = document.querySelector(\n this.config.focusOnDismissSelector\n )\n }\n\n // Is the next sibling another alert\n if (!$elementToRecieveFocus) {\n const $nextSibling = this.$root.nextElementSibling\n if ($nextSibling && $nextSibling.matches('.moj-alert')) {\n $elementToRecieveFocus = $nextSibling\n }\n }\n\n // Else try to find any preceding sibling alert or heading\n if (!$elementToRecieveFocus) {\n $elementToRecieveFocus = getPreviousSibling(\n this.$root,\n '.moj-alert, h1, h2, h3, h4, h5, h6'\n )\n }\n\n // Else find the closest ancestor heading, or fallback to main, or last resort\n // use the body element\n if (!$elementToRecieveFocus) {\n $elementToRecieveFocus = findNearestMatchingElement(\n this.$root,\n 'h1, h2, h3, h4, h5, h6, main, body'\n )\n }\n\n // If we have an element, place focus on it\n if ($elementToRecieveFocus instanceof HTMLElement) {\n setFocus($elementToRecieveFocus)\n }\n\n // Remove the alert\n this.$root.remove()\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-alert'\n\n /**\n * Alert default config\n *\n * @type {AlertConfig}\n */\n static defaults = Object.freeze({\n dismissible: false,\n dismissText: 'Dismiss',\n disableAutoFocus: false\n })\n\n /**\n * Alert config schema\n *\n * @satisfies {Schema<AlertConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n dismissible: { type: 'boolean' },\n dismissText: { type: 'string' },\n disableAutoFocus: { type: 'boolean' },\n focusOnDismissSelector: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} AlertConfig\n * @property {boolean} [dismissible=false] - Can the alert be dismissed by the user\n * @property {string} [dismissText=Dismiss] - the label text for the dismiss button\n * @property {boolean} [disableAutoFocus=false] - whether the alert will be autofocused\n * @property {string} [focusOnDismissSelector] - CSS Selector for element to be focused on dismiss\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<ButtonMenuConfig>}\n */\nexport class ButtonMenu extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for button menu\n * @param {ButtonMenuConfig} [config] - Button menu config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n // If only one button is provided, don't initiate a menu and toggle button\n // if classes have been provided for the toggleButton, apply them to the single item\n if (this.$root.children.length === 1) {\n const $button = this.$root.children[0]\n\n $button.classList.forEach((className) => {\n if (className.startsWith('govuk-button-')) {\n $button.classList.remove(className)\n }\n\n $button.classList.remove('moj-button-menu__item')\n $button.classList.add('moj-button-menu__single-button')\n })\n\n if (this.config.buttonClasses) {\n $button.classList.add(...this.config.buttonClasses.split(' '))\n }\n }\n // Otherwise initialise a button menu\n if (this.$root.children.length > 1) {\n this.initMenu()\n }\n }\n\n initMenu() {\n this.$menu = this.createMenu()\n this.$root.insertAdjacentHTML('afterbegin', this.toggleTemplate())\n this.setupMenuItems()\n\n this.$menuToggle = this.$root.querySelector(':scope > button')\n this.$items = this.$menu.querySelectorAll('a, button')\n\n this.$menuToggle.addEventListener('click', (event) => {\n this.toggleMenu(event)\n })\n\n this.$root.addEventListener('keydown', (event) => {\n this.handleKeyDown(event)\n })\n\n document.addEventListener('click', (event) => {\n if (event.target instanceof Node && !this.$root.contains(event.target)) {\n this.closeMenu(false)\n }\n })\n }\n\n createMenu() {\n const $menu = document.createElement('ul')\n\n $menu.setAttribute('role', 'list')\n $menu.hidden = true\n $menu.classList.add('moj-button-menu__wrapper')\n\n if (this.config.alignMenu === 'right') {\n $menu.classList.add('moj-button-menu__wrapper--right')\n }\n\n this.$root.appendChild($menu)\n\n while (this.$root.firstChild !== $menu) {\n $menu.appendChild(this.$root.firstChild)\n }\n\n return $menu\n }\n\n setupMenuItems() {\n Array.from(this.$menu.children).forEach(($menuItem) => {\n // wrap item in li tag\n const $listItem = document.createElement('li')\n this.$menu.insertBefore($listItem, $menuItem)\n $listItem.appendChild($menuItem)\n\n $menuItem.setAttribute('tabindex', '-1')\n\n if ($menuItem.tagName === 'BUTTON') {\n $menuItem.setAttribute('type', 'button')\n }\n\n $menuItem.classList.forEach((className) => {\n if (className.startsWith('govuk-button')) {\n $menuItem.classList.remove(className)\n }\n })\n\n // add a slight delay after click before closing the menu, makes it *feel* better\n $menuItem.addEventListener('click', () => {\n setTimeout(() => {\n this.closeMenu(false)\n }, 50)\n })\n })\n }\n\n toggleTemplate() {\n return `\n <button type=\"button\" class=\"govuk-button moj-button-menu__toggle-button ${this.config.buttonClasses || ''}\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <span>\n ${this.config.buttonText}\n <svg width=\"11\" height=\"5\" viewBox=\"0 0 11 5\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M5.5 0L11 5L0 5L5.5 0Z\" fill=\"currentColor\"/>\n </svg>\n </span>\n </button>`\n }\n\n /**\n * @returns {boolean}\n */\n isOpen() {\n return this.$menuToggle.getAttribute('aria-expanded') === 'true'\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n toggleMenu(event) {\n event.preventDefault()\n\n // If menu is triggered with mouse don't move focus to first item\n const keyboardEvent = event.detail === 0\n const focusIndex = keyboardEvent ? 0 : -1\n\n if (this.isOpen()) {\n this.closeMenu()\n } else {\n this.openMenu(focusIndex)\n }\n }\n\n /**\n * Opens the menu and optionally sets the focus to the item with given index\n *\n * @param {number} focusIndex - The index of the item to focus\n */\n openMenu(focusIndex = 0) {\n this.$menu.hidden = false\n this.$menuToggle.setAttribute('aria-expanded', 'true')\n if (focusIndex !== -1) {\n this.focusItem(focusIndex)\n }\n }\n\n /**\n * Closes the menu and optionally returns focus back to menuToggle\n *\n * @param {boolean} moveFocus - whether to return focus to the toggle button\n */\n closeMenu(moveFocus = true) {\n this.$menu.hidden = true\n this.$menuToggle.setAttribute('aria-expanded', 'false')\n if (moveFocus) {\n this.$menuToggle.focus()\n }\n }\n\n /**\n * Focuses the menu item at the specified index\n *\n * @param {number} index - the index of the item to focus\n */\n focusItem(index) {\n if (index >= this.$items.length) index = 0\n if (index < 0) index = this.$items.length - 1\n\n const $menuItem = this.$items.item(index)\n if ($menuItem) {\n $menuItem.focus()\n }\n }\n\n currentFocusIndex() {\n const $activeElement = document.activeElement\n const $menuItems = Array.from(this.$items)\n\n return (\n ($activeElement instanceof HTMLAnchorElement ||\n $activeElement instanceof HTMLButtonElement) &&\n $menuItems.indexOf($activeElement)\n )\n }\n\n /**\n * @param {KeyboardEvent} event - Keydown event\n */\n handleKeyDown(event) {\n if (event.target === this.$menuToggle) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n this.openMenu()\n break\n case 'ArrowUp':\n event.preventDefault()\n this.openMenu(this.$items.length - 1)\n break\n }\n }\n\n if (\n event.target instanceof Node &&\n this.$menu.contains(event.target) &&\n this.isOpen()\n ) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n if (this.currentFocusIndex() !== -1) {\n this.focusItem(this.currentFocusIndex() + 1)\n }\n break\n case 'ArrowUp':\n event.preventDefault()\n if (this.currentFocusIndex() !== -1) {\n this.focusItem(this.currentFocusIndex() - 1)\n }\n break\n case 'Home':\n event.preventDefault()\n this.focusItem(0)\n break\n case 'End':\n event.preventDefault()\n this.focusItem(this.$items.length - 1)\n break\n }\n }\n\n if (event.key === 'Escape' && this.isOpen()) {\n this.closeMenu()\n }\n if (event.key === 'Tab' && this.isOpen()) {\n this.closeMenu(false)\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-button-menu'\n\n /**\n * Button menu config\n *\n * @type {ButtonMenuConfig}\n */\n static defaults = Object.freeze({\n buttonText: 'Actions',\n alignMenu: 'left',\n buttonClasses: ''\n })\n\n /**\n * Button menu config schema\n *\n * @type {Schema<ButtonMenuConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n buttonText: { type: 'string' },\n buttonClasses: { type: 'string' },\n alignMenu: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} ButtonMenuConfig\n * @property {string} [buttonText='Actions'] - Label for the toggle button\n * @property {\"left\" | \"right\"} [alignMenu='left'] - the alignment of the menu\n * @property {string} [buttonClasses='govuk-button--secondary'] - css classes applied to the toggle button\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<DatePickerConfig>}\n */\nexport class DatePicker extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for date picker\n * @param {DatePickerConfig} [config] - Date picker config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $input =\n this.config.input.element ??\n this.$root.querySelector(this.config.input.selector)\n\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\n\n this.dayLabels = [\n 'Monday',\n 'Tuesday',\n 'Wednesday',\n 'Thursday',\n 'Friday',\n 'Saturday',\n 'Sunday'\n ]\n\n this.monthLabels = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December'\n ]\n\n this.currentDate = new Date()\n this.currentDate.setHours(0, 0, 0, 0)\n this.calendarDays = /** @type {DSCalendarDay[]} */ ([])\n this.excludedDates = /** @type {Date[]} */ ([])\n this.excludedDays = /** @type {number[]} */ ([])\n\n this.buttonClass = 'moj-datepicker__button'\n this.selectedDayButtonClass = 'moj-datepicker__button--selected'\n this.currentDayButtonClass = 'moj-datepicker__button--current'\n this.todayButtonClass = 'moj-datepicker__button--today'\n\n this.setOptions()\n this.initControls()\n }\n\n initControls() {\n this.id = `datepicker-${this.$input.id}`\n\n this.$dialog = this.createDialog()\n this.createCalendarHeaders()\n\n const $componentWrapper = document.createElement('div')\n const $inputWrapper = document.createElement('div')\n $componentWrapper.classList.add('moj-datepicker__wrapper')\n $inputWrapper.classList.add('govuk-input__wrapper')\n\n this.$input.parentElement.insertBefore($componentWrapper, this.$input)\n $componentWrapper.appendChild($inputWrapper)\n $inputWrapper.appendChild(this.$input)\n\n $inputWrapper.insertAdjacentHTML('beforeend', this.toggleTemplate())\n $componentWrapper.insertAdjacentElement('beforeend', this.$dialog)\n\n this.$calendarButton = /** @type {HTMLButtonElement} */ (\n this.$root.querySelector('.moj-js-datepicker-toggle')\n )\n\n this.$dialogTitle = /** @type {HTMLHeadingElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-month-year')\n )\n\n this.createCalendar()\n\n this.$prevMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-month')\n )\n\n this.$prevYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-prev-year')\n )\n\n this.$nextMonthButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-month')\n )\n\n this.$nextYearButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-next-year')\n )\n\n this.$cancelButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-cancel')\n )\n\n this.$okButton = /** @type {HTMLButtonElement} */ (\n this.$dialog.querySelector('.moj-js-datepicker-ok')\n )\n\n // add event listeners\n this.$prevMonthButton.addEventListener('click', (event) =>\n this.focusPreviousMonth(event, false)\n )\n this.$prevYearButton.addEventListener('click', (event) =>\n this.focusPreviousYear(event, false)\n )\n this.$nextMonthButton.addEventListener('click', (event) =>\n this.focusNextMonth(event, false)\n )\n this.$nextYearButton.addEventListener('click', (event) =>\n this.focusNextYear(event, false)\n )\n this.$cancelButton.addEventListener('click', (event) => {\n event.preventDefault()\n this.closeDialog()\n })\n this.$okButton.addEventListener('click', () => {\n this.selectDate(this.currentDate)\n })\n\n const $dialogButtons = this.$dialog.querySelectorAll(\n 'button:not([disabled=\"true\"])'\n )\n\n this.$firstButtonInDialog = $dialogButtons[0]\n this.$lastButtonInDialog = $dialogButtons[$dialogButtons.length - 1]\n this.$firstButtonInDialog.addEventListener('keydown', (event) =>\n this.firstButtonKeydown(event)\n )\n this.$lastButtonInDialog.addEventListener('keydown', (event) =>\n this.lastButtonKeydown(event)\n )\n\n this.$calendarButton.addEventListener('click', (event) =>\n this.toggleDialog(event)\n )\n\n this.$dialog.addEventListener('keydown', (event) => {\n if (event.key === 'Escape') {\n this.closeDialog()\n event.preventDefault()\n event.stopPropagation()\n }\n })\n\n document.body.addEventListener('mouseup', (event) => {\n this.backgroundClick(event)\n })\n\n // populates calendar with initial dates, avoids Wave errors about null buttons\n this.updateCalendar()\n }\n\n createDialog() {\n const titleId = `datepicker-title-${this.$input.id}`\n const $dialog = document.createElement('div')\n\n $dialog.id = this.id\n $dialog.setAttribute('class', 'moj-datepicker__dialog')\n $dialog.setAttribute('role', 'dialog')\n $dialog.setAttribute('aria-modal', 'true')\n $dialog.setAttribute('aria-labelledby', titleId)\n $dialog.innerHTML = this.dialogTemplate(titleId)\n $dialog.hidden = true\n\n return $dialog\n }\n\n createCalendar() {\n const $tbody = this.$dialog.querySelector('tbody')\n let dayCount = 0\n for (let i = 0; i < 6; i++) {\n // create row\n const $row = $tbody.insertRow(i)\n\n for (let j = 0; j < 7; j++) {\n // create cell (day)\n const $cell = document.createElement('td')\n $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","import { Component } from 'govuk-frontend'\n\nexport class PdsHeader extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for PDS header\n */\n constructor($root) {\n super($root)\n this.initHeader()\n }\n\n initHeader() {\n this.$tabOpenClass = 'probation-common-header__toggle-open'\n const $userToggle = this.$root.querySelector(\n '.probation-common-header__user-menu-toggle'\n )\n const $userMenu = this.$root.querySelector(\n '#probation-common-header-user-menu'\n )\n\n const $servicesToggle = this.$root.querySelector(\n '.probation-common-header__services-menu-toggle'\n )\n\n const $servicesMenu = this.$root.querySelector(\n '#probation-common-header-services-menu'\n )\n\n if (\n !$userToggle ||\n !$userMenu ||\n !$servicesToggle ||\n !$servicesMenu ||\n !($userToggle instanceof HTMLElement) ||\n !($userMenu instanceof HTMLElement) ||\n !($servicesToggle instanceof HTMLElement) ||\n !($servicesMenu instanceof HTMLElement)\n ) {\n return 0\n }\n\n this.hideFallbackLinks()\n $userToggle.removeAttribute('hidden')\n $servicesToggle.removeAttribute('hidden')\n\n this.closeTabs([\n [$userToggle, $userMenu],\n [$servicesToggle, $servicesMenu]\n ])\n\n $userToggle.addEventListener('click', (_event) => {\n this.closeTabs([[$servicesToggle, $servicesMenu]])\n this.toggleMenu($userToggle, $userMenu)\n })\n\n $servicesToggle.addEventListener('click', (_event) => {\n this.closeTabs([[$userToggle, $userMenu]])\n this.toggleMenu($servicesToggle, $servicesMenu)\n })\n }\n\n /**\n * @param {[any, any][]} tabTuples\n */\n closeTabs(tabTuples) {\n tabTuples.forEach(([toggle, menu]) => {\n if (menu && toggle) {\n menu.setAttribute('hidden', 'hidden')\n toggle.classList.remove(this.$tabOpenClass)\n toggle.parentElement.classList.remove('item-open')\n toggle.setAttribute('aria-expanded', 'false')\n if (toggle.dataset.textForShow)\n toggle.setAttribute('aria-label', toggle.dataset.textForShow)\n }\n })\n }\n\n /**\n * @param {HTMLElement} toggle\n * @param {HTMLElement} menu\n */\n toggleMenu(toggle, menu) {\n const isOpen = !menu.getAttribute('hidden')\n\n if (isOpen) {\n this.closeTabs([[toggle, menu]])\n } else if (menu && toggle) {\n menu.removeAttribute('hidden')\n toggle.classList.add(this.$tabOpenClass)\n toggle.parentElement.classList.add('item-open')\n toggle.setAttribute('aria-expanded', 'true')\n if (toggle.dataset.textForHide)\n toggle.setAttribute('aria-label', toggle.dataset.textForHide)\n }\n }\n\n hideFallbackLinks() {\n const $userLink = this.$root.querySelector(\n '.probation-common-header__user-menu-link'\n )\n const $servicesLink = this.$root.querySelector(\n '.probation-common-header__services-menu-link'\n )\n if ($userLink) $userLink.setAttribute('hidden', 'hidden')\n if ($servicesLink) $servicesLink.setAttribute('hidden', 'hidden')\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'pds-header'\n}\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<FilterToggleButtonConfig>}\n */\nexport class FilterToggleButton extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for filter toggle button\n * @param {FilterToggleButtonConfig} [config] - Filter toggle button config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $toggleButtonContainer =\n this.config.toggleButtonContainer.element ??\n document.querySelector(this.config.toggleButtonContainer.selector)\n\n const $closeButtonContainer =\n this.config.closeButtonContainer.element ??\n this.$root.querySelector(this.config.closeButtonContainer.selector)\n\n if (\n !(\n $toggleButtonContainer instanceof HTMLElement &&\n $closeButtonContainer instanceof HTMLElement\n )\n ) {\n return this\n }\n\n this.$toggleButtonContainer = $toggleButtonContainer\n this.$closeButtonContainer = $closeButtonContainer\n\n this.createToggleButton()\n this.setupResponsiveChecks()\n\n this.$root.setAttribute('tabindex', '-1')\n\n if (this.config.startHidden) {\n this.hideMenu()\n }\n }\n\n setupResponsiveChecks() {\n this.mq = window.matchMedia(this.config.bigModeMediaQuery)\n this.mq.addListener(this.checkMode.bind(this))\n this.checkMode()\n }\n\n createToggleButton() {\n this.$menuButton = document.createElement('button')\n this.$menuButton.setAttribute('type', 'button')\n this.$menuButton.setAttribute('aria-haspopup', 'true')\n this.$menuButton.setAttribute('aria-expanded', 'false')\n\n this.$menuButton.className = `govuk-button ${this.config.toggleButton.classes}`\n this.$menuButton.textContent = this.config.toggleButton.showText\n\n this.$menuButton.addEventListener(\n 'click',\n this.onMenuButtonClick.bind(this)\n )\n\n this.$toggleButtonContainer.append(this.$menuButton)\n }\n\n checkMode() {\n if (this.mq.matches) {\n this.enableBigMode()\n } else {\n this.enableSmallMode()\n }\n }\n\n enableBigMode() {\n this.showMenu()\n this.removeCloseButton()\n }\n\n enableSmallMode() {\n this.hideMenu()\n this.addCloseButton()\n }\n\n addCloseButton() {\n this.$closeButton = document.createElement('button')\n this.$closeButton.setAttribute('type', 'button')\n\n this.$closeButton.className = this.config.closeButton.classes\n this.$closeButton.textContent = this.config.closeButton.text\n\n this.$closeButton.addEventListener('click', this.onCloseClick.bind(this))\n this.$closeButtonContainer.append(this.$closeButton)\n }\n\n onCloseClick() {\n this.hideMenu()\n this.$menuButton.focus()\n }\n\n removeCloseButton() {\n if (this.$closeButton) {\n this.$closeButton.remove()\n this.$closeButton = null\n }\n }\n\n hideMenu() {\n this.$menuButton.setAttribute('aria-expanded', 'false')\n this.$root.classList.add('moj-js-hidden')\n this.$menuButton.textContent = this.config.toggleButton.showText\n }\n\n showMenu() {\n this.$menuButton.setAttribute('aria-expanded', 'true')\n this.$root.classList.remove('moj-js-hidden')\n this.$menuButton.textContent = this.config.toggleButton.hideText\n }\n\n onMenuButtonClick() {\n this.toggle()\n }\n\n toggle() {\n if (this.$menuButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n this.$root.focus()\n } else {\n this.hideMenu()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-filter'\n\n /**\n * Filter toggle button config\n *\n * @type {FilterToggleButtonConfig}\n */\n static defaults = Object.freeze({\n bigModeMediaQuery: '(min-width: 48.0625em)',\n startHidden: true,\n toggleButton: {\n showText: 'Show filter',\n hideText: 'Hide filter',\n classes: 'govuk-button--secondary'\n },\n toggleButtonContainer: {\n selector: '.moj-action-bar__filter'\n },\n closeButton: {\n text: 'Close',\n classes: 'moj-filter__close'\n },\n closeButtonContainer: {\n selector: '.moj-filter__header-action'\n }\n })\n\n /**\n * Filter toggle button config schema\n *\n * @satisfies {Schema<FilterToggleButtonConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n bigModeMediaQuery: { type: 'string' },\n startHidden: { type: 'boolean' },\n toggleButton: { type: 'object' },\n toggleButtonContainer: { type: 'object' },\n closeButton: { type: 'object' },\n closeButtonContainer: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} FilterToggleButtonConfig\n * @property {string} [bigModeMediaQuery] - Media query for big mode\n * @property {boolean} [startHidden] - Whether to start hidden\n * @property {object} [toggleButton] - Toggle button config\n * @property {string} [toggleButton.showText] - Text for show button\n * @property {string} [toggleButton.hideText] - Text for hide button\n * @property {string} [toggleButton.classes] - Classes for toggle button\n * @property {object} [toggleButtonContainer] - Toggle button container config\n * @property {string} [toggleButtonContainer.selector] - Selector for toggle button container\n * @property {Element | null} [toggleButtonContainer.element] - HTML element for toggle button container\n * @property {object} [closeButton] - Close button config\n * @property {string} [closeButton.text] - Text for close button\n * @property {string} [closeButton.classes] - Classes for close button\n * @property {object} [closeButtonContainer] - Close button container config\n * @property {string} [closeButtonContainer.selector] - Selector for close button container\n * @property {Element | null} [closeButtonContainer.element] - HTML element for close button container\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\nimport { addAttributeValue, removeAttributeValue } from '../../helpers.mjs'\n\n/**\n * @augments {ConfigurableComponent<FormValidatorConfig, HTMLFormElement>}\n */\nexport class FormValidator extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for form validator\n * @param {FormValidatorConfig} [config] - Form validator config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $summary =\n this.config.summary.element ||\n document.querySelector(this.config.summary.selector)\n\n if (!$summary || !($summary instanceof HTMLElement)) {\n return this\n }\n\n this.$summary = $summary\n\n this.errors = /** @type {ValidationError[]} */ ([])\n this.validators = /** @type {Validator[]} */ ([])\n this.originalTitle = document.title\n\n this.$root.addEventListener('submit', this.onSubmit.bind(this))\n }\n\n escapeHtml(string = '') {\n return String(string).replace(\n /[&<>\"'`=/]/g,\n (name) => FormValidator.entityMap[name]\n )\n }\n\n resetTitle() {\n document.title = this.originalTitle\n }\n\n updateTitle() {\n document.title = `${this.errors.length} errors - ${document.title}`\n }\n\n showSummary() {\n this.$summary.innerHTML = this.getSummaryHtml()\n this.$summary.classList.remove('moj-hidden')\n this.$summary.setAttribute('aria-labelledby', 'errorSummary-heading')\n this.$summary.focus()\n }\n\n getSummaryHtml() {\n let html =\n '<h2 id=\"error-summary-title\" class=\"govuk-error-summary__title\">There is a problem</h2>'\n html += '<div class=\"govuk-error-summary__body\">'\n html += '<ul class=\"govuk-list govuk-error-summary__list\">'\n for (const error of this.errors) {\n html += '<li>'\n html += `<a href=\"#${this.escapeHtml(error.fieldName)}\">`\n html += this.escapeHtml(error.message)\n html += '</a>'\n html += '</li>'\n }\n html += '</ul>'\n html += '</div>'\n return html\n }\n\n hideSummary() {\n this.$summary.classList.add('moj-hidden')\n this.$summary.removeAttribute('aria-labelledby')\n }\n\n /**\n * @param {SubmitEvent} event - Form submit event\n */\n onSubmit(event) {\n this.removeInlineErrors()\n this.hideSummary()\n this.resetTitle()\n if (!this.validate()) {\n event.preventDefault()\n this.updateTitle()\n this.showSummary()\n this.showInlineErrors()\n }\n }\n\n showInlineErrors() {\n for (const error of this.errors) {\n this.showInlineError(error)\n }\n }\n\n /**\n * @param {ValidationError} error\n */\n showInlineError(error) {\n const $errorSpan = document.createElement('span')\n $errorSpan.id = `${error.fieldName}-error`\n $errorSpan.classList.add('govuk-error-message')\n $errorSpan.innerHTML = this.escapeHtml(error.message)\n\n const $control = document.querySelector(`#${error.fieldName}`)\n const $fieldset = $control.closest('.govuk-fieldset')\n const $fieldContainer = ($fieldset || $control).closest('.govuk-form-group')\n\n const $label = $fieldContainer.querySelector('label')\n const $legend = $fieldContainer.querySelector('legend')\n\n $fieldContainer.classList.add('govuk-form-group--error')\n\n if ($fieldset && $legend) {\n $legend.after($errorSpan)\n $fieldContainer.setAttribute('aria-invalid', 'true')\n addAttributeValue($fieldset, 'aria-describedby', $errorSpan.id)\n } else if ($label && $control) {\n $label.after($errorSpan)\n $control.setAttribute('aria-invalid', 'true')\n addAttributeValue($control, 'aria-describedby', $errorSpan.id)\n }\n }\n\n removeInlineErrors() {\n for (const error of this.errors) {\n this.removeInlineError(error)\n }\n }\n\n /**\n * @param {ValidationError} error\n */\n removeInlineError(error) {\n const $errorSpan = document.querySelector(`#${error.fieldName}-error`)\n\n const $control = document.querySelector(`#${error.fieldName}`)\n const $fieldset = $control.closest('.govuk-fieldset')\n const $fieldContainer = ($fieldset || $control).closest('.govuk-form-group')\n\n const $label = $fieldContainer.querySelector('label')\n const $legend = $fieldContainer.querySelector('legend')\n\n $errorSpan.remove()\n $fieldContainer.classList.remove('govuk-form-group--error')\n\n if ($fieldset && $legend) {\n $fieldContainer.removeAttribute('aria-invalid')\n removeAttributeValue($fieldset, 'aria-describedby', $errorSpan.id)\n } else if ($label && $control) {\n $control.removeAttribute('aria-invalid')\n removeAttributeValue($control, 'aria-describedby', $errorSpan.id)\n }\n }\n\n /**\n * @param {string} fieldName - Field name\n * @param {ValidationRule[]} rules - Validation rules\n */\n addValidator(fieldName, rules) {\n this.validators.push({\n fieldName,\n rules,\n field: this.$root.elements.namedItem(fieldName)\n })\n }\n\n validate() {\n this.errors = []\n\n /** @type {Validator | null} */\n let validator = null\n\n /** @type {boolean | string} */\n let validatorReturnValue = true\n\n let i\n let j\n\n for (i = 0; i < this.validators.length; i++) {\n validator = this.validators[i]\n for (j = 0; j < validator.rules.length; j++) {\n validatorReturnValue = validator.rules[j].method(\n validator.field,\n validator.rules[j].params\n )\n\n if (\n typeof validatorReturnValue === 'boolean' &&\n !validatorReturnValue\n ) {\n this.errors.push({\n fieldName: validator.fieldName,\n message: validator.rules[j].message\n })\n break\n } else if (typeof validatorReturnValue === 'string') {\n this.errors.push({\n fieldName: validatorReturnValue,\n message: validator.rules[j].message\n })\n break\n }\n }\n }\n return this.errors.length === 0\n }\n\n /**\n * @type {Record<string, string>}\n */\n static entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '/': '/',\n '`': '`',\n '=': '='\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-form-validator'\n\n /**\n * Multi file upload default config\n *\n * @type {FormValidatorConfig}\n */\n static defaults = Object.freeze({\n summary: {\n selector: '.govuk-error-summary'\n }\n })\n\n /**\n * Multi file upload config schema\n *\n * @satisfies {Schema<FormValidatorConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n summary: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} FormValidatorConfig\n * @property {object} [summary] - Error summary config\n * @property {string} [summary.selector] - Selector for error summary\n * @property {Element | null} [summary.element] - HTML element for error summary\n */\n\n/**\n * @typedef {object} ValidationRule\n * @property {(field: Validator['field'], params: Record<string, Validator['field']>) => boolean | string} method - Validation method\n * @property {string} message - Error message\n * @property {Record<string, Validator['field']>} [params] - Parameters for validation\n */\n\n/**\n * @typedef {object} ValidationError\n * @property {string} fieldName - Name of the field\n * @property {string} message - Validation error message\n */\n\n/**\n * @typedef {object} Validator\n * @property {string} fieldName - Name of the field\n * @property {ValidationRule[]} rules - Validation rules\n * @property {Element | RadioNodeList} field - Form field\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","/* eslint-disable @typescript-eslint/no-empty-function */\n\nimport { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<MultiFileUploadConfig>}\n */\nexport class MultiFileUpload extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for multi file upload\n * @param {MultiFileUploadConfig} [config] - Multi file upload config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n if (!MultiFileUpload.isSupported()) {\n return this\n }\n\n const $feedbackContainer =\n this.config.feedbackContainer.element ??\n this.$root.querySelector(this.config.feedbackContainer.selector)\n\n if (!$feedbackContainer || !($feedbackContainer instanceof HTMLElement)) {\n return this\n }\n\n this.$feedbackContainer = $feedbackContainer\n\n this.setupFileInput()\n this.setupDropzone()\n this.setupLabel()\n this.setupStatusBox()\n\n this.$root.addEventListener('click', this.onFileDeleteClick.bind(this))\n this.$root.classList.add('moj-multi-file-upload--enhanced')\n }\n\n setupDropzone() {\n this.$dropzone = document.createElement('div')\n this.$dropzone.classList.add('moj-multi-file-upload__dropzone')\n\n this.$dropzone.addEventListener('dragover', this.onDragOver.bind(this))\n this.$dropzone.addEventListener('dragleave', this.onDragLeave.bind(this))\n this.$dropzone.addEventListener('drop', this.onDrop.bind(this))\n\n this.$fileInput.replaceWith(this.$dropzone)\n this.$dropzone.appendChild(this.$fileInput)\n }\n\n setupLabel() {\n const $label = document.createElement('label')\n $label.setAttribute('for', this.$fileInput.id)\n $label.classList.add('govuk-button', 'govuk-button--secondary')\n $label.textContent = this.config.dropzoneButtonText\n\n const $hint = document.createElement('p')\n $hint.classList.add('govuk-body')\n $hint.textContent = this.config.dropzoneHintText\n\n this.$label = $label\n this.$dropzone.append($hint)\n this.$dropzone.append($label)\n }\n\n setupFileInput() {\n this.$fileInput = /** @type {HTMLInputElement} */ (\n this.$root.querySelector('.moj-multi-file-upload__input')\n )\n this.$fileInput.addEventListener('change', this.onFileChange.bind(this))\n this.$fileInput.addEventListener('focus', this.onFileFocus.bind(this))\n this.$fileInput.addEventListener('blur', this.onFileBlur.bind(this))\n }\n\n setupStatusBox() {\n this.$status = document.createElement('div')\n this.$status.classList.add('govuk-visually-hidden')\n this.$status.setAttribute('aria-live', 'polite')\n this.$status.setAttribute('role', 'status')\n this.$dropzone.append(this.$status)\n }\n\n /**\n * @param {DragEvent} event - Drag event\n */\n onDragOver(event) {\n event.preventDefault()\n this.$dropzone.classList.add('moj-multi-file-upload--dragover')\n }\n\n onDragLeave() {\n this.$dropzone.classList.remove('moj-multi-file-upload--dragover')\n }\n\n /**\n * @param {DragEvent} event - Drag event\n */\n onDrop(event) {\n event.preventDefault()\n this.$dropzone.classList.remove('moj-multi-file-upload--dragover')\n this.$feedbackContainer.classList.remove('moj-hidden')\n this.$status.textContent = this.config.uploadStatusText\n this.uploadFiles(event.dataTransfer.files)\n }\n\n /**\n * @param {FileList} files - File list\n */\n uploadFiles(files) {\n for (const file of Array.from(files)) {\n this.uploadFile(file)\n }\n }\n\n onFileChange() {\n this.$feedbackContainer.classList.remove('moj-hidden')\n this.$status.textContent = this.config.uploadStatusText\n this.uploadFiles(this.$fileInput.files)\n\n const $fileInput = this.$fileInput.cloneNode(true)\n if (!$fileInput || !($fileInput instanceof HTMLInputElement)) {\n return\n }\n\n $fileInput.value = ''\n this.$fileInput.replaceWith($fileInput)\n\n this.setupFileInput()\n this.$fileInput.focus()\n }\n\n onFileFocus() {\n this.$label.classList.add('moj-multi-file-upload--focused')\n }\n\n onFileBlur() {\n this.$label.classList.remove('moj-multi-file-upload--focused')\n }\n\n /**\n * @param {UploadResponseSuccess['success']} success\n */\n getSuccessHtml(success) {\n return `<span class=\"moj-multi-file-upload__success\"> <svg class=\"moj-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\"><path d=\"M25,6.2L8.7,23.2L0,14.1l4-4.2l4.7,4.9L21,2L25,6.2z\"/></svg>${success.messageHtml}</span>`\n }\n\n /**\n * @param {UploadResponseError['error']} error\n */\n getErrorHtml(error) {\n return `<span class=\"moj-multi-file-upload__error\"> <svg class=\"moj-banner__icon\" fill=\"currentColor\" role=\"presentation\" focusable=\"false\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 25 25\" height=\"25\" width=\"25\"><path d=\"M13.6,15.4h-2.3v-4.5h2.3V15.4z M13.6,19.8h-2.3v-2.2h2.3V19.8z M0,23.2h25L12.5,2L0,23.2z\"/></svg>${error.message}</span>`\n }\n\n /**\n * @param {File} file\n */\n getFileRow(file) {\n const $row = document.createElement('div')\n\n $row.classList.add('govuk-summary-list__row', 'moj-multi-file-upload__row')\n\n $row.innerHTML = `\n <div class=\"govuk-summary-list__value moj-multi-file-upload__message\">\n <span class=\"moj-multi-file-upload__filename\">${file.name}</span>\n <span class=\"moj-multi-file-upload__progress\">0%</span>\n </div>\n <div class=\"govuk-summary-list__actions moj-multi-file-upload__actions\"></div>\n `\n\n return $row\n }\n\n /**\n * @param {UploadResponseFile} file\n */\n getDeleteButton(file) {\n const $button = document.createElement('button')\n\n $button.setAttribute('type', 'button')\n $button.setAttribute('name', 'delete')\n $button.setAttribute('value', file.filename)\n\n $button.classList.add(\n 'moj-multi-file-upload__delete',\n 'govuk-button',\n 'govuk-button--secondary',\n 'govuk-!-margin-bottom-0'\n )\n\n $button.innerHTML = `Delete <span class=\"govuk-visually-hidden\">${file.originalname}</span>`\n\n return $button\n }\n\n /**\n * @param {File} file\n */\n uploadFile(file) {\n this.config.hooks.entryHook(this, file)\n\n const $item = this.getFileRow(file)\n const $message = $item.querySelector('.moj-multi-file-upload__message')\n const $actions = $item.querySelector('.moj-multi-file-upload__actions')\n const $progress = $item.querySelector('.moj-multi-file-upload__progress')\n\n const formData = new FormData()\n formData.append('documents', file)\n\n this.$feedbackContainer\n .querySelector('.moj-multi-file-upload__list')\n .append($item)\n\n const xhr = new XMLHttpRequest()\n\n const onLoad = () => {\n if (\n xhr.status < 200 ||\n xhr.status >= 300 ||\n !('success' in xhr.response)\n ) {\n return onError()\n }\n\n $message.innerHTML = this.getSuccessHtml(xhr.response.success)\n this.$status.textContent = xhr.response.success.messageText\n\n $actions.append(this.getDeleteButton(xhr.response.file))\n this.config.hooks.exitHook(this, file, xhr, xhr.statusText)\n }\n\n const onError = () => {\n const error = new Error(\n xhr.response && 'error' in xhr.response\n ? xhr.response.error.message\n : xhr.statusText || 'Upload failed'\n )\n\n $message.innerHTML = this.getErrorHtml(error)\n this.$status.textContent = error.message\n\n this.config.hooks.errorHook(this, file, xhr, xhr.statusText, error)\n }\n\n xhr.addEventListener('load', onLoad)\n xhr.addEventListener('error', onError)\n\n xhr.upload.addEventListener('progress', (event) => {\n if (!event.lengthComputable) {\n return\n }\n\n const percentComplete = Math.round((event.loaded / event.total) * 100)\n $progress.textContent = ` ${percentComplete}%`\n })\n\n xhr.open('POST', this.config.uploadUrl)\n xhr.responseType = 'json'\n\n xhr.send(formData)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onFileDeleteClick(event) {\n const $button = event.target\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.classList.contains('moj-multi-file-upload__delete')\n ) {\n return\n }\n\n event.preventDefault() // if user refreshes page and then deletes\n\n const xhr = new XMLHttpRequest()\n\n xhr.addEventListener('load', () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n return\n }\n\n const $rows = Array.from(\n this.$feedbackContainer.querySelectorAll('.moj-multi-file-upload__row')\n )\n\n if ($rows.length === 1) {\n this.$feedbackContainer.classList.add('moj-hidden')\n }\n\n const $rowDelete = $rows.find(($row) => $row.contains($button))\n if ($rowDelete) $rowDelete.remove()\n\n this.config.hooks.deleteHook(this, undefined, xhr, xhr.statusText)\n })\n\n xhr.open('POST', this.config.deleteUrl)\n xhr.setRequestHeader('Content-Type', 'application/json')\n xhr.responseType = 'json'\n\n xhr.send(\n JSON.stringify({\n [$button.name]: $button.value\n })\n )\n }\n\n static isSupported() {\n return (\n this.isDragAndDropSupported() &&\n this.isFormDataSupported() &&\n this.isFileApiSupported()\n )\n }\n\n static isDragAndDropSupported() {\n const div = document.createElement('div')\n return typeof div.ondrop !== 'undefined'\n }\n\n static isFormDataSupported() {\n return typeof FormData === 'function'\n }\n\n static isFileApiSupported() {\n const input = document.createElement('input')\n input.type = 'file'\n return typeof input.files !== 'undefined'\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-multi-file-upload'\n\n /**\n * Multi file upload default config\n *\n * @type {MultiFileUploadConfig}\n */\n static defaults = Object.freeze({\n uploadStatusText: 'Uploading files, please wait',\n dropzoneHintText: 'Drag and drop files here or',\n dropzoneButtonText: 'Choose files',\n feedbackContainer: {\n selector: '.moj-multi-file__uploaded-files'\n },\n hooks: {\n entryHook: () => {},\n exitHook: () => {},\n errorHook: () => {},\n deleteHook: () => {}\n }\n })\n\n /**\n * Multi file upload config schema\n *\n * @satisfies {Schema<MultiFileUploadConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n uploadUrl: { type: 'string' },\n deleteUrl: { type: 'string' },\n uploadStatusText: { type: 'string' },\n dropzoneHintText: { type: 'string' },\n dropzoneButtonText: { type: 'string' },\n feedbackContainer: { type: 'object' },\n hooks: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Multi file upload config\n *\n * @typedef {object} MultiFileUploadConfig\n * @property {string} [uploadUrl] - File upload URL\n * @property {string} [deleteUrl] - File delete URL\n * @property {string} [uploadStatusText] - Upload status text\n * @property {string} [dropzoneHintText] - Dropzone hint text\n * @property {string} [dropzoneButtonText] - Dropzone button text\n * @property {object} [feedbackContainer] - Feedback container config\n * @property {string} [feedbackContainer.selector] - Selector for feedback container\n * @property {Element | null} [feedbackContainer.element] - HTML element for feedback container\n * @property {MultiFileUploadHooks} [hooks] - Upload hooks\n */\n\n/**\n * Multi file upload hooks\n *\n * @typedef {object} MultiFileUploadHooks\n * @property {OnUploadFileEntryHook} [entryHook] - File upload entry hook\n * @property {OnUploadFileExitHook} [exitHook] - File upload exit hook\n * @property {OnUploadFileErrorHook} [errorHook] - File upload error hook\n * @property {OnUploadFileDeleteHook} [deleteHook] - File delete hook\n */\n\n/**\n * Upload hook: File entry\n *\n * @callback OnUploadFileEntryHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n */\n\n/**\n * Upload hook: File exit\n *\n * @callback OnUploadFileExitHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n */\n\n/**\n * Upload hook: File error\n *\n * @callback OnUploadFileErrorHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} file - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n * @param {Error} errorThrown - Error thrown\n */\n\n/**\n * Upload hook: File delete\n *\n * @callback OnUploadFileDeleteHook\n * @param {InstanceType<typeof MultiFileUpload>} upload - Multi file upload\n * @param {File} [file] - File upload\n * @param {XMLHttpRequest} xhr - XMLHttpRequest\n * @param {string} textStatus - Text status\n */\n\n/**\n * @typedef {object} UploadResponseSuccess\n * @property {{ messageText: string, messageHtml: string }} success - Response success\n * @property {UploadResponseFile} file - Response file\n */\n\n/**\n * @typedef {object} UploadResponseError\n * @property {{ message: string }} error - Response error\n * @property {UploadResponseFile} file - Response file\n */\n\n/**\n * @typedef {object} UploadResponseFile\n * @property {string} filename - File name\n * @property {string} originalname - Original file name\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<MultiSelectConfig>}\n */\nexport class MultiSelect extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for multi select\n * @param {MultiSelectConfig} [config] - Multi select config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $container = this.$root.querySelector(\n `#${this.config.idPrefix}select-all`\n )\n\n const $checkboxes = /** @type {NodeListOf<HTMLInputElement>} */ (\n this.config.checkboxes.items ??\n this.$root.querySelectorAll(this.config.checkboxes.selector)\n )\n\n if (\n !$container ||\n !($container instanceof HTMLElement) ||\n !$checkboxes.length\n ) {\n return this\n }\n\n this.setupToggle(this.config.idPrefix)\n\n this.$toggleButton = this.$toggle.querySelector('input')\n this.$toggleButton.addEventListener('click', this.onButtonClick.bind(this))\n\n this.$container = $container\n this.$container.append(this.$toggle)\n\n this.$checkboxes = Array.from($checkboxes)\n this.$checkboxes.forEach(($input) =>\n $input.addEventListener('click', this.onCheckboxClick.bind(this))\n )\n\n this.checked = config.checked || false\n }\n\n setupToggle(idPrefix = '') {\n const id = `${idPrefix}checkboxes-all`\n\n const $toggle = document.createElement('div')\n const $label = document.createElement('label')\n const $input = document.createElement('input')\n const $span = document.createElement('span')\n\n $toggle.classList.add(\n 'govuk-checkboxes__item',\n 'govuk-checkboxes--small',\n 'moj-multi-select__checkbox'\n )\n\n $input.id = id\n $input.type = 'checkbox'\n $input.classList.add('govuk-checkboxes__input')\n\n $label.setAttribute('for', id)\n $label.classList.add(\n 'govuk-label',\n 'govuk-checkboxes__label',\n 'moj-multi-select__toggle-label'\n )\n\n $span.classList.add('govuk-visually-hidden')\n $span.textContent = 'Select all'\n\n $label.append($span)\n $toggle.append($input, $label)\n\n this.$toggle = $toggle\n }\n\n onButtonClick() {\n if (this.checked) {\n this.uncheckAll()\n this.$toggleButton.checked = false\n } else {\n this.checkAll()\n this.$toggleButton.checked = true\n }\n }\n\n checkAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = true\n })\n\n this.checked = true\n }\n\n uncheckAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = false\n })\n\n this.checked = false\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onCheckboxClick(event) {\n if (!(event.target instanceof HTMLInputElement)) {\n return\n }\n\n if (!event.target.checked) {\n this.$toggleButton.checked = false\n this.checked = false\n } else {\n if (\n this.$checkboxes.filter(($input) => $input.checked).length ===\n this.$checkboxes.length\n ) {\n this.$toggleButton.checked = true\n this.checked = true\n }\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-multi-select'\n\n /**\n * Multi select config\n *\n * @type {MultiSelectConfig}\n */\n static defaults = Object.freeze({\n idPrefix: '',\n checkboxes: {\n selector: 'tbody input.govuk-checkboxes__input'\n }\n })\n\n /**\n * Multi select config schema\n *\n * @satisfies {Schema<MultiSelectConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n idPrefix: { type: 'string' },\n checked: { type: 'boolean' },\n checkboxes: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Multi select config\n *\n * @typedef {object} MultiSelectConfig\n * @property {string} [idPrefix] - Prefix for the Select all\" checkbox `id` attribute\n * @property {boolean} [checked] - Whether the \"Select all\" checkbox is checked\n * @property {object} [checkboxes] - Checkboxes config\n * @property {string} [checkboxes.selector] - Checkboxes query selector\n * @property {NodeListOf<HTMLInputElement>} [checkboxes.items] - Checkboxes query selector results\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { Component } from 'govuk-frontend'\n\nexport class PasswordReveal extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for password reveal\n */\n constructor($root) {\n super($root)\n\n const $input = this.$root.querySelector('.govuk-input')\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\n this.$input.setAttribute('spellcheck', 'false')\n\n this.createButton()\n }\n\n createButton() {\n this.$group = document.createElement('div')\n this.$button = document.createElement('button')\n\n this.$button.setAttribute('type', 'button')\n\n this.$root.classList.add('moj-password-reveal')\n this.$group.classList.add('moj-password-reveal__wrapper')\n this.$button.classList.add(\n 'govuk-button',\n 'govuk-button--secondary',\n 'moj-password-reveal__button'\n )\n\n this.$button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n\n this.$button.addEventListener('click', this.onButtonClick.bind(this))\n\n this.$group.append(this.$input, this.$button)\n this.$root.append(this.$group)\n }\n\n onButtonClick() {\n if (this.$input.type === 'password') {\n this.$input.type = 'text'\n this.$button.innerHTML =\n 'Hide <span class=\"govuk-visually-hidden\">password</span>'\n } else {\n this.$input.type = 'password'\n this.$button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-password-reveal'\n}\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<RichTextEditorConfig>}\n */\nexport class RichTextEditor extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for rich text editor\n * @param {RichTextEditorConfig} config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n if (!RichTextEditor.isSupported()) {\n return this\n }\n\n const $textarea = this.$root.querySelector('.govuk-textarea')\n if (!$textarea || !($textarea instanceof HTMLTextAreaElement)) {\n return this\n }\n\n this.$textarea = $textarea\n\n this.createToolbar()\n this.hideDefault()\n this.configureToolbar()\n\n this.keys = {\n left: 37,\n right: 39,\n up: 38,\n down: 40\n }\n\n this.$content.addEventListener('input', this.onEditorInput.bind(this))\n\n this.$root\n .querySelector('label')\n .addEventListener('click', this.onLabelClick.bind(this))\n\n this.$toolbar.addEventListener('keydown', this.onToolbarKeydown.bind(this))\n }\n\n /**\n * @param {KeyboardEvent} event - Click event\n */\n onToolbarKeydown(event) {\n let $focusableButton\n switch (event.keyCode) {\n case this.keys.right:\n case this.keys.down: {\n $focusableButton = this.$buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n\n if ($focusableButton) {\n const $nextButton = $focusableButton.nextElementSibling\n\n if ($nextButton && $nextButton instanceof HTMLButtonElement) {\n $nextButton.focus()\n $focusableButton.setAttribute('tabindex', '-1')\n $nextButton.setAttribute('tabindex', '0')\n }\n }\n\n break\n }\n\n case this.keys.left:\n case this.keys.up: {\n $focusableButton = this.$buttons.find(\n (button) => button.getAttribute('tabindex') === '0'\n )\n\n if ($focusableButton) {\n const $previousButton = $focusableButton.previousElementSibling\n\n if ($previousButton && $previousButton instanceof HTMLButtonElement) {\n $previousButton.focus()\n $focusableButton.setAttribute('tabindex', '-1')\n $previousButton.setAttribute('tabindex', '0')\n }\n }\n\n break\n }\n }\n }\n\n getToolbarHtml() {\n let html = ''\n\n html += '<div class=\"moj-rich-text-editor__toolbar\" role=\"toolbar\">'\n\n if (this.config.toolbar.bold) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--bold\" type=\"button\" data-command=\"bold\"><span class=\"govuk-visually-hidden\">Bold</span></button>'\n }\n\n if (this.config.toolbar.italic) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--italic\" type=\"button\" data-command=\"italic\"><span class=\"govuk-visually-hidden\">Italic</span></button>'\n }\n\n if (this.config.toolbar.underline) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--underline\" type=\"button\" data-command=\"underline\"><span class=\"govuk-visually-hidden\">Underline</span></button>'\n }\n\n if (this.config.toolbar.bullets) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--unordered-list\" type=\"button\" data-command=\"insertUnorderedList\"><span class=\"govuk-visually-hidden\">Unordered list</span></button>'\n }\n\n if (this.config.toolbar.numbers) {\n html +=\n '<button class=\"moj-rich-text-editor__toolbar-button moj-rich-text-editor__toolbar-button--ordered-list\" type=\"button\" data-command=\"insertOrderedList\"><span class=\"govuk-visually-hidden\">Ordered list</span></button>'\n }\n\n html += '</div>'\n return html\n }\n\n getEnhancedHtml() {\n return `${this.getToolbarHtml()}<div class=\"govuk-textarea moj-rich-text-editor__content\" contenteditable=\"true\" spellcheck=\"false\"></div>`\n }\n\n hideDefault() {\n this.$textarea.classList.add('govuk-visually-hidden')\n this.$textarea.setAttribute('aria-hidden', 'true')\n this.$textarea.setAttribute('tabindex', '-1')\n }\n\n createToolbar() {\n this.$toolbar = document.createElement('div')\n this.$toolbar.className = 'moj-rich-text-editor'\n this.$toolbar.innerHTML = this.getEnhancedHtml()\n this.$root.append(this.$toolbar)\n\n this.$content = /** @type {HTMLElement} */ (\n this.$root.querySelector('.moj-rich-text-editor__content')\n )\n\n this.$content.innerHTML = this.$textarea.value\n }\n\n configureToolbar() {\n this.$buttons = Array.from(\n /** @type {NodeListOf<HTMLButtonElement>} */\n (this.$root.querySelectorAll('.moj-rich-text-editor__toolbar-button'))\n )\n\n this.$buttons.forEach(($button, index) => {\n $button.setAttribute('tabindex', !index ? '0' : '-1')\n $button.addEventListener('click', this.onButtonClick.bind(this))\n })\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onButtonClick(event) {\n if (!(event.currentTarget instanceof HTMLElement)) {\n return\n }\n\n document.execCommand(\n event.currentTarget.getAttribute('data-command'),\n false,\n undefined\n )\n }\n\n getContent() {\n return this.$content.innerHTML\n }\n\n onEditorInput() {\n this.updateTextarea()\n }\n\n updateTextarea() {\n document.execCommand('defaultParagraphSeparator', false, 'p')\n this.$textarea.value = this.getContent()\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onLabelClick(event) {\n event.preventDefault()\n this.$content.focus()\n }\n\n static isSupported() {\n return 'contentEditable' in document.documentElement\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-rich-text-editor'\n\n /**\n * Rich text editor config\n *\n * @type {RichTextEditorConfig}\n */\n static defaults = Object.freeze({\n toolbar: {\n bold: false,\n italic: false,\n underline: false,\n bullets: true,\n numbers: true\n }\n })\n\n /**\n * Rich text editor config schema\n *\n * @satisfies {Schema<RichTextEditorConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n toolbar: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Rich text editor config\n *\n * @typedef {object} RichTextEditorConfig\n * @property {RichTextEditorToolbar} [toolbar] - Toolbar options\n */\n\n/**\n * Rich text editor toolbar options\n *\n * @typedef {object} RichTextEditorToolbar\n * @property {boolean} [bold] - Show the bold button\n * @property {boolean} [italic] - Show the italic button\n * @property {boolean} [underline] - Show the underline button\n * @property {boolean} [bullets] - Show the bullets button\n * @property {boolean} [numbers] - Show the numbers button\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<SearchToggleConfig>}\n */\nexport class SearchToggle extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for search toggle\n * @param {SearchToggleConfig} [config] - Search toggle config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $searchContainer =\n this.config.searchContainer.element ??\n this.$root.querySelector(this.config.searchContainer.selector)\n\n const $toggleButtonContainer =\n this.config.toggleButtonContainer.element ??\n this.$root.querySelector(this.config.toggleButtonContainer.selector)\n\n if (\n !$searchContainer ||\n !$toggleButtonContainer ||\n !($searchContainer instanceof HTMLElement) ||\n !($toggleButtonContainer instanceof HTMLElement)\n ) {\n return this\n }\n\n this.$searchContainer = $searchContainer\n this.$toggleButtonContainer = $toggleButtonContainer\n\n const svg =\n '<svg viewBox=\"0 0 20 20\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" class=\"moj-search-toggle__button__icon\"><path d=\"M7.433,12.5790048 C6.06762625,12.5808611 4.75763941,12.0392925 3.79217348,11.0738265 C2.82670755,10.1083606 2.28513891,8.79837375 2.28699522,7.433 C2.28513891,6.06762625 2.82670755,4.75763941 3.79217348,3.79217348 C4.75763941,2.82670755 6.06762625,2.28513891 7.433,2.28699522 C8.79837375,2.28513891 10.1083606,2.82670755 11.0738265,3.79217348 C12.0392925,4.75763941 12.5808611,6.06762625 12.5790048,7.433 C12.5808611,8.79837375 12.0392925,10.1083606 11.0738265,11.0738265 C10.1083606,12.0392925 8.79837375,12.5808611 7.433,12.5790048 L7.433,12.5790048 Z M14.293,12.579 L13.391,12.579 L13.071,12.269 C14.2300759,10.9245158 14.8671539,9.20813198 14.866,7.433 C14.866,3.32786745 11.5381325,-1.65045755e-15 7.433,-1.65045755e-15 C3.32786745,-1.65045755e-15 -1.65045755e-15,3.32786745 -1.65045755e-15,7.433 C-1.65045755e-15,11.5381325 3.32786745,14.866 7.433,14.866 C9.208604,14.8671159 10.9253982,14.2296624 12.27,13.07 L12.579,13.39 L12.579,14.294 L18.296,20 L20,18.296 L14.294,12.579 L14.293,12.579 Z\"></path></svg>'\n\n this.$toggleButton = document.createElement('button')\n this.$toggleButton.setAttribute('class', 'moj-search-toggle__button')\n this.$toggleButton.setAttribute('type', 'button')\n this.$toggleButton.setAttribute('aria-haspopup', 'true')\n this.$toggleButton.setAttribute('aria-expanded', 'false')\n this.$toggleButton.innerHTML = `${this.config.toggleButton.text} ${svg}`\n\n this.$toggleButton.addEventListener(\n 'click',\n this.onToggleButtonClick.bind(this)\n )\n\n this.$toggleButtonContainer.append(this.$toggleButton)\n\n document.addEventListener('click', this.onDocumentClick.bind(this))\n document.addEventListener('focusin', this.onDocumentClick.bind(this))\n }\n\n showMenu() {\n this.$toggleButton.setAttribute('aria-expanded', 'true')\n this.$searchContainer.classList.remove('moj-js-hidden')\n this.$searchContainer.querySelector('input').focus()\n }\n\n hideMenu() {\n this.$searchContainer.classList.add('moj-js-hidden')\n this.$toggleButton.setAttribute('aria-expanded', 'false')\n }\n\n onToggleButtonClick() {\n if (this.$toggleButton.getAttribute('aria-expanded') === 'false') {\n this.showMenu()\n } else {\n this.hideMenu()\n }\n }\n\n /**\n * @param {MouseEvent | FocusEvent} event\n */\n onDocumentClick(event) {\n if (\n event.target instanceof Node &&\n !this.$toggleButtonContainer.contains(event.target) &&\n !this.$searchContainer.contains(event.target)\n ) {\n this.hideMenu()\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-search-toggle'\n\n /**\n * Search toggle config\n *\n * @type {SearchToggleConfig}\n */\n static defaults = Object.freeze({\n searchContainer: {\n selector: '.moj-search'\n },\n toggleButton: {\n text: 'Search'\n },\n toggleButtonContainer: {\n selector: '.moj-search-toggle__toggle'\n }\n })\n\n /**\n * Search toggle config schema\n *\n * @satisfies {Schema<SearchToggleConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n searchContainer: { type: 'object' },\n toggleButton: { type: 'object' },\n toggleButtonContainer: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * @typedef {object} SearchToggleConfig\n * @property {object} [searchContainer] - Search config\n * @property {string} [searchContainer.selector] - Selector for search container\n * @property {Element | null} [searchContainer.element] - HTML element for search container\n * @property {object} [toggleButton] - Toggle button config\n * @property {string} [toggleButton.text] - Text for toggle button\n * @property {object} [toggleButtonContainer] - Toggle button container config\n * @property {string} [toggleButtonContainer.selector] - Selector for toggle button container\n * @property {Element | null} [toggleButtonContainer.element] - HTML element for toggle button container\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<SortableTableConfig>}\n */\nexport class SortableTable extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for sortable table\n * @param {SortableTableConfig} [config] - Sortable table config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $head = $root?.querySelector('thead')\n const $body = $root?.querySelector('tbody')\n\n if (!$head || !$body) {\n return this\n }\n\n this.$head = $head\n this.$body = $body\n this.$caption = this.$root.querySelector('caption')\n\n this.$upArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.5625 15.5L11 6.63125L15.4375 15.5H6.5625Z\" fill=\"currentColor\"/>\n</svg>`\n this.$downArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M15.4375 7L11 15.8687L6.5625 7L15.4375 7Z\" fill=\"currentColor\"/>\n</svg>`\n this.$upDownArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M8.1875 9.5L10.9609 3.95703L13.7344 9.5H8.1875Z\" fill=\"currentColor\"/>\n<path d=\"M13.7344 12.0781L10.9609 17.6211L8.1875 12.0781H13.7344Z\" fill=\"currentColor\"/>\n</svg>`\n\n this.$headings = this.$head\n ? Array.from(this.$head.querySelectorAll('th'))\n : []\n\n this.createHeadingButtons()\n this.updateCaption()\n this.updateDirectionIndicators()\n this.createStatusBox()\n this.initialiseSortedColumn()\n\n this.$head.addEventListener('click', this.onSortButtonClick.bind(this))\n }\n\n createHeadingButtons() {\n for (const $heading of this.$headings) {\n if ($heading.hasAttribute('aria-sort')) {\n this.createHeadingButton($heading)\n }\n }\n }\n\n /**\n * @param {HTMLTableCellElement} $heading\n */\n createHeadingButton($heading) {\n const index = this.$headings.indexOf($heading)\n const $button = document.createElement('button')\n\n $button.setAttribute('type', 'button')\n $button.setAttribute('data-index', `${index}`)\n $button.textContent = $heading.textContent\n\n $heading.textContent = ''\n $heading.appendChild($button)\n }\n\n createStatusBox() {\n this.$status = document.createElement('div')\n\n this.$status.setAttribute('aria-atomic', 'true')\n this.$status.setAttribute('aria-live', 'polite')\n this.$status.setAttribute('class', 'govuk-visually-hidden')\n this.$status.setAttribute('role', 'status')\n\n this.$root.insertAdjacentElement('afterend', this.$status)\n }\n\n initialiseSortedColumn() {\n const $rows = this.getTableRowsArray()\n\n const $heading = this.$root.querySelector(\n 'th[aria-sort=\"ascending\"], th[aria-sort=\"descending\"]'\n )\n const $sortButton = $heading?.querySelector('button')\n const sortDirection = $heading?.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $sortButton?.getAttribute('data-index') ?? '0',\n 10\n )\n\n if (\n !$heading ||\n !$sortButton ||\n !(sortDirection === 'ascending' || sortDirection === 'descending')\n ) {\n return\n }\n\n const $sortedRows = this.sort($rows, columnNumber, sortDirection)\n this.addRows($sortedRows)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onSortButtonClick(event) {\n const $target = /** @type {HTMLElement} */ (event.target)\n const $button = $target.closest('button')\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.parentElement\n ) {\n return\n }\n\n const $heading = $button.parentElement\n const sortDirection = $heading.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $button?.getAttribute('data-index') ?? '0',\n 10\n )\n\n const newSortDirection =\n sortDirection === 'none' || sortDirection === 'descending'\n ? 'ascending'\n : 'descending'\n\n const $rows = this.getTableRowsArray()\n const $sortedRows = this.sort($rows, columnNumber, newSortDirection)\n\n this.addRows($sortedRows)\n this.removeButtonStates()\n this.updateButtonState($button, newSortDirection)\n this.updateDirectionIndicators()\n }\n\n updateCaption() {\n if (!this.$caption) {\n return\n }\n\n let assistiveText = this.$caption.querySelector('.govuk-visually-hidden')\n if (assistiveText) {\n return\n }\n\n assistiveText = document.createElement('span')\n assistiveText.classList.add('govuk-visually-hidden')\n assistiveText.textContent = ' (column headers with buttons are sortable).'\n\n this.$caption.appendChild(assistiveText)\n }\n\n /**\n * @param {HTMLButtonElement} $button\n * @param {string} direction\n */\n updateButtonState($button, direction) {\n if (!(direction === 'ascending' || direction === 'descending')) {\n return\n }\n\n $button.parentElement.setAttribute('aria-sort', direction)\n let message = this.config.statusMessage\n message = message.replace(/%heading%/, $button.textContent)\n message = message.replace(/%direction%/, this.config[`${direction}Text`])\n this.$status.textContent = message\n }\n\n updateDirectionIndicators() {\n for (const $heading of this.$headings) {\n const $button = /** @type {HTMLButtonElement} */ (\n $heading.querySelector('button')\n )\n if ($heading.hasAttribute('aria-sort') && $button) {\n const direction = $heading.getAttribute('aria-sort')\n $button.querySelector('svg')?.remove()\n\n switch (direction) {\n case 'ascending':\n $button.insertAdjacentHTML('beforeend', this.$upArrow)\n break\n case 'descending':\n $button.insertAdjacentHTML('beforeend', this.$downArrow)\n break\n default:\n $button.insertAdjacentHTML('beforeend', this.$upDownArrow)\n }\n }\n }\n }\n\n removeButtonStates() {\n for (const $heading of this.$headings) {\n $heading.setAttribute('aria-sort', 'none')\n }\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n */\n addRows($rows) {\n for (const $row of $rows) {\n this.$body.append($row)\n }\n }\n\n getTableRowsArray() {\n return Array.from(this.$body.querySelectorAll('tr'))\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n * @param {number} columnNumber\n * @param {string} sortDirection\n */\n sort($rows, columnNumber, sortDirection) {\n return $rows.sort(($rowA, $rowB) => {\n const $tdA = $rowA.querySelectorAll('td, th')[columnNumber]\n const $tdB = $rowB.querySelectorAll('td, th')[columnNumber]\n\n if (\n !$tdA ||\n !$tdB ||\n !($tdA instanceof HTMLElement) ||\n !($tdB instanceof HTMLElement)\n ) {\n return 0\n }\n\n const valueA =\n sortDirection === 'ascending'\n ? this.getCellValue($tdA)\n : this.getCellValue($tdB)\n\n const valueB =\n sortDirection === 'ascending'\n ? this.getCellValue($tdB)\n : this.getCellValue($tdA)\n\n return !(typeof valueA === 'number' && typeof valueB === 'number')\n ? valueA.toString().localeCompare(valueB.toString())\n : valueA - valueB\n })\n }\n\n /**\n * @param {HTMLElement} $cell\n */\n getCellValue($cell) {\n const val = $cell.getAttribute('data-sort-value') || $cell.innerHTML\n const valAsNumber = Number(val)\n\n return Number.isFinite(valAsNumber)\n ? valAsNumber // Exclude invalid numbers, infinity etc\n : val\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-sortable-table'\n\n /**\n * Sortable table config\n *\n * @type {SortableTableConfig}\n */\n static defaults = Object.freeze({\n statusMessage: 'Sort by %heading% (%direction%)',\n ascendingText: 'ascending',\n descendingText: 'descending'\n })\n\n /**\n * Sortable table config schema\n *\n * @satisfies {Schema<SortableTableConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n statusMessage: { type: 'string' },\n ascendingText: { type: 'string' },\n descendingText: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * Sortable table config\n *\n * @typedef {object} SortableTableConfig\n * @property {string} [statusMessage] - Status message\n * @property {string} [ascendingText] - Ascending text\n * @property {string} [descendingText] - Descending text\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n","import { createAll } from 'govuk-frontend'\n\nimport { version } from './common/moj-frontend-version.mjs'\nimport { AddAnother } from './components/add-another/add-another.mjs'\nimport { Alert } from './components/alert/alert.mjs'\nimport { ButtonMenu } from './components/button-menu/button-menu.mjs'\nimport { DatePicker } from './components/date-picker/date-picker.mjs'\nimport { PdsHeader } from './components/domain-specific/probation/header/header.mjs'\nimport { FilterToggleButton } from './components/filter-toggle-button/filter-toggle-button.mjs'\nimport { FormValidator } from './components/form-validator/form-validator.mjs'\nimport { MultiFileUpload } from './components/multi-file-upload/multi-file-upload.mjs'\nimport { MultiSelect } from './components/multi-select/multi-select.mjs'\nimport { PasswordReveal } from './components/password-reveal/password-reveal.mjs'\nimport { RichTextEditor } from './components/rich-text-editor/rich-text-editor.mjs'\nimport { SearchToggle } from './components/search-toggle/search-toggle.mjs'\nimport { SortableTable } from './components/sortable-table/sortable-table.mjs'\n\n/**\n * Initialise all components\n *\n * Use the `data-module` attributes to find, instantiate and init all of the\n * components provided as part of MOJ Frontend.\n *\n * @param {Config | Element | Document | null} [scopeOrConfig]\n */\nfunction initAll(scopeOrConfig) {\n for (const Component of [\n AddAnother,\n Alert,\n ButtonMenu,\n DatePicker,\n MultiSelect,\n PasswordReveal,\n PdsHeader,\n RichTextEditor,\n SearchToggle,\n SortableTable\n ]) {\n createAll(Component, undefined, scopeOrConfig)\n }\n}\n\nexport {\n initAll,\n version,\n\n // Components\n AddAnother,\n Alert,\n ButtonMenu,\n DatePicker,\n FilterToggleButton,\n FormValidator,\n MultiFileUpload,\n MultiSelect,\n PasswordReveal,\n PdsHeader,\n RichTextEditor,\n SearchToggle,\n SortableTable\n}\n\n/**\n * Config for all components via `initAll()`\n *\n * @typedef {object} Config\n * @property {Element | Document | null } scope - the scope to search for components in\n */\n\n/**\n * @import * as GOVUKFrontend from 'govuk-frontend'\n */\n"],"names":["isInitialised","$root","moduleName","HTMLElement","hasAttribute","isSupported","$scope","document","body","classList","contains","isArray","option","Array","isObject","isScope","Element","Document","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","normaliseOptions","scopeOrOptions","onError","options","scope","configObjects","formattedConfigObject","configObject","key","keys","override","newObject","current","keyParts","split","index","createAll","$elements","_options$scope","querySelectorAll","error","console","log","from","map","$element","filter","Boolean","version","AddAnother","addEventListener","onRemoveButtonClick","bind","onAddButtonClick","$buttons","forEach","$button","HTMLButtonElement","event","target","$items","getItems","$item","getNewItem","updateAttributes","resetItem","$firstItem","hasRemoveButton","createRemoveButton","after","$input","querySelector","HTMLInputElement","focus","item","cloneNode","isValidInputElement","getAttribute","id","originalId","replace","$label","parentElement","closest","HTMLLabelElement","htmlFor","createElement","add","textContent","append","HTMLSelectElement","selectedIndex","HTMLTextAreaElement","checked","remove","focusHeading","$heading","setFocus","_options$onBeforeFocu","isFocusable","onFocus","onBlur","once","_options$onBlur","call","removeAttribute","onBeforeFocus","removeAttributeValue","attr","re","m","RegExp","match","addAttributeValue","test","getPreviousSibling","selector","$sibling","previousElementSibling","matches","findNearestMatchingElement","$currentElement","Alert","disableAutoFocus","$dismissButton","dismissible","innerHTML","dismissText","Node","dimiss","$elementToRecieveFocus","focusOnDismissSelector","$nextSibling","nextElementSibling","freeze","ButtonMenu","children","className","startsWith","buttonClasses","initMenu","$menu","createMenu","insertAdjacentHTML","toggleTemplate","setupMenuItems","$menuToggle","toggleMenu","handleKeyDown","closeMenu","hidden","alignMenu","appendChild","firstChild","$menuItem","$listItem","insertBefore","tagName","setTimeout","buttonText","isOpen","preventDefault","keyboardEvent","detail","focusIndex","openMenu","focusItem","moveFocus","currentFocusIndex","$activeElement","activeElement","$menuItems","HTMLAnchorElement","indexOf","DatePicker","_this$config$input$el","input","dayLabels","monthLabels","currentDate","Date","setHours","calendarDays","excludedDates","excludedDays","buttonClass","selectedDayButtonClass","currentDayButtonClass","todayButtonClass","setOptions","initControls","$dialog","createDialog","createCalendarHeaders","$componentWrapper","$inputWrapper","insertAdjacentElement","$calendarButton","$dialogTitle","createCalendar","$prevMonthButton","$prevYearButton","$nextMonthButton","$nextYearButton","$cancelButton","$okButton","focusPreviousMonth","focusPreviousYear","focusNextMonth","focusNextYear","closeDialog","selectDate","$dialogButtons","$firstButtonInDialog","$lastButtonInDialog","firstButtonKeydown","lastButtonKeydown","toggleDialog","stopPropagation","backgroundClick","updateCalendar","titleId","dialogTemplate","$tbody","dayCount","i","$row","insertRow","j","$cell","$dateButton","calendarDay","DSCalendarDay","push","day","html","substring","$headerRow","leadingZeros","ret","setMinAndMaxDatesOnCalendar","setExcludedDates","setExcludedDays","setWeekStartDay","minDate","formattedDateFromString","maxDate","parseDateRangeString","reduce","dates","items","concat","date","datestring","startDate","endDate","d","getTime","setDate","getDate","weekDays","toLowerCase","weekStartDay","unshift","pop","weekStartDayParam","isExcludedDate","excludedDate","toDateString","getDay","dateString","fallback","formattedDate","dateFormatPattern","exec","month","year","formattedDateFromDate","getMonth","getFullYear","formattedDateHuman","shiftKey","firstOfMonth","dayOfWeek","thisDay","disabled","update","setCurrentDate","calendarDayDate","today","inputDate","enabledDays","window","getComputedStyle","display","innerText","changeEvent","Event","bubbles","cancelable","dispatchEvent","openDialog","offsetWidth","style","right","top","offsetHeight","goToDate","focusNextDay","focusPreviousDay","focusNextWeek","focusPreviousWeek","focusFirstDayOfWeek","firstDayOfWeekIndex","diff","focusLastDayOfWeek","lastDayOfWeekIndex","setMonth","setFullYear","row","column","picker","keyPress","click","label","accessibleLabel","calendarNavKey","PdsHeader","initHeader","$tabOpenClass","$userToggle","$userMenu","$servicesToggle","$servicesMenu","hideFallbackLinks","closeTabs","_event","tabTuples","toggle","menu","textForShow","textForHide","$userLink","$servicesLink","FilterToggleButton","_this$config$toggleBu","_this$config$closeBut","$toggleButtonContainer","toggleButtonContainer","$closeButtonContainer","closeButtonContainer","createToggleButton","setupResponsiveChecks","startHidden","hideMenu","mq","matchMedia","bigModeMediaQuery","addListener","checkMode","$menuButton","toggleButton","classes","showText","onMenuButtonClick","enableBigMode","enableSmallMode","showMenu","removeCloseButton","addCloseButton","$closeButton","closeButton","text","onCloseClick","hideText","FormValidator","$summary","summary","errors","validators","originalTitle","title","onSubmit","escapeHtml","string","String","entityMap","resetTitle","updateTitle","showSummary","getSummaryHtml","fieldName","hideSummary","removeInlineErrors","validate","showInlineErrors","showInlineError","$errorSpan","$control","$fieldset","$fieldContainer","$legend","removeInlineError","addValidator","rules","elements","namedItem","validator","validatorReturnValue","method","params","MultiFileUpload","_this$config$feedback","$feedbackContainer","feedbackContainer","setupFileInput","setupDropzone","setupLabel","setupStatusBox","onFileDeleteClick","$dropzone","onDragOver","onDragLeave","onDrop","$fileInput","replaceWith","dropzoneButtonText","$hint","dropzoneHintText","onFileChange","onFileFocus","onFileBlur","$status","uploadStatusText","uploadFiles","dataTransfer","files","file","uploadFile","getSuccessHtml","success","messageHtml","getErrorHtml","getFileRow","getDeleteButton","filename","originalname","hooks","entryHook","$message","$actions","$progress","formData","FormData","xhr","XMLHttpRequest","onLoad","status","response","messageText","exitHook","statusText","errorHook","upload","lengthComputable","percentComplete","Math","round","loaded","total","open","uploadUrl","responseType","send","$rows","$rowDelete","find","deleteHook","undefined","deleteUrl","setRequestHeader","JSON","stringify","isDragAndDropSupported","isFormDataSupported","isFileApiSupported","div","ondrop","MultiSelect","_this$config$checkbox","$container","idPrefix","$checkboxes","checkboxes","setupToggle","$toggleButton","$toggle","onButtonClick","onCheckboxClick","$span","uncheckAll","checkAll","PasswordReveal","createButton","$group","RichTextEditor","$textarea","createToolbar","hideDefault","configureToolbar","left","up","down","$content","onEditorInput","onLabelClick","$toolbar","onToolbarKeydown","$focusableButton","keyCode","button","$nextButton","$previousButton","getToolbarHtml","toolbar","bold","italic","underline","bullets","numbers","getEnhancedHtml","currentTarget","execCommand","getContent","updateTextarea","documentElement","SearchToggle","_this$config$searchCo","$searchContainer","searchContainer","svg","onToggleButtonClick","onDocumentClick","SortableTable","$head","$body","$caption","$upArrow","$downArrow","$upDownArrow","$headings","createHeadingButtons","updateCaption","updateDirectionIndicators","createStatusBox","initialiseSortedColumn","onSortButtonClick","createHeadingButton","_$sortButton$getAttri","getTableRowsArray","$sortButton","sortDirection","columnNumber","parseInt","$sortedRows","sort","addRows","_$button$getAttribute","$target","newSortDirection","removeButtonStates","updateButtonState","assistiveText","direction","statusMessage","_$button$querySelecto","$rowA","$rowB","$tdA","$tdB","valueA","getCellValue","valueB","localeCompare","val","valAsNumber","ascendingText","descendingText","initAll","scopeOrConfig"],"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;AAUO,SAASG,OAAOA,CAACT,MAAM,EAAE;EAC9B,OAAO,CAAC,CAACA,MAAM,KAAKA,MAAM,YAAYU,OAAO,IAAIV,MAAM,YAAYW,QAAQ,CAAC;AAC9E;AAUO,SAASC,kBAAkBA,CAACC,SAAS,EAAEC,OAAO,EAAE;AACrD,EAAA,OAAO,GAAGD,SAAS,CAACjB,UAAU,CAAA,EAAA,EAAKkB,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,CAACjB,MAAM,GAAGC,QAAQ,CAACC,IAAI,EAAE;IAClC,MAAMmB,cAAc,GAClB,UAAU,IAAIC,iBAAiB,CAACC,SAAS,GACrC,gHAAgH,GAChH,kDAAkD;AAExD,IAAA,KAAK,CACHvB,MAAM,GACFqB,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,IAAIlB,QAAQ,CAACkB,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,IAAIlB,KAAKA,GAAG;IACV,OAAO,IAAI,CAACsC,MAAM;AACpB,EAAA;EAcAhB,WAAWA,CAACtB,KAAK,EAAE;AAAA,IAAA,IAAA,CARnBsC,MAAM,GAAA,MAAA;AASJ,IAAA,MAAMC,gBAAgB,GACpB,IAAI,CAACjB,WACN;AASD,IAAA,IAAI,OAAOiB,gBAAgB,CAACtC,UAAU,KAAK,QAAQ,EAAE;AACnD,MAAA,MAAM,IAAImC,SAAS,CAAC,CAAA,uCAAA,CAAyC,CAAC;AAChE,IAAA;AAEA,IAAA,IAAI,EAAEpC,KAAK,YAAYuC,gBAAgB,CAACC,WAAW,CAAC,EAAE;MACpD,MAAM,IAAIV,YAAY,CAAC;AACrBI,QAAAA,OAAO,EAAElC,KAAK;AACdgC,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,GAAmCtC,KAAM;AACtD,IAAA;IAEAuC,gBAAgB,CAACE,YAAY,EAAE;IAE/B,IAAI,CAACC,gBAAgB,EAAE;AAEvB,IAAA,MAAMzC,UAAU,GAAGsC,gBAAgB,CAACtC,UAAU;IAE9C,IAAI,CAACD,KAAK,CAAC2C,YAAY,CAAC,QAAQ1C,UAAU,CAAA,KAAA,CAAO,EAAE,EAAE,CAAC;AACxD,EAAA;AAQAyC,EAAAA,gBAAgBA,GAAG;AACjB,IAAA,MAAMpB,WAAW,GAAyC,IAAI,CAACA,WAAY;AAC3E,IAAA,MAAMrB,UAAU,GAAGqB,WAAW,CAACrB,UAAU;IAEzC,IAAIA,UAAU,IAAIF,aAAa,CAAC,IAAI,CAACC,KAAK,EAAEC,UAAU,CAAC,EAAE;AACvD,MAAA,MAAM,IAAImC,SAAS,CAACd,WAAW,CAAC;AAClC,IAAA;AACF,EAAA;EAOA,OAAOmB,YAAYA,GAAG;IACpB,IAAI,CAACrC,WAAW,EAAE,EAAE;MAClB,MAAM,IAAIqB,YAAY,EAAE;AAC1B,IAAA;AACF,EAAA;AACF;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AArGaP,SAAS,CAIbsB,WAAW,GAAGtC,WAAW;;ACV3B,MAAM0C,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,CAACtB,KAAK,EAAEiD,MAAM,EAAE;IACzB,KAAK,CAACjD,KAAK,CAAC;AAAA,IAAA,IAAA,CAVdkD,OAAO,GAAA,MAAA;AAYL,IAAA,MAAMX,gBAAgB,GACqC,IAAI,CAACjB,WAAY;AAE5E,IAAA,IAAI,CAACT,QAAQ,CAAC0B,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,CAACzC,QAAQ,CAACK,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;AAUO,SAASS,gBAAgBA,CAACC,cAAc,EAAE;EAC/C,IAA6C1E,MAAM,GAAGC,QAAQ;AAC9D,EAAA,IAA+D0E,OAAO;AAGtE,EAAA,IAAInE,QAAQ,CAACkE,cAAc,CAAC,EAAE;IAC5B,MAAME,OAAO,GAAGF,cAAc;AAG9B,IAAA,IAAIjE,OAAO,CAACmE,OAAO,CAACC,KAAK,CAAC,IAAID,OAAO,CAACC,KAAK,KAAK,IAAI,EAAE;MACpD7E,MAAM,GAAG4E,OAAO,CAACC,KAAK;AACxB,IAAA;AAGA,IAAA,IAAI,OAAOD,OAAO,CAACD,OAAO,KAAK,UAAU,EAAE;MACzCA,OAAO,GAAGC,OAAO,CAACD,OAAO;AAC3B,IAAA;AACF,EAAA;AAEA,EAAA,IAAIlE,OAAO,CAACiE,cAAc,CAAC,EAAE;AAC3B1E,IAAAA,MAAM,GAAG0E,cAAc;AACzB,EAAA,CAAC,MAAM,IAAIA,cAAc,KAAK,IAAI,EAAE;AAClC1E,IAAAA,MAAM,GAAG,IAAI;AACf,EAAA,CAAC,MAAM,IAAI,OAAO0E,cAAc,KAAK,UAAU,EAAE;AAC/CC,IAAAA,OAAO,GAAGD,cAAc;AAC1B,EAAA;EAEA,OAAO;AACLG,IAAAA,KAAK,EAAE7E,MAAM;AACb2E,IAAAA;AACD,GAAA;AACH;AAYO,SAASzB,YAAYA,CAAC,GAAG4B,aAAa,EAAE;EAG7C,MAAMC,qBAAqB,GAAG,EAAE;AAGhC,EAAA,KAAK,MAAMC,YAAY,IAAIF,aAAa,EAAE;IACxC,KAAK,MAAMG,GAAG,IAAIf,MAAM,CAACgB,IAAI,CAACF,YAAY,CAAC,EAAE;AAC3C,MAAA,MAAM1E,MAAM,GAAGyE,qBAAqB,CAACE,GAAG,CAAC;AACzC,MAAA,MAAME,QAAQ,GAAGH,YAAY,CAACC,GAAG,CAAC;MAKlC,IAAIzE,QAAQ,CAACF,MAAM,CAAC,IAAIE,QAAQ,CAAC2E,QAAQ,CAAC,EAAE;QAC1CJ,qBAAqB,CAACE,GAAG,CAAC,GAAG/B,YAAY,CAAC5C,MAAM,EAAE6E,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,SAASP,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,MAAM0B,SAAS,GAA0D;AACvE,IAAA,CAACf,SAAS,GAAG;AACb,GAAA;AAEF,EAAA,KAAK,MAAM,CAACY,GAAG,EAAE7B,KAAK,CAAC,IAAIc,MAAM,CAACD,OAAO,CAAChB,OAAO,CAAC,EAAE;IAElD,IAAIoC,OAAO,GAAGD,SAAS;AAGvB,IAAA,MAAME,QAAQ,GAAGL,GAAG,CAACM,KAAK,CAAC,GAAG,CAAC;IAQ/B,KAAK,MAAM,CAACC,KAAK,EAAErE,IAAI,CAAC,IAAImE,QAAQ,CAACrB,OAAO,EAAE,EAAE;AAC9C,MAAA,IAAIzD,QAAQ,CAAC6E,OAAO,CAAC,EAAE;AAErB,QAAA,IAAIG,KAAK,GAAGF,QAAQ,CAAC1B,MAAM,GAAG,CAAC,EAAE;UAE/B,IAAI,CAACpD,QAAQ,CAAC6E,OAAO,CAAClE,IAAI,CAAC,CAAC,EAAE;AAC5BkE,YAAAA,OAAO,CAAClE,IAAI,CAAC,GAAG,EAAE;AACpB,UAAA;AAGAkE,UAAAA,OAAO,GAAGA,OAAO,CAAClE,IAAI,CAAC;AACzB,QAAA,CAAC,MAAM,IAAI8D,GAAG,KAAKZ,SAAS,EAAE;AAE5BgB,UAAAA,OAAO,CAAClE,IAAI,CAAC,GAAGgC,eAAe,CAACC,KAAK,CAAC;AACxC,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;EAEA,OAAOgC,SAAS,CAACf,SAAS,CAAC;AAC7B;;ACrSA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASoB,SAASA,CAAC5E,SAAS,EAAE+B,MAAM,EAAE8B,cAAc,EAAE;AACpD,EAAA,IAAmDgB,SAAS;AAG5D,EAAA,MAAMd,OAAO,GAAGH,gBAAgB,CAACC,cAAc,CAAC;EAEhD,IAAI;AAAA,IAAA,IAAAiB,cAAA;IAEF,IAAI,CAAC5F,WAAW,EAAE,EAAE;MAClB,MAAM,IAAIqB,YAAY,EAAE;AAC1B,IAAA;AAIA,IAAA,IAAIwD,OAAO,CAACC,KAAK,KAAK,IAAI,EAAE;MAC1B,MAAM,IAAIpD,YAAY,CAAC;QACrBI,OAAO,EAAE+C,OAAO,CAACC,KAAK;AACtBlD,QAAAA,SAAS,EAAEd,SAAS;AACpBe,QAAAA,UAAU,EAAE;AACd,OAAC,CAAC;AACJ,IAAA;AAEA8D,IAAAA,SAAS,IAAAC,cAAA,GAAGf,OAAO,CAACC,KAAK,KAAA,IAAA,GAAA,KAAA,CAAA,GAAbc,cAAA,CAAeC,gBAAgB,CACzC,CAAA,cAAA,EAAiB/E,SAAS,CAACjB,UAAU,IACvC,CAAC;EACH,CAAC,CAAC,OAAOiG,KAAK,EAAE;IACd,IAAIjB,OAAO,CAACD,OAAO,EAAE;AACnBC,MAAAA,OAAO,CAACD,OAAO,CAACkB,KAAK,EAAE;AACrBlE,QAAAA,SAAS,EAAEd,SAAS;AACpB+B,QAAAA;AACF,OAAC,CAAC;AACJ,IAAA,CAAC,MAAM;AACLkD,MAAAA,OAAO,CAACC,GAAG,CAACF,KAAK,CAAC;AACpB,IAAA;AAEA,IAAA,OAAO,EAAE;AACX,EAAA;AASA,EAAA,OAAOtF,KAAK,CAACyF,IAAI,CAACN,SAAS,IAAA,IAAA,GAATA,SAAS,GAAI,EAAE,CAAC,CAC/BO,GAAG,CAAEC,QAAQ,IAAK;IACjB,IAAI;AAGF,MAAA,OAAO,OAAOtD,MAAM,KAAK,WAAW,GAChC,IAAI/B,SAAS,CAACqF,QAAQ,EAAEtD,MAAM,CAAC,GAC/B,IAAI/B,SAAS,CAACqF,QAAQ,CAAC;IAC7B,CAAC,CAAC,OAAOL,KAAK,EAAE;MACd,IAAIjB,OAAO,CAACD,OAAO,EAAE;AACnBC,QAAAA,OAAO,CAACD,OAAO,CAACkB,KAAK,EAAE;AACrBhE,UAAAA,OAAO,EAAEqE,QAAQ;AACjBvE,UAAAA,SAAS,EAAEd,SAAS;AACpB+B,UAAAA;AACF,SAAC,CAAC;AACJ,MAAA,CAAC,MAAM;AACLkD,QAAAA,OAAO,CAACC,GAAG,CAACF,KAAK,CAAC;AACpB,MAAA;AAEA,MAAA,OAAO,IAAI;AACb,IAAA;AACF,EAAA,CAAC,CAAC,CACDM,MAAM,CAACC,OAAO,CAAC;AACpB;;ACjKA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACO,MAAMC,OAAO,GAAG;;ACRhB,MAAMC,UAAU,SAASzF,SAAS,CAAC;AACxC;AACF;AACA;EACEI,WAAWA,CAACtB,KAAK,EAAE;IACjB,KAAK,CAACA,KAAK,CAAC;AAEZ,IAAA,IAAI,CAACA,KAAK,CAAC4G,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACC,mBAAmB,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,IAAA,IAAI,CAAC9G,KAAK,CAAC4G,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACG,gBAAgB,CAACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtE,MAAME,QAAQ,GAAG,IAAI,CAAChH,KAAK,CAACiG,gBAAgB,CAC1C,8DACF,CAAC;AAEDe,IAAAA,QAAQ,CAACC,OAAO,CAAEC,OAAO,IAAK;AAC5B,MAAA,IAAI,EAAEA,OAAO,YAAYC,iBAAiB,CAAC,EAAE;AAC3C,QAAA;AACF,MAAA;MAEAD,OAAO,CAACnD,IAAI,GAAG,QAAQ;AACzB,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;EACEgD,gBAAgBA,CAACK,KAAK,EAAE;AACtB,IAAA,MAAMF,OAAO,GAAGE,KAAK,CAACC,MAAM;AAE5B,IAAA,IACE,CAACH,OAAO,IACR,EAAEA,OAAO,YAAYC,iBAAiB,CAAC,IACvC,CAACD,OAAO,CAAC1G,SAAS,CAACC,QAAQ,CAAC,6BAA6B,CAAC,EAC1D;AACA,MAAA;AACF,IAAA;AAEA,IAAA,MAAM6G,MAAM,GAAG,IAAI,CAACC,QAAQ,EAAE;AAC9B,IAAA,MAAMC,KAAK,GAAG,IAAI,CAACC,UAAU,EAAE;IAE/B,IAAI,CAACD,KAAK,IAAI,EAAEA,KAAK,YAAYtH,WAAW,CAAC,EAAE;AAC7C,MAAA;AACF,IAAA;IAEA,IAAI,CAACwH,gBAAgB,CAACF,KAAK,EAAEF,MAAM,CAACrD,MAAM,CAAC;AAC3C,IAAA,IAAI,CAAC0D,SAAS,CAACH,KAAK,CAAC;AAErB,IAAA,MAAMI,UAAU,GAAGN,MAAM,CAAC,CAAC,CAAC;AAC5B,IAAA,IAAI,CAAC,IAAI,CAACO,eAAe,CAACD,UAAU,CAAC,EAAE;AACrC,MAAA,IAAI,CAACE,kBAAkB,CAACF,UAAU,CAAC;AACrC,IAAA;IAEAN,MAAM,CAACA,MAAM,CAACrD,MAAM,GAAG,CAAC,CAAC,CAAC8D,KAAK,CAACP,KAAK,CAAC;AAEtC,IAAA,MAAMQ,MAAM,GAAGR,KAAK,CAACS,aAAa,CAAC,yBAAyB,CAAC;AAC7D,IAAA,IAAID,MAAM,IAAIA,MAAM,YAAYE,gBAAgB,EAAE;MAChDF,MAAM,CAACG,KAAK,EAAE;AAChB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEN,eAAeA,CAACL,KAAK,EAAE;AACrB,IAAA,OAAOA,KAAK,CAACvB,gBAAgB,CAAC,iCAAiC,CAAC,CAAChC,MAAM;AACzE,EAAA;AAEAsD,EAAAA,QAAQA,GAAG;AACT,IAAA,IAAI,CAAC,IAAI,CAACvH,KAAK,EAAE;AACf,MAAA,OAAO,EAAE;AACX,IAAA;AAEA,IAAA,MAAMsH,MAAM,GAAG1G,KAAK,CAACyF,IAAI,CACvB,IAAI,CAACrG,KAAK,CAACiG,gBAAgB,CAAC,wBAAwB,CACtD,CAAC;IAED,OAAOqB,MAAM,CAACd,MAAM,CAAE4B,IAAI,IAAKA,IAAI,YAAYlI,WAAW,CAAC;AAC7D,EAAA;AAEAuH,EAAAA,UAAUA,GAAG;AACX,IAAA,MAAMH,MAAM,GAAG,IAAI,CAACC,QAAQ,EAAE;IAC9B,MAAMC,KAAK,GAAGF,MAAM,CAAC,CAAC,CAAC,CAACe,SAAS,CAAC,IAAI,CAAC;IAEvC,IAAI,CAACb,KAAK,IAAI,EAAEA,KAAK,YAAYtH,WAAW,CAAC,EAAE;AAC7C,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAAC,IAAI,CAAC2H,eAAe,CAACL,KAAK,CAAC,EAAE;AAChC,MAAA,IAAI,CAACM,kBAAkB,CAACN,KAAK,CAAC;AAChC,IAAA;AAEA,IAAA,OAAOA,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACEE,EAAAA,gBAAgBA,CAACF,KAAK,EAAE3B,KAAK,EAAE;IAC7B2B,KAAK,CAACvB,gBAAgB,CAAC,aAAa,CAAC,CAACgB,OAAO,CAAEe,MAAM,IAAK;AACxD,MAAA,IAAI,CAAC,IAAI,CAACM,mBAAmB,CAACN,MAAM,CAAC,EAAE;AACrC,QAAA;AACF,MAAA;MAEA,MAAMxG,IAAI,GAAGwG,MAAM,CAACO,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;MACnD,MAAMC,EAAE,GAAGR,MAAM,CAACO,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE;AAC/C,MAAA,MAAME,UAAU,GAAGT,MAAM,CAACQ,EAAE;AAE5BR,MAAAA,MAAM,CAACxG,IAAI,GAAGA,IAAI,CAACkH,OAAO,CAAC,SAAS,EAAE,CAAA,EAAG7C,KAAK,CAAA,CAAE,CAAC;AACjDmC,MAAAA,MAAM,CAACQ,EAAE,GAAGA,EAAE,CAACE,OAAO,CAAC,SAAS,EAAE,CAAA,EAAG7C,KAAK,CAAA,CAAE,CAAC;MAE7C,MAAM8C,MAAM,GACVX,MAAM,CAACY,aAAa,CAACX,aAAa,CAAC,OAAO,CAAC,IAC3CD,MAAM,CAACa,OAAO,CAAC,OAAO,CAAC,IACvBrB,KAAK,CAACS,aAAa,CAAC,CAAA,MAAA,EAASQ,UAAU,CAAA,EAAA,CAAI,CAAC;AAE9C,MAAA,IAAIE,MAAM,IAAIA,MAAM,YAAYG,gBAAgB,EAAE;AAChDH,QAAAA,MAAM,CAACI,OAAO,GAAGf,MAAM,CAACQ,EAAE;AAC5B,MAAA;AACF,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;EACEV,kBAAkBA,CAACN,KAAK,EAAE;AACxB,IAAA,MAAMN,OAAO,GAAG5G,QAAQ,CAAC0I,aAAa,CAAC,QAAQ,CAAC;IAChD9B,OAAO,CAACnD,IAAI,GAAG,QAAQ;IAEvBmD,OAAO,CAAC1G,SAAS,CAACyI,GAAG,CACnB,cAAc,EACd,yBAAyB,EACzB,gCACF,CAAC;IAED/B,OAAO,CAACgC,WAAW,GAAG,QAAQ;AAE9B1B,IAAAA,KAAK,CAAC2B,MAAM,CAACjC,OAAO,CAAC;AACvB,EAAA;;AAEA;AACF;AACA;EACES,SAASA,CAACH,KAAK,EAAE;IACfA,KAAK,CAACvB,gBAAgB,CAAC,wBAAwB,CAAC,CAACgB,OAAO,CAAEe,MAAM,IAAK;AACnE,MAAA,IAAI,CAAC,IAAI,CAACM,mBAAmB,CAACN,MAAM,CAAC,EAAE;AACrC,QAAA;AACF,MAAA;MAEA,IAAIA,MAAM,YAAYoB,iBAAiB,EAAE;AACvCpB,QAAAA,MAAM,CAACqB,aAAa,GAAG,EAAE;QACzBrB,MAAM,CAACvE,KAAK,GAAG,EAAE;AACnB,MAAA,CAAC,MAAM,IAAIuE,MAAM,YAAYsB,mBAAmB,EAAE;QAChDtB,MAAM,CAACvE,KAAK,GAAG,EAAE;AACnB,MAAA,CAAC,MAAM;QACL,QAAQuE,MAAM,CAACjE,IAAI;AACjB,UAAA,KAAK,UAAU;AACf,UAAA,KAAK,OAAO;YACViE,MAAM,CAACuB,OAAO,GAAG,KAAK;AACtB,YAAA;AACF,UAAA;YACEvB,MAAM,CAACvE,KAAK,GAAG,EAAE;AACrB;AACF,MAAA;AACF,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;EACEoD,mBAAmBA,CAACO,KAAK,EAAE;AACzB,IAAA,MAAMF,OAAO,GAAGE,KAAK,CAACC,MAAM;AAE5B,IAAA,IACE,CAACH,OAAO,IACR,EAAEA,OAAO,YAAYC,iBAAiB,CAAC,IACvC,CAACD,OAAO,CAAC1G,SAAS,CAACC,QAAQ,CAAC,gCAAgC,CAAC,EAC7D;AACA,MAAA;AACF,IAAA;IAEAyG,OAAO,CAAC2B,OAAO,CAAC,wBAAwB,CAAC,CAACW,MAAM,EAAE;AAElD,IAAA,MAAMlC,MAAM,GAAG,IAAI,CAACC,QAAQ,EAAE;AAE9B,IAAA,IAAID,MAAM,CAACrD,MAAM,KAAK,CAAC,EAAE;MACvBqD,MAAM,CAAC,CAAC,CAAC,CAACW,aAAa,CAAC,iCAAiC,CAAC,CAACuB,MAAM,EAAE;AACrE,IAAA;AAEAlC,IAAAA,MAAM,CAACL,OAAO,CAAC,CAACO,KAAK,EAAE3B,KAAK,KAAK;AAC/B,MAAA,IAAI,CAAC6B,gBAAgB,CAACF,KAAK,EAAE3B,KAAK,CAAC;AACrC,IAAA,CAAC,CAAC;IAEF,IAAI,CAAC4D,YAAY,EAAE;AACrB,EAAA;AAEAA,EAAAA,YAAYA,GAAG;IACb,MAAMC,QAAQ,GAAG,IAAI,CAAC1J,KAAK,CAACiI,aAAa,CAAC,2BAA2B,CAAC;AAEtE,IAAA,IAAIyB,QAAQ,IAAIA,QAAQ,YAAYxJ,WAAW,EAAE;MAC/CwJ,QAAQ,CAACvB,KAAK,EAAE;AAClB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEG,mBAAmBA,CAACN,MAAM,EAAE;IAC1B,OACEA,MAAM,YAAYE,gBAAgB,IAClCF,MAAM,YAAYoB,iBAAiB,IACnCpB,MAAM,YAAYsB,mBAAmB;AAEzC,EAAA;;AAEA;AACF;AACA;AAEA;AA3Na3C,UAAU,CA0Nd1G,UAAU,GAAG,iBAAiB;;AC5NvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS0J,QAAQA,CAACpD,QAAQ,EAAEtB,OAAO,GAAG,EAAE,EAAE;AAAA,EAAA,IAAA2E,qBAAA;AAC/C,EAAA,MAAMC,WAAW,GAAGtD,QAAQ,CAACgC,YAAY,CAAC,UAAU,CAAC;EAErD,IAAI,CAACsB,WAAW,EAAE;AAChBtD,IAAAA,QAAQ,CAAC5D,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;AACzC,EAAA;;AAEA;AACF;AACA;EACE,SAASmH,OAAOA,GAAG;AACjBvD,IAAAA,QAAQ,CAACK,gBAAgB,CAAC,MAAM,EAAEmD,MAAM,EAAE;AAAEC,MAAAA,IAAI,EAAE;AAAK,KAAC,CAAC;AAC3D,EAAA;;AAEA;AACF;AACA;EACE,SAASD,MAAMA,GAAG;AAAA,IAAA,IAAAE,eAAA;IAChB,CAAAA,eAAA,GAAAhF,OAAO,CAAC8E,MAAM,KAAA,IAAA,IAAdE,eAAA,CAAgBC,IAAI,CAAC3D,QAAQ,CAAC;IAE9B,IAAI,CAACsD,WAAW,EAAE;AAChBtD,MAAAA,QAAQ,CAAC4D,eAAe,CAAC,UAAU,CAAC;AACtC,IAAA;AACF,EAAA;;AAEA;AACA5D,EAAAA,QAAQ,CAACK,gBAAgB,CAAC,OAAO,EAAEkD,OAAO,EAAE;AAAEE,IAAAA,IAAI,EAAE;AAAK,GAAC,CAAC;;AAE3D;EACA,CAAAJ,qBAAA,GAAA3E,OAAO,CAACmF,aAAa,KAAA,IAAA,IAArBR,qBAAA,CAAuBM,IAAI,CAAC3D,QAAQ,CAAC;EACrCA,QAAQ,CAAC4B,KAAK,EAAE;AAClB;;ACjDA;AACA;AACA;AACA;AACA;AACO,SAASkC,oBAAoBA,CAAC9D,QAAQ,EAAE+D,IAAI,EAAE7G,KAAK,EAAE;EAC1D,IAAI8G,EAAE,EAAEC,CAAC;AACT,EAAA,IAAIjE,QAAQ,CAACgC,YAAY,CAAC+B,IAAI,CAAC,EAAE;IAC/B,IAAI/D,QAAQ,CAACgC,YAAY,CAAC+B,IAAI,CAAC,KAAK7G,KAAK,EAAE;AACzC8C,MAAAA,QAAQ,CAAC4D,eAAe,CAACG,IAAI,CAAC;AAChC,IAAA,CAAC,MAAM;AACLC,MAAAA,EAAE,GAAG,IAAIE,MAAM,CAAC,CAAA,OAAA,EAAUhH,KAAK,SAAS,CAAC;MACzC+G,CAAC,GAAGjE,QAAQ,CAACgC,YAAY,CAAC+B,IAAI,CAAC,CAACI,KAAK,CAACH,EAAE,CAAC;AACzC,MAAA,IAAIC,CAAC,IAAIA,CAAC,CAACvG,MAAM,KAAK,CAAC,EAAE;AACvBsC,QAAAA,QAAQ,CAAC5D,YAAY,CACnB2H,IAAI,EACJ/D,QAAQ,CAACgC,YAAY,CAAC+B,IAAI,CAAC,CAAC5B,OAAO,CAAC6B,EAAE,EAAEC,CAAC,CAAC,CAAC,CAAC,IAAIA,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,CACjE,CAAC;AACH,MAAA;AACF,IAAA;AACF,EAAA;AACF;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASG,iBAAiBA,CAACpE,QAAQ,EAAE+D,IAAI,EAAE7G,KAAK,EAAE;AACvD,EAAA,IAAI8G,EAAE;AACN,EAAA,IAAI,CAAChE,QAAQ,CAACgC,YAAY,CAAC+B,IAAI,CAAC,EAAE;AAChC/D,IAAAA,QAAQ,CAAC5D,YAAY,CAAC2H,IAAI,EAAE7G,KAAK,CAAC;AACpC,EAAA,CAAC,MAAM;AACL8G,IAAAA,EAAE,GAAG,IAAIE,MAAM,CAAC,CAAA,OAAA,EAAUhH,KAAK,SAAS,CAAC;AACzC,IAAA,IAAI,CAAC8G,EAAE,CAACK,IAAI,CAACrE,QAAQ,CAACgC,YAAY,CAAC+B,IAAI,CAAC,CAAC,EAAE;AACzC/D,MAAAA,QAAQ,CAAC5D,YAAY,CAAC2H,IAAI,EAAE,CAAA,EAAG/D,QAAQ,CAACgC,YAAY,CAAC+B,IAAI,CAAC,CAAA,CAAA,EAAI7G,KAAK,EAAE,CAAC;AACxE,IAAA;AACF,EAAA;AACF;;AA8BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASoH,kBAAkBA,CAACtE,QAAQ,EAAEuE,QAAQ,EAAE;EACrD,IAAI,CAACvE,QAAQ,IAAI,EAAEA,QAAQ,YAAYrG,WAAW,CAAC,EAAE;AACnD,IAAA;AACF,EAAA;;AAEA;AACA,EAAA,IAAI6K,QAAQ,GAAGxE,QAAQ,CAACyE,sBAAsB;;AAK9C;AACA;AACA,EAAA,OAAOD,QAAQ,EAAE;IACf,IAAIA,QAAQ,CAACE,OAAO,CAACH,QAAQ,CAAC,EAAE,OAAOC,QAAQ;IAC/CA,QAAQ,GAAGA,QAAQ,CAACC,sBAAsB;AAC5C,EAAA;AACF;;AAEA;AACA;AACA;AACA;AACO,SAASE,0BAA0BA,CAAC3E,QAAQ,EAAEuE,QAAQ,EAAE;AAC7D;EACA,IAAI,CAACvE,QAAQ,IAAI,EAAEA,QAAQ,YAAYrG,WAAW,CAAC,IAAI,CAAC4K,QAAQ,EAAE;AAChE,IAAA;AACF,EAAA;;AAEA;EACA,IAAIK,eAAe,GAAG5E,QAAQ;AAE9B,EAAA,OAAO4E,eAAe,EAAE;AACtB;AACA,IAAA,IAAIA,eAAe,CAACF,OAAO,CAACH,QAAQ,CAAC,EAAE;AACrC,MAAA,OAAOK,eAAe;AACxB,IAAA;;AAEA;AACA,IAAA,IAAIJ,QAAQ,GAAGI,eAAe,CAACH,sBAAsB;AACrD,IAAA,OAAOD,QAAQ,EAAE;AACf;AACA,MAAA,IAAIA,QAAQ,CAACE,OAAO,CAACH,QAAQ,CAAC,EAAE;AAC9B,QAAA,OAAOC,QAAQ;AACjB,MAAA;MACAA,QAAQ,GAAGA,QAAQ,CAACC,sBAAsB;AAC5C,IAAA;;AAEA;IACAG,eAAe,GAAGA,eAAe,CAACvC,aAAa;AACjD,EAAA;AACF;;ACxHA;AACA;AACA;AACO,MAAMwC,KAAK,SAASrI,qBAAqB,CAAC;AAC/C;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACtB,KAAK,EAAEiD,MAAM,GAAG,EAAE,EAAE;AAC9B,IAAA,KAAK,CAACjD,KAAK,EAAEiD,MAAM,CAAC;;AAEpB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACI,IAAA,IACE,IAAI,CAACjD,KAAK,CAACuI,YAAY,CAAC,MAAM,CAAC,KAAK,OAAO,IAC3C,CAAC,IAAI,CAACtF,MAAM,CAACoI,gBAAgB,EAC7B;AACA1B,MAAAA,QAAQ,CAAC,IAAI,CAAC3J,KAAK,CAAC;AACtB,IAAA;IAEA,IAAI,CAACsL,cAAc,GAAG,IAAI,CAACtL,KAAK,CAACiI,aAAa,CAAC,qBAAqB,CAAC;IAErE,IAAI,IAAI,CAAChF,MAAM,CAACsI,WAAW,IAAI,IAAI,CAACD,cAAc,EAAE;MAClD,IAAI,CAACA,cAAc,CAACE,SAAS,GAAG,IAAI,CAACvI,MAAM,CAACwI,WAAW;AACvD,MAAA,IAAI,CAACH,cAAc,CAACnB,eAAe,CAAC,QAAQ,CAAC;MAE7C,IAAI,CAACnK,KAAK,CAAC4G,gBAAgB,CAAC,OAAO,EAAGQ,KAAK,IAAK;AAC9C,QAAA,IACEA,KAAK,CAACC,MAAM,YAAYqE,IAAI,IAC5B,IAAI,CAACJ,cAAc,CAAC7K,QAAQ,CAAC2G,KAAK,CAACC,MAAM,CAAC,EAC1C;UACA,IAAI,CAACsE,MAAM,EAAE;AACf,QAAA;AACF,MAAA,CAAC,CAAC;AACJ,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACEA,EAAAA,MAAMA,GAAG;AACP,IAAA,IAAIC,sBAAsB;;AAE1B;AACA,IAAA,IAAI,IAAI,CAAC3I,MAAM,CAAC4I,sBAAsB,EAAE;MACtCD,sBAAsB,GAAGtL,QAAQ,CAAC2H,aAAa,CAC7C,IAAI,CAAChF,MAAM,CAAC4I,sBACd,CAAC;AACH,IAAA;;AAEA;IACA,IAAI,CAACD,sBAAsB,EAAE;AAC3B,MAAA,MAAME,YAAY,GAAG,IAAI,CAAC9L,KAAK,CAAC+L,kBAAkB;MAClD,IAAID,YAAY,IAAIA,YAAY,CAACb,OAAO,CAAC,YAAY,CAAC,EAAE;AACtDW,QAAAA,sBAAsB,GAAGE,YAAY;AACvC,MAAA;AACF,IAAA;;AAEA;IACA,IAAI,CAACF,sBAAsB,EAAE;MAC3BA,sBAAsB,GAAGf,kBAAkB,CACzC,IAAI,CAAC7K,KAAK,EACV,oCACF,CAAC;AACH,IAAA;;AAEA;AACA;IACA,IAAI,CAAC4L,sBAAsB,EAAE;MAC3BA,sBAAsB,GAAGV,0BAA0B,CACjD,IAAI,CAAClL,KAAK,EACV,oCACF,CAAC;AACH,IAAA;;AAEA;IACA,IAAI4L,sBAAsB,YAAY1L,WAAW,EAAE;MACjDyJ,QAAQ,CAACiC,sBAAsB,CAAC;AAClC,IAAA;;AAEA;AACA,IAAA,IAAI,CAAC5L,KAAK,CAACwJ,MAAM,EAAE;AACrB,EAAA;;AAEA;AACF;AACA;AA6BA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AArIa4B,KAAK,CA6FTnL,UAAU,GAAG,WAAW;AAE/B;AACF;AACA;AACA;AACA;AAnGamL,KAAK,CAoGTjI,QAAQ,GAAGoB,MAAM,CAACyH,MAAM,CAAC;AAC9BT,EAAAA,WAAW,EAAE,KAAK;AAClBE,EAAAA,WAAW,EAAE,SAAS;AACtBJ,EAAAA,gBAAgB,EAAE;AACpB,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AA9GaD,KAAK,CA+GThH,MAAM,GAAGG,MAAM,CAACyH,MAAM,qBACL;AACpBxH,EAAAA,UAAU,EAAE;AACV+G,IAAAA,WAAW,EAAE;AAAExH,MAAAA,IAAI,EAAE;KAAW;AAChC0H,IAAAA,WAAW,EAAE;AAAE1H,MAAAA,IAAI,EAAE;KAAU;AAC/BsH,IAAAA,gBAAgB,EAAE;AAAEtH,MAAAA,IAAI,EAAE;KAAW;AACrC8H,IAAAA,sBAAsB,EAAE;AAAE9H,MAAAA,IAAI,EAAE;AAAS;AAC3C;AACF,CACF,CAAC;;ACjIH;AACA;AACA;AACO,MAAMkI,UAAU,SAASlJ,qBAAqB,CAAC;AACpD;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACtB,KAAK,EAAEiD,MAAM,GAAG,EAAE,EAAE;AAC9B,IAAA,KAAK,CAACjD,KAAK,EAAEiD,MAAM,CAAC;;AAEpB;AACA;IACA,IAAI,IAAI,CAACjD,KAAK,CAACkM,QAAQ,CAACjI,MAAM,KAAK,CAAC,EAAE;MACpC,MAAMiD,OAAO,GAAG,IAAI,CAAClH,KAAK,CAACkM,QAAQ,CAAC,CAAC,CAAC;AAEtChF,MAAAA,OAAO,CAAC1G,SAAS,CAACyG,OAAO,CAAEkF,SAAS,IAAK;AACvC,QAAA,IAAIA,SAAS,CAACC,UAAU,CAAC,eAAe,CAAC,EAAE;AACzClF,UAAAA,OAAO,CAAC1G,SAAS,CAACgJ,MAAM,CAAC2C,SAAS,CAAC;AACrC,QAAA;AAEAjF,QAAAA,OAAO,CAAC1G,SAAS,CAACgJ,MAAM,CAAC,uBAAuB,CAAC;AACjDtC,QAAAA,OAAO,CAAC1G,SAAS,CAACyI,GAAG,CAAC,gCAAgC,CAAC;AACzD,MAAA,CAAC,CAAC;AAEF,MAAA,IAAI,IAAI,CAAChG,MAAM,CAACoJ,aAAa,EAAE;AAC7BnF,QAAAA,OAAO,CAAC1G,SAAS,CAACyI,GAAG,CAAC,GAAG,IAAI,CAAChG,MAAM,CAACoJ,aAAa,CAACzG,KAAK,CAAC,GAAG,CAAC,CAAC;AAChE,MAAA;AACF,IAAA;AACA;IACA,IAAI,IAAI,CAAC5F,KAAK,CAACkM,QAAQ,CAACjI,MAAM,GAAG,CAAC,EAAE;MAClC,IAAI,CAACqI,QAAQ,EAAE;AACjB,IAAA;AACF,EAAA;AAEAA,EAAAA,QAAQA,GAAG;AACT,IAAA,IAAI,CAACC,KAAK,GAAG,IAAI,CAACC,UAAU,EAAE;AAC9B,IAAA,IAAI,CAACxM,KAAK,CAACyM,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAACC,cAAc,EAAE,CAAC;IAClE,IAAI,CAACC,cAAc,EAAE;IAErB,IAAI,CAACC,WAAW,GAAG,IAAI,CAAC5M,KAAK,CAACiI,aAAa,CAAC,iBAAiB,CAAC;IAC9D,IAAI,CAACX,MAAM,GAAG,IAAI,CAACiF,KAAK,CAACtG,gBAAgB,CAAC,WAAW,CAAC;IAEtD,IAAI,CAAC2G,WAAW,CAAChG,gBAAgB,CAAC,OAAO,EAAGQ,KAAK,IAAK;AACpD,MAAA,IAAI,CAACyF,UAAU,CAACzF,KAAK,CAAC;AACxB,IAAA,CAAC,CAAC;IAEF,IAAI,CAACpH,KAAK,CAAC4G,gBAAgB,CAAC,SAAS,EAAGQ,KAAK,IAAK;AAChD,MAAA,IAAI,CAAC0F,aAAa,CAAC1F,KAAK,CAAC;AAC3B,IAAA,CAAC,CAAC;AAEF9G,IAAAA,QAAQ,CAACsG,gBAAgB,CAAC,OAAO,EAAGQ,KAAK,IAAK;AAC5C,MAAA,IAAIA,KAAK,CAACC,MAAM,YAAYqE,IAAI,IAAI,CAAC,IAAI,CAAC1L,KAAK,CAACS,QAAQ,CAAC2G,KAAK,CAACC,MAAM,CAAC,EAAE;AACtE,QAAA,IAAI,CAAC0F,SAAS,CAAC,KAAK,CAAC;AACvB,MAAA;AACF,IAAA,CAAC,CAAC;AACJ,EAAA;AAEAP,EAAAA,UAAUA,GAAG;AACX,IAAA,MAAMD,KAAK,GAAGjM,QAAQ,CAAC0I,aAAa,CAAC,IAAI,CAAC;AAE1CuD,IAAAA,KAAK,CAAC5J,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC;IAClC4J,KAAK,CAACS,MAAM,GAAG,IAAI;AACnBT,IAAAA,KAAK,CAAC/L,SAAS,CAACyI,GAAG,CAAC,0BAA0B,CAAC;AAE/C,IAAA,IAAI,IAAI,CAAChG,MAAM,CAACgK,SAAS,KAAK,OAAO,EAAE;AACrCV,MAAAA,KAAK,CAAC/L,SAAS,CAACyI,GAAG,CAAC,iCAAiC,CAAC;AACxD,IAAA;AAEA,IAAA,IAAI,CAACjJ,KAAK,CAACkN,WAAW,CAACX,KAAK,CAAC;AAE7B,IAAA,OAAO,IAAI,CAACvM,KAAK,CAACmN,UAAU,KAAKZ,KAAK,EAAE;MACtCA,KAAK,CAACW,WAAW,CAAC,IAAI,CAAClN,KAAK,CAACmN,UAAU,CAAC;AAC1C,IAAA;AAEA,IAAA,OAAOZ,KAAK;AACd,EAAA;AAEAI,EAAAA,cAAcA,GAAG;AACf/L,IAAAA,KAAK,CAACyF,IAAI,CAAC,IAAI,CAACkG,KAAK,CAACL,QAAQ,CAAC,CAACjF,OAAO,CAAEmG,SAAS,IAAK;AACrD;AACA,MAAA,MAAMC,SAAS,GAAG/M,QAAQ,CAAC0I,aAAa,CAAC,IAAI,CAAC;MAC9C,IAAI,CAACuD,KAAK,CAACe,YAAY,CAACD,SAAS,EAAED,SAAS,CAAC;AAC7CC,MAAAA,SAAS,CAACH,WAAW,CAACE,SAAS,CAAC;AAEhCA,MAAAA,SAAS,CAACzK,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;AAExC,MAAA,IAAIyK,SAAS,CAACG,OAAO,KAAK,QAAQ,EAAE;AAClCH,QAAAA,SAAS,CAACzK,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC1C,MAAA;AAEAyK,MAAAA,SAAS,CAAC5M,SAAS,CAACyG,OAAO,CAAEkF,SAAS,IAAK;AACzC,QAAA,IAAIA,SAAS,CAACC,UAAU,CAAC,cAAc,CAAC,EAAE;AACxCgB,UAAAA,SAAS,CAAC5M,SAAS,CAACgJ,MAAM,CAAC2C,SAAS,CAAC;AACvC,QAAA;AACF,MAAA,CAAC,CAAC;;AAEF;AACAiB,MAAAA,SAAS,CAACxG,gBAAgB,CAAC,OAAO,EAAE,MAAM;AACxC4G,QAAAA,UAAU,CAAC,MAAM;AACf,UAAA,IAAI,CAACT,SAAS,CAAC,KAAK,CAAC;QACvB,CAAC,EAAE,EAAE,CAAC;AACR,MAAA,CAAC,CAAC;AACJ,IAAA,CAAC,CAAC;AACJ,EAAA;AAEAL,EAAAA,cAAcA,GAAG;IACf,OAAO;AACX,6EAAA,EAA+E,IAAI,CAACzJ,MAAM,CAACoJ,aAAa,IAAI,EAAE,CAAA;AAC9G;AACA,OAAA,EAAS,IAAI,CAACpJ,MAAM,CAACwK,UAAU;AAC/B;AACA;AACA;AACA;AACA,aAAA,CAAc;AACZ,EAAA;;AAEA;AACF;AACA;AACEC,EAAAA,MAAMA,GAAG;IACP,OAAO,IAAI,CAACd,WAAW,CAACrE,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM;AAClE,EAAA;;AAEA;AACF;AACA;EACEsE,UAAUA,CAACzF,KAAK,EAAE;IAChBA,KAAK,CAACuG,cAAc,EAAE;;AAEtB;AACA,IAAA,MAAMC,aAAa,GAAGxG,KAAK,CAACyG,MAAM,KAAK,CAAC;AACxC,IAAA,MAAMC,UAAU,GAAGF,aAAa,GAAG,CAAC,GAAG,EAAE;AAEzC,IAAA,IAAI,IAAI,CAACF,MAAM,EAAE,EAAE;MACjB,IAAI,CAACX,SAAS,EAAE;AAClB,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAACgB,QAAQ,CAACD,UAAU,CAAC;AAC3B,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEC,EAAAA,QAAQA,CAACD,UAAU,GAAG,CAAC,EAAE;AACvB,IAAA,IAAI,CAACvB,KAAK,CAACS,MAAM,GAAG,KAAK;IACzB,IAAI,CAACJ,WAAW,CAACjK,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;AACtD,IAAA,IAAImL,UAAU,KAAK,EAAE,EAAE;AACrB,MAAA,IAAI,CAACE,SAAS,CAACF,UAAU,CAAC;AAC5B,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEf,EAAAA,SAASA,CAACkB,SAAS,GAAG,IAAI,EAAE;AAC1B,IAAA,IAAI,CAAC1B,KAAK,CAACS,MAAM,GAAG,IAAI;IACxB,IAAI,CAACJ,WAAW,CAACjK,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AACvD,IAAA,IAAIsL,SAAS,EAAE;AACb,MAAA,IAAI,CAACrB,WAAW,CAACzE,KAAK,EAAE;AAC1B,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACE6F,SAASA,CAACnI,KAAK,EAAE;IACf,IAAIA,KAAK,IAAI,IAAI,CAACyB,MAAM,CAACrD,MAAM,EAAE4B,KAAK,GAAG,CAAC;AAC1C,IAAA,IAAIA,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG,IAAI,CAACyB,MAAM,CAACrD,MAAM,GAAG,CAAC;IAE7C,MAAMmJ,SAAS,GAAG,IAAI,CAAC9F,MAAM,CAACc,IAAI,CAACvC,KAAK,CAAC;AACzC,IAAA,IAAIuH,SAAS,EAAE;MACbA,SAAS,CAACjF,KAAK,EAAE;AACnB,IAAA;AACF,EAAA;AAEA+F,EAAAA,iBAAiBA,GAAG;AAClB,IAAA,MAAMC,cAAc,GAAG7N,QAAQ,CAAC8N,aAAa;IAC7C,MAAMC,UAAU,GAAGzN,KAAK,CAACyF,IAAI,CAAC,IAAI,CAACiB,MAAM,CAAC;AAE1C,IAAA,OACE,CAAC6G,cAAc,YAAYG,iBAAiB,IAC1CH,cAAc,YAAYhH,iBAAiB,KAC7CkH,UAAU,CAACE,OAAO,CAACJ,cAAc,CAAC;AAEtC,EAAA;;AAEA;AACF;AACA;EACErB,aAAaA,CAAC1F,KAAK,EAAE;AACnB,IAAA,IAAIA,KAAK,CAACC,MAAM,KAAK,IAAI,CAACuF,WAAW,EAAE;MACrC,QAAQxF,KAAK,CAAC9B,GAAG;AACf,QAAA,KAAK,WAAW;UACd8B,KAAK,CAACuG,cAAc,EAAE;UACtB,IAAI,CAACI,QAAQ,EAAE;AACf,UAAA;AACF,QAAA,KAAK,SAAS;UACZ3G,KAAK,CAACuG,cAAc,EAAE;UACtB,IAAI,CAACI,QAAQ,CAAC,IAAI,CAACzG,MAAM,CAACrD,MAAM,GAAG,CAAC,CAAC;AACrC,UAAA;AACJ;AACF,IAAA;IAEA,IACEmD,KAAK,CAACC,MAAM,YAAYqE,IAAI,IAC5B,IAAI,CAACa,KAAK,CAAC9L,QAAQ,CAAC2G,KAAK,CAACC,MAAM,CAAC,IACjC,IAAI,CAACqG,MAAM,EAAE,EACb;MACA,QAAQtG,KAAK,CAAC9B,GAAG;AACf,QAAA,KAAK,WAAW;UACd8B,KAAK,CAACuG,cAAc,EAAE;UACtB,IAAI,IAAI,CAACO,iBAAiB,EAAE,KAAK,EAAE,EAAE;YACnC,IAAI,CAACF,SAAS,CAAC,IAAI,CAACE,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAC9C,UAAA;AACA,UAAA;AACF,QAAA,KAAK,SAAS;UACZ9G,KAAK,CAACuG,cAAc,EAAE;UACtB,IAAI,IAAI,CAACO,iBAAiB,EAAE,KAAK,EAAE,EAAE;YACnC,IAAI,CAACF,SAAS,CAAC,IAAI,CAACE,iBAAiB,EAAE,GAAG,CAAC,CAAC;AAC9C,UAAA;AACA,UAAA;AACF,QAAA,KAAK,MAAM;UACT9G,KAAK,CAACuG,cAAc,EAAE;AACtB,UAAA,IAAI,CAACK,SAAS,CAAC,CAAC,CAAC;AACjB,UAAA;AACF,QAAA,KAAK,KAAK;UACR5G,KAAK,CAACuG,cAAc,EAAE;UACtB,IAAI,CAACK,SAAS,CAAC,IAAI,CAAC1G,MAAM,CAACrD,MAAM,GAAG,CAAC,CAAC;AACtC,UAAA;AACJ;AACF,IAAA;IAEA,IAAImD,KAAK,CAAC9B,GAAG,KAAK,QAAQ,IAAI,IAAI,CAACoI,MAAM,EAAE,EAAE;MAC3C,IAAI,CAACX,SAAS,EAAE;AAClB,IAAA;IACA,IAAI3F,KAAK,CAAC9B,GAAG,KAAK,KAAK,IAAI,IAAI,CAACoI,MAAM,EAAE,EAAE;AACxC,MAAA,IAAI,CAACX,SAAS,CAAC,KAAK,CAAC;AACvB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AA4BA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AA9Rad,UAAU,CAwPdhM,UAAU,GAAG,iBAAiB;AAErC;AACF;AACA;AACA;AACA;AA9PagM,UAAU,CA+Pd9I,QAAQ,GAAGoB,MAAM,CAACyH,MAAM,CAAC;AAC9ByB,EAAAA,UAAU,EAAE,SAAS;AACrBR,EAAAA,SAAS,EAAE,MAAM;AACjBZ,EAAAA,aAAa,EAAE;AACjB,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AAzQaJ,UAAU,CA0Qd7H,MAAM,GAAGG,MAAM,CAACyH,MAAM,qBACL;AACpBxH,EAAAA,UAAU,EAAE;AACViJ,IAAAA,UAAU,EAAE;AAAE1J,MAAAA,IAAI,EAAE;KAAU;AAC9BsI,IAAAA,aAAa,EAAE;AAAEtI,MAAAA,IAAI,EAAE;KAAU;AACjCkJ,IAAAA,SAAS,EAAE;AAAElJ,MAAAA,IAAI,EAAE;AAAS;AAC9B;AACF,CACF,CAAC;;ACrRH;AACA;AACA;AACO,MAAMyK,UAAU,SAASzL,qBAAqB,CAAC;AACpD;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACtB,KAAK,EAAEiD,MAAM,GAAG,EAAE,EAAE;AAAA,IAAA,IAAAwL,qBAAA;AAC9B,IAAA,KAAK,CAACzO,KAAK,EAAEiD,MAAM,CAAC;IAEpB,MAAM+E,MAAM,GAAA,CAAAyG,qBAAA,GACV,IAAI,CAACxL,MAAM,CAACyL,KAAK,CAACxM,OAAO,KAAA,IAAA,GAAAuM,qBAAA,GACzB,IAAI,CAACzO,KAAK,CAACiI,aAAa,CAAC,IAAI,CAAChF,MAAM,CAACyL,KAAK,CAAC5D,QAAQ,CAAC;IAEtD,IAAI,CAAC9C,MAAM,IAAI,EAAEA,MAAM,YAAYE,gBAAgB,CAAC,EAAE;AACpD,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAACF,MAAM,GAAGA,MAAM;AAEpB,IAAA,IAAI,CAAC2G,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,CAAChH,EAAE,GAAG,CAAA,WAAA,EAAc,IAAI,CAACR,MAAM,CAACQ,EAAE,CAAA,CAAE;AAExC,IAAA,IAAI,CAACiH,OAAO,GAAG,IAAI,CAACC,YAAY,EAAE;IAClC,IAAI,CAACC,qBAAqB,EAAE;AAE5B,IAAA,MAAMC,iBAAiB,GAAGtP,QAAQ,CAAC0I,aAAa,CAAC,KAAK,CAAC;AACvD,IAAA,MAAM6G,aAAa,GAAGvP,QAAQ,CAAC0I,aAAa,CAAC,KAAK,CAAC;AACnD4G,IAAAA,iBAAiB,CAACpP,SAAS,CAACyI,GAAG,CAAC,yBAAyB,CAAC;AAC1D4G,IAAAA,aAAa,CAACrP,SAAS,CAACyI,GAAG,CAAC,sBAAsB,CAAC;AAEnD,IAAA,IAAI,CAACjB,MAAM,CAACY,aAAa,CAAC0E,YAAY,CAACsC,iBAAiB,EAAE,IAAI,CAAC5H,MAAM,CAAC;AACtE4H,IAAAA,iBAAiB,CAAC1C,WAAW,CAAC2C,aAAa,CAAC;AAC5CA,IAAAA,aAAa,CAAC3C,WAAW,CAAC,IAAI,CAAClF,MAAM,CAAC;IAEtC6H,aAAa,CAACpD,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAACC,cAAc,EAAE,CAAC;IACpEkD,iBAAiB,CAACE,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAACL,OAAO,CAAC;IAElE,IAAI,CAACM,eAAe;AAClB,IAAA,IAAI,CAAC/P,KAAK,CAACiI,aAAa,CAAC,2BAA2B,CACrD;IAED,IAAI,CAAC+H,YAAY;AACf,IAAA,IAAI,CAACP,OAAO,CAACxH,aAAa,CAAC,+BAA+B,CAC3D;IAED,IAAI,CAACgI,cAAc,EAAE;IAErB,IAAI,CAACC,gBAAgB;AACnB,IAAA,IAAI,CAACT,OAAO,CAACxH,aAAa,CAAC,+BAA+B,CAC3D;IAED,IAAI,CAACkI,eAAe;AAClB,IAAA,IAAI,CAACV,OAAO,CAACxH,aAAa,CAAC,8BAA8B,CAC1D;IAED,IAAI,CAACmI,gBAAgB;AACnB,IAAA,IAAI,CAACX,OAAO,CAACxH,aAAa,CAAC,+BAA+B,CAC3D;IAED,IAAI,CAACoI,eAAe;AAClB,IAAA,IAAI,CAACZ,OAAO,CAACxH,aAAa,CAAC,8BAA8B,CAC1D;IAED,IAAI,CAACqI,aAAa;AAChB,IAAA,IAAI,CAACb,OAAO,CAACxH,aAAa,CAAC,2BAA2B,CACvD;IAED,IAAI,CAACsI,SAAS;AACZ,IAAA,IAAI,CAACd,OAAO,CAACxH,aAAa,CAAC,uBAAuB,CACnD;;AAED;AACA,IAAA,IAAI,CAACiI,gBAAgB,CAACtJ,gBAAgB,CAAC,OAAO,EAAGQ,KAAK,IACpD,IAAI,CAACoJ,kBAAkB,CAACpJ,KAAK,EAAE,KAAK,CACtC,CAAC;AACD,IAAA,IAAI,CAAC+I,eAAe,CAACvJ,gBAAgB,CAAC,OAAO,EAAGQ,KAAK,IACnD,IAAI,CAACqJ,iBAAiB,CAACrJ,KAAK,EAAE,KAAK,CACrC,CAAC;AACD,IAAA,IAAI,CAACgJ,gBAAgB,CAACxJ,gBAAgB,CAAC,OAAO,EAAGQ,KAAK,IACpD,IAAI,CAACsJ,cAAc,CAACtJ,KAAK,EAAE,KAAK,CAClC,CAAC;AACD,IAAA,IAAI,CAACiJ,eAAe,CAACzJ,gBAAgB,CAAC,OAAO,EAAGQ,KAAK,IACnD,IAAI,CAACuJ,aAAa,CAACvJ,KAAK,EAAE,KAAK,CACjC,CAAC;IACD,IAAI,CAACkJ,aAAa,CAAC1J,gBAAgB,CAAC,OAAO,EAAGQ,KAAK,IAAK;MACtDA,KAAK,CAACuG,cAAc,EAAE;MACtB,IAAI,CAACiD,WAAW,EAAE;AACpB,IAAA,CAAC,CAAC;AACF,IAAA,IAAI,CAACL,SAAS,CAAC3J,gBAAgB,CAAC,OAAO,EAAE,MAAM;AAC7C,MAAA,IAAI,CAACiK,UAAU,CAAC,IAAI,CAAChC,WAAW,CAAC;AACnC,IAAA,CAAC,CAAC;IAEF,MAAMiC,cAAc,GAAG,IAAI,CAACrB,OAAO,CAACxJ,gBAAgB,CAClD,+BACF,CAAC;AAED,IAAA,IAAI,CAAC8K,oBAAoB,GAAGD,cAAc,CAAC,CAAC,CAAC;IAC7C,IAAI,CAACE,mBAAmB,GAAGF,cAAc,CAACA,cAAc,CAAC7M,MAAM,GAAG,CAAC,CAAC;AACpE,IAAA,IAAI,CAAC8M,oBAAoB,CAACnK,gBAAgB,CAAC,SAAS,EAAGQ,KAAK,IAC1D,IAAI,CAAC6J,kBAAkB,CAAC7J,KAAK,CAC/B,CAAC;AACD,IAAA,IAAI,CAAC4J,mBAAmB,CAACpK,gBAAgB,CAAC,SAAS,EAAGQ,KAAK,IACzD,IAAI,CAAC8J,iBAAiB,CAAC9J,KAAK,CAC9B,CAAC;AAED,IAAA,IAAI,CAAC2I,eAAe,CAACnJ,gBAAgB,CAAC,OAAO,EAAGQ,KAAK,IACnD,IAAI,CAAC+J,YAAY,CAAC/J,KAAK,CACzB,CAAC;IAED,IAAI,CAACqI,OAAO,CAAC7I,gBAAgB,CAAC,SAAS,EAAGQ,KAAK,IAAK;AAClD,MAAA,IAAIA,KAAK,CAAC9B,GAAG,KAAK,QAAQ,EAAE;QAC1B,IAAI,CAACsL,WAAW,EAAE;QAClBxJ,KAAK,CAACuG,cAAc,EAAE;QACtBvG,KAAK,CAACgK,eAAe,EAAE;AACzB,MAAA;AACF,IAAA,CAAC,CAAC;IAEF9Q,QAAQ,CAACC,IAAI,CAACqG,gBAAgB,CAAC,SAAS,EAAGQ,KAAK,IAAK;AACnD,MAAA,IAAI,CAACiK,eAAe,CAACjK,KAAK,CAAC;AAC7B,IAAA,CAAC,CAAC;;AAEF;IACA,IAAI,CAACkK,cAAc,EAAE;AACvB,EAAA;AAEA5B,EAAAA,YAAYA,GAAG;IACb,MAAM6B,OAAO,GAAG,CAAA,iBAAA,EAAoB,IAAI,CAACvJ,MAAM,CAACQ,EAAE,CAAA,CAAE;AACpD,IAAA,MAAMiH,OAAO,GAAGnP,QAAQ,CAAC0I,aAAa,CAAC,KAAK,CAAC;AAE7CyG,IAAAA,OAAO,CAACjH,EAAE,GAAG,IAAI,CAACA,EAAE;AACpBiH,IAAAA,OAAO,CAAC9M,YAAY,CAAC,OAAO,EAAE,wBAAwB,CAAC;AACvD8M,IAAAA,OAAO,CAAC9M,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AACtC8M,IAAAA,OAAO,CAAC9M,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC;AAC1C8M,IAAAA,OAAO,CAAC9M,YAAY,CAAC,iBAAiB,EAAE4O,OAAO,CAAC;IAChD9B,OAAO,CAACjE,SAAS,GAAG,IAAI,CAACgG,cAAc,CAACD,OAAO,CAAC;IAChD9B,OAAO,CAACzC,MAAM,GAAG,IAAI;AAErB,IAAA,OAAOyC,OAAO;AAChB,EAAA;AAEAQ,EAAAA,cAAcA,GAAG;IACf,MAAMwB,MAAM,GAAG,IAAI,CAAChC,OAAO,CAACxH,aAAa,CAAC,OAAO,CAAC;IAClD,IAAIyJ,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,GAAGzR,QAAQ,CAAC0I,aAAa,CAAC,IAAI,CAAC;AAC1C4I,QAAAA,IAAI,CAAC1E,WAAW,CAAC6E,KAAK,CAAC;AACvB,QAAA,MAAMC,WAAW,GAAG1R,QAAQ,CAAC0I,aAAa,CAAC,QAAQ,CAAC;AACpDgJ,QAAAA,WAAW,CAACrP,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC1CoP,QAAAA,KAAK,CAAC7E,WAAW,CAAC8E,WAAW,CAAC;AAE9B,QAAA,MAAMC,WAAW,GAAG,IAAIC,aAAa,CAACF,WAAW,EAAEN,QAAQ,EAAEC,CAAC,EAAEG,CAAC,EAAE,IAAI,CAAC;AACxE,QAAA,IAAI,CAAC9C,YAAY,CAACmD,IAAI,CAACF,WAAW,CAAC;AACnCP,QAAAA,QAAQ,EAAE;AACZ,MAAA;AACF,IAAA;AACF,EAAA;AAEAhF,EAAAA,cAAcA,GAAG;IACf,OAAO,CAAA,oHAAA,EAAuH,IAAI,CAAClE,EAAE,CAAA;AACzI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAA,CAAoB;AAClB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEgJ,cAAcA,CAACD,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;AAEA5B,EAAAA,qBAAqBA,GAAG;AACtB,IAAA,IAAI,CAAChB,SAAS,CAAC1H,OAAO,CAAEmL,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,CAAC9C,OAAO,CAACxH,aAAa,CAAC,YAAY,CAAC;AAC3DsK,MAAAA,UAAU,CAAC9F,kBAAkB,CAAC,WAAW,EAAE4F,IAAI,CAAC;AAClD,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACEG,EAAAA,YAAYA,CAAC/O,KAAK,EAAEQ,MAAM,GAAG,CAAC,EAAE;AAC9B,IAAA,IAAIwO,GAAG,GAAGhP,KAAK,CAACmB,QAAQ,EAAE;AAE1B,IAAA,OAAO6N,GAAG,CAACxO,MAAM,GAAGA,MAAM,EAAE;MAC1BwO,GAAG,GAAG,CAAA,CAAA,EAAIA,GAAG,CAAA,CAAE;AACjB,IAAA;AAEA,IAAA,OAAOA,GAAG;AACZ,EAAA;AAEAlD,EAAAA,UAAUA,GAAG;IACX,IAAI,CAACmD,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,CAACzP,MAAM,CAAC6P,OAAO,EAAE;AACvB,MAAA,IAAI,CAACA,OAAO,GAAG,IAAI,CAACC,uBAAuB,CAAC,IAAI,CAAC9P,MAAM,CAAC6P,OAAO,EAAE,IAAI,CAAC;MACtE,IAAI,IAAI,CAACA,OAAO,IAAI,IAAI,CAACjE,WAAW,GAAG,IAAI,CAACiE,OAAO,EAAE;AACnD,QAAA,IAAI,CAACjE,WAAW,GAAG,IAAI,CAACiE,OAAO;AACjC,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,IAAI,CAAC7P,MAAM,CAAC+P,OAAO,EAAE;AACvB,MAAA,IAAI,CAACA,OAAO,GAAG,IAAI,CAACD,uBAAuB,CAAC,IAAI,CAAC9P,MAAM,CAAC+P,OAAO,EAAE,IAAI,CAAC;MACtE,IAAI,IAAI,CAACA,OAAO,IAAI,IAAI,CAACnE,WAAW,GAAG,IAAI,CAACmE,OAAO,EAAE;AACnD,QAAA,IAAI,CAACnE,WAAW,GAAG,IAAI,CAACmE,OAAO;AACjC,MAAA;AACF,IAAA;AACF,EAAA;AAEAL,EAAAA,gBAAgBA,GAAG;AACjB,IAAA,IAAI,IAAI,CAAC1P,MAAM,CAACgM,aAAa,EAAE;MAC7B,IAAI,CAACA,aAAa,GAAG,IAAI,CAAChM,MAAM,CAACgM,aAAa,CAC3CvG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CACnB9C,KAAK,CAAC,GAAG,CAAC,CACVU,GAAG,CAAE8B,IAAI,IAAK;QACb,OAAOA,IAAI,CAACpE,QAAQ,CAAC,GAAG,CAAC,GACrB,IAAI,CAACiP,oBAAoB,CAAC7K,IAAI,CAAC,GAC/B,CAAC,IAAI,CAAC2K,uBAAuB,CAAC3K,IAAI,CAAC,CAAC;MAC1C,CAAC,CAAC,CACD8K,MAAM,CAAC,CAACC,KAAK,EAAEC,KAAK,KAAKD,KAAK,CAACE,MAAM,CAACD,KAAK,CAAC,CAAC,CAC7C5M,MAAM,CAAE8M,IAAI,IAAKA,IAAI,CAAC;AAC3B,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACEL,oBAAoBA,CAACM,UAAU,EAAE;IAC/B,MAAMJ,KAAK,GAAG,EAAE;IAChB,MAAM,CAACK,SAAS,EAAEC,OAAO,CAAC,GAAGF,UAAU,CACpC3N,KAAK,CAAC,GAAG,CAAC,CACVU,GAAG,CAAEoN,CAAC,IAAK,IAAI,CAACX,uBAAuB,CAACW,CAAC,EAAE,IAAI,CAAC,CAAC;IAEpD,IAAIF,SAAS,IAAIC,OAAO,EAAE;MACxB,MAAMH,IAAI,GAAG,IAAIxE,IAAI,CAAC0E,SAAS,CAACG,OAAO,EAAE,CAAC;AAC1C;MACA,OAAOL,IAAI,IAAIG,OAAO,EAAE;QACtBN,KAAK,CAAChB,IAAI,CAAC,IAAIrD,IAAI,CAACwE,IAAI,CAAC,CAAC;QAC1BA,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAClC,MAAA;AACA;AACF,IAAA;AACA,IAAA,OAAOV,KAAK;AACd,EAAA;AAEAP,EAAAA,eAAeA,GAAG;AAChB,IAAA,IAAI,IAAI,CAAC3P,MAAM,CAACiM,YAAY,EAAE;AAC5B;AACA;AACA,MAAA,MAAM4E,QAAQ,GAAG,IAAI,CAACnF,SAAS,CAACrI,GAAG,CAAE8B,IAAI,IAAKA,IAAI,CAAC2L,WAAW,EAAE,CAAC;AACjE,MAAA,IAAI,IAAI,CAAC9Q,MAAM,CAAC+Q,YAAY,KAAK,QAAQ,EAAE;QACzCF,QAAQ,CAACG,OAAO,CAACH,QAAQ,CAACI,GAAG,EAAE,CAAC;AAClC,MAAA;MAEA,IAAI,CAAChF,YAAY,GAAG,IAAI,CAACjM,MAAM,CAACiM,YAAY,CACzCxG,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CACnBqL,WAAW,EAAE,CACbnO,KAAK,CAAC,GAAG,CAAC,CACVU,GAAG,CAAE8B,IAAI,IAAK0L,QAAQ,CAACvF,OAAO,CAACnG,IAAI,CAAC,CAAC,CACrC5B,MAAM,CAAE4B,IAAI,IAAKA,IAAI,KAAK,EAAE,CAAC;AAClC,IAAA;AACF,EAAA;AAEAyK,EAAAA,eAAeA,GAAG;AAChB,IAAA,MAAMsB,iBAAiB,GAAG,IAAI,CAAClR,MAAM,CAAC+Q,YAAY;IAClD,IAAIG,iBAAiB,IAAIA,iBAAiB,CAACJ,WAAW,EAAE,KAAK,QAAQ,EAAE;AACrE,MAAA,IAAI,CAAC9Q,MAAM,CAAC+Q,YAAY,GAAG,QAAQ;AACnC;AACA,MAAA,IAAI,CAACrF,SAAS,CAACsF,OAAO,CAAC,IAAI,CAACtF,SAAS,CAACuF,GAAG,EAAE,CAAC;AAC9C,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAACjR,MAAM,CAAC+Q,YAAY,GAAG,QAAQ;AACrC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEI,cAAcA,CAACd,IAAI,EAAE;AACnB;AACA;IACA,IAAI,IAAI,CAACR,OAAO,IAAI,IAAI,CAACA,OAAO,GAAGQ,IAAI,EAAE;AACvC,MAAA,OAAO,IAAI;AACb,IAAA;;AAEA;IACA,IAAI,IAAI,CAACN,OAAO,IAAI,IAAI,CAACA,OAAO,GAAGM,IAAI,EAAE;AACvC,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,KAAK,MAAMe,YAAY,IAAI,IAAI,CAACpF,aAAa,EAAE;MAC7C,IAAIqE,IAAI,CAACgB,YAAY,EAAE,KAAKD,YAAY,CAACC,YAAY,EAAE,EAAE;AACvD,QAAA,OAAO,IAAI;AACb,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,IAAI,CAACpF,YAAY,CAAClL,QAAQ,CAACsP,IAAI,CAACiB,MAAM,EAAE,CAAC,EAAE;AAC7C,MAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,OAAO,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACExB,uBAAuBA,CAACyB,UAAU,EAAEC,QAAQ,GAAG,IAAI3F,IAAI,EAAE,EAAE;IACzD,IAAI4F,aAAa,GAAG,IAAI;AACxB;IACA,MAAMC,iBAAiB,GAAG,sCAAsC;IAEhE,IAAI,CAACA,iBAAiB,CAAC/J,IAAI,CAAC4J,UAAU,CAAC,EAAE,OAAOC,QAAQ;AAExD,IAAA,MAAM/J,KAAK,GAAGiK,iBAAiB,CAACC,IAAI,CAACJ,UAAU,CAAC;AAChD,IAAA,MAAMpC,GAAG,GAAG1H,KAAK,CAAC,CAAC,CAAC;AACpB,IAAA,MAAMmK,KAAK,GAAGnK,KAAK,CAAC,CAAC,CAAC;AACtB,IAAA,MAAMoK,IAAI,GAAGpK,KAAK,CAAC,CAAC,CAAC;IAErBgK,aAAa,GAAG,IAAI5F,IAAI,CAAC3K,MAAM,CAAC2Q,IAAI,CAAC,EAAE3Q,MAAM,CAAC0Q,KAAK,CAAC,GAAG,CAAC,EAAE1Q,MAAM,CAACiO,GAAG,CAAC,CAAC;AACtE,IAAA,IACEsC,aAAa,YAAY5F,IAAI,IAC7B3K,MAAM,CAACD,QAAQ,CAACwQ,aAAa,CAACf,OAAO,EAAE,CAAC,EACxC;AACA,MAAA,OAAOe,aAAa;AACtB,IAAA;AACA,IAAA,OAAOD,QAAQ;AACjB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEM,qBAAqBA,CAACzB,IAAI,EAAE;AAC1B,IAAA,IAAI,IAAI,CAACrQ,MAAM,CAACuP,YAAY,EAAE;AAC5B,MAAA,OAAO,CAAA,EAAG,IAAI,CAACA,YAAY,CAACc,IAAI,CAACO,OAAO,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAACrB,YAAY,CAACc,IAAI,CAAC0B,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI1B,IAAI,CAAC2B,WAAW,EAAE,CAAA,CAAE;AAC/G,IAAA;IAEA,OAAO,CAAA,EAAG3B,IAAI,CAACO,OAAO,EAAE,CAAA,CAAA,EAAIP,IAAI,CAAC0B,QAAQ,EAAE,GAAG,CAAC,CAAA,CAAA,EAAI1B,IAAI,CAAC2B,WAAW,EAAE,CAAA,CAAE;AACzE,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEC,kBAAkBA,CAAC5B,IAAI,EAAE;AACvB,IAAA,OAAO,GAAG,IAAI,CAAC3E,SAAS,CAAC,CAAC2E,IAAI,CAACiB,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,IAAIjB,IAAI,CAACO,OAAO,EAAE,CAAA,CAAA,EAAI,IAAI,CAACjF,WAAW,CAAC0E,IAAI,CAAC0B,QAAQ,EAAE,CAAC,CAAA,CAAA,EAAI1B,IAAI,CAAC2B,WAAW,EAAE,CAAA,CAAE;AAClI,EAAA;;AAEA;AACF;AACA;EACE5D,eAAeA,CAACjK,KAAK,EAAE;IACrB,IACE,IAAI,CAACsG,MAAM,EAAE,IACbtG,KAAK,CAACC,MAAM,YAAYqE,IAAI,IAC5B,CAAC,IAAI,CAAC+D,OAAO,CAAChP,QAAQ,CAAC2G,KAAK,CAACC,MAAM,CAAC,IACpC,CAAC,IAAI,CAACW,MAAM,CAACvH,QAAQ,CAAC2G,KAAK,CAACC,MAAM,CAAC,IACnC,CAAC,IAAI,CAAC0I,eAAe,CAACtP,QAAQ,CAAC2G,KAAK,CAACC,MAAM,CAAC,EAC5C;MACAD,KAAK,CAACuG,cAAc,EAAE;MACtB,IAAI,CAACiD,WAAW,EAAE;AACpB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEK,kBAAkBA,CAAC7J,KAAK,EAAE;IACxB,IAAIA,KAAK,CAAC9B,GAAG,KAAK,KAAK,IAAI8B,KAAK,CAAC+N,QAAQ,EAAE;AACzC,MAAA,IAAI,CAACnE,mBAAmB,CAAC7I,KAAK,EAAE;MAChCf,KAAK,CAACuG,cAAc,EAAE;AACxB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEuD,iBAAiBA,CAAC9J,KAAK,EAAE;IACvB,IAAIA,KAAK,CAAC9B,GAAG,KAAK,KAAK,IAAI,CAAC8B,KAAK,CAAC+N,QAAQ,EAAE;AAC1C,MAAA,IAAI,CAACpE,oBAAoB,CAAC5I,KAAK,EAAE;MACjCf,KAAK,CAACuG,cAAc,EAAE;AACxB,IAAA;AACF,EAAA;;AAEA;AACA2D,EAAAA,cAAcA,GAAG;IACf,IAAI,CAACtB,YAAY,CAACxE,SAAS,GAAG,CAAA,EAAG,IAAI,CAACoD,WAAW,CAAC,IAAI,CAACC,WAAW,CAACmG,QAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,IAAI,CAACnG,WAAW,CAACoG,WAAW,EAAE,CAAA,CAAE;AAElH,IAAA,MAAM7C,GAAG,GAAG,IAAI,CAACvD,WAAW;AAC5B,IAAA,MAAMuG,YAAY,GAAG,IAAItG,IAAI,CAACsD,GAAG,CAAC6C,WAAW,EAAE,EAAE7C,GAAG,CAAC4C,QAAQ,EAAE,EAAE,CAAC,CAAC;AACnE,IAAA,IAAIK,SAAS;AAEb,IAAA,IAAI,IAAI,CAACpS,MAAM,CAAC+Q,YAAY,KAAK,QAAQ,EAAE;AACzCqB,MAAAA,SAAS,GAAGD,YAAY,CAACb,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAGa,YAAY,CAACb,MAAM,EAAE,GAAG,CAAC,CAAA;AACzE,IAAA,CAAC,MAAM;AACLc,MAAAA,SAAS,GAAGD,YAAY,CAACb,MAAM,EAAE;AACnC,IAAA;IAEAa,YAAY,CAACxB,OAAO,CAACwB,YAAY,CAACvB,OAAO,EAAE,GAAGwB,SAAS,CAAC;AAExD,IAAA,MAAMC,OAAO,GAAG,IAAIxG,IAAI,CAACsG,YAAY,CAAC;;AAEtC;AACA,IAAA,KAAK,MAAMnD,WAAW,IAAI,IAAI,CAACjD,YAAY,EAAE;AAC3C,MAAA,MAAMhC,MAAM,GAAGsI,OAAO,CAACN,QAAQ,EAAE,KAAK5C,GAAG,CAAC4C,QAAQ,EAAE;AACpD,MAAA,MAAMO,QAAQ,GAAG,IAAI,CAACnB,cAAc,CAACkB,OAAO,CAAC;MAE7CrD,WAAW,CAACuD,MAAM,CAACF,OAAO,EAAEtI,MAAM,EAAEuI,QAAQ,CAAC;MAE7CD,OAAO,CAAC1B,OAAO,CAAC0B,OAAO,CAACzB,OAAO,EAAE,GAAG,CAAC,CAAC;AACxC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACE4B,EAAAA,cAAcA,CAACtN,KAAK,GAAG,IAAI,EAAE;IAC3B,MAAM;AAAE0G,MAAAA;AAAY,KAAC,GAAG,IAAI;AAC5B,IAAA,IAAI,CAACG,YAAY,CAAC/H,OAAO,CAAEgL,WAAW,IAAK;MACzCA,WAAW,CAAC/K,OAAO,CAAC1G,SAAS,CAACyI,GAAG,CAAC,wBAAwB,CAAC;MAC3DgJ,WAAW,CAAC/K,OAAO,CAAC1G,SAAS,CAACyI,GAAG,CAAC,8BAA8B,CAAC;MACjEgJ,WAAW,CAAC/K,OAAO,CAACvE,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;MAClDsP,WAAW,CAAC/K,OAAO,CAAC1G,SAAS,CAACgJ,MAAM,CAAC,IAAI,CAAC4F,sBAAsB,CAAC;AACjE,MAAA,MAAMsG,eAAe,GAAGzD,WAAW,CAACqB,IAAI;MACxCoC,eAAe,CAAC3G,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEpC,MAAA,MAAM4G,KAAK,GAAG,IAAI7G,IAAI,EAAE;MACxB6G,KAAK,CAAC5G,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE1B,MAAA,IACE2G,eAAe,CAAC/B,OAAO,EAAE,KACzB9E,WAAW,CAAC8E,OAAO,EAAE,wCACrB;AACA,QAAA,IAAIxL,KAAK,EAAE;UACT8J,WAAW,CAAC/K,OAAO,CAACvE,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;AACjDsP,UAAAA,WAAW,CAAC/K,OAAO,CAACiB,KAAK,EAAE;UAC3B8J,WAAW,CAAC/K,OAAO,CAAC1G,SAAS,CAACyI,GAAG,CAAC,IAAI,CAACmG,sBAAsB,CAAC;AAChE,QAAA;AACF,MAAA;AAEA,MAAA,IACE,IAAI,CAACwG,SAAS,IACdF,eAAe,CAAC/B,OAAO,EAAE,KAAK,IAAI,CAACiC,SAAS,CAACjC,OAAO,EAAE,EACtD;QACA1B,WAAW,CAAC/K,OAAO,CAAC1G,SAAS,CAACyI,GAAG,CAAC,IAAI,CAACoG,qBAAqB,CAAC;QAC7D4C,WAAW,CAAC/K,OAAO,CAACvE,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;AAC1D,MAAA,CAAC,MAAM;QACLsP,WAAW,CAAC/K,OAAO,CAAC1G,SAAS,CAACgJ,MAAM,CAAC,IAAI,CAAC6F,qBAAqB,CAAC;AAChE4C,QAAAA,WAAW,CAAC/K,OAAO,CAACiD,eAAe,CAAC,cAAc,CAAC;AACrD,MAAA;MAEA,IAAIuL,eAAe,CAAC/B,OAAO,EAAE,KAAKgC,KAAK,CAAChC,OAAO,EAAE,EAAE;QACjD1B,WAAW,CAAC/K,OAAO,CAAC1G,SAAS,CAACyI,GAAG,CAAC,IAAI,CAACqG,gBAAgB,CAAC;AAC1D,MAAA,CAAC,MAAM;QACL2C,WAAW,CAAC/K,OAAO,CAAC1G,SAAS,CAACgJ,MAAM,CAAC,IAAI,CAAC8F,gBAAgB,CAAC;AAC7D,MAAA;AACF,IAAA,CAAC,CAAC;;AAEF;IACA,IAAI,CAACnH,KAAK,EAAE;MACV,MAAM0N,WAAW,GAAG,IAAI,CAAC7G,YAAY,CAACxI,MAAM,CAAEyL,WAAW,IAAK;AAC5D,QAAA,OACE6D,MAAM,CAACC,gBAAgB,CAAC9D,WAAW,CAAC/K,OAAO,CAAC,CAAC8O,OAAO,KAAK,OAAO,IAChE,CAAC/D,WAAW,CAAC/K,OAAO,CAACqO,QAAQ;AAEjC,MAAA,CAAC,CAAC;MAEFM,WAAW,CAAC,CAAC,CAAC,CAAC3O,OAAO,CAACvE,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;MAEpD,IAAI,CAACkM,WAAW,GAAGgH,WAAW,CAAC,CAAC,CAAC,CAACvC,IAAI;AACxC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEzC,UAAUA,CAACyC,IAAI,EAAE;AACf,IAAA,IAAI,IAAI,CAACc,cAAc,CAACd,IAAI,CAAC,EAAE;AAC7B,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAACvD,eAAe,CAAC9H,aAAa,CAAC,MAAM,CAAC,CAACgO,SAAS,GAClD,iCAAiC,IAAI,CAACf,kBAAkB,CAAC5B,IAAI,CAAC,CAAA,CAAE;IAClE,IAAI,CAACtL,MAAM,CAACvE,KAAK,GAAG,IAAI,CAACsR,qBAAqB,CAACzB,IAAI,CAAC;AAEpD,IAAA,MAAM4C,WAAW,GAAG,IAAIC,KAAK,CAAC,QAAQ,EAAE;AAAEC,MAAAA,OAAO,EAAE,IAAI;AAAEC,MAAAA,UAAU,EAAE;AAAK,KAAC,CAAC;AAC5E,IAAA,IAAI,CAACrO,MAAM,CAACsO,aAAa,CAACJ,WAAW,CAAC;IAEtC,IAAI,CAACtF,WAAW,EAAE;AACpB,EAAA;AAEAlD,EAAAA,MAAMA,GAAG;IACP,OAAO,IAAI,CAAC+B,OAAO,CAACjP,SAAS,CAACC,QAAQ,CAAC,8BAA8B,CAAC;AACxE,EAAA;;AAEA;AACF;AACA;EACE0Q,YAAYA,CAAC/J,KAAK,EAAE;IAClBA,KAAK,CAACuG,cAAc,EAAE;AACtB,IAAA,IAAI,IAAI,CAACD,MAAM,EAAE,EAAE;MACjB,IAAI,CAACkD,WAAW,EAAE;AACpB,IAAA,CAAC,MAAM;MACL,IAAI,CAAC8B,2BAA2B,EAAE;MAClC,IAAI,CAAC6D,UAAU,EAAE;AACnB,IAAA;AACF,EAAA;AAEAA,EAAAA,UAAUA,GAAG;AACX,IAAA,IAAI,CAAC9G,OAAO,CAACzC,MAAM,GAAG,KAAK;IAC3B,IAAI,CAACyC,OAAO,CAACjP,SAAS,CAACyI,GAAG,CAAC,8BAA8B,CAAC;IAC1D,IAAI,CAAC8G,eAAe,CAACpN,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;;AAE1D;AACA;IACA,IAAI,IAAI,CAACqF,MAAM,CAACwO,WAAW,GAAG,IAAI,CAAC/G,OAAO,CAAC+G,WAAW,EAAE;AACtD,MAAA,IAAI,CAAC/G,OAAO,CAACgH,KAAK,CAACC,KAAK,GAAG,CAAA,GAAA,CAAK;AAClC,IAAA;AACA,IAAA,IAAI,CAACjH,OAAO,CAACgH,KAAK,CAACE,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC3O,MAAM,CAAC4O,YAAY,GAAG,CAAC,CAAA,EAAA,CAAI;;AAE5D;AACA,IAAA,IAAI,CAAChB,SAAS,GAAG,IAAI,CAAC7C,uBAAuB,CAAC,IAAI,CAAC/K,MAAM,CAACvE,KAAK,CAAC;AAChE;IACA,IAAI,IAAI,CAACqP,OAAO,IAAI,IAAI,CAACA,OAAO,GAAG,IAAI,CAAC8C,SAAS,EAAE;AACjD,MAAA,IAAI,CAACA,SAAS,GAAG,IAAI9G,IAAI,CAAC,IAAI,CAACgE,OAAO,CAACa,OAAO,EAAE,CAAC;AACnD,IAAA;IACA,IAAI,IAAI,CAACX,OAAO,IAAI,IAAI,CAACA,OAAO,GAAG,IAAI,CAAC4C,SAAS,EAAE;AACjD,MAAA,IAAI,CAACA,SAAS,GAAG,IAAI9G,IAAI,CAAC,IAAI,CAACkE,OAAO,CAACW,OAAO,EAAE,CAAC;AACnD,IAAA;AACA,IAAA,IAAI,IAAI,CAACb,OAAO,IAAI,IAAI,CAACE,OAAO,IAAI,IAAI,CAACF,OAAO,GAAG,IAAI,CAACE,OAAO,EAAE;AAC/D7M,MAAAA,OAAO,CAACD,KAAK,CAAC,yDAAyD,CAAC;AAC1E,IAAA;AAEA,IAAA,IAAI,CAAC2I,WAAW,GAAG,IAAI,CAAC+G,SAAS;AACjC,IAAA,IAAI,CAAC/G,WAAW,CAACE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAErC,IAAI,CAACuC,cAAc,EAAE;IACrB,IAAI,CAACmE,cAAc,EAAE;AACvB,EAAA;AAEA7E,EAAAA,WAAWA,GAAG;AACZ,IAAA,IAAI,CAACnB,OAAO,CAACzC,MAAM,GAAG,IAAI;IAC1B,IAAI,CAACyC,OAAO,CAACjP,SAAS,CAACgJ,MAAM,CAAC,8BAA8B,CAAC;IAC7D,IAAI,CAACuG,eAAe,CAACpN,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AAC3D,IAAA,IAAI,CAACoN,eAAe,CAAC5H,KAAK,EAAE;AAC9B,EAAA;;AAEA;AACF;AACA;AACA;AACE0O,EAAAA,QAAQA,CAACvD,IAAI,EAAEnL,KAAK,EAAE;AACpB,IAAA,MAAMzC,OAAO,GAAG,IAAI,CAACmJ,WAAW;IAChC,IAAI,CAACA,WAAW,GAAGyE,IAAI;IAEvB,IACE5N,OAAO,CAACsP,QAAQ,EAAE,KAAK,IAAI,CAACnG,WAAW,CAACmG,QAAQ,EAAE,IAClDtP,OAAO,CAACuP,WAAW,EAAE,KAAK,IAAI,CAACpG,WAAW,CAACoG,WAAW,EAAE,EACxD;MACA,IAAI,CAAC3D,cAAc,EAAE;AACvB,IAAA;AAEA,IAAA,IAAI,CAACmE,cAAc,CAACtN,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACA2O,EAAAA,YAAYA,GAAG;IACb,MAAMxD,IAAI,GAAG,IAAIxE,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvCyE,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAACgD,QAAQ,CAACvD,IAAI,CAAC;AACrB,EAAA;AAEAyD,EAAAA,gBAAgBA,GAAG;IACjB,MAAMzD,IAAI,GAAG,IAAIxE,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvCyE,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAACgD,QAAQ,CAACvD,IAAI,CAAC;AACrB,EAAA;;AAEA;AACA0D,EAAAA,aAAaA,GAAG;IACd,MAAM1D,IAAI,GAAG,IAAIxE,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvCyE,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAACgD,QAAQ,CAACvD,IAAI,CAAC;AACrB,EAAA;AAEA2D,EAAAA,iBAAiBA,GAAG;IAClB,MAAM3D,IAAI,GAAG,IAAIxE,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;IACvCyE,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,CAACgD,QAAQ,CAACvD,IAAI,CAAC;AACrB,EAAA;AAEA4D,EAAAA,mBAAmBA,GAAG;IACpB,MAAM5D,IAAI,GAAG,IAAIxE,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC,IAAA,MAAMsI,mBAAmB,GAAG,IAAI,CAAClU,MAAM,CAAC+Q,YAAY,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;AACzE,IAAA,MAAMqB,SAAS,GAAG/B,IAAI,CAACiB,MAAM,EAAE;AAC/B,IAAA,MAAM6C,IAAI,GACR/B,SAAS,IAAI8B,mBAAmB,GAC5B9B,SAAS,GAAG8B,mBAAmB,GAC/B,CAAC,GAAG9B,SAAS;IAEnB/B,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAGuD,IAAI,CAAC;IACnC9D,IAAI,CAACvE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEzB,IAAA,IAAI,CAAC8H,QAAQ,CAACvD,IAAI,CAAC;AACrB,EAAA;AAEA+D,EAAAA,kBAAkBA,GAAG;IACnB,MAAM/D,IAAI,GAAG,IAAIxE,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvC,IAAA,MAAMyI,kBAAkB,GAAG,IAAI,CAACrU,MAAM,CAAC+Q,YAAY,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;AACxE,IAAA,MAAMqB,SAAS,GAAG/B,IAAI,CAACiB,MAAM,EAAE;AAC/B,IAAA,MAAM6C,IAAI,GACR/B,SAAS,IAAIiC,kBAAkB,GAC3BA,kBAAkB,GAAGjC,SAAS,GAC9B,CAAC,GAAGA,SAAS;IAEnB/B,IAAI,CAACM,OAAO,CAACN,IAAI,CAACO,OAAO,EAAE,GAAGuD,IAAI,CAAC;IACnC9D,IAAI,CAACvE,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEzB,IAAA,IAAI,CAAC8H,QAAQ,CAACvD,IAAI,CAAC;AACrB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACE5C,EAAAA,cAAcA,CAACtJ,KAAK,EAAEe,KAAK,GAAG,IAAI,EAAE;IAClCf,KAAK,CAACuG,cAAc,EAAE;IACtB,MAAM2F,IAAI,GAAG,IAAIxE,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvCyE,IAAAA,IAAI,CAACiE,QAAQ,CAACjE,IAAI,CAAC0B,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACrC,IAAA,IAAI,CAAC6B,QAAQ,CAACvD,IAAI,EAAEnL,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AACA;AACEqI,EAAAA,kBAAkBA,CAACpJ,KAAK,EAAEe,KAAK,GAAG,IAAI,EAAE;IACtCf,KAAK,CAACuG,cAAc,EAAE;IACtB,MAAM2F,IAAI,GAAG,IAAIxE,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvCyE,IAAAA,IAAI,CAACiE,QAAQ,CAACjE,IAAI,CAAC0B,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACrC,IAAA,IAAI,CAAC6B,QAAQ,CAACvD,IAAI,EAAEnL,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEwI,EAAAA,aAAaA,CAACvJ,KAAK,EAAEe,KAAK,GAAG,IAAI,EAAE;IACjCf,KAAK,CAACuG,cAAc,EAAE;IACtB,MAAM2F,IAAI,GAAG,IAAIxE,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvCyE,IAAAA,IAAI,CAACkE,WAAW,CAAClE,IAAI,CAAC2B,WAAW,EAAE,GAAG,CAAC,EAAE3B,IAAI,CAAC0B,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC5D,IAAA,IAAI,CAAC6B,QAAQ,CAACvD,IAAI,EAAEnL,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AACA;AACEsI,EAAAA,iBAAiBA,CAACrJ,KAAK,EAAEe,KAAK,GAAG,IAAI,EAAE;IACrCf,KAAK,CAACuG,cAAc,EAAE;IACtB,MAAM2F,IAAI,GAAG,IAAIxE,IAAI,CAAC,IAAI,CAACD,WAAW,CAAC;AACvCyE,IAAAA,IAAI,CAACkE,WAAW,CAAClE,IAAI,CAAC2B,WAAW,EAAE,GAAG,CAAC,EAAE3B,IAAI,CAAC0B,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC5D,IAAA,IAAI,CAAC6B,QAAQ,CAACvD,IAAI,EAAEnL,KAAK,CAAC;AAC5B,EAAA;;AAEA;AACF;AACA;AAkCA;AAh0BaqG,UAAU,CA+xBdvO,UAAU,GAAG,iBAAiB;AAErC;AACF;AACA;AACA;AACA;AAryBauO,UAAU,CAsyBdrL,QAAQ,GAAGoB,MAAM,CAACyH,MAAM,CAAC;AAC9BwG,EAAAA,YAAY,EAAE,KAAK;AACnBwB,EAAAA,YAAY,EAAE,QAAQ;AACtBtF,EAAAA,KAAK,EAAE;AACL5D,IAAAA,QAAQ,EAAE;AACZ;AACF,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AAlzBa0D,UAAU,CAmzBdpK,MAAM,GAAGG,MAAM,CAACyH,MAAM,qBACL;AACpBxH,EAAAA,UAAU,EAAE;AACVyK,IAAAA,aAAa,EAAE;AAAElL,MAAAA,IAAI,EAAE;KAAU;AACjCmL,IAAAA,YAAY,EAAE;AAAEnL,MAAAA,IAAI,EAAE;KAAU;AAChCyO,IAAAA,YAAY,EAAE;AAAEzO,MAAAA,IAAI,EAAE;KAAW;AACjCiP,IAAAA,OAAO,EAAE;AAAEjP,MAAAA,IAAI,EAAE;KAAU;AAC3B+O,IAAAA,OAAO,EAAE;AAAE/O,MAAAA,IAAI,EAAE;KAAU;AAC3BiQ,IAAAA,YAAY,EAAE;AAAEjQ,MAAAA,IAAI,EAAE;KAAU;AAChC2K,IAAAA,KAAK,EAAE;AAAE3K,MAAAA,IAAI,EAAE;AAAS;AAC1B;AACF,CACF,CAAC;AAGH,MAAMmO,aAAa,CAAC;AAClB;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE5Q,WAAWA,CAAC4F,OAAO,EAAErB,KAAK,EAAE4R,GAAG,EAAEC,MAAM,EAAEC,MAAM,EAAE;IAC/C,IAAI,CAAC9R,KAAK,GAAGA,KAAK;IAClB,IAAI,CAAC4R,GAAG,GAAGA,GAAG;IACd,IAAI,CAACC,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACxQ,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACyQ,MAAM,GAAGA,MAAM;AACpB,IAAA,IAAI,CAACrE,IAAI,GAAG,IAAIxE,IAAI,EAAE;AACtB,IAAA,IAAI,CAAC5H,OAAO,CAACN,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAACgR,QAAQ,CAAC9Q,IAAI,CAAC,IAAI,CAAC,CAAC;AAClE,IAAA,IAAI,CAACI,OAAO,CAACN,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACiR,KAAK,CAAC/Q,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACE0O,EAAAA,MAAMA,CAACpD,GAAG,EAAEpF,MAAM,EAAEuI,QAAQ,EAAE;AAC5B,IAAA,MAAMuC,KAAK,GAAG1F,GAAG,CAACyB,OAAO,EAAE;IAC3B,IAAIkE,eAAe,GAAG,IAAI,CAACJ,MAAM,CAACzC,kBAAkB,CAAC9C,GAAG,CAAC;AAEzD,IAAA,IAAImD,QAAQ,EAAE;MACZ,IAAI,CAACrO,OAAO,CAACvE,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;MAClDoV,eAAe,GAAG,CAAA,eAAA,EAAkBA,eAAe,CAAA,CAAE;AACvD,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAAC7Q,OAAO,CAACiD,eAAe,CAAC,eAAe,CAAC;AAC/C,IAAA;AAEA,IAAA,IAAI6C,MAAM,EAAE;AACV,MAAA,IAAI,CAAC9F,OAAO,CAACuP,KAAK,CAACT,OAAO,GAAG,MAAM;AACrC,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAAC9O,OAAO,CAACuP,KAAK,CAACT,OAAO,GAAG,OAAO;AACtC,IAAA;AACA,IAAA,IAAI,CAAC9O,OAAO,CAACvE,YAAY,CACvB,aAAa,EACb,IAAI,CAACgV,MAAM,CAAC5C,qBAAqB,CAAC3C,GAAG,CACvC,CAAC;IAED,IAAI,CAAClL,OAAO,CAACsE,SAAS,GAAG,CAAA,oCAAA,EAAuCuM,eAAe,CAAA,gCAAA,EAAmCD,KAAK,CAAA,OAAA,CAAS;AAChI,IAAA,IAAI,CAACxE,IAAI,GAAG,IAAIxE,IAAI,CAACsD,GAAG,CAAC;AAC3B,EAAA;;AAEA;AACF;AACA;EACEyF,KAAKA,CAACzQ,KAAK,EAAE;IACX,IAAI,CAACuQ,MAAM,CAACd,QAAQ,CAAC,IAAI,CAACvD,IAAI,CAAC;IAC/B,IAAI,CAACqE,MAAM,CAAC9G,UAAU,CAAC,IAAI,CAACyC,IAAI,CAAC;IAEjClM,KAAK,CAACgK,eAAe,EAAE;IACvBhK,KAAK,CAACuG,cAAc,EAAE;AACxB,EAAA;;AAEA;AACF;AACA;EACEiK,QAAQA,CAACxQ,KAAK,EAAE;IACd,IAAI4Q,cAAc,GAAG,IAAI;IAEzB,QAAQ5Q,KAAK,CAAC9B,GAAG;AACf,MAAA,KAAK,WAAW;AACd,QAAA,IAAI,CAACqS,MAAM,CAACZ,gBAAgB,EAAE;AAC9B,QAAA;AACF,MAAA,KAAK,YAAY;AACf,QAAA,IAAI,CAACY,MAAM,CAACb,YAAY,EAAE;AAC1B,QAAA;AACF,MAAA,KAAK,SAAS;AACZ,QAAA,IAAI,CAACa,MAAM,CAACV,iBAAiB,EAAE;AAC/B,QAAA;AACF,MAAA,KAAK,WAAW;AACd,QAAA,IAAI,CAACU,MAAM,CAACX,aAAa,EAAE;AAC3B,QAAA;AACF,MAAA,KAAK,MAAM;AACT,QAAA,IAAI,CAACW,MAAM,CAACT,mBAAmB,EAAE;AACjC,QAAA;AACF,MAAA,KAAK,KAAK;AACR,QAAA,IAAI,CAACS,MAAM,CAACN,kBAAkB,EAAE;AAChC,QAAA;AACF,MAAA,KAAK,QAAQ;AAAE,QAAA;UACb,IAAIjQ,KAAK,CAAC+N,QAAQ,EAAE;AAClB,YAAA,IAAI,CAACwC,MAAM,CAAClH,iBAAiB,CAACrJ,KAAK,CAAC;AACtC,UAAA,CAAC,MAAM;AACL,YAAA,IAAI,CAACuQ,MAAM,CAACnH,kBAAkB,CAACpJ,KAAK,CAAC;AACvC,UAAA;AACA,UAAA;AACF,QAAA;AACA,MAAA,KAAK,UAAU;AAAE,QAAA;UACf,IAAIA,KAAK,CAAC+N,QAAQ,EAAE;AAClB,YAAA,IAAI,CAACwC,MAAM,CAAChH,aAAa,CAACvJ,KAAK,CAAC;AAClC,UAAA,CAAC,MAAM;AACL,YAAA,IAAI,CAACuQ,MAAM,CAACjH,cAAc,CAACtJ,KAAK,CAAC;AACnC,UAAA;AACA,UAAA;AACF,QAAA;AACA,MAAA;AACE4Q,QAAAA,cAAc,GAAG,KAAK;AACtB,QAAA;AACJ;AAEA,IAAA,IAAIA,cAAc,EAAE;MAClB5Q,KAAK,CAACuG,cAAc,EAAE;MACtBvG,KAAK,CAACgK,eAAe,EAAE;AACzB,IAAA;AACF,EAAA;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;ACx8BO,MAAM6G,SAAS,SAAS/W,SAAS,CAAC;AACvC;AACF;AACA;EACEI,WAAWA,CAACtB,KAAK,EAAE;IACjB,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACkY,UAAU,EAAE;AACnB,EAAA;AAEAA,EAAAA,UAAUA,GAAG;IACX,IAAI,CAACC,aAAa,GAAG,sCAAsC;IAC3D,MAAMC,WAAW,GAAG,IAAI,CAACpY,KAAK,CAACiI,aAAa,CAC1C,4CACF,CAAC;IACD,MAAMoQ,SAAS,GAAG,IAAI,CAACrY,KAAK,CAACiI,aAAa,CACxC,oCACF,CAAC;IAED,MAAMqQ,eAAe,GAAG,IAAI,CAACtY,KAAK,CAACiI,aAAa,CAC9C,gDACF,CAAC;IAED,MAAMsQ,aAAa,GAAG,IAAI,CAACvY,KAAK,CAACiI,aAAa,CAC5C,wCACF,CAAC;AAED,IAAA,IACE,CAACmQ,WAAW,IACZ,CAACC,SAAS,IACV,CAACC,eAAe,IAChB,CAACC,aAAa,IACd,EAAEH,WAAW,YAAYlY,WAAW,CAAC,IACrC,EAAEmY,SAAS,YAAYnY,WAAW,CAAC,IACnC,EAAEoY,eAAe,YAAYpY,WAAW,CAAC,IACzC,EAAEqY,aAAa,YAAYrY,WAAW,CAAC,EACvC;AACA,MAAA,OAAO,CAAC;AACV,IAAA;IAEA,IAAI,CAACsY,iBAAiB,EAAE;AACxBJ,IAAAA,WAAW,CAACjO,eAAe,CAAC,QAAQ,CAAC;AACrCmO,IAAAA,eAAe,CAACnO,eAAe,CAAC,QAAQ,CAAC;AAEzC,IAAA,IAAI,CAACsO,SAAS,CAAC,CACb,CAACL,WAAW,EAAEC,SAAS,CAAC,EACxB,CAACC,eAAe,EAAEC,aAAa,CAAC,CACjC,CAAC;AAEFH,IAAAA,WAAW,CAACxR,gBAAgB,CAAC,OAAO,EAAG8R,MAAM,IAAK;MAChD,IAAI,CAACD,SAAS,CAAC,CAAC,CAACH,eAAe,EAAEC,aAAa,CAAC,CAAC,CAAC;AAClD,MAAA,IAAI,CAAC1L,UAAU,CAACuL,WAAW,EAAEC,SAAS,CAAC;AACzC,IAAA,CAAC,CAAC;AAEFC,IAAAA,eAAe,CAAC1R,gBAAgB,CAAC,OAAO,EAAG8R,MAAM,IAAK;MACpD,IAAI,CAACD,SAAS,CAAC,CAAC,CAACL,WAAW,EAAEC,SAAS,CAAC,CAAC,CAAC;AAC1C,MAAA,IAAI,CAACxL,UAAU,CAACyL,eAAe,EAAEC,aAAa,CAAC;AACjD,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;EACEE,SAASA,CAACE,SAAS,EAAE;IACnBA,SAAS,CAAC1R,OAAO,CAAC,CAAC,CAAC2R,MAAM,EAAEC,IAAI,CAAC,KAAK;MACpC,IAAIA,IAAI,IAAID,MAAM,EAAE;AAClBC,QAAAA,IAAI,CAAClW,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACrCiW,MAAM,CAACpY,SAAS,CAACgJ,MAAM,CAAC,IAAI,CAAC2O,aAAa,CAAC;QAC3CS,MAAM,CAAChQ,aAAa,CAACpI,SAAS,CAACgJ,MAAM,CAAC,WAAW,CAAC;AAClDoP,QAAAA,MAAM,CAACjW,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AAC7C,QAAA,IAAIiW,MAAM,CAACtV,OAAO,CAACwV,WAAW,EAC5BF,MAAM,CAACjW,YAAY,CAAC,YAAY,EAAEiW,MAAM,CAACtV,OAAO,CAACwV,WAAW,CAAC;AACjE,MAAA;AACF,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;AACA;AACEjM,EAAAA,UAAUA,CAAC+L,MAAM,EAAEC,IAAI,EAAE;IACvB,MAAMnL,MAAM,GAAG,CAACmL,IAAI,CAACtQ,YAAY,CAAC,QAAQ,CAAC;AAE3C,IAAA,IAAImF,MAAM,EAAE;MACV,IAAI,CAAC+K,SAAS,CAAC,CAAC,CAACG,MAAM,EAAEC,IAAI,CAAC,CAAC,CAAC;AAClC,IAAA,CAAC,MAAM,IAAIA,IAAI,IAAID,MAAM,EAAE;AACzBC,MAAAA,IAAI,CAAC1O,eAAe,CAAC,QAAQ,CAAC;MAC9ByO,MAAM,CAACpY,SAAS,CAACyI,GAAG,CAAC,IAAI,CAACkP,aAAa,CAAC;MACxCS,MAAM,CAAChQ,aAAa,CAACpI,SAAS,CAACyI,GAAG,CAAC,WAAW,CAAC;AAC/C2P,MAAAA,MAAM,CAACjW,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;AAC5C,MAAA,IAAIiW,MAAM,CAACtV,OAAO,CAACyV,WAAW,EAC5BH,MAAM,CAACjW,YAAY,CAAC,YAAY,EAAEiW,MAAM,CAACtV,OAAO,CAACyV,WAAW,CAAC;AACjE,IAAA;AACF,EAAA;AAEAP,EAAAA,iBAAiBA,GAAG;IAClB,MAAMQ,SAAS,GAAG,IAAI,CAAChZ,KAAK,CAACiI,aAAa,CACxC,0CACF,CAAC;IACD,MAAMgR,aAAa,GAAG,IAAI,CAACjZ,KAAK,CAACiI,aAAa,CAC5C,8CACF,CAAC;IACD,IAAI+Q,SAAS,EAAEA,SAAS,CAACrW,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACzD,IAAIsW,aAAa,EAAEA,aAAa,CAACtW,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC;AACnE,EAAA;;AAEA;AACF;AACA;AAEA;AA7GasV,SAAS,CA4GbhY,UAAU,GAAG,YAAY;;AC5GlC;AACA;AACA;AACO,MAAMiZ,kBAAkB,SAASnW,qBAAqB,CAAC;AAC5D;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACtB,KAAK,EAAEiD,MAAM,GAAG,EAAE,EAAE;IAAA,IAAAkW,qBAAA,EAAAC,qBAAA;AAC9B,IAAA,KAAK,CAACpZ,KAAK,EAAEiD,MAAM,CAAC;IAEpB,MAAMoW,sBAAsB,GAAA,CAAAF,qBAAA,GAC1B,IAAI,CAAClW,MAAM,CAACqW,qBAAqB,CAACpX,OAAO,KAAA,IAAA,GAAAiX,qBAAA,GACzC7Y,QAAQ,CAAC2H,aAAa,CAAC,IAAI,CAAChF,MAAM,CAACqW,qBAAqB,CAACxO,QAAQ,CAAC;IAEpE,MAAMyO,qBAAqB,GAAA,CAAAH,qBAAA,GACzB,IAAI,CAACnW,MAAM,CAACuW,oBAAoB,CAACtX,OAAO,KAAA,IAAA,GAAAkX,qBAAA,GACxC,IAAI,CAACpZ,KAAK,CAACiI,aAAa,CAAC,IAAI,CAAChF,MAAM,CAACuW,oBAAoB,CAAC1O,QAAQ,CAAC;IAErE,IACE,EACEuO,sBAAsB,YAAYnZ,WAAW,IAC7CqZ,qBAAqB,YAAYrZ,WAAW,CAC7C,EACD;AACA,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAACmZ,sBAAsB,GAAGA,sBAAsB;IACpD,IAAI,CAACE,qBAAqB,GAAGA,qBAAqB;IAElD,IAAI,CAACE,kBAAkB,EAAE;IACzB,IAAI,CAACC,qBAAqB,EAAE;IAE5B,IAAI,CAAC1Z,KAAK,CAAC2C,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;AAEzC,IAAA,IAAI,IAAI,CAACM,MAAM,CAAC0W,WAAW,EAAE;MAC3B,IAAI,CAACC,QAAQ,EAAE;AACjB,IAAA;AACF,EAAA;AAEAF,EAAAA,qBAAqBA,GAAG;AACtB,IAAA,IAAI,CAACG,EAAE,GAAG/D,MAAM,CAACgE,UAAU,CAAC,IAAI,CAAC7W,MAAM,CAAC8W,iBAAiB,CAAC;AAC1D,IAAA,IAAI,CAACF,EAAE,CAACG,WAAW,CAAC,IAAI,CAACC,SAAS,CAACnT,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,CAACmT,SAAS,EAAE;AAClB,EAAA;AAEAR,EAAAA,kBAAkBA,GAAG;IACnB,IAAI,CAACS,WAAW,GAAG5Z,QAAQ,CAAC0I,aAAa,CAAC,QAAQ,CAAC;IACnD,IAAI,CAACkR,WAAW,CAACvX,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC/C,IAAI,CAACuX,WAAW,CAACvX,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;IACtD,IAAI,CAACuX,WAAW,CAACvX,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AAEvD,IAAA,IAAI,CAACuX,WAAW,CAAC/N,SAAS,GAAG,CAAA,aAAA,EAAgB,IAAI,CAAClJ,MAAM,CAACkX,YAAY,CAACC,OAAO,CAAA,CAAE;IAC/E,IAAI,CAACF,WAAW,CAAChR,WAAW,GAAG,IAAI,CAACjG,MAAM,CAACkX,YAAY,CAACE,QAAQ;AAEhE,IAAA,IAAI,CAACH,WAAW,CAACtT,gBAAgB,CAC/B,OAAO,EACP,IAAI,CAAC0T,iBAAiB,CAACxT,IAAI,CAAC,IAAI,CAClC,CAAC;IAED,IAAI,CAACuS,sBAAsB,CAAClQ,MAAM,CAAC,IAAI,CAAC+Q,WAAW,CAAC;AACtD,EAAA;AAEAD,EAAAA,SAASA,GAAG;AACV,IAAA,IAAI,IAAI,CAACJ,EAAE,CAAC5O,OAAO,EAAE;MACnB,IAAI,CAACsP,aAAa,EAAE;AACtB,IAAA,CAAC,MAAM;MACL,IAAI,CAACC,eAAe,EAAE;AACxB,IAAA;AACF,EAAA;AAEAD,EAAAA,aAAaA,GAAG;IACd,IAAI,CAACE,QAAQ,EAAE;IACf,IAAI,CAACC,iBAAiB,EAAE;AAC1B,EAAA;AAEAF,EAAAA,eAAeA,GAAG;IAChB,IAAI,CAACZ,QAAQ,EAAE;IACf,IAAI,CAACe,cAAc,EAAE;AACvB,EAAA;AAEAA,EAAAA,cAAcA,GAAG;IACf,IAAI,CAACC,YAAY,GAAGta,QAAQ,CAAC0I,aAAa,CAAC,QAAQ,CAAC;IACpD,IAAI,CAAC4R,YAAY,CAACjY,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IAEhD,IAAI,CAACiY,YAAY,CAACzO,SAAS,GAAG,IAAI,CAAClJ,MAAM,CAAC4X,WAAW,CAACT,OAAO;IAC7D,IAAI,CAACQ,YAAY,CAAC1R,WAAW,GAAG,IAAI,CAACjG,MAAM,CAAC4X,WAAW,CAACC,IAAI;AAE5D,IAAA,IAAI,CAACF,YAAY,CAAChU,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACmU,YAAY,CAACjU,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,IAAI,CAACyS,qBAAqB,CAACpQ,MAAM,CAAC,IAAI,CAACyR,YAAY,CAAC;AACtD,EAAA;AAEAG,EAAAA,YAAYA,GAAG;IACb,IAAI,CAACnB,QAAQ,EAAE;AACf,IAAA,IAAI,CAACM,WAAW,CAAC/R,KAAK,EAAE;AAC1B,EAAA;AAEAuS,EAAAA,iBAAiBA,GAAG;IAClB,IAAI,IAAI,CAACE,YAAY,EAAE;AACrB,MAAA,IAAI,CAACA,YAAY,CAACpR,MAAM,EAAE;MAC1B,IAAI,CAACoR,YAAY,GAAG,IAAI;AAC1B,IAAA;AACF,EAAA;AAEAhB,EAAAA,QAAQA,GAAG;IACT,IAAI,CAACM,WAAW,CAACvX,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;IACvD,IAAI,CAAC3C,KAAK,CAACQ,SAAS,CAACyI,GAAG,CAAC,eAAe,CAAC;IACzC,IAAI,CAACiR,WAAW,CAAChR,WAAW,GAAG,IAAI,CAACjG,MAAM,CAACkX,YAAY,CAACE,QAAQ;AAClE,EAAA;AAEAI,EAAAA,QAAQA,GAAG;IACT,IAAI,CAACP,WAAW,CAACvX,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;IACtD,IAAI,CAAC3C,KAAK,CAACQ,SAAS,CAACgJ,MAAM,CAAC,eAAe,CAAC;IAC5C,IAAI,CAAC0Q,WAAW,CAAChR,WAAW,GAAG,IAAI,CAACjG,MAAM,CAACkX,YAAY,CAACa,QAAQ;AAClE,EAAA;AAEAV,EAAAA,iBAAiBA,GAAG;IAClB,IAAI,CAAC1B,MAAM,EAAE;AACf,EAAA;AAEAA,EAAAA,MAAMA,GAAG;IACP,IAAI,IAAI,CAACsB,WAAW,CAAC3R,YAAY,CAAC,eAAe,CAAC,KAAK,OAAO,EAAE;MAC9D,IAAI,CAACkS,QAAQ,EAAE;AACf,MAAA,IAAI,CAACza,KAAK,CAACmI,KAAK,EAAE;AACpB,IAAA,CAAC,MAAM;MACL,IAAI,CAACyR,QAAQ,EAAE;AACjB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AA6CA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AArMaV,kBAAkB,CAkItBjZ,UAAU,GAAG,YAAY;AAEhC;AACF;AACA;AACA;AACA;AAxIaiZ,kBAAkB,CAyItB/V,QAAQ,GAAGoB,MAAM,CAACyH,MAAM,CAAC;AAC9B+N,EAAAA,iBAAiB,EAAE,wBAAwB;AAC3CJ,EAAAA,WAAW,EAAE,IAAI;AACjBQ,EAAAA,YAAY,EAAE;AACZE,IAAAA,QAAQ,EAAE,aAAa;AACvBW,IAAAA,QAAQ,EAAE,aAAa;AACvBZ,IAAAA,OAAO,EAAE;GACV;AACDd,EAAAA,qBAAqB,EAAE;AACrBxO,IAAAA,QAAQ,EAAE;GACX;AACD+P,EAAAA,WAAW,EAAE;AACXC,IAAAA,IAAI,EAAE,OAAO;AACbV,IAAAA,OAAO,EAAE;GACV;AACDZ,EAAAA,oBAAoB,EAAE;AACpB1O,IAAAA,QAAQ,EAAE;AACZ;AACF,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AAjKaoO,kBAAkB,CAkKtB9U,MAAM,GAAGG,MAAM,CAACyH,MAAM,qBACL;AACpBxH,EAAAA,UAAU,EAAE;AACVuV,IAAAA,iBAAiB,EAAE;AAAEhW,MAAAA,IAAI,EAAE;KAAU;AACrC4V,IAAAA,WAAW,EAAE;AAAE5V,MAAAA,IAAI,EAAE;KAAW;AAChCoW,IAAAA,YAAY,EAAE;AAAEpW,MAAAA,IAAI,EAAE;KAAU;AAChCuV,IAAAA,qBAAqB,EAAE;AAAEvV,MAAAA,IAAI,EAAE;KAAU;AACzC8W,IAAAA,WAAW,EAAE;AAAE9W,MAAAA,IAAI,EAAE;KAAU;AAC/ByV,IAAAA,oBAAoB,EAAE;AAAEzV,MAAAA,IAAI,EAAE;AAAS;AACzC;AACF,CACF,CAAC;;AC9KH;AACA;AACA;AACO,MAAMkX,aAAa,SAASlY,qBAAqB,CAAC;AACvD;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACtB,KAAK,EAAEiD,MAAM,GAAG,EAAE,EAAE;AAC9B,IAAA,KAAK,CAACjD,KAAK,EAAEiD,MAAM,CAAC;IAEpB,MAAMiY,QAAQ,GACZ,IAAI,CAACjY,MAAM,CAACkY,OAAO,CAACjZ,OAAO,IAC3B5B,QAAQ,CAAC2H,aAAa,CAAC,IAAI,CAAChF,MAAM,CAACkY,OAAO,CAACrQ,QAAQ,CAAC;IAEtD,IAAI,CAACoQ,QAAQ,IAAI,EAAEA,QAAQ,YAAYhb,WAAW,CAAC,EAAE;AACnD,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAACgb,QAAQ,GAAGA,QAAQ;AAExB,IAAA,IAAI,CAACE,MAAM,mCAAqC,EAAG;AACnD,IAAA,IAAI,CAACC,UAAU,6BAA+B,EAAG;AACjD,IAAA,IAAI,CAACC,aAAa,GAAGhb,QAAQ,CAACib,KAAK;AAEnC,IAAA,IAAI,CAACvb,KAAK,CAAC4G,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC4U,QAAQ,CAAC1U,IAAI,CAAC,IAAI,CAAC,CAAC;AACjE,EAAA;AAEA2U,EAAAA,UAAUA,CAACC,MAAM,GAAG,EAAE,EAAE;AACtB,IAAA,OAAOC,MAAM,CAACD,MAAM,CAAC,CAAChT,OAAO,CAC3B,aAAa,EACZlH,IAAI,IAAKyZ,aAAa,CAACW,SAAS,CAACpa,IAAI,CACxC,CAAC;AACH,EAAA;AAEAqa,EAAAA,UAAUA,GAAG;AACXvb,IAAAA,QAAQ,CAACib,KAAK,GAAG,IAAI,CAACD,aAAa;AACrC,EAAA;AAEAQ,EAAAA,WAAWA,GAAG;AACZxb,IAAAA,QAAQ,CAACib,KAAK,GAAG,CAAA,EAAG,IAAI,CAACH,MAAM,CAACnX,MAAM,CAAA,UAAA,EAAa3D,QAAQ,CAACib,KAAK,CAAA,CAAE;AACrE,EAAA;AAEAQ,EAAAA,WAAWA,GAAG;IACZ,IAAI,CAACb,QAAQ,CAAC1P,SAAS,GAAG,IAAI,CAACwQ,cAAc,EAAE;IAC/C,IAAI,CAACd,QAAQ,CAAC1a,SAAS,CAACgJ,MAAM,CAAC,YAAY,CAAC;IAC5C,IAAI,CAAC0R,QAAQ,CAACvY,YAAY,CAAC,iBAAiB,EAAE,sBAAsB,CAAC;AACrE,IAAA,IAAI,CAACuY,QAAQ,CAAC/S,KAAK,EAAE;AACvB,EAAA;AAEA6T,EAAAA,cAAcA,GAAG;IACf,IAAI3J,IAAI,GACN,yFAAyF;AAC3FA,IAAAA,IAAI,IAAI,yCAAyC;AACjDA,IAAAA,IAAI,IAAI,mDAAmD;AAC3D,IAAA,KAAK,MAAMnM,KAAK,IAAI,IAAI,CAACkV,MAAM,EAAE;AAC/B/I,MAAAA,IAAI,IAAI,MAAM;MACdA,IAAI,IAAI,CAAA,UAAA,EAAa,IAAI,CAACoJ,UAAU,CAACvV,KAAK,CAAC+V,SAAS,CAAC,CAAA,EAAA,CAAI;MACzD5J,IAAI,IAAI,IAAI,CAACoJ,UAAU,CAACvV,KAAK,CAAC/E,OAAO,CAAC;AACtCkR,MAAAA,IAAI,IAAI,MAAM;AACdA,MAAAA,IAAI,IAAI,OAAO;AACjB,IAAA;AACAA,IAAAA,IAAI,IAAI,OAAO;AACfA,IAAAA,IAAI,IAAI,QAAQ;AAChB,IAAA,OAAOA,IAAI;AACb,EAAA;AAEA6J,EAAAA,WAAWA,GAAG;IACZ,IAAI,CAAChB,QAAQ,CAAC1a,SAAS,CAACyI,GAAG,CAAC,YAAY,CAAC;AACzC,IAAA,IAAI,CAACiS,QAAQ,CAAC/Q,eAAe,CAAC,iBAAiB,CAAC;AAClD,EAAA;;AAEA;AACF;AACA;EACEqR,QAAQA,CAACpU,KAAK,EAAE;IACd,IAAI,CAAC+U,kBAAkB,EAAE;IACzB,IAAI,CAACD,WAAW,EAAE;IAClB,IAAI,CAACL,UAAU,EAAE;AACjB,IAAA,IAAI,CAAC,IAAI,CAACO,QAAQ,EAAE,EAAE;MACpBhV,KAAK,CAACuG,cAAc,EAAE;MACtB,IAAI,CAACmO,WAAW,EAAE;MAClB,IAAI,CAACC,WAAW,EAAE;MAClB,IAAI,CAACM,gBAAgB,EAAE;AACzB,IAAA;AACF,EAAA;AAEAA,EAAAA,gBAAgBA,GAAG;AACjB,IAAA,KAAK,MAAMnW,KAAK,IAAI,IAAI,CAACkV,MAAM,EAAE;AAC/B,MAAA,IAAI,CAACkB,eAAe,CAACpW,KAAK,CAAC;AAC7B,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEoW,eAAeA,CAACpW,KAAK,EAAE;AACrB,IAAA,MAAMqW,UAAU,GAAGjc,QAAQ,CAAC0I,aAAa,CAAC,MAAM,CAAC;AACjDuT,IAAAA,UAAU,CAAC/T,EAAE,GAAG,GAAGtC,KAAK,CAAC+V,SAAS,CAAA,MAAA,CAAQ;AAC1CM,IAAAA,UAAU,CAAC/b,SAAS,CAACyI,GAAG,CAAC,qBAAqB,CAAC;IAC/CsT,UAAU,CAAC/Q,SAAS,GAAG,IAAI,CAACiQ,UAAU,CAACvV,KAAK,CAAC/E,OAAO,CAAC;IAErD,MAAMqb,QAAQ,GAAGlc,QAAQ,CAAC2H,aAAa,CAAC,CAAA,CAAA,EAAI/B,KAAK,CAAC+V,SAAS,CAAA,CAAE,CAAC;AAC9D,IAAA,MAAMQ,SAAS,GAAGD,QAAQ,CAAC3T,OAAO,CAAC,iBAAiB,CAAC;IACrD,MAAM6T,eAAe,GAAG,CAACD,SAAS,IAAID,QAAQ,EAAE3T,OAAO,CAAC,mBAAmB,CAAC;AAE5E,IAAA,MAAMF,MAAM,GAAG+T,eAAe,CAACzU,aAAa,CAAC,OAAO,CAAC;AACrD,IAAA,MAAM0U,OAAO,GAAGD,eAAe,CAACzU,aAAa,CAAC,QAAQ,CAAC;AAEvDyU,IAAAA,eAAe,CAAClc,SAAS,CAACyI,GAAG,CAAC,yBAAyB,CAAC;IAExD,IAAIwT,SAAS,IAAIE,OAAO,EAAE;AACxBA,MAAAA,OAAO,CAAC5U,KAAK,CAACwU,UAAU,CAAC;AACzBG,MAAAA,eAAe,CAAC/Z,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;MACpDgI,iBAAiB,CAAC8R,SAAS,EAAE,kBAAkB,EAAEF,UAAU,CAAC/T,EAAE,CAAC;AACjE,IAAA,CAAC,MAAM,IAAIG,MAAM,IAAI6T,QAAQ,EAAE;AAC7B7T,MAAAA,MAAM,CAACZ,KAAK,CAACwU,UAAU,CAAC;AACxBC,MAAAA,QAAQ,CAAC7Z,YAAY,CAAC,cAAc,EAAE,MAAM,CAAC;MAC7CgI,iBAAiB,CAAC6R,QAAQ,EAAE,kBAAkB,EAAED,UAAU,CAAC/T,EAAE,CAAC;AAChE,IAAA;AACF,EAAA;AAEA2T,EAAAA,kBAAkBA,GAAG;AACnB,IAAA,KAAK,MAAMjW,KAAK,IAAI,IAAI,CAACkV,MAAM,EAAE;AAC/B,MAAA,IAAI,CAACwB,iBAAiB,CAAC1W,KAAK,CAAC;AAC/B,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACE0W,iBAAiBA,CAAC1W,KAAK,EAAE;IACvB,MAAMqW,UAAU,GAAGjc,QAAQ,CAAC2H,aAAa,CAAC,CAAA,CAAA,EAAI/B,KAAK,CAAC+V,SAAS,CAAA,MAAA,CAAQ,CAAC;IAEtE,MAAMO,QAAQ,GAAGlc,QAAQ,CAAC2H,aAAa,CAAC,CAAA,CAAA,EAAI/B,KAAK,CAAC+V,SAAS,CAAA,CAAE,CAAC;AAC9D,IAAA,MAAMQ,SAAS,GAAGD,QAAQ,CAAC3T,OAAO,CAAC,iBAAiB,CAAC;IACrD,MAAM6T,eAAe,GAAG,CAACD,SAAS,IAAID,QAAQ,EAAE3T,OAAO,CAAC,mBAAmB,CAAC;AAE5E,IAAA,MAAMF,MAAM,GAAG+T,eAAe,CAACzU,aAAa,CAAC,OAAO,CAAC;AACrD,IAAA,MAAM0U,OAAO,GAAGD,eAAe,CAACzU,aAAa,CAAC,QAAQ,CAAC;IAEvDsU,UAAU,CAAC/S,MAAM,EAAE;AACnBkT,IAAAA,eAAe,CAAClc,SAAS,CAACgJ,MAAM,CAAC,yBAAyB,CAAC;IAE3D,IAAIiT,SAAS,IAAIE,OAAO,EAAE;AACxBD,MAAAA,eAAe,CAACvS,eAAe,CAAC,cAAc,CAAC;MAC/CE,oBAAoB,CAACoS,SAAS,EAAE,kBAAkB,EAAEF,UAAU,CAAC/T,EAAE,CAAC;AACpE,IAAA,CAAC,MAAM,IAAIG,MAAM,IAAI6T,QAAQ,EAAE;AAC7BA,MAAAA,QAAQ,CAACrS,eAAe,CAAC,cAAc,CAAC;MACxCE,oBAAoB,CAACmS,QAAQ,EAAE,kBAAkB,EAAED,UAAU,CAAC/T,EAAE,CAAC;AACnE,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACEqU,EAAAA,YAAYA,CAACZ,SAAS,EAAEa,KAAK,EAAE;AAC7B,IAAA,IAAI,CAACzB,UAAU,CAAClJ,IAAI,CAAC;MACnB8J,SAAS;MACTa,KAAK;MACLnY,KAAK,EAAE,IAAI,CAAC3E,KAAK,CAAC+c,QAAQ,CAACC,SAAS,CAACf,SAAS;AAChD,KAAC,CAAC;AACJ,EAAA;AAEAG,EAAAA,QAAQA,GAAG;IACT,IAAI,CAAChB,MAAM,GAAG,EAAE;;AAEhB;IACA,IAAI6B,SAAS,GAAG,IAAI;;AAEpB;IACA,IAAIC,oBAAoB,GAAG,IAAI;AAE/B,IAAA,IAAIvL,CAAC;AACL,IAAA,IAAIG,CAAC;AAEL,IAAA,KAAKH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,IAAI,CAAC0J,UAAU,CAACpX,MAAM,EAAE0N,CAAC,EAAE,EAAE;AAC3CsL,MAAAA,SAAS,GAAG,IAAI,CAAC5B,UAAU,CAAC1J,CAAC,CAAC;AAC9B,MAAA,KAAKG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGmL,SAAS,CAACH,KAAK,CAAC7Y,MAAM,EAAE6N,CAAC,EAAE,EAAE;QAC3CoL,oBAAoB,GAAGD,SAAS,CAACH,KAAK,CAAChL,CAAC,CAAC,CAACqL,MAAM,CAC9CF,SAAS,CAACtY,KAAK,EACfsY,SAAS,CAACH,KAAK,CAAChL,CAAC,CAAC,CAACsL,MACrB,CAAC;AAED,QAAA,IACE,OAAOF,oBAAoB,KAAK,SAAS,IACzC,CAACA,oBAAoB,EACrB;AACA,UAAA,IAAI,CAAC9B,MAAM,CAACjJ,IAAI,CAAC;YACf8J,SAAS,EAAEgB,SAAS,CAAChB,SAAS;AAC9B9a,YAAAA,OAAO,EAAE8b,SAAS,CAACH,KAAK,CAAChL,CAAC,CAAC,CAAC3Q;AAC9B,WAAC,CAAC;AACF,UAAA;AACF,QAAA,CAAC,MAAM,IAAI,OAAO+b,oBAAoB,KAAK,QAAQ,EAAE;AACnD,UAAA,IAAI,CAAC9B,MAAM,CAACjJ,IAAI,CAAC;AACf8J,YAAAA,SAAS,EAAEiB,oBAAoB;AAC/B/b,YAAAA,OAAO,EAAE8b,SAAS,CAACH,KAAK,CAAChL,CAAC,CAAC,CAAC3Q;AAC9B,WAAC,CAAC;AACF,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA,OAAO,IAAI,CAACia,MAAM,CAACnX,MAAM,KAAK,CAAC;AACjC,EAAA;;AAEA;AACF;AACA;AAwCA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AApRagX,aAAa,CA8MjBW,SAAS,GAAG;AACjB,EAAA,GAAG,EAAE,OAAO;AACZ,EAAA,GAAG,EAAE,MAAM;AACX,EAAA,GAAG,EAAE,MAAM;AACX,EAAA,GAAG,EAAE,QAAQ;AACb,EAAA,GAAG,EAAE,OAAO;AACZ,EAAA,GAAG,EAAE,QAAQ;AACb,EAAA,GAAG,EAAE,QAAQ;AACb,EAAA,GAAG,EAAE;AACP,CAAC;AAED;AACF;AACA;AA3NaX,aAAa,CA4NjBhb,UAAU,GAAG,oBAAoB;AAExC;AACF;AACA;AACA;AACA;AAlOagb,aAAa,CAmOjB9X,QAAQ,GAAGoB,MAAM,CAACyH,MAAM,CAAC;AAC9BmP,EAAAA,OAAO,EAAE;AACPrQ,IAAAA,QAAQ,EAAE;AACZ;AACF,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AA7OamQ,aAAa,CA8OjB7W,MAAM,GAAGG,MAAM,CAACyH,MAAM,qBACL;AACpBxH,EAAAA,UAAU,EAAE;AACV2W,IAAAA,OAAO,EAAE;AAAEpX,MAAAA,IAAI,EAAE;AAAS;AAC5B;AACF,CACF,CAAC;;AC3PH;;;AAIA;AACA;AACA;AACO,MAAMsZ,eAAe,SAASta,qBAAqB,CAAC;AACzD;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACtB,KAAK,EAAEiD,MAAM,GAAG,EAAE,EAAE;AAAA,IAAA,IAAAqa,qBAAA;AAC9B,IAAA,KAAK,CAACtd,KAAK,EAAEiD,MAAM,CAAC;AAEpB,IAAA,IAAI,CAACoa,eAAe,CAACjd,WAAW,EAAE,EAAE;AAClC,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,MAAMmd,kBAAkB,GAAA,CAAAD,qBAAA,GACtB,IAAI,CAACra,MAAM,CAACua,iBAAiB,CAACtb,OAAO,KAAA,IAAA,GAAAob,qBAAA,GACrC,IAAI,CAACtd,KAAK,CAACiI,aAAa,CAAC,IAAI,CAAChF,MAAM,CAACua,iBAAiB,CAAC1S,QAAQ,CAAC;IAElE,IAAI,CAACyS,kBAAkB,IAAI,EAAEA,kBAAkB,YAAYrd,WAAW,CAAC,EAAE;AACvE,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAACqd,kBAAkB,GAAGA,kBAAkB;IAE5C,IAAI,CAACE,cAAc,EAAE;IACrB,IAAI,CAACC,aAAa,EAAE;IACpB,IAAI,CAACC,UAAU,EAAE;IACjB,IAAI,CAACC,cAAc,EAAE;AAErB,IAAA,IAAI,CAAC5d,KAAK,CAAC4G,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACiX,iBAAiB,CAAC/W,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,IAAI,CAAC9G,KAAK,CAACQ,SAAS,CAACyI,GAAG,CAAC,iCAAiC,CAAC;AAC7D,EAAA;AAEAyU,EAAAA,aAAaA,GAAG;IACd,IAAI,CAACI,SAAS,GAAGxd,QAAQ,CAAC0I,aAAa,CAAC,KAAK,CAAC;IAC9C,IAAI,CAAC8U,SAAS,CAACtd,SAAS,CAACyI,GAAG,CAAC,iCAAiC,CAAC;AAE/D,IAAA,IAAI,CAAC6U,SAAS,CAAClX,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAACmX,UAAU,CAACjX,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,IAAA,IAAI,CAACgX,SAAS,CAAClX,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAACoX,WAAW,CAAClX,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,IAAA,IAAI,CAACgX,SAAS,CAAClX,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAACqX,MAAM,CAACnX,IAAI,CAAC,IAAI,CAAC,CAAC;IAE/D,IAAI,CAACoX,UAAU,CAACC,WAAW,CAAC,IAAI,CAACL,SAAS,CAAC;IAC3C,IAAI,CAACA,SAAS,CAAC5Q,WAAW,CAAC,IAAI,CAACgR,UAAU,CAAC;AAC7C,EAAA;AAEAP,EAAAA,UAAUA,GAAG;AACX,IAAA,MAAMhV,MAAM,GAAGrI,QAAQ,CAAC0I,aAAa,CAAC,OAAO,CAAC;IAC9CL,MAAM,CAAChG,YAAY,CAAC,KAAK,EAAE,IAAI,CAACub,UAAU,CAAC1V,EAAE,CAAC;IAC9CG,MAAM,CAACnI,SAAS,CAACyI,GAAG,CAAC,cAAc,EAAE,yBAAyB,CAAC;AAC/DN,IAAAA,MAAM,CAACO,WAAW,GAAG,IAAI,CAACjG,MAAM,CAACmb,kBAAkB;AAEnD,IAAA,MAAMC,KAAK,GAAG/d,QAAQ,CAAC0I,aAAa,CAAC,GAAG,CAAC;AACzCqV,IAAAA,KAAK,CAAC7d,SAAS,CAACyI,GAAG,CAAC,YAAY,CAAC;AACjCoV,IAAAA,KAAK,CAACnV,WAAW,GAAG,IAAI,CAACjG,MAAM,CAACqb,gBAAgB;IAEhD,IAAI,CAAC3V,MAAM,GAAGA,MAAM;AACpB,IAAA,IAAI,CAACmV,SAAS,CAAC3U,MAAM,CAACkV,KAAK,CAAC;AAC5B,IAAA,IAAI,CAACP,SAAS,CAAC3U,MAAM,CAACR,MAAM,CAAC;AAC/B,EAAA;AAEA8U,EAAAA,cAAcA,GAAG;IACf,IAAI,CAACS,UAAU;AACb,IAAA,IAAI,CAACle,KAAK,CAACiI,aAAa,CAAC,+BAA+B,CACzD;AACD,IAAA,IAAI,CAACiW,UAAU,CAACtX,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC2X,YAAY,CAACzX,IAAI,CAAC,IAAI,CAAC,CAAC;AACxE,IAAA,IAAI,CAACoX,UAAU,CAACtX,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC4X,WAAW,CAAC1X,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,IAAA,IAAI,CAACoX,UAAU,CAACtX,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC6X,UAAU,CAAC3X,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,EAAA;AAEA8W,EAAAA,cAAcA,GAAG;IACf,IAAI,CAACc,OAAO,GAAGpe,QAAQ,CAAC0I,aAAa,CAAC,KAAK,CAAC;IAC5C,IAAI,CAAC0V,OAAO,CAACle,SAAS,CAACyI,GAAG,CAAC,uBAAuB,CAAC;IACnD,IAAI,CAACyV,OAAO,CAAC/b,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChD,IAAI,CAAC+b,OAAO,CAAC/b,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC3C,IAAI,CAACmb,SAAS,CAAC3U,MAAM,CAAC,IAAI,CAACuV,OAAO,CAAC;AACrC,EAAA;;AAEA;AACF;AACA;EACEX,UAAUA,CAAC3W,KAAK,EAAE;IAChBA,KAAK,CAACuG,cAAc,EAAE;IACtB,IAAI,CAACmQ,SAAS,CAACtd,SAAS,CAACyI,GAAG,CAAC,iCAAiC,CAAC;AACjE,EAAA;AAEA+U,EAAAA,WAAWA,GAAG;IACZ,IAAI,CAACF,SAAS,CAACtd,SAAS,CAACgJ,MAAM,CAAC,iCAAiC,CAAC;AACpE,EAAA;;AAEA;AACF;AACA;EACEyU,MAAMA,CAAC7W,KAAK,EAAE;IACZA,KAAK,CAACuG,cAAc,EAAE;IACtB,IAAI,CAACmQ,SAAS,CAACtd,SAAS,CAACgJ,MAAM,CAAC,iCAAiC,CAAC;IAClE,IAAI,CAAC+T,kBAAkB,CAAC/c,SAAS,CAACgJ,MAAM,CAAC,YAAY,CAAC;IACtD,IAAI,CAACkV,OAAO,CAACxV,WAAW,GAAG,IAAI,CAACjG,MAAM,CAAC0b,gBAAgB;IACvD,IAAI,CAACC,WAAW,CAACxX,KAAK,CAACyX,YAAY,CAACC,KAAK,CAAC;AAC5C,EAAA;;AAEA;AACF;AACA;EACEF,WAAWA,CAACE,KAAK,EAAE;IACjB,KAAK,MAAMC,IAAI,IAAIne,KAAK,CAACyF,IAAI,CAACyY,KAAK,CAAC,EAAE;AACpC,MAAA,IAAI,CAACE,UAAU,CAACD,IAAI,CAAC;AACvB,IAAA;AACF,EAAA;AAEAR,EAAAA,YAAYA,GAAG;IACb,IAAI,CAAChB,kBAAkB,CAAC/c,SAAS,CAACgJ,MAAM,CAAC,YAAY,CAAC;IACtD,IAAI,CAACkV,OAAO,CAACxV,WAAW,GAAG,IAAI,CAACjG,MAAM,CAAC0b,gBAAgB;IACvD,IAAI,CAACC,WAAW,CAAC,IAAI,CAACV,UAAU,CAACY,KAAK,CAAC;IAEvC,MAAMZ,UAAU,GAAG,IAAI,CAACA,UAAU,CAAC7V,SAAS,CAAC,IAAI,CAAC;IAClD,IAAI,CAAC6V,UAAU,IAAI,EAAEA,UAAU,YAAYhW,gBAAgB,CAAC,EAAE;AAC5D,MAAA;AACF,IAAA;IAEAgW,UAAU,CAACza,KAAK,GAAG,EAAE;AACrB,IAAA,IAAI,CAACya,UAAU,CAACC,WAAW,CAACD,UAAU,CAAC;IAEvC,IAAI,CAACT,cAAc,EAAE;AACrB,IAAA,IAAI,CAACS,UAAU,CAAC/V,KAAK,EAAE;AACzB,EAAA;AAEAqW,EAAAA,WAAWA,GAAG;IACZ,IAAI,CAAC7V,MAAM,CAACnI,SAAS,CAACyI,GAAG,CAAC,gCAAgC,CAAC;AAC7D,EAAA;AAEAwV,EAAAA,UAAUA,GAAG;IACX,IAAI,CAAC9V,MAAM,CAACnI,SAAS,CAACgJ,MAAM,CAAC,gCAAgC,CAAC;AAChE,EAAA;;AAEA;AACF;AACA;EACEyV,cAAcA,CAACC,OAAO,EAAE;AACtB,IAAA,OAAO,CAAA,wRAAA,EAA2RA,OAAO,CAACC,WAAW,CAAA,OAAA,CAAS;AAChU,EAAA;;AAEA;AACF;AACA;EACEC,YAAYA,CAAClZ,KAAK,EAAE;AAClB,IAAA,OAAO,CAAA,2TAAA,EAA8TA,KAAK,CAAC/E,OAAO,CAAA,OAAA,CAAS;AAC7V,EAAA;;AAEA;AACF;AACA;EACEke,UAAUA,CAACN,IAAI,EAAE;AACf,IAAA,MAAMnN,IAAI,GAAGtR,QAAQ,CAAC0I,aAAa,CAAC,KAAK,CAAC;IAE1C4I,IAAI,CAACpR,SAAS,CAACyI,GAAG,CAAC,yBAAyB,EAAE,4BAA4B,CAAC;IAE3E2I,IAAI,CAACpG,SAAS,GAAG;AACrB;AACA,oDAAA,EAAsDuT,IAAI,CAACvd,IAAI,CAAA;AAC/D;AACA;AACA;AACA,EAAA,CAAG;AAEC,IAAA,OAAOoQ,IAAI;AACb,EAAA;;AAEA;AACF;AACA;EACE0N,eAAeA,CAACP,IAAI,EAAE;AACpB,IAAA,MAAM7X,OAAO,GAAG5G,QAAQ,CAAC0I,aAAa,CAAC,QAAQ,CAAC;AAEhD9B,IAAAA,OAAO,CAACvE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;AACtCuE,IAAAA,OAAO,CAACvE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IACtCuE,OAAO,CAACvE,YAAY,CAAC,OAAO,EAAEoc,IAAI,CAACQ,QAAQ,CAAC;AAE5CrY,IAAAA,OAAO,CAAC1G,SAAS,CAACyI,GAAG,CACnB,+BAA+B,EAC/B,cAAc,EACd,yBAAyB,EACzB,yBACF,CAAC;AAED/B,IAAAA,OAAO,CAACsE,SAAS,GAAG,8CAA8CuT,IAAI,CAACS,YAAY,CAAA,OAAA,CAAS;AAE5F,IAAA,OAAOtY,OAAO;AAChB,EAAA;;AAEA;AACF;AACA;EACE8X,UAAUA,CAACD,IAAI,EAAE;IACf,IAAI,CAAC9b,MAAM,CAACwc,KAAK,CAACC,SAAS,CAAC,IAAI,EAAEX,IAAI,CAAC;AAEvC,IAAA,MAAMvX,KAAK,GAAG,IAAI,CAAC6X,UAAU,CAACN,IAAI,CAAC;AACnC,IAAA,MAAMY,QAAQ,GAAGnY,KAAK,CAACS,aAAa,CAAC,iCAAiC,CAAC;AACvE,IAAA,MAAM2X,QAAQ,GAAGpY,KAAK,CAACS,aAAa,CAAC,iCAAiC,CAAC;AACvE,IAAA,MAAM4X,SAAS,GAAGrY,KAAK,CAACS,aAAa,CAAC,kCAAkC,CAAC;AAEzE,IAAA,MAAM6X,QAAQ,GAAG,IAAIC,QAAQ,EAAE;AAC/BD,IAAAA,QAAQ,CAAC3W,MAAM,CAAC,WAAW,EAAE4V,IAAI,CAAC;IAElC,IAAI,CAACxB,kBAAkB,CACpBtV,aAAa,CAAC,8BAA8B,CAAC,CAC7CkB,MAAM,CAAC3B,KAAK,CAAC;AAEhB,IAAA,MAAMwY,GAAG,GAAG,IAAIC,cAAc,EAAE;IAEhC,MAAMC,MAAM,GAAGA,MAAM;AACnB,MAAA,IACEF,GAAG,CAACG,MAAM,GAAG,GAAG,IAChBH,GAAG,CAACG,MAAM,IAAI,GAAG,IACjB,EAAE,SAAS,IAAIH,GAAG,CAACI,QAAQ,CAAC,EAC5B;QACA,OAAOpb,OAAO,EAAE;AAClB,MAAA;AAEA2a,MAAAA,QAAQ,CAACnU,SAAS,GAAG,IAAI,CAACyT,cAAc,CAACe,GAAG,CAACI,QAAQ,CAAClB,OAAO,CAAC;MAC9D,IAAI,CAACR,OAAO,CAACxV,WAAW,GAAG8W,GAAG,CAACI,QAAQ,CAAClB,OAAO,CAACmB,WAAW;AAE3DT,MAAAA,QAAQ,CAACzW,MAAM,CAAC,IAAI,CAACmW,eAAe,CAACU,GAAG,CAACI,QAAQ,CAACrB,IAAI,CAAC,CAAC;AACxD,MAAA,IAAI,CAAC9b,MAAM,CAACwc,KAAK,CAACa,QAAQ,CAAC,IAAI,EAAEvB,IAAI,EAAEiB,GAAG,EAAEA,GAAG,CAACO,UAAU,CAAC;IAC7D,CAAC;IAED,MAAMvb,OAAO,GAAGA,MAAM;AACpB,MAAA,MAAMkB,KAAK,GAAG,IAAI7E,KAAK,CACrB2e,GAAG,CAACI,QAAQ,IAAI,OAAO,IAAIJ,GAAG,CAACI,QAAQ,GACnCJ,GAAG,CAACI,QAAQ,CAACla,KAAK,CAAC/E,OAAO,GAC1B6e,GAAG,CAACO,UAAU,IAAI,eACxB,CAAC;MAEDZ,QAAQ,CAACnU,SAAS,GAAG,IAAI,CAAC4T,YAAY,CAAClZ,KAAK,CAAC;AAC7C,MAAA,IAAI,CAACwY,OAAO,CAACxV,WAAW,GAAGhD,KAAK,CAAC/E,OAAO;AAExC,MAAA,IAAI,CAAC8B,MAAM,CAACwc,KAAK,CAACe,SAAS,CAAC,IAAI,EAAEzB,IAAI,EAAEiB,GAAG,EAAEA,GAAG,CAACO,UAAU,EAAEra,KAAK,CAAC;IACrE,CAAC;AAED8Z,IAAAA,GAAG,CAACpZ,gBAAgB,CAAC,MAAM,EAAEsZ,MAAM,CAAC;AACpCF,IAAAA,GAAG,CAACpZ,gBAAgB,CAAC,OAAO,EAAE5B,OAAO,CAAC;IAEtCgb,GAAG,CAACS,MAAM,CAAC7Z,gBAAgB,CAAC,UAAU,EAAGQ,KAAK,IAAK;AACjD,MAAA,IAAI,CAACA,KAAK,CAACsZ,gBAAgB,EAAE;AAC3B,QAAA;AACF,MAAA;AAEA,MAAA,MAAMC,eAAe,GAAGC,IAAI,CAACC,KAAK,CAAEzZ,KAAK,CAAC0Z,MAAM,GAAG1Z,KAAK,CAAC2Z,KAAK,GAAI,GAAG,CAAC;AACtElB,MAAAA,SAAS,CAAC3W,WAAW,GAAG,CAAA,CAAA,EAAIyX,eAAe,CAAA,CAAA,CAAG;AAChD,IAAA,CAAC,CAAC;IAEFX,GAAG,CAACgB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC/d,MAAM,CAACge,SAAS,CAAC;IACvCjB,GAAG,CAACkB,YAAY,GAAG,MAAM;AAEzBlB,IAAAA,GAAG,CAACmB,IAAI,CAACrB,QAAQ,CAAC;AACpB,EAAA;;AAEA;AACF;AACA;EACEjC,iBAAiBA,CAACzW,KAAK,EAAE;AACvB,IAAA,MAAMF,OAAO,GAAGE,KAAK,CAACC,MAAM;AAE5B,IAAA,IACE,CAACH,OAAO,IACR,EAAEA,OAAO,YAAYC,iBAAiB,CAAC,IACvC,CAACD,OAAO,CAAC1G,SAAS,CAACC,QAAQ,CAAC,+BAA+B,CAAC,EAC5D;AACA,MAAA;AACF,IAAA;AAEA2G,IAAAA,KAAK,CAACuG,cAAc,EAAE,CAAA;;AAEtB,IAAA,MAAMqS,GAAG,GAAG,IAAIC,cAAc,EAAE;AAEhCD,IAAAA,GAAG,CAACpZ,gBAAgB,CAAC,MAAM,EAAE,MAAM;MACjC,IAAIoZ,GAAG,CAACG,MAAM,GAAG,GAAG,IAAIH,GAAG,CAACG,MAAM,IAAI,GAAG,EAAE;AACzC,QAAA;AACF,MAAA;AAEA,MAAA,MAAMiB,KAAK,GAAGxgB,KAAK,CAACyF,IAAI,CACtB,IAAI,CAACkX,kBAAkB,CAACtX,gBAAgB,CAAC,6BAA6B,CACxE,CAAC;AAED,MAAA,IAAImb,KAAK,CAACnd,MAAM,KAAK,CAAC,EAAE;QACtB,IAAI,CAACsZ,kBAAkB,CAAC/c,SAAS,CAACyI,GAAG,CAAC,YAAY,CAAC;AACrD,MAAA;AAEA,MAAA,MAAMoY,UAAU,GAAGD,KAAK,CAACE,IAAI,CAAE1P,IAAI,IAAKA,IAAI,CAACnR,QAAQ,CAACyG,OAAO,CAAC,CAAC;AAC/D,MAAA,IAAIma,UAAU,EAAEA,UAAU,CAAC7X,MAAM,EAAE;AAEnC,MAAA,IAAI,CAACvG,MAAM,CAACwc,KAAK,CAAC8B,UAAU,CAAC,IAAI,EAAEC,SAAS,EAAExB,GAAG,EAAEA,GAAG,CAACO,UAAU,CAAC;AACpE,IAAA,CAAC,CAAC;IAEFP,GAAG,CAACgB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC/d,MAAM,CAACwe,SAAS,CAAC;AACvCzB,IAAAA,GAAG,CAAC0B,gBAAgB,CAAC,cAAc,EAAE,kBAAkB,CAAC;IACxD1B,GAAG,CAACkB,YAAY,GAAG,MAAM;AAEzBlB,IAAAA,GAAG,CAACmB,IAAI,CACNQ,IAAI,CAACC,SAAS,CAAC;AACb,MAAA,CAAC1a,OAAO,CAAC1F,IAAI,GAAG0F,OAAO,CAACzD;AAC1B,KAAC,CACH,CAAC;AACH,EAAA;EAEA,OAAOrD,WAAWA,GAAG;AACnB,IAAA,OACE,IAAI,CAACyhB,sBAAsB,EAAE,IAC7B,IAAI,CAACC,mBAAmB,EAAE,IAC1B,IAAI,CAACC,kBAAkB,EAAE;AAE7B,EAAA;EAEA,OAAOF,sBAAsBA,GAAG;AAC9B,IAAA,MAAMG,GAAG,GAAG1hB,QAAQ,CAAC0I,aAAa,CAAC,KAAK,CAAC;AACzC,IAAA,OAAO,OAAOgZ,GAAG,CAACC,MAAM,KAAK,WAAW;AAC1C,EAAA;EAEA,OAAOH,mBAAmBA,GAAG;IAC3B,OAAO,OAAO/B,QAAQ,KAAK,UAAU;AACvC,EAAA;EAEA,OAAOgC,kBAAkBA,GAAG;AAC1B,IAAA,MAAMrT,KAAK,GAAGpO,QAAQ,CAAC0I,aAAa,CAAC,OAAO,CAAC;IAC7C0F,KAAK,CAAC3K,IAAI,GAAG,MAAM;AACnB,IAAA,OAAO,OAAO2K,KAAK,CAACoQ,KAAK,KAAK,WAAW;AAC3C,EAAA;;AAEA;AACF;AACA;AAyCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAtcazB,eAAe,CAwUnBpd,UAAU,GAAG,uBAAuB;AAE3C;AACF;AACA;AACA;AACA;AA9Uaod,eAAe,CA+UnBla,QAAQ,GAAGoB,MAAM,CAACyH,MAAM,CAAC;AAC9B2S,EAAAA,gBAAgB,EAAE,8BAA8B;AAChDL,EAAAA,gBAAgB,EAAE,6BAA6B;AAC/CF,EAAAA,kBAAkB,EAAE,cAAc;AAClCZ,EAAAA,iBAAiB,EAAE;AACjB1S,IAAAA,QAAQ,EAAE;GACX;AACD2U,EAAAA,KAAK,EAAE;AACLC,IAAAA,SAAS,EAAEA,MAAM,CAAC,CAAC;AACnBY,IAAAA,QAAQ,EAAEA,MAAM,CAAC,CAAC;AAClBE,IAAAA,SAAS,EAAEA,MAAM,CAAC,CAAC;IACnBe,UAAU,EAAEA,MAAM,CAAC;AACrB;AACF,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AAlWalE,eAAe,CAmWnBjZ,MAAM,GAAGG,MAAM,CAACyH,MAAM,qBACL;AACpBxH,EAAAA,UAAU,EAAE;AACVyc,IAAAA,SAAS,EAAE;AAAEld,MAAAA,IAAI,EAAE;KAAU;AAC7B0d,IAAAA,SAAS,EAAE;AAAE1d,MAAAA,IAAI,EAAE;KAAU;AAC7B4a,IAAAA,gBAAgB,EAAE;AAAE5a,MAAAA,IAAI,EAAE;KAAU;AACpCua,IAAAA,gBAAgB,EAAE;AAAEva,MAAAA,IAAI,EAAE;KAAU;AACpCqa,IAAAA,kBAAkB,EAAE;AAAEra,MAAAA,IAAI,EAAE;KAAU;AACtCyZ,IAAAA,iBAAiB,EAAE;AAAEzZ,MAAAA,IAAI,EAAE;KAAU;AACrC0b,IAAAA,KAAK,EAAE;AAAE1b,MAAAA,IAAI,EAAE;AAAS;AAC1B;AACF,CACF,CAAC;;ACpXH;AACA;AACA;AACO,MAAMme,WAAW,SAASnf,qBAAqB,CAAC;AACrD;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACtB,KAAK,EAAEiD,MAAM,GAAG,EAAE,EAAE;AAAA,IAAA,IAAAkf,qBAAA;AAC9B,IAAA,KAAK,CAACniB,KAAK,EAAEiD,MAAM,CAAC;AAEpB,IAAA,MAAMmf,UAAU,GAAG,IAAI,CAACpiB,KAAK,CAACiI,aAAa,CACzC,CAAA,CAAA,EAAI,IAAI,CAAChF,MAAM,CAACof,QAAQ,YAC1B,CAAC;AAED,IAAA,MAAMC,WAAW,8CAAG,CAAAH,qBAAA,GAClB,IAAI,CAAClf,MAAM,CAACsf,UAAU,CAACnP,KAAK,KAAA,IAAA,GAAA+O,qBAAA,GAC1B,IAAI,CAACniB,KAAK,CAACiG,gBAAgB,CAAC,IAAI,CAAChD,MAAM,CAACsf,UAAU,CAACzX,QAAQ,CAC9D;AAED,IAAA,IACE,CAACsX,UAAU,IACX,EAAEA,UAAU,YAAYliB,WAAW,CAAC,IACpC,CAACoiB,WAAW,CAACre,MAAM,EACnB;AACA,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAACue,WAAW,CAAC,IAAI,CAACvf,MAAM,CAACof,QAAQ,CAAC;IAEtC,IAAI,CAACI,aAAa,GAAG,IAAI,CAACC,OAAO,CAACza,aAAa,CAAC,OAAO,CAAC;AACxD,IAAA,IAAI,CAACwa,aAAa,CAAC7b,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC+b,aAAa,CAAC7b,IAAI,CAAC,IAAI,CAAC,CAAC;IAE3E,IAAI,CAACsb,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACA,UAAU,CAACjZ,MAAM,CAAC,IAAI,CAACuZ,OAAO,CAAC;IAEpC,IAAI,CAACJ,WAAW,GAAG1hB,KAAK,CAACyF,IAAI,CAACic,WAAW,CAAC;IAC1C,IAAI,CAACA,WAAW,CAACrb,OAAO,CAAEe,MAAM,IAC9BA,MAAM,CAACpB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACgc,eAAe,CAAC9b,IAAI,CAAC,IAAI,CAAC,CAClE,CAAC;AAED,IAAA,IAAI,CAACyC,OAAO,GAAGtG,MAAM,CAACsG,OAAO,IAAI,KAAK;AACxC,EAAA;AAEAiZ,EAAAA,WAAWA,CAACH,QAAQ,GAAG,EAAE,EAAE;AACzB,IAAA,MAAM7Z,EAAE,GAAG,CAAA,EAAG6Z,QAAQ,CAAA,cAAA,CAAgB;AAEtC,IAAA,MAAMK,OAAO,GAAGpiB,QAAQ,CAAC0I,aAAa,CAAC,KAAK,CAAC;AAC7C,IAAA,MAAML,MAAM,GAAGrI,QAAQ,CAAC0I,aAAa,CAAC,OAAO,CAAC;AAC9C,IAAA,MAAMhB,MAAM,GAAG1H,QAAQ,CAAC0I,aAAa,CAAC,OAAO,CAAC;AAC9C,IAAA,MAAM6Z,KAAK,GAAGviB,QAAQ,CAAC0I,aAAa,CAAC,MAAM,CAAC;IAE5C0Z,OAAO,CAACliB,SAAS,CAACyI,GAAG,CACnB,wBAAwB,EACxB,yBAAyB,EACzB,4BACF,CAAC;IAEDjB,MAAM,CAACQ,EAAE,GAAGA,EAAE;IACdR,MAAM,CAACjE,IAAI,GAAG,UAAU;AACxBiE,IAAAA,MAAM,CAACxH,SAAS,CAACyI,GAAG,CAAC,yBAAyB,CAAC;AAE/CN,IAAAA,MAAM,CAAChG,YAAY,CAAC,KAAK,EAAE6F,EAAE,CAAC;IAC9BG,MAAM,CAACnI,SAAS,CAACyI,GAAG,CAClB,aAAa,EACb,yBAAyB,EACzB,gCACF,CAAC;AAED4Z,IAAAA,KAAK,CAACriB,SAAS,CAACyI,GAAG,CAAC,uBAAuB,CAAC;IAC5C4Z,KAAK,CAAC3Z,WAAW,GAAG,YAAY;AAEhCP,IAAAA,MAAM,CAACQ,MAAM,CAAC0Z,KAAK,CAAC;AACpBH,IAAAA,OAAO,CAACvZ,MAAM,CAACnB,MAAM,EAAEW,MAAM,CAAC;IAE9B,IAAI,CAAC+Z,OAAO,GAAGA,OAAO;AACxB,EAAA;AAEAC,EAAAA,aAAaA,GAAG;IACd,IAAI,IAAI,CAACpZ,OAAO,EAAE;MAChB,IAAI,CAACuZ,UAAU,EAAE;AACjB,MAAA,IAAI,CAACL,aAAa,CAAClZ,OAAO,GAAG,KAAK;AACpC,IAAA,CAAC,MAAM;MACL,IAAI,CAACwZ,QAAQ,EAAE;AACf,MAAA,IAAI,CAACN,aAAa,CAAClZ,OAAO,GAAG,IAAI;AACnC,IAAA;AACF,EAAA;AAEAwZ,EAAAA,QAAQA,GAAG;AACT,IAAA,IAAI,CAACT,WAAW,CAACrb,OAAO,CAAEe,MAAM,IAAK;MACnCA,MAAM,CAACuB,OAAO,GAAG,IAAI;AACvB,IAAA,CAAC,CAAC;IAEF,IAAI,CAACA,OAAO,GAAG,IAAI;AACrB,EAAA;AAEAuZ,EAAAA,UAAUA,GAAG;AACX,IAAA,IAAI,CAACR,WAAW,CAACrb,OAAO,CAAEe,MAAM,IAAK;MACnCA,MAAM,CAACuB,OAAO,GAAG,KAAK;AACxB,IAAA,CAAC,CAAC;IAEF,IAAI,CAACA,OAAO,GAAG,KAAK;AACtB,EAAA;;AAEA;AACF;AACA;EACEqZ,eAAeA,CAACxb,KAAK,EAAE;AACrB,IAAA,IAAI,EAAEA,KAAK,CAACC,MAAM,YAAYa,gBAAgB,CAAC,EAAE;AAC/C,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAACd,KAAK,CAACC,MAAM,CAACkC,OAAO,EAAE;AACzB,MAAA,IAAI,CAACkZ,aAAa,CAAClZ,OAAO,GAAG,KAAK;MAClC,IAAI,CAACA,OAAO,GAAG,KAAK;AACtB,IAAA,CAAC,MAAM;MACL,IACE,IAAI,CAAC+Y,WAAW,CAAC9b,MAAM,CAAEwB,MAAM,IAAKA,MAAM,CAACuB,OAAO,CAAC,CAACtF,MAAM,KAC1D,IAAI,CAACqe,WAAW,CAACre,MAAM,EACvB;AACA,QAAA,IAAI,CAACwe,aAAa,CAAClZ,OAAO,GAAG,IAAI;QACjC,IAAI,CAACA,OAAO,GAAG,IAAI;AACrB,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AA6BA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAzKa2Y,WAAW,CA8HfjiB,UAAU,GAAG,kBAAkB;AAEtC;AACF;AACA;AACA;AACA;AApIaiiB,WAAW,CAqIf/e,QAAQ,GAAGoB,MAAM,CAACyH,MAAM,CAAC;AAC9BqW,EAAAA,QAAQ,EAAE,EAAE;AACZE,EAAAA,UAAU,EAAE;AACVzX,IAAAA,QAAQ,EAAE;AACZ;AACF,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AAhJaoX,WAAW,CAiJf9d,MAAM,GAAGG,MAAM,CAACyH,MAAM,qBACL;AACpBxH,EAAAA,UAAU,EAAE;AACV6d,IAAAA,QAAQ,EAAE;AAAEte,MAAAA,IAAI,EAAE;KAAU;AAC5BwF,IAAAA,OAAO,EAAE;AAAExF,MAAAA,IAAI,EAAE;KAAW;AAC5Bwe,IAAAA,UAAU,EAAE;AAAExe,MAAAA,IAAI,EAAE;AAAS;AAC/B;AACF,CACF,CAAC;;AC5JI,MAAMif,cAAc,SAAS9hB,SAAS,CAAC;AAC5C;AACF;AACA;EACEI,WAAWA,CAACtB,KAAK,EAAE;IACjB,KAAK,CAACA,KAAK,CAAC;IAEZ,MAAMgI,MAAM,GAAG,IAAI,CAAChI,KAAK,CAACiI,aAAa,CAAC,cAAc,CAAC;IACvD,IAAI,CAACD,MAAM,IAAI,EAAEA,MAAM,YAAYE,gBAAgB,CAAC,EAAE;AACpD,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAACF,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACA,MAAM,CAACrF,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC;IAE/C,IAAI,CAACsgB,YAAY,EAAE;AACrB,EAAA;AAEAA,EAAAA,YAAYA,GAAG;IACb,IAAI,CAACC,MAAM,GAAG5iB,QAAQ,CAAC0I,aAAa,CAAC,KAAK,CAAC;IAC3C,IAAI,CAAC9B,OAAO,GAAG5G,QAAQ,CAAC0I,aAAa,CAAC,QAAQ,CAAC;IAE/C,IAAI,CAAC9B,OAAO,CAACvE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IAE3C,IAAI,CAAC3C,KAAK,CAACQ,SAAS,CAACyI,GAAG,CAAC,qBAAqB,CAAC;IAC/C,IAAI,CAACia,MAAM,CAAC1iB,SAAS,CAACyI,GAAG,CAAC,8BAA8B,CAAC;AACzD,IAAA,IAAI,CAAC/B,OAAO,CAAC1G,SAAS,CAACyI,GAAG,CACxB,cAAc,EACd,yBAAyB,EACzB,6BACF,CAAC;AAED,IAAA,IAAI,CAAC/B,OAAO,CAACsE,SAAS,GACpB,0DAA0D;AAE5D,IAAA,IAAI,CAACtE,OAAO,CAACN,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC+b,aAAa,CAAC7b,IAAI,CAAC,IAAI,CAAC,CAAC;AAErE,IAAA,IAAI,CAACoc,MAAM,CAAC/Z,MAAM,CAAC,IAAI,CAACnB,MAAM,EAAE,IAAI,CAACd,OAAO,CAAC;IAC7C,IAAI,CAAClH,KAAK,CAACmJ,MAAM,CAAC,IAAI,CAAC+Z,MAAM,CAAC;AAChC,EAAA;AAEAP,EAAAA,aAAaA,GAAG;AACd,IAAA,IAAI,IAAI,CAAC3a,MAAM,CAACjE,IAAI,KAAK,UAAU,EAAE;AACnC,MAAA,IAAI,CAACiE,MAAM,CAACjE,IAAI,GAAG,MAAM;AACzB,MAAA,IAAI,CAACmD,OAAO,CAACsE,SAAS,GACpB,0DAA0D;AAC9D,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAACxD,MAAM,CAACjE,IAAI,GAAG,UAAU;AAC7B,MAAA,IAAI,CAACmD,OAAO,CAACsE,SAAS,GACpB,0DAA0D;AAC9D,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AAEA;AAzDawX,cAAc,CAwDlB/iB,UAAU,GAAG,qBAAqB;;ACxD3C;AACA;AACA;AACO,MAAMkjB,cAAc,SAASpgB,qBAAqB,CAAC;AACxD;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACtB,KAAK,EAAEiD,MAAM,GAAG,EAAE,EAAE;AAC9B,IAAA,KAAK,CAACjD,KAAK,EAAEiD,MAAM,CAAC;AAEpB,IAAA,IAAI,CAACkgB,cAAc,CAAC/iB,WAAW,EAAE,EAAE;AACjC,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,MAAMgjB,SAAS,GAAG,IAAI,CAACpjB,KAAK,CAACiI,aAAa,CAAC,iBAAiB,CAAC;IAC7D,IAAI,CAACmb,SAAS,IAAI,EAAEA,SAAS,YAAY9Z,mBAAmB,CAAC,EAAE;AAC7D,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAAC8Z,SAAS,GAAGA,SAAS;IAE1B,IAAI,CAACC,aAAa,EAAE;IACpB,IAAI,CAACC,WAAW,EAAE;IAClB,IAAI,CAACC,gBAAgB,EAAE;IAEvB,IAAI,CAAChe,IAAI,GAAG;AACVie,MAAAA,IAAI,EAAE,EAAE;AACR9M,MAAAA,KAAK,EAAE,EAAE;AACT+M,MAAAA,EAAE,EAAE,EAAE;AACNC,MAAAA,IAAI,EAAE;KACP;AAED,IAAA,IAAI,CAACC,QAAQ,CAAC/c,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACgd,aAAa,CAAC9c,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtE,IAAI,CAAC9G,KAAK,CACPiI,aAAa,CAAC,OAAO,CAAC,CACtBrB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACid,YAAY,CAAC/c,IAAI,CAAC,IAAI,CAAC,CAAC;AAE1D,IAAA,IAAI,CAACgd,QAAQ,CAACld,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAACmd,gBAAgB,CAACjd,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7E,EAAA;;AAEA;AACF;AACA;EACEid,gBAAgBA,CAAC3c,KAAK,EAAE;AACtB,IAAA,IAAI4c,gBAAgB;IACpB,QAAQ5c,KAAK,CAAC6c,OAAO;AACnB,MAAA,KAAK,IAAI,CAAC1e,IAAI,CAACmR,KAAK;AACpB,MAAA,KAAK,IAAI,CAACnR,IAAI,CAACme,IAAI;AAAE,QAAA;AACnBM,UAAAA,gBAAgB,GAAG,IAAI,CAAChd,QAAQ,CAACsa,IAAI,CAClC4C,MAAM,IAAKA,MAAM,CAAC3b,YAAY,CAAC,UAAU,CAAC,KAAK,GAClD,CAAC;AAED,UAAA,IAAIyb,gBAAgB,EAAE;AACpB,YAAA,MAAMG,WAAW,GAAGH,gBAAgB,CAACjY,kBAAkB;AAEvD,YAAA,IAAIoY,WAAW,IAAIA,WAAW,YAAYhd,iBAAiB,EAAE;cAC3Dgd,WAAW,CAAChc,KAAK,EAAE;AACnB6b,cAAAA,gBAAgB,CAACrhB,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;AAC/CwhB,cAAAA,WAAW,CAACxhB,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;AAC3C,YAAA;AACF,UAAA;AAEA,UAAA;AACF,QAAA;AAEA,MAAA,KAAK,IAAI,CAAC4C,IAAI,CAACie,IAAI;AACnB,MAAA,KAAK,IAAI,CAACje,IAAI,CAACke,EAAE;AAAE,QAAA;AACjBO,UAAAA,gBAAgB,GAAG,IAAI,CAAChd,QAAQ,CAACsa,IAAI,CAClC4C,MAAM,IAAKA,MAAM,CAAC3b,YAAY,CAAC,UAAU,CAAC,KAAK,GAClD,CAAC;AAED,UAAA,IAAIyb,gBAAgB,EAAE;AACpB,YAAA,MAAMI,eAAe,GAAGJ,gBAAgB,CAAChZ,sBAAsB;AAE/D,YAAA,IAAIoZ,eAAe,IAAIA,eAAe,YAAYjd,iBAAiB,EAAE;cACnEid,eAAe,CAACjc,KAAK,EAAE;AACvB6b,cAAAA,gBAAgB,CAACrhB,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;AAC/CyhB,cAAAA,eAAe,CAACzhB,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;AAC/C,YAAA;AACF,UAAA;AAEA,UAAA;AACF,QAAA;AACF;AACF,EAAA;AAEA0hB,EAAAA,cAAcA,GAAG;IACf,IAAIhS,IAAI,GAAG,EAAE;AAEbA,IAAAA,IAAI,IAAI,4DAA4D;AAEpE,IAAA,IAAI,IAAI,CAACpP,MAAM,CAACqhB,OAAO,CAACC,IAAI,EAAE;AAC5BlS,MAAAA,IAAI,IACF,4LAA4L;AAChM,IAAA;AAEA,IAAA,IAAI,IAAI,CAACpP,MAAM,CAACqhB,OAAO,CAACE,MAAM,EAAE;AAC9BnS,MAAAA,IAAI,IACF,kMAAkM;AACtM,IAAA;AAEA,IAAA,IAAI,IAAI,CAACpP,MAAM,CAACqhB,OAAO,CAACG,SAAS,EAAE;AACjCpS,MAAAA,IAAI,IACF,2MAA2M;AAC/M,IAAA;AAEA,IAAA,IAAI,IAAI,CAACpP,MAAM,CAACqhB,OAAO,CAACI,OAAO,EAAE;AAC/BrS,MAAAA,IAAI,IACF,+NAA+N;AACnO,IAAA;AAEA,IAAA,IAAI,IAAI,CAACpP,MAAM,CAACqhB,OAAO,CAACK,OAAO,EAAE;AAC/BtS,MAAAA,IAAI,IACF,yNAAyN;AAC7N,IAAA;AAEAA,IAAAA,IAAI,IAAI,QAAQ;AAChB,IAAA,OAAOA,IAAI;AACb,EAAA;AAEAuS,EAAAA,eAAeA,GAAG;AAChB,IAAA,OAAO,GAAG,IAAI,CAACP,cAAc,EAAE,CAAA,0GAAA,CAA4G;AAC7I,EAAA;AAEAf,EAAAA,WAAWA,GAAG;IACZ,IAAI,CAACF,SAAS,CAAC5iB,SAAS,CAACyI,GAAG,CAAC,uBAAuB,CAAC;IACrD,IAAI,CAACma,SAAS,CAACzgB,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;IAClD,IAAI,CAACygB,SAAS,CAACzgB,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;AAC/C,EAAA;AAEA0gB,EAAAA,aAAaA,GAAG;IACd,IAAI,CAACS,QAAQ,GAAGxjB,QAAQ,CAAC0I,aAAa,CAAC,KAAK,CAAC;AAC7C,IAAA,IAAI,CAAC8a,QAAQ,CAAC3X,SAAS,GAAG,sBAAsB;IAChD,IAAI,CAAC2X,QAAQ,CAACtY,SAAS,GAAG,IAAI,CAACoZ,eAAe,EAAE;IAChD,IAAI,CAAC5kB,KAAK,CAACmJ,MAAM,CAAC,IAAI,CAAC2a,QAAQ,CAAC;IAEhC,IAAI,CAACH,QAAQ;AACX,IAAA,IAAI,CAAC3jB,KAAK,CAACiI,aAAa,CAAC,gCAAgC,CAC1D;IAED,IAAI,CAAC0b,QAAQ,CAACnY,SAAS,GAAG,IAAI,CAAC4X,SAAS,CAAC3f,KAAK;AAChD,EAAA;AAEA8f,EAAAA,gBAAgBA,GAAG;AACjB,IAAA,IAAI,CAACvc,QAAQ,GAAGpG,KAAK,CAACyF,IAAI;AAEvB,IAAA,IAAI,CAACrG,KAAK,CAACiG,gBAAgB,CAAC,uCAAuC,CACtE,CAAC;IAED,IAAI,CAACe,QAAQ,CAACC,OAAO,CAAC,CAACC,OAAO,EAAErB,KAAK,KAAK;MACxCqB,OAAO,CAACvE,YAAY,CAAC,UAAU,EAAE,CAACkD,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;AACrDqB,MAAAA,OAAO,CAACN,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC+b,aAAa,CAAC7b,IAAI,CAAC,IAAI,CAAC,CAAC;AAClE,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;EACE6b,aAAaA,CAACvb,KAAK,EAAE;AACnB,IAAA,IAAI,EAAEA,KAAK,CAACyd,aAAa,YAAY3kB,WAAW,CAAC,EAAE;AACjD,MAAA;AACF,IAAA;AAEAI,IAAAA,QAAQ,CAACwkB,WAAW,CAClB1d,KAAK,CAACyd,aAAa,CAACtc,YAAY,CAAC,cAAc,CAAC,EAChD,KAAK,EACLiZ,SACF,CAAC;AACH,EAAA;AAEAuD,EAAAA,UAAUA,GAAG;AACX,IAAA,OAAO,IAAI,CAACpB,QAAQ,CAACnY,SAAS;AAChC,EAAA;AAEAoY,EAAAA,aAAaA,GAAG;IACd,IAAI,CAACoB,cAAc,EAAE;AACvB,EAAA;AAEAA,EAAAA,cAAcA,GAAG;IACf1kB,QAAQ,CAACwkB,WAAW,CAAC,2BAA2B,EAAE,KAAK,EAAE,GAAG,CAAC;IAC7D,IAAI,CAAC1B,SAAS,CAAC3f,KAAK,GAAG,IAAI,CAACshB,UAAU,EAAE;AAC1C,EAAA;;AAEA;AACF;AACA;EACElB,YAAYA,CAACzc,KAAK,EAAE;IAClBA,KAAK,CAACuG,cAAc,EAAE;AACtB,IAAA,IAAI,CAACgW,QAAQ,CAACxb,KAAK,EAAE;AACvB,EAAA;EAEA,OAAO/H,WAAWA,GAAG;AACnB,IAAA,OAAO,iBAAiB,IAAIE,QAAQ,CAAC2kB,eAAe;AACtD,EAAA;;AAEA;AACF;AACA;AA8BA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAxPa9B,cAAc,CAqMlBljB,UAAU,GAAG,sBAAsB;AAE1C;AACF;AACA;AACA;AACA;AA3MakjB,cAAc,CA4MlBhgB,QAAQ,GAAGoB,MAAM,CAACyH,MAAM,CAAC;AAC9BsY,EAAAA,OAAO,EAAE;AACPC,IAAAA,IAAI,EAAE,KAAK;AACXC,IAAAA,MAAM,EAAE,KAAK;AACbC,IAAAA,SAAS,EAAE,KAAK;AAChBC,IAAAA,OAAO,EAAE,IAAI;AACbC,IAAAA,OAAO,EAAE;AACX;AACF,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AA1NaxB,cAAc,CA2NlB/e,MAAM,GAAGG,MAAM,CAACyH,MAAM,qBACL;AACpBxH,EAAAA,UAAU,EAAE;AACV8f,IAAAA,OAAO,EAAE;AAAEvgB,MAAAA,IAAI,EAAE;AAAS;AAC5B;AACF,CACF,CAAC;;ACpOH;AACA;AACA;AACO,MAAMmhB,YAAY,SAASniB,qBAAqB,CAAC;AACtD;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACtB,KAAK,EAAEiD,MAAM,GAAG,EAAE,EAAE;IAAA,IAAAkiB,qBAAA,EAAAhM,qBAAA;AAC9B,IAAA,KAAK,CAACnZ,KAAK,EAAEiD,MAAM,CAAC;IAEpB,MAAMmiB,gBAAgB,GAAA,CAAAD,qBAAA,GACpB,IAAI,CAACliB,MAAM,CAACoiB,eAAe,CAACnjB,OAAO,KAAA,IAAA,GAAAijB,qBAAA,GACnC,IAAI,CAACnlB,KAAK,CAACiI,aAAa,CAAC,IAAI,CAAChF,MAAM,CAACoiB,eAAe,CAACva,QAAQ,CAAC;IAEhE,MAAMuO,sBAAsB,GAAA,CAAAF,qBAAA,GAC1B,IAAI,CAAClW,MAAM,CAACqW,qBAAqB,CAACpX,OAAO,KAAA,IAAA,GAAAiX,qBAAA,GACzC,IAAI,CAACnZ,KAAK,CAACiI,aAAa,CAAC,IAAI,CAAChF,MAAM,CAACqW,qBAAqB,CAACxO,QAAQ,CAAC;AAEtE,IAAA,IACE,CAACsa,gBAAgB,IACjB,CAAC/L,sBAAsB,IACvB,EAAE+L,gBAAgB,YAAYllB,WAAW,CAAC,IAC1C,EAAEmZ,sBAAsB,YAAYnZ,WAAW,CAAC,EAChD;AACA,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAACklB,gBAAgB,GAAGA,gBAAgB;IACxC,IAAI,CAAC/L,sBAAsB,GAAGA,sBAAsB;IAEpD,MAAMiM,GAAG,GACP,6pCAA6pC;IAE/pC,IAAI,CAAC7C,aAAa,GAAGniB,QAAQ,CAAC0I,aAAa,CAAC,QAAQ,CAAC;IACrD,IAAI,CAACyZ,aAAa,CAAC9f,YAAY,CAAC,OAAO,EAAE,2BAA2B,CAAC;IACrE,IAAI,CAAC8f,aAAa,CAAC9f,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IACjD,IAAI,CAAC8f,aAAa,CAAC9f,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;IACxD,IAAI,CAAC8f,aAAa,CAAC9f,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AACzD,IAAA,IAAI,CAAC8f,aAAa,CAACjX,SAAS,GAAG,CAAA,EAAG,IAAI,CAACvI,MAAM,CAACkX,YAAY,CAACW,IAAI,CAAA,CAAA,EAAIwK,GAAG,CAAA,CAAE;AAExE,IAAA,IAAI,CAAC7C,aAAa,CAAC7b,gBAAgB,CACjC,OAAO,EACP,IAAI,CAAC2e,mBAAmB,CAACze,IAAI,CAAC,IAAI,CACpC,CAAC;IAED,IAAI,CAACuS,sBAAsB,CAAClQ,MAAM,CAAC,IAAI,CAACsZ,aAAa,CAAC;AAEtDniB,IAAAA,QAAQ,CAACsG,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC4e,eAAe,CAAC1e,IAAI,CAAC,IAAI,CAAC,CAAC;AACnExG,IAAAA,QAAQ,CAACsG,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC4e,eAAe,CAAC1e,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,EAAA;AAEA2T,EAAAA,QAAQA,GAAG;IACT,IAAI,CAACgI,aAAa,CAAC9f,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC;IACxD,IAAI,CAACyiB,gBAAgB,CAAC5kB,SAAS,CAACgJ,MAAM,CAAC,eAAe,CAAC;IACvD,IAAI,CAAC4b,gBAAgB,CAACnd,aAAa,CAAC,OAAO,CAAC,CAACE,KAAK,EAAE;AACtD,EAAA;AAEAyR,EAAAA,QAAQA,GAAG;IACT,IAAI,CAACwL,gBAAgB,CAAC5kB,SAAS,CAACyI,GAAG,CAAC,eAAe,CAAC;IACpD,IAAI,CAACwZ,aAAa,CAAC9f,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC;AAC3D,EAAA;AAEA4iB,EAAAA,mBAAmBA,GAAG;IACpB,IAAI,IAAI,CAAC9C,aAAa,CAACla,YAAY,CAAC,eAAe,CAAC,KAAK,OAAO,EAAE;MAChE,IAAI,CAACkS,QAAQ,EAAE;AACjB,IAAA,CAAC,MAAM;MACL,IAAI,CAACb,QAAQ,EAAE;AACjB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACE4L,eAAeA,CAACpe,KAAK,EAAE;AACrB,IAAA,IACEA,KAAK,CAACC,MAAM,YAAYqE,IAAI,IAC5B,CAAC,IAAI,CAAC2N,sBAAsB,CAAC5Y,QAAQ,CAAC2G,KAAK,CAACC,MAAM,CAAC,IACnD,CAAC,IAAI,CAAC+d,gBAAgB,CAAC3kB,QAAQ,CAAC2G,KAAK,CAACC,MAAM,CAAC,EAC7C;MACA,IAAI,CAACuS,QAAQ,EAAE;AACjB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AAkCA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AArIasL,YAAY,CAoFhBjlB,UAAU,GAAG,mBAAmB;AAEvC;AACF;AACA;AACA;AACA;AA1FailB,YAAY,CA2FhB/hB,QAAQ,GAAGoB,MAAM,CAACyH,MAAM,CAAC;AAC9BqZ,EAAAA,eAAe,EAAE;AACfva,IAAAA,QAAQ,EAAE;GACX;AACDqP,EAAAA,YAAY,EAAE;AACZW,IAAAA,IAAI,EAAE;GACP;AACDxB,EAAAA,qBAAqB,EAAE;AACrBxO,IAAAA,QAAQ,EAAE;AACZ;AACF,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AA3Gaoa,YAAY,CA4GhB9gB,MAAM,GAAGG,MAAM,CAACyH,MAAM,qBACL;AACpBxH,EAAAA,UAAU,EAAE;AACV6gB,IAAAA,eAAe,EAAE;AAAEthB,MAAAA,IAAI,EAAE;KAAU;AACnCoW,IAAAA,YAAY,EAAE;AAAEpW,MAAAA,IAAI,EAAE;KAAU;AAChCuV,IAAAA,qBAAqB,EAAE;AAAEvV,MAAAA,IAAI,EAAE;AAAS;AAC1C;AACF,CACF,CAAC;;ACvHH;AACA;AACA;AACO,MAAM0hB,aAAa,SAAS1iB,qBAAqB,CAAC;AACvD;AACF;AACA;AACA;AACEzB,EAAAA,WAAWA,CAACtB,KAAK,EAAEiD,MAAM,GAAG,EAAE,EAAE;AAC9B,IAAA,KAAK,CAACjD,KAAK,EAAEiD,MAAM,CAAC;IAEpB,MAAMyiB,KAAK,GAAG1lB,KAAK,IAAA,IAAA,GAAA,MAAA,GAALA,KAAK,CAAEiI,aAAa,CAAC,OAAO,CAAC;IAC3C,MAAM0d,KAAK,GAAG3lB,KAAK,IAAA,IAAA,GAAA,MAAA,GAALA,KAAK,CAAEiI,aAAa,CAAC,OAAO,CAAC;AAE3C,IAAA,IAAI,CAACyd,KAAK,IAAI,CAACC,KAAK,EAAE;AACpB,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAACD,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,QAAQ,GAAG,IAAI,CAAC5lB,KAAK,CAACiI,aAAa,CAAC,SAAS,CAAC;IAEnD,IAAI,CAAC4d,QAAQ,GAAG,CAAA;AACpB;AACA,MAAA,CAAO;IACH,IAAI,CAACC,UAAU,GAAG,CAAA;AACtB;AACA,MAAA,CAAO;IACH,IAAI,CAACC,YAAY,GAAG,CAAA;AACxB;AACA;AACA,MAAA,CAAO;IAEH,IAAI,CAACC,SAAS,GAAG,IAAI,CAACN,KAAK,GACvB9kB,KAAK,CAACyF,IAAI,CAAC,IAAI,CAACqf,KAAK,CAACzf,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAC7C,EAAE;IAEN,IAAI,CAACggB,oBAAoB,EAAE;IAC3B,IAAI,CAACC,aAAa,EAAE;IACpB,IAAI,CAACC,yBAAyB,EAAE;IAChC,IAAI,CAACC,eAAe,EAAE;IACtB,IAAI,CAACC,sBAAsB,EAAE;AAE7B,IAAA,IAAI,CAACX,KAAK,CAAC9e,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC0f,iBAAiB,CAACxf,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,EAAA;AAEAmf,EAAAA,oBAAoBA,GAAG;AACrB,IAAA,KAAK,MAAMvc,QAAQ,IAAI,IAAI,CAACsc,SAAS,EAAE;AACrC,MAAA,IAAItc,QAAQ,CAACvJ,YAAY,CAAC,WAAW,CAAC,EAAE;AACtC,QAAA,IAAI,CAAComB,mBAAmB,CAAC7c,QAAQ,CAAC;AACpC,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACE6c,mBAAmBA,CAAC7c,QAAQ,EAAE;IAC5B,MAAM7D,KAAK,GAAG,IAAI,CAACmgB,SAAS,CAACzX,OAAO,CAAC7E,QAAQ,CAAC;AAC9C,IAAA,MAAMxC,OAAO,GAAG5G,QAAQ,CAAC0I,aAAa,CAAC,QAAQ,CAAC;AAEhD9B,IAAAA,OAAO,CAACvE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IACtCuE,OAAO,CAACvE,YAAY,CAAC,YAAY,EAAE,CAAA,EAAGkD,KAAK,EAAE,CAAC;AAC9CqB,IAAAA,OAAO,CAACgC,WAAW,GAAGQ,QAAQ,CAACR,WAAW;IAE1CQ,QAAQ,CAACR,WAAW,GAAG,EAAE;AACzBQ,IAAAA,QAAQ,CAACwD,WAAW,CAAChG,OAAO,CAAC;AAC/B,EAAA;AAEAkf,EAAAA,eAAeA,GAAG;IAChB,IAAI,CAAC1H,OAAO,GAAGpe,QAAQ,CAAC0I,aAAa,CAAC,KAAK,CAAC;IAE5C,IAAI,CAAC0V,OAAO,CAAC/b,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;IAChD,IAAI,CAAC+b,OAAO,CAAC/b,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChD,IAAI,CAAC+b,OAAO,CAAC/b,YAAY,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC3D,IAAI,CAAC+b,OAAO,CAAC/b,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IAE3C,IAAI,CAAC3C,KAAK,CAAC8P,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC4O,OAAO,CAAC;AAC5D,EAAA;AAEA2H,EAAAA,sBAAsBA,GAAG;AAAA,IAAA,IAAAG,qBAAA;AACvB,IAAA,MAAMpF,KAAK,GAAG,IAAI,CAACqF,iBAAiB,EAAE;IAEtC,MAAM/c,QAAQ,GAAG,IAAI,CAAC1J,KAAK,CAACiI,aAAa,CACvC,uDACF,CAAC;IACD,MAAMye,WAAW,GAAGhd,QAAQ,IAAA,IAAA,GAAA,MAAA,GAARA,QAAQ,CAAEzB,aAAa,CAAC,QAAQ,CAAC;IACrD,MAAM0e,aAAa,GAAGjd,QAAQ,IAAA,IAAA,GAAA,MAAA,GAARA,QAAQ,CAAEnB,YAAY,CAAC,WAAW,CAAC;IAEzD,MAAMqe,YAAY,GAAGziB,MAAM,CAAC0iB,QAAQ,CAAA,CAAAL,qBAAA,GAClCE,WAAW,IAAA,IAAA,GAAA,MAAA,GAAXA,WAAW,CAAEne,YAAY,CAAC,YAAY,CAAC,KAAA,IAAA,GAAAie,qBAAA,GAAI,GAAG,EAC9C,EACF,CAAC;AAED,IAAA,IACE,CAAC9c,QAAQ,IACT,CAACgd,WAAW,IACZ,EAAEC,aAAa,KAAK,WAAW,IAAIA,aAAa,KAAK,YAAY,CAAC,EAClE;AACA,MAAA;AACF,IAAA;IAEA,MAAMG,WAAW,GAAG,IAAI,CAACC,IAAI,CAAC3F,KAAK,EAAEwF,YAAY,EAAED,aAAa,CAAC;AACjE,IAAA,IAAI,CAACK,OAAO,CAACF,WAAW,CAAC;AAC3B,EAAA;;AAEA;AACF;AACA;EACER,iBAAiBA,CAAClf,KAAK,EAAE;AAAA,IAAA,IAAA6f,qBAAA;AACvB,IAAA,MAAMC,OAAO,6BAA+B9f,KAAK,CAACC,MAAO;AACzD,IAAA,MAAMH,OAAO,GAAGggB,OAAO,CAACre,OAAO,CAAC,QAAQ,CAAC;AAEzC,IAAA,IACE,CAAC3B,OAAO,IACR,EAAEA,OAAO,YAAYC,iBAAiB,CAAC,IACvC,CAACD,OAAO,CAAC0B,aAAa,EACtB;AACA,MAAA;AACF,IAAA;AAEA,IAAA,MAAMc,QAAQ,GAAGxC,OAAO,CAAC0B,aAAa;AACtC,IAAA,MAAM+d,aAAa,GAAGjd,QAAQ,CAACnB,YAAY,CAAC,WAAW,CAAC;IAExD,MAAMqe,YAAY,GAAGziB,MAAM,CAAC0iB,QAAQ,CAAA,CAAAI,qBAAA,GAClC/f,OAAO,IAAA,IAAA,GAAA,MAAA,GAAPA,OAAO,CAAEqB,YAAY,CAAC,YAAY,CAAC,KAAA,IAAA,GAAA0e,qBAAA,GAAI,GAAG,EAC1C,EACF,CAAC;AAED,IAAA,MAAME,gBAAgB,GACpBR,aAAa,KAAK,MAAM,IAAIA,aAAa,KAAK,YAAY,GACtD,WAAW,GACX,YAAY;AAElB,IAAA,MAAMvF,KAAK,GAAG,IAAI,CAACqF,iBAAiB,EAAE;IACtC,MAAMK,WAAW,GAAG,IAAI,CAACC,IAAI,CAAC3F,KAAK,EAAEwF,YAAY,EAAEO,gBAAgB,CAAC;AAEpE,IAAA,IAAI,CAACH,OAAO,CAACF,WAAW,CAAC;IACzB,IAAI,CAACM,kBAAkB,EAAE;AACzB,IAAA,IAAI,CAACC,iBAAiB,CAACngB,OAAO,EAAEigB,gBAAgB,CAAC;IACjD,IAAI,CAAChB,yBAAyB,EAAE;AAClC,EAAA;AAEAD,EAAAA,aAAaA,GAAG;AACd,IAAA,IAAI,CAAC,IAAI,CAACN,QAAQ,EAAE;AAClB,MAAA;AACF,IAAA;IAEA,IAAI0B,aAAa,GAAG,IAAI,CAAC1B,QAAQ,CAAC3d,aAAa,CAAC,wBAAwB,CAAC;AACzE,IAAA,IAAIqf,aAAa,EAAE;AACjB,MAAA;AACF,IAAA;AAEAA,IAAAA,aAAa,GAAGhnB,QAAQ,CAAC0I,aAAa,CAAC,MAAM,CAAC;AAC9Cse,IAAAA,aAAa,CAAC9mB,SAAS,CAACyI,GAAG,CAAC,uBAAuB,CAAC;IACpDqe,aAAa,CAACpe,WAAW,GAAG,8CAA8C;AAE1E,IAAA,IAAI,CAAC0c,QAAQ,CAAC1Y,WAAW,CAACoa,aAAa,CAAC;AAC1C,EAAA;;AAEA;AACF;AACA;AACA;AACED,EAAAA,iBAAiBA,CAACngB,OAAO,EAAEqgB,SAAS,EAAE;IACpC,IAAI,EAAEA,SAAS,KAAK,WAAW,IAAIA,SAAS,KAAK,YAAY,CAAC,EAAE;AAC9D,MAAA;AACF,IAAA;IAEArgB,OAAO,CAAC0B,aAAa,CAACjG,YAAY,CAAC,WAAW,EAAE4kB,SAAS,CAAC;AAC1D,IAAA,IAAIpmB,OAAO,GAAG,IAAI,CAAC8B,MAAM,CAACukB,aAAa;IACvCrmB,OAAO,GAAGA,OAAO,CAACuH,OAAO,CAAC,WAAW,EAAExB,OAAO,CAACgC,WAAW,CAAC;AAC3D/H,IAAAA,OAAO,GAAGA,OAAO,CAACuH,OAAO,CAAC,aAAa,EAAE,IAAI,CAACzF,MAAM,CAAC,CAAA,EAAGskB,SAAS,CAAA,IAAA,CAAM,CAAC,CAAC;AACzE,IAAA,IAAI,CAAC7I,OAAO,CAACxV,WAAW,GAAG/H,OAAO;AACpC,EAAA;AAEAglB,EAAAA,yBAAyBA,GAAG;AAC1B,IAAA,KAAK,MAAMzc,QAAQ,IAAI,IAAI,CAACsc,SAAS,EAAE;AACrC,MAAA,MAAM9e,OAAO;AACXwC,MAAAA,QAAQ,CAACzB,aAAa,CAAC,QAAQ,CAChC;MACD,IAAIyB,QAAQ,CAACvJ,YAAY,CAAC,WAAW,CAAC,IAAI+G,OAAO,EAAE;AAAA,QAAA,IAAAugB,qBAAA;AACjD,QAAA,MAAMF,SAAS,GAAG7d,QAAQ,CAACnB,YAAY,CAAC,WAAW,CAAC;AACpD,QAAA,CAAAkf,qBAAA,GAAAvgB,OAAO,CAACe,aAAa,CAAC,KAAK,CAAC,KAAA,IAAA,IAA5Bwf,qBAAA,CAA8Bje,MAAM,EAAE;AAEtC,QAAA,QAAQ+d,SAAS;AACf,UAAA,KAAK,WAAW;YACdrgB,OAAO,CAACuF,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAACoZ,QAAQ,CAAC;AACtD,YAAA;AACF,UAAA,KAAK,YAAY;YACf3e,OAAO,CAACuF,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAACqZ,UAAU,CAAC;AACxD,YAAA;AACF,UAAA;YACE5e,OAAO,CAACuF,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAACsZ,YAAY,CAAC;AAC9D;AACF,MAAA;AACF,IAAA;AACF,EAAA;AAEAqB,EAAAA,kBAAkBA,GAAG;AACnB,IAAA,KAAK,MAAM1d,QAAQ,IAAI,IAAI,CAACsc,SAAS,EAAE;AACrCtc,MAAAA,QAAQ,CAAC/G,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;AAC5C,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEqkB,OAAOA,CAAC5F,KAAK,EAAE;AACb,IAAA,KAAK,MAAMxP,IAAI,IAAIwP,KAAK,EAAE;AACxB,MAAA,IAAI,CAACuE,KAAK,CAACxc,MAAM,CAACyI,IAAI,CAAC;AACzB,IAAA;AACF,EAAA;AAEA6U,EAAAA,iBAAiBA,GAAG;AAClB,IAAA,OAAO7lB,KAAK,CAACyF,IAAI,CAAC,IAAI,CAACsf,KAAK,CAAC1f,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACtD,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACE8gB,EAAAA,IAAIA,CAAC3F,KAAK,EAAEwF,YAAY,EAAED,aAAa,EAAE;IACvC,OAAOvF,KAAK,CAAC2F,IAAI,CAAC,CAACW,KAAK,EAAEC,KAAK,KAAK;MAClC,MAAMC,IAAI,GAAGF,KAAK,CAACzhB,gBAAgB,CAAC,QAAQ,CAAC,CAAC2gB,YAAY,CAAC;MAC3D,MAAMiB,IAAI,GAAGF,KAAK,CAAC1hB,gBAAgB,CAAC,QAAQ,CAAC,CAAC2gB,YAAY,CAAC;AAE3D,MAAA,IACE,CAACgB,IAAI,IACL,CAACC,IAAI,IACL,EAAED,IAAI,YAAY1nB,WAAW,CAAC,IAC9B,EAAE2nB,IAAI,YAAY3nB,WAAW,CAAC,EAC9B;AACA,QAAA,OAAO,CAAC;AACV,MAAA;AAEA,MAAA,MAAM4nB,MAAM,GACVnB,aAAa,KAAK,WAAW,GACzB,IAAI,CAACoB,YAAY,CAACH,IAAI,CAAC,GACvB,IAAI,CAACG,YAAY,CAACF,IAAI,CAAC;AAE7B,MAAA,MAAMG,MAAM,GACVrB,aAAa,KAAK,WAAW,GACzB,IAAI,CAACoB,YAAY,CAACF,IAAI,CAAC,GACvB,IAAI,CAACE,YAAY,CAACH,IAAI,CAAC;AAE7B,MAAA,OAAO,EAAE,OAAOE,MAAM,KAAK,QAAQ,IAAI,OAAOE,MAAM,KAAK,QAAQ,CAAC,GAC9DF,MAAM,CAACljB,QAAQ,EAAE,CAACqjB,aAAa,CAACD,MAAM,CAACpjB,QAAQ,EAAE,CAAC,GAClDkjB,MAAM,GAAGE,MAAM;AACrB,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;EACED,YAAYA,CAAChW,KAAK,EAAE;IAClB,MAAMmW,GAAG,GAAGnW,KAAK,CAACxJ,YAAY,CAAC,iBAAiB,CAAC,IAAIwJ,KAAK,CAACvG,SAAS;AACpE,IAAA,MAAM2c,WAAW,GAAGhkB,MAAM,CAAC+jB,GAAG,CAAC;IAE/B,OAAO/jB,MAAM,CAACD,QAAQ,CAACikB,WAAW,CAAC,GAC/BA,WAAW;AAAC,MACZD,GAAG;AACT,EAAA;;AAEA;AACF;AACA;AA4BA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAjTazC,aAAa,CAyQjBxlB,UAAU,GAAG,oBAAoB;AAExC;AACF;AACA;AACA;AACA;AA/QawlB,aAAa,CAgRjBtiB,QAAQ,GAAGoB,MAAM,CAACyH,MAAM,CAAC;AAC9Bwb,EAAAA,aAAa,EAAE,iCAAiC;AAChDY,EAAAA,aAAa,EAAE,WAAW;AAC1BC,EAAAA,cAAc,EAAE;AAClB,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AA1Ra5C,aAAa,CA2RjBrhB,MAAM,GAAGG,MAAM,CAACyH,MAAM,qBACL;AACpBxH,EAAAA,UAAU,EAAE;AACVgjB,IAAAA,aAAa,EAAE;AAAEzjB,MAAAA,IAAI,EAAE;KAAU;AACjCqkB,IAAAA,aAAa,EAAE;AAAErkB,MAAAA,IAAI,EAAE;KAAU;AACjCskB,IAAAA,cAAc,EAAE;AAAEtkB,MAAAA,IAAI,EAAE;AAAS;AACnC;AACF,CACF,CAAC;;ACvRH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASukB,OAAOA,CAACC,aAAa,EAAE;EAC9B,KAAK,MAAMrnB,SAAS,IAAI,CACtByF,UAAU,EACVyE,KAAK,EACLa,UAAU,EACVuC,UAAU,EACV0T,WAAW,EACXc,cAAc,EACd/K,SAAS,EACTkL,cAAc,EACd+B,YAAY,EACZO,aAAa,CACd,EAAE;AACD3f,IAAAA,SAAS,CAAC5E,SAAS,EAAEsgB,SAAS,EAAE+G,aAAa,CAAC;AAChD,EAAA;AACF;;AAsBA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;","x_google_ignoreList":[0,1,2,3,4]}
|