govuk_publishing_components 51.1.1 → 51.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/govuk_publishing_components/components/feedback.js +29 -34
  3. data/app/assets/javascripts/govuk_publishing_components/vendor/lux/lux-reporter.js +7 -2
  4. data/app/assets/stylesheets/component_guide/application.scss +1 -1
  5. data/app/assets/stylesheets/govuk_publishing_components/_all_components.scss +1 -0
  6. data/app/assets/stylesheets/govuk_publishing_components/components/helpers/_markdown-typography.scss +2 -2
  7. data/app/models/govuk_publishing_components/audit_comparer.rb +3 -3
  8. data/app/views/govuk_publishing_components/components/_title.html.erb +2 -3
  9. data/app/views/govuk_publishing_components/components/docs/add_another.yml +1 -1
  10. data/app/views/govuk_publishing_components/components/docs/feedback.yml +1 -1
  11. data/lib/govuk_publishing_components/presenters/checkboxes_helper.rb +1 -1
  12. data/lib/govuk_publishing_components/presenters/shared_helper.rb +0 -11
  13. data/lib/govuk_publishing_components/version.rb +1 -1
  14. data/node_modules/govuk-frontend/dist/govuk/all.bundle.js +217 -184
  15. data/node_modules/govuk-frontend/dist/govuk/all.bundle.js.map +1 -1
  16. data/node_modules/govuk-frontend/dist/govuk/all.bundle.mjs +216 -184
  17. data/node_modules/govuk-frontend/dist/govuk/all.bundle.mjs.map +1 -1
  18. data/node_modules/govuk-frontend/dist/govuk/all.mjs +1 -0
  19. data/node_modules/govuk-frontend/dist/govuk/all.mjs.map +1 -1
  20. data/node_modules/govuk-frontend/dist/govuk/all.scss +6 -0
  21. data/node_modules/govuk-frontend/dist/govuk/all.scss.map +1 -1
  22. data/node_modules/govuk-frontend/dist/govuk/common/configuration.mjs +164 -0
  23. data/node_modules/govuk-frontend/dist/govuk/common/configuration.mjs.map +1 -0
  24. data/node_modules/govuk-frontend/dist/govuk/common/govuk-frontend-version.mjs +1 -1
  25. data/node_modules/govuk-frontend/dist/govuk/common/index.mjs +1 -87
  26. data/node_modules/govuk-frontend/dist/govuk/common/index.mjs.map +1 -1
  27. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.js +149 -112
  28. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.js.map +1 -1
  29. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.mjs +148 -111
  30. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.mjs.map +1 -1
  31. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.mjs +5 -8
  32. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.mjs.map +1 -1
  33. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.js +149 -112
  34. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.js.map +1 -1
  35. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.mjs +148 -111
  36. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.mjs.map +1 -1
  37. data/node_modules/govuk-frontend/dist/govuk/components/button/button.mjs +5 -8
  38. data/node_modules/govuk-frontend/dist/govuk/components/button/button.mjs.map +1 -1
  39. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.js +174 -140
  40. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.js.map +1 -1
  41. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs +173 -139
  42. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs.map +1 -1
  43. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.mjs +17 -16
  44. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.mjs.map +1 -1
  45. data/node_modules/govuk-frontend/dist/govuk/components/character-count/macro-options.json +4 -4
  46. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.js +1 -24
  47. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.js.map +1 -1
  48. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.mjs +0 -23
  49. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.mjs.map +1 -1
  50. data/node_modules/govuk-frontend/dist/govuk/components/date-input/macro-options.json +2 -2
  51. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.js +149 -112
  52. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.js.map +1 -1
  53. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.mjs +148 -111
  54. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.mjs.map +1 -1
  55. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.mjs +6 -8
  56. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.mjs.map +1 -1
  57. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.js +149 -112
  58. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.js.map +1 -1
  59. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.mjs +148 -111
  60. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.mjs.map +1 -1
  61. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.mjs +5 -8
  62. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.mjs.map +1 -1
  63. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.js +1 -24
  64. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.js.map +1 -1
  65. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.mjs +0 -23
  66. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.mjs.map +1 -1
  67. data/node_modules/govuk-frontend/dist/govuk/components/input/macro-options.json +4 -4
  68. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.js +149 -112
  69. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.js.map +1 -1
  70. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.mjs +148 -111
  71. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.mjs.map +1 -1
  72. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs +6 -8
  73. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs.map +1 -1
  74. data/node_modules/govuk-frontend/dist/govuk/components/password-input/macro-options.json +1 -1
  75. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.js +149 -112
  76. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.js.map +1 -1
  77. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.mjs +148 -111
  78. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.mjs.map +1 -1
  79. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.mjs +5 -8
  80. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.mjs.map +1 -1
  81. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.js +1 -24
  82. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.js.map +1 -1
  83. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.mjs +0 -23
  84. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.mjs.map +1 -1
  85. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.js +1 -24
  86. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.js.map +1 -1
  87. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.mjs +0 -23
  88. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.mjs.map +1 -1
  89. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.js +1 -24
  90. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.js.map +1 -1
  91. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.mjs +0 -23
  92. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.mjs.map +1 -1
  93. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.js +1 -24
  94. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.js.map +1 -1
  95. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.mjs +0 -23
  96. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.mjs.map +1 -1
  97. data/node_modules/govuk-frontend/dist/govuk/components/textarea/macro-options.json +1 -1
  98. data/node_modules/govuk-frontend/dist/govuk/core/_govuk-frontend-properties.scss +1 -1
  99. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.css +1 -1
  100. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.css.map +1 -1
  101. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.js +1 -1
  102. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.js.map +1 -1
  103. data/node_modules/govuk-frontend/dist/govuk/init.mjs +17 -13
  104. data/node_modules/govuk-frontend/dist/govuk/init.mjs.map +1 -1
  105. data/node_modules/govuk-frontend/dist/govuk/settings/_typography-responsive.scss +5 -10
  106. data/node_modules/govuk-frontend/dist/govuk/settings/_typography-responsive.scss.map +1 -1
  107. data/node_modules/govuk-frontend/govuk-prototype-kit.config.json +1 -1
  108. data/node_modules/govuk-frontend/package.json +9 -9
  109. metadata +4 -6
  110. data/node_modules/govuk-frontend/dist/govuk/common/normalise-dataset.mjs +0 -18
  111. data/node_modules/govuk-frontend/dist/govuk/common/normalise-dataset.mjs.map +0 -1
  112. data/node_modules/govuk-frontend/dist/govuk/common/normalise-string.mjs +0 -31
  113. data/node_modules/govuk-frontend/dist/govuk/common/normalise-string.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"all.bundle.js","sources":["../../src/govuk/common/govuk-frontend-version.mjs","../../src/govuk/common/normalise-string.mjs","../../src/govuk/common/index.mjs","../../src/govuk/common/normalise-dataset.mjs","../../src/govuk/errors/index.mjs","../../src/govuk/govuk-frontend-component.mjs","../../src/govuk/i18n.mjs","../../src/govuk/components/accordion/accordion.mjs","../../src/govuk/components/button/button.mjs","../../src/govuk/common/closest-attribute-value.mjs","../../src/govuk/components/character-count/character-count.mjs","../../src/govuk/components/checkboxes/checkboxes.mjs","../../src/govuk/components/error-summary/error-summary.mjs","../../src/govuk/components/exit-this-page/exit-this-page.mjs","../../src/govuk/components/header/header.mjs","../../src/govuk/components/notification-banner/notification-banner.mjs","../../src/govuk/components/password-input/password-input.mjs","../../src/govuk/components/radios/radios.mjs","../../src/govuk/components/service-navigation/service-navigation.mjs","../../src/govuk/components/skip-link/skip-link.mjs","../../src/govuk/components/tabs/tabs.mjs","../../src/govuk/init.mjs"],"sourcesContent":["/*\n * This variable is automatically overwritten during builds and releases.\n * It doesn't need to be updated manually.\n */\n\n/**\n * GOV.UK Frontend release version\n *\n * {@link https://github.com/alphagov/govuk-frontend/releases}\n */\nexport const version = 'development'\n","/**\n * Normalise string\n *\n * 'If it looks like a duck, and it quacks like a duck…' 🦆\n *\n * If the passed value looks like a boolean or a number, convert it to a boolean\n * or number.\n *\n * Designed to be used to convert config passed via data attributes (which are\n * always strings) into something sensible.\n *\n * @internal\n * @param {DOMStringMap[string]} value - The value to normalise\n * @param {SchemaProperty} [property] - Component schema property\n * @returns {string | boolean | number | undefined} Normalised data\n */\nexport function normaliseString(value, property) {\n const trimmedValue = value ? value.trim() : ''\n\n let output\n let outputType = property?.type\n\n // No schema type set? Determine automatically\n if (!outputType) {\n if (['true', 'false'].includes(trimmedValue)) {\n outputType = 'boolean'\n }\n\n // Empty / whitespace-only strings are considered finite so we need to check\n // the length of the trimmed string as well\n if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {\n outputType = 'number'\n }\n }\n\n switch (outputType) {\n case 'boolean':\n output = trimmedValue === 'true'\n break\n\n case 'number':\n output = Number(trimmedValue)\n break\n\n default:\n output = value\n }\n\n return output\n}\n\n/**\n * @typedef {import('./index.mjs').SchemaProperty} SchemaProperty\n */\n","import { normaliseString } from './normalise-string.mjs'\n\n/**\n * Common helpers which do not require polyfill.\n *\n * IMPORTANT: If a helper require a polyfill, please isolate it in its own module\n * so that the polyfill can be properly tree-shaken and does not burden\n * the components that do not need that helper\n */\n\n/**\n * Config merging function\n *\n * Takes any number of objects and combines them together, with\n * greatest priority on the LAST item passed in.\n *\n * @internal\n * @param {...{ [key: string]: unknown }} configObjects - Config objects to merge\n * @returns {{ [key: string]: unknown }} A merged config object\n */\nexport function mergeConfigs(...configObjects) {\n // Start with an empty object as our base\n /** @type {{ [key: string]: unknown }} */\n const formattedConfigObject = {}\n\n // Loop through each of the passed objects\n for (const configObject of configObjects) {\n for (const key of Object.keys(configObject)) {\n const option = formattedConfigObject[key]\n const override = configObject[key]\n\n // Push their keys one-by-one into formattedConfigObject. Any duplicate\n // keys with object values will be merged, otherwise the new value will\n // override the existing value.\n if (isObject(option) && isObject(override)) {\n // @ts-expect-error Index signature for type 'string' is missing\n formattedConfigObject[key] = mergeConfigs(option, override)\n } else {\n // Apply override\n formattedConfigObject[key] = override\n }\n }\n }\n\n return formattedConfigObject\n}\n\n/**\n * Extracts keys starting with a particular namespace from dataset ('data-*')\n * object, removing the namespace in the process, normalising all values\n *\n * @internal\n * @param {{ schema: Schema }} Component - Component class\n * @param {DOMStringMap} dataset - The object to extract key-value pairs from\n * @param {string} namespace - The namespace to filter keys with\n * @returns {ObjectNested | undefined} Nested object with dot-separated key namespace removed\n */\nexport function extractConfigByNamespace(Component, dataset, namespace) {\n const property = Component.schema.properties[namespace]\n\n // Only extract configs for object schema properties\n if (property?.type !== 'object') {\n return\n }\n\n // Add default empty config\n const newObject = {\n [namespace]: /** @type {ObjectNested} */ ({})\n }\n\n for (const [key, value] of Object.entries(dataset)) {\n /** @type {ObjectNested | ObjectNested[NestedKey]} */\n let current = newObject\n\n // Split the key into parts, using . as our namespace separator\n const keyParts = key.split('.')\n\n /**\n * Create new level per part\n *\n * e.g. 'i18n.textareaDescription.other' becomes\n * `{ i18n: { textareaDescription: { other } } }`\n */\n for (const [index, name] of keyParts.entries()) {\n if (typeof current === 'object') {\n // Drop down to nested object until the last part\n if (index < keyParts.length - 1) {\n // New nested object (optionally) replaces existing value\n if (!isObject(current[name])) {\n current[name] = {}\n }\n\n // Drop down into new or existing nested object\n current = current[name]\n } else if (key !== namespace) {\n // Normalised value (optionally) replaces existing value\n current[name] = normaliseString(value)\n }\n }\n }\n }\n\n return newObject[namespace]\n}\n\n/**\n * Get hash fragment from URL\n *\n * Extract the hash fragment (everything after the hash) from a URL,\n * but not including the hash symbol\n *\n * @private\n * @param {string} url - URL\n * @returns {string | undefined} Fragment from URL, without the hash\n */\nexport function getFragmentFromUrl(url) {\n if (!url.includes('#')) {\n return undefined\n }\n\n return url.split('#').pop()\n}\n\n/**\n * Get GOV.UK Frontend breakpoint value from CSS custom property\n *\n * @private\n * @param {string} name - Breakpoint name\n * @returns {{ property: string, value?: string }} Breakpoint object\n */\nexport function getBreakpoint(name) {\n const property = `--govuk-frontend-breakpoint-${name}`\n\n // Get value from `<html>` with breakpoints on CSS :root\n const value = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(property)\n\n return {\n property,\n value: value || undefined\n }\n}\n\n/**\n * Move focus to element\n *\n * Sets tabindex to -1 to make the element programmatically focusable,\n * but removes it on blur as the element doesn't need to be focused again.\n *\n * @private\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/**\n * Checks if component is already initialised\n *\n * @internal\n * @param {Element} $root - HTML element to be checked\n * @param {string} moduleName - name of component module\n * @returns {boolean} Whether component is already initialised\n */\nexport function isInitialised($root, moduleName) {\n return (\n $root instanceof HTMLElement &&\n $root.hasAttribute(`data-${moduleName}-init`)\n )\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 */\nexport function isSupported($scope = document.body) {\n if (!$scope) {\n return false\n }\n\n return $scope.classList.contains('govuk-frontend-supported')\n}\n\n/**\n * Validate component config by schema\n *\n * Follows limited examples in JSON schema for wider support in future\n *\n * {@link https://ajv.js.org/json-schema.html#compound-keywords}\n * {@link https://ajv.js.org/packages/ajv-errors.html#single-message}\n *\n * @internal\n * @param {Schema} schema - Config schema\n * @param {{ [key: string]: unknown }} config - Component config\n * @returns {string[]} List of validation errors\n */\nexport function validateConfig(schema, config) {\n const validationErrors = []\n\n // Check errors for each schema\n for (const [name, conditions] of Object.entries(schema)) {\n const errors = []\n\n // Check errors for each schema condition\n if (Array.isArray(conditions)) {\n for (const { required, errorMessage } of conditions) {\n if (!required.every((key) => !!config[key])) {\n errors.push(errorMessage) // Missing config key value\n }\n }\n\n // Check one condition passes or add errors\n if (name === 'anyOf' && !(conditions.length - errors.length >= 1)) {\n validationErrors.push(...errors)\n }\n }\n }\n\n return validationErrors\n}\n\n/**\n * Check for an array\n *\n * @internal\n * @param {unknown} option - Option to check\n * @returns {boolean} Whether the option is an array\n */\nfunction isArray(option) {\n return Array.isArray(option)\n}\n\n/**\n * Check for an object\n *\n * @internal\n * @param {unknown} option - Option to check\n * @returns {boolean} Whether the option is an object\n */\nfunction isObject(option) {\n return !!option && typeof option === 'object' && !isArray(option)\n}\n\n/**\n * Format error message\n *\n * @internal\n * @param {ComponentWithModuleName} Component - Component that threw the error\n * @param {string} message - Error message\n * @returns {string} - Formatted error message\n */\nexport function formatErrorMessage(Component, message) {\n return `${Component.moduleName}: ${message}`\n}\n\n/**\n * Schema for component config\n *\n * @typedef {object} Schema\n * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties\n * @property {SchemaCondition[]} [anyOf] - List of schema conditions\n */\n\n/**\n * Schema property for component config\n *\n * @typedef {object} SchemaProperty\n * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type\n */\n\n/**\n * Schema condition for component config\n *\n * @typedef {object} SchemaCondition\n * @property {string[]} required - List of required config fields\n * @property {string} errorMessage - Error message when required config fields not provided\n */\n\n/**\n * @internal\n * @typedef {keyof ObjectNested} NestedKey\n * @typedef {{ [key: string]: string | boolean | number | ObjectNested | undefined }} ObjectNested\n */\n\n/* eslint-disable jsdoc/valid-types --\n * `{new(...args: any[] ): object}` is not recognised as valid\n * https://github.com/gajus/eslint-plugin-jsdoc/issues/145#issuecomment-1308722878\n * https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/131\n **/\n\n/**\n * @typedef ComponentWithModuleName\n * @property {string} moduleName - Name of the component\n */\n\n/* eslint-enable jsdoc/valid-types */\n","import { extractConfigByNamespace } from './index.mjs'\nimport { normaliseString } from './normalise-string.mjs'\n\n/**\n * Normalise dataset\n *\n * Loop over an object and normalise each value using {@link normaliseString},\n * optionally expanding nested `i18n.field`\n *\n * @internal\n * @param {{ schema: Schema }} Component - Component class\n * @param {DOMStringMap} dataset - HTML element dataset\n * @returns {ObjectNested} Normalised dataset\n */\nexport function normaliseDataset(Component, dataset) {\n const out = /** @type {ReturnType<typeof normaliseDataset>} */ ({})\n\n // Normalise top-level dataset ('data-*') values using schema types\n for (const [field, property] of Object.entries(Component.schema.properties)) {\n if (field in dataset) {\n out[field] = normaliseString(dataset[field], property)\n }\n\n /**\n * Extract and normalise nested object values automatically using\n * {@link normaliseString} but only schema object types are allowed\n */\n if (property?.type === 'object') {\n out[field] = extractConfigByNamespace(Component, dataset, field)\n }\n }\n\n return out\n}\n\n/**\n * @internal\n * @typedef {import('./index.mjs').ObjectNested} ObjectNested\n * @typedef {import('./index.mjs').Schema} Schema\n */\n","import { formatErrorMessage } from '../common/index.mjs'\n\n/**\n * GOV.UK Frontend error\n *\n * A base class for `Error`s thrown by GOV.UK Frontend.\n *\n * It is meant to be extended into specific types of errors\n * to be thrown by our code.\n *\n * @example\n * ```js\n * class MissingRootError extends GOVUKFrontendError {\n * // Setting an explicit name is important as extending the class will not\n * // set a new `name` on the subclass. The `name` property is important\n * // to ensure intelligible error names even if the class name gets\n * // mangled by a minifier\n * name = \"MissingRootError\"\n * }\n * ```\n * @virtual\n */\nexport class GOVUKFrontendError extends Error {\n name = 'GOVUKFrontendError'\n}\n\n/**\n * Indicates that GOV.UK Frontend is not supported\n */\nexport class SupportError extends GOVUKFrontendError {\n name = 'SupportError'\n\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 =\n 'noModule' in HTMLScriptElement.prototype\n ? 'GOV.UK Frontend initialised without `<body class=\"govuk-frontend-supported\">` from template `<script>` snippet'\n : 'GOV.UK Frontend is not supported in this browser'\n\n super(\n $scope\n ? supportMessage\n : 'GOV.UK Frontend initialised without `<script type=\"module\">`'\n )\n }\n}\n\n/**\n * Indicates that a component has received an illegal configuration\n */\nexport class ConfigError extends GOVUKFrontendError {\n name = 'ConfigError'\n}\n\n/**\n * Indicates an issue with an element (possibly `null` or `undefined`)\n */\nexport class ElementError extends GOVUKFrontendError {\n name = 'ElementError'\n\n /**\n * @internal\n * @overload\n * @param {string} message - Element error message\n */\n\n /**\n * @internal\n * @overload\n * @param {ElementErrorOptions} options - Element error options\n */\n\n /**\n * @internal\n * @param {string | ElementErrorOptions} messageOrOptions - Element error message or options\n */\n constructor(messageOrOptions) {\n let message = typeof messageOrOptions === 'string' ? messageOrOptions : ''\n\n // Build message from options\n if (typeof messageOrOptions === 'object') {\n const { component, identifier, element, expectedType } = messageOrOptions\n\n message = identifier\n\n // Append reason\n message += element\n ? ` is not of type ${expectedType ?? 'HTMLElement'}`\n : ' not found'\n\n message = formatErrorMessage(component, message)\n }\n\n super(message)\n }\n}\n\n/**\n * Indicates that a component is already initialised\n */\nexport class InitError extends GOVUKFrontendError {\n name = 'InitError'\n\n /**\n * @internal\n * @param {ComponentWithModuleName | string} componentOrMessage - name of the component module\n */\n constructor(componentOrMessage) {\n const message =\n typeof componentOrMessage === 'string'\n ? componentOrMessage\n : formatErrorMessage(\n componentOrMessage,\n `Root element (\\`$root\\`) already initialised`\n )\n\n super(message)\n }\n}\n\n/**\n * Element error options\n *\n * @internal\n * @typedef {object} ElementErrorOptions\n * @property {string} identifier - An identifier that'll let the user understand which element has an error. This is whatever makes the most sense\n * @property {Element | null} [element] - The element in error\n * @property {string} [expectedType] - The type that was expected for the identifier\n * @property {ComponentWithModuleName} component - Component throwing the error\n */\n\n/**\n * @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName\n */\n","import { isInitialised, isSupported } from './common/index.mjs'\nimport { ElementError, InitError, SupportError } from './errors/index.mjs'\n\n/**\n * Base Component class\n *\n * Centralises the behaviours shared by our components\n *\n * @virtual\n * @template {Element} [RootElementType=HTMLElement]\n */\nexport class GOVUKFrontendComponent {\n /**\n * @type {typeof Element}\n */\n static elementType = HTMLElement\n\n // allows Typescript user to work around the lack of types\n // in GOVUKFrontend package, Typescript is not aware of $root\n // in components that extend GOVUKFrontendComponent\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\n /**\n * @protected\n * @type {RootElementType}\n */\n _$root\n\n /**\n * Constructs a new component, validating that GOV.UK Frontend is supported\n *\n * @internal\n * @param {Element | null} [$root] - HTML element to use for component\n */\n constructor($root) {\n const childConstructor = /** @type {ChildClassConstructor} */ (\n this.constructor\n )\n\n // TypeScript does not enforce that inheriting classes will define a `moduleName`\n // (even if we add a `@virtual` `static moduleName` property to this class).\n // While we trust users to do this correctly, we do a little check to provide them\n // a helpful error message.\n //\n // After this, we'll be sure that `childConstructor` has a `moduleName`\n // as expected of the `ChildClassConstructor` we've cast `this.constructor` to.\n if (typeof childConstructor.moduleName !== 'string') {\n throw new InitError(`\\`moduleName\\` not defined in component`)\n }\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 = /** @type {RootElementType} */ ($root)\n }\n\n childConstructor.checkSupport()\n\n this.checkInitialised()\n\n const moduleName = childConstructor.moduleName\n\n this.$root.setAttribute(`data-${moduleName}-init`, '')\n }\n\n /**\n * Validates whether component is already initialised\n *\n * @private\n * @throws {InitError} when component is already initialised\n */\n checkInitialised() {\n const constructor = /** @type {ChildClassConstructor} */ (this.constructor)\n const moduleName = constructor.moduleName\n\n if (moduleName && isInitialised(this.$root, moduleName)) {\n throw new InitError(constructor)\n }\n }\n\n /**\n * Validates whether components are supported\n *\n * @throws {SupportError} when the components are not supported\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 GOVUKFrontendComponent & ChildClass} ChildClassConstructor\n */\n","/**\n * Internal support for selecting messages to render, with placeholder\n * interpolation and locale-aware number formatting and pluralisation\n *\n * @internal\n */\nexport class I18n {\n translations\n locale\n\n /**\n * @internal\n * @param {{ [key: string]: string | TranslationPluralForms }} translations - Key-value pairs of the translation strings to use.\n * @param {object} [config] - Configuration options for the function.\n * @param {string | null} [config.locale] - An overriding locale for the PluralRules functionality.\n */\n constructor(translations = {}, config = {}) {\n // Make list of translations available throughout function\n this.translations = translations\n\n // The locale to use for PluralRules and NumberFormat\n this.locale = config.locale ?? (document.documentElement.lang || 'en')\n }\n\n /**\n * The most used function - takes the key for a given piece of UI text and\n * returns the appropriate string.\n *\n * @internal\n * @param {string} lookupKey - The lookup key of the string to use.\n * @param {{ [key: string]: unknown }} [options] - Any options passed with the translation string, e.g: for string interpolation.\n * @returns {string} The appropriate translation string.\n * @throws {Error} Lookup key required\n * @throws {Error} Options required for `${}` placeholders\n */\n t(lookupKey, options) {\n if (!lookupKey) {\n // Print a console error if no lookup key has been provided\n throw new Error('i18n: lookup key missing')\n }\n\n // Fetch the translation for that lookup key\n let translation = this.translations[lookupKey]\n\n // If the `count` option is set, determine which plural suffix is needed and\n // change the lookupKey to match. We check to see if it's numeric instead of\n // falsy, as this could legitimately be 0.\n if (typeof options?.count === 'number' && typeof translation === 'object') {\n const translationPluralForm =\n translation[this.getPluralSuffix(lookupKey, options.count)]\n\n // Update translation with plural suffix\n if (translationPluralForm) {\n translation = translationPluralForm\n }\n }\n\n if (typeof translation === 'string') {\n // Check for ${} placeholders in the translation string\n if (translation.match(/%{(.\\S+)}/)) {\n if (!options) {\n throw new Error(\n 'i18n: cannot replace placeholders in string if no option data provided'\n )\n }\n\n return this.replacePlaceholders(translation, options)\n }\n\n return translation\n }\n\n // If the key wasn't found in our translations object,\n // return the lookup key itself as the fallback\n return lookupKey\n }\n\n /**\n * Takes a translation string with placeholders, and replaces the placeholders\n * with the provided data\n *\n * @internal\n * @param {string} translationString - The translation string\n * @param {{ [key: string]: unknown }} options - Any options passed with the translation string, e.g: for string interpolation.\n * @returns {string} The translation string to output, with $\\{\\} placeholders replaced\n */\n replacePlaceholders(translationString, options) {\n const formatter = Intl.NumberFormat.supportedLocalesOf(this.locale).length\n ? new Intl.NumberFormat(this.locale)\n : undefined\n\n return translationString.replace(\n /%{(.\\S+)}/g,\n\n /**\n * Replace translation string placeholders\n *\n * @internal\n * @param {string} placeholderWithBraces - Placeholder with braces\n * @param {string} placeholderKey - Placeholder key\n * @returns {string} Placeholder value\n */\n function (placeholderWithBraces, placeholderKey) {\n if (Object.prototype.hasOwnProperty.call(options, placeholderKey)) {\n const placeholderValue = options[placeholderKey]\n\n // If a user has passed `false` as the value for the placeholder\n // treat it as though the value should not be displayed\n if (\n placeholderValue === false ||\n (typeof placeholderValue !== 'number' &&\n typeof placeholderValue !== 'string')\n ) {\n return ''\n }\n\n // If the placeholder's value is a number, localise the number formatting\n if (typeof placeholderValue === 'number') {\n return formatter\n ? formatter.format(placeholderValue)\n : `${placeholderValue}`\n }\n\n return placeholderValue\n }\n\n throw new Error(\n `i18n: no data found to replace ${placeholderWithBraces} placeholder in string`\n )\n }\n )\n }\n\n /**\n * Check to see if the browser supports Intl.PluralRules\n *\n * It requires all conditions to be met in order to be supported:\n * - The implementation of Intl supports PluralRules (NOT true in Safari 10–12)\n * - The browser/OS has plural rules for the current locale (browser dependent)\n *\n * {@link https://browsersl.ist/#q=supports+es6-module+and+not+supports+intl-pluralrules}\n *\n * @internal\n * @returns {boolean} Returns true if all conditions are met. Returns false otherwise.\n */\n hasIntlPluralRulesSupport() {\n return Boolean(\n 'PluralRules' in window.Intl &&\n Intl.PluralRules.supportedLocalesOf(this.locale).length\n )\n }\n\n /**\n * Get the appropriate suffix for the plural form.\n *\n * Uses Intl.PluralRules (or our own fallback implementation) to get the\n * 'preferred' form to use for the given count.\n *\n * Checks that a translation has been provided for that plural form – if it\n * hasn't, it'll fall back to the 'other' plural form (unless that doesn't exist\n * either, in which case an error will be thrown)\n *\n * @internal\n * @param {string} lookupKey - The lookup key of the string to use.\n * @param {number} count - Number used to determine which pluralisation to use.\n * @returns {PluralRule} The suffix associated with the correct pluralisation for this locale.\n * @throws {Error} Plural form `.other` required when preferred plural form is missing\n */\n getPluralSuffix(lookupKey, count) {\n // Validate that the number is actually a number.\n //\n // Number(count) will turn anything that can't be converted to a Number type\n // into 'NaN'. isFinite filters out NaN, as it isn't a finite number.\n count = Number(count)\n if (!isFinite(count)) {\n return 'other'\n }\n\n // Fetch the translation for that lookup key\n const translation = this.translations[lookupKey]\n\n // Check to verify that all the requirements for Intl.PluralRules are met.\n // If so, we can use that instead of our custom implementation. Otherwise,\n // use the hardcoded fallback.\n const preferredForm = this.hasIntlPluralRulesSupport()\n ? new Intl.PluralRules(this.locale).select(count)\n : this.selectPluralFormUsingFallbackRules(count)\n\n // Use the correct plural form if provided\n if (typeof translation === 'object') {\n if (preferredForm in translation) {\n return preferredForm\n // Fall back to `other` if the plural form is missing, but log a warning\n // to the console\n } else if ('other' in translation) {\n console.warn(\n `i18n: Missing plural form \".${preferredForm}\" for \"${this.locale}\" locale. Falling back to \".other\".`\n )\n\n return 'other'\n }\n }\n\n // If the required `other` plural form is missing, all we can do is error\n throw new Error(\n `i18n: Plural form \".other\" is required for \"${this.locale}\" locale`\n )\n }\n\n /**\n * Get the plural form using our fallback implementation\n *\n * This is split out into a separate function to make it easier to test the\n * fallback behaviour in an environment where Intl.PluralRules exists.\n *\n * @internal\n * @param {number} count - Number used to determine which pluralisation to use.\n * @returns {PluralRule} The pluralisation form for count in this locale.\n */\n selectPluralFormUsingFallbackRules(count) {\n // Currently our custom code can only handle positive integers, so let's\n // make sure our number is one of those.\n count = Math.abs(Math.floor(count))\n\n const ruleset = this.getPluralRulesForLocale()\n\n if (ruleset) {\n return I18n.pluralRules[ruleset](count)\n }\n\n return 'other'\n }\n\n /**\n * Work out which pluralisation rules to use for the current locale\n *\n * The locale may include a regional indicator (such as en-GB), but we don't\n * usually care about this part, as pluralisation rules are usually the same\n * regardless of region. There are exceptions, however, (e.g. Portuguese) so\n * this searches by both the full and shortened locale codes, just to be sure.\n *\n * @internal\n * @returns {string | undefined} The name of the pluralisation rule to use (a key for one\n * of the functions in this.pluralRules)\n */\n getPluralRulesForLocale() {\n const localeShort = this.locale.split('-')[0]\n\n // Look through the plural rules map to find which `pluralRule` is\n // appropriate for our current `locale`.\n for (const pluralRule in I18n.pluralRulesMap) {\n const languages = I18n.pluralRulesMap[pluralRule]\n if (languages.includes(this.locale) || languages.includes(localeShort)) {\n return pluralRule\n }\n }\n }\n\n /**\n * Map of plural rules to languages where those rules apply.\n *\n * Note: These groups are named for the most dominant or recognisable language\n * that uses each system. The groupings do not imply that the languages are\n * related to one another. Many languages have evolved the same systems\n * independently of one another.\n *\n * Code to support more languages can be found in the i18n spike:\n * {@link https://github.com/alphagov/govuk-frontend/blob/spike-i18n-support/src/govuk/i18n.mjs}\n *\n * Languages currently supported:\n *\n * Arabic: Arabic (ar)\n * Chinese: Burmese (my), Chinese (zh), Indonesian (id), Japanese (ja),\n * Javanese (jv), Korean (ko), Malay (ms), Thai (th), Vietnamese (vi)\n * French: Armenian (hy), Bangla (bn), French (fr), Gujarati (gu), Hindi (hi),\n * Persian Farsi (fa), Punjabi (pa), Zulu (zu)\n * German: Afrikaans (af), Albanian (sq), Azerbaijani (az), Basque (eu),\n * Bulgarian (bg), Catalan (ca), Danish (da), Dutch (nl), English (en),\n * Estonian (et), Finnish (fi), Georgian (ka), German (de), Greek (el),\n * Hungarian (hu), Luxembourgish (lb), Norwegian (no), Somali (so),\n * Swahili (sw), Swedish (sv), Tamil (ta), Telugu (te), Turkish (tr),\n * Urdu (ur)\n * Irish: Irish Gaelic (ga)\n * Russian: Russian (ru), Ukrainian (uk)\n * Scottish: Scottish Gaelic (gd)\n * Spanish: European Portuguese (pt-PT), Italian (it), Spanish (es)\n * Welsh: Welsh (cy)\n *\n * @internal\n * @type {{ [key: string]: string[] }}\n */\n static pluralRulesMap = {\n arabic: ['ar'],\n chinese: ['my', 'zh', 'id', 'ja', 'jv', 'ko', 'ms', 'th', 'vi'],\n french: ['hy', 'bn', 'fr', 'gu', 'hi', 'fa', 'pa', 'zu'],\n german: [\n 'af',\n 'sq',\n 'az',\n 'eu',\n 'bg',\n 'ca',\n 'da',\n 'nl',\n 'en',\n 'et',\n 'fi',\n 'ka',\n 'de',\n 'el',\n 'hu',\n 'lb',\n 'no',\n 'so',\n 'sw',\n 'sv',\n 'ta',\n 'te',\n 'tr',\n 'ur'\n ],\n irish: ['ga'],\n russian: ['ru', 'uk'],\n scottish: ['gd'],\n spanish: ['pt-PT', 'it', 'es'],\n welsh: ['cy']\n }\n\n /**\n * Different pluralisation rule sets\n *\n * Returns the appropriate suffix for the plural form associated with `n`.\n * Possible suffixes: 'zero', 'one', 'two', 'few', 'many', 'other' (the actual\n * meaning of each differs per locale). 'other' should always exist, even in\n * languages without plurals, such as Chinese.\n * {@link https://cldr.unicode.org/index/cldr-spec/plural-rules}\n *\n * The count must be a positive integer. Negative numbers and decimals aren't accounted for\n *\n * @internal\n * @type {{ [key: string]: (count: number) => PluralRule }}\n */\n static pluralRules = {\n arabic(n) {\n if (n === 0) {\n return 'zero'\n }\n if (n === 1) {\n return 'one'\n }\n if (n === 2) {\n return 'two'\n }\n if (n % 100 >= 3 && n % 100 <= 10) {\n return 'few'\n }\n if (n % 100 >= 11 && n % 100 <= 99) {\n return 'many'\n }\n return 'other'\n },\n chinese() {\n return 'other'\n },\n french(n) {\n return n === 0 || n === 1 ? 'one' : 'other'\n },\n german(n) {\n return n === 1 ? 'one' : 'other'\n },\n irish(n) {\n if (n === 1) {\n return 'one'\n }\n if (n === 2) {\n return 'two'\n }\n if (n >= 3 && n <= 6) {\n return 'few'\n }\n if (n >= 7 && n <= 10) {\n return 'many'\n }\n return 'other'\n },\n russian(n) {\n const lastTwo = n % 100\n const last = lastTwo % 10\n if (last === 1 && lastTwo !== 11) {\n return 'one'\n }\n if (last >= 2 && last <= 4 && !(lastTwo >= 12 && lastTwo <= 14)) {\n return 'few'\n }\n if (\n last === 0 ||\n (last >= 5 && last <= 9) ||\n (lastTwo >= 11 && lastTwo <= 14)\n ) {\n return 'many'\n }\n // Note: The 'other' suffix is only used by decimal numbers in Russian.\n // We don't anticipate it being used, but it's here for consistency.\n return 'other'\n },\n scottish(n) {\n if (n === 1 || n === 11) {\n return 'one'\n }\n if (n === 2 || n === 12) {\n return 'two'\n }\n if ((n >= 3 && n <= 10) || (n >= 13 && n <= 19)) {\n return 'few'\n }\n return 'other'\n },\n spanish(n) {\n if (n === 1) {\n return 'one'\n }\n if (n % 1000000 === 0 && n !== 0) {\n return 'many'\n }\n return 'other'\n },\n welsh(n) {\n if (n === 0) {\n return 'zero'\n }\n if (n === 1) {\n return 'one'\n }\n if (n === 2) {\n return 'two'\n }\n if (n === 3) {\n return 'few'\n }\n if (n === 6) {\n return 'many'\n }\n return 'other'\n }\n }\n}\n\n/**\n * Plural rule category mnemonic tags\n *\n * @internal\n * @typedef {'zero' | 'one' | 'two' | 'few' | 'many' | 'other'} PluralRule\n */\n\n/**\n * Translated message by plural rule they correspond to.\n *\n * Allows to group pluralised messages under a single key when passing\n * translations to a component's constructor\n *\n * @internal\n * @typedef {object} TranslationPluralForms\n * @property {string} [other] - General plural form\n * @property {string} [zero] - Plural form used with 0\n * @property {string} [one] - Plural form used with 1\n * @property {string} [two] - Plural form used with 2\n * @property {string} [few] - Plural form used for a few\n * @property {string} [many] - Plural form used for many\n */\n","import { mergeConfigs } from '../../common/index.mjs'\nimport { normaliseDataset } from '../../common/normalise-dataset.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\nimport { I18n } from '../../i18n.mjs'\n\n/**\n * Accordion component\n *\n * This allows a collection of sections to be collapsed by default, showing only\n * their headers. Sections can be expanded or collapsed individually by clicking\n * their headers. A \"Show all sections\" button is also added to the top of the\n * accordion, which switches to \"Hide all sections\" when all the sections are\n * expanded.\n *\n * The state of each section is saved to the DOM via the `aria-expanded`\n * attribute, which also provides accessibility.\n *\n * @preserve\n */\nexport class Accordion extends GOVUKFrontendComponent {\n /**\n * @private\n * @type {AccordionConfig}\n */\n config\n\n /** @private */\n i18n\n\n /** @private */\n controlsClass = 'govuk-accordion__controls'\n\n /** @private */\n showAllClass = 'govuk-accordion__show-all'\n\n /** @private */\n showAllTextClass = 'govuk-accordion__show-all-text'\n\n /** @private */\n sectionClass = 'govuk-accordion__section'\n\n /** @private */\n sectionExpandedClass = 'govuk-accordion__section--expanded'\n\n /** @private */\n sectionButtonClass = 'govuk-accordion__section-button'\n\n /** @private */\n sectionHeaderClass = 'govuk-accordion__section-header'\n\n /** @private */\n sectionHeadingClass = 'govuk-accordion__section-heading'\n\n /** @private */\n sectionHeadingDividerClass = 'govuk-accordion__section-heading-divider'\n\n /** @private */\n sectionHeadingTextClass = 'govuk-accordion__section-heading-text'\n\n /** @private */\n sectionHeadingTextFocusClass = 'govuk-accordion__section-heading-text-focus'\n\n /** @private */\n sectionShowHideToggleClass = 'govuk-accordion__section-toggle'\n\n /** @private */\n sectionShowHideToggleFocusClass = 'govuk-accordion__section-toggle-focus'\n\n /** @private */\n sectionShowHideTextClass = 'govuk-accordion__section-toggle-text'\n\n /** @private */\n upChevronIconClass = 'govuk-accordion-nav__chevron'\n\n /** @private */\n downChevronIconClass = 'govuk-accordion-nav__chevron--down'\n\n /** @private */\n sectionSummaryClass = 'govuk-accordion__section-summary'\n\n /** @private */\n sectionSummaryFocusClass = 'govuk-accordion__section-summary-focus'\n\n /** @private */\n sectionContentClass = 'govuk-accordion__section-content'\n\n /** @private */\n $sections\n\n /**\n * @private\n * @type {HTMLButtonElement | null}\n */\n $showAllButton = null\n\n /**\n * @private\n * @type {HTMLElement | null}\n */\n $showAllIcon = null\n\n /**\n * @private\n * @type {HTMLElement | null}\n */\n $showAllText = null\n\n /**\n * @param {Element | null} $root - HTML element to use for accordion\n * @param {AccordionConfig} [config] - Accordion config\n */\n constructor($root, config = {}) {\n super($root)\n\n this.config = mergeConfigs(\n Accordion.defaults,\n config,\n normaliseDataset(Accordion, this.$root.dataset)\n )\n\n this.i18n = new I18n(this.config.i18n)\n\n const $sections = this.$root.querySelectorAll(`.${this.sectionClass}`)\n if (!$sections.length) {\n throw new ElementError({\n component: Accordion,\n identifier: `Sections (\\`<div class=\"${this.sectionClass}\">\\`)`\n })\n }\n\n this.$sections = $sections\n\n this.initControls()\n this.initSectionHeaders()\n\n this.updateShowAllButton(this.areAllSectionsOpen())\n }\n\n /**\n * Initialise controls and set attributes\n *\n * @private\n */\n initControls() {\n // Create \"Show all\" button and set attributes\n this.$showAllButton = document.createElement('button')\n this.$showAllButton.setAttribute('type', 'button')\n this.$showAllButton.setAttribute('class', this.showAllClass)\n this.$showAllButton.setAttribute('aria-expanded', 'false')\n\n // Create icon, add to element\n this.$showAllIcon = document.createElement('span')\n this.$showAllIcon.classList.add(this.upChevronIconClass)\n this.$showAllButton.appendChild(this.$showAllIcon)\n\n // Create control wrapper and add controls to it\n const $accordionControls = document.createElement('div')\n $accordionControls.setAttribute('class', this.controlsClass)\n $accordionControls.appendChild(this.$showAllButton)\n this.$root.insertBefore($accordionControls, this.$root.firstChild)\n\n // Build additional wrapper for Show all toggle text and place after icon\n this.$showAllText = document.createElement('span')\n this.$showAllText.classList.add(this.showAllTextClass)\n this.$showAllButton.appendChild(this.$showAllText)\n\n // Handle click events on the show/hide all button\n this.$showAllButton.addEventListener('click', () =>\n this.onShowOrHideAllToggle()\n )\n\n // Handle 'beforematch' events, if the user agent supports them\n if ('onbeforematch' in document) {\n document.addEventListener('beforematch', (event) =>\n this.onBeforeMatch(event)\n )\n }\n }\n\n /**\n * Initialise section headers\n *\n * @private\n */\n initSectionHeaders() {\n this.$sections.forEach(($section, i) => {\n const $header = $section.querySelector(`.${this.sectionHeaderClass}`)\n if (!$header) {\n throw new ElementError({\n component: Accordion,\n identifier: `Section headers (\\`<div class=\"${this.sectionHeaderClass}\">\\`)`\n })\n }\n\n // Set header attributes\n this.constructHeaderMarkup($header, i)\n this.setExpanded(this.isExpanded($section), $section)\n\n // Handle events\n $header.addEventListener('click', () => this.onSectionToggle($section))\n\n // See if there is any state stored in sessionStorage and set the sections\n // to open or closed.\n this.setInitialState($section)\n })\n }\n\n /**\n * Construct section header\n *\n * @private\n * @param {Element} $header - Section header\n * @param {number} index - Section index\n */\n constructHeaderMarkup($header, index) {\n const $span = $header.querySelector(`.${this.sectionButtonClass}`)\n const $heading = $header.querySelector(`.${this.sectionHeadingClass}`)\n const $summary = $header.querySelector(`.${this.sectionSummaryClass}`)\n\n if (!$heading) {\n throw new ElementError({\n component: Accordion,\n identifier: `Section heading (\\`.${this.sectionHeadingClass}\\`)`\n })\n }\n\n if (!$span) {\n throw new ElementError({\n component: Accordion,\n identifier: `Section button placeholder (\\`<span class=\"${this.sectionButtonClass}\">\\`)`\n })\n }\n\n // Create a button element that will replace the\n // '.govuk-accordion__section-button' span\n const $button = document.createElement('button')\n $button.setAttribute('type', 'button')\n $button.setAttribute(\n 'aria-controls',\n `${this.$root.id}-content-${index + 1}`\n )\n\n // Copy all attributes from $span to $button (except `id`, which gets added\n // to the `$headingText` element)\n for (const attr of Array.from($span.attributes)) {\n if (attr.name !== 'id') {\n $button.setAttribute(attr.name, attr.value)\n }\n }\n\n // Create container for heading text so it can be styled\n const $headingText = document.createElement('span')\n $headingText.classList.add(this.sectionHeadingTextClass)\n // Copy the span ID to the heading text to allow it to be referenced by\n // `aria-labelledby` on the hidden content area without \"Show this section\"\n $headingText.id = $span.id\n\n // Create an inner heading text container to limit the width of the focus\n // state\n const $headingTextFocus = document.createElement('span')\n $headingTextFocus.classList.add(this.sectionHeadingTextFocusClass)\n $headingText.appendChild($headingTextFocus)\n // span could contain HTML elements\n // (see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#phrasing-content)\n Array.from($span.childNodes).forEach(($child) =>\n $headingTextFocus.appendChild($child)\n )\n\n // Create container for show / hide icons and text.\n const $showHideToggle = document.createElement('span')\n $showHideToggle.classList.add(this.sectionShowHideToggleClass)\n // Tell Google not to index the 'show' text as part of the heading. Must be\n // set on the element before it's added to the DOM.\n // See https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#data-nosnippet-attr\n $showHideToggle.setAttribute('data-nosnippet', '')\n // Create an inner container to limit the width of the focus state\n const $showHideToggleFocus = document.createElement('span')\n $showHideToggleFocus.classList.add(this.sectionShowHideToggleFocusClass)\n $showHideToggle.appendChild($showHideToggleFocus)\n // Create wrapper for the show / hide text. Append text after the show/hide icon\n const $showHideText = document.createElement('span')\n const $showHideIcon = document.createElement('span')\n $showHideIcon.classList.add(this.upChevronIconClass)\n $showHideToggleFocus.appendChild($showHideIcon)\n $showHideText.classList.add(this.sectionShowHideTextClass)\n $showHideToggleFocus.appendChild($showHideText)\n\n // Append elements to the button:\n // 1. Heading text\n // 2. Punctuation\n // 3. (Optional: Summary line followed by punctuation)\n // 4. Show / hide toggle\n $button.appendChild($headingText)\n $button.appendChild(this.getButtonPunctuationEl())\n\n // If summary content exists add to DOM in correct order\n if ($summary) {\n // Create a new `span` element and copy the summary line content from the\n // original `div` to the new `span`. This is because the summary line text\n // is now inside a button element, which can only contain phrasing\n // content.\n const $summarySpan = document.createElement('span')\n // Create an inner summary container to limit the width of the summary\n // focus state\n const $summarySpanFocus = document.createElement('span')\n $summarySpanFocus.classList.add(this.sectionSummaryFocusClass)\n $summarySpan.appendChild($summarySpanFocus)\n\n // Get original attributes, and pass them to the replacement\n for (const attr of Array.from($summary.attributes)) {\n $summarySpan.setAttribute(attr.name, attr.value)\n }\n\n // Copy original contents of summary to the new summary span\n Array.from($summary.childNodes).forEach(($child) =>\n $summarySpanFocus.appendChild($child)\n )\n\n // Replace the original summary `div` with the new summary `span`\n $summary.remove()\n\n $button.appendChild($summarySpan)\n $button.appendChild(this.getButtonPunctuationEl())\n }\n\n $button.appendChild($showHideToggle)\n\n $heading.removeChild($span)\n $heading.appendChild($button)\n }\n\n /**\n * When a section is opened by the user agent via the 'beforematch' event\n *\n * @private\n * @param {Event} event - Generic event\n */\n onBeforeMatch(event) {\n const $fragment = event.target\n\n // Handle elements with `.closest()` support only\n if (!($fragment instanceof Element)) {\n return\n }\n\n // Handle when fragment is inside section\n const $section = $fragment.closest(`.${this.sectionClass}`)\n if ($section) {\n this.setExpanded(true, $section)\n }\n }\n\n /**\n * When section toggled, set and store state\n *\n * @private\n * @param {Element} $section - Section element\n */\n onSectionToggle($section) {\n const nowExpanded = !this.isExpanded($section)\n this.setExpanded(nowExpanded, $section)\n\n // Store the state in sessionStorage when a change is triggered\n this.storeState($section, nowExpanded)\n }\n\n /**\n * When Open/Close All toggled, set and store state\n *\n * @private\n */\n onShowOrHideAllToggle() {\n const nowExpanded = !this.areAllSectionsOpen()\n\n this.$sections.forEach(($section) => {\n this.setExpanded(nowExpanded, $section)\n this.storeState($section, nowExpanded)\n })\n\n this.updateShowAllButton(nowExpanded)\n }\n\n /**\n * Set section attributes when opened/closed\n *\n * @private\n * @param {boolean} expanded - Section expanded\n * @param {Element} $section - Section element\n */\n setExpanded(expanded, $section) {\n const $showHideIcon = $section.querySelector(`.${this.upChevronIconClass}`)\n const $showHideText = $section.querySelector(\n `.${this.sectionShowHideTextClass}`\n )\n const $button = $section.querySelector(`.${this.sectionButtonClass}`)\n const $content = $section.querySelector(`.${this.sectionContentClass}`)\n\n if (!$content) {\n throw new ElementError({\n component: Accordion,\n identifier: `Section content (\\`<div class=\"${this.sectionContentClass}\">\\`)`\n })\n }\n\n if (!$showHideIcon || !$showHideText || !$button) {\n // Return early for elements we create\n return\n }\n\n const newButtonText = expanded\n ? this.i18n.t('hideSection')\n : this.i18n.t('showSection')\n\n $showHideText.textContent = newButtonText\n $button.setAttribute('aria-expanded', `${expanded}`)\n\n // Update aria-label combining\n const ariaLabelParts = []\n\n const $headingText = $section.querySelector(\n `.${this.sectionHeadingTextClass}`\n )\n if ($headingText) {\n ariaLabelParts.push(`${$headingText.textContent}`.trim())\n }\n\n const $summary = $section.querySelector(`.${this.sectionSummaryClass}`)\n if ($summary) {\n ariaLabelParts.push(`${$summary.textContent}`.trim())\n }\n\n const ariaLabelMessage = expanded\n ? this.i18n.t('hideSectionAriaLabel')\n : this.i18n.t('showSectionAriaLabel')\n ariaLabelParts.push(ariaLabelMessage)\n\n /*\n * Join with a comma to add pause for assistive technology.\n * Example: [heading]Section A ,[pause] Show this section.\n * https://accessibility.blog.gov.uk/2017/12/18/what-working-on-gov-uk-navigation-taught-us-about-accessibility/\n */\n $button.setAttribute('aria-label', ariaLabelParts.join(' , '))\n\n // Swap icon, change class\n if (expanded) {\n $content.removeAttribute('hidden')\n $section.classList.add(this.sectionExpandedClass)\n $showHideIcon.classList.remove(this.downChevronIconClass)\n } else {\n $content.setAttribute('hidden', 'until-found')\n $section.classList.remove(this.sectionExpandedClass)\n $showHideIcon.classList.add(this.downChevronIconClass)\n }\n\n // See if \"Show all sections\" button text should be updated\n this.updateShowAllButton(this.areAllSectionsOpen())\n }\n\n /**\n * Get state of section\n *\n * @private\n * @param {Element} $section - Section element\n * @returns {boolean} True if expanded\n */\n isExpanded($section) {\n return $section.classList.contains(this.sectionExpandedClass)\n }\n\n /**\n * Check if all sections are open\n *\n * @private\n * @returns {boolean} True if all sections are open\n */\n areAllSectionsOpen() {\n return Array.from(this.$sections).every(($section) =>\n this.isExpanded($section)\n )\n }\n\n /**\n * Update \"Show all sections\" button\n *\n * @private\n * @param {boolean} expanded - Section expanded\n */\n updateShowAllButton(expanded) {\n if (!this.$showAllButton || !this.$showAllText || !this.$showAllIcon) {\n return\n }\n\n this.$showAllButton.setAttribute('aria-expanded', expanded.toString())\n this.$showAllText.textContent = expanded\n ? this.i18n.t('hideAllSections')\n : this.i18n.t('showAllSections')\n this.$showAllIcon.classList.toggle(this.downChevronIconClass, !expanded)\n }\n\n /**\n * Get the identifier for a section\n *\n * We need a unique way of identifying each content in the Accordion.\n * Since an `#id` should be unique and an `id` is required for `aria-`\n * attributes `id` can be safely used.\n *\n * @param {Element} $section - Section element\n * @returns {string | undefined | null} Identifier for section\n */\n getIdentifier($section) {\n const $button = $section.querySelector(`.${this.sectionButtonClass}`)\n\n return $button?.getAttribute('aria-controls')\n }\n\n /**\n * Set the state of the accordions in sessionStorage\n *\n * @private\n * @param {Element} $section - Section element\n * @param {boolean} isExpanded - Whether the section is expanded\n */\n storeState($section, isExpanded) {\n if (!this.config.rememberExpanded) {\n return\n }\n\n const id = this.getIdentifier($section)\n\n if (id) {\n try {\n window.sessionStorage.setItem(id, isExpanded.toString())\n } catch (exception) {}\n }\n }\n\n /**\n * Read the state of the accordions from sessionStorage\n *\n * @private\n * @param {Element} $section - Section element\n */\n setInitialState($section) {\n if (!this.config.rememberExpanded) {\n return\n }\n\n const id = this.getIdentifier($section)\n\n if (id) {\n try {\n const state = window.sessionStorage.getItem(id)\n\n if (state !== null) {\n this.setExpanded(state === 'true', $section)\n }\n } catch (exception) {}\n }\n }\n\n /**\n * Create an element to improve semantics of the section button with\n * punctuation\n *\n * Adding punctuation to the button can also improve its general semantics by\n * dividing its contents into thematic chunks. See\n * https://github.com/alphagov/govuk-frontend/issues/2327#issuecomment-922957442\n *\n * @private\n * @returns {Element} DOM element\n */\n getButtonPunctuationEl() {\n const $punctuationEl = document.createElement('span')\n $punctuationEl.classList.add(\n 'govuk-visually-hidden',\n this.sectionHeadingDividerClass\n )\n $punctuationEl.textContent = ', '\n return $punctuationEl\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-accordion'\n\n /**\n * Accordion default config\n *\n * @see {@link AccordionConfig}\n * @constant\n * @type {AccordionConfig}\n */\n static defaults = Object.freeze({\n i18n: {\n hideAllSections: 'Hide all sections',\n hideSection: 'Hide',\n hideSectionAriaLabel: 'Hide this section',\n showAllSections: 'Show all sections',\n showSection: 'Show',\n showSectionAriaLabel: 'Show this section'\n },\n rememberExpanded: true\n })\n\n /**\n * Accordion config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n i18n: { type: 'object' },\n rememberExpanded: { type: 'boolean' }\n }\n })\n}\n\n/**\n * Accordion config\n *\n * @see {@link Accordion.defaults}\n * @typedef {object} AccordionConfig\n * @property {AccordionTranslations} [i18n=Accordion.defaults.i18n] - Accordion translations\n * @property {boolean} [rememberExpanded] - Whether the expanded and collapsed\n * state of each section is remembered and restored when navigating.\n */\n\n/**\n * Accordion translations\n *\n * @see {@link Accordion.defaults.i18n}\n * @typedef {object} AccordionTranslations\n *\n * Messages used by the component for the labels of its buttons. This includes\n * the visible text shown on screen, and text to help assistive technology users\n * for the buttons toggling each section.\n * @property {string} [hideAllSections] - The text content for the 'Hide all\n * sections' button, used when at least one section is expanded.\n * @property {string} [hideSection] - The text content for the 'Hide'\n * button, used when a section is expanded.\n * @property {string} [hideSectionAriaLabel] - The text content appended to the\n * 'Hide' button's accessible name when a section is expanded.\n * @property {string} [showAllSections] - The text content for the 'Show all\n * sections' button, used when all sections are collapsed.\n * @property {string} [showSection] - The text content for the 'Show'\n * button, used when a section is collapsed.\n * @property {string} [showSectionAriaLabel] - The text content appended to the\n * 'Show' button's accessible name when a section is expanded.\n */\n\n/**\n * @typedef {import('../../common/index.mjs').Schema} Schema\n */\n","import { mergeConfigs } from '../../common/index.mjs'\nimport { normaliseDataset } from '../../common/normalise-dataset.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\nconst DEBOUNCE_TIMEOUT_IN_SECONDS = 1\n\n/**\n * JavaScript enhancements for the Button component\n *\n * @preserve\n */\nexport class Button extends GOVUKFrontendComponent {\n /**\n * @private\n * @type {ButtonConfig}\n */\n config\n\n /**\n * @private\n * @type {number | null}\n */\n debounceFormSubmitTimer = null\n\n /**\n * @param {Element | null} $root - HTML element to use for button\n * @param {ButtonConfig} [config] - Button config\n */\n constructor($root, config = {}) {\n super($root)\n\n this.config = mergeConfigs(\n Button.defaults,\n config,\n normaliseDataset(Button, this.$root.dataset)\n )\n\n this.$root.addEventListener('keydown', (event) => this.handleKeyDown(event))\n this.$root.addEventListener('click', (event) => this.debounce(event))\n }\n\n /**\n * Trigger a click event when the space key is pressed\n *\n * Some screen readers tell users they can use the space bar to activate\n * things with the 'button' role, so we need to match the functionality of\n * native HTML buttons.\n *\n * See https://github.com/alphagov/govuk_elements/pull/272#issuecomment-233028270\n *\n * @private\n * @param {KeyboardEvent} event - Keydown event\n */\n handleKeyDown(event) {\n const $target = event.target\n\n // Handle space bar only\n if (event.key !== ' ') {\n return\n }\n\n // Handle elements with [role=\"button\"] only\n if (\n $target instanceof HTMLElement &&\n $target.getAttribute('role') === 'button'\n ) {\n event.preventDefault() // prevent the page from scrolling\n $target.click()\n }\n }\n\n /**\n * Debounce double-clicks\n *\n * If the click quickly succeeds a previous click then nothing will happen.\n * This stops people accidentally causing multiple form submissions by double\n * clicking buttons.\n *\n * @private\n * @param {MouseEvent} event - Mouse click event\n * @returns {undefined | false} Returns undefined, or false when debounced\n */\n debounce(event) {\n // Check the button that was clicked has preventDoubleClick enabled\n if (!this.config.preventDoubleClick) {\n return\n }\n\n // If the timer is still running, prevent the click from submitting the form\n if (this.debounceFormSubmitTimer) {\n event.preventDefault()\n return false\n }\n\n this.debounceFormSubmitTimer = window.setTimeout(() => {\n this.debounceFormSubmitTimer = null\n }, DEBOUNCE_TIMEOUT_IN_SECONDS * 1000)\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-button'\n\n /**\n * Button default config\n *\n * @see {@link ButtonConfig}\n * @constant\n * @type {ButtonConfig}\n */\n static defaults = Object.freeze({\n preventDoubleClick: false\n })\n\n /**\n * Button config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n preventDoubleClick: { type: 'boolean' }\n }\n })\n}\n\n/**\n * Button config\n *\n * @typedef {object} ButtonConfig\n * @property {boolean} [preventDoubleClick=false] - Prevent accidental double\n * clicks on submit buttons from submitting forms multiple times.\n */\n\n/**\n * @typedef {import('../../common/index.mjs').Schema} Schema\n */\n","/**\n * Returns the value of the given attribute closest to the given element (including itself)\n *\n * @internal\n * @param {Element} $element - The element to start walking the DOM tree up\n * @param {string} attributeName - The name of the attribute\n * @returns {string | null} Attribute value\n */\nexport function closestAttributeValue($element, attributeName) {\n const $closestElementWithAttribute = $element.closest(`[${attributeName}]`)\n return $closestElementWithAttribute\n ? $closestElementWithAttribute.getAttribute(attributeName)\n : null\n}\n","import { closestAttributeValue } from '../../common/closest-attribute-value.mjs'\nimport {\n formatErrorMessage,\n mergeConfigs,\n validateConfig\n} from '../../common/index.mjs'\nimport { normaliseDataset } from '../../common/normalise-dataset.mjs'\nimport { ConfigError, ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\nimport { I18n } from '../../i18n.mjs'\n\n/**\n * Character count component\n *\n * Tracks the number of characters or words in the `.govuk-js-character-count`\n * `<textarea>` inside the element. Displays a message with the remaining number\n * of characters/words available, or the number of characters/words in excess.\n *\n * You can configure the message to only appear after a certain percentage\n * of the available characters/words has been entered.\n *\n * @preserve\n */\nexport class CharacterCount extends GOVUKFrontendComponent {\n /** @private */\n $textarea\n\n /** @private */\n $visibleCountMessage\n\n /** @private */\n $screenReaderCountMessage\n\n /**\n * @private\n * @type {number | null}\n */\n lastInputTimestamp = null\n\n /** @private */\n lastInputValue = ''\n\n /**\n * @private\n * @type {number | null}\n */\n valueChecker = null\n\n /**\n * @private\n * @type {CharacterCountConfig}\n */\n config\n\n /** @private */\n i18n\n\n /** @private */\n maxLength\n\n /**\n * @param {Element | null} $root - HTML element to use for character count\n * @param {CharacterCountConfig} [config] - Character count config\n */\n constructor($root, config = {}) {\n super($root)\n\n const $textarea = this.$root.querySelector('.govuk-js-character-count')\n if (\n !(\n $textarea instanceof HTMLTextAreaElement ||\n $textarea instanceof HTMLInputElement\n )\n ) {\n throw new ElementError({\n component: CharacterCount,\n element: $textarea,\n expectedType: 'HTMLTextareaElement or HTMLInputElement',\n identifier: 'Form field (`.govuk-js-character-count`)'\n })\n }\n\n // Read config set using dataset ('data-' values)\n const datasetConfig = normaliseDataset(CharacterCount, this.$root.dataset)\n\n // To ensure data-attributes take complete precedence, even if they change\n // the type of count, we need to reset the `maxlength` and `maxwords` from\n // the JavaScript config.\n //\n // We can't mutate `config`, though, as it may be shared across multiple\n // components inside `initAll`.\n /** @type {CharacterCountConfig} */\n let configOverrides = {}\n if ('maxwords' in datasetConfig || 'maxlength' in datasetConfig) {\n configOverrides = {\n maxlength: undefined,\n maxwords: undefined\n }\n }\n\n this.config = mergeConfigs(\n CharacterCount.defaults,\n config,\n configOverrides,\n datasetConfig\n )\n\n // Check for valid config\n const errors = validateConfig(CharacterCount.schema, this.config)\n if (errors[0]) {\n throw new ConfigError(formatErrorMessage(CharacterCount, errors[0]))\n }\n\n this.i18n = new I18n(this.config.i18n, {\n // Read the fallback if necessary rather than have it set in the defaults\n locale: closestAttributeValue(this.$root, 'lang')\n })\n\n // Determine the limit attribute (characters or words)\n this.maxLength = this.config.maxwords ?? this.config.maxlength ?? Infinity\n\n this.$textarea = $textarea\n\n const textareaDescriptionId = `${this.$textarea.id}-info`\n const $textareaDescription = document.getElementById(textareaDescriptionId)\n if (!$textareaDescription) {\n throw new ElementError({\n component: CharacterCount,\n element: $textareaDescription,\n identifier: `Count message (\\`id=\"${textareaDescriptionId}\"\\`)`\n })\n }\n\n // Inject a description for the textarea if none is present already\n // for when the component was rendered with no maxlength, maxwords\n // nor custom textareaDescriptionText\n if (`${$textareaDescription.textContent}`.match(/^\\s*$/)) {\n $textareaDescription.textContent = this.i18n.t('textareaDescription', {\n count: this.maxLength\n })\n }\n\n // Move the textarea description to be immediately after the textarea\n // Kept for backwards compatibility\n this.$textarea.insertAdjacentElement('afterend', $textareaDescription)\n\n // Create the *screen reader* specific live-updating counter\n // This doesn't need any styling classes, as it is never visible\n const $screenReaderCountMessage = document.createElement('div')\n $screenReaderCountMessage.className =\n 'govuk-character-count__sr-status govuk-visually-hidden'\n $screenReaderCountMessage.setAttribute('aria-live', 'polite')\n this.$screenReaderCountMessage = $screenReaderCountMessage\n $textareaDescription.insertAdjacentElement(\n 'afterend',\n $screenReaderCountMessage\n )\n\n // Create our live-updating counter element, copying the classes from the\n // textarea description for backwards compatibility as these may have been\n // configured\n const $visibleCountMessage = document.createElement('div')\n $visibleCountMessage.className = $textareaDescription.className\n $visibleCountMessage.classList.add('govuk-character-count__status')\n $visibleCountMessage.setAttribute('aria-hidden', 'true')\n this.$visibleCountMessage = $visibleCountMessage\n $textareaDescription.insertAdjacentElement('afterend', $visibleCountMessage)\n\n // Hide the textarea description\n $textareaDescription.classList.add('govuk-visually-hidden')\n\n // Remove hard limit if set\n this.$textarea.removeAttribute('maxlength')\n\n this.bindChangeEvents()\n\n // When the page is restored after navigating 'back' in some browsers the\n // state of form controls is not restored until *after* the DOMContentLoaded\n // event is fired, so we need to sync after the pageshow event.\n window.addEventListener('pageshow', () => this.updateCountMessage())\n\n // Although we've set up handlers to sync state on the pageshow event, init\n // could be called after those events have fired, for example if they are\n // added to the page dynamically, so update now too.\n this.updateCountMessage()\n }\n\n /**\n * Bind change events\n *\n * Set up event listeners on the $textarea so that the count messages update\n * when the user types.\n *\n * @private\n */\n bindChangeEvents() {\n this.$textarea.addEventListener('keyup', () => this.handleKeyUp())\n\n // Bind focus/blur events to start/stop polling\n this.$textarea.addEventListener('focus', () => this.handleFocus())\n this.$textarea.addEventListener('blur', () => this.handleBlur())\n }\n\n /**\n * Handle key up event\n *\n * Update the visible character counter and keep track of when the last update\n * happened for each keypress\n *\n * @private\n */\n handleKeyUp() {\n this.updateVisibleCountMessage()\n this.lastInputTimestamp = Date.now()\n }\n\n /**\n * Handle focus event\n *\n * Speech recognition software such as Dragon NaturallySpeaking will modify\n * the fields by directly changing its `value`. These changes don't trigger\n * events in JavaScript, so we need to poll to handle when and if they occur.\n *\n * Once the keyup event hasn't been detected for at least 1000 ms (1s), check\n * if the textarea value has changed and update the count message if it has.\n *\n * This is so that the update triggered by the manual comparison doesn't\n * conflict with debounced KeyboardEvent updates.\n *\n * @private\n */\n handleFocus() {\n this.valueChecker = window.setInterval(() => {\n if (\n !this.lastInputTimestamp ||\n Date.now() - 500 >= this.lastInputTimestamp\n ) {\n this.updateIfValueChanged()\n }\n }, 1000)\n }\n\n /**\n * Handle blur event\n *\n * Stop checking the textarea value once the textarea no longer has focus\n *\n * @private\n */\n handleBlur() {\n // Cancel value checking on blur\n if (this.valueChecker) {\n window.clearInterval(this.valueChecker)\n }\n }\n\n /**\n * Update count message if textarea value has changed\n *\n * @private\n */\n updateIfValueChanged() {\n if (this.$textarea.value !== this.lastInputValue) {\n this.lastInputValue = this.$textarea.value\n this.updateCountMessage()\n }\n }\n\n /**\n * Update count message\n *\n * Helper function to update both the visible and screen reader-specific\n * counters simultaneously (e.g. on init)\n *\n * @private\n */\n updateCountMessage() {\n this.updateVisibleCountMessage()\n this.updateScreenReaderCountMessage()\n }\n\n /**\n * Update visible count message\n *\n * @private\n */\n updateVisibleCountMessage() {\n const remainingNumber = this.maxLength - this.count(this.$textarea.value)\n const isError = remainingNumber < 0\n\n // If input is over the threshold, remove the disabled class which renders\n // the counter invisible.\n this.$visibleCountMessage.classList.toggle(\n 'govuk-character-count__message--disabled',\n !this.isOverThreshold()\n )\n\n // Update styles\n this.$textarea.classList.toggle('govuk-textarea--error', isError)\n this.$visibleCountMessage.classList.toggle('govuk-error-message', isError)\n this.$visibleCountMessage.classList.toggle('govuk-hint', !isError)\n\n // Update message\n this.$visibleCountMessage.textContent = this.getCountMessage()\n }\n\n /**\n * Update screen reader count message\n *\n * @private\n */\n updateScreenReaderCountMessage() {\n // If over the threshold, remove the aria-hidden attribute, allowing screen\n // readers to announce the content of the element.\n if (this.isOverThreshold()) {\n this.$screenReaderCountMessage.removeAttribute('aria-hidden')\n } else {\n this.$screenReaderCountMessage.setAttribute('aria-hidden', 'true')\n }\n\n // Update message\n this.$screenReaderCountMessage.textContent = this.getCountMessage()\n }\n\n /**\n * Count the number of characters (or words, if `config.maxwords` is set)\n * in the given text\n *\n * @private\n * @param {string} text - The text to count the characters of\n * @returns {number} the number of characters (or words) in the text\n */\n count(text) {\n if (this.config.maxwords) {\n const tokens = text.match(/\\S+/g) ?? [] // Matches consecutive non-whitespace chars\n return tokens.length\n }\n\n return text.length\n }\n\n /**\n * Get count message\n *\n * @private\n * @returns {string} Status message\n */\n getCountMessage() {\n const remainingNumber = this.maxLength - this.count(this.$textarea.value)\n const countType = this.config.maxwords ? 'words' : 'characters'\n return this.formatCountMessage(remainingNumber, countType)\n }\n\n /**\n * Formats the message shown to users according to what's counted\n * and how many remain\n *\n * @private\n * @param {number} remainingNumber - The number of words/characaters remaining\n * @param {string} countType - \"words\" or \"characters\"\n * @returns {string} Status message\n */\n formatCountMessage(remainingNumber, countType) {\n if (remainingNumber === 0) {\n return this.i18n.t(`${countType}AtLimit`)\n }\n\n const translationKeySuffix =\n remainingNumber < 0 ? 'OverLimit' : 'UnderLimit'\n\n return this.i18n.t(`${countType}${translationKeySuffix}`, {\n count: Math.abs(remainingNumber)\n })\n }\n\n /**\n * Check if count is over threshold\n *\n * Checks whether the value is over the configured threshold for the input.\n * If there is no configured threshold, it is set to 0 and this function will\n * always return true.\n *\n * @private\n * @returns {boolean} true if the current count is over the config.threshold\n * (or no threshold is set)\n */\n isOverThreshold() {\n // No threshold means we're always above threshold so save some computation\n if (!this.config.threshold) {\n return true\n }\n\n // Determine the remaining number of characters/words\n const currentLength = this.count(this.$textarea.value)\n const maxLength = this.maxLength\n\n const thresholdValue = (maxLength * this.config.threshold) / 100\n\n return thresholdValue <= currentLength\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-character-count'\n\n /**\n * Character count default config\n *\n * @see {@link CharacterCountConfig}\n * @constant\n * @type {CharacterCountConfig}\n */\n static defaults = Object.freeze({\n threshold: 0,\n i18n: {\n // Characters\n charactersUnderLimit: {\n one: 'You have %{count} character remaining',\n other: 'You have %{count} characters remaining'\n },\n charactersAtLimit: 'You have 0 characters remaining',\n charactersOverLimit: {\n one: 'You have %{count} character too many',\n other: 'You have %{count} characters too many'\n },\n // Words\n wordsUnderLimit: {\n one: 'You have %{count} word remaining',\n other: 'You have %{count} words remaining'\n },\n wordsAtLimit: 'You have 0 words remaining',\n wordsOverLimit: {\n one: 'You have %{count} word too many',\n other: 'You have %{count} words too many'\n },\n textareaDescription: {\n other: ''\n }\n }\n })\n\n /**\n * Character count config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n i18n: { type: 'object' },\n maxwords: { type: 'number' },\n maxlength: { type: 'number' },\n threshold: { type: 'number' }\n },\n anyOf: [\n {\n required: ['maxwords'],\n errorMessage: 'Either \"maxlength\" or \"maxwords\" must be provided'\n },\n {\n required: ['maxlength'],\n errorMessage: 'Either \"maxlength\" or \"maxwords\" must be provided'\n }\n ]\n })\n}\n\n/**\n * Character count config\n *\n * @see {@link CharacterCount.defaults}\n * @typedef {object} CharacterCountConfig\n * @property {number} [maxlength] - The maximum number of characters.\n * If maxwords is provided, the maxlength option will be ignored.\n * @property {number} [maxwords] - The maximum number of words. If maxwords is\n * provided, the maxlength option will be ignored.\n * @property {number} [threshold=0] - The percentage value of the limit at\n * which point the count message is displayed. If this attribute is set, the\n * count message will be hidden by default.\n * @property {CharacterCountTranslations} [i18n=CharacterCount.defaults.i18n] - Character count translations\n */\n\n/**\n * Character count translations\n *\n * @see {@link CharacterCount.defaults.i18n}\n * @typedef {object} CharacterCountTranslations\n *\n * Messages shown to users as they type. It provides feedback on how many words\n * or characters they have remaining or if they are over the limit. This also\n * includes a message used as an accessible description for the textarea.\n * @property {TranslationPluralForms} [charactersUnderLimit] - Message displayed\n * when the number of characters is under the configured maximum, `maxlength`.\n * This message is displayed visually and through assistive technologies. The\n * component will replace the `%{count}` placeholder with the number of\n * remaining characters. This is a [pluralised list of\n * messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).\n * @property {string} [charactersAtLimit] - Message displayed when the number of\n * characters reaches the configured maximum, `maxlength`. This message is\n * displayed visually and through assistive technologies.\n * @property {TranslationPluralForms} [charactersOverLimit] - Message displayed\n * when the number of characters is over the configured maximum, `maxlength`.\n * This message is displayed visually and through assistive technologies. The\n * component will replace the `%{count}` placeholder with the number of\n * remaining characters. This is a [pluralised list of\n * messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).\n * @property {TranslationPluralForms} [wordsUnderLimit] - Message displayed when\n * the number of words is under the configured maximum, `maxlength`. This\n * message is displayed visually and through assistive technologies. The\n * component will replace the `%{count}` placeholder with the number of\n * remaining words. This is a [pluralised list of\n * messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).\n * @property {string} [wordsAtLimit] - Message displayed when the number of\n * words reaches the configured maximum, `maxlength`. This message is\n * displayed visually and through assistive technologies.\n * @property {TranslationPluralForms} [wordsOverLimit] - Message displayed when\n * the number of words is over the configured maximum, `maxlength`. This\n * message is displayed visually and through assistive technologies. The\n * component will replace the `%{count}` placeholder with the number of\n * remaining words. This is a [pluralised list of\n * messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).\n * @property {TranslationPluralForms} [textareaDescription] - Message made\n * available to assistive technologies, if none is already present in the\n * HTML, to describe that the component accepts only a limited amount of\n * content. It is visible on the page when JavaScript is unavailable. The\n * component will replace the `%{count}` placeholder with the value of the\n * `maxlength` or `maxwords` parameter.\n */\n\n/**\n * @typedef {import('../../common/index.mjs').Schema} Schema\n * @typedef {import('../../i18n.mjs').TranslationPluralForms} TranslationPluralForms\n */\n","import { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Checkboxes component\n *\n * @preserve\n */\nexport class Checkboxes extends GOVUKFrontendComponent {\n /** @private */\n $inputs\n\n /**\n * Checkboxes can be associated with a 'conditionally revealed' content block\n * – for example, a checkbox for 'Phone' could reveal an additional form field\n * for the user to enter their phone number.\n *\n * These associations are made using a `data-aria-controls` attribute, which\n * is promoted to an aria-controls attribute during initialisation.\n *\n * We also need to restore the state of any conditional reveals on the page\n * (for example if the user has navigated back), and set up event handlers to\n * keep the reveal in sync with the checkbox state.\n *\n * @param {Element | null} $root - HTML element to use for checkboxes\n */\n constructor($root) {\n super($root)\n\n const $inputs = this.$root.querySelectorAll('input[type=\"checkbox\"]')\n if (!$inputs.length) {\n throw new ElementError({\n component: Checkboxes,\n identifier: 'Form inputs (`<input type=\"checkbox\">`)'\n })\n }\n\n this.$inputs = $inputs\n\n this.$inputs.forEach(($input) => {\n const targetId = $input.getAttribute('data-aria-controls')\n\n // Skip radios without data-aria-controls attributes\n if (!targetId) {\n return\n }\n\n // Throw if target conditional element does not exist.\n if (!document.getElementById(targetId)) {\n throw new ElementError({\n component: Checkboxes,\n identifier: `Conditional reveal (\\`id=\"${targetId}\"\\`)`\n })\n }\n\n // Promote the data-aria-controls attribute to a aria-controls attribute\n // so that the relationship is exposed in the AOM\n $input.setAttribute('aria-controls', targetId)\n $input.removeAttribute('data-aria-controls')\n })\n\n // When the page is restored after navigating 'back' in some browsers the\n // state of form controls is not restored until *after* the DOMContentLoaded\n // event is fired, so we need to sync after the pageshow event.\n window.addEventListener('pageshow', () => this.syncAllConditionalReveals())\n\n // Although we've set up handlers to sync state on the pageshow event, init\n // could be called after those events have fired, for example if they are\n // added to the page dynamically, so sync now too.\n this.syncAllConditionalReveals()\n\n // Handle events\n this.$root.addEventListener('click', (event) => this.handleClick(event))\n }\n\n /**\n * Sync the conditional reveal states for all checkboxes in this component.\n *\n * @private\n */\n syncAllConditionalReveals() {\n this.$inputs.forEach(($input) =>\n this.syncConditionalRevealWithInputState($input)\n )\n }\n\n /**\n * Sync conditional reveal with the input state\n *\n * Synchronise the visibility of the conditional reveal, and its accessible\n * state, with the input's checked state.\n *\n * @private\n * @param {HTMLInputElement} $input - Checkbox input\n */\n syncConditionalRevealWithInputState($input) {\n const targetId = $input.getAttribute('aria-controls')\n if (!targetId) {\n return\n }\n\n const $target = document.getElementById(targetId)\n if ($target?.classList.contains('govuk-checkboxes__conditional')) {\n const inputIsChecked = $input.checked\n\n $input.setAttribute('aria-expanded', inputIsChecked.toString())\n $target.classList.toggle(\n 'govuk-checkboxes__conditional--hidden',\n !inputIsChecked\n )\n }\n }\n\n /**\n * Uncheck other checkboxes\n *\n * Find any other checkbox inputs with the same name value, and uncheck them.\n * This is useful for when a “None of these\" checkbox is checked.\n *\n * @private\n * @param {HTMLInputElement} $input - Checkbox input\n */\n unCheckAllInputsExcept($input) {\n const allInputsWithSameName = document.querySelectorAll(\n `input[type=\"checkbox\"][name=\"${$input.name}\"]`\n )\n\n allInputsWithSameName.forEach(($inputWithSameName) => {\n const hasSameFormOwner = $input.form === $inputWithSameName.form\n if (hasSameFormOwner && $inputWithSameName !== $input) {\n $inputWithSameName.checked = false\n this.syncConditionalRevealWithInputState($inputWithSameName)\n }\n })\n }\n\n /**\n * Uncheck exclusive checkboxes\n *\n * Find any checkbox inputs with the same name value and the 'exclusive'\n * behaviour, and uncheck them. This helps prevent someone checking both a\n * regular checkbox and a \"None of these\" checkbox in the same fieldset.\n *\n * @private\n * @param {HTMLInputElement} $input - Checkbox input\n */\n unCheckExclusiveInputs($input) {\n const allInputsWithSameNameAndExclusiveBehaviour =\n document.querySelectorAll(\n `input[data-behaviour=\"exclusive\"][type=\"checkbox\"][name=\"${$input.name}\"]`\n )\n\n allInputsWithSameNameAndExclusiveBehaviour.forEach(($exclusiveInput) => {\n const hasSameFormOwner = $input.form === $exclusiveInput.form\n if (hasSameFormOwner) {\n $exclusiveInput.checked = false\n this.syncConditionalRevealWithInputState($exclusiveInput)\n }\n })\n }\n\n /**\n * Click event handler\n *\n * Handle a click within the component root – if the click occurred on a checkbox,\n * sync the state of any associated conditional reveal with the checkbox\n * state.\n *\n * @private\n * @param {MouseEvent} event - Click event\n */\n handleClick(event) {\n const $clickedInput = event.target\n\n // Ignore clicks on things that aren't checkbox inputs\n if (\n !($clickedInput instanceof HTMLInputElement) ||\n $clickedInput.type !== 'checkbox'\n ) {\n return\n }\n\n // If the checkbox conditionally-reveals some content, sync the state\n const hasAriaControls = $clickedInput.getAttribute('aria-controls')\n if (hasAriaControls) {\n this.syncConditionalRevealWithInputState($clickedInput)\n }\n\n // No further behaviour needed for unchecking\n if (!$clickedInput.checked) {\n return\n }\n\n // Handle 'exclusive' checkbox behaviour (ie \"None of these\")\n const hasBehaviourExclusive =\n $clickedInput.getAttribute('data-behaviour') === 'exclusive'\n if (hasBehaviourExclusive) {\n this.unCheckAllInputsExcept($clickedInput)\n } else {\n this.unCheckExclusiveInputs($clickedInput)\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-checkboxes'\n}\n","import {\n getFragmentFromUrl,\n mergeConfigs,\n setFocus\n} from '../../common/index.mjs'\nimport { normaliseDataset } from '../../common/normalise-dataset.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Error summary component\n *\n * Takes focus on initialisation for accessible announcement, unless disabled in\n * configuration.\n *\n * @preserve\n */\nexport class ErrorSummary extends GOVUKFrontendComponent {\n /**\n * @private\n * @type {ErrorSummaryConfig}\n */\n config\n\n /**\n * @param {Element | null} $root - HTML element to use for error summary\n * @param {ErrorSummaryConfig} [config] - Error summary config\n */\n constructor($root, config = {}) {\n super($root)\n\n this.config = mergeConfigs(\n ErrorSummary.defaults,\n config,\n normaliseDataset(ErrorSummary, this.$root.dataset)\n )\n\n /**\n * Focus the error summary\n */\n if (!this.config.disableAutoFocus) {\n setFocus(this.$root)\n }\n\n this.$root.addEventListener('click', (event) => this.handleClick(event))\n }\n\n /**\n * Click event handler\n *\n * @private\n * @param {MouseEvent} event - Click event\n */\n handleClick(event) {\n const $target = event.target\n if ($target && this.focusTarget($target)) {\n event.preventDefault()\n }\n }\n\n /**\n * Focus the target element\n *\n * By default, the browser will scroll the target into view. Because our\n * labels or legends appear above the input, this means the user will be\n * presented with an input without any context, as the label or legend will be\n * off the top of the screen.\n *\n * Manually handling the click event, scrolling the question into view and\n * then focussing the element solves this.\n *\n * This also results in the label and/or legend being announced correctly in\n * NVDA (as tested in 2018.3.2) - without this only the field type is\n * announced (e.g. \"Edit, has autocomplete\").\n *\n * @private\n * @param {EventTarget} $target - Event target\n * @returns {boolean} True if the target was able to be focussed\n */\n focusTarget($target) {\n // If the element that was clicked was not a link, return early\n if (!($target instanceof HTMLAnchorElement)) {\n return false\n }\n\n const inputId = getFragmentFromUrl($target.href)\n if (!inputId) {\n return false\n }\n\n const $input = document.getElementById(inputId)\n if (!$input) {\n return false\n }\n\n const $legendOrLabel = this.getAssociatedLegendOrLabel($input)\n if (!$legendOrLabel) {\n return false\n }\n\n // Scroll the legend or label into view *before* calling focus on the input\n // to avoid extra scrolling in browsers that don't support `preventScroll`\n // (which at time of writing is most of them...)\n $legendOrLabel.scrollIntoView()\n $input.focus({ preventScroll: true })\n\n return true\n }\n\n /**\n * Get associated legend or label\n *\n * Returns the first element that exists from this list:\n *\n * - The `<legend>` associated with the closest `<fieldset>` ancestor, as long\n * as the top of it is no more than half a viewport height away from the\n * bottom of the input\n * - The first `<label>` that is associated with the input using for=\"inputId\"\n * - The closest parent `<label>`\n *\n * @private\n * @param {Element} $input - The input\n * @returns {Element | null} Associated legend or label, or null if no\n * associated legend or label can be found\n */\n getAssociatedLegendOrLabel($input) {\n const $fieldset = $input.closest('fieldset')\n\n if ($fieldset) {\n const $legends = $fieldset.getElementsByTagName('legend')\n\n if ($legends.length) {\n const $candidateLegend = $legends[0]\n\n // If the input type is radio or checkbox, always use the legend if\n // there is one.\n if (\n $input instanceof HTMLInputElement &&\n ($input.type === 'checkbox' || $input.type === 'radio')\n ) {\n return $candidateLegend\n }\n\n // For other input types, only scroll to the fieldset’s legend (instead\n // of the label associated with the input) if the input would end up in\n // the top half of the screen.\n //\n // This should avoid situations where the input either ends up off the\n // screen, or obscured by a software keyboard.\n const legendTop = $candidateLegend.getBoundingClientRect().top\n const inputRect = $input.getBoundingClientRect()\n\n // If the browser doesn't support Element.getBoundingClientRect().height\n // or window.innerHeight (like IE8), bail and just link to the label.\n if (inputRect.height && window.innerHeight) {\n const inputBottom = inputRect.top + inputRect.height\n\n if (inputBottom - legendTop < window.innerHeight / 2) {\n return $candidateLegend\n }\n }\n }\n }\n\n return (\n document.querySelector(`label[for='${$input.getAttribute('id')}']`) ??\n $input.closest('label')\n )\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-error-summary'\n\n /**\n * Error summary default config\n *\n * @see {@link ErrorSummaryConfig}\n * @constant\n * @type {ErrorSummaryConfig}\n */\n static defaults = Object.freeze({\n disableAutoFocus: false\n })\n\n /**\n * Error summary config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n disableAutoFocus: { type: 'boolean' }\n }\n })\n}\n\n/**\n * Error summary config\n *\n * @typedef {object} ErrorSummaryConfig\n * @property {boolean} [disableAutoFocus=false] - If set to `true` the error\n * summary will not be focussed when the page loads.\n */\n\n/**\n * @typedef {import('../../common/index.mjs').Schema} Schema\n */\n","import { mergeConfigs } from '../../common/index.mjs'\nimport { normaliseDataset } from '../../common/normalise-dataset.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\nimport { I18n } from '../../i18n.mjs'\n\n/**\n * Exit this page component\n *\n * @preserve\n */\nexport class ExitThisPage extends GOVUKFrontendComponent {\n /**\n * @private\n * @type {ExitThisPageConfig}\n */\n config\n\n /** @private */\n i18n\n\n /** @private */\n $button\n\n /**\n * @private\n * @type {HTMLAnchorElement | null}\n */\n $skiplinkButton = null\n\n /**\n * @private\n * @type {HTMLElement | null}\n */\n $updateSpan = null\n\n /**\n * @private\n * @type {HTMLElement | null}\n */\n $indicatorContainer = null\n\n /**\n * @private\n * @type {HTMLElement | null}\n */\n $overlay = null\n\n /** @private */\n keypressCounter = 0\n\n /** @private */\n lastKeyWasModified = false\n\n /** @private */\n timeoutTime = 5000 // milliseconds\n\n // Store the timeout events so that we can clear them to avoid user keypresses overlapping\n // setTimeout returns an id that we can use to clear it with clearTimeout,\n // hence the 'Id' suffix\n\n /**\n * @private\n * @type {number | null}\n */\n keypressTimeoutId = null\n\n /**\n * @private\n * @type {number | null}\n */\n timeoutMessageId = null\n\n /**\n * @param {Element | null} $root - HTML element that wraps the Exit This Page button\n * @param {ExitThisPageConfig} [config] - Exit This Page config\n */\n constructor($root, config = {}) {\n super($root)\n\n const $button = this.$root.querySelector('.govuk-exit-this-page__button')\n if (!($button instanceof HTMLAnchorElement)) {\n throw new ElementError({\n component: ExitThisPage,\n element: $button,\n expectedType: 'HTMLAnchorElement',\n identifier: 'Button (`.govuk-exit-this-page__button`)'\n })\n }\n\n this.config = mergeConfigs(\n ExitThisPage.defaults,\n config,\n normaliseDataset(ExitThisPage, this.$root.dataset)\n )\n\n this.i18n = new I18n(this.config.i18n)\n this.$button = $button\n\n const $skiplinkButton = document.querySelector(\n '.govuk-js-exit-this-page-skiplink'\n )\n if ($skiplinkButton instanceof HTMLAnchorElement) {\n this.$skiplinkButton = $skiplinkButton\n }\n\n this.buildIndicator()\n this.initUpdateSpan()\n this.initButtonClickHandler()\n\n // Check to see if this has already been done by a previous initialisation of ExitThisPage\n if (!('govukFrontendExitThisPageKeypress' in document.body.dataset)) {\n document.addEventListener('keyup', this.handleKeypress.bind(this), true)\n document.body.dataset.govukFrontendExitThisPageKeypress = 'true'\n }\n\n // When the page is restored after navigating 'back' in some browsers the\n // blank overlay remains present, rendering the page unusable. Here, we check\n // to see if it's present on page (re)load, and remove it if so.\n window.addEventListener('pageshow', this.resetPage.bind(this))\n }\n\n /**\n * Create the <span> we use for screen reader announcements.\n *\n * @private\n */\n initUpdateSpan() {\n this.$updateSpan = document.createElement('span')\n this.$updateSpan.setAttribute('role', 'status')\n this.$updateSpan.className = 'govuk-visually-hidden'\n\n this.$root.appendChild(this.$updateSpan)\n }\n\n /**\n * Create button click handlers.\n *\n * @private\n */\n initButtonClickHandler() {\n // Main EtP button\n this.$button.addEventListener('click', this.handleClick.bind(this))\n\n // EtP secondary link\n if (this.$skiplinkButton) {\n this.$skiplinkButton.addEventListener(\n 'click',\n this.handleClick.bind(this)\n )\n }\n }\n\n /**\n * Create the HTML for the 'three lights' indicator on the button.\n *\n * @private\n */\n buildIndicator() {\n // Build container\n // Putting `aria-hidden` on it as it won't contain any readable information\n this.$indicatorContainer = document.createElement('div')\n this.$indicatorContainer.className = 'govuk-exit-this-page__indicator'\n this.$indicatorContainer.setAttribute('aria-hidden', 'true')\n\n // Create three 'lights' and place them within the container\n for (let i = 0; i < 3; i++) {\n const $indicator = document.createElement('div')\n $indicator.className = 'govuk-exit-this-page__indicator-light'\n this.$indicatorContainer.appendChild($indicator)\n }\n\n // Append it all to the module\n this.$button.appendChild(this.$indicatorContainer)\n }\n\n /**\n * Update whether the lights are visible and which ones are lit up depending on\n * the value of `keypressCounter`.\n *\n * @private\n */\n updateIndicator() {\n if (!this.$indicatorContainer) {\n return\n }\n\n // Show or hide the indicator container depending on keypressCounter value\n this.$indicatorContainer.classList.toggle(\n 'govuk-exit-this-page__indicator--visible',\n this.keypressCounter > 0\n )\n\n // Turn on only the indicators we want on\n const $indicators = this.$indicatorContainer.querySelectorAll(\n '.govuk-exit-this-page__indicator-light'\n )\n $indicators.forEach(($indicator, index) => {\n $indicator.classList.toggle(\n 'govuk-exit-this-page__indicator-light--on',\n index < this.keypressCounter\n )\n })\n }\n\n /**\n * Initiates the redirection away from the current page.\n * Includes the loading overlay functionality, which covers the current page with a\n * white overlay so that the contents are not visible during the loading\n * process. This is particularly important on slow network connections.\n *\n * @private\n */\n exitPage() {\n if (!this.$updateSpan) {\n return\n }\n\n this.$updateSpan.textContent = ''\n\n // Blank the page\n // As well as creating an overlay with text, we also set the body to hidden\n // to prevent screen reader and sequential navigation users potentially\n // navigating through the page behind the overlay during loading\n document.body.classList.add('govuk-exit-this-page-hide-content')\n this.$overlay = document.createElement('div')\n this.$overlay.className = 'govuk-exit-this-page-overlay'\n this.$overlay.setAttribute('role', 'alert')\n\n // we do these this way round, thus incurring a second paint, because changing\n // the element text after adding it means that screen readers pick up the\n // announcement more reliably.\n document.body.appendChild(this.$overlay)\n this.$overlay.textContent = this.i18n.t('activated')\n\n window.location.href = this.$button.href\n }\n\n /**\n * Pre-activation logic for when the button is clicked/activated via mouse or\n * pointer.\n *\n * We do this to differentiate it from the keyboard activation event because we\n * need to run `e.preventDefault` as the button or skiplink are both links and we\n * want to apply some additional logic in `exitPage` before navigating.\n *\n * @private\n * @param {MouseEvent} event - mouse click event\n */\n handleClick(event) {\n event.preventDefault()\n this.exitPage()\n }\n\n /**\n * Logic for the 'quick escape' keyboard sequence functionality (pressing the\n * Shift key three times without interruption, within a time limit).\n *\n * @private\n * @param {KeyboardEvent} event - keyup event\n */\n handleKeypress(event) {\n if (!this.$updateSpan) {\n return\n }\n\n // Detect if the 'Shift' key has been pressed. We want to only do things if it\n // was pressed by itself and not in a combination with another key—so we keep\n // track of whether the preceding keyup had shiftKey: true on it, and if it\n // did, we ignore the next Shift keyup event.\n //\n // This works because using Shift as a modifier key (e.g. pressing Shift + A)\n // will fire TWO keyup events, one for A (with e.shiftKey: true) and the other\n // for Shift (with e.shiftKey: false).\n if (event.key === 'Shift' && !this.lastKeyWasModified) {\n this.keypressCounter += 1\n\n // Update the indicator before the below if statement can reset it back to 0\n this.updateIndicator()\n\n // Clear the timeout for the keypress timeout message clearing itself\n if (this.timeoutMessageId) {\n window.clearTimeout(this.timeoutMessageId)\n this.timeoutMessageId = null\n }\n\n if (this.keypressCounter >= 3) {\n this.keypressCounter = 0\n\n if (this.keypressTimeoutId) {\n window.clearTimeout(this.keypressTimeoutId)\n this.keypressTimeoutId = null\n }\n\n this.exitPage()\n } else {\n if (this.keypressCounter === 1) {\n this.$updateSpan.textContent = this.i18n.t('pressTwoMoreTimes')\n } else {\n this.$updateSpan.textContent = this.i18n.t('pressOneMoreTime')\n }\n }\n\n this.setKeypressTimer()\n } else if (this.keypressTimeoutId) {\n // If the user pressed any key other than 'Shift', after having pressed\n // 'Shift' and activating the timer, stop and reset the timer.\n this.resetKeypressTimer()\n }\n\n // Keep track of whether the Shift modifier key was held during this keypress\n this.lastKeyWasModified = event.shiftKey\n }\n\n /**\n * Starts the 'quick escape' keyboard sequence timer.\n *\n * This can be invoked several times. We want this to be possible so that the\n * timer is restarted each time the shortcut key is pressed (e.g. the user has\n * up to n seconds between each keypress, rather than n seconds to invoke the\n * entire sequence.)\n *\n * @private\n */\n setKeypressTimer() {\n // Clear any existing timeout. This is so only one timer is running even if\n // there are multiple keypresses in quick succession.\n if (this.keypressTimeoutId) {\n window.clearTimeout(this.keypressTimeoutId)\n }\n\n // Set a fresh timeout\n this.keypressTimeoutId = window.setTimeout(\n this.resetKeypressTimer.bind(this),\n this.timeoutTime\n )\n }\n\n /**\n * Stops and resets the 'quick escape' keyboard sequence timer.\n *\n * @private\n */\n resetKeypressTimer() {\n if (!this.$updateSpan) {\n return\n }\n\n if (this.keypressTimeoutId) {\n window.clearTimeout(this.keypressTimeoutId)\n this.keypressTimeoutId = null\n }\n\n const $updateSpan = this.$updateSpan\n\n this.keypressCounter = 0\n $updateSpan.textContent = this.i18n.t('timedOut')\n\n this.timeoutMessageId = window.setTimeout(() => {\n $updateSpan.textContent = ''\n }, this.timeoutTime)\n\n this.updateIndicator()\n }\n\n /**\n * Reset the page using the EtP button\n *\n * We use this in situations where a user may re-enter a page using the browser\n * back button. In these cases, the browser can choose to restore the state of\n * the page as it was previously, including restoring the 'ghost page' overlay,\n * the announcement span having it's role set to \"alert\" and the keypress\n * indicator still active, leaving the page in an unusable state.\n *\n * By running this check when the page is shown, we can programatically restore\n * the page and the component to a \"default\" state\n *\n * @private\n */\n resetPage() {\n // If an overlay is set, remove it and reset the value\n document.body.classList.remove('govuk-exit-this-page-hide-content')\n\n if (this.$overlay) {\n this.$overlay.remove()\n this.$overlay = null\n }\n\n // Ensure the announcement span's role is status, not alert and clear any text\n if (this.$updateSpan) {\n this.$updateSpan.setAttribute('role', 'status')\n this.$updateSpan.textContent = ''\n }\n\n // Sync the keypress indicator lights\n this.updateIndicator()\n\n // If the timeouts are active, clear them\n if (this.keypressTimeoutId) {\n window.clearTimeout(this.keypressTimeoutId)\n }\n\n if (this.timeoutMessageId) {\n window.clearTimeout(this.timeoutMessageId)\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-exit-this-page'\n\n /**\n * Exit this page default config\n *\n * @see {@link ExitThisPageConfig}\n * @constant\n * @type {ExitThisPageConfig}\n */\n static defaults = Object.freeze({\n i18n: {\n activated: 'Loading.',\n timedOut: 'Exit this page expired.',\n pressTwoMoreTimes: 'Shift, press 2 more times to exit.',\n pressOneMoreTime: 'Shift, press 1 more time to exit.'\n }\n })\n\n /**\n * Exit this page config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n i18n: { type: 'object' }\n }\n })\n}\n\n/**\n * Exit this Page config\n *\n * @see {@link ExitThisPage.defaults}\n * @typedef {object} ExitThisPageConfig\n * @property {ExitThisPageTranslations} [i18n=ExitThisPage.defaults.i18n] - Exit this page translations\n */\n\n/**\n * Exit this Page translations\n *\n * @see {@link ExitThisPage.defaults.i18n}\n * @typedef {object} ExitThisPageTranslations\n *\n * Messages used by the component programatically inserted text, including\n * overlay text and screen reader announcements.\n * @property {string} [activated] - Screen reader announcement for when EtP\n * keypress functionality has been successfully activated.\n * @property {string} [timedOut] - Screen reader announcement for when the EtP\n * keypress functionality has timed out.\n * @property {string} [pressTwoMoreTimes] - Screen reader announcement informing\n * the user they must press the activation key two more times.\n * @property {string} [pressOneMoreTime] - Screen reader announcement informing\n * the user they must press the activation key one more time.\n */\n\n/**\n * @typedef {import('../../common/index.mjs').Schema} Schema\n */\n","import { getBreakpoint } from '../../common/index.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Header component\n *\n * @preserve\n */\nexport class Header extends GOVUKFrontendComponent {\n /** @private */\n $menuButton\n\n /** @private */\n $menu\n\n /**\n * Save the opened/closed state for the nav in memory so that we can\n * accurately maintain state when the screen is changed from small to big and\n * back to small\n *\n * @private\n */\n menuIsOpen = false\n\n /**\n * A global const for storing a matchMedia instance which we'll use to detect\n * when a screen size change happens. We rely on it being null if the feature\n * isn't available to initially apply hidden attributes\n *\n * @private\n * @type {MediaQueryList | null}\n */\n mql = null\n\n /**\n * Apply a matchMedia for desktop which will trigger a state sync if the\n * browser viewport moves between states.\n *\n * @param {Element | null} $root - HTML element to use for header\n */\n constructor($root) {\n super($root)\n\n const $menuButton = this.$root.querySelector('.govuk-js-header-toggle')\n\n // Headers don't necessarily have a navigation. When they don't, the menu\n // toggle won't be rendered by our macro (or may be omitted when writing\n // plain HTML)\n if (!$menuButton) {\n return this\n }\n\n const menuId = $menuButton.getAttribute('aria-controls')\n if (!menuId) {\n throw new ElementError({\n component: Header,\n identifier:\n 'Navigation button (`<button class=\"govuk-js-header-toggle\">`) attribute (`aria-controls`)'\n })\n }\n\n const $menu = document.getElementById(menuId)\n if (!$menu) {\n throw new ElementError({\n component: Header,\n element: $menu,\n identifier: `Navigation (\\`<ul id=\"${menuId}\">\\`)`\n })\n }\n\n this.$menu = $menu\n this.$menuButton = $menuButton\n\n this.setupResponsiveChecks()\n\n this.$menuButton.addEventListener('click', () =>\n this.handleMenuButtonClick()\n )\n }\n\n /**\n * Setup viewport resize check\n *\n * @private\n */\n setupResponsiveChecks() {\n const breakpoint = getBreakpoint('desktop')\n\n if (!breakpoint.value) {\n throw new ElementError({\n component: Header,\n identifier: `CSS custom property (\\`${breakpoint.property}\\`) on pseudo-class \\`:root\\``\n })\n }\n\n // Media query list for GOV.UK Frontend desktop breakpoint\n this.mql = window.matchMedia(`(min-width: ${breakpoint.value})`)\n\n // MediaQueryList.addEventListener isn't supported by Safari < 14 so we need\n // to be able to fall back to the deprecated MediaQueryList.addListener\n if ('addEventListener' in this.mql) {\n this.mql.addEventListener('change', () => this.checkMode())\n } else {\n // @ts-expect-error Property 'addListener' does not exist\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.mql.addListener(() => this.checkMode())\n }\n\n this.checkMode()\n }\n\n /**\n * Sync menu state\n *\n * Uses the global variable menuIsOpen to correctly set the accessible and\n * visual states of the menu and the menu button.\n * Additionally will force the menu to be visible and the menu button to be\n * hidden if the matchMedia is triggered to desktop.\n *\n * @private\n */\n checkMode() {\n if (!this.mql || !this.$menu || !this.$menuButton) {\n return\n }\n\n if (this.mql.matches) {\n this.$menu.removeAttribute('hidden')\n this.$menuButton.setAttribute('hidden', '')\n } else {\n this.$menuButton.removeAttribute('hidden')\n this.$menuButton.setAttribute('aria-expanded', this.menuIsOpen.toString())\n\n if (this.menuIsOpen) {\n this.$menu.removeAttribute('hidden')\n } else {\n this.$menu.setAttribute('hidden', '')\n }\n }\n }\n\n /**\n * Handle menu button click\n *\n * When the menu button is clicked, change the visibility of the menu and then\n * sync the accessibility state and menu button state\n *\n * @private\n */\n handleMenuButtonClick() {\n this.menuIsOpen = !this.menuIsOpen\n this.checkMode()\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-header'\n}\n","import { mergeConfigs, setFocus } from '../../common/index.mjs'\nimport { normaliseDataset } from '../../common/normalise-dataset.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Notification Banner component\n *\n * @preserve\n */\nexport class NotificationBanner extends GOVUKFrontendComponent {\n /**\n * @private\n * @type {NotificationBannerConfig}\n */\n config\n\n /**\n * @param {Element | null} $root - HTML element to use for notification banner\n * @param {NotificationBannerConfig} [config] - Notification banner config\n */\n constructor($root, config = {}) {\n super($root)\n\n this.config = mergeConfigs(\n NotificationBanner.defaults,\n config,\n normaliseDataset(NotificationBanner, this.$root.dataset)\n )\n\n /**\n * Focus the notification banner\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\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-notification-banner'\n\n /**\n * Notification banner default config\n *\n * @see {@link NotificationBannerConfig}\n * @constant\n * @type {NotificationBannerConfig}\n */\n static defaults = Object.freeze({\n disableAutoFocus: false\n })\n\n /**\n * Notification banner config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n disableAutoFocus: { type: 'boolean' }\n }\n })\n}\n\n/**\n * Notification banner config\n *\n * @typedef {object} NotificationBannerConfig\n * @property {boolean} [disableAutoFocus=false] - If set to `true` the\n * notification banner will not be focussed when the page loads. This only\n * applies if the component has a `role` of `alert` – in other cases the\n * component will not be focused on page load, regardless of this option.\n */\n\n/**\n * @typedef {import('../../common/index.mjs').Schema} Schema\n */\n","import { closestAttributeValue } from '../../common/closest-attribute-value.mjs'\nimport { mergeConfigs } from '../../common/index.mjs'\nimport { normaliseDataset } from '../../common/normalise-dataset.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\nimport { I18n } from '../../i18n.mjs'\n\n/**\n * Password input component\n *\n * @preserve\n */\nexport class PasswordInput extends GOVUKFrontendComponent {\n /**\n * @private\n * @type {PasswordInputConfig}\n */\n config\n\n /** @private */\n i18n\n\n /**\n * @private\n * @type {HTMLInputElement}\n */\n $input\n\n /**\n * @private\n * @type {HTMLButtonElement}\n */\n $showHideButton\n\n /** @private */\n $screenReaderStatusMessage\n\n /**\n * @param {Element | null} $root - HTML element to use for password input\n * @param {PasswordInputConfig} [config] - Password input config\n */\n constructor($root, config = {}) {\n super($root)\n\n const $input = this.$root.querySelector('.govuk-js-password-input-input')\n if (!($input instanceof HTMLInputElement)) {\n throw new ElementError({\n component: PasswordInput,\n element: $input,\n expectedType: 'HTMLInputElement',\n identifier: 'Form field (`.govuk-js-password-input-input`)'\n })\n }\n\n if ($input.type !== 'password') {\n throw new ElementError(\n 'Password input: Form field (`.govuk-js-password-input-input`) must be of type `password`.'\n )\n }\n\n const $showHideButton = this.$root.querySelector(\n '.govuk-js-password-input-toggle'\n )\n if (!($showHideButton instanceof HTMLButtonElement)) {\n throw new ElementError({\n component: PasswordInput,\n element: $showHideButton,\n expectedType: 'HTMLButtonElement',\n identifier: 'Button (`.govuk-js-password-input-toggle`)'\n })\n }\n\n if ($showHideButton.type !== 'button') {\n throw new ElementError(\n 'Password input: Button (`.govuk-js-password-input-toggle`) must be of type `button`.'\n )\n }\n\n this.$input = $input\n this.$showHideButton = $showHideButton\n\n this.config = mergeConfigs(\n PasswordInput.defaults,\n config,\n normaliseDataset(PasswordInput, this.$root.dataset)\n )\n\n this.i18n = new I18n(this.config.i18n, {\n // Read the fallback if necessary rather than have it set in the defaults\n locale: closestAttributeValue(this.$root, 'lang')\n })\n\n // Show the toggle button element\n this.$showHideButton.removeAttribute('hidden')\n\n // Create and append the status text for screen readers.\n // This is injected between the input and button so that users get a sensible reading order if\n // moving through the page content linearly:\n // [password input] -> [your password is visible/hidden] -> [show/hide password]\n const $screenReaderStatusMessage = document.createElement('div')\n $screenReaderStatusMessage.className =\n 'govuk-password-input__sr-status govuk-visually-hidden'\n $screenReaderStatusMessage.setAttribute('aria-live', 'polite')\n this.$screenReaderStatusMessage = $screenReaderStatusMessage\n this.$input.insertAdjacentElement('afterend', $screenReaderStatusMessage)\n\n // Bind toggle button\n this.$showHideButton.addEventListener('click', this.toggle.bind(this))\n\n // Bind event to revert the password visibility to hidden\n if (this.$input.form) {\n this.$input.form.addEventListener('submit', () => this.hide())\n }\n\n // If the page is restored from bfcache and the password is visible, hide it again\n window.addEventListener('pageshow', (event) => {\n if (event.persisted && this.$input.type !== 'password') {\n this.hide()\n }\n })\n\n // Default the component to having the password hidden.\n this.hide()\n }\n\n /**\n * Toggle the visibility of the password input\n *\n * @private\n * @param {MouseEvent} event - Click event\n */\n toggle(event) {\n event.preventDefault()\n\n // If on this click, the field is type=\"password\", show the value\n if (this.$input.type === 'password') {\n this.show()\n return\n }\n\n // Otherwise, hide it\n // Being defensive - hiding should always be the default\n this.hide()\n }\n\n /**\n * Show the password input value in plain text.\n *\n * @private\n */\n show() {\n this.setType('text')\n }\n\n /**\n * Hide the password input value.\n *\n * @private\n */\n hide() {\n this.setType('password')\n }\n\n /**\n * Set the password input type\n *\n * @param {'text' | 'password'} type - Input type\n * @private\n */\n setType(type) {\n if (type === this.$input.type) {\n return\n }\n\n // Update input type\n this.$input.setAttribute('type', type)\n\n const isHidden = type === 'password'\n const prefixButton = isHidden ? 'show' : 'hide'\n const prefixStatus = isHidden ? 'passwordHidden' : 'passwordShown'\n\n // Update button text\n this.$showHideButton.innerText = this.i18n.t(`${prefixButton}Password`)\n\n // Update button aria-label\n this.$showHideButton.setAttribute(\n 'aria-label',\n this.i18n.t(`${prefixButton}PasswordAriaLabel`)\n )\n\n // Update status change text\n this.$screenReaderStatusMessage.innerText = this.i18n.t(\n `${prefixStatus}Announcement`\n )\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-password-input'\n\n /**\n * Password input default config\n *\n * @see {@link PasswordInputConfig}\n * @constant\n * @default\n * @type {PasswordInputConfig}\n */\n static defaults = Object.freeze({\n i18n: {\n showPassword: 'Show',\n hidePassword: 'Hide',\n showPasswordAriaLabel: 'Show password',\n hidePasswordAriaLabel: 'Hide password',\n passwordShownAnnouncement: 'Your password is visible',\n passwordHiddenAnnouncement: 'Your password is hidden'\n }\n })\n\n /**\n * Password input config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n i18n: { type: 'object' }\n }\n })\n}\n\n/**\n * Password input config\n *\n * @typedef {object} PasswordInputConfig\n * @property {PasswordInputTranslations} [i18n=PasswordInput.defaults.i18n] - Password input translations\n */\n\n/**\n * Password input translations\n *\n * @see {@link PasswordInput.defaults.i18n}\n * @typedef {object} PasswordInputTranslations\n *\n * Messages displayed to the user indicating the state of the show/hide toggle.\n * @property {string} [showPassword] - Visible text of the button when the\n * password is currently hidden. Plain text only.\n * @property {string} [hidePassword] - Visible text of the button when the\n * password is currently visible. Plain text only.\n * @property {string} [showPasswordAriaLabel] - aria-label of the button when\n * the password is currently hidden. Plain text only.\n * @property {string} [hidePasswordAriaLabel] - aria-label of the button when\n * the password is currently visible. Plain text only.\n * @property {string} [passwordShownAnnouncement] - Screen reader\n * announcement to make when the password has just become visible.\n * Plain text only.\n * @property {string} [passwordHiddenAnnouncement] - Screen reader\n * announcement to make when the password has just been hidden.\n * Plain text only.\n */\n\n/**\n * @typedef {import('../../common/index.mjs').Schema} Schema\n * @typedef {import('../../i18n.mjs').TranslationPluralForms} TranslationPluralForms\n */\n","import { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Radios component\n *\n * @preserve\n */\nexport class Radios extends GOVUKFrontendComponent {\n /** @private */\n $inputs\n\n /**\n * Radios can be associated with a 'conditionally revealed' content block –\n * for example, a radio for 'Phone' could reveal an additional form field for\n * the user to enter their phone number.\n *\n * These associations are made using a `data-aria-controls` attribute, which\n * is promoted to an aria-controls attribute during initialisation.\n *\n * We also need to restore the state of any conditional reveals on the page\n * (for example if the user has navigated back), and set up event handlers to\n * keep the reveal in sync with the radio state.\n *\n * @param {Element | null} $root - HTML element to use for radios\n */\n constructor($root) {\n super($root)\n\n const $inputs = this.$root.querySelectorAll('input[type=\"radio\"]')\n if (!$inputs.length) {\n throw new ElementError({\n component: Radios,\n identifier: 'Form inputs (`<input type=\"radio\">`)'\n })\n }\n\n this.$inputs = $inputs\n\n this.$inputs.forEach(($input) => {\n const targetId = $input.getAttribute('data-aria-controls')\n\n // Skip radios without data-aria-controls attributes\n if (!targetId) {\n return\n }\n\n // Throw if target conditional element does not exist.\n if (!document.getElementById(targetId)) {\n throw new ElementError({\n component: Radios,\n identifier: `Conditional reveal (\\`id=\"${targetId}\"\\`)`\n })\n }\n\n // Promote the data-aria-controls attribute to a aria-controls attribute\n // so that the relationship is exposed in the AOM\n $input.setAttribute('aria-controls', targetId)\n $input.removeAttribute('data-aria-controls')\n })\n\n // When the page is restored after navigating 'back' in some browsers the\n // state of form controls is not restored until *after* the DOMContentLoaded\n // event is fired, so we need to sync after the pageshow event.\n window.addEventListener('pageshow', () => this.syncAllConditionalReveals())\n\n // Although we've set up handlers to sync state on the pageshow event, init\n // could be called after those events have fired, for example if they are\n // added to the page dynamically, so sync now too.\n this.syncAllConditionalReveals()\n\n // Handle events\n this.$root.addEventListener('click', (event) => this.handleClick(event))\n }\n\n /**\n * Sync the conditional reveal states for all radio buttons in this component.\n *\n * @private\n */\n syncAllConditionalReveals() {\n this.$inputs.forEach(($input) =>\n this.syncConditionalRevealWithInputState($input)\n )\n }\n\n /**\n * Sync conditional reveal with the input state\n *\n * Synchronise the visibility of the conditional reveal, and its accessible\n * state, with the input's checked state.\n *\n * @private\n * @param {HTMLInputElement} $input - Radio input\n */\n syncConditionalRevealWithInputState($input) {\n const targetId = $input.getAttribute('aria-controls')\n if (!targetId) {\n return\n }\n\n const $target = document.getElementById(targetId)\n if ($target?.classList.contains('govuk-radios__conditional')) {\n const inputIsChecked = $input.checked\n\n $input.setAttribute('aria-expanded', inputIsChecked.toString())\n $target.classList.toggle(\n 'govuk-radios__conditional--hidden',\n !inputIsChecked\n )\n }\n }\n\n /**\n * Click event handler\n *\n * Handle a click within the component root – if the click occurred on a radio, sync\n * the state of the conditional reveal for all radio buttons in the same form\n * with the same name (because checking one radio could have un-checked a\n * radio under the root of another Radio component)\n *\n * @private\n * @param {MouseEvent} event - Click event\n */\n handleClick(event) {\n const $clickedInput = event.target\n\n // Ignore clicks on things that aren't radio buttons\n if (\n !($clickedInput instanceof HTMLInputElement) ||\n $clickedInput.type !== 'radio'\n ) {\n return\n }\n\n // We only need to consider radios with conditional reveals, which will have\n // aria-controls attributes.\n const $allInputs = document.querySelectorAll(\n 'input[type=\"radio\"][aria-controls]'\n )\n\n const $clickedInputForm = $clickedInput.form\n const $clickedInputName = $clickedInput.name\n\n $allInputs.forEach(($input) => {\n const hasSameFormOwner = $input.form === $clickedInputForm\n const hasSameName = $input.name === $clickedInputName\n\n if (hasSameName && hasSameFormOwner) {\n this.syncConditionalRevealWithInputState($input)\n }\n })\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-radios'\n}\n","import { getBreakpoint } from '../../common/index.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Service Navigation component\n *\n * @preserve\n */\nexport class ServiceNavigation extends GOVUKFrontendComponent {\n /** @private */\n $menuButton\n\n /** @private */\n $menu\n\n /**\n * Remember the open/closed state of the nav so we can maintain it when the\n * screen is resized.\n *\n * @private\n */\n menuIsOpen = false\n\n /**\n * A global const for storing a matchMedia instance which we'll use to detect\n * when a screen size change happens. We rely on it being null if the feature\n * isn't available to initially apply hidden attributes\n *\n * @private\n * @type {MediaQueryList | null}\n */\n mql = null\n\n /**\n * @param {Element | null} $root - HTML element to use for header\n */\n constructor($root) {\n super($root)\n\n const $menuButton = this.$root.querySelector(\n '.govuk-js-service-navigation-toggle'\n )\n\n // Headers don't necessarily have a navigation. When they don't, the menu\n // toggle won't be rendered by our macro (or may be omitted when writing\n // plain HTML)\n if (!$menuButton) {\n return this\n }\n\n const menuId = $menuButton.getAttribute('aria-controls')\n if (!menuId) {\n throw new ElementError({\n component: ServiceNavigation,\n identifier:\n 'Navigation button (`<button class=\"govuk-js-service-navigation-toggle\">`) attribute (`aria-controls`)'\n })\n }\n\n const $menu = document.getElementById(menuId)\n if (!$menu) {\n throw new ElementError({\n component: ServiceNavigation,\n element: $menu,\n identifier: `Navigation (\\`<ul id=\"${menuId}\">\\`)`\n })\n }\n\n this.$menu = $menu\n this.$menuButton = $menuButton\n\n this.setupResponsiveChecks()\n\n this.$menuButton.addEventListener('click', () =>\n this.handleMenuButtonClick()\n )\n }\n\n /**\n * Setup viewport resize check\n *\n * @private\n */\n setupResponsiveChecks() {\n const breakpoint = getBreakpoint('tablet')\n\n if (!breakpoint.value) {\n throw new ElementError({\n component: ServiceNavigation,\n identifier: `CSS custom property (\\`${breakpoint.property}\\`) on pseudo-class \\`:root\\``\n })\n }\n\n // Media query list for GOV.UK Frontend desktop breakpoint\n this.mql = window.matchMedia(`(min-width: ${breakpoint.value})`)\n\n // MediaQueryList.addEventListener isn't supported by Safari < 14 so we need\n // to be able to fall back to the deprecated MediaQueryList.addListener\n if ('addEventListener' in this.mql) {\n this.mql.addEventListener('change', () => this.checkMode())\n } else {\n // @ts-expect-error Property 'addListener' does not exist\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.mql.addListener(() => this.checkMode())\n }\n\n this.checkMode()\n }\n\n /**\n * Sync menu state\n *\n * Uses the global variable menuIsOpen to correctly set the accessible and\n * visual states of the menu and the menu button.\n * Additionally will force the menu to be visible and the menu button to be\n * hidden if the matchMedia is triggered to desktop.\n *\n * @private\n */\n checkMode() {\n if (!this.mql || !this.$menu || !this.$menuButton) {\n return\n }\n\n if (this.mql.matches) {\n this.$menu.removeAttribute('hidden')\n this.$menuButton.setAttribute('hidden', '')\n } else {\n this.$menuButton.removeAttribute('hidden')\n this.$menuButton.setAttribute('aria-expanded', this.menuIsOpen.toString())\n\n if (this.menuIsOpen) {\n this.$menu.removeAttribute('hidden')\n } else {\n this.$menu.setAttribute('hidden', '')\n }\n }\n }\n\n /**\n * Handle menu button click\n *\n * When the menu button is clicked, change the visibility of the menu and then\n * sync the accessibility state and menu button state\n *\n * @private\n */\n handleMenuButtonClick() {\n this.menuIsOpen = !this.menuIsOpen\n this.checkMode()\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-service-navigation'\n}\n","import { getFragmentFromUrl, setFocus } from '../../common/index.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Skip link component\n *\n * @preserve\n * @augments GOVUKFrontendComponent<HTMLAnchorElement>\n */\nexport class SkipLink extends GOVUKFrontendComponent {\n static elementType = HTMLAnchorElement\n\n /**\n * @param {Element | null} $root - HTML element to use for skip link\n * @throws {ElementError} when $root is not set or the wrong type\n * @throws {ElementError} when $root.hash does not contain a hash\n * @throws {ElementError} when the linked element is missing or the wrong type\n */\n constructor($root) {\n super($root)\n\n const hash = this.$root.hash\n const href = this.$root.getAttribute('href') ?? ''\n\n /** @type {URL | undefined} */\n let url\n\n /**\n * Check for valid link URL\n *\n * {@link https://caniuse.com/url}\n * {@link https://url.spec.whatwg.org}\n *\n */\n try {\n url = new window.URL(this.$root.href)\n } catch (error) {\n throw new ElementError(\n `Skip link: Target link (\\`href=\"${href}\"\\`) is invalid`\n )\n }\n\n // Return early for external URLs or links to other pages\n if (\n url.origin !== window.location.origin ||\n url.pathname !== window.location.pathname\n ) {\n return\n }\n\n const linkedElementId = getFragmentFromUrl(hash)\n\n // Check link path matching current page\n if (!linkedElementId) {\n throw new ElementError(\n `Skip link: Target link (\\`href=\"${href}\"\\`) has no hash fragment`\n )\n }\n\n const $linkedElement = document.getElementById(linkedElementId)\n\n // Check for link target element\n if (!$linkedElement) {\n throw new ElementError({\n component: SkipLink,\n element: $linkedElement,\n identifier: `Target content (\\`id=\"${linkedElementId}\"\\`)`\n })\n }\n\n /**\n * Focus the linked element on click\n *\n * Adds a helper CSS class to hide native focus styles,\n * but removes it on blur to restore native focus styles\n */\n this.$root.addEventListener('click', () =>\n setFocus($linkedElement, {\n onBeforeFocus() {\n $linkedElement.classList.add('govuk-skip-link-focused-element')\n },\n onBlur() {\n $linkedElement.classList.remove('govuk-skip-link-focused-element')\n }\n })\n )\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-skip-link'\n}\n","import { getBreakpoint, getFragmentFromUrl } from '../../common/index.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Tabs component\n *\n * @preserve\n */\nexport class Tabs extends GOVUKFrontendComponent {\n /** @private */\n $tabs\n\n /** @private */\n $tabList\n\n /** @private */\n $tabListItems\n\n /** @private */\n jsHiddenClass = 'govuk-tabs__panel--hidden'\n\n /** @private */\n changingHash = false\n\n /** @private */\n boundTabClick\n\n /** @private */\n boundTabKeydown\n\n /** @private */\n boundOnHashChange\n\n /**\n * @private\n * @type {MediaQueryList | null}\n */\n mql = null\n\n /**\n * @param {Element | null} $root - HTML element to use for tabs\n */\n constructor($root) {\n super($root)\n\n const $tabs = this.$root.querySelectorAll('a.govuk-tabs__tab')\n if (!$tabs.length) {\n throw new ElementError({\n component: Tabs,\n identifier: 'Links (`<a class=\"govuk-tabs__tab\">`)'\n })\n }\n\n this.$tabs = $tabs\n\n // Save bound functions so we can remove event listeners during teardown\n this.boundTabClick = this.onTabClick.bind(this)\n this.boundTabKeydown = this.onTabKeydown.bind(this)\n this.boundOnHashChange = this.onHashChange.bind(this)\n\n const $tabList = this.$root.querySelector('.govuk-tabs__list')\n const $tabListItems = this.$root.querySelectorAll(\n 'li.govuk-tabs__list-item'\n )\n\n if (!$tabList) {\n throw new ElementError({\n component: Tabs,\n identifier: 'List (`<ul class=\"govuk-tabs__list\">`)'\n })\n }\n\n if (!$tabListItems.length) {\n throw new ElementError({\n component: Tabs,\n identifier: 'List items (`<li class=\"govuk-tabs__list-item\">`)'\n })\n }\n\n this.$tabList = $tabList\n this.$tabListItems = $tabListItems\n\n this.setupResponsiveChecks()\n }\n\n /**\n * Setup viewport resize check\n *\n * @private\n */\n setupResponsiveChecks() {\n const breakpoint = getBreakpoint('tablet')\n\n if (!breakpoint.value) {\n throw new ElementError({\n component: Tabs,\n identifier: `CSS custom property (\\`${breakpoint.property}\\`) on pseudo-class \\`:root\\``\n })\n }\n\n // Media query list for GOV.UK Frontend tablet breakpoint\n this.mql = window.matchMedia(`(min-width: ${breakpoint.value})`)\n\n // MediaQueryList.addEventListener isn't supported by Safari < 14 so we need\n // to be able to fall back to the deprecated MediaQueryList.addListener\n if ('addEventListener' in this.mql) {\n this.mql.addEventListener('change', () => this.checkMode())\n } else {\n // @ts-expect-error Property 'addListener' does not exist\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.mql.addListener(() => this.checkMode())\n }\n\n this.checkMode()\n }\n\n /**\n * Setup or teardown handler for viewport resize check\n *\n * @private\n */\n checkMode() {\n if (this.mql?.matches) {\n this.setup()\n } else {\n this.teardown()\n }\n }\n\n /**\n * Setup tab component\n *\n * @private\n */\n setup() {\n this.$tabList.setAttribute('role', 'tablist')\n\n this.$tabListItems.forEach(($item) => {\n $item.setAttribute('role', 'presentation')\n })\n\n this.$tabs.forEach(($tab) => {\n // Set HTML attributes\n this.setAttributes($tab)\n\n // Handle events\n $tab.addEventListener('click', this.boundTabClick, true)\n $tab.addEventListener('keydown', this.boundTabKeydown, true)\n\n // Remove old active panels\n this.hideTab($tab)\n })\n\n // Show either the active tab according to the URL's hash or the first tab\n const $activeTab = this.getTab(window.location.hash) ?? this.$tabs[0]\n\n this.showTab($activeTab)\n\n // Handle hashchange events\n window.addEventListener('hashchange', this.boundOnHashChange, true)\n }\n\n /**\n * Teardown tab component\n *\n * @private\n */\n teardown() {\n this.$tabList.removeAttribute('role')\n\n this.$tabListItems.forEach(($item) => {\n $item.removeAttribute('role')\n })\n\n this.$tabs.forEach(($tab) => {\n // Remove events\n $tab.removeEventListener('click', this.boundTabClick, true)\n $tab.removeEventListener('keydown', this.boundTabKeydown, true)\n\n // Unset HTML attributes\n this.unsetAttributes($tab)\n })\n\n // Remove hashchange event handler\n window.removeEventListener('hashchange', this.boundOnHashChange, true)\n }\n\n /**\n * Handle hashchange event\n *\n * @private\n * @returns {void | undefined} Returns void, or undefined when prevented\n */\n onHashChange() {\n const hash = window.location.hash\n const $tabWithHash = this.getTab(hash)\n if (!$tabWithHash) {\n return\n }\n\n // Prevent changing the hash\n if (this.changingHash) {\n this.changingHash = false\n return\n }\n\n // Show either the active tab according to the URL's hash or the first tab\n const $previousTab = this.getCurrentTab()\n if (!$previousTab) {\n return\n }\n\n this.hideTab($previousTab)\n this.showTab($tabWithHash)\n $tabWithHash.focus()\n }\n\n /**\n * Hide panel for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n hideTab($tab) {\n this.unhighlightTab($tab)\n this.hidePanel($tab)\n }\n\n /**\n * Show panel for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n showTab($tab) {\n this.highlightTab($tab)\n this.showPanel($tab)\n }\n\n /**\n * Get tab link by hash\n *\n * @private\n * @param {string} hash - Hash fragment including #\n * @returns {HTMLAnchorElement | null} Tab link\n */\n getTab(hash) {\n return this.$root.querySelector(`a.govuk-tabs__tab[href=\"${hash}\"]`)\n }\n\n /**\n * Set tab link and panel attributes\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n setAttributes($tab) {\n const panelId = getFragmentFromUrl($tab.href)\n if (!panelId) {\n return\n }\n\n // Set tab attributes\n $tab.setAttribute('id', `tab_${panelId}`)\n $tab.setAttribute('role', 'tab')\n $tab.setAttribute('aria-controls', panelId)\n $tab.setAttribute('aria-selected', 'false')\n $tab.setAttribute('tabindex', '-1')\n\n // Set panel attributes\n const $panel = this.getPanel($tab)\n if (!$panel) {\n return\n }\n\n $panel.setAttribute('role', 'tabpanel')\n $panel.setAttribute('aria-labelledby', $tab.id)\n $panel.classList.add(this.jsHiddenClass)\n }\n\n /**\n * Unset tab link and panel attributes\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n unsetAttributes($tab) {\n // unset tab attributes\n $tab.removeAttribute('id')\n $tab.removeAttribute('role')\n $tab.removeAttribute('aria-controls')\n $tab.removeAttribute('aria-selected')\n $tab.removeAttribute('tabindex')\n\n // unset panel attributes\n const $panel = this.getPanel($tab)\n if (!$panel) {\n return\n }\n\n $panel.removeAttribute('role')\n $panel.removeAttribute('aria-labelledby')\n $panel.classList.remove(this.jsHiddenClass)\n }\n\n /**\n * Handle tab link clicks\n *\n * @private\n * @param {MouseEvent} event - Mouse click event\n * @returns {void} Returns void\n */\n onTabClick(event) {\n const $currentTab = this.getCurrentTab()\n const $nextTab = event.currentTarget\n\n if (!$currentTab || !($nextTab instanceof HTMLAnchorElement)) {\n return\n }\n\n event.preventDefault()\n\n this.hideTab($currentTab)\n this.showTab($nextTab)\n this.createHistoryEntry($nextTab)\n }\n\n /**\n * Update browser URL hash fragment for tab\n *\n * - Allows back/forward to navigate tabs\n * - Avoids page jump when hash changes\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n createHistoryEntry($tab) {\n const $panel = this.getPanel($tab)\n if (!$panel) {\n return\n }\n\n // Save and restore the id so the page doesn't jump when a user clicks a tab\n // (which changes the hash)\n const panelId = $panel.id\n $panel.id = ''\n this.changingHash = true\n window.location.hash = panelId\n $panel.id = panelId\n }\n\n /**\n * Handle tab keydown event\n *\n * - Press right arrow for next tab\n * - Press left arrow for previous tab\n *\n * @private\n * @param {KeyboardEvent} event - Keydown event\n */\n onTabKeydown(event) {\n switch (event.key) {\n // 'Left' and 'Right' required for Edge 16 support.\n case 'ArrowLeft':\n case 'Left':\n this.activatePreviousTab()\n event.preventDefault()\n break\n case 'ArrowRight':\n case 'Right':\n this.activateNextTab()\n event.preventDefault()\n break\n }\n }\n\n /**\n * Activate next tab\n *\n * @private\n */\n activateNextTab() {\n const $currentTab = this.getCurrentTab()\n if (!$currentTab?.parentElement) {\n return\n }\n\n const $nextTabListItem = $currentTab.parentElement.nextElementSibling\n if (!$nextTabListItem) {\n return\n }\n\n const $nextTab = $nextTabListItem.querySelector('a.govuk-tabs__tab')\n if (!$nextTab) {\n return\n }\n\n this.hideTab($currentTab)\n this.showTab($nextTab)\n $nextTab.focus()\n this.createHistoryEntry($nextTab)\n }\n\n /**\n * Activate previous tab\n *\n * @private\n */\n activatePreviousTab() {\n const $currentTab = this.getCurrentTab()\n if (!$currentTab?.parentElement) {\n return\n }\n\n const $previousTabListItem =\n $currentTab.parentElement.previousElementSibling\n if (!$previousTabListItem) {\n return\n }\n\n const $previousTab = $previousTabListItem.querySelector('a.govuk-tabs__tab')\n if (!$previousTab) {\n return\n }\n\n this.hideTab($currentTab)\n this.showTab($previousTab)\n $previousTab.focus()\n this.createHistoryEntry($previousTab)\n }\n\n /**\n * Get tab panel for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n * @returns {Element | null} Tab panel\n */\n getPanel($tab) {\n const panelId = getFragmentFromUrl($tab.href)\n if (!panelId) {\n return null\n }\n\n return this.$root.querySelector(`#${panelId}`)\n }\n\n /**\n * Show tab panel for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n showPanel($tab) {\n const $panel = this.getPanel($tab)\n if (!$panel) {\n return\n }\n\n $panel.classList.remove(this.jsHiddenClass)\n }\n\n /**\n * Hide tab panel for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n hidePanel($tab) {\n const $panel = this.getPanel($tab)\n if (!$panel) {\n return\n }\n\n $panel.classList.add(this.jsHiddenClass)\n }\n\n /**\n * Unset 'selected' state for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n unhighlightTab($tab) {\n if (!$tab.parentElement) {\n return\n }\n\n $tab.setAttribute('aria-selected', 'false')\n $tab.parentElement.classList.remove('govuk-tabs__list-item--selected')\n $tab.setAttribute('tabindex', '-1')\n }\n\n /**\n * Set 'selected' state for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n highlightTab($tab) {\n if (!$tab.parentElement) {\n return\n }\n\n $tab.setAttribute('aria-selected', 'true')\n $tab.parentElement.classList.add('govuk-tabs__list-item--selected')\n $tab.setAttribute('tabindex', '0')\n }\n\n /**\n * Get current tab link\n *\n * @private\n * @returns {HTMLAnchorElement | null} Tab link\n */\n getCurrentTab() {\n return this.$root.querySelector(\n '.govuk-tabs__list-item--selected a.govuk-tabs__tab'\n )\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-tabs'\n}\n","import { isSupported } 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 { 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 } 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 & { scope?: Element, onError?: OnErrorCallback<CompatibleClass> }} [config] - Config for all components (with optional scope)\n */\nfunction initAll(config) {\n config = typeof config !== 'undefined' ? config : {}\n\n // Skip initialisation when GOV.UK Frontend is not supported\n if (!isSupported()) {\n if (config.onError) {\n config.onError(new SupportError(), {\n config\n })\n } else {\n console.log(new SupportError())\n }\n return\n }\n\n const components = /** @type {const} */ ([\n [Accordion, config.accordion],\n [Button, config.button],\n [CharacterCount, config.characterCount],\n [Checkboxes],\n [ErrorSummary, config.errorSummary],\n [ExitThisPage, config.exitThisPage],\n [Header],\n [NotificationBanner, config.notificationBanner],\n [PasswordInput, config.passwordInput],\n [Radios],\n [ServiceNavigation],\n [SkipLink],\n [Tabs]\n ])\n\n // Allow the user to initialise GOV.UK Frontend in only certain sections of the page\n // Defaults to the entire document if nothing is set.\n // const $scope = config.scope ?? document\n\n const options = {\n scope: config.scope ?? document,\n onError: config.onError\n }\n\n components.forEach(([Component, config]) => {\n createAll(Component, config, 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} T\n * @param {T} Component - class of the component to create\n * @param {T[\"defaults\"]} [config] - Config supplied to component\n * @param {OnErrorCallback<T> | Element | Document | CreateAllOptions<T> } [createAllOptions] - 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<T>>} - array of instantiated components\n */\nfunction createAll(Component, config, createAllOptions) {\n let /** @type {Element | Document} */ $scope = document\n let /** @type {OnErrorCallback<Component> | undefined} */ onError\n\n if (typeof createAllOptions === 'object') {\n createAllOptions = /** @type {CreateAllOptions<Component>} */ (\n // eslint-disable-next-line no-self-assign\n createAllOptions\n )\n\n $scope = createAllOptions.scope ?? $scope\n onError = createAllOptions.onError\n }\n\n if (typeof createAllOptions === 'function') {\n onError = createAllOptions\n }\n\n if (createAllOptions instanceof HTMLElement) {\n $scope = createAllOptions\n }\n\n const $elements = $scope.querySelectorAll(\n `[data-module=\"${Component.moduleName}\"]`\n )\n\n // Skip initialisation when GOV.UK Frontend is not supported\n if (!isSupported()) {\n if (onError) {\n onError(new SupportError(), {\n component: Component,\n config\n })\n } else {\n console.log(new SupportError())\n }\n return []\n }\n\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return --\n * We can't define CompatibleClass as `{new(): CompatibleClass, moduleName: string}`,\n * as when doing `typeof Accordion` (or any component), TypeScript doesn't seem\n * to acknowledge the static `moduleName` that's set in our component classes.\n * This means we have to set the constructor of `CompatibleClass` as `{new(): any}`,\n * leading to ESLint frowning that we're returning `any[]`.\n */\n return Array.from($elements)\n .map(($element) => {\n try {\n // Only pass config to components that accept it\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return typeof config !== 'undefined'\n ? new Component($element, config)\n : new Component($element)\n } catch (error) {\n if (onError) {\n onError(error, {\n element: $element,\n component: Component,\n config\n })\n } else {\n console.log(error)\n }\n\n return null\n }\n })\n .filter(Boolean) // Exclude components that errored\n}\n\nexport { initAll, createAll }\n\n/* eslint-disable jsdoc/valid-types --\n * `{new(...args: any[] ): object}` is not recognised as valid\n * https://github.com/gajus/eslint-plugin-jsdoc/issues/145#issuecomment-1308722878\n * https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/131\n **/\n\n/**\n * @typedef {{new (...args: any[]): any, defaults?: object, moduleName: string}} CompatibleClass\n */\n\n/* eslint-enable jsdoc/valid-types */\n\n/**\n * Config for all components via `initAll()`\n *\n * @typedef {object} Config\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 {NotificationBannerConfig} [notificationBanner] - Notification Banner config\n * @property {PasswordInputConfig} [passwordInput] - Password input config\n */\n\n/**\n * Config for individual components\n *\n * @typedef {import('./components/accordion/accordion.mjs').AccordionConfig} AccordionConfig\n * @typedef {import('./components/accordion/accordion.mjs').AccordionTranslations} AccordionTranslations\n * @typedef {import('./components/button/button.mjs').ButtonConfig} ButtonConfig\n * @typedef {import('./components/character-count/character-count.mjs').CharacterCountConfig} CharacterCountConfig\n * @typedef {import('./components/character-count/character-count.mjs').CharacterCountTranslations} CharacterCountTranslations\n * @typedef {import('./components/error-summary/error-summary.mjs').ErrorSummaryConfig} ErrorSummaryConfig\n * @typedef {import('./components/exit-this-page/exit-this-page.mjs').ExitThisPageConfig} ExitThisPageConfig\n * @typedef {import('./components/exit-this-page/exit-this-page.mjs').ExitThisPageTranslations} ExitThisPageTranslations\n * @typedef {import('./components/notification-banner/notification-banner.mjs').NotificationBannerConfig} NotificationBannerConfig\n * @typedef {import('./components/password-input/password-input.mjs').PasswordInputConfig} PasswordInputConfig\n */\n\n/**\n * Component config keys, e.g. `accordion` and `characterCount`\n *\n * @typedef {keyof Config} ConfigKey\n */\n\n/**\n * @template {CompatibleClass} T\n * @typedef {object} ErrorContext\n * @property {Element} [element] - Element used for component module initialisation\n * @property {T} [component] - Class of component\n * @property {T[\"defaults\"]} config - Config supplied to component\n */\n\n/**\n * @template {CompatibleClass} T\n * @callback OnErrorCallback\n * @param {unknown} error - Thrown error\n * @param {ErrorContext<T>} context - Object containing the element, component class and configuration\n */\n\n/**\n * @template {CompatibleClass} T\n * @typedef {object} CreateAllOptions\n * @property {Element | Document} [scope] - scope of the document to search within\n * @property {OnErrorCallback<T>} [onError] - callback function if error throw by component on init\n */\n"],"names":["version","normaliseString","value","property","trimmedValue","trim","output","outputType","type","includes","length","isFinite","Number","mergeConfigs","configObjects","formattedConfigObject","configObject","key","Object","keys","option","override","isObject","extractConfigByNamespace","Component","dataset","namespace","schema","properties","newObject","entries","current","keyParts","split","index","name","getFragmentFromUrl","url","undefined","pop","getBreakpoint","window","getComputedStyle","document","documentElement","getPropertyValue","setFocus","$element","options","_options$onBeforeFocu","isFocusable","getAttribute","setAttribute","onFocus","addEventListener","onBlur","once","_options$onBlur","call","removeAttribute","onBeforeFocus","focus","isInitialised","$root","moduleName","HTMLElement","hasAttribute","isSupported","$scope","body","classList","contains","validateConfig","config","validationErrors","conditions","errors","Array","isArray","required","errorMessage","every","push","formatErrorMessage","message","normaliseDataset","out","field","GOVUKFrontendError","Error","constructor","args","SupportError","supportMessage","HTMLScriptElement","prototype","ConfigError","ElementError","messageOrOptions","component","identifier","element","expectedType","InitError","componentOrMessage","GOVUKFrontendComponent","_$root","childConstructor","elementType","checkSupport","checkInitialised","I18n","translations","_config$locale","locale","lang","t","lookupKey","translation","count","translationPluralForm","getPluralSuffix","match","replacePlaceholders","translationString","formatter","Intl","NumberFormat","supportedLocalesOf","replace","placeholderWithBraces","placeholderKey","hasOwnProperty","placeholderValue","format","hasIntlPluralRulesSupport","Boolean","PluralRules","preferredForm","select","selectPluralFormUsingFallbackRules","console","warn","Math","abs","floor","ruleset","getPluralRulesForLocale","pluralRules","localeShort","pluralRule","pluralRulesMap","languages","arabic","chinese","french","german","irish","russian","scottish","spanish","welsh","n","lastTwo","last","Accordion","i18n","controlsClass","showAllClass","showAllTextClass","sectionClass","sectionExpandedClass","sectionButtonClass","sectionHeaderClass","sectionHeadingClass","sectionHeadingDividerClass","sectionHeadingTextClass","sectionHeadingTextFocusClass","sectionShowHideToggleClass","sectionShowHideToggleFocusClass","sectionShowHideTextClass","upChevronIconClass","downChevronIconClass","sectionSummaryClass","sectionSummaryFocusClass","sectionContentClass","$sections","$showAllButton","$showAllIcon","$showAllText","defaults","querySelectorAll","initControls","initSectionHeaders","updateShowAllButton","areAllSectionsOpen","createElement","add","appendChild","$accordionControls","insertBefore","firstChild","onShowOrHideAllToggle","event","onBeforeMatch","forEach","$section","i","$header","querySelector","constructHeaderMarkup","setExpanded","isExpanded","onSectionToggle","setInitialState","$span","$heading","$summary","$button","id","attr","from","attributes","$headingText","$headingTextFocus","childNodes","$child","$showHideToggle","$showHideToggleFocus","$showHideText","$showHideIcon","getButtonPunctuationEl","$summarySpan","$summarySpanFocus","remove","removeChild","$fragment","target","Element","closest","nowExpanded","storeState","expanded","$content","newButtonText","textContent","ariaLabelParts","ariaLabelMessage","join","toString","toggle","getIdentifier","rememberExpanded","sessionStorage","setItem","exception","state","getItem","$punctuationEl","freeze","hideAllSections","hideSection","hideSectionAriaLabel","showAllSections","showSection","showSectionAriaLabel","DEBOUNCE_TIMEOUT_IN_SECONDS","Button","debounceFormSubmitTimer","handleKeyDown","debounce","$target","preventDefault","click","preventDoubleClick","setTimeout","closestAttributeValue","attributeName","$closestElementWithAttribute","CharacterCount","_ref","_this$config$maxwords","$textarea","$visibleCountMessage","$screenReaderCountMessage","lastInputTimestamp","lastInputValue","valueChecker","maxLength","HTMLTextAreaElement","HTMLInputElement","datasetConfig","configOverrides","maxlength","maxwords","Infinity","textareaDescriptionId","$textareaDescription","getElementById","insertAdjacentElement","className","bindChangeEvents","updateCountMessage","handleKeyUp","handleFocus","handleBlur","updateVisibleCountMessage","Date","now","setInterval","updateIfValueChanged","clearInterval","updateScreenReaderCountMessage","remainingNumber","isError","isOverThreshold","getCountMessage","text","_text$match","tokens","countType","formatCountMessage","translationKeySuffix","threshold","currentLength","thresholdValue","charactersUnderLimit","one","other","charactersAtLimit","charactersOverLimit","wordsUnderLimit","wordsAtLimit","wordsOverLimit","textareaDescription","anyOf","Checkboxes","$inputs","$input","targetId","syncAllConditionalReveals","handleClick","syncConditionalRevealWithInputState","inputIsChecked","checked","unCheckAllInputsExcept","allInputsWithSameName","$inputWithSameName","hasSameFormOwner","form","unCheckExclusiveInputs","allInputsWithSameNameAndExclusiveBehaviour","$exclusiveInput","$clickedInput","hasAriaControls","hasBehaviourExclusive","ErrorSummary","disableAutoFocus","focusTarget","HTMLAnchorElement","inputId","href","$legendOrLabel","getAssociatedLegendOrLabel","scrollIntoView","preventScroll","_document$querySelect","$fieldset","$legends","getElementsByTagName","$candidateLegend","legendTop","getBoundingClientRect","top","inputRect","height","innerHeight","inputBottom","ExitThisPage","$skiplinkButton","$updateSpan","$indicatorContainer","$overlay","keypressCounter","lastKeyWasModified","timeoutTime","keypressTimeoutId","timeoutMessageId","buildIndicator","initUpdateSpan","initButtonClickHandler","handleKeypress","bind","govukFrontendExitThisPageKeypress","resetPage","$indicator","updateIndicator","$indicators","exitPage","location","clearTimeout","setKeypressTimer","resetKeypressTimer","shiftKey","activated","timedOut","pressTwoMoreTimes","pressOneMoreTime","Header","$menuButton","$menu","menuIsOpen","mql","menuId","setupResponsiveChecks","handleMenuButtonClick","breakpoint","matchMedia","checkMode","addListener","matches","NotificationBanner","PasswordInput","$showHideButton","$screenReaderStatusMessage","HTMLButtonElement","hide","persisted","show","setType","isHidden","prefixButton","prefixStatus","innerText","showPassword","hidePassword","showPasswordAriaLabel","hidePasswordAriaLabel","passwordShownAnnouncement","passwordHiddenAnnouncement","Radios","$allInputs","$clickedInputForm","$clickedInputName","hasSameName","ServiceNavigation","SkipLink","_this$$root$getAttrib","hash","URL","error","origin","pathname","linkedElementId","$linkedElement","Tabs","$tabs","$tabList","$tabListItems","jsHiddenClass","changingHash","boundTabClick","boundTabKeydown","boundOnHashChange","onTabClick","onTabKeydown","onHashChange","_this$mql","setup","teardown","_this$getTab","$item","$tab","setAttributes","hideTab","$activeTab","getTab","showTab","removeEventListener","unsetAttributes","$tabWithHash","$previousTab","getCurrentTab","unhighlightTab","hidePanel","highlightTab","showPanel","panelId","$panel","getPanel","$currentTab","$nextTab","currentTarget","createHistoryEntry","activatePreviousTab","activateNextTab","parentElement","$nextTabListItem","nextElementSibling","$previousTabListItem","previousElementSibling","initAll","_config$scope","onError","log","components","accordion","button","characterCount","errorSummary","exitThisPage","notificationBanner","passwordInput","scope","createAll","createAllOptions","_createAllOptions$sco","$elements","map","filter"],"mappings":"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"}
1
+ {"version":3,"file":"all.bundle.js","sources":["../../src/govuk/common/govuk-frontend-version.mjs","../../src/govuk/common/index.mjs","../../src/govuk/errors/index.mjs","../../src/govuk/govuk-frontend-component.mjs","../../src/govuk/common/configuration.mjs","../../src/govuk/i18n.mjs","../../src/govuk/components/accordion/accordion.mjs","../../src/govuk/components/button/button.mjs","../../src/govuk/common/closest-attribute-value.mjs","../../src/govuk/components/character-count/character-count.mjs","../../src/govuk/components/checkboxes/checkboxes.mjs","../../src/govuk/components/error-summary/error-summary.mjs","../../src/govuk/components/exit-this-page/exit-this-page.mjs","../../src/govuk/components/header/header.mjs","../../src/govuk/components/notification-banner/notification-banner.mjs","../../src/govuk/components/password-input/password-input.mjs","../../src/govuk/components/radios/radios.mjs","../../src/govuk/components/service-navigation/service-navigation.mjs","../../src/govuk/components/skip-link/skip-link.mjs","../../src/govuk/components/tabs/tabs.mjs","../../src/govuk/init.mjs"],"sourcesContent":["/*\n * This variable is automatically overwritten during builds and releases.\n * It doesn't need to be updated manually.\n */\n\n/**\n * GOV.UK Frontend release version\n *\n * {@link https://github.com/alphagov/govuk-frontend/releases}\n */\nexport const version = 'development'\n","/**\n * Common helpers which do not require polyfill.\n *\n * IMPORTANT: If a helper require a polyfill, please isolate it in its own module\n * so that the polyfill can be properly tree-shaken and does not burden\n * the components that do not need that helper\n */\n\n/**\n * Get hash fragment from URL\n *\n * Extract the hash fragment (everything after the hash) from a URL,\n * but not including the hash symbol\n *\n * @private\n * @param {string} url - URL\n * @returns {string | undefined} Fragment from URL, without the hash\n */\nexport function getFragmentFromUrl(url) {\n if (!url.includes('#')) {\n return undefined\n }\n\n return url.split('#').pop()\n}\n\n/**\n * Get GOV.UK Frontend breakpoint value from CSS custom property\n *\n * @private\n * @param {string} name - Breakpoint name\n * @returns {{ property: string, value?: string }} Breakpoint object\n */\nexport function getBreakpoint(name) {\n const property = `--govuk-frontend-breakpoint-${name}`\n\n // Get value from `<html>` with breakpoints on CSS :root\n const value = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(property)\n\n return {\n property,\n value: value || undefined\n }\n}\n\n/**\n * Move focus to element\n *\n * Sets tabindex to -1 to make the element programmatically focusable,\n * but removes it on blur as the element doesn't need to be focused again.\n *\n * @private\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/**\n * Checks if component is already initialised\n *\n * @internal\n * @param {Element} $root - HTML element to be checked\n * @param {string} moduleName - name of component module\n * @returns {boolean} Whether component is already initialised\n */\nexport function isInitialised($root, moduleName) {\n return (\n $root instanceof HTMLElement &&\n $root.hasAttribute(`data-${moduleName}-init`)\n )\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 */\nexport function isSupported($scope = document.body) {\n if (!$scope) {\n return false\n }\n\n return $scope.classList.contains('govuk-frontend-supported')\n}\n\n/**\n * Check for an array\n *\n * @internal\n * @param {unknown} option - Option to check\n * @returns {boolean} Whether the option is an array\n */\nfunction isArray(option) {\n return Array.isArray(option)\n}\n\n/**\n * Check for an object\n *\n * @internal\n * @param {unknown} option - Option to check\n * @returns {boolean} Whether the option is an object\n */\nexport function isObject(option) {\n return !!option && typeof option === 'object' && !isArray(option)\n}\n\n/**\n * Format error message\n *\n * @internal\n * @param {ComponentWithModuleName} Component - Component that threw the error\n * @param {string} message - Error message\n * @returns {string} - Formatted error message\n */\nexport function formatErrorMessage(Component, message) {\n return `${Component.moduleName}: ${message}`\n}\n\n/* eslint-disable jsdoc/valid-types --\n * `{new(...args: any[] ): object}` is not recognised as valid\n * https://github.com/gajus/eslint-plugin-jsdoc/issues/145#issuecomment-1308722878\n * https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/131\n **/\n\n/**\n * @typedef ComponentWithModuleName\n * @property {string} moduleName - Name of the component\n */\n\n/* eslint-enable jsdoc/valid-types */\n","import { formatErrorMessage } from '../common/index.mjs'\n\n/**\n * GOV.UK Frontend error\n *\n * A base class for `Error`s thrown by GOV.UK Frontend.\n *\n * It is meant to be extended into specific types of errors\n * to be thrown by our code.\n *\n * @example\n * ```js\n * class MissingRootError extends GOVUKFrontendError {\n * // Setting an explicit name is important as extending the class will not\n * // set a new `name` on the subclass. The `name` property is important\n * // to ensure intelligible error names even if the class name gets\n * // mangled by a minifier\n * name = \"MissingRootError\"\n * }\n * ```\n * @virtual\n */\nexport class GOVUKFrontendError extends Error {\n name = 'GOVUKFrontendError'\n}\n\n/**\n * Indicates that GOV.UK Frontend is not supported\n */\nexport class SupportError extends GOVUKFrontendError {\n name = 'SupportError'\n\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 =\n 'noModule' in HTMLScriptElement.prototype\n ? 'GOV.UK Frontend initialised without `<body class=\"govuk-frontend-supported\">` from template `<script>` snippet'\n : 'GOV.UK Frontend is not supported in this browser'\n\n super(\n $scope\n ? supportMessage\n : 'GOV.UK Frontend initialised without `<script type=\"module\">`'\n )\n }\n}\n\n/**\n * Indicates that a component has received an illegal configuration\n */\nexport class ConfigError extends GOVUKFrontendError {\n name = 'ConfigError'\n}\n\n/**\n * Indicates an issue with an element (possibly `null` or `undefined`)\n */\nexport class ElementError extends GOVUKFrontendError {\n name = 'ElementError'\n\n /**\n * @internal\n * @overload\n * @param {string} message - Element error message\n */\n\n /**\n * @internal\n * @overload\n * @param {ElementErrorOptions} options - Element error options\n */\n\n /**\n * @internal\n * @param {string | ElementErrorOptions} messageOrOptions - Element error message or options\n */\n constructor(messageOrOptions) {\n let message = typeof messageOrOptions === 'string' ? messageOrOptions : ''\n\n // Build message from options\n if (typeof messageOrOptions === 'object') {\n const { component, identifier, element, expectedType } = messageOrOptions\n\n message = identifier\n\n // Append reason\n message += element\n ? ` is not of type ${expectedType ?? 'HTMLElement'}`\n : ' not found'\n\n message = formatErrorMessage(component, message)\n }\n\n super(message)\n }\n}\n\n/**\n * Indicates that a component is already initialised\n */\nexport class InitError extends GOVUKFrontendError {\n name = 'InitError'\n\n /**\n * @internal\n * @param {ComponentWithModuleName | string} componentOrMessage - name of the component module\n */\n constructor(componentOrMessage) {\n const message =\n typeof componentOrMessage === 'string'\n ? componentOrMessage\n : formatErrorMessage(\n componentOrMessage,\n `Root element (\\`$root\\`) already initialised`\n )\n\n super(message)\n }\n}\n\n/**\n * Element error options\n *\n * @internal\n * @typedef {object} ElementErrorOptions\n * @property {string} identifier - An identifier that'll let the user understand which element has an error. This is whatever makes the most sense\n * @property {Element | null} [element] - The element in error\n * @property {string} [expectedType] - The type that was expected for the identifier\n * @property {ComponentWithModuleName} component - Component throwing the error\n */\n\n/**\n * @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName\n */\n","import { isInitialised, isSupported } from './common/index.mjs'\nimport { ElementError, InitError, SupportError } from './errors/index.mjs'\n\n/**\n * Base Component class\n *\n * Centralises the behaviours shared by our components\n *\n * @virtual\n * @template {Element} [RootElementType=HTMLElement]\n */\nexport class GOVUKFrontendComponent {\n /**\n * @type {typeof Element}\n */\n static elementType = HTMLElement\n\n // allows Typescript user to work around the lack of types\n // in GOVUKFrontend package, Typescript is not aware of $root\n // in components that extend GOVUKFrontendComponent\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\n /**\n * @protected\n * @type {RootElementType}\n */\n _$root\n\n /**\n * Constructs a new component, validating that GOV.UK Frontend is supported\n *\n * @internal\n * @param {Element | null} [$root] - HTML element to use for component\n */\n constructor($root) {\n const childConstructor = /** @type {ChildClassConstructor} */ (\n this.constructor\n )\n\n // TypeScript does not enforce that inheriting classes will define a `moduleName`\n // (even if we add a `@virtual` `static moduleName` property to this class).\n // While we trust users to do this correctly, we do a little check to provide them\n // a helpful error message.\n //\n // After this, we'll be sure that `childConstructor` has a `moduleName`\n // as expected of the `ChildClassConstructor` we've cast `this.constructor` to.\n if (typeof childConstructor.moduleName !== 'string') {\n throw new InitError(`\\`moduleName\\` not defined in component`)\n }\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 = /** @type {RootElementType} */ ($root)\n }\n\n childConstructor.checkSupport()\n\n this.checkInitialised()\n\n const moduleName = childConstructor.moduleName\n\n this.$root.setAttribute(`data-${moduleName}-init`, '')\n }\n\n /**\n * Validates whether component is already initialised\n *\n * @private\n * @throws {InitError} when component is already initialised\n */\n checkInitialised() {\n const constructor = /** @type {ChildClassConstructor} */ (this.constructor)\n const moduleName = constructor.moduleName\n\n if (moduleName && isInitialised(this.$root, moduleName)) {\n throw new InitError(constructor)\n }\n }\n\n /**\n * Validates whether components are supported\n *\n * @throws {SupportError} when the components are not supported\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 GOVUKFrontendComponent & ChildClass} ChildClassConstructor\n */\n","import { ConfigError } from '../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../govuk-frontend-component.mjs'\n\nimport { isObject, formatErrorMessage } from './index.mjs'\n\nexport const configOverride = Symbol.for('configOverride')\n\n/**\n * Base Component class\n *\n * Centralises the behaviours shared by our components\n *\n * @virtual\n * @template {ObjectNested} [ConfigurationType={}]\n * @template {Element & { dataset: DOMStringMap }} [RootElementType=HTMLElement]\n * @augments GOVUKFrontendComponent<RootElementType>\n */\nexport class ConfigurableComponent extends GOVUKFrontendComponent {\n /**\n * configOverride\n *\n * Function which defines configuration overrides to prioritize\n * properties from the root element's dataset.\n *\n * It should take a subset of configuration as input and return\n * a new configuration object with properties that should be\n * overridden based on the root element's dataset. A Symbol\n * is used for indexing to prevent conflicts.\n *\n * @internal\n * @virtual\n * @param {ObjectNested} [param] - Configuration object\n * @returns {ObjectNested} return - Configuration object\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\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\n /**\n *\n * @type {ConfigurationType}\n */\n _config\n\n /**\n * Constructs a new component, validating that GOV.UK Frontend is supported\n *\n * @internal\n * @param {Element | null} [$root] - HTML element to use for component\n * @param {ConfigurationType} [config] - HTML element to use for component\n */\n constructor($root, config) {\n super($root)\n\n const childConstructor =\n /** @type {ChildClassConstructor<ConfigurationType>} */ (this.constructor)\n\n if (typeof childConstructor.defaults === 'undefined') {\n throw new ConfigError(\n formatErrorMessage(\n childConstructor,\n 'Config passed as parameter into constructor but no defaults defined'\n )\n )\n }\n\n const datasetConfig = /** @type {ConfigurationType} */ (\n normaliseDataset(childConstructor, this._$root.dataset)\n )\n\n this._config = /** @type {ConfigurationType} */ (\n mergeConfigs(\n childConstructor.defaults,\n config ?? {},\n this[configOverride](datasetConfig),\n datasetConfig\n )\n )\n }\n}\n\n/**\n * Normalise string\n *\n * 'If it looks like a duck, and it quacks like a duck…' 🦆\n *\n * If the passed value looks like a boolean or a number, convert it to a boolean\n * or number.\n *\n * Designed to be used to convert config passed via data attributes (which are\n * always strings) into something sensible.\n *\n * @internal\n * @param {DOMStringMap[string]} value - The value to normalise\n * @param {SchemaProperty} [property] - Component schema property\n * @returns {string | boolean | number | undefined} Normalised data\n */\nexport function normaliseString(value, property) {\n const trimmedValue = value ? value.trim() : ''\n\n let output\n let outputType = property?.type\n\n // No schema type set? Determine automatically\n if (!outputType) {\n if (['true', 'false'].includes(trimmedValue)) {\n outputType = 'boolean'\n }\n\n // Empty / whitespace-only strings are considered finite so we need to check\n // the length of the trimmed string as well\n if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {\n outputType = 'number'\n }\n }\n\n switch (outputType) {\n case 'boolean':\n output = trimmedValue === 'true'\n break\n\n case 'number':\n output = Number(trimmedValue)\n break\n\n default:\n output = value\n }\n\n return output\n}\n\n/**\n * Normalise dataset\n *\n * Loop over an object and normalise each value using {@link normaliseString},\n * optionally expanding nested `i18n.field`\n *\n * @internal\n * @param {{ schema?: Schema, moduleName: string }} Component - Component class\n * @param {DOMStringMap} dataset - HTML element dataset\n * @returns {ObjectNested} Normalised dataset\n */\nexport function normaliseDataset(Component, dataset) {\n if (typeof Component.schema === 'undefined') {\n throw new ConfigError(\n formatErrorMessage(\n Component,\n 'Config passed as parameter into constructor but no schema defined'\n )\n )\n }\n\n const out = /** @type {ReturnType<typeof normaliseDataset>} */ ({})\n\n // Normalise top-level dataset ('data-*') values using schema types\n for (const [field, property] of Object.entries(Component.schema.properties)) {\n if (field in dataset) {\n out[field] = normaliseString(dataset[field], property)\n }\n\n /**\n * Extract and normalise nested object values automatically using\n * {@link normaliseString} but only schema object types are allowed\n */\n if (property?.type === 'object') {\n out[field] = extractConfigByNamespace(Component.schema, dataset, field)\n }\n }\n\n return out\n}\n\n/**\n * Config merging function\n *\n * Takes any number of objects and combines them together, with\n * greatest priority on the LAST item passed in.\n *\n * @internal\n * @param {...{ [key: string]: unknown }} configObjects - Config objects to merge\n * @returns {{ [key: string]: unknown }} A merged config object\n */\nexport function mergeConfigs(...configObjects) {\n // Start with an empty object as our base\n /** @type {{ [key: string]: unknown }} */\n const formattedConfigObject = {}\n\n // Loop through each of the passed objects\n for (const configObject of configObjects) {\n for (const key of Object.keys(configObject)) {\n const option = formattedConfigObject[key]\n const override = configObject[key]\n\n // Push their keys one-by-one into formattedConfigObject. Any duplicate\n // keys with object values will be merged, otherwise the new value will\n // override the existing value.\n if (isObject(option) && isObject(override)) {\n // @ts-expect-error Index signature for type 'string' is missing\n formattedConfigObject[key] = mergeConfigs(option, override)\n } else {\n // Apply override\n formattedConfigObject[key] = override\n }\n }\n }\n\n return formattedConfigObject\n}\n\n/**\n * Validate component config by schema\n *\n * Follows limited examples in JSON schema for wider support in future\n *\n * {@link https://ajv.js.org/json-schema.html#compound-keywords}\n * {@link https://ajv.js.org/packages/ajv-errors.html#single-message}\n *\n * @internal\n * @param {Schema} schema - Config schema\n * @param {{ [key: string]: unknown }} config - Component config\n * @returns {string[]} List of validation errors\n */\nexport function validateConfig(schema, config) {\n const validationErrors = []\n\n // Check errors for each schema\n for (const [name, conditions] of Object.entries(schema)) {\n const errors = []\n\n // Check errors for each schema condition\n if (Array.isArray(conditions)) {\n for (const { required, errorMessage } of conditions) {\n if (!required.every((key) => !!config[key])) {\n errors.push(errorMessage) // Missing config key value\n }\n }\n\n // Check one condition passes or add errors\n if (name === 'anyOf' && !(conditions.length - errors.length >= 1)) {\n validationErrors.push(...errors)\n }\n }\n }\n\n return validationErrors\n}\n\n/**\n * Extracts keys starting with a particular namespace from dataset ('data-*')\n * object, removing the namespace in the process, normalising all values\n *\n * @internal\n * @param {Schema} schema - The schema of a component\n * @param {DOMStringMap} dataset - The object to extract key-value pairs from\n * @param {string} namespace - The namespace to filter keys with\n * @returns {ObjectNested | undefined} Nested object with dot-separated key namespace removed\n */\nexport function extractConfigByNamespace(schema, dataset, namespace) {\n const property = schema.properties[namespace]\n\n // Only extract configs for object schema properties\n if (property?.type !== 'object') {\n return\n }\n\n // Add default empty config\n const newObject = {\n [namespace]: /** @type {ObjectNested} */ ({})\n }\n\n for (const [key, value] of Object.entries(dataset)) {\n /** @type {ObjectNested | ObjectNested[NestedKey]} */\n let current = newObject\n\n // Split the key into parts, using . as our namespace separator\n const keyParts = key.split('.')\n\n /**\n * Create new level per part\n *\n * e.g. 'i18n.textareaDescription.other' becomes\n * `{ i18n: { textareaDescription: { other } } }`\n */\n for (const [index, name] of keyParts.entries()) {\n if (typeof current === 'object') {\n // Drop down to nested object until the last part\n if (index < keyParts.length - 1) {\n // New nested object (optionally) replaces existing value\n if (!isObject(current[name])) {\n current[name] = {}\n }\n\n // Drop down into new or existing nested object\n current = current[name]\n } else if (key !== namespace) {\n // Normalised value (optionally) replaces existing value\n current[name] = normaliseString(value)\n }\n }\n }\n }\n\n return newObject[namespace]\n}\n\n/**\n * @internal\n * @typedef {keyof ObjectNested} NestedKey\n * @typedef {{ [key: string]: string | boolean | number | ObjectNested | undefined }} ObjectNested\n */\n\n/**\n * Schema for component config\n *\n * @typedef {object} Schema\n * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties\n * @property {SchemaCondition[]} [anyOf] - List of schema conditions\n */\n\n/**\n * Schema property for component config\n *\n * @typedef {object} SchemaProperty\n * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type\n */\n\n/**\n * Schema condition for component config\n *\n * @typedef {object} SchemaCondition\n * @property {string[]} required - List of required config fields\n * @property {string} errorMessage - Error message when required config fields not provided\n */\n\n/**\n * @template {ObjectNested} [ConfigurationType={}]\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} [schema] - The schema of the component configuration\n * @property {ConfigurationType} [defaults] - The default values of the configuration of the component\n */\n\n/**\n * @template {ObjectNested} [ConfigurationType={}]\n * @typedef {typeof GOVUKFrontendComponent & ChildClass<ConfigurationType>} ChildClassConstructor<ConfigurationType>\n */\n","/**\n * Internal support for selecting messages to render, with placeholder\n * interpolation and locale-aware number formatting and pluralisation\n *\n * @internal\n */\nexport class I18n {\n translations\n locale\n\n /**\n * @internal\n * @param {{ [key: string]: string | TranslationPluralForms }} translations - Key-value pairs of the translation strings to use.\n * @param {object} [config] - Configuration options for the function.\n * @param {string | null} [config.locale] - An overriding locale for the PluralRules functionality.\n */\n constructor(translations = {}, config = {}) {\n // Make list of translations available throughout function\n this.translations = translations\n\n // The locale to use for PluralRules and NumberFormat\n this.locale = config.locale ?? (document.documentElement.lang || 'en')\n }\n\n /**\n * The most used function - takes the key for a given piece of UI text and\n * returns the appropriate string.\n *\n * @internal\n * @param {string} lookupKey - The lookup key of the string to use.\n * @param {{ [key: string]: unknown }} [options] - Any options passed with the translation string, e.g: for string interpolation.\n * @returns {string} The appropriate translation string.\n * @throws {Error} Lookup key required\n * @throws {Error} Options required for `${}` placeholders\n */\n t(lookupKey, options) {\n if (!lookupKey) {\n // Print a console error if no lookup key has been provided\n throw new Error('i18n: lookup key missing')\n }\n\n // Fetch the translation for that lookup key\n let translation = this.translations[lookupKey]\n\n // If the `count` option is set, determine which plural suffix is needed and\n // change the lookupKey to match. We check to see if it's numeric instead of\n // falsy, as this could legitimately be 0.\n if (typeof options?.count === 'number' && typeof translation === 'object') {\n const translationPluralForm =\n translation[this.getPluralSuffix(lookupKey, options.count)]\n\n // Update translation with plural suffix\n if (translationPluralForm) {\n translation = translationPluralForm\n }\n }\n\n if (typeof translation === 'string') {\n // Check for ${} placeholders in the translation string\n if (translation.match(/%{(.\\S+)}/)) {\n if (!options) {\n throw new Error(\n 'i18n: cannot replace placeholders in string if no option data provided'\n )\n }\n\n return this.replacePlaceholders(translation, options)\n }\n\n return translation\n }\n\n // If the key wasn't found in our translations object,\n // return the lookup key itself as the fallback\n return lookupKey\n }\n\n /**\n * Takes a translation string with placeholders, and replaces the placeholders\n * with the provided data\n *\n * @internal\n * @param {string} translationString - The translation string\n * @param {{ [key: string]: unknown }} options - Any options passed with the translation string, e.g: for string interpolation.\n * @returns {string} The translation string to output, with $\\{\\} placeholders replaced\n */\n replacePlaceholders(translationString, options) {\n const formatter = Intl.NumberFormat.supportedLocalesOf(this.locale).length\n ? new Intl.NumberFormat(this.locale)\n : undefined\n\n return translationString.replace(\n /%{(.\\S+)}/g,\n\n /**\n * Replace translation string placeholders\n *\n * @internal\n * @param {string} placeholderWithBraces - Placeholder with braces\n * @param {string} placeholderKey - Placeholder key\n * @returns {string} Placeholder value\n */\n function (placeholderWithBraces, placeholderKey) {\n if (Object.prototype.hasOwnProperty.call(options, placeholderKey)) {\n const placeholderValue = options[placeholderKey]\n\n // If a user has passed `false` as the value for the placeholder\n // treat it as though the value should not be displayed\n if (\n placeholderValue === false ||\n (typeof placeholderValue !== 'number' &&\n typeof placeholderValue !== 'string')\n ) {\n return ''\n }\n\n // If the placeholder's value is a number, localise the number formatting\n if (typeof placeholderValue === 'number') {\n return formatter\n ? formatter.format(placeholderValue)\n : `${placeholderValue}`\n }\n\n return placeholderValue\n }\n\n throw new Error(\n `i18n: no data found to replace ${placeholderWithBraces} placeholder in string`\n )\n }\n )\n }\n\n /**\n * Check to see if the browser supports Intl.PluralRules\n *\n * It requires all conditions to be met in order to be supported:\n * - The implementation of Intl supports PluralRules (NOT true in Safari 10–12)\n * - The browser/OS has plural rules for the current locale (browser dependent)\n *\n * {@link https://browsersl.ist/#q=supports+es6-module+and+not+supports+intl-pluralrules}\n *\n * @internal\n * @returns {boolean} Returns true if all conditions are met. Returns false otherwise.\n */\n hasIntlPluralRulesSupport() {\n return Boolean(\n 'PluralRules' in window.Intl &&\n Intl.PluralRules.supportedLocalesOf(this.locale).length\n )\n }\n\n /**\n * Get the appropriate suffix for the plural form.\n *\n * Uses Intl.PluralRules (or our own fallback implementation) to get the\n * 'preferred' form to use for the given count.\n *\n * Checks that a translation has been provided for that plural form – if it\n * hasn't, it'll fall back to the 'other' plural form (unless that doesn't exist\n * either, in which case an error will be thrown)\n *\n * @internal\n * @param {string} lookupKey - The lookup key of the string to use.\n * @param {number} count - Number used to determine which pluralisation to use.\n * @returns {PluralRule} The suffix associated with the correct pluralisation for this locale.\n * @throws {Error} Plural form `.other` required when preferred plural form is missing\n */\n getPluralSuffix(lookupKey, count) {\n // Validate that the number is actually a number.\n //\n // Number(count) will turn anything that can't be converted to a Number type\n // into 'NaN'. isFinite filters out NaN, as it isn't a finite number.\n count = Number(count)\n if (!isFinite(count)) {\n return 'other'\n }\n\n // Fetch the translation for that lookup key\n const translation = this.translations[lookupKey]\n\n // Check to verify that all the requirements for Intl.PluralRules are met.\n // If so, we can use that instead of our custom implementation. Otherwise,\n // use the hardcoded fallback.\n const preferredForm = this.hasIntlPluralRulesSupport()\n ? new Intl.PluralRules(this.locale).select(count)\n : this.selectPluralFormUsingFallbackRules(count)\n\n // Use the correct plural form if provided\n if (typeof translation === 'object') {\n if (preferredForm in translation) {\n return preferredForm\n // Fall back to `other` if the plural form is missing, but log a warning\n // to the console\n } else if ('other' in translation) {\n console.warn(\n `i18n: Missing plural form \".${preferredForm}\" for \"${this.locale}\" locale. Falling back to \".other\".`\n )\n\n return 'other'\n }\n }\n\n // If the required `other` plural form is missing, all we can do is error\n throw new Error(\n `i18n: Plural form \".other\" is required for \"${this.locale}\" locale`\n )\n }\n\n /**\n * Get the plural form using our fallback implementation\n *\n * This is split out into a separate function to make it easier to test the\n * fallback behaviour in an environment where Intl.PluralRules exists.\n *\n * @internal\n * @param {number} count - Number used to determine which pluralisation to use.\n * @returns {PluralRule} The pluralisation form for count in this locale.\n */\n selectPluralFormUsingFallbackRules(count) {\n // Currently our custom code can only handle positive integers, so let's\n // make sure our number is one of those.\n count = Math.abs(Math.floor(count))\n\n const ruleset = this.getPluralRulesForLocale()\n\n if (ruleset) {\n return I18n.pluralRules[ruleset](count)\n }\n\n return 'other'\n }\n\n /**\n * Work out which pluralisation rules to use for the current locale\n *\n * The locale may include a regional indicator (such as en-GB), but we don't\n * usually care about this part, as pluralisation rules are usually the same\n * regardless of region. There are exceptions, however, (e.g. Portuguese) so\n * this searches by both the full and shortened locale codes, just to be sure.\n *\n * @internal\n * @returns {string | undefined} The name of the pluralisation rule to use (a key for one\n * of the functions in this.pluralRules)\n */\n getPluralRulesForLocale() {\n const localeShort = this.locale.split('-')[0]\n\n // Look through the plural rules map to find which `pluralRule` is\n // appropriate for our current `locale`.\n for (const pluralRule in I18n.pluralRulesMap) {\n const languages = I18n.pluralRulesMap[pluralRule]\n if (languages.includes(this.locale) || languages.includes(localeShort)) {\n return pluralRule\n }\n }\n }\n\n /**\n * Map of plural rules to languages where those rules apply.\n *\n * Note: These groups are named for the most dominant or recognisable language\n * that uses each system. The groupings do not imply that the languages are\n * related to one another. Many languages have evolved the same systems\n * independently of one another.\n *\n * Code to support more languages can be found in the i18n spike:\n * {@link https://github.com/alphagov/govuk-frontend/blob/spike-i18n-support/src/govuk/i18n.mjs}\n *\n * Languages currently supported:\n *\n * Arabic: Arabic (ar)\n * Chinese: Burmese (my), Chinese (zh), Indonesian (id), Japanese (ja),\n * Javanese (jv), Korean (ko), Malay (ms), Thai (th), Vietnamese (vi)\n * French: Armenian (hy), Bangla (bn), French (fr), Gujarati (gu), Hindi (hi),\n * Persian Farsi (fa), Punjabi (pa), Zulu (zu)\n * German: Afrikaans (af), Albanian (sq), Azerbaijani (az), Basque (eu),\n * Bulgarian (bg), Catalan (ca), Danish (da), Dutch (nl), English (en),\n * Estonian (et), Finnish (fi), Georgian (ka), German (de), Greek (el),\n * Hungarian (hu), Luxembourgish (lb), Norwegian (no), Somali (so),\n * Swahili (sw), Swedish (sv), Tamil (ta), Telugu (te), Turkish (tr),\n * Urdu (ur)\n * Irish: Irish Gaelic (ga)\n * Russian: Russian (ru), Ukrainian (uk)\n * Scottish: Scottish Gaelic (gd)\n * Spanish: European Portuguese (pt-PT), Italian (it), Spanish (es)\n * Welsh: Welsh (cy)\n *\n * @internal\n * @type {{ [key: string]: string[] }}\n */\n static pluralRulesMap = {\n arabic: ['ar'],\n chinese: ['my', 'zh', 'id', 'ja', 'jv', 'ko', 'ms', 'th', 'vi'],\n french: ['hy', 'bn', 'fr', 'gu', 'hi', 'fa', 'pa', 'zu'],\n german: [\n 'af',\n 'sq',\n 'az',\n 'eu',\n 'bg',\n 'ca',\n 'da',\n 'nl',\n 'en',\n 'et',\n 'fi',\n 'ka',\n 'de',\n 'el',\n 'hu',\n 'lb',\n 'no',\n 'so',\n 'sw',\n 'sv',\n 'ta',\n 'te',\n 'tr',\n 'ur'\n ],\n irish: ['ga'],\n russian: ['ru', 'uk'],\n scottish: ['gd'],\n spanish: ['pt-PT', 'it', 'es'],\n welsh: ['cy']\n }\n\n /**\n * Different pluralisation rule sets\n *\n * Returns the appropriate suffix for the plural form associated with `n`.\n * Possible suffixes: 'zero', 'one', 'two', 'few', 'many', 'other' (the actual\n * meaning of each differs per locale). 'other' should always exist, even in\n * languages without plurals, such as Chinese.\n * {@link https://cldr.unicode.org/index/cldr-spec/plural-rules}\n *\n * The count must be a positive integer. Negative numbers and decimals aren't accounted for\n *\n * @internal\n * @type {{ [key: string]: (count: number) => PluralRule }}\n */\n static pluralRules = {\n arabic(n) {\n if (n === 0) {\n return 'zero'\n }\n if (n === 1) {\n return 'one'\n }\n if (n === 2) {\n return 'two'\n }\n if (n % 100 >= 3 && n % 100 <= 10) {\n return 'few'\n }\n if (n % 100 >= 11 && n % 100 <= 99) {\n return 'many'\n }\n return 'other'\n },\n chinese() {\n return 'other'\n },\n french(n) {\n return n === 0 || n === 1 ? 'one' : 'other'\n },\n german(n) {\n return n === 1 ? 'one' : 'other'\n },\n irish(n) {\n if (n === 1) {\n return 'one'\n }\n if (n === 2) {\n return 'two'\n }\n if (n >= 3 && n <= 6) {\n return 'few'\n }\n if (n >= 7 && n <= 10) {\n return 'many'\n }\n return 'other'\n },\n russian(n) {\n const lastTwo = n % 100\n const last = lastTwo % 10\n if (last === 1 && lastTwo !== 11) {\n return 'one'\n }\n if (last >= 2 && last <= 4 && !(lastTwo >= 12 && lastTwo <= 14)) {\n return 'few'\n }\n if (\n last === 0 ||\n (last >= 5 && last <= 9) ||\n (lastTwo >= 11 && lastTwo <= 14)\n ) {\n return 'many'\n }\n // Note: The 'other' suffix is only used by decimal numbers in Russian.\n // We don't anticipate it being used, but it's here for consistency.\n return 'other'\n },\n scottish(n) {\n if (n === 1 || n === 11) {\n return 'one'\n }\n if (n === 2 || n === 12) {\n return 'two'\n }\n if ((n >= 3 && n <= 10) || (n >= 13 && n <= 19)) {\n return 'few'\n }\n return 'other'\n },\n spanish(n) {\n if (n === 1) {\n return 'one'\n }\n if (n % 1000000 === 0 && n !== 0) {\n return 'many'\n }\n return 'other'\n },\n welsh(n) {\n if (n === 0) {\n return 'zero'\n }\n if (n === 1) {\n return 'one'\n }\n if (n === 2) {\n return 'two'\n }\n if (n === 3) {\n return 'few'\n }\n if (n === 6) {\n return 'many'\n }\n return 'other'\n }\n }\n}\n\n/**\n * Plural rule category mnemonic tags\n *\n * @internal\n * @typedef {'zero' | 'one' | 'two' | 'few' | 'many' | 'other'} PluralRule\n */\n\n/**\n * Translated message by plural rule they correspond to.\n *\n * Allows to group pluralised messages under a single key when passing\n * translations to a component's constructor\n *\n * @internal\n * @typedef {object} TranslationPluralForms\n * @property {string} [other] - General plural form\n * @property {string} [zero] - Plural form used with 0\n * @property {string} [one] - Plural form used with 1\n * @property {string} [two] - Plural form used with 2\n * @property {string} [few] - Plural form used for a few\n * @property {string} [many] - Plural form used for many\n */\n","import { ConfigurableComponent } from '../../common/configuration.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { I18n } from '../../i18n.mjs'\n\n/**\n * Accordion component\n *\n * This allows a collection of sections to be collapsed by default, showing only\n * their headers. Sections can be expanded or collapsed individually by clicking\n * their headers. A \"Show all sections\" button is also added to the top of the\n * accordion, which switches to \"Hide all sections\" when all the sections are\n * expanded.\n *\n * The state of each section is saved to the DOM via the `aria-expanded`\n * attribute, which also provides accessibility.\n *\n * @preserve\n * @augments ConfigurableComponent<AccordionConfig>\n */\nexport class Accordion extends ConfigurableComponent {\n /** @private */\n i18n\n\n /** @private */\n controlsClass = 'govuk-accordion__controls'\n\n /** @private */\n showAllClass = 'govuk-accordion__show-all'\n\n /** @private */\n showAllTextClass = 'govuk-accordion__show-all-text'\n\n /** @private */\n sectionClass = 'govuk-accordion__section'\n\n /** @private */\n sectionExpandedClass = 'govuk-accordion__section--expanded'\n\n /** @private */\n sectionButtonClass = 'govuk-accordion__section-button'\n\n /** @private */\n sectionHeaderClass = 'govuk-accordion__section-header'\n\n /** @private */\n sectionHeadingClass = 'govuk-accordion__section-heading'\n\n /** @private */\n sectionHeadingDividerClass = 'govuk-accordion__section-heading-divider'\n\n /** @private */\n sectionHeadingTextClass = 'govuk-accordion__section-heading-text'\n\n /** @private */\n sectionHeadingTextFocusClass = 'govuk-accordion__section-heading-text-focus'\n\n /** @private */\n sectionShowHideToggleClass = 'govuk-accordion__section-toggle'\n\n /** @private */\n sectionShowHideToggleFocusClass = 'govuk-accordion__section-toggle-focus'\n\n /** @private */\n sectionShowHideTextClass = 'govuk-accordion__section-toggle-text'\n\n /** @private */\n upChevronIconClass = 'govuk-accordion-nav__chevron'\n\n /** @private */\n downChevronIconClass = 'govuk-accordion-nav__chevron--down'\n\n /** @private */\n sectionSummaryClass = 'govuk-accordion__section-summary'\n\n /** @private */\n sectionSummaryFocusClass = 'govuk-accordion__section-summary-focus'\n\n /** @private */\n sectionContentClass = 'govuk-accordion__section-content'\n\n /** @private */\n $sections\n\n /**\n * @private\n * @type {HTMLButtonElement | null}\n */\n $showAllButton = null\n\n /**\n * @private\n * @type {HTMLElement | null}\n */\n $showAllIcon = null\n\n /**\n * @private\n * @type {HTMLElement | null}\n */\n $showAllText = null\n\n /**\n * @param {Element | null} $root - HTML element to use for accordion\n * @param {AccordionConfig} [config] - Accordion config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n this.i18n = new I18n(this.config.i18n)\n\n const $sections = this.$root.querySelectorAll(`.${this.sectionClass}`)\n if (!$sections.length) {\n throw new ElementError({\n component: Accordion,\n identifier: `Sections (\\`<div class=\"${this.sectionClass}\">\\`)`\n })\n }\n\n this.$sections = $sections\n\n this.initControls()\n this.initSectionHeaders()\n\n this.updateShowAllButton(this.areAllSectionsOpen())\n }\n\n /**\n * Initialise controls and set attributes\n *\n * @private\n */\n initControls() {\n // Create \"Show all\" button and set attributes\n this.$showAllButton = document.createElement('button')\n this.$showAllButton.setAttribute('type', 'button')\n this.$showAllButton.setAttribute('class', this.showAllClass)\n this.$showAllButton.setAttribute('aria-expanded', 'false')\n\n // Create icon, add to element\n this.$showAllIcon = document.createElement('span')\n this.$showAllIcon.classList.add(this.upChevronIconClass)\n this.$showAllButton.appendChild(this.$showAllIcon)\n\n // Create control wrapper and add controls to it\n const $accordionControls = document.createElement('div')\n $accordionControls.setAttribute('class', this.controlsClass)\n $accordionControls.appendChild(this.$showAllButton)\n this.$root.insertBefore($accordionControls, this.$root.firstChild)\n\n // Build additional wrapper for Show all toggle text and place after icon\n this.$showAllText = document.createElement('span')\n this.$showAllText.classList.add(this.showAllTextClass)\n this.$showAllButton.appendChild(this.$showAllText)\n\n // Handle click events on the show/hide all button\n this.$showAllButton.addEventListener('click', () =>\n this.onShowOrHideAllToggle()\n )\n\n // Handle 'beforematch' events, if the user agent supports them\n if ('onbeforematch' in document) {\n document.addEventListener('beforematch', (event) =>\n this.onBeforeMatch(event)\n )\n }\n }\n\n /**\n * Initialise section headers\n *\n * @private\n */\n initSectionHeaders() {\n this.$sections.forEach(($section, i) => {\n const $header = $section.querySelector(`.${this.sectionHeaderClass}`)\n if (!$header) {\n throw new ElementError({\n component: Accordion,\n identifier: `Section headers (\\`<div class=\"${this.sectionHeaderClass}\">\\`)`\n })\n }\n\n // Set header attributes\n this.constructHeaderMarkup($header, i)\n this.setExpanded(this.isExpanded($section), $section)\n\n // Handle events\n $header.addEventListener('click', () => this.onSectionToggle($section))\n\n // See if there is any state stored in sessionStorage and set the sections\n // to open or closed.\n this.setInitialState($section)\n })\n }\n\n /**\n * Construct section header\n *\n * @private\n * @param {Element} $header - Section header\n * @param {number} index - Section index\n */\n constructHeaderMarkup($header, index) {\n const $span = $header.querySelector(`.${this.sectionButtonClass}`)\n const $heading = $header.querySelector(`.${this.sectionHeadingClass}`)\n const $summary = $header.querySelector(`.${this.sectionSummaryClass}`)\n\n if (!$heading) {\n throw new ElementError({\n component: Accordion,\n identifier: `Section heading (\\`.${this.sectionHeadingClass}\\`)`\n })\n }\n\n if (!$span) {\n throw new ElementError({\n component: Accordion,\n identifier: `Section button placeholder (\\`<span class=\"${this.sectionButtonClass}\">\\`)`\n })\n }\n\n // Create a button element that will replace the\n // '.govuk-accordion__section-button' span\n const $button = document.createElement('button')\n $button.setAttribute('type', 'button')\n $button.setAttribute(\n 'aria-controls',\n `${this.$root.id}-content-${index + 1}`\n )\n\n // Copy all attributes from $span to $button (except `id`, which gets added\n // to the `$headingText` element)\n for (const attr of Array.from($span.attributes)) {\n if (attr.name !== 'id') {\n $button.setAttribute(attr.name, attr.value)\n }\n }\n\n // Create container for heading text so it can be styled\n const $headingText = document.createElement('span')\n $headingText.classList.add(this.sectionHeadingTextClass)\n // Copy the span ID to the heading text to allow it to be referenced by\n // `aria-labelledby` on the hidden content area without \"Show this section\"\n $headingText.id = $span.id\n\n // Create an inner heading text container to limit the width of the focus\n // state\n const $headingTextFocus = document.createElement('span')\n $headingTextFocus.classList.add(this.sectionHeadingTextFocusClass)\n $headingText.appendChild($headingTextFocus)\n // span could contain HTML elements\n // (see https://www.w3.org/TR/2011/WD-html5-20110525/content-models.html#phrasing-content)\n Array.from($span.childNodes).forEach(($child) =>\n $headingTextFocus.appendChild($child)\n )\n\n // Create container for show / hide icons and text.\n const $showHideToggle = document.createElement('span')\n $showHideToggle.classList.add(this.sectionShowHideToggleClass)\n // Tell Google not to index the 'show' text as part of the heading. Must be\n // set on the element before it's added to the DOM.\n // See https://developers.google.com/search/docs/advanced/robots/robots_meta_tag#data-nosnippet-attr\n $showHideToggle.setAttribute('data-nosnippet', '')\n // Create an inner container to limit the width of the focus state\n const $showHideToggleFocus = document.createElement('span')\n $showHideToggleFocus.classList.add(this.sectionShowHideToggleFocusClass)\n $showHideToggle.appendChild($showHideToggleFocus)\n // Create wrapper for the show / hide text. Append text after the show/hide icon\n const $showHideText = document.createElement('span')\n const $showHideIcon = document.createElement('span')\n $showHideIcon.classList.add(this.upChevronIconClass)\n $showHideToggleFocus.appendChild($showHideIcon)\n $showHideText.classList.add(this.sectionShowHideTextClass)\n $showHideToggleFocus.appendChild($showHideText)\n\n // Append elements to the button:\n // 1. Heading text\n // 2. Punctuation\n // 3. (Optional: Summary line followed by punctuation)\n // 4. Show / hide toggle\n $button.appendChild($headingText)\n $button.appendChild(this.getButtonPunctuationEl())\n\n // If summary content exists add to DOM in correct order\n if ($summary) {\n // Create a new `span` element and copy the summary line content from the\n // original `div` to the new `span`. This is because the summary line text\n // is now inside a button element, which can only contain phrasing\n // content.\n const $summarySpan = document.createElement('span')\n // Create an inner summary container to limit the width of the summary\n // focus state\n const $summarySpanFocus = document.createElement('span')\n $summarySpanFocus.classList.add(this.sectionSummaryFocusClass)\n $summarySpan.appendChild($summarySpanFocus)\n\n // Get original attributes, and pass them to the replacement\n for (const attr of Array.from($summary.attributes)) {\n $summarySpan.setAttribute(attr.name, attr.value)\n }\n\n // Copy original contents of summary to the new summary span\n Array.from($summary.childNodes).forEach(($child) =>\n $summarySpanFocus.appendChild($child)\n )\n\n // Replace the original summary `div` with the new summary `span`\n $summary.remove()\n\n $button.appendChild($summarySpan)\n $button.appendChild(this.getButtonPunctuationEl())\n }\n\n $button.appendChild($showHideToggle)\n\n $heading.removeChild($span)\n $heading.appendChild($button)\n }\n\n /**\n * When a section is opened by the user agent via the 'beforematch' event\n *\n * @private\n * @param {Event} event - Generic event\n */\n onBeforeMatch(event) {\n const $fragment = event.target\n\n // Handle elements with `.closest()` support only\n if (!($fragment instanceof Element)) {\n return\n }\n\n // Handle when fragment is inside section\n const $section = $fragment.closest(`.${this.sectionClass}`)\n if ($section) {\n this.setExpanded(true, $section)\n }\n }\n\n /**\n * When section toggled, set and store state\n *\n * @private\n * @param {Element} $section - Section element\n */\n onSectionToggle($section) {\n const nowExpanded = !this.isExpanded($section)\n this.setExpanded(nowExpanded, $section)\n\n // Store the state in sessionStorage when a change is triggered\n this.storeState($section, nowExpanded)\n }\n\n /**\n * When Open/Close All toggled, set and store state\n *\n * @private\n */\n onShowOrHideAllToggle() {\n const nowExpanded = !this.areAllSectionsOpen()\n\n this.$sections.forEach(($section) => {\n this.setExpanded(nowExpanded, $section)\n this.storeState($section, nowExpanded)\n })\n\n this.updateShowAllButton(nowExpanded)\n }\n\n /**\n * Set section attributes when opened/closed\n *\n * @private\n * @param {boolean} expanded - Section expanded\n * @param {Element} $section - Section element\n */\n setExpanded(expanded, $section) {\n const $showHideIcon = $section.querySelector(`.${this.upChevronIconClass}`)\n const $showHideText = $section.querySelector(\n `.${this.sectionShowHideTextClass}`\n )\n const $button = $section.querySelector(`.${this.sectionButtonClass}`)\n const $content = $section.querySelector(`.${this.sectionContentClass}`)\n\n if (!$content) {\n throw new ElementError({\n component: Accordion,\n identifier: `Section content (\\`<div class=\"${this.sectionContentClass}\">\\`)`\n })\n }\n\n if (!$showHideIcon || !$showHideText || !$button) {\n // Return early for elements we create\n return\n }\n\n const newButtonText = expanded\n ? this.i18n.t('hideSection')\n : this.i18n.t('showSection')\n\n $showHideText.textContent = newButtonText\n $button.setAttribute('aria-expanded', `${expanded}`)\n\n // Update aria-label combining\n const ariaLabelParts = []\n\n const $headingText = $section.querySelector(\n `.${this.sectionHeadingTextClass}`\n )\n if ($headingText) {\n ariaLabelParts.push(`${$headingText.textContent}`.trim())\n }\n\n const $summary = $section.querySelector(`.${this.sectionSummaryClass}`)\n if ($summary) {\n ariaLabelParts.push(`${$summary.textContent}`.trim())\n }\n\n const ariaLabelMessage = expanded\n ? this.i18n.t('hideSectionAriaLabel')\n : this.i18n.t('showSectionAriaLabel')\n ariaLabelParts.push(ariaLabelMessage)\n\n /*\n * Join with a comma to add pause for assistive technology.\n * Example: [heading]Section A ,[pause] Show this section.\n * https://accessibility.blog.gov.uk/2017/12/18/what-working-on-gov-uk-navigation-taught-us-about-accessibility/\n */\n $button.setAttribute('aria-label', ariaLabelParts.join(' , '))\n\n // Swap icon, change class\n if (expanded) {\n $content.removeAttribute('hidden')\n $section.classList.add(this.sectionExpandedClass)\n $showHideIcon.classList.remove(this.downChevronIconClass)\n } else {\n $content.setAttribute('hidden', 'until-found')\n $section.classList.remove(this.sectionExpandedClass)\n $showHideIcon.classList.add(this.downChevronIconClass)\n }\n\n // See if \"Show all sections\" button text should be updated\n this.updateShowAllButton(this.areAllSectionsOpen())\n }\n\n /**\n * Get state of section\n *\n * @private\n * @param {Element} $section - Section element\n * @returns {boolean} True if expanded\n */\n isExpanded($section) {\n return $section.classList.contains(this.sectionExpandedClass)\n }\n\n /**\n * Check if all sections are open\n *\n * @private\n * @returns {boolean} True if all sections are open\n */\n areAllSectionsOpen() {\n return Array.from(this.$sections).every(($section) =>\n this.isExpanded($section)\n )\n }\n\n /**\n * Update \"Show all sections\" button\n *\n * @private\n * @param {boolean} expanded - Section expanded\n */\n updateShowAllButton(expanded) {\n if (!this.$showAllButton || !this.$showAllText || !this.$showAllIcon) {\n return\n }\n\n this.$showAllButton.setAttribute('aria-expanded', expanded.toString())\n this.$showAllText.textContent = expanded\n ? this.i18n.t('hideAllSections')\n : this.i18n.t('showAllSections')\n this.$showAllIcon.classList.toggle(this.downChevronIconClass, !expanded)\n }\n\n /**\n * Get the identifier for a section\n *\n * We need a unique way of identifying each content in the Accordion.\n * Since an `#id` should be unique and an `id` is required for `aria-`\n * attributes `id` can be safely used.\n *\n * @param {Element} $section - Section element\n * @returns {string | undefined | null} Identifier for section\n */\n getIdentifier($section) {\n const $button = $section.querySelector(`.${this.sectionButtonClass}`)\n\n return $button?.getAttribute('aria-controls')\n }\n\n /**\n * Set the state of the accordions in sessionStorage\n *\n * @private\n * @param {Element} $section - Section element\n * @param {boolean} isExpanded - Whether the section is expanded\n */\n storeState($section, isExpanded) {\n if (!this.config.rememberExpanded) {\n return\n }\n\n const id = this.getIdentifier($section)\n\n if (id) {\n try {\n window.sessionStorage.setItem(id, isExpanded.toString())\n } catch (exception) {}\n }\n }\n\n /**\n * Read the state of the accordions from sessionStorage\n *\n * @private\n * @param {Element} $section - Section element\n */\n setInitialState($section) {\n if (!this.config.rememberExpanded) {\n return\n }\n\n const id = this.getIdentifier($section)\n\n if (id) {\n try {\n const state = window.sessionStorage.getItem(id)\n\n if (state !== null) {\n this.setExpanded(state === 'true', $section)\n }\n } catch (exception) {}\n }\n }\n\n /**\n * Create an element to improve semantics of the section button with\n * punctuation\n *\n * Adding punctuation to the button can also improve its general semantics by\n * dividing its contents into thematic chunks. See\n * https://github.com/alphagov/govuk-frontend/issues/2327#issuecomment-922957442\n *\n * @private\n * @returns {Element} DOM element\n */\n getButtonPunctuationEl() {\n const $punctuationEl = document.createElement('span')\n $punctuationEl.classList.add(\n 'govuk-visually-hidden',\n this.sectionHeadingDividerClass\n )\n $punctuationEl.textContent = ', '\n return $punctuationEl\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-accordion'\n\n /**\n * Accordion default config\n *\n * @see {@link AccordionConfig}\n * @constant\n * @type {AccordionConfig}\n */\n static defaults = Object.freeze({\n i18n: {\n hideAllSections: 'Hide all sections',\n hideSection: 'Hide',\n hideSectionAriaLabel: 'Hide this section',\n showAllSections: 'Show all sections',\n showSection: 'Show',\n showSectionAriaLabel: 'Show this section'\n },\n rememberExpanded: true\n })\n\n /**\n * Accordion config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n i18n: { type: 'object' },\n rememberExpanded: { type: 'boolean' }\n }\n })\n}\n\n/**\n * Accordion config\n *\n * @see {@link Accordion.defaults}\n * @typedef {object} AccordionConfig\n * @property {AccordionTranslations} [i18n=Accordion.defaults.i18n] - Accordion translations\n * @property {boolean} [rememberExpanded] - Whether the expanded and collapsed\n * state of each section is remembered and restored when navigating.\n */\n\n/**\n * Accordion translations\n *\n * @see {@link Accordion.defaults.i18n}\n * @typedef {object} AccordionTranslations\n *\n * Messages used by the component for the labels of its buttons. This includes\n * the visible text shown on screen, and text to help assistive technology users\n * for the buttons toggling each section.\n * @property {string} [hideAllSections] - The text content for the 'Hide all\n * sections' button, used when at least one section is expanded.\n * @property {string} [hideSection] - The text content for the 'Hide'\n * button, used when a section is expanded.\n * @property {string} [hideSectionAriaLabel] - The text content appended to the\n * 'Hide' button's accessible name when a section is expanded.\n * @property {string} [showAllSections] - The text content for the 'Show all\n * sections' button, used when all sections are collapsed.\n * @property {string} [showSection] - The text content for the 'Show'\n * button, used when a section is collapsed.\n * @property {string} [showSectionAriaLabel] - The text content appended to the\n * 'Show' button's accessible name when a section is expanded.\n */\n\n/**\n * @typedef {import('../../common/configuration.mjs').Schema} Schema\n */\n","import { ConfigurableComponent } from '../../common/configuration.mjs'\n\nconst DEBOUNCE_TIMEOUT_IN_SECONDS = 1\n\n/**\n * JavaScript enhancements for the Button component\n *\n * @preserve\n * @augments ConfigurableComponent<ButtonConfig>\n */\nexport class Button extends ConfigurableComponent {\n /**\n * @private\n * @type {number | null}\n */\n debounceFormSubmitTimer = null\n\n /**\n * @param {Element | null} $root - HTML element to use for button\n * @param {ButtonConfig} [config] - Button config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n this.$root.addEventListener('keydown', (event) => this.handleKeyDown(event))\n this.$root.addEventListener('click', (event) => this.debounce(event))\n }\n\n /**\n * Trigger a click event when the space key is pressed\n *\n * Some screen readers tell users they can use the space bar to activate\n * things with the 'button' role, so we need to match the functionality of\n * native HTML buttons.\n *\n * See https://github.com/alphagov/govuk_elements/pull/272#issuecomment-233028270\n *\n * @private\n * @param {KeyboardEvent} event - Keydown event\n */\n handleKeyDown(event) {\n const $target = event.target\n\n // Handle space bar only\n if (event.key !== ' ') {\n return\n }\n\n // Handle elements with [role=\"button\"] only\n if (\n $target instanceof HTMLElement &&\n $target.getAttribute('role') === 'button'\n ) {\n event.preventDefault() // prevent the page from scrolling\n $target.click()\n }\n }\n\n /**\n * Debounce double-clicks\n *\n * If the click quickly succeeds a previous click then nothing will happen.\n * This stops people accidentally causing multiple form submissions by double\n * clicking buttons.\n *\n * @private\n * @param {MouseEvent} event - Mouse click event\n * @returns {undefined | false} Returns undefined, or false when debounced\n */\n debounce(event) {\n // Check the button that was clicked has preventDoubleClick enabled\n if (!this.config.preventDoubleClick) {\n return\n }\n\n // If the timer is still running, prevent the click from submitting the form\n if (this.debounceFormSubmitTimer) {\n event.preventDefault()\n return false\n }\n\n this.debounceFormSubmitTimer = window.setTimeout(() => {\n this.debounceFormSubmitTimer = null\n }, DEBOUNCE_TIMEOUT_IN_SECONDS * 1000)\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-button'\n\n /**\n * Button default config\n *\n * @see {@link ButtonConfig}\n * @constant\n * @type {ButtonConfig}\n */\n static defaults = Object.freeze({\n preventDoubleClick: false\n })\n\n /**\n * Button config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n preventDoubleClick: { type: 'boolean' }\n }\n })\n}\n\n/**\n * Button config\n *\n * @typedef {object} ButtonConfig\n * @property {boolean} [preventDoubleClick=false] - Prevent accidental double\n * clicks on submit buttons from submitting forms multiple times.\n */\n\n/**\n * @typedef {import('../../common/configuration.mjs').Schema} Schema\n */\n","/**\n * Returns the value of the given attribute closest to the given element (including itself)\n *\n * @internal\n * @param {Element} $element - The element to start walking the DOM tree up\n * @param {string} attributeName - The name of the attribute\n * @returns {string | null} Attribute value\n */\nexport function closestAttributeValue($element, attributeName) {\n const $closestElementWithAttribute = $element.closest(`[${attributeName}]`)\n return $closestElementWithAttribute\n ? $closestElementWithAttribute.getAttribute(attributeName)\n : null\n}\n","import { closestAttributeValue } from '../../common/closest-attribute-value.mjs'\nimport {\n validateConfig,\n ConfigurableComponent,\n configOverride\n} from '../../common/configuration.mjs'\nimport { formatErrorMessage } from '../../common/index.mjs'\nimport { ConfigError, ElementError } from '../../errors/index.mjs'\nimport { I18n } from '../../i18n.mjs'\n\n/**\n * Character count component\n *\n * Tracks the number of characters or words in the `.govuk-js-character-count`\n * `<textarea>` inside the element. Displays a message with the remaining number\n * of characters/words available, or the number of characters/words in excess.\n *\n * You can configure the message to only appear after a certain percentage\n * of the available characters/words has been entered.\n *\n * @preserve\n * @augments ConfigurableComponent<CharacterCountConfig>\n */\nexport class CharacterCount extends ConfigurableComponent {\n /** @private */\n $textarea\n\n /** @private */\n $visibleCountMessage\n\n /** @private */\n $screenReaderCountMessage\n\n /**\n * @private\n * @type {number | null}\n */\n lastInputTimestamp = null\n\n /** @private */\n lastInputValue = ''\n\n /**\n * @private\n * @type {number | null}\n */\n valueChecker = null\n\n /** @private */\n i18n\n\n /** @private */\n maxLength;\n\n /**\n * Character count config override\n *\n * To ensure data-attributes take complete precedence, even if they change\n * the type of count, we need to reset the `maxlength` and `maxwords` from\n * the JavaScript config.\n *\n * @internal\n * @param {CharacterCountConfig} datasetConfig - configuration specified by dataset\n * @returns {CharacterCountConfig} - configuration to override by dataset\n */\n [configOverride](datasetConfig) {\n let configOverrides = {}\n if ('maxwords' in datasetConfig || 'maxlength' in datasetConfig) {\n configOverrides = {\n maxlength: undefined,\n maxwords: undefined\n }\n }\n\n return configOverrides\n }\n\n /**\n * @param {Element | null} $root - HTML element to use for character count\n * @param {CharacterCountConfig} [config] - Character count config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $textarea = this.$root.querySelector('.govuk-js-character-count')\n if (\n !(\n $textarea instanceof HTMLTextAreaElement ||\n $textarea instanceof HTMLInputElement\n )\n ) {\n throw new ElementError({\n component: CharacterCount,\n element: $textarea,\n expectedType: 'HTMLTextareaElement or HTMLInputElement',\n identifier: 'Form field (`.govuk-js-character-count`)'\n })\n }\n\n // Check for valid config\n const errors = validateConfig(CharacterCount.schema, this.config)\n if (errors[0]) {\n throw new ConfigError(formatErrorMessage(CharacterCount, errors[0]))\n }\n\n this.i18n = new I18n(this.config.i18n, {\n // Read the fallback if necessary rather than have it set in the defaults\n locale: closestAttributeValue(this.$root, 'lang')\n })\n\n // Determine the limit attribute (characters or words)\n this.maxLength = this.config.maxwords ?? this.config.maxlength ?? Infinity\n\n this.$textarea = $textarea\n\n const textareaDescriptionId = `${this.$textarea.id}-info`\n const $textareaDescription = document.getElementById(textareaDescriptionId)\n if (!$textareaDescription) {\n throw new ElementError({\n component: CharacterCount,\n element: $textareaDescription,\n identifier: `Count message (\\`id=\"${textareaDescriptionId}\"\\`)`\n })\n }\n\n // Inject a description for the textarea if none is present already\n // for when the component was rendered with no maxlength, maxwords\n // nor custom textareaDescriptionText\n if (`${$textareaDescription.textContent}`.match(/^\\s*$/)) {\n $textareaDescription.textContent = this.i18n.t('textareaDescription', {\n count: this.maxLength\n })\n }\n\n // Move the textarea description to be immediately after the textarea\n // Kept for backwards compatibility\n this.$textarea.insertAdjacentElement('afterend', $textareaDescription)\n\n // Create the *screen reader* specific live-updating counter\n // This doesn't need any styling classes, as it is never visible\n const $screenReaderCountMessage = document.createElement('div')\n $screenReaderCountMessage.className =\n 'govuk-character-count__sr-status govuk-visually-hidden'\n $screenReaderCountMessage.setAttribute('aria-live', 'polite')\n this.$screenReaderCountMessage = $screenReaderCountMessage\n $textareaDescription.insertAdjacentElement(\n 'afterend',\n $screenReaderCountMessage\n )\n\n // Create our live-updating counter element, copying the classes from the\n // textarea description for backwards compatibility as these may have been\n // configured\n const $visibleCountMessage = document.createElement('div')\n $visibleCountMessage.className = $textareaDescription.className\n $visibleCountMessage.classList.add('govuk-character-count__status')\n $visibleCountMessage.setAttribute('aria-hidden', 'true')\n this.$visibleCountMessage = $visibleCountMessage\n $textareaDescription.insertAdjacentElement('afterend', $visibleCountMessage)\n\n // Hide the textarea description\n $textareaDescription.classList.add('govuk-visually-hidden')\n\n // Remove hard limit if set\n this.$textarea.removeAttribute('maxlength')\n\n this.bindChangeEvents()\n\n // When the page is restored after navigating 'back' in some browsers the\n // state of form controls is not restored until *after* the DOMContentLoaded\n // event is fired, so we need to sync after the pageshow event.\n window.addEventListener('pageshow', () => this.updateCountMessage())\n\n // Although we've set up handlers to sync state on the pageshow event, init\n // could be called after those events have fired, for example if they are\n // added to the page dynamically, so update now too.\n this.updateCountMessage()\n }\n\n /**\n * Bind change events\n *\n * Set up event listeners on the $textarea so that the count messages update\n * when the user types.\n *\n * @private\n */\n bindChangeEvents() {\n this.$textarea.addEventListener('keyup', () => this.handleKeyUp())\n\n // Bind focus/blur events to start/stop polling\n this.$textarea.addEventListener('focus', () => this.handleFocus())\n this.$textarea.addEventListener('blur', () => this.handleBlur())\n }\n\n /**\n * Handle key up event\n *\n * Update the visible character counter and keep track of when the last update\n * happened for each keypress\n *\n * @private\n */\n handleKeyUp() {\n this.updateVisibleCountMessage()\n this.lastInputTimestamp = Date.now()\n }\n\n /**\n * Handle focus event\n *\n * Speech recognition software such as Dragon NaturallySpeaking will modify\n * the fields by directly changing its `value`. These changes don't trigger\n * events in JavaScript, so we need to poll to handle when and if they occur.\n *\n * Once the keyup event hasn't been detected for at least 1000 ms (1s), check\n * if the textarea value has changed and update the count message if it has.\n *\n * This is so that the update triggered by the manual comparison doesn't\n * conflict with debounced KeyboardEvent updates.\n *\n * @private\n */\n handleFocus() {\n this.valueChecker = window.setInterval(() => {\n if (\n !this.lastInputTimestamp ||\n Date.now() - 500 >= this.lastInputTimestamp\n ) {\n this.updateIfValueChanged()\n }\n }, 1000)\n }\n\n /**\n * Handle blur event\n *\n * Stop checking the textarea value once the textarea no longer has focus\n *\n * @private\n */\n handleBlur() {\n // Cancel value checking on blur\n if (this.valueChecker) {\n window.clearInterval(this.valueChecker)\n }\n }\n\n /**\n * Update count message if textarea value has changed\n *\n * @private\n */\n updateIfValueChanged() {\n if (this.$textarea.value !== this.lastInputValue) {\n this.lastInputValue = this.$textarea.value\n this.updateCountMessage()\n }\n }\n\n /**\n * Update count message\n *\n * Helper function to update both the visible and screen reader-specific\n * counters simultaneously (e.g. on init)\n *\n * @private\n */\n updateCountMessage() {\n this.updateVisibleCountMessage()\n this.updateScreenReaderCountMessage()\n }\n\n /**\n * Update visible count message\n *\n * @private\n */\n updateVisibleCountMessage() {\n const remainingNumber = this.maxLength - this.count(this.$textarea.value)\n const isError = remainingNumber < 0\n\n // If input is over the threshold, remove the disabled class which renders\n // the counter invisible.\n this.$visibleCountMessage.classList.toggle(\n 'govuk-character-count__message--disabled',\n !this.isOverThreshold()\n )\n\n // Update styles\n this.$textarea.classList.toggle('govuk-textarea--error', isError)\n this.$visibleCountMessage.classList.toggle('govuk-error-message', isError)\n this.$visibleCountMessage.classList.toggle('govuk-hint', !isError)\n\n // Update message\n this.$visibleCountMessage.textContent = this.getCountMessage()\n }\n\n /**\n * Update screen reader count message\n *\n * @private\n */\n updateScreenReaderCountMessage() {\n // If over the threshold, remove the aria-hidden attribute, allowing screen\n // readers to announce the content of the element.\n if (this.isOverThreshold()) {\n this.$screenReaderCountMessage.removeAttribute('aria-hidden')\n } else {\n this.$screenReaderCountMessage.setAttribute('aria-hidden', 'true')\n }\n\n // Update message\n this.$screenReaderCountMessage.textContent = this.getCountMessage()\n }\n\n /**\n * Count the number of characters (or words, if `config.maxwords` is set)\n * in the given text\n *\n * @private\n * @param {string} text - The text to count the characters of\n * @returns {number} the number of characters (or words) in the text\n */\n count(text) {\n if (this.config.maxwords) {\n const tokens = text.match(/\\S+/g) ?? [] // Matches consecutive non-whitespace chars\n return tokens.length\n }\n\n return text.length\n }\n\n /**\n * Get count message\n *\n * @private\n * @returns {string} Status message\n */\n getCountMessage() {\n const remainingNumber = this.maxLength - this.count(this.$textarea.value)\n const countType = this.config.maxwords ? 'words' : 'characters'\n return this.formatCountMessage(remainingNumber, countType)\n }\n\n /**\n * Formats the message shown to users according to what's counted\n * and how many remain\n *\n * @private\n * @param {number} remainingNumber - The number of words/characaters remaining\n * @param {string} countType - \"words\" or \"characters\"\n * @returns {string} Status message\n */\n formatCountMessage(remainingNumber, countType) {\n if (remainingNumber === 0) {\n return this.i18n.t(`${countType}AtLimit`)\n }\n\n const translationKeySuffix =\n remainingNumber < 0 ? 'OverLimit' : 'UnderLimit'\n\n return this.i18n.t(`${countType}${translationKeySuffix}`, {\n count: Math.abs(remainingNumber)\n })\n }\n\n /**\n * Check if count is over threshold\n *\n * Checks whether the value is over the configured threshold for the input.\n * If there is no configured threshold, it is set to 0 and this function will\n * always return true.\n *\n * @private\n * @returns {boolean} true if the current count is over the config.threshold\n * (or no threshold is set)\n */\n isOverThreshold() {\n // No threshold means we're always above threshold so save some computation\n if (!this.config.threshold) {\n return true\n }\n\n // Determine the remaining number of characters/words\n const currentLength = this.count(this.$textarea.value)\n const maxLength = this.maxLength\n\n const thresholdValue = (maxLength * this.config.threshold) / 100\n\n return thresholdValue <= currentLength\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-character-count'\n\n /**\n * Character count default config\n *\n * @see {@link CharacterCountConfig}\n * @constant\n * @type {CharacterCountConfig}\n */\n static defaults = Object.freeze({\n threshold: 0,\n i18n: {\n // Characters\n charactersUnderLimit: {\n one: 'You have %{count} character remaining',\n other: 'You have %{count} characters remaining'\n },\n charactersAtLimit: 'You have 0 characters remaining',\n charactersOverLimit: {\n one: 'You have %{count} character too many',\n other: 'You have %{count} characters too many'\n },\n // Words\n wordsUnderLimit: {\n one: 'You have %{count} word remaining',\n other: 'You have %{count} words remaining'\n },\n wordsAtLimit: 'You have 0 words remaining',\n wordsOverLimit: {\n one: 'You have %{count} word too many',\n other: 'You have %{count} words too many'\n },\n textareaDescription: {\n other: ''\n }\n }\n })\n\n /**\n * Character count config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n i18n: { type: 'object' },\n maxwords: { type: 'number' },\n maxlength: { type: 'number' },\n threshold: { type: 'number' }\n },\n anyOf: [\n {\n required: ['maxwords'],\n errorMessage: 'Either \"maxlength\" or \"maxwords\" must be provided'\n },\n {\n required: ['maxlength'],\n errorMessage: 'Either \"maxlength\" or \"maxwords\" must be provided'\n }\n ]\n })\n}\n\n/**\n * Character count config\n *\n * @see {@link CharacterCount.defaults}\n * @typedef {object} CharacterCountConfig\n * @property {number} [maxlength] - The maximum number of characters.\n * If maxwords is provided, the maxlength option will be ignored.\n * @property {number} [maxwords] - The maximum number of words. If maxwords is\n * provided, the maxlength option will be ignored.\n * @property {number} [threshold=0] - The percentage value of the limit at\n * which point the count message is displayed. If this attribute is set, the\n * count message will be hidden by default.\n * @property {CharacterCountTranslations} [i18n=CharacterCount.defaults.i18n] - Character count translations\n */\n\n/**\n * Character count translations\n *\n * @see {@link CharacterCount.defaults.i18n}\n * @typedef {object} CharacterCountTranslations\n *\n * Messages shown to users as they type. It provides feedback on how many words\n * or characters they have remaining or if they are over the limit. This also\n * includes a message used as an accessible description for the textarea.\n * @property {TranslationPluralForms} [charactersUnderLimit] - Message displayed\n * when the number of characters is under the configured maximum, `maxlength`.\n * This message is displayed visually and through assistive technologies. The\n * component will replace the `%{count}` placeholder with the number of\n * remaining characters. This is a [pluralised list of\n * messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).\n * @property {string} [charactersAtLimit] - Message displayed when the number of\n * characters reaches the configured maximum, `maxlength`. This message is\n * displayed visually and through assistive technologies.\n * @property {TranslationPluralForms} [charactersOverLimit] - Message displayed\n * when the number of characters is over the configured maximum, `maxlength`.\n * This message is displayed visually and through assistive technologies. The\n * component will replace the `%{count}` placeholder with the number of\n * remaining characters. This is a [pluralised list of\n * messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).\n * @property {TranslationPluralForms} [wordsUnderLimit] - Message displayed when\n * the number of words is under the configured maximum, `maxlength`. This\n * message is displayed visually and through assistive technologies. The\n * component will replace the `%{count}` placeholder with the number of\n * remaining words. This is a [pluralised list of\n * messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).\n * @property {string} [wordsAtLimit] - Message displayed when the number of\n * words reaches the configured maximum, `maxlength`. This message is\n * displayed visually and through assistive technologies.\n * @property {TranslationPluralForms} [wordsOverLimit] - Message displayed when\n * the number of words is over the configured maximum, `maxlength`. This\n * message is displayed visually and through assistive technologies. The\n * component will replace the `%{count}` placeholder with the number of\n * remaining words. This is a [pluralised list of\n * messages](https://frontend.design-system.service.gov.uk/localise-govuk-frontend).\n * @property {TranslationPluralForms} [textareaDescription] - Message made\n * available to assistive technologies, if none is already present in the\n * HTML, to describe that the component accepts only a limited amount of\n * content. It is visible on the page when JavaScript is unavailable. The\n * component will replace the `%{count}` placeholder with the value of the\n * `maxlength` or `maxwords` parameter.\n */\n\n/**\n * @typedef {import('../../common/configuration.mjs').Schema} Schema\n * @typedef {import('../../i18n.mjs').TranslationPluralForms} TranslationPluralForms\n */\n","import { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Checkboxes component\n *\n * @preserve\n */\nexport class Checkboxes extends GOVUKFrontendComponent {\n /** @private */\n $inputs\n\n /**\n * Checkboxes can be associated with a 'conditionally revealed' content block\n * – for example, a checkbox for 'Phone' could reveal an additional form field\n * for the user to enter their phone number.\n *\n * These associations are made using a `data-aria-controls` attribute, which\n * is promoted to an aria-controls attribute during initialisation.\n *\n * We also need to restore the state of any conditional reveals on the page\n * (for example if the user has navigated back), and set up event handlers to\n * keep the reveal in sync with the checkbox state.\n *\n * @param {Element | null} $root - HTML element to use for checkboxes\n */\n constructor($root) {\n super($root)\n\n const $inputs = this.$root.querySelectorAll('input[type=\"checkbox\"]')\n if (!$inputs.length) {\n throw new ElementError({\n component: Checkboxes,\n identifier: 'Form inputs (`<input type=\"checkbox\">`)'\n })\n }\n\n this.$inputs = $inputs\n\n this.$inputs.forEach(($input) => {\n const targetId = $input.getAttribute('data-aria-controls')\n\n // Skip radios without data-aria-controls attributes\n if (!targetId) {\n return\n }\n\n // Throw if target conditional element does not exist.\n if (!document.getElementById(targetId)) {\n throw new ElementError({\n component: Checkboxes,\n identifier: `Conditional reveal (\\`id=\"${targetId}\"\\`)`\n })\n }\n\n // Promote the data-aria-controls attribute to a aria-controls attribute\n // so that the relationship is exposed in the AOM\n $input.setAttribute('aria-controls', targetId)\n $input.removeAttribute('data-aria-controls')\n })\n\n // When the page is restored after navigating 'back' in some browsers the\n // state of form controls is not restored until *after* the DOMContentLoaded\n // event is fired, so we need to sync after the pageshow event.\n window.addEventListener('pageshow', () => this.syncAllConditionalReveals())\n\n // Although we've set up handlers to sync state on the pageshow event, init\n // could be called after those events have fired, for example if they are\n // added to the page dynamically, so sync now too.\n this.syncAllConditionalReveals()\n\n // Handle events\n this.$root.addEventListener('click', (event) => this.handleClick(event))\n }\n\n /**\n * Sync the conditional reveal states for all checkboxes in this component.\n *\n * @private\n */\n syncAllConditionalReveals() {\n this.$inputs.forEach(($input) =>\n this.syncConditionalRevealWithInputState($input)\n )\n }\n\n /**\n * Sync conditional reveal with the input state\n *\n * Synchronise the visibility of the conditional reveal, and its accessible\n * state, with the input's checked state.\n *\n * @private\n * @param {HTMLInputElement} $input - Checkbox input\n */\n syncConditionalRevealWithInputState($input) {\n const targetId = $input.getAttribute('aria-controls')\n if (!targetId) {\n return\n }\n\n const $target = document.getElementById(targetId)\n if ($target?.classList.contains('govuk-checkboxes__conditional')) {\n const inputIsChecked = $input.checked\n\n $input.setAttribute('aria-expanded', inputIsChecked.toString())\n $target.classList.toggle(\n 'govuk-checkboxes__conditional--hidden',\n !inputIsChecked\n )\n }\n }\n\n /**\n * Uncheck other checkboxes\n *\n * Find any other checkbox inputs with the same name value, and uncheck them.\n * This is useful for when a “None of these\" checkbox is checked.\n *\n * @private\n * @param {HTMLInputElement} $input - Checkbox input\n */\n unCheckAllInputsExcept($input) {\n const allInputsWithSameName = document.querySelectorAll(\n `input[type=\"checkbox\"][name=\"${$input.name}\"]`\n )\n\n allInputsWithSameName.forEach(($inputWithSameName) => {\n const hasSameFormOwner = $input.form === $inputWithSameName.form\n if (hasSameFormOwner && $inputWithSameName !== $input) {\n $inputWithSameName.checked = false\n this.syncConditionalRevealWithInputState($inputWithSameName)\n }\n })\n }\n\n /**\n * Uncheck exclusive checkboxes\n *\n * Find any checkbox inputs with the same name value and the 'exclusive'\n * behaviour, and uncheck them. This helps prevent someone checking both a\n * regular checkbox and a \"None of these\" checkbox in the same fieldset.\n *\n * @private\n * @param {HTMLInputElement} $input - Checkbox input\n */\n unCheckExclusiveInputs($input) {\n const allInputsWithSameNameAndExclusiveBehaviour =\n document.querySelectorAll(\n `input[data-behaviour=\"exclusive\"][type=\"checkbox\"][name=\"${$input.name}\"]`\n )\n\n allInputsWithSameNameAndExclusiveBehaviour.forEach(($exclusiveInput) => {\n const hasSameFormOwner = $input.form === $exclusiveInput.form\n if (hasSameFormOwner) {\n $exclusiveInput.checked = false\n this.syncConditionalRevealWithInputState($exclusiveInput)\n }\n })\n }\n\n /**\n * Click event handler\n *\n * Handle a click within the component root – if the click occurred on a checkbox,\n * sync the state of any associated conditional reveal with the checkbox\n * state.\n *\n * @private\n * @param {MouseEvent} event - Click event\n */\n handleClick(event) {\n const $clickedInput = event.target\n\n // Ignore clicks on things that aren't checkbox inputs\n if (\n !($clickedInput instanceof HTMLInputElement) ||\n $clickedInput.type !== 'checkbox'\n ) {\n return\n }\n\n // If the checkbox conditionally-reveals some content, sync the state\n const hasAriaControls = $clickedInput.getAttribute('aria-controls')\n if (hasAriaControls) {\n this.syncConditionalRevealWithInputState($clickedInput)\n }\n\n // No further behaviour needed for unchecking\n if (!$clickedInput.checked) {\n return\n }\n\n // Handle 'exclusive' checkbox behaviour (ie \"None of these\")\n const hasBehaviourExclusive =\n $clickedInput.getAttribute('data-behaviour') === 'exclusive'\n if (hasBehaviourExclusive) {\n this.unCheckAllInputsExcept($clickedInput)\n } else {\n this.unCheckExclusiveInputs($clickedInput)\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-checkboxes'\n}\n","import { ConfigurableComponent } from '../../common/configuration.mjs'\nimport { getFragmentFromUrl, setFocus } from '../../common/index.mjs'\n\n/**\n * Error summary component\n *\n * Takes focus on initialisation for accessible announcement, unless disabled in\n * configuration.\n *\n * @preserve\n * @augments ConfigurableComponent<ErrorSummaryConfig>\n */\nexport class ErrorSummary extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for error summary\n * @param {ErrorSummaryConfig} [config] - Error summary config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n /**\n * Focus the error summary\n */\n if (!this.config.disableAutoFocus) {\n setFocus(this.$root)\n }\n\n this.$root.addEventListener('click', (event) => this.handleClick(event))\n }\n\n /**\n * Click event handler\n *\n * @private\n * @param {MouseEvent} event - Click event\n */\n handleClick(event) {\n const $target = event.target\n if ($target && this.focusTarget($target)) {\n event.preventDefault()\n }\n }\n\n /**\n * Focus the target element\n *\n * By default, the browser will scroll the target into view. Because our\n * labels or legends appear above the input, this means the user will be\n * presented with an input without any context, as the label or legend will be\n * off the top of the screen.\n *\n * Manually handling the click event, scrolling the question into view and\n * then focussing the element solves this.\n *\n * This also results in the label and/or legend being announced correctly in\n * NVDA (as tested in 2018.3.2) - without this only the field type is\n * announced (e.g. \"Edit, has autocomplete\").\n *\n * @private\n * @param {EventTarget} $target - Event target\n * @returns {boolean} True if the target was able to be focussed\n */\n focusTarget($target) {\n // If the element that was clicked was not a link, return early\n if (!($target instanceof HTMLAnchorElement)) {\n return false\n }\n\n const inputId = getFragmentFromUrl($target.href)\n if (!inputId) {\n return false\n }\n\n const $input = document.getElementById(inputId)\n if (!$input) {\n return false\n }\n\n const $legendOrLabel = this.getAssociatedLegendOrLabel($input)\n if (!$legendOrLabel) {\n return false\n }\n\n // Scroll the legend or label into view *before* calling focus on the input\n // to avoid extra scrolling in browsers that don't support `preventScroll`\n // (which at time of writing is most of them...)\n $legendOrLabel.scrollIntoView()\n $input.focus({ preventScroll: true })\n\n return true\n }\n\n /**\n * Get associated legend or label\n *\n * Returns the first element that exists from this list:\n *\n * - The `<legend>` associated with the closest `<fieldset>` ancestor, as long\n * as the top of it is no more than half a viewport height away from the\n * bottom of the input\n * - The first `<label>` that is associated with the input using for=\"inputId\"\n * - The closest parent `<label>`\n *\n * @private\n * @param {Element} $input - The input\n * @returns {Element | null} Associated legend or label, or null if no\n * associated legend or label can be found\n */\n getAssociatedLegendOrLabel($input) {\n const $fieldset = $input.closest('fieldset')\n\n if ($fieldset) {\n const $legends = $fieldset.getElementsByTagName('legend')\n\n if ($legends.length) {\n const $candidateLegend = $legends[0]\n\n // If the input type is radio or checkbox, always use the legend if\n // there is one.\n if (\n $input instanceof HTMLInputElement &&\n ($input.type === 'checkbox' || $input.type === 'radio')\n ) {\n return $candidateLegend\n }\n\n // For other input types, only scroll to the fieldset’s legend (instead\n // of the label associated with the input) if the input would end up in\n // the top half of the screen.\n //\n // This should avoid situations where the input either ends up off the\n // screen, or obscured by a software keyboard.\n const legendTop = $candidateLegend.getBoundingClientRect().top\n const inputRect = $input.getBoundingClientRect()\n\n // If the browser doesn't support Element.getBoundingClientRect().height\n // or window.innerHeight (like IE8), bail and just link to the label.\n if (inputRect.height && window.innerHeight) {\n const inputBottom = inputRect.top + inputRect.height\n\n if (inputBottom - legendTop < window.innerHeight / 2) {\n return $candidateLegend\n }\n }\n }\n }\n\n return (\n document.querySelector(`label[for='${$input.getAttribute('id')}']`) ??\n $input.closest('label')\n )\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-error-summary'\n\n /**\n * Error summary default config\n *\n * @see {@link ErrorSummaryConfig}\n * @constant\n * @type {ErrorSummaryConfig}\n */\n static defaults = Object.freeze({\n disableAutoFocus: false\n })\n\n /**\n * Error summary config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n disableAutoFocus: { type: 'boolean' }\n }\n })\n}\n\n/**\n * Error summary config\n *\n * @typedef {object} ErrorSummaryConfig\n * @property {boolean} [disableAutoFocus=false] - If set to `true` the error\n * summary will not be focussed when the page loads.\n */\n\n/**\n * @typedef {import('../../common/configuration.mjs').Schema} Schema\n */\n","import { ConfigurableComponent } from '../../common/configuration.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { I18n } from '../../i18n.mjs'\n\n/**\n * Exit this page component\n *\n * @preserve\n * @augments ConfigurableComponent<ExitThisPageConfig>\n */\nexport class ExitThisPage extends ConfigurableComponent {\n /** @private */\n i18n\n\n /** @private */\n $button\n\n /**\n * @private\n * @type {HTMLAnchorElement | null}\n */\n $skiplinkButton = null\n\n /**\n * @private\n * @type {HTMLElement | null}\n */\n $updateSpan = null\n\n /**\n * @private\n * @type {HTMLElement | null}\n */\n $indicatorContainer = null\n\n /**\n * @private\n * @type {HTMLElement | null}\n */\n $overlay = null\n\n /** @private */\n keypressCounter = 0\n\n /** @private */\n lastKeyWasModified = false\n\n /** @private */\n timeoutTime = 5000 // milliseconds\n\n // Store the timeout events so that we can clear them to avoid user keypresses overlapping\n // setTimeout returns an id that we can use to clear it with clearTimeout,\n // hence the 'Id' suffix\n\n /**\n * @private\n * @type {number | null}\n */\n keypressTimeoutId = null\n\n /**\n * @private\n * @type {number | null}\n */\n timeoutMessageId = null\n\n /**\n * @param {Element | null} $root - HTML element that wraps the Exit This Page button\n * @param {ExitThisPageConfig} [config] - Exit This Page config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $button = this.$root.querySelector('.govuk-exit-this-page__button')\n if (!($button instanceof HTMLAnchorElement)) {\n throw new ElementError({\n component: ExitThisPage,\n element: $button,\n expectedType: 'HTMLAnchorElement',\n identifier: 'Button (`.govuk-exit-this-page__button`)'\n })\n }\n\n this.i18n = new I18n(this.config.i18n)\n this.$button = $button\n\n const $skiplinkButton = document.querySelector(\n '.govuk-js-exit-this-page-skiplink'\n )\n if ($skiplinkButton instanceof HTMLAnchorElement) {\n this.$skiplinkButton = $skiplinkButton\n }\n\n this.buildIndicator()\n this.initUpdateSpan()\n this.initButtonClickHandler()\n\n // Check to see if this has already been done by a previous initialisation of ExitThisPage\n if (!('govukFrontendExitThisPageKeypress' in document.body.dataset)) {\n document.addEventListener('keyup', this.handleKeypress.bind(this), true)\n document.body.dataset.govukFrontendExitThisPageKeypress = 'true'\n }\n\n // When the page is restored after navigating 'back' in some browsers the\n // blank overlay remains present, rendering the page unusable. Here, we check\n // to see if it's present on page (re)load, and remove it if so.\n window.addEventListener('pageshow', this.resetPage.bind(this))\n }\n\n /**\n * Create the <span> we use for screen reader announcements.\n *\n * @private\n */\n initUpdateSpan() {\n this.$updateSpan = document.createElement('span')\n this.$updateSpan.setAttribute('role', 'status')\n this.$updateSpan.className = 'govuk-visually-hidden'\n\n this.$root.appendChild(this.$updateSpan)\n }\n\n /**\n * Create button click handlers.\n *\n * @private\n */\n initButtonClickHandler() {\n // Main EtP button\n this.$button.addEventListener('click', this.handleClick.bind(this))\n\n // EtP secondary link\n if (this.$skiplinkButton) {\n this.$skiplinkButton.addEventListener(\n 'click',\n this.handleClick.bind(this)\n )\n }\n }\n\n /**\n * Create the HTML for the 'three lights' indicator on the button.\n *\n * @private\n */\n buildIndicator() {\n // Build container\n // Putting `aria-hidden` on it as it won't contain any readable information\n this.$indicatorContainer = document.createElement('div')\n this.$indicatorContainer.className = 'govuk-exit-this-page__indicator'\n this.$indicatorContainer.setAttribute('aria-hidden', 'true')\n\n // Create three 'lights' and place them within the container\n for (let i = 0; i < 3; i++) {\n const $indicator = document.createElement('div')\n $indicator.className = 'govuk-exit-this-page__indicator-light'\n this.$indicatorContainer.appendChild($indicator)\n }\n\n // Append it all to the module\n this.$button.appendChild(this.$indicatorContainer)\n }\n\n /**\n * Update whether the lights are visible and which ones are lit up depending on\n * the value of `keypressCounter`.\n *\n * @private\n */\n updateIndicator() {\n if (!this.$indicatorContainer) {\n return\n }\n\n // Show or hide the indicator container depending on keypressCounter value\n this.$indicatorContainer.classList.toggle(\n 'govuk-exit-this-page__indicator--visible',\n this.keypressCounter > 0\n )\n\n // Turn on only the indicators we want on\n const $indicators = this.$indicatorContainer.querySelectorAll(\n '.govuk-exit-this-page__indicator-light'\n )\n $indicators.forEach(($indicator, index) => {\n $indicator.classList.toggle(\n 'govuk-exit-this-page__indicator-light--on',\n index < this.keypressCounter\n )\n })\n }\n\n /**\n * Initiates the redirection away from the current page.\n * Includes the loading overlay functionality, which covers the current page with a\n * white overlay so that the contents are not visible during the loading\n * process. This is particularly important on slow network connections.\n *\n * @private\n */\n exitPage() {\n if (!this.$updateSpan) {\n return\n }\n\n this.$updateSpan.textContent = ''\n\n // Blank the page\n // As well as creating an overlay with text, we also set the body to hidden\n // to prevent screen reader and sequential navigation users potentially\n // navigating through the page behind the overlay during loading\n document.body.classList.add('govuk-exit-this-page-hide-content')\n this.$overlay = document.createElement('div')\n this.$overlay.className = 'govuk-exit-this-page-overlay'\n this.$overlay.setAttribute('role', 'alert')\n\n // we do these this way round, thus incurring a second paint, because changing\n // the element text after adding it means that screen readers pick up the\n // announcement more reliably.\n document.body.appendChild(this.$overlay)\n this.$overlay.textContent = this.i18n.t('activated')\n\n window.location.href = this.$button.href\n }\n\n /**\n * Pre-activation logic for when the button is clicked/activated via mouse or\n * pointer.\n *\n * We do this to differentiate it from the keyboard activation event because we\n * need to run `e.preventDefault` as the button or skiplink are both links and we\n * want to apply some additional logic in `exitPage` before navigating.\n *\n * @private\n * @param {MouseEvent} event - mouse click event\n */\n handleClick(event) {\n event.preventDefault()\n this.exitPage()\n }\n\n /**\n * Logic for the 'quick escape' keyboard sequence functionality (pressing the\n * Shift key three times without interruption, within a time limit).\n *\n * @private\n * @param {KeyboardEvent} event - keyup event\n */\n handleKeypress(event) {\n if (!this.$updateSpan) {\n return\n }\n\n // Detect if the 'Shift' key has been pressed. We want to only do things if it\n // was pressed by itself and not in a combination with another key—so we keep\n // track of whether the preceding keyup had shiftKey: true on it, and if it\n // did, we ignore the next Shift keyup event.\n //\n // This works because using Shift as a modifier key (e.g. pressing Shift + A)\n // will fire TWO keyup events, one for A (with e.shiftKey: true) and the other\n // for Shift (with e.shiftKey: false).\n if (event.key === 'Shift' && !this.lastKeyWasModified) {\n this.keypressCounter += 1\n\n // Update the indicator before the below if statement can reset it back to 0\n this.updateIndicator()\n\n // Clear the timeout for the keypress timeout message clearing itself\n if (this.timeoutMessageId) {\n window.clearTimeout(this.timeoutMessageId)\n this.timeoutMessageId = null\n }\n\n if (this.keypressCounter >= 3) {\n this.keypressCounter = 0\n\n if (this.keypressTimeoutId) {\n window.clearTimeout(this.keypressTimeoutId)\n this.keypressTimeoutId = null\n }\n\n this.exitPage()\n } else {\n if (this.keypressCounter === 1) {\n this.$updateSpan.textContent = this.i18n.t('pressTwoMoreTimes')\n } else {\n this.$updateSpan.textContent = this.i18n.t('pressOneMoreTime')\n }\n }\n\n this.setKeypressTimer()\n } else if (this.keypressTimeoutId) {\n // If the user pressed any key other than 'Shift', after having pressed\n // 'Shift' and activating the timer, stop and reset the timer.\n this.resetKeypressTimer()\n }\n\n // Keep track of whether the Shift modifier key was held during this keypress\n this.lastKeyWasModified = event.shiftKey\n }\n\n /**\n * Starts the 'quick escape' keyboard sequence timer.\n *\n * This can be invoked several times. We want this to be possible so that the\n * timer is restarted each time the shortcut key is pressed (e.g. the user has\n * up to n seconds between each keypress, rather than n seconds to invoke the\n * entire sequence.)\n *\n * @private\n */\n setKeypressTimer() {\n // Clear any existing timeout. This is so only one timer is running even if\n // there are multiple keypresses in quick succession.\n if (this.keypressTimeoutId) {\n window.clearTimeout(this.keypressTimeoutId)\n }\n\n // Set a fresh timeout\n this.keypressTimeoutId = window.setTimeout(\n this.resetKeypressTimer.bind(this),\n this.timeoutTime\n )\n }\n\n /**\n * Stops and resets the 'quick escape' keyboard sequence timer.\n *\n * @private\n */\n resetKeypressTimer() {\n if (!this.$updateSpan) {\n return\n }\n\n if (this.keypressTimeoutId) {\n window.clearTimeout(this.keypressTimeoutId)\n this.keypressTimeoutId = null\n }\n\n const $updateSpan = this.$updateSpan\n\n this.keypressCounter = 0\n $updateSpan.textContent = this.i18n.t('timedOut')\n\n this.timeoutMessageId = window.setTimeout(() => {\n $updateSpan.textContent = ''\n }, this.timeoutTime)\n\n this.updateIndicator()\n }\n\n /**\n * Reset the page using the EtP button\n *\n * We use this in situations where a user may re-enter a page using the browser\n * back button. In these cases, the browser can choose to restore the state of\n * the page as it was previously, including restoring the 'ghost page' overlay,\n * the announcement span having it's role set to \"alert\" and the keypress\n * indicator still active, leaving the page in an unusable state.\n *\n * By running this check when the page is shown, we can programatically restore\n * the page and the component to a \"default\" state\n *\n * @private\n */\n resetPage() {\n // If an overlay is set, remove it and reset the value\n document.body.classList.remove('govuk-exit-this-page-hide-content')\n\n if (this.$overlay) {\n this.$overlay.remove()\n this.$overlay = null\n }\n\n // Ensure the announcement span's role is status, not alert and clear any text\n if (this.$updateSpan) {\n this.$updateSpan.setAttribute('role', 'status')\n this.$updateSpan.textContent = ''\n }\n\n // Sync the keypress indicator lights\n this.updateIndicator()\n\n // If the timeouts are active, clear them\n if (this.keypressTimeoutId) {\n window.clearTimeout(this.keypressTimeoutId)\n }\n\n if (this.timeoutMessageId) {\n window.clearTimeout(this.timeoutMessageId)\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-exit-this-page'\n\n /**\n * Exit this page default config\n *\n * @see {@link ExitThisPageConfig}\n * @constant\n * @type {ExitThisPageConfig}\n */\n static defaults = Object.freeze({\n i18n: {\n activated: 'Loading.',\n timedOut: 'Exit this page expired.',\n pressTwoMoreTimes: 'Shift, press 2 more times to exit.',\n pressOneMoreTime: 'Shift, press 1 more time to exit.'\n }\n })\n\n /**\n * Exit this page config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n i18n: { type: 'object' }\n }\n })\n}\n\n/**\n * Exit this Page config\n *\n * @see {@link ExitThisPage.defaults}\n * @typedef {object} ExitThisPageConfig\n * @property {ExitThisPageTranslations} [i18n=ExitThisPage.defaults.i18n] - Exit this page translations\n */\n\n/**\n * Exit this Page translations\n *\n * @see {@link ExitThisPage.defaults.i18n}\n * @typedef {object} ExitThisPageTranslations\n *\n * Messages used by the component programatically inserted text, including\n * overlay text and screen reader announcements.\n * @property {string} [activated] - Screen reader announcement for when EtP\n * keypress functionality has been successfully activated.\n * @property {string} [timedOut] - Screen reader announcement for when the EtP\n * keypress functionality has timed out.\n * @property {string} [pressTwoMoreTimes] - Screen reader announcement informing\n * the user they must press the activation key two more times.\n * @property {string} [pressOneMoreTime] - Screen reader announcement informing\n * the user they must press the activation key one more time.\n */\n\n/**\n * @typedef {import('../../common/configuration.mjs').Schema} Schema\n */\n","import { getBreakpoint } from '../../common/index.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Header component\n *\n * @preserve\n */\nexport class Header extends GOVUKFrontendComponent {\n /** @private */\n $menuButton\n\n /** @private */\n $menu\n\n /**\n * Save the opened/closed state for the nav in memory so that we can\n * accurately maintain state when the screen is changed from small to big and\n * back to small\n *\n * @private\n */\n menuIsOpen = false\n\n /**\n * A global const for storing a matchMedia instance which we'll use to detect\n * when a screen size change happens. We rely on it being null if the feature\n * isn't available to initially apply hidden attributes\n *\n * @private\n * @type {MediaQueryList | null}\n */\n mql = null\n\n /**\n * Apply a matchMedia for desktop which will trigger a state sync if the\n * browser viewport moves between states.\n *\n * @param {Element | null} $root - HTML element to use for header\n */\n constructor($root) {\n super($root)\n\n const $menuButton = this.$root.querySelector('.govuk-js-header-toggle')\n\n // Headers don't necessarily have a navigation. When they don't, the menu\n // toggle won't be rendered by our macro (or may be omitted when writing\n // plain HTML)\n if (!$menuButton) {\n return this\n }\n\n const menuId = $menuButton.getAttribute('aria-controls')\n if (!menuId) {\n throw new ElementError({\n component: Header,\n identifier:\n 'Navigation button (`<button class=\"govuk-js-header-toggle\">`) attribute (`aria-controls`)'\n })\n }\n\n const $menu = document.getElementById(menuId)\n if (!$menu) {\n throw new ElementError({\n component: Header,\n element: $menu,\n identifier: `Navigation (\\`<ul id=\"${menuId}\">\\`)`\n })\n }\n\n this.$menu = $menu\n this.$menuButton = $menuButton\n\n this.setupResponsiveChecks()\n\n this.$menuButton.addEventListener('click', () =>\n this.handleMenuButtonClick()\n )\n }\n\n /**\n * Setup viewport resize check\n *\n * @private\n */\n setupResponsiveChecks() {\n const breakpoint = getBreakpoint('desktop')\n\n if (!breakpoint.value) {\n throw new ElementError({\n component: Header,\n identifier: `CSS custom property (\\`${breakpoint.property}\\`) on pseudo-class \\`:root\\``\n })\n }\n\n // Media query list for GOV.UK Frontend desktop breakpoint\n this.mql = window.matchMedia(`(min-width: ${breakpoint.value})`)\n\n // MediaQueryList.addEventListener isn't supported by Safari < 14 so we need\n // to be able to fall back to the deprecated MediaQueryList.addListener\n if ('addEventListener' in this.mql) {\n this.mql.addEventListener('change', () => this.checkMode())\n } else {\n // @ts-expect-error Property 'addListener' does not exist\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.mql.addListener(() => this.checkMode())\n }\n\n this.checkMode()\n }\n\n /**\n * Sync menu state\n *\n * Uses the global variable menuIsOpen to correctly set the accessible and\n * visual states of the menu and the menu button.\n * Additionally will force the menu to be visible and the menu button to be\n * hidden if the matchMedia is triggered to desktop.\n *\n * @private\n */\n checkMode() {\n if (!this.mql || !this.$menu || !this.$menuButton) {\n return\n }\n\n if (this.mql.matches) {\n this.$menu.removeAttribute('hidden')\n this.$menuButton.setAttribute('hidden', '')\n } else {\n this.$menuButton.removeAttribute('hidden')\n this.$menuButton.setAttribute('aria-expanded', this.menuIsOpen.toString())\n\n if (this.menuIsOpen) {\n this.$menu.removeAttribute('hidden')\n } else {\n this.$menu.setAttribute('hidden', '')\n }\n }\n }\n\n /**\n * Handle menu button click\n *\n * When the menu button is clicked, change the visibility of the menu and then\n * sync the accessibility state and menu button state\n *\n * @private\n */\n handleMenuButtonClick() {\n this.menuIsOpen = !this.menuIsOpen\n this.checkMode()\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-header'\n}\n","import { ConfigurableComponent } from '../../common/configuration.mjs'\nimport { setFocus } from '../../common/index.mjs'\n\n/**\n * Notification Banner component\n *\n * @preserve\n * @augments ConfigurableComponent<NotificationBannerConfig>\n */\nexport class NotificationBanner extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for notification banner\n * @param {NotificationBannerConfig} [config] - Notification banner config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n /**\n * Focus the notification banner\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\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-notification-banner'\n\n /**\n * Notification banner default config\n *\n * @see {@link NotificationBannerConfig}\n * @constant\n * @type {NotificationBannerConfig}\n */\n static defaults = Object.freeze({\n disableAutoFocus: false\n })\n\n /**\n * Notification banner config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n disableAutoFocus: { type: 'boolean' }\n }\n })\n}\n\n/**\n * Notification banner config\n *\n * @typedef {object} NotificationBannerConfig\n * @property {boolean} [disableAutoFocus=false] - If set to `true` the\n * notification banner will not be focussed when the page loads. This only\n * applies if the component has a `role` of `alert` – in other cases the\n * component will not be focused on page load, regardless of this option.\n */\n\n/**\n * @typedef {import('../../common/configuration.mjs').Schema} Schema\n */\n","import { closestAttributeValue } from '../../common/closest-attribute-value.mjs'\nimport { ConfigurableComponent } from '../../common/configuration.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { I18n } from '../../i18n.mjs'\n\n/**\n * Password input component\n *\n * @preserve\n * @augments ConfigurableComponent<PasswordInputConfig>\n */\nexport class PasswordInput extends ConfigurableComponent {\n /** @private */\n i18n\n\n /**\n * @private\n * @type {HTMLInputElement}\n */\n $input\n\n /**\n * @private\n * @type {HTMLButtonElement}\n */\n $showHideButton\n\n /** @private */\n $screenReaderStatusMessage\n\n /**\n * @param {Element | null} $root - HTML element to use for password input\n * @param {PasswordInputConfig} [config] - Password input config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $input = this.$root.querySelector('.govuk-js-password-input-input')\n if (!($input instanceof HTMLInputElement)) {\n throw new ElementError({\n component: PasswordInput,\n element: $input,\n expectedType: 'HTMLInputElement',\n identifier: 'Form field (`.govuk-js-password-input-input`)'\n })\n }\n\n if ($input.type !== 'password') {\n throw new ElementError(\n 'Password input: Form field (`.govuk-js-password-input-input`) must be of type `password`.'\n )\n }\n\n const $showHideButton = this.$root.querySelector(\n '.govuk-js-password-input-toggle'\n )\n if (!($showHideButton instanceof HTMLButtonElement)) {\n throw new ElementError({\n component: PasswordInput,\n element: $showHideButton,\n expectedType: 'HTMLButtonElement',\n identifier: 'Button (`.govuk-js-password-input-toggle`)'\n })\n }\n\n if ($showHideButton.type !== 'button') {\n throw new ElementError(\n 'Password input: Button (`.govuk-js-password-input-toggle`) must be of type `button`.'\n )\n }\n\n this.$input = $input\n this.$showHideButton = $showHideButton\n\n this.i18n = new I18n(this.config.i18n, {\n // Read the fallback if necessary rather than have it set in the defaults\n locale: closestAttributeValue(this.$root, 'lang')\n })\n\n // Show the toggle button element\n this.$showHideButton.removeAttribute('hidden')\n\n // Create and append the status text for screen readers.\n // This is injected between the input and button so that users get a sensible reading order if\n // moving through the page content linearly:\n // [password input] -> [your password is visible/hidden] -> [show/hide password]\n const $screenReaderStatusMessage = document.createElement('div')\n $screenReaderStatusMessage.className =\n 'govuk-password-input__sr-status govuk-visually-hidden'\n $screenReaderStatusMessage.setAttribute('aria-live', 'polite')\n this.$screenReaderStatusMessage = $screenReaderStatusMessage\n this.$input.insertAdjacentElement('afterend', $screenReaderStatusMessage)\n\n // Bind toggle button\n this.$showHideButton.addEventListener('click', this.toggle.bind(this))\n\n // Bind event to revert the password visibility to hidden\n if (this.$input.form) {\n this.$input.form.addEventListener('submit', () => this.hide())\n }\n\n // If the page is restored from bfcache and the password is visible, hide it again\n window.addEventListener('pageshow', (event) => {\n if (event.persisted && this.$input.type !== 'password') {\n this.hide()\n }\n })\n\n // Default the component to having the password hidden.\n this.hide()\n }\n\n /**\n * Toggle the visibility of the password input\n *\n * @private\n * @param {MouseEvent} event - Click event\n */\n toggle(event) {\n event.preventDefault()\n\n // If on this click, the field is type=\"password\", show the value\n if (this.$input.type === 'password') {\n this.show()\n return\n }\n\n // Otherwise, hide it\n // Being defensive - hiding should always be the default\n this.hide()\n }\n\n /**\n * Show the password input value in plain text.\n *\n * @private\n */\n show() {\n this.setType('text')\n }\n\n /**\n * Hide the password input value.\n *\n * @private\n */\n hide() {\n this.setType('password')\n }\n\n /**\n * Set the password input type\n *\n * @param {'text' | 'password'} type - Input type\n * @private\n */\n setType(type) {\n if (type === this.$input.type) {\n return\n }\n\n // Update input type\n this.$input.setAttribute('type', type)\n\n const isHidden = type === 'password'\n const prefixButton = isHidden ? 'show' : 'hide'\n const prefixStatus = isHidden ? 'passwordHidden' : 'passwordShown'\n\n // Update button text\n this.$showHideButton.innerText = this.i18n.t(`${prefixButton}Password`)\n\n // Update button aria-label\n this.$showHideButton.setAttribute(\n 'aria-label',\n this.i18n.t(`${prefixButton}PasswordAriaLabel`)\n )\n\n // Update status change text\n this.$screenReaderStatusMessage.innerText = this.i18n.t(\n `${prefixStatus}Announcement`\n )\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-password-input'\n\n /**\n * Password input default config\n *\n * @see {@link PasswordInputConfig}\n * @constant\n * @default\n * @type {PasswordInputConfig}\n */\n static defaults = Object.freeze({\n i18n: {\n showPassword: 'Show',\n hidePassword: 'Hide',\n showPasswordAriaLabel: 'Show password',\n hidePasswordAriaLabel: 'Hide password',\n passwordShownAnnouncement: 'Your password is visible',\n passwordHiddenAnnouncement: 'Your password is hidden'\n }\n })\n\n /**\n * Password input config schema\n *\n * @constant\n * @satisfies {Schema}\n */\n static schema = Object.freeze({\n properties: {\n i18n: { type: 'object' }\n }\n })\n}\n\n/**\n * Password input config\n *\n * @typedef {object} PasswordInputConfig\n * @property {PasswordInputTranslations} [i18n=PasswordInput.defaults.i18n] - Password input translations\n */\n\n/**\n * Password input translations\n *\n * @see {@link PasswordInput.defaults.i18n}\n * @typedef {object} PasswordInputTranslations\n *\n * Messages displayed to the user indicating the state of the show/hide toggle.\n * @property {string} [showPassword] - Visible text of the button when the\n * password is currently hidden. Plain text only.\n * @property {string} [hidePassword] - Visible text of the button when the\n * password is currently visible. Plain text only.\n * @property {string} [showPasswordAriaLabel] - aria-label of the button when\n * the password is currently hidden. Plain text only.\n * @property {string} [hidePasswordAriaLabel] - aria-label of the button when\n * the password is currently visible. Plain text only.\n * @property {string} [passwordShownAnnouncement] - Screen reader\n * announcement to make when the password has just become visible.\n * Plain text only.\n * @property {string} [passwordHiddenAnnouncement] - Screen reader\n * announcement to make when the password has just been hidden.\n * Plain text only.\n */\n\n/**\n * @typedef {import('../../common/configuration.mjs').Schema} Schema\n * @typedef {import('../../i18n.mjs').TranslationPluralForms} TranslationPluralForms\n */\n","import { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Radios component\n *\n * @preserve\n */\nexport class Radios extends GOVUKFrontendComponent {\n /** @private */\n $inputs\n\n /**\n * Radios can be associated with a 'conditionally revealed' content block –\n * for example, a radio for 'Phone' could reveal an additional form field for\n * the user to enter their phone number.\n *\n * These associations are made using a `data-aria-controls` attribute, which\n * is promoted to an aria-controls attribute during initialisation.\n *\n * We also need to restore the state of any conditional reveals on the page\n * (for example if the user has navigated back), and set up event handlers to\n * keep the reveal in sync with the radio state.\n *\n * @param {Element | null} $root - HTML element to use for radios\n */\n constructor($root) {\n super($root)\n\n const $inputs = this.$root.querySelectorAll('input[type=\"radio\"]')\n if (!$inputs.length) {\n throw new ElementError({\n component: Radios,\n identifier: 'Form inputs (`<input type=\"radio\">`)'\n })\n }\n\n this.$inputs = $inputs\n\n this.$inputs.forEach(($input) => {\n const targetId = $input.getAttribute('data-aria-controls')\n\n // Skip radios without data-aria-controls attributes\n if (!targetId) {\n return\n }\n\n // Throw if target conditional element does not exist.\n if (!document.getElementById(targetId)) {\n throw new ElementError({\n component: Radios,\n identifier: `Conditional reveal (\\`id=\"${targetId}\"\\`)`\n })\n }\n\n // Promote the data-aria-controls attribute to a aria-controls attribute\n // so that the relationship is exposed in the AOM\n $input.setAttribute('aria-controls', targetId)\n $input.removeAttribute('data-aria-controls')\n })\n\n // When the page is restored after navigating 'back' in some browsers the\n // state of form controls is not restored until *after* the DOMContentLoaded\n // event is fired, so we need to sync after the pageshow event.\n window.addEventListener('pageshow', () => this.syncAllConditionalReveals())\n\n // Although we've set up handlers to sync state on the pageshow event, init\n // could be called after those events have fired, for example if they are\n // added to the page dynamically, so sync now too.\n this.syncAllConditionalReveals()\n\n // Handle events\n this.$root.addEventListener('click', (event) => this.handleClick(event))\n }\n\n /**\n * Sync the conditional reveal states for all radio buttons in this component.\n *\n * @private\n */\n syncAllConditionalReveals() {\n this.$inputs.forEach(($input) =>\n this.syncConditionalRevealWithInputState($input)\n )\n }\n\n /**\n * Sync conditional reveal with the input state\n *\n * Synchronise the visibility of the conditional reveal, and its accessible\n * state, with the input's checked state.\n *\n * @private\n * @param {HTMLInputElement} $input - Radio input\n */\n syncConditionalRevealWithInputState($input) {\n const targetId = $input.getAttribute('aria-controls')\n if (!targetId) {\n return\n }\n\n const $target = document.getElementById(targetId)\n if ($target?.classList.contains('govuk-radios__conditional')) {\n const inputIsChecked = $input.checked\n\n $input.setAttribute('aria-expanded', inputIsChecked.toString())\n $target.classList.toggle(\n 'govuk-radios__conditional--hidden',\n !inputIsChecked\n )\n }\n }\n\n /**\n * Click event handler\n *\n * Handle a click within the component root – if the click occurred on a radio, sync\n * the state of the conditional reveal for all radio buttons in the same form\n * with the same name (because checking one radio could have un-checked a\n * radio under the root of another Radio component)\n *\n * @private\n * @param {MouseEvent} event - Click event\n */\n handleClick(event) {\n const $clickedInput = event.target\n\n // Ignore clicks on things that aren't radio buttons\n if (\n !($clickedInput instanceof HTMLInputElement) ||\n $clickedInput.type !== 'radio'\n ) {\n return\n }\n\n // We only need to consider radios with conditional reveals, which will have\n // aria-controls attributes.\n const $allInputs = document.querySelectorAll(\n 'input[type=\"radio\"][aria-controls]'\n )\n\n const $clickedInputForm = $clickedInput.form\n const $clickedInputName = $clickedInput.name\n\n $allInputs.forEach(($input) => {\n const hasSameFormOwner = $input.form === $clickedInputForm\n const hasSameName = $input.name === $clickedInputName\n\n if (hasSameName && hasSameFormOwner) {\n this.syncConditionalRevealWithInputState($input)\n }\n })\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-radios'\n}\n","import { getBreakpoint } from '../../common/index.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Service Navigation component\n *\n * @preserve\n */\nexport class ServiceNavigation extends GOVUKFrontendComponent {\n /** @private */\n $menuButton\n\n /** @private */\n $menu\n\n /**\n * Remember the open/closed state of the nav so we can maintain it when the\n * screen is resized.\n *\n * @private\n */\n menuIsOpen = false\n\n /**\n * A global const for storing a matchMedia instance which we'll use to detect\n * when a screen size change happens. We rely on it being null if the feature\n * isn't available to initially apply hidden attributes\n *\n * @private\n * @type {MediaQueryList | null}\n */\n mql = null\n\n /**\n * @param {Element | null} $root - HTML element to use for header\n */\n constructor($root) {\n super($root)\n\n const $menuButton = this.$root.querySelector(\n '.govuk-js-service-navigation-toggle'\n )\n\n // Headers don't necessarily have a navigation. When they don't, the menu\n // toggle won't be rendered by our macro (or may be omitted when writing\n // plain HTML)\n if (!$menuButton) {\n return this\n }\n\n const menuId = $menuButton.getAttribute('aria-controls')\n if (!menuId) {\n throw new ElementError({\n component: ServiceNavigation,\n identifier:\n 'Navigation button (`<button class=\"govuk-js-service-navigation-toggle\">`) attribute (`aria-controls`)'\n })\n }\n\n const $menu = document.getElementById(menuId)\n if (!$menu) {\n throw new ElementError({\n component: ServiceNavigation,\n element: $menu,\n identifier: `Navigation (\\`<ul id=\"${menuId}\">\\`)`\n })\n }\n\n this.$menu = $menu\n this.$menuButton = $menuButton\n\n this.setupResponsiveChecks()\n\n this.$menuButton.addEventListener('click', () =>\n this.handleMenuButtonClick()\n )\n }\n\n /**\n * Setup viewport resize check\n *\n * @private\n */\n setupResponsiveChecks() {\n const breakpoint = getBreakpoint('tablet')\n\n if (!breakpoint.value) {\n throw new ElementError({\n component: ServiceNavigation,\n identifier: `CSS custom property (\\`${breakpoint.property}\\`) on pseudo-class \\`:root\\``\n })\n }\n\n // Media query list for GOV.UK Frontend desktop breakpoint\n this.mql = window.matchMedia(`(min-width: ${breakpoint.value})`)\n\n // MediaQueryList.addEventListener isn't supported by Safari < 14 so we need\n // to be able to fall back to the deprecated MediaQueryList.addListener\n if ('addEventListener' in this.mql) {\n this.mql.addEventListener('change', () => this.checkMode())\n } else {\n // @ts-expect-error Property 'addListener' does not exist\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.mql.addListener(() => this.checkMode())\n }\n\n this.checkMode()\n }\n\n /**\n * Sync menu state\n *\n * Uses the global variable menuIsOpen to correctly set the accessible and\n * visual states of the menu and the menu button.\n * Additionally will force the menu to be visible and the menu button to be\n * hidden if the matchMedia is triggered to desktop.\n *\n * @private\n */\n checkMode() {\n if (!this.mql || !this.$menu || !this.$menuButton) {\n return\n }\n\n if (this.mql.matches) {\n this.$menu.removeAttribute('hidden')\n this.$menuButton.setAttribute('hidden', '')\n } else {\n this.$menuButton.removeAttribute('hidden')\n this.$menuButton.setAttribute('aria-expanded', this.menuIsOpen.toString())\n\n if (this.menuIsOpen) {\n this.$menu.removeAttribute('hidden')\n } else {\n this.$menu.setAttribute('hidden', '')\n }\n }\n }\n\n /**\n * Handle menu button click\n *\n * When the menu button is clicked, change the visibility of the menu and then\n * sync the accessibility state and menu button state\n *\n * @private\n */\n handleMenuButtonClick() {\n this.menuIsOpen = !this.menuIsOpen\n this.checkMode()\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-service-navigation'\n}\n","import { getFragmentFromUrl, setFocus } from '../../common/index.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Skip link component\n *\n * @preserve\n * @augments GOVUKFrontendComponent<HTMLAnchorElement>\n */\nexport class SkipLink extends GOVUKFrontendComponent {\n static elementType = HTMLAnchorElement\n\n /**\n * @param {Element | null} $root - HTML element to use for skip link\n * @throws {ElementError} when $root is not set or the wrong type\n * @throws {ElementError} when $root.hash does not contain a hash\n * @throws {ElementError} when the linked element is missing or the wrong type\n */\n constructor($root) {\n super($root)\n\n const hash = this.$root.hash\n const href = this.$root.getAttribute('href') ?? ''\n\n /** @type {URL | undefined} */\n let url\n\n /**\n * Check for valid link URL\n *\n * {@link https://caniuse.com/url}\n * {@link https://url.spec.whatwg.org}\n *\n */\n try {\n url = new window.URL(this.$root.href)\n } catch (error) {\n throw new ElementError(\n `Skip link: Target link (\\`href=\"${href}\"\\`) is invalid`\n )\n }\n\n // Return early for external URLs or links to other pages\n if (\n url.origin !== window.location.origin ||\n url.pathname !== window.location.pathname\n ) {\n return\n }\n\n const linkedElementId = getFragmentFromUrl(hash)\n\n // Check link path matching current page\n if (!linkedElementId) {\n throw new ElementError(\n `Skip link: Target link (\\`href=\"${href}\"\\`) has no hash fragment`\n )\n }\n\n const $linkedElement = document.getElementById(linkedElementId)\n\n // Check for link target element\n if (!$linkedElement) {\n throw new ElementError({\n component: SkipLink,\n element: $linkedElement,\n identifier: `Target content (\\`id=\"${linkedElementId}\"\\`)`\n })\n }\n\n /**\n * Focus the linked element on click\n *\n * Adds a helper CSS class to hide native focus styles,\n * but removes it on blur to restore native focus styles\n */\n this.$root.addEventListener('click', () =>\n setFocus($linkedElement, {\n onBeforeFocus() {\n $linkedElement.classList.add('govuk-skip-link-focused-element')\n },\n onBlur() {\n $linkedElement.classList.remove('govuk-skip-link-focused-element')\n }\n })\n )\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-skip-link'\n}\n","import { getBreakpoint, getFragmentFromUrl } from '../../common/index.mjs'\nimport { ElementError } from '../../errors/index.mjs'\nimport { GOVUKFrontendComponent } from '../../govuk-frontend-component.mjs'\n\n/**\n * Tabs component\n *\n * @preserve\n */\nexport class Tabs extends GOVUKFrontendComponent {\n /** @private */\n $tabs\n\n /** @private */\n $tabList\n\n /** @private */\n $tabListItems\n\n /** @private */\n jsHiddenClass = 'govuk-tabs__panel--hidden'\n\n /** @private */\n changingHash = false\n\n /** @private */\n boundTabClick\n\n /** @private */\n boundTabKeydown\n\n /** @private */\n boundOnHashChange\n\n /**\n * @private\n * @type {MediaQueryList | null}\n */\n mql = null\n\n /**\n * @param {Element | null} $root - HTML element to use for tabs\n */\n constructor($root) {\n super($root)\n\n const $tabs = this.$root.querySelectorAll('a.govuk-tabs__tab')\n if (!$tabs.length) {\n throw new ElementError({\n component: Tabs,\n identifier: 'Links (`<a class=\"govuk-tabs__tab\">`)'\n })\n }\n\n this.$tabs = $tabs\n\n // Save bound functions so we can remove event listeners during teardown\n this.boundTabClick = this.onTabClick.bind(this)\n this.boundTabKeydown = this.onTabKeydown.bind(this)\n this.boundOnHashChange = this.onHashChange.bind(this)\n\n const $tabList = this.$root.querySelector('.govuk-tabs__list')\n const $tabListItems = this.$root.querySelectorAll(\n 'li.govuk-tabs__list-item'\n )\n\n if (!$tabList) {\n throw new ElementError({\n component: Tabs,\n identifier: 'List (`<ul class=\"govuk-tabs__list\">`)'\n })\n }\n\n if (!$tabListItems.length) {\n throw new ElementError({\n component: Tabs,\n identifier: 'List items (`<li class=\"govuk-tabs__list-item\">`)'\n })\n }\n\n this.$tabList = $tabList\n this.$tabListItems = $tabListItems\n\n this.setupResponsiveChecks()\n }\n\n /**\n * Setup viewport resize check\n *\n * @private\n */\n setupResponsiveChecks() {\n const breakpoint = getBreakpoint('tablet')\n\n if (!breakpoint.value) {\n throw new ElementError({\n component: Tabs,\n identifier: `CSS custom property (\\`${breakpoint.property}\\`) on pseudo-class \\`:root\\``\n })\n }\n\n // Media query list for GOV.UK Frontend tablet breakpoint\n this.mql = window.matchMedia(`(min-width: ${breakpoint.value})`)\n\n // MediaQueryList.addEventListener isn't supported by Safari < 14 so we need\n // to be able to fall back to the deprecated MediaQueryList.addListener\n if ('addEventListener' in this.mql) {\n this.mql.addEventListener('change', () => this.checkMode())\n } else {\n // @ts-expect-error Property 'addListener' does not exist\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n this.mql.addListener(() => this.checkMode())\n }\n\n this.checkMode()\n }\n\n /**\n * Setup or teardown handler for viewport resize check\n *\n * @private\n */\n checkMode() {\n if (this.mql?.matches) {\n this.setup()\n } else {\n this.teardown()\n }\n }\n\n /**\n * Setup tab component\n *\n * @private\n */\n setup() {\n this.$tabList.setAttribute('role', 'tablist')\n\n this.$tabListItems.forEach(($item) => {\n $item.setAttribute('role', 'presentation')\n })\n\n this.$tabs.forEach(($tab) => {\n // Set HTML attributes\n this.setAttributes($tab)\n\n // Handle events\n $tab.addEventListener('click', this.boundTabClick, true)\n $tab.addEventListener('keydown', this.boundTabKeydown, true)\n\n // Remove old active panels\n this.hideTab($tab)\n })\n\n // Show either the active tab according to the URL's hash or the first tab\n const $activeTab = this.getTab(window.location.hash) ?? this.$tabs[0]\n\n this.showTab($activeTab)\n\n // Handle hashchange events\n window.addEventListener('hashchange', this.boundOnHashChange, true)\n }\n\n /**\n * Teardown tab component\n *\n * @private\n */\n teardown() {\n this.$tabList.removeAttribute('role')\n\n this.$tabListItems.forEach(($item) => {\n $item.removeAttribute('role')\n })\n\n this.$tabs.forEach(($tab) => {\n // Remove events\n $tab.removeEventListener('click', this.boundTabClick, true)\n $tab.removeEventListener('keydown', this.boundTabKeydown, true)\n\n // Unset HTML attributes\n this.unsetAttributes($tab)\n })\n\n // Remove hashchange event handler\n window.removeEventListener('hashchange', this.boundOnHashChange, true)\n }\n\n /**\n * Handle hashchange event\n *\n * @private\n * @returns {void | undefined} Returns void, or undefined when prevented\n */\n onHashChange() {\n const hash = window.location.hash\n const $tabWithHash = this.getTab(hash)\n if (!$tabWithHash) {\n return\n }\n\n // Prevent changing the hash\n if (this.changingHash) {\n this.changingHash = false\n return\n }\n\n // Show either the active tab according to the URL's hash or the first tab\n const $previousTab = this.getCurrentTab()\n if (!$previousTab) {\n return\n }\n\n this.hideTab($previousTab)\n this.showTab($tabWithHash)\n $tabWithHash.focus()\n }\n\n /**\n * Hide panel for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n hideTab($tab) {\n this.unhighlightTab($tab)\n this.hidePanel($tab)\n }\n\n /**\n * Show panel for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n showTab($tab) {\n this.highlightTab($tab)\n this.showPanel($tab)\n }\n\n /**\n * Get tab link by hash\n *\n * @private\n * @param {string} hash - Hash fragment including #\n * @returns {HTMLAnchorElement | null} Tab link\n */\n getTab(hash) {\n return this.$root.querySelector(`a.govuk-tabs__tab[href=\"${hash}\"]`)\n }\n\n /**\n * Set tab link and panel attributes\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n setAttributes($tab) {\n const panelId = getFragmentFromUrl($tab.href)\n if (!panelId) {\n return\n }\n\n // Set tab attributes\n $tab.setAttribute('id', `tab_${panelId}`)\n $tab.setAttribute('role', 'tab')\n $tab.setAttribute('aria-controls', panelId)\n $tab.setAttribute('aria-selected', 'false')\n $tab.setAttribute('tabindex', '-1')\n\n // Set panel attributes\n const $panel = this.getPanel($tab)\n if (!$panel) {\n return\n }\n\n $panel.setAttribute('role', 'tabpanel')\n $panel.setAttribute('aria-labelledby', $tab.id)\n $panel.classList.add(this.jsHiddenClass)\n }\n\n /**\n * Unset tab link and panel attributes\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n unsetAttributes($tab) {\n // unset tab attributes\n $tab.removeAttribute('id')\n $tab.removeAttribute('role')\n $tab.removeAttribute('aria-controls')\n $tab.removeAttribute('aria-selected')\n $tab.removeAttribute('tabindex')\n\n // unset panel attributes\n const $panel = this.getPanel($tab)\n if (!$panel) {\n return\n }\n\n $panel.removeAttribute('role')\n $panel.removeAttribute('aria-labelledby')\n $panel.classList.remove(this.jsHiddenClass)\n }\n\n /**\n * Handle tab link clicks\n *\n * @private\n * @param {MouseEvent} event - Mouse click event\n * @returns {void} Returns void\n */\n onTabClick(event) {\n const $currentTab = this.getCurrentTab()\n const $nextTab = event.currentTarget\n\n if (!$currentTab || !($nextTab instanceof HTMLAnchorElement)) {\n return\n }\n\n event.preventDefault()\n\n this.hideTab($currentTab)\n this.showTab($nextTab)\n this.createHistoryEntry($nextTab)\n }\n\n /**\n * Update browser URL hash fragment for tab\n *\n * - Allows back/forward to navigate tabs\n * - Avoids page jump when hash changes\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n createHistoryEntry($tab) {\n const $panel = this.getPanel($tab)\n if (!$panel) {\n return\n }\n\n // Save and restore the id so the page doesn't jump when a user clicks a tab\n // (which changes the hash)\n const panelId = $panel.id\n $panel.id = ''\n this.changingHash = true\n window.location.hash = panelId\n $panel.id = panelId\n }\n\n /**\n * Handle tab keydown event\n *\n * - Press right arrow for next tab\n * - Press left arrow for previous tab\n *\n * @private\n * @param {KeyboardEvent} event - Keydown event\n */\n onTabKeydown(event) {\n switch (event.key) {\n // 'Left' and 'Right' required for Edge 16 support.\n case 'ArrowLeft':\n case 'Left':\n this.activatePreviousTab()\n event.preventDefault()\n break\n case 'ArrowRight':\n case 'Right':\n this.activateNextTab()\n event.preventDefault()\n break\n }\n }\n\n /**\n * Activate next tab\n *\n * @private\n */\n activateNextTab() {\n const $currentTab = this.getCurrentTab()\n if (!$currentTab?.parentElement) {\n return\n }\n\n const $nextTabListItem = $currentTab.parentElement.nextElementSibling\n if (!$nextTabListItem) {\n return\n }\n\n const $nextTab = $nextTabListItem.querySelector('a.govuk-tabs__tab')\n if (!$nextTab) {\n return\n }\n\n this.hideTab($currentTab)\n this.showTab($nextTab)\n $nextTab.focus()\n this.createHistoryEntry($nextTab)\n }\n\n /**\n * Activate previous tab\n *\n * @private\n */\n activatePreviousTab() {\n const $currentTab = this.getCurrentTab()\n if (!$currentTab?.parentElement) {\n return\n }\n\n const $previousTabListItem =\n $currentTab.parentElement.previousElementSibling\n if (!$previousTabListItem) {\n return\n }\n\n const $previousTab = $previousTabListItem.querySelector('a.govuk-tabs__tab')\n if (!$previousTab) {\n return\n }\n\n this.hideTab($currentTab)\n this.showTab($previousTab)\n $previousTab.focus()\n this.createHistoryEntry($previousTab)\n }\n\n /**\n * Get tab panel for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n * @returns {Element | null} Tab panel\n */\n getPanel($tab) {\n const panelId = getFragmentFromUrl($tab.href)\n if (!panelId) {\n return null\n }\n\n return this.$root.querySelector(`#${panelId}`)\n }\n\n /**\n * Show tab panel for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n showPanel($tab) {\n const $panel = this.getPanel($tab)\n if (!$panel) {\n return\n }\n\n $panel.classList.remove(this.jsHiddenClass)\n }\n\n /**\n * Hide tab panel for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n hidePanel($tab) {\n const $panel = this.getPanel($tab)\n if (!$panel) {\n return\n }\n\n $panel.classList.add(this.jsHiddenClass)\n }\n\n /**\n * Unset 'selected' state for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n unhighlightTab($tab) {\n if (!$tab.parentElement) {\n return\n }\n\n $tab.setAttribute('aria-selected', 'false')\n $tab.parentElement.classList.remove('govuk-tabs__list-item--selected')\n $tab.setAttribute('tabindex', '-1')\n }\n\n /**\n * Set 'selected' state for tab link\n *\n * @private\n * @param {HTMLAnchorElement} $tab - Tab link\n */\n highlightTab($tab) {\n if (!$tab.parentElement) {\n return\n }\n\n $tab.setAttribute('aria-selected', 'true')\n $tab.parentElement.classList.add('govuk-tabs__list-item--selected')\n $tab.setAttribute('tabindex', '0')\n }\n\n /**\n * Get current tab link\n *\n * @private\n * @returns {HTMLAnchorElement | null} Tab link\n */\n getCurrentTab() {\n return this.$root.querySelector(\n '.govuk-tabs__list-item--selected a.govuk-tabs__tab'\n )\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'govuk-tabs'\n}\n","import { isSupported } 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 { 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 } 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 & { scope?: Element, onError?: OnErrorCallback<CompatibleClass> }} [config] - Config for all components (with optional scope)\n */\nfunction initAll(config) {\n config = typeof config !== 'undefined' ? config : {}\n\n // Skip initialisation when GOV.UK Frontend is not supported\n if (!isSupported()) {\n if (config.onError) {\n config.onError(new SupportError(), {\n config\n })\n } else {\n console.log(new SupportError())\n }\n return\n }\n\n const components = /** @type {const} */ ([\n [Accordion, config.accordion],\n [Button, config.button],\n [CharacterCount, config.characterCount],\n [Checkboxes],\n [ErrorSummary, config.errorSummary],\n [ExitThisPage, config.exitThisPage],\n [Header],\n [NotificationBanner, config.notificationBanner],\n [PasswordInput, config.passwordInput],\n [Radios],\n [ServiceNavigation],\n [SkipLink],\n [Tabs]\n ])\n\n // Allow the user to initialise GOV.UK Frontend in only certain sections of the page\n // Defaults to the entire document if nothing is set.\n // const $scope = config.scope ?? document\n\n const options = {\n scope: config.scope ?? document,\n onError: config.onError\n }\n\n components.forEach(([Component, config]) => {\n createAll(Component, config, 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 | CreateAllOptions<ComponentClass> } [createAllOptions] - 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, createAllOptions) {\n let /** @type {Element | Document} */ $scope = document\n let /** @type {OnErrorCallback<Component> | undefined} */ onError\n\n if (typeof createAllOptions === 'object') {\n createAllOptions = /** @type {CreateAllOptions<Component>} */ (\n // eslint-disable-next-line no-self-assign\n createAllOptions\n )\n\n $scope = createAllOptions.scope ?? $scope\n onError = createAllOptions.onError\n }\n\n if (typeof createAllOptions === 'function') {\n onError = createAllOptions\n }\n\n if (createAllOptions instanceof HTMLElement) {\n $scope = createAllOptions\n }\n\n const $elements = $scope.querySelectorAll(\n `[data-module=\"${Component.moduleName}\"]`\n )\n\n // Skip initialisation when GOV.UK Frontend is not supported\n if (!isSupported()) {\n if (onError) {\n onError(new SupportError(), {\n component: Component,\n config\n })\n } else {\n console.log(new SupportError())\n }\n return []\n }\n\n /* eslint-disable-next-line @typescript-eslint/no-unsafe-return --\n * We can't define CompatibleClass as `{new(): CompatibleClass, moduleName: string}`,\n * as when doing `typeof Accordion` (or any component), TypeScript doesn't seem\n * to acknowledge the static `moduleName` that's set in our component classes.\n * This means we have to set the constructor of `CompatibleClass` as `{new(): any}`,\n * leading to ESLint frowning that we're returning `any[]`.\n */\n return Array.from($elements)\n .map(($element) => {\n try {\n // Only pass config to components that accept it\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return typeof config !== 'undefined'\n ? new Component($element, config)\n : new Component($element)\n } catch (error) {\n if (onError) {\n onError(error, {\n element: $element,\n component: Component,\n config\n })\n } else {\n console.log(error)\n }\n\n return null\n }\n })\n .filter(Boolean) // Exclude components that errored\n}\n\nexport { initAll, createAll }\n\n/* eslint-disable jsdoc/valid-types --\n * `{new(...args: any[] ): object}` is not recognised as valid\n * https://github.com/gajus/eslint-plugin-jsdoc/issues/145#issuecomment-1308722878\n * https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/131\n **/\n\n/**\n * @typedef {{new (...args: any[]): any, moduleName: string}} CompatibleClass\n */\n\n/* eslint-enable jsdoc/valid-types */\n\n/**\n * Config for all components via `initAll()`\n *\n * @typedef {object} Config\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 {NotificationBannerConfig} [notificationBanner] - Notification Banner config\n * @property {PasswordInputConfig} [passwordInput] - Password input config\n */\n\n/**\n * Config for individual components\n *\n * @typedef {import('./components/accordion/accordion.mjs').AccordionConfig} AccordionConfig\n * @typedef {import('./components/accordion/accordion.mjs').AccordionTranslations} AccordionTranslations\n * @typedef {import('./components/button/button.mjs').ButtonConfig} ButtonConfig\n * @typedef {import('./components/character-count/character-count.mjs').CharacterCountConfig} CharacterCountConfig\n * @typedef {import('./components/character-count/character-count.mjs').CharacterCountTranslations} CharacterCountTranslations\n * @typedef {import('./components/error-summary/error-summary.mjs').ErrorSummaryConfig} ErrorSummaryConfig\n * @typedef {import('./components/exit-this-page/exit-this-page.mjs').ExitThisPageConfig} ExitThisPageConfig\n * @typedef {import('./components/exit-this-page/exit-this-page.mjs').ExitThisPageTranslations} ExitThisPageTranslations\n * @typedef {import('./components/notification-banner/notification-banner.mjs').NotificationBannerConfig} NotificationBannerConfig\n * @typedef {import('./components/password-input/password-input.mjs').PasswordInputConfig} PasswordInputConfig\n */\n\n/**\n * Component config keys, e.g. `accordion` and `characterCount`\n *\n * @typedef {keyof Config} ConfigKey\n */\n\n/**\n * @template {CompatibleClass} ComponentClass\n * @typedef {ConstructorParameters<ComponentClass>[1]} ComponentConfig\n */\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 {ComponentConfig<ComponentClass>} config - Config supplied to component\n */\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/**\n * @template {CompatibleClass} ComponentClass\n * @typedef {object} CreateAllOptions\n * @property {Element | Document} [scope] - scope of the document to search within\n * @property {OnErrorCallback<ComponentClass>} [onError] - callback function if error throw by component on init\n */\n"],"names":["version","getFragmentFromUrl","url","includes","undefined","split","pop","getBreakpoint","name","property","value","window","getComputedStyle","document","documentElement","getPropertyValue","setFocus","$element","options","_options$onBeforeFocu","isFocusable","getAttribute","setAttribute","onFocus","addEventListener","onBlur","once","_options$onBlur","call","removeAttribute","onBeforeFocus","focus","isInitialised","$root","moduleName","HTMLElement","hasAttribute","isSupported","$scope","body","classList","contains","isArray","option","Array","isObject","formatErrorMessage","Component","message","GOVUKFrontendError","Error","constructor","args","SupportError","supportMessage","HTMLScriptElement","prototype","ConfigError","ElementError","messageOrOptions","component","identifier","element","expectedType","InitError","componentOrMessage","GOVUKFrontendComponent","_$root","childConstructor","elementType","checkSupport","checkInitialised","configOverride","Symbol","for","ConfigurableComponent","param","config","_config","defaults","datasetConfig","normaliseDataset","dataset","mergeConfigs","normaliseString","trimmedValue","trim","output","outputType","type","length","isFinite","Number","schema","out","field","Object","entries","properties","extractConfigByNamespace","configObjects","formattedConfigObject","configObject","key","keys","override","validateConfig","validationErrors","conditions","errors","required","errorMessage","every","push","namespace","newObject","current","keyParts","index","I18n","translations","_config$locale","locale","lang","t","lookupKey","translation","count","translationPluralForm","getPluralSuffix","match","replacePlaceholders","translationString","formatter","Intl","NumberFormat","supportedLocalesOf","replace","placeholderWithBraces","placeholderKey","hasOwnProperty","placeholderValue","format","hasIntlPluralRulesSupport","Boolean","PluralRules","preferredForm","select","selectPluralFormUsingFallbackRules","console","warn","Math","abs","floor","ruleset","getPluralRulesForLocale","pluralRules","localeShort","pluralRule","pluralRulesMap","languages","arabic","chinese","french","german","irish","russian","scottish","spanish","welsh","n","lastTwo","last","Accordion","i18n","controlsClass","showAllClass","showAllTextClass","sectionClass","sectionExpandedClass","sectionButtonClass","sectionHeaderClass","sectionHeadingClass","sectionHeadingDividerClass","sectionHeadingTextClass","sectionHeadingTextFocusClass","sectionShowHideToggleClass","sectionShowHideToggleFocusClass","sectionShowHideTextClass","upChevronIconClass","downChevronIconClass","sectionSummaryClass","sectionSummaryFocusClass","sectionContentClass","$sections","$showAllButton","$showAllIcon","$showAllText","querySelectorAll","initControls","initSectionHeaders","updateShowAllButton","areAllSectionsOpen","createElement","add","appendChild","$accordionControls","insertBefore","firstChild","onShowOrHideAllToggle","event","onBeforeMatch","forEach","$section","i","$header","querySelector","constructHeaderMarkup","setExpanded","isExpanded","onSectionToggle","setInitialState","$span","$heading","$summary","$button","id","attr","from","attributes","$headingText","$headingTextFocus","childNodes","$child","$showHideToggle","$showHideToggleFocus","$showHideText","$showHideIcon","getButtonPunctuationEl","$summarySpan","$summarySpanFocus","remove","removeChild","$fragment","target","Element","closest","nowExpanded","storeState","expanded","$content","newButtonText","textContent","ariaLabelParts","ariaLabelMessage","join","toString","toggle","getIdentifier","rememberExpanded","sessionStorage","setItem","exception","state","getItem","$punctuationEl","freeze","hideAllSections","hideSection","hideSectionAriaLabel","showAllSections","showSection","showSectionAriaLabel","DEBOUNCE_TIMEOUT_IN_SECONDS","Button","debounceFormSubmitTimer","handleKeyDown","debounce","$target","preventDefault","click","preventDoubleClick","setTimeout","closestAttributeValue","attributeName","$closestElementWithAttribute","CharacterCount","configOverrides","maxlength","maxwords","_ref","_this$config$maxwords","$textarea","$visibleCountMessage","$screenReaderCountMessage","lastInputTimestamp","lastInputValue","valueChecker","maxLength","HTMLTextAreaElement","HTMLInputElement","Infinity","textareaDescriptionId","$textareaDescription","getElementById","insertAdjacentElement","className","bindChangeEvents","updateCountMessage","handleKeyUp","handleFocus","handleBlur","updateVisibleCountMessage","Date","now","setInterval","updateIfValueChanged","clearInterval","updateScreenReaderCountMessage","remainingNumber","isError","isOverThreshold","getCountMessage","text","_text$match","tokens","countType","formatCountMessage","translationKeySuffix","threshold","currentLength","thresholdValue","charactersUnderLimit","one","other","charactersAtLimit","charactersOverLimit","wordsUnderLimit","wordsAtLimit","wordsOverLimit","textareaDescription","anyOf","Checkboxes","$inputs","$input","targetId","syncAllConditionalReveals","handleClick","syncConditionalRevealWithInputState","inputIsChecked","checked","unCheckAllInputsExcept","allInputsWithSameName","$inputWithSameName","hasSameFormOwner","form","unCheckExclusiveInputs","allInputsWithSameNameAndExclusiveBehaviour","$exclusiveInput","$clickedInput","hasAriaControls","hasBehaviourExclusive","ErrorSummary","disableAutoFocus","focusTarget","HTMLAnchorElement","inputId","href","$legendOrLabel","getAssociatedLegendOrLabel","scrollIntoView","preventScroll","_document$querySelect","$fieldset","$legends","getElementsByTagName","$candidateLegend","legendTop","getBoundingClientRect","top","inputRect","height","innerHeight","inputBottom","ExitThisPage","$skiplinkButton","$updateSpan","$indicatorContainer","$overlay","keypressCounter","lastKeyWasModified","timeoutTime","keypressTimeoutId","timeoutMessageId","buildIndicator","initUpdateSpan","initButtonClickHandler","handleKeypress","bind","govukFrontendExitThisPageKeypress","resetPage","$indicator","updateIndicator","$indicators","exitPage","location","clearTimeout","setKeypressTimer","resetKeypressTimer","shiftKey","activated","timedOut","pressTwoMoreTimes","pressOneMoreTime","Header","$menuButton","$menu","menuIsOpen","mql","menuId","setupResponsiveChecks","handleMenuButtonClick","breakpoint","matchMedia","checkMode","addListener","matches","NotificationBanner","PasswordInput","$showHideButton","$screenReaderStatusMessage","HTMLButtonElement","hide","persisted","show","setType","isHidden","prefixButton","prefixStatus","innerText","showPassword","hidePassword","showPasswordAriaLabel","hidePasswordAriaLabel","passwordShownAnnouncement","passwordHiddenAnnouncement","Radios","$allInputs","$clickedInputForm","$clickedInputName","hasSameName","ServiceNavigation","SkipLink","_this$$root$getAttrib","hash","URL","error","origin","pathname","linkedElementId","$linkedElement","Tabs","$tabs","$tabList","$tabListItems","jsHiddenClass","changingHash","boundTabClick","boundTabKeydown","boundOnHashChange","onTabClick","onTabKeydown","onHashChange","_this$mql","setup","teardown","_this$getTab","$item","$tab","setAttributes","hideTab","$activeTab","getTab","showTab","removeEventListener","unsetAttributes","$tabWithHash","$previousTab","getCurrentTab","unhighlightTab","hidePanel","highlightTab","showPanel","panelId","$panel","getPanel","$currentTab","$nextTab","currentTarget","createHistoryEntry","activatePreviousTab","activateNextTab","parentElement","$nextTabListItem","nextElementSibling","$previousTabListItem","previousElementSibling","initAll","_config$scope","onError","log","components","accordion","button","characterCount","errorSummary","exitThisPage","notificationBanner","passwordInput","scope","createAll","createAllOptions","_createAllOptions$sco","$elements","map","filter"],"mappings":";;;;;;AAUO,QAAMA,OAAO,GAAG;;ECQhB,SAASC,kBAAkBA,CAACC,GAAG,EAAE;EACtC,EAAA,IAAI,CAACA,GAAG,CAACC,QAAQ,CAAC,GAAG,CAAC,EAAE;EACtB,IAAA,OAAOC,SAAS,CAAA;EAClB,GAAA;IAEA,OAAOF,GAAG,CAACG,KAAK,CAAC,GAAG,CAAC,CAACC,GAAG,EAAE,CAAA;EAC7B,CAAA;EASO,SAASC,aAAaA,CAACC,IAAI,EAAE;EAClC,EAAA,MAAMC,QAAQ,GAAG,CAA+BD,4BAAAA,EAAAA,IAAI,CAAE,CAAA,CAAA;EAGtD,EAAA,MAAME,KAAK,GAAGC,MAAM,CACjBC,gBAAgB,CAACC,QAAQ,CAACC,eAAe,CAAC,CAC1CC,gBAAgB,CAACN,QAAQ,CAAC,CAAA;IAE7B,OAAO;MACLA,QAAQ;MACRC,KAAK,EAAEA,KAAK,IAAIN,SAAAA;KACjB,CAAA;EACH,CAAA;EAeO,SAASY,QAAQA,CAACC,QAAQ,EAAEC,OAAO,GAAG,EAAE,EAAE;EAAA,EAAA,IAAAC,qBAAA,CAAA;EAC/C,EAAA,MAAMC,WAAW,GAAGH,QAAQ,CAACI,YAAY,CAAC,UAAU,CAAC,CAAA;IAErD,IAAI,CAACD,WAAW,EAAE;EAChBH,IAAAA,QAAQ,CAACK,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;EACzC,GAAA;IAKA,SAASC,OAAOA,GAAG;EACjBN,IAAAA,QAAQ,CAACO,gBAAgB,CAAC,MAAM,EAAEC,MAAM,EAAE;EAAEC,MAAAA,IAAI,EAAE,IAAA;EAAK,KAAC,CAAC,CAAA;EAC3D,GAAA;IAKA,SAASD,MAAMA,GAAG;EAAA,IAAA,IAAAE,eAAA,CAAA;MAChB,CAAAA,eAAA,GAAAT,OAAO,CAACO,MAAM,KAAdE,IAAAA,IAAAA,eAAA,CAAgBC,IAAI,CAACX,QAAQ,CAAC,CAAA;MAE9B,IAAI,CAACG,WAAW,EAAE;EAChBH,MAAAA,QAAQ,CAACY,eAAe,CAAC,UAAU,CAAC,CAAA;EACtC,KAAA;EACF,GAAA;EAGAZ,EAAAA,QAAQ,CAACO,gBAAgB,CAAC,OAAO,EAAED,OAAO,EAAE;EAAEG,IAAAA,IAAI,EAAE,IAAA;EAAK,GAAC,CAAC,CAAA;IAG3D,CAAAP,qBAAA,GAAAD,OAAO,CAACY,aAAa,KAArBX,IAAAA,IAAAA,qBAAA,CAAuBS,IAAI,CAACX,QAAQ,CAAC,CAAA;IACrCA,QAAQ,CAACc,KAAK,EAAE,CAAA;EAClB,CAAA;EAUO,SAASC,aAAaA,CAACC,KAAK,EAAEC,UAAU,EAAE;IAC/C,OACED,KAAK,YAAYE,WAAW,IAC5BF,KAAK,CAACG,YAAY,CAAC,CAAA,KAAA,EAAQF,UAAU,CAAA,KAAA,CAAO,CAAC,CAAA;EAEjD,CAAA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACO,SAASG,WAAWA,CAACC,MAAM,GAAGzB,QAAQ,CAAC0B,IAAI,EAAE;IAClD,IAAI,CAACD,MAAM,EAAE;EACX,IAAA,OAAO,KAAK,CAAA;EACd,GAAA;EAEA,EAAA,OAAOA,MAAM,CAACE,SAAS,CAACC,QAAQ,CAAC,0BAA0B,CAAC,CAAA;EAC9D,CAAA;EASA,SAASC,OAAOA,CAACC,MAAM,EAAE;EACvB,EAAA,OAAOC,KAAK,CAACF,OAAO,CAACC,MAAM,CAAC,CAAA;EAC9B,CAAA;EASO,SAASE,QAAQA,CAACF,MAAM,EAAE;EAC/B,EAAA,OAAO,CAAC,CAACA,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,IAAI,CAACD,OAAO,CAACC,MAAM,CAAC,CAAA;EACnE,CAAA;EAUO,SAASG,kBAAkBA,CAACC,SAAS,EAAEC,OAAO,EAAE;EACrD,EAAA,OAAO,GAAGD,SAAS,CAACb,UAAU,CAAA,EAAA,EAAKc,OAAO,CAAE,CAAA,CAAA;EAC9C,CAAA;EAQA;EACA;EACA;EACA;;EClJO,MAAMC,kBAAkB,SAASC,KAAK,CAAC;EAAAC,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;EAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA,CAAA;MAAA,IAC5C5C,CAAAA,IAAI,GAAG,oBAAoB,CAAA;EAAA,GAAA;EAC7B,CAAA;EAKO,MAAM6C,YAAY,SAASJ,kBAAkB,CAAC;EAGnD;EACF;EACA;EACA;EACA;EACEE,EAAAA,WAAWA,CAACb,MAAM,GAAGzB,QAAQ,CAAC0B,IAAI,EAAE;MAClC,MAAMe,cAAc,GAClB,UAAU,IAAIC,iBAAiB,CAACC,SAAS,GACrC,gHAAgH,GAChH,kDAAkD,CAAA;EAExD,IAAA,KAAK,CACHlB,MAAM,GACFgB,cAAc,GACd,8DACN,CAAC,CAAA;MAAA,IAjBH9C,CAAAA,IAAI,GAAG,cAAc,CAAA;EAkBrB,GAAA;EACF,CAAA;EAKO,MAAMiD,WAAW,SAASR,kBAAkB,CAAC;EAAAE,EAAAA,WAAAA,CAAA,GAAAC,IAAA,EAAA;EAAA,IAAA,KAAA,CAAA,GAAAA,IAAA,CAAA,CAAA;MAAA,IAClD5C,CAAAA,IAAI,GAAG,aAAa,CAAA;EAAA,GAAA;EACtB,CAAA;EAKO,MAAMkD,YAAY,SAAST,kBAAkB,CAAC;IAmBnDE,WAAWA,CAACQ,gBAAgB,EAAE;MAC5B,IAAIX,OAAO,GAAG,OAAOW,gBAAgB,KAAK,QAAQ,GAAGA,gBAAgB,GAAG,EAAE,CAAA;EAG1E,IAAA,IAAI,OAAOA,gBAAgB,KAAK,QAAQ,EAAE;QACxC,MAAM;UAAEC,SAAS;UAAEC,UAAU;UAAEC,OAAO;EAAEC,QAAAA,YAAAA;EAAa,OAAC,GAAGJ,gBAAgB,CAAA;EAEzEX,MAAAA,OAAO,GAAGa,UAAU,CAAA;QAGpBb,OAAO,IAAIc,OAAO,GACd,CAAmBC,gBAAAA,EAAAA,YAAY,IAAZA,IAAAA,GAAAA,YAAY,GAAI,aAAa,CAAE,CAAA,GAClD,YAAY,CAAA;EAEhBf,MAAAA,OAAO,GAAGF,kBAAkB,CAACc,SAAS,EAAEZ,OAAO,CAAC,CAAA;EAClD,KAAA;MAEA,KAAK,CAACA,OAAO,CAAC,CAAA;MAAA,IAnChBxC,CAAAA,IAAI,GAAG,cAAc,CAAA;EAoCrB,GAAA;EACF,CAAA;EAKO,MAAMwD,SAAS,SAASf,kBAAkB,CAAC;IAOhDE,WAAWA,CAACc,kBAAkB,EAAE;EAC9B,IAAA,MAAMjB,OAAO,GACX,OAAOiB,kBAAkB,KAAK,QAAQ,GAClCA,kBAAkB,GAClBnB,kBAAkB,CAChBmB,kBAAkB,EAClB,8CACF,CAAC,CAAA;MAEP,KAAK,CAACjB,OAAO,CAAC,CAAA;MAAA,IAfhBxC,CAAAA,IAAI,GAAG,WAAW,CAAA;EAgBlB,GAAA;EACF,CAAA;EAaA;EACA;EACA;;EC9HO,MAAM0D,sBAAsB,CAAC;EASlC;EACF;EACA;EACA;EACA;EACA;IACE,IAAIjC,KAAKA,GAAG;MACV,OAAO,IAAI,CAACkC,MAAM,CAAA;EACpB,GAAA;IAcAhB,WAAWA,CAAClB,KAAK,EAAE;EAAA,IAAA,IAAA,CARnBkC,MAAM,GAAA,KAAA,CAAA,CAAA;EASJ,IAAA,MAAMC,gBAAgB,GACpB,IAAI,CAACjB,WACN,CAAA;EASD,IAAA,IAAI,OAAOiB,gBAAgB,CAAClC,UAAU,KAAK,QAAQ,EAAE;EACnD,MAAA,MAAM,IAAI8B,SAAS,CAAC,CAAA,uCAAA,CAAyC,CAAC,CAAA;EAChE,KAAA;EAEA,IAAA,IAAI,EAAE/B,KAAK,YAAYmC,gBAAgB,CAACC,WAAW,CAAC,EAAE;QACpD,MAAM,IAAIX,YAAY,CAAC;EACrBI,QAAAA,OAAO,EAAE7B,KAAK;EACd2B,QAAAA,SAAS,EAAEQ,gBAAgB;EAC3BP,QAAAA,UAAU,EAAE,wBAAwB;EACpCE,QAAAA,YAAY,EAAEK,gBAAgB,CAACC,WAAW,CAAC7D,IAAAA;EAC7C,OAAC,CAAC,CAAA;EACJ,KAAC,MAAM;QACL,IAAI,CAAC2D,MAAM,GAAmClC,KAAM,CAAA;EACtD,KAAA;MAEAmC,gBAAgB,CAACE,YAAY,EAAE,CAAA;MAE/B,IAAI,CAACC,gBAAgB,EAAE,CAAA;EAEvB,IAAA,MAAMrC,UAAU,GAAGkC,gBAAgB,CAAClC,UAAU,CAAA;MAE9C,IAAI,CAACD,KAAK,CAACX,YAAY,CAAC,QAAQY,UAAU,CAAA,KAAA,CAAO,EAAE,EAAE,CAAC,CAAA;EACxD,GAAA;EAQAqC,EAAAA,gBAAgBA,GAAG;EACjB,IAAA,MAAMpB,WAAW,GAAyC,IAAI,CAACA,WAAY,CAAA;EAC3E,IAAA,MAAMjB,UAAU,GAAGiB,WAAW,CAACjB,UAAU,CAAA;MAEzC,IAAIA,UAAU,IAAIF,aAAa,CAAC,IAAI,CAACC,KAAK,EAAEC,UAAU,CAAC,EAAE;EACvD,MAAA,MAAM,IAAI8B,SAAS,CAACb,WAAW,CAAC,CAAA;EAClC,KAAA;EACF,GAAA;IAOA,OAAOmB,YAAYA,GAAG;EACpB,IAAA,IAAI,CAACjC,WAAW,EAAE,EAAE;QAClB,MAAM,IAAIgB,YAAY,EAAE,CAAA;EAC1B,KAAA;EACF,GAAA;EACF,CAAA;;EAEA;EACA;EACA;EACA;;EAEA;EACA;EACA;EArGaa,sBAAsB,CAI1BG,WAAW,GAAGlC,WAAW;;ECV3B,MAAMqC,cAAc,GAAGC,MAAM,CAACC,GAAG,CAAC,gBAAgB,CAAC,CAAA;EAYnD,MAAMC,qBAAqB,SAAST,sBAAsB,CAAC;IAkBhE,CAACM,cAAc,CAAEI,CAAAA,KAAK,EAAE;EACtB,IAAA,OAAO,EAAE,CAAA;EACX,GAAA;;EAEA;EACF;EACA;EACA;EACA;EACA;IACE,IAAIC,MAAMA,GAAG;MACX,OAAO,IAAI,CAACC,OAAO,CAAA;EACrB,GAAA;EAeA3B,EAAAA,WAAWA,CAAClB,KAAK,EAAE4C,MAAM,EAAE;MACzB,KAAK,CAAC5C,KAAK,CAAC,CAAA;EAAA,IAAA,IAAA,CAVd6C,OAAO,GAAA,KAAA,CAAA,CAAA;EAYL,IAAA,MAAMV,gBAAgB,GACqC,IAAI,CAACjB,WAAY,CAAA;EAE5E,IAAA,IAAI,OAAOiB,gBAAgB,CAACW,QAAQ,KAAK,WAAW,EAAE;QACpD,MAAM,IAAItB,WAAW,CACnBX,kBAAkB,CAChBsB,gBAAgB,EAChB,qEACF,CACF,CAAC,CAAA;EACH,KAAA;MAEA,MAAMY,aAAa,GACjBC,gBAAgB,CAACb,gBAAgB,EAAE,IAAI,CAACD,MAAM,CAACe,OAAO,CACvD,CAAA;MAED,IAAI,CAACJ,OAAO,GACVK,YAAY,CACVf,gBAAgB,CAACW,QAAQ,EACzBF,MAAM,IAANA,IAAAA,GAAAA,MAAM,GAAI,EAAE,EACZ,IAAI,CAACL,cAAc,CAAC,CAACQ,aAAa,CAAC,EACnCA,aACF,CACD,CAAA;EACH,GAAA;EACF,CAAA;EAkBO,SAASI,eAAeA,CAAC1E,KAAK,EAAED,QAAQ,EAAE;IAC/C,MAAM4E,YAAY,GAAG3E,KAAK,GAAGA,KAAK,CAAC4E,IAAI,EAAE,GAAG,EAAE,CAAA;EAE9C,EAAA,IAAIC,MAAM,CAAA;EACV,EAAA,IAAIC,UAAU,GAAG/E,QAAQ,IAARA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAEgF,IAAI,CAAA;IAG/B,IAAI,CAACD,UAAU,EAAE;MACf,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAACrF,QAAQ,CAACkF,YAAY,CAAC,EAAE;EAC5CG,MAAAA,UAAU,GAAG,SAAS,CAAA;EACxB,KAAA;EAIA,IAAA,IAAIH,YAAY,CAACK,MAAM,GAAG,CAAC,IAAIC,QAAQ,CAACC,MAAM,CAACP,YAAY,CAAC,CAAC,EAAE;EAC7DG,MAAAA,UAAU,GAAG,QAAQ,CAAA;EACvB,KAAA;EACF,GAAA;EAEA,EAAA,QAAQA,UAAU;EAChB,IAAA,KAAK,SAAS;QACZD,MAAM,GAAGF,YAAY,KAAK,MAAM,CAAA;EAChC,MAAA,MAAA;EAEF,IAAA,KAAK,QAAQ;EACXE,MAAAA,MAAM,GAAGK,MAAM,CAACP,YAAY,CAAC,CAAA;EAC7B,MAAA,MAAA;EAEF,IAAA;EACEE,MAAAA,MAAM,GAAG7E,KAAK,CAAA;EAClB,GAAA;EAEA,EAAA,OAAO6E,MAAM,CAAA;EACf,CAAA;EAaO,SAASN,gBAAgBA,CAAClC,SAAS,EAAEmC,OAAO,EAAE;EACnD,EAAA,IAAI,OAAOnC,SAAS,CAAC8C,MAAM,KAAK,WAAW,EAAE;MAC3C,MAAM,IAAIpC,WAAW,CACnBX,kBAAkB,CAChBC,SAAS,EACT,mEACF,CACF,CAAC,CAAA;EACH,GAAA;IAEA,MAAM+C,GAAG,GAAuD,EAAG,CAAA;EAGnE,EAAA,KAAK,MAAM,CAACC,KAAK,EAAEtF,QAAQ,CAAC,IAAIuF,MAAM,CAACC,OAAO,CAAClD,SAAS,CAAC8C,MAAM,CAACK,UAAU,CAAC,EAAE;MAC3E,IAAIH,KAAK,IAAIb,OAAO,EAAE;EACpBY,MAAAA,GAAG,CAACC,KAAK,CAAC,GAAGX,eAAe,CAACF,OAAO,CAACa,KAAK,CAAC,EAAEtF,QAAQ,CAAC,CAAA;EACxD,KAAA;MAMA,IAAI,CAAAA,QAAQ,IAARA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAEgF,IAAI,MAAK,QAAQ,EAAE;EAC/BK,MAAAA,GAAG,CAACC,KAAK,CAAC,GAAGI,wBAAwB,CAACpD,SAAS,CAAC8C,MAAM,EAAEX,OAAO,EAAEa,KAAK,CAAC,CAAA;EACzE,KAAA;EACF,GAAA;EAEA,EAAA,OAAOD,GAAG,CAAA;EACZ,CAAA;EAYO,SAASX,YAAYA,CAAC,GAAGiB,aAAa,EAAE;IAG7C,MAAMC,qBAAqB,GAAG,EAAE,CAAA;EAGhC,EAAA,KAAK,MAAMC,YAAY,IAAIF,aAAa,EAAE;MACxC,KAAK,MAAMG,GAAG,IAAIP,MAAM,CAACQ,IAAI,CAACF,YAAY,CAAC,EAAE;EAC3C,MAAA,MAAM3D,MAAM,GAAG0D,qBAAqB,CAACE,GAAG,CAAC,CAAA;EACzC,MAAA,MAAME,QAAQ,GAAGH,YAAY,CAACC,GAAG,CAAC,CAAA;QAKlC,IAAI1D,QAAQ,CAACF,MAAM,CAAC,IAAIE,QAAQ,CAAC4D,QAAQ,CAAC,EAAE;UAE1CJ,qBAAqB,CAACE,GAAG,CAAC,GAAGpB,YAAY,CAACxC,MAAM,EAAE8D,QAAQ,CAAC,CAAA;EAC7D,OAAC,MAAM;EAELJ,QAAAA,qBAAqB,CAACE,GAAG,CAAC,GAAGE,QAAQ,CAAA;EACvC,OAAA;EACF,KAAA;EACF,GAAA;EAEA,EAAA,OAAOJ,qBAAqB,CAAA;EAC9B,CAAA;EAeO,SAASK,cAAcA,CAACb,MAAM,EAAEhB,MAAM,EAAE;IAC7C,MAAM8B,gBAAgB,GAAG,EAAE,CAAA;EAG3B,EAAA,KAAK,MAAM,CAACnG,IAAI,EAAEoG,UAAU,CAAC,IAAIZ,MAAM,CAACC,OAAO,CAACJ,MAAM,CAAC,EAAE;MACvD,MAAMgB,MAAM,GAAG,EAAE,CAAA;EAGjB,IAAA,IAAIjE,KAAK,CAACF,OAAO,CAACkE,UAAU,CAAC,EAAE;EAC7B,MAAA,KAAK,MAAM;UAAEE,QAAQ;EAAEC,QAAAA,YAAAA;SAAc,IAAIH,UAAU,EAAE;EACnD,QAAA,IAAI,CAACE,QAAQ,CAACE,KAAK,CAAET,GAAG,IAAK,CAAC,CAAC1B,MAAM,CAAC0B,GAAG,CAAC,CAAC,EAAE;EAC3CM,UAAAA,MAAM,CAACI,IAAI,CAACF,YAAY,CAAC,CAAA;EAC3B,SAAA;EACF,OAAA;EAGA,MAAA,IAAIvG,IAAI,KAAK,OAAO,IAAI,EAAEoG,UAAU,CAAClB,MAAM,GAAGmB,MAAM,CAACnB,MAAM,IAAI,CAAC,CAAC,EAAE;EACjEiB,QAAAA,gBAAgB,CAACM,IAAI,CAAC,GAAGJ,MAAM,CAAC,CAAA;EAClC,OAAA;EACF,KAAA;EACF,GAAA;EAEA,EAAA,OAAOF,gBAAgB,CAAA;EACzB,CAAA;EAYO,SAASR,wBAAwBA,CAACN,MAAM,EAAEX,OAAO,EAAEgC,SAAS,EAAE;EACnE,EAAA,MAAMzG,QAAQ,GAAGoF,MAAM,CAACK,UAAU,CAACgB,SAAS,CAAC,CAAA;IAG7C,IAAI,CAAAzG,QAAQ,IAARA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAEgF,IAAI,MAAK,QAAQ,EAAE;EAC/B,IAAA,OAAA;EACF,GAAA;EAGA,EAAA,MAAM0B,SAAS,GAAG;MAChB,CAACD,SAAS,IAAgC,EAAE,CAAA;KAC7C,CAAA;EAED,EAAA,KAAK,MAAM,CAACX,GAAG,EAAE7F,KAAK,CAAC,IAAIsF,MAAM,CAACC,OAAO,CAACf,OAAO,CAAC,EAAE;MAElD,IAAIkC,OAAO,GAAGD,SAAS,CAAA;EAGvB,IAAA,MAAME,QAAQ,GAAGd,GAAG,CAAClG,KAAK,CAAC,GAAG,CAAC,CAAA;EAQ/B,IAAA,KAAK,MAAM,CAACiH,KAAK,EAAE9G,IAAI,CAAC,IAAI6G,QAAQ,CAACpB,OAAO,EAAE,EAAE;EAC9C,MAAA,IAAI,OAAOmB,OAAO,KAAK,QAAQ,EAAE;EAE/B,QAAA,IAAIE,KAAK,GAAGD,QAAQ,CAAC3B,MAAM,GAAG,CAAC,EAAE;YAE/B,IAAI,CAAC7C,QAAQ,CAACuE,OAAO,CAAC5G,IAAI,CAAC,CAAC,EAAE;EAC5B4G,YAAAA,OAAO,CAAC5G,IAAI,CAAC,GAAG,EAAE,CAAA;EACpB,WAAA;EAGA4G,UAAAA,OAAO,GAAGA,OAAO,CAAC5G,IAAI,CAAC,CAAA;EACzB,SAAC,MAAM,IAAI+F,GAAG,KAAKW,SAAS,EAAE;EAE5BE,UAAAA,OAAO,CAAC5G,IAAI,CAAC,GAAG4E,eAAe,CAAC1E,KAAK,CAAC,CAAA;EACxC,SAAA;EACF,OAAA;EACF,KAAA;EACF,GAAA;IAEA,OAAOyG,SAAS,CAACD,SAAS,CAAC,CAAA;EAC7B,CAAA;EAQA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;;EC/VO,MAAMK,IAAI,CAAC;IAUhBpE,WAAWA,CAACqE,YAAY,GAAG,EAAE,EAAE3C,MAAM,GAAG,EAAE,EAAE;EAAA,IAAA,IAAA4C,cAAA,CAAA;EAAA,IAAA,IAAA,CAT5CD,YAAY,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CACZE,MAAM,GAAA,KAAA,CAAA,CAAA;MAUJ,IAAI,CAACF,YAAY,GAAGA,YAAY,CAAA;EAGhC,IAAA,IAAI,CAACE,MAAM,GAAA,CAAAD,cAAA,GAAG5C,MAAM,CAAC6C,MAAM,KAAAD,IAAAA,GAAAA,cAAA,GAAK5G,QAAQ,CAACC,eAAe,CAAC6G,IAAI,IAAI,IAAK,CAAA;EACxE,GAAA;EAaAC,EAAAA,CAACA,CAACC,SAAS,EAAE3G,OAAO,EAAE;MACpB,IAAI,CAAC2G,SAAS,EAAE;EAEd,MAAA,MAAM,IAAI3E,KAAK,CAAC,0BAA0B,CAAC,CAAA;EAC7C,KAAA;EAGA,IAAA,IAAI4E,WAAW,GAAG,IAAI,CAACN,YAAY,CAACK,SAAS,CAAC,CAAA;EAK9C,IAAA,IAAI,QAAO3G,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAE6G,KAAK,CAAK,KAAA,QAAQ,IAAI,OAAOD,WAAW,KAAK,QAAQ,EAAE;EACzE,MAAA,MAAME,qBAAqB,GACzBF,WAAW,CAAC,IAAI,CAACG,eAAe,CAACJ,SAAS,EAAE3G,OAAO,CAAC6G,KAAK,CAAC,CAAC,CAAA;EAG7D,MAAA,IAAIC,qBAAqB,EAAE;EACzBF,QAAAA,WAAW,GAAGE,qBAAqB,CAAA;EACrC,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,OAAOF,WAAW,KAAK,QAAQ,EAAE;EAEnC,MAAA,IAAIA,WAAW,CAACI,KAAK,CAAC,WAAW,CAAC,EAAE;UAClC,IAAI,CAAChH,OAAO,EAAE;EACZ,UAAA,MAAM,IAAIgC,KAAK,CACb,wEACF,CAAC,CAAA;EACH,SAAA;EAEA,QAAA,OAAO,IAAI,CAACiF,mBAAmB,CAACL,WAAW,EAAE5G,OAAO,CAAC,CAAA;EACvD,OAAA;EAEA,MAAA,OAAO4G,WAAW,CAAA;EACpB,KAAA;EAIA,IAAA,OAAOD,SAAS,CAAA;EAClB,GAAA;EAWAM,EAAAA,mBAAmBA,CAACC,iBAAiB,EAAElH,OAAO,EAAE;MAC9C,MAAMmH,SAAS,GAAGC,IAAI,CAACC,YAAY,CAACC,kBAAkB,CAAC,IAAI,CAACd,MAAM,CAAC,CAAChC,MAAM,GACtE,IAAI4C,IAAI,CAACC,YAAY,CAAC,IAAI,CAACb,MAAM,CAAC,GAClCtH,SAAS,CAAA;MAEb,OAAOgI,iBAAiB,CAACK,OAAO,CAC9B,YAAY,EAUZ,UAAUC,qBAAqB,EAAEC,cAAc,EAAE;EAC/C,MAAA,IAAI3C,MAAM,CAACxC,SAAS,CAACoF,cAAc,CAAChH,IAAI,CAACV,OAAO,EAAEyH,cAAc,CAAC,EAAE;EACjE,QAAA,MAAME,gBAAgB,GAAG3H,OAAO,CAACyH,cAAc,CAAC,CAAA;EAIhD,QAAA,IACEE,gBAAgB,KAAK,KAAK,IACzB,OAAOA,gBAAgB,KAAK,QAAQ,IACnC,OAAOA,gBAAgB,KAAK,QAAS,EACvC;EACA,UAAA,OAAO,EAAE,CAAA;EACX,SAAA;EAGA,QAAA,IAAI,OAAOA,gBAAgB,KAAK,QAAQ,EAAE;YACxC,OAAOR,SAAS,GACZA,SAAS,CAACS,MAAM,CAACD,gBAAgB,CAAC,GAClC,CAAGA,EAAAA,gBAAgB,CAAE,CAAA,CAAA;EAC3B,SAAA;EAEA,QAAA,OAAOA,gBAAgB,CAAA;EACzB,OAAA;EAEA,MAAA,MAAM,IAAI3F,KAAK,CACb,CAAkCwF,+BAAAA,EAAAA,qBAAqB,wBACzD,CAAC,CAAA;EACH,KACF,CAAC,CAAA;EACH,GAAA;EAcAK,EAAAA,yBAAyBA,GAAG;MAC1B,OAAOC,OAAO,CACZ,aAAa,IAAIrI,MAAM,CAAC2H,IAAI,IAC1BA,IAAI,CAACW,WAAW,CAACT,kBAAkB,CAAC,IAAI,CAACd,MAAM,CAAC,CAAChC,MACrD,CAAC,CAAA;EACH,GAAA;EAkBAuC,EAAAA,eAAeA,CAACJ,SAAS,EAAEE,KAAK,EAAE;EAKhCA,IAAAA,KAAK,GAAGnC,MAAM,CAACmC,KAAK,CAAC,CAAA;EACrB,IAAA,IAAI,CAACpC,QAAQ,CAACoC,KAAK,CAAC,EAAE;EACpB,MAAA,OAAO,OAAO,CAAA;EAChB,KAAA;EAGA,IAAA,MAAMD,WAAW,GAAG,IAAI,CAACN,YAAY,CAACK,SAAS,CAAC,CAAA;EAKhD,IAAA,MAAMqB,aAAa,GAAG,IAAI,CAACH,yBAAyB,EAAE,GAClD,IAAIT,IAAI,CAACW,WAAW,CAAC,IAAI,CAACvB,MAAM,CAAC,CAACyB,MAAM,CAACpB,KAAK,CAAC,GAC/C,IAAI,CAACqB,kCAAkC,CAACrB,KAAK,CAAC,CAAA;EAGlD,IAAA,IAAI,OAAOD,WAAW,KAAK,QAAQ,EAAE;QACnC,IAAIoB,aAAa,IAAIpB,WAAW,EAAE;EAChC,QAAA,OAAOoB,aAAa,CAAA;EAGtB,OAAC,MAAM,IAAI,OAAO,IAAIpB,WAAW,EAAE;UACjCuB,OAAO,CAACC,IAAI,CACV,CAA+BJ,4BAAAA,EAAAA,aAAa,UAAU,IAAI,CAACxB,MAAM,CAAA,mCAAA,CACnE,CAAC,CAAA;EAED,QAAA,OAAO,OAAO,CAAA;EAChB,OAAA;EACF,KAAA;MAGA,MAAM,IAAIxE,KAAK,CACb,CAAA,4CAAA,EAA+C,IAAI,CAACwE,MAAM,UAC5D,CAAC,CAAA;EACH,GAAA;IAYA0B,kCAAkCA,CAACrB,KAAK,EAAE;MAGxCA,KAAK,GAAGwB,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,KAAK,CAAC1B,KAAK,CAAC,CAAC,CAAA;EAEnC,IAAA,MAAM2B,OAAO,GAAG,IAAI,CAACC,uBAAuB,EAAE,CAAA;EAE9C,IAAA,IAAID,OAAO,EAAE;QACX,OAAOnC,IAAI,CAACqC,WAAW,CAACF,OAAO,CAAC,CAAC3B,KAAK,CAAC,CAAA;EACzC,KAAA;EAEA,IAAA,OAAO,OAAO,CAAA;EAChB,GAAA;EAcA4B,EAAAA,uBAAuBA,GAAG;EACxB,IAAA,MAAME,WAAW,GAAG,IAAI,CAACnC,MAAM,CAACrH,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;EAI7C,IAAA,KAAK,MAAMyJ,UAAU,IAAIvC,IAAI,CAACwC,cAAc,EAAE;EAC5C,MAAA,MAAMC,SAAS,GAAGzC,IAAI,CAACwC,cAAc,CAACD,UAAU,CAAC,CAAA;EACjD,MAAA,IAAIE,SAAS,CAAC7J,QAAQ,CAAC,IAAI,CAACuH,MAAM,CAAC,IAAIsC,SAAS,CAAC7J,QAAQ,CAAC0J,WAAW,CAAC,EAAE;EACtE,QAAA,OAAOC,UAAU,CAAA;EACnB,OAAA;EACF,KAAA;EACF,GAAA;EA6LF,CAAA;EAvbavC,IAAI,CA6RRwC,cAAc,GAAG;IACtBE,MAAM,EAAE,CAAC,IAAI,CAAC;EACdC,EAAAA,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;EAC/DC,EAAAA,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IACxDC,MAAM,EAAE,CACN,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,CACL;IACDC,KAAK,EAAE,CAAC,IAAI,CAAC;EACbC,EAAAA,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;IACrBC,QAAQ,EAAE,CAAC,IAAI,CAAC;EAChBC,EAAAA,OAAO,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;IAC9BC,KAAK,EAAE,CAAC,IAAI,CAAA;EACd,CAAC,CAAA;EAhUUlD,IAAI,CAgVRqC,WAAW,GAAG;IACnBK,MAAMA,CAACS,CAAC,EAAE;MACR,IAAIA,CAAC,KAAK,CAAC,EAAE;EACX,MAAA,OAAO,MAAM,CAAA;EACf,KAAA;MACA,IAAIA,CAAC,KAAK,CAAC,EAAE;EACX,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;MACA,IAAIA,CAAC,KAAK,CAAC,EAAE;EACX,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;MACA,IAAIA,CAAC,GAAG,GAAG,IAAI,CAAC,IAAIA,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE;EACjC,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;MACA,IAAIA,CAAC,GAAG,GAAG,IAAI,EAAE,IAAIA,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE;EAClC,MAAA,OAAO,MAAM,CAAA;EACf,KAAA;EACA,IAAA,OAAO,OAAO,CAAA;KACf;EACDR,EAAAA,OAAOA,GAAG;EACR,IAAA,OAAO,OAAO,CAAA;KACf;IACDC,MAAMA,CAACO,CAAC,EAAE;MACR,OAAOA,CAAC,KAAK,CAAC,IAAIA,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,OAAO,CAAA;KAC5C;IACDN,MAAMA,CAACM,CAAC,EAAE;EACR,IAAA,OAAOA,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,OAAO,CAAA;KACjC;IACDL,KAAKA,CAACK,CAAC,EAAE;MACP,IAAIA,CAAC,KAAK,CAAC,EAAE;EACX,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;MACA,IAAIA,CAAC,KAAK,CAAC,EAAE;EACX,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;EACA,IAAA,IAAIA,CAAC,IAAI,CAAC,IAAIA,CAAC,IAAI,CAAC,EAAE;EACpB,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;EACA,IAAA,IAAIA,CAAC,IAAI,CAAC,IAAIA,CAAC,IAAI,EAAE,EAAE;EACrB,MAAA,OAAO,MAAM,CAAA;EACf,KAAA;EACA,IAAA,OAAO,OAAO,CAAA;KACf;IACDJ,OAAOA,CAACI,CAAC,EAAE;EACT,IAAA,MAAMC,OAAO,GAAGD,CAAC,GAAG,GAAG,CAAA;EACvB,IAAA,MAAME,IAAI,GAAGD,OAAO,GAAG,EAAE,CAAA;EACzB,IAAA,IAAIC,IAAI,KAAK,CAAC,IAAID,OAAO,KAAK,EAAE,EAAE;EAChC,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;EACA,IAAA,IAAIC,IAAI,IAAI,CAAC,IAAIA,IAAI,IAAI,CAAC,IAAI,EAAED,OAAO,IAAI,EAAE,IAAIA,OAAO,IAAI,EAAE,CAAC,EAAE;EAC/D,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;EACA,IAAA,IACEC,IAAI,KAAK,CAAC,IACTA,IAAI,IAAI,CAAC,IAAIA,IAAI,IAAI,CAAE,IACvBD,OAAO,IAAI,EAAE,IAAIA,OAAO,IAAI,EAAG,EAChC;EACA,MAAA,OAAO,MAAM,CAAA;EACf,KAAA;EAGA,IAAA,OAAO,OAAO,CAAA;KACf;IACDJ,QAAQA,CAACG,CAAC,EAAE;EACV,IAAA,IAAIA,CAAC,KAAK,CAAC,IAAIA,CAAC,KAAK,EAAE,EAAE;EACvB,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;EACA,IAAA,IAAIA,CAAC,KAAK,CAAC,IAAIA,CAAC,KAAK,EAAE,EAAE;EACvB,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;EACA,IAAA,IAAKA,CAAC,IAAI,CAAC,IAAIA,CAAC,IAAI,EAAE,IAAMA,CAAC,IAAI,EAAE,IAAIA,CAAC,IAAI,EAAG,EAAE;EAC/C,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;EACA,IAAA,OAAO,OAAO,CAAA;KACf;IACDF,OAAOA,CAACE,CAAC,EAAE;MACT,IAAIA,CAAC,KAAK,CAAC,EAAE;EACX,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;MACA,IAAIA,CAAC,GAAG,OAAO,KAAK,CAAC,IAAIA,CAAC,KAAK,CAAC,EAAE;EAChC,MAAA,OAAO,MAAM,CAAA;EACf,KAAA;EACA,IAAA,OAAO,OAAO,CAAA;KACf;IACDD,KAAKA,CAACC,CAAC,EAAE;MACP,IAAIA,CAAC,KAAK,CAAC,EAAE;EACX,MAAA,OAAO,MAAM,CAAA;EACf,KAAA;MACA,IAAIA,CAAC,KAAK,CAAC,EAAE;EACX,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;MACA,IAAIA,CAAC,KAAK,CAAC,EAAE;EACX,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;MACA,IAAIA,CAAC,KAAK,CAAC,EAAE;EACX,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;MACA,IAAIA,CAAC,KAAK,CAAC,EAAE;EACX,MAAA,OAAO,MAAM,CAAA;EACf,KAAA;EACA,IAAA,OAAO,OAAO,CAAA;EAChB,GAAA;EACF,CAAC;;ECxbH;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACO,MAAMG,SAAS,SAASlG,qBAAqB,CAAC;EAkFnD;EACF;EACA;EACA;EACExB,EAAAA,WAAWA,CAAClB,KAAK,EAAE4C,MAAM,GAAG,EAAE,EAAE;EAC9B,IAAA,KAAK,CAAC5C,KAAK,EAAE4C,MAAM,CAAC,CAAA;EAAA,IAAA,IAAA,CArFtBiG,IAAI,GAAA,KAAA,CAAA,CAAA;MAAA,IAGJC,CAAAA,aAAa,GAAG,2BAA2B,CAAA;MAAA,IAG3CC,CAAAA,YAAY,GAAG,2BAA2B,CAAA;MAAA,IAG1CC,CAAAA,gBAAgB,GAAG,gCAAgC,CAAA;MAAA,IAGnDC,CAAAA,YAAY,GAAG,0BAA0B,CAAA;MAAA,IAGzCC,CAAAA,oBAAoB,GAAG,oCAAoC,CAAA;MAAA,IAG3DC,CAAAA,kBAAkB,GAAG,iCAAiC,CAAA;MAAA,IAGtDC,CAAAA,kBAAkB,GAAG,iCAAiC,CAAA;MAAA,IAGtDC,CAAAA,mBAAmB,GAAG,kCAAkC,CAAA;MAAA,IAGxDC,CAAAA,0BAA0B,GAAG,0CAA0C,CAAA;MAAA,IAGvEC,CAAAA,uBAAuB,GAAG,uCAAuC,CAAA;MAAA,IAGjEC,CAAAA,4BAA4B,GAAG,6CAA6C,CAAA;MAAA,IAG5EC,CAAAA,0BAA0B,GAAG,iCAAiC,CAAA;MAAA,IAG9DC,CAAAA,+BAA+B,GAAG,uCAAuC,CAAA;MAAA,IAGzEC,CAAAA,wBAAwB,GAAG,sCAAsC,CAAA;MAAA,IAGjEC,CAAAA,kBAAkB,GAAG,8BAA8B,CAAA;MAAA,IAGnDC,CAAAA,oBAAoB,GAAG,oCAAoC,CAAA;MAAA,IAG3DC,CAAAA,mBAAmB,GAAG,kCAAkC,CAAA;MAAA,IAGxDC,CAAAA,wBAAwB,GAAG,wCAAwC,CAAA;MAAA,IAGnEC,CAAAA,mBAAmB,GAAG,kCAAkC,CAAA;EAAA,IAAA,IAAA,CAGxDC,SAAS,GAAA,KAAA,CAAA,CAAA;MAAA,IAMTC,CAAAA,cAAc,GAAG,IAAI,CAAA;MAAA,IAMrBC,CAAAA,YAAY,GAAG,IAAI,CAAA;MAAA,IAMnBC,CAAAA,YAAY,GAAG,IAAI,CAAA;MASjB,IAAI,CAACvB,IAAI,GAAG,IAAIvD,IAAI,CAAC,IAAI,CAAC1C,MAAM,CAACiG,IAAI,CAAC,CAAA;EAEtC,IAAA,MAAMoB,SAAS,GAAG,IAAI,CAACjK,KAAK,CAACqK,gBAAgB,CAAC,CAAI,CAAA,EAAA,IAAI,CAACpB,YAAY,EAAE,CAAC,CAAA;EACtE,IAAA,IAAI,CAACgB,SAAS,CAACxG,MAAM,EAAE;QACrB,MAAM,IAAIhC,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEiH,SAAS;EACpBhH,QAAAA,UAAU,EAAE,CAAA,wBAAA,EAA2B,IAAI,CAACqH,YAAY,CAAA,KAAA,CAAA;EAC1D,OAAC,CAAC,CAAA;EACJ,KAAA;MAEA,IAAI,CAACgB,SAAS,GAAGA,SAAS,CAAA;MAE1B,IAAI,CAACK,YAAY,EAAE,CAAA;MACnB,IAAI,CAACC,kBAAkB,EAAE,CAAA;MAEzB,IAAI,CAACC,mBAAmB,CAAC,IAAI,CAACC,kBAAkB,EAAE,CAAC,CAAA;EACrD,GAAA;EAOAH,EAAAA,YAAYA,GAAG;MAEb,IAAI,CAACJ,cAAc,GAAGtL,QAAQ,CAAC8L,aAAa,CAAC,QAAQ,CAAC,CAAA;MACtD,IAAI,CAACR,cAAc,CAAC7K,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;MAClD,IAAI,CAAC6K,cAAc,CAAC7K,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC0J,YAAY,CAAC,CAAA;MAC5D,IAAI,CAACmB,cAAc,CAAC7K,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;MAG1D,IAAI,CAAC8K,YAAY,GAAGvL,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;MAClD,IAAI,CAACP,YAAY,CAAC5J,SAAS,CAACoK,GAAG,CAAC,IAAI,CAACf,kBAAkB,CAAC,CAAA;MACxD,IAAI,CAACM,cAAc,CAACU,WAAW,CAAC,IAAI,CAACT,YAAY,CAAC,CAAA;EAGlD,IAAA,MAAMU,kBAAkB,GAAGjM,QAAQ,CAAC8L,aAAa,CAAC,KAAK,CAAC,CAAA;MACxDG,kBAAkB,CAACxL,YAAY,CAAC,OAAO,EAAE,IAAI,CAACyJ,aAAa,CAAC,CAAA;EAC5D+B,IAAAA,kBAAkB,CAACD,WAAW,CAAC,IAAI,CAACV,cAAc,CAAC,CAAA;EACnD,IAAA,IAAI,CAAClK,KAAK,CAAC8K,YAAY,CAACD,kBAAkB,EAAE,IAAI,CAAC7K,KAAK,CAAC+K,UAAU,CAAC,CAAA;MAGlE,IAAI,CAACX,YAAY,GAAGxL,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;MAClD,IAAI,CAACN,YAAY,CAAC7J,SAAS,CAACoK,GAAG,CAAC,IAAI,CAAC3B,gBAAgB,CAAC,CAAA;MACtD,IAAI,CAACkB,cAAc,CAACU,WAAW,CAAC,IAAI,CAACR,YAAY,CAAC,CAAA;EAGlD,IAAA,IAAI,CAACF,cAAc,CAAC3K,gBAAgB,CAAC,OAAO,EAAE,MAC5C,IAAI,CAACyL,qBAAqB,EAC5B,CAAC,CAAA;MAGD,IAAI,eAAe,IAAIpM,QAAQ,EAAE;EAC/BA,MAAAA,QAAQ,CAACW,gBAAgB,CAAC,aAAa,EAAG0L,KAAK,IAC7C,IAAI,CAACC,aAAa,CAACD,KAAK,CAC1B,CAAC,CAAA;EACH,KAAA;EACF,GAAA;EAOAV,EAAAA,kBAAkBA,GAAG;MACnB,IAAI,CAACN,SAAS,CAACkB,OAAO,CAAC,CAACC,QAAQ,EAAEC,CAAC,KAAK;QACtC,MAAMC,OAAO,GAAGF,QAAQ,CAACG,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAACnC,kBAAkB,CAAA,CAAE,CAAC,CAAA;QACrE,IAAI,CAACkC,OAAO,EAAE;UACZ,MAAM,IAAI7J,YAAY,CAAC;EACrBE,UAAAA,SAAS,EAAEiH,SAAS;EACpBhH,UAAAA,UAAU,EAAE,CAAA,+BAAA,EAAkC,IAAI,CAACwH,kBAAkB,CAAA,KAAA,CAAA;EACvE,SAAC,CAAC,CAAA;EACJ,OAAA;EAGA,MAAA,IAAI,CAACoC,qBAAqB,CAACF,OAAO,EAAED,CAAC,CAAC,CAAA;QACtC,IAAI,CAACI,WAAW,CAAC,IAAI,CAACC,UAAU,CAACN,QAAQ,CAAC,EAAEA,QAAQ,CAAC,CAAA;EAGrDE,MAAAA,OAAO,CAAC/L,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAACoM,eAAe,CAACP,QAAQ,CAAC,CAAC,CAAA;EAIvE,MAAA,IAAI,CAACQ,eAAe,CAACR,QAAQ,CAAC,CAAA;EAChC,KAAC,CAAC,CAAA;EACJ,GAAA;EASAI,EAAAA,qBAAqBA,CAACF,OAAO,EAAEjG,KAAK,EAAE;MACpC,MAAMwG,KAAK,GAAGP,OAAO,CAACC,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAACpC,kBAAkB,CAAA,CAAE,CAAC,CAAA;MAClE,MAAM2C,QAAQ,GAAGR,OAAO,CAACC,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAAClC,mBAAmB,CAAA,CAAE,CAAC,CAAA;MACtE,MAAM0C,QAAQ,GAAGT,OAAO,CAACC,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAACzB,mBAAmB,CAAA,CAAE,CAAC,CAAA;MAEtE,IAAI,CAACgC,QAAQ,EAAE;QACb,MAAM,IAAIrK,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEiH,SAAS;EACpBhH,QAAAA,UAAU,EAAE,CAAA,oBAAA,EAAuB,IAAI,CAACyH,mBAAmB,CAAA,GAAA,CAAA;EAC7D,OAAC,CAAC,CAAA;EACJ,KAAA;MAEA,IAAI,CAACwC,KAAK,EAAE;QACV,MAAM,IAAIpK,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEiH,SAAS;EACpBhH,QAAAA,UAAU,EAAE,CAAA,2CAAA,EAA8C,IAAI,CAACuH,kBAAkB,CAAA,KAAA,CAAA;EACnF,OAAC,CAAC,CAAA;EACJ,KAAA;EAIA,IAAA,MAAM6C,OAAO,GAAGpN,QAAQ,CAAC8L,aAAa,CAAC,QAAQ,CAAC,CAAA;EAChDsB,IAAAA,OAAO,CAAC3M,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;EACtC2M,IAAAA,OAAO,CAAC3M,YAAY,CAClB,eAAe,EACf,GAAG,IAAI,CAACW,KAAK,CAACiM,EAAE,CAAY5G,SAAAA,EAAAA,KAAK,GAAG,CAAC,EACvC,CAAC,CAAA;MAID,KAAK,MAAM6G,IAAI,IAAIvL,KAAK,CAACwL,IAAI,CAACN,KAAK,CAACO,UAAU,CAAC,EAAE;EAC/C,MAAA,IAAIF,IAAI,CAAC3N,IAAI,KAAK,IAAI,EAAE;UACtByN,OAAO,CAAC3M,YAAY,CAAC6M,IAAI,CAAC3N,IAAI,EAAE2N,IAAI,CAACzN,KAAK,CAAC,CAAA;EAC7C,OAAA;EACF,KAAA;EAGA,IAAA,MAAM4N,YAAY,GAAGzN,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;MACnD2B,YAAY,CAAC9L,SAAS,CAACoK,GAAG,CAAC,IAAI,CAACpB,uBAAuB,CAAC,CAAA;EAGxD8C,IAAAA,YAAY,CAACJ,EAAE,GAAGJ,KAAK,CAACI,EAAE,CAAA;EAI1B,IAAA,MAAMK,iBAAiB,GAAG1N,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;MACxD4B,iBAAiB,CAAC/L,SAAS,CAACoK,GAAG,CAAC,IAAI,CAACnB,4BAA4B,CAAC,CAAA;EAClE6C,IAAAA,YAAY,CAACzB,WAAW,CAAC0B,iBAAiB,CAAC,CAAA;EAG3C3L,IAAAA,KAAK,CAACwL,IAAI,CAACN,KAAK,CAACU,UAAU,CAAC,CAACpB,OAAO,CAAEqB,MAAM,IAC1CF,iBAAiB,CAAC1B,WAAW,CAAC4B,MAAM,CACtC,CAAC,CAAA;EAGD,IAAA,MAAMC,eAAe,GAAG7N,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;MACtD+B,eAAe,CAAClM,SAAS,CAACoK,GAAG,CAAC,IAAI,CAAClB,0BAA0B,CAAC,CAAA;EAI9DgD,IAAAA,eAAe,CAACpN,YAAY,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;EAElD,IAAA,MAAMqN,oBAAoB,GAAG9N,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;MAC3DgC,oBAAoB,CAACnM,SAAS,CAACoK,GAAG,CAAC,IAAI,CAACjB,+BAA+B,CAAC,CAAA;EACxE+C,IAAAA,eAAe,CAAC7B,WAAW,CAAC8B,oBAAoB,CAAC,CAAA;EAEjD,IAAA,MAAMC,aAAa,GAAG/N,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;EACpD,IAAA,MAAMkC,aAAa,GAAGhO,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;MACpDkC,aAAa,CAACrM,SAAS,CAACoK,GAAG,CAAC,IAAI,CAACf,kBAAkB,CAAC,CAAA;EACpD8C,IAAAA,oBAAoB,CAAC9B,WAAW,CAACgC,aAAa,CAAC,CAAA;MAC/CD,aAAa,CAACpM,SAAS,CAACoK,GAAG,CAAC,IAAI,CAAChB,wBAAwB,CAAC,CAAA;EAC1D+C,IAAAA,oBAAoB,CAAC9B,WAAW,CAAC+B,aAAa,CAAC,CAAA;EAO/CX,IAAAA,OAAO,CAACpB,WAAW,CAACyB,YAAY,CAAC,CAAA;MACjCL,OAAO,CAACpB,WAAW,CAAC,IAAI,CAACiC,sBAAsB,EAAE,CAAC,CAAA;EAGlD,IAAA,IAAId,QAAQ,EAAE;EAKZ,MAAA,MAAMe,YAAY,GAAGlO,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;EAGnD,MAAA,MAAMqC,iBAAiB,GAAGnO,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;QACxDqC,iBAAiB,CAACxM,SAAS,CAACoK,GAAG,CAAC,IAAI,CAACZ,wBAAwB,CAAC,CAAA;EAC9D+C,MAAAA,YAAY,CAAClC,WAAW,CAACmC,iBAAiB,CAAC,CAAA;QAG3C,KAAK,MAAMb,IAAI,IAAIvL,KAAK,CAACwL,IAAI,CAACJ,QAAQ,CAACK,UAAU,CAAC,EAAE;UAClDU,YAAY,CAACzN,YAAY,CAAC6M,IAAI,CAAC3N,IAAI,EAAE2N,IAAI,CAACzN,KAAK,CAAC,CAAA;EAClD,OAAA;EAGAkC,MAAAA,KAAK,CAACwL,IAAI,CAACJ,QAAQ,CAACQ,UAAU,CAAC,CAACpB,OAAO,CAAEqB,MAAM,IAC7CO,iBAAiB,CAACnC,WAAW,CAAC4B,MAAM,CACtC,CAAC,CAAA;QAGDT,QAAQ,CAACiB,MAAM,EAAE,CAAA;EAEjBhB,MAAAA,OAAO,CAACpB,WAAW,CAACkC,YAAY,CAAC,CAAA;QACjCd,OAAO,CAACpB,WAAW,CAAC,IAAI,CAACiC,sBAAsB,EAAE,CAAC,CAAA;EACpD,KAAA;EAEAb,IAAAA,OAAO,CAACpB,WAAW,CAAC6B,eAAe,CAAC,CAAA;EAEpCX,IAAAA,QAAQ,CAACmB,WAAW,CAACpB,KAAK,CAAC,CAAA;EAC3BC,IAAAA,QAAQ,CAAClB,WAAW,CAACoB,OAAO,CAAC,CAAA;EAC/B,GAAA;IAQAd,aAAaA,CAACD,KAAK,EAAE;EACnB,IAAA,MAAMiC,SAAS,GAAGjC,KAAK,CAACkC,MAAM,CAAA;EAG9B,IAAA,IAAI,EAAED,SAAS,YAAYE,OAAO,CAAC,EAAE;EACnC,MAAA,OAAA;EACF,KAAA;MAGA,MAAMhC,QAAQ,GAAG8B,SAAS,CAACG,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAACpE,YAAY,CAAA,CAAE,CAAC,CAAA;EAC3D,IAAA,IAAImC,QAAQ,EAAE;EACZ,MAAA,IAAI,CAACK,WAAW,CAAC,IAAI,EAAEL,QAAQ,CAAC,CAAA;EAClC,KAAA;EACF,GAAA;IAQAO,eAAeA,CAACP,QAAQ,EAAE;MACxB,MAAMkC,WAAW,GAAG,CAAC,IAAI,CAAC5B,UAAU,CAACN,QAAQ,CAAC,CAAA;EAC9C,IAAA,IAAI,CAACK,WAAW,CAAC6B,WAAW,EAAElC,QAAQ,CAAC,CAAA;EAGvC,IAAA,IAAI,CAACmC,UAAU,CAACnC,QAAQ,EAAEkC,WAAW,CAAC,CAAA;EACxC,GAAA;EAOAtC,EAAAA,qBAAqBA,GAAG;EACtB,IAAA,MAAMsC,WAAW,GAAG,CAAC,IAAI,CAAC7C,kBAAkB,EAAE,CAAA;EAE9C,IAAA,IAAI,CAACR,SAAS,CAACkB,OAAO,CAAEC,QAAQ,IAAK;EACnC,MAAA,IAAI,CAACK,WAAW,CAAC6B,WAAW,EAAElC,QAAQ,CAAC,CAAA;EACvC,MAAA,IAAI,CAACmC,UAAU,CAACnC,QAAQ,EAAEkC,WAAW,CAAC,CAAA;EACxC,KAAC,CAAC,CAAA;EAEF,IAAA,IAAI,CAAC9C,mBAAmB,CAAC8C,WAAW,CAAC,CAAA;EACvC,GAAA;EASA7B,EAAAA,WAAWA,CAAC+B,QAAQ,EAAEpC,QAAQ,EAAE;MAC9B,MAAMwB,aAAa,GAAGxB,QAAQ,CAACG,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC3B,kBAAkB,CAAA,CAAE,CAAC,CAAA;MAC3E,MAAM+C,aAAa,GAAGvB,QAAQ,CAACG,aAAa,CAC1C,CAAA,CAAA,EAAI,IAAI,CAAC5B,wBAAwB,CAAA,CACnC,CAAC,CAAA;MACD,MAAMqC,OAAO,GAAGZ,QAAQ,CAACG,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAACpC,kBAAkB,CAAA,CAAE,CAAC,CAAA;MACrE,MAAMsE,QAAQ,GAAGrC,QAAQ,CAACG,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAACvB,mBAAmB,CAAA,CAAE,CAAC,CAAA;MAEvE,IAAI,CAACyD,QAAQ,EAAE;QACb,MAAM,IAAIhM,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEiH,SAAS;EACpBhH,QAAAA,UAAU,EAAE,CAAA,+BAAA,EAAkC,IAAI,CAACoI,mBAAmB,CAAA,KAAA,CAAA;EACxE,OAAC,CAAC,CAAA;EACJ,KAAA;MAEA,IAAI,CAAC4C,aAAa,IAAI,CAACD,aAAa,IAAI,CAACX,OAAO,EAAE;EAEhD,MAAA,OAAA;EACF,KAAA;MAEA,MAAM0B,aAAa,GAAGF,QAAQ,GAC1B,IAAI,CAAC3E,IAAI,CAAClD,CAAC,CAAC,aAAa,CAAC,GAC1B,IAAI,CAACkD,IAAI,CAAClD,CAAC,CAAC,aAAa,CAAC,CAAA;MAE9BgH,aAAa,CAACgB,WAAW,GAAGD,aAAa,CAAA;MACzC1B,OAAO,CAAC3M,YAAY,CAAC,eAAe,EAAE,CAAGmO,EAAAA,QAAQ,EAAE,CAAC,CAAA;MAGpD,MAAMI,cAAc,GAAG,EAAE,CAAA;MAEzB,MAAMvB,YAAY,GAAGjB,QAAQ,CAACG,aAAa,CACzC,CAAA,CAAA,EAAI,IAAI,CAAChC,uBAAuB,CAAA,CAClC,CAAC,CAAA;EACD,IAAA,IAAI8C,YAAY,EAAE;EAChBuB,MAAAA,cAAc,CAAC5I,IAAI,CAAC,CAAA,EAAGqH,YAAY,CAACsB,WAAW,CAAA,CAAE,CAACtK,IAAI,EAAE,CAAC,CAAA;EAC3D,KAAA;MAEA,MAAM0I,QAAQ,GAAGX,QAAQ,CAACG,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAACzB,mBAAmB,CAAA,CAAE,CAAC,CAAA;EACvE,IAAA,IAAIiC,QAAQ,EAAE;EACZ6B,MAAAA,cAAc,CAAC5I,IAAI,CAAC,CAAA,EAAG+G,QAAQ,CAAC4B,WAAW,CAAA,CAAE,CAACtK,IAAI,EAAE,CAAC,CAAA;EACvD,KAAA;MAEA,MAAMwK,gBAAgB,GAAGL,QAAQ,GAC7B,IAAI,CAAC3E,IAAI,CAAClD,CAAC,CAAC,sBAAsB,CAAC,GACnC,IAAI,CAACkD,IAAI,CAAClD,CAAC,CAAC,sBAAsB,CAAC,CAAA;EACvCiI,IAAAA,cAAc,CAAC5I,IAAI,CAAC6I,gBAAgB,CAAC,CAAA;MAOrC7B,OAAO,CAAC3M,YAAY,CAAC,YAAY,EAAEuO,cAAc,CAACE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;EAG9D,IAAA,IAAIN,QAAQ,EAAE;EACZC,MAAAA,QAAQ,CAAC7N,eAAe,CAAC,QAAQ,CAAC,CAAA;QAClCwL,QAAQ,CAAC7K,SAAS,CAACoK,GAAG,CAAC,IAAI,CAACzB,oBAAoB,CAAC,CAAA;QACjD0D,aAAa,CAACrM,SAAS,CAACyM,MAAM,CAAC,IAAI,CAACnD,oBAAoB,CAAC,CAAA;EAC3D,KAAC,MAAM;EACL4D,MAAAA,QAAQ,CAACpO,YAAY,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAA;QAC9C+L,QAAQ,CAAC7K,SAAS,CAACyM,MAAM,CAAC,IAAI,CAAC9D,oBAAoB,CAAC,CAAA;QACpD0D,aAAa,CAACrM,SAAS,CAACoK,GAAG,CAAC,IAAI,CAACd,oBAAoB,CAAC,CAAA;EACxD,KAAA;MAGA,IAAI,CAACW,mBAAmB,CAAC,IAAI,CAACC,kBAAkB,EAAE,CAAC,CAAA;EACrD,GAAA;IASAiB,UAAUA,CAACN,QAAQ,EAAE;MACnB,OAAOA,QAAQ,CAAC7K,SAAS,CAACC,QAAQ,CAAC,IAAI,CAAC0I,oBAAoB,CAAC,CAAA;EAC/D,GAAA;EAQAuB,EAAAA,kBAAkBA,GAAG;EACnB,IAAA,OAAO9J,KAAK,CAACwL,IAAI,CAAC,IAAI,CAAClC,SAAS,CAAC,CAAClF,KAAK,CAAEqG,QAAQ,IAC/C,IAAI,CAACM,UAAU,CAACN,QAAQ,CAC1B,CAAC,CAAA;EACH,GAAA;IAQAZ,mBAAmBA,CAACgD,QAAQ,EAAE;EAC5B,IAAA,IAAI,CAAC,IAAI,CAACtD,cAAc,IAAI,CAAC,IAAI,CAACE,YAAY,IAAI,CAAC,IAAI,CAACD,YAAY,EAAE;EACpE,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,CAACD,cAAc,CAAC7K,YAAY,CAAC,eAAe,EAAEmO,QAAQ,CAACO,QAAQ,EAAE,CAAC,CAAA;MACtE,IAAI,CAAC3D,YAAY,CAACuD,WAAW,GAAGH,QAAQ,GACpC,IAAI,CAAC3E,IAAI,CAAClD,CAAC,CAAC,iBAAiB,CAAC,GAC9B,IAAI,CAACkD,IAAI,CAAClD,CAAC,CAAC,iBAAiB,CAAC,CAAA;EAClC,IAAA,IAAI,CAACwE,YAAY,CAAC5J,SAAS,CAACyN,MAAM,CAAC,IAAI,CAACnE,oBAAoB,EAAE,CAAC2D,QAAQ,CAAC,CAAA;EAC1E,GAAA;;EAEA;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;IACES,aAAaA,CAAC7C,QAAQ,EAAE;MACtB,MAAMY,OAAO,GAAGZ,QAAQ,CAACG,aAAa,CAAC,CAAA,CAAA,EAAI,IAAI,CAACpC,kBAAkB,CAAA,CAAE,CAAC,CAAA;EAErE,IAAA,OAAO6C,OAAO,IAAPA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,OAAO,CAAE5M,YAAY,CAAC,eAAe,CAAC,CAAA;EAC/C,GAAA;EASAmO,EAAAA,UAAUA,CAACnC,QAAQ,EAAEM,UAAU,EAAE;EAC/B,IAAA,IAAI,CAAC,IAAI,CAAC9I,MAAM,CAACsL,gBAAgB,EAAE;EACjC,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMjC,EAAE,GAAG,IAAI,CAACgC,aAAa,CAAC7C,QAAQ,CAAC,CAAA;EAEvC,IAAA,IAAIa,EAAE,EAAE;QACN,IAAI;EACFvN,QAAAA,MAAM,CAACyP,cAAc,CAACC,OAAO,CAACnC,EAAE,EAAEP,UAAU,CAACqC,QAAQ,EAAE,CAAC,CAAA;EAC1D,OAAC,CAAC,OAAOM,SAAS,EAAE,EAAC;EACvB,KAAA;EACF,GAAA;IAQAzC,eAAeA,CAACR,QAAQ,EAAE;EACxB,IAAA,IAAI,CAAC,IAAI,CAACxI,MAAM,CAACsL,gBAAgB,EAAE;EACjC,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMjC,EAAE,GAAG,IAAI,CAACgC,aAAa,CAAC7C,QAAQ,CAAC,CAAA;EAEvC,IAAA,IAAIa,EAAE,EAAE;QACN,IAAI;UACF,MAAMqC,KAAK,GAAG5P,MAAM,CAACyP,cAAc,CAACI,OAAO,CAACtC,EAAE,CAAC,CAAA;UAE/C,IAAIqC,KAAK,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC7C,WAAW,CAAC6C,KAAK,KAAK,MAAM,EAAElD,QAAQ,CAAC,CAAA;EAC9C,SAAA;EACF,OAAC,CAAC,OAAOiD,SAAS,EAAE,EAAC;EACvB,KAAA;EACF,GAAA;EAaAxB,EAAAA,sBAAsBA,GAAG;EACvB,IAAA,MAAM2B,cAAc,GAAG5P,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;MACrD8D,cAAc,CAACjO,SAAS,CAACoK,GAAG,CAC1B,uBAAuB,EACvB,IAAI,CAACrB,0BACP,CAAC,CAAA;MACDkF,cAAc,CAACb,WAAW,GAAG,IAAI,CAAA;EACjC,IAAA,OAAOa,cAAc,CAAA;EACvB,GAAA;EAsCF,CAAA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EA/mBa5F,SAAS,CAyiBb3I,UAAU,GAAG,iBAAiB,CAAA;EAziB1B2I,SAAS,CAkjBb9F,QAAQ,GAAGiB,MAAM,CAAC0K,MAAM,CAAC;EAC9B5F,EAAAA,IAAI,EAAE;EACJ6F,IAAAA,eAAe,EAAE,mBAAmB;EACpCC,IAAAA,WAAW,EAAE,MAAM;EACnBC,IAAAA,oBAAoB,EAAE,mBAAmB;EACzCC,IAAAA,eAAe,EAAE,mBAAmB;EACpCC,IAAAA,WAAW,EAAE,MAAM;EACnBC,IAAAA,oBAAoB,EAAE,mBAAA;KACvB;EACDb,EAAAA,gBAAgB,EAAE,IAAA;EACpB,CAAC,CAAC,CAAA;EA5jBStF,SAAS,CAokBbhF,MAAM,GAAGG,MAAM,CAAC0K,MAAM,CAAC;EAC5BxK,EAAAA,UAAU,EAAE;EACV4E,IAAAA,IAAI,EAAE;EAAErF,MAAAA,IAAI,EAAE,QAAA;OAAU;EACxB0K,IAAAA,gBAAgB,EAAE;EAAE1K,MAAAA,IAAI,EAAE,SAAA;EAAU,KAAA;EACtC,GAAA;EACF,CAAC,CAAC;;EC1lBJ,MAAMwL,2BAA2B,GAAG,CAAC,CAAA;;EAErC;EACA;EACA;EACA;EACA;EACA;EACO,MAAMC,MAAM,SAASvM,qBAAqB,CAAC;EAOhD;EACF;EACA;EACA;EACExB,EAAAA,WAAWA,CAAClB,KAAK,EAAE4C,MAAM,GAAG,EAAE,EAAE;EAC9B,IAAA,KAAK,CAAC5C,KAAK,EAAE4C,MAAM,CAAC,CAAA;MAAA,IAPtBsM,CAAAA,uBAAuB,GAAG,IAAI,CAAA;EAS5B,IAAA,IAAI,CAAClP,KAAK,CAACT,gBAAgB,CAAC,SAAS,EAAG0L,KAAK,IAAK,IAAI,CAACkE,aAAa,CAAClE,KAAK,CAAC,CAAC,CAAA;EAC5E,IAAA,IAAI,CAACjL,KAAK,CAACT,gBAAgB,CAAC,OAAO,EAAG0L,KAAK,IAAK,IAAI,CAACmE,QAAQ,CAACnE,KAAK,CAAC,CAAC,CAAA;EACvE,GAAA;IAcAkE,aAAaA,CAAClE,KAAK,EAAE;EACnB,IAAA,MAAMoE,OAAO,GAAGpE,KAAK,CAACkC,MAAM,CAAA;EAG5B,IAAA,IAAIlC,KAAK,CAAC3G,GAAG,KAAK,GAAG,EAAE;EACrB,MAAA,OAAA;EACF,KAAA;EAGA,IAAA,IACE+K,OAAO,YAAYnP,WAAW,IAC9BmP,OAAO,CAACjQ,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ,EACzC;QACA6L,KAAK,CAACqE,cAAc,EAAE,CAAA;QACtBD,OAAO,CAACE,KAAK,EAAE,CAAA;EACjB,KAAA;EACF,GAAA;IAaAH,QAAQA,CAACnE,KAAK,EAAE;EAEd,IAAA,IAAI,CAAC,IAAI,CAACrI,MAAM,CAAC4M,kBAAkB,EAAE;EACnC,MAAA,OAAA;EACF,KAAA;MAGA,IAAI,IAAI,CAACN,uBAAuB,EAAE;QAChCjE,KAAK,CAACqE,cAAc,EAAE,CAAA;EACtB,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;EAEA,IAAA,IAAI,CAACJ,uBAAuB,GAAGxQ,MAAM,CAAC+Q,UAAU,CAAC,MAAM;QACrD,IAAI,CAACP,uBAAuB,GAAG,IAAI,CAAA;EACrC,KAAC,EAAEF,2BAA2B,GAAG,IAAI,CAAC,CAAA;EACxC,GAAA;EA6BF,CAAA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EAnHaC,MAAM,CA+EVhP,UAAU,GAAG,cAAc,CAAA;EA/EvBgP,MAAM,CAwFVnM,QAAQ,GAAGiB,MAAM,CAAC0K,MAAM,CAAC;EAC9Be,EAAAA,kBAAkB,EAAE,KAAA;EACtB,CAAC,CAAC,CAAA;EA1FSP,MAAM,CAkGVrL,MAAM,GAAGG,MAAM,CAAC0K,MAAM,CAAC;EAC5BxK,EAAAA,UAAU,EAAE;EACVuL,IAAAA,kBAAkB,EAAE;EAAEhM,MAAAA,IAAI,EAAE,SAAA;EAAU,KAAA;EACxC,GAAA;EACF,CAAC,CAAC;;ECxGG,SAASkM,qBAAqBA,CAAC1Q,QAAQ,EAAE2Q,aAAa,EAAE;IAC7D,MAAMC,4BAA4B,GAAG5Q,QAAQ,CAACqO,OAAO,CAAC,CAAA,CAAA,EAAIsC,aAAa,CAAA,CAAA,CAAG,CAAC,CAAA;IAC3E,OAAOC,4BAA4B,GAC/BA,4BAA4B,CAACxQ,YAAY,CAACuQ,aAAa,CAAC,GACxD,IAAI,CAAA;EACV;;ECHA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACO,MAAME,cAAc,SAASnN,qBAAqB,CAAC;IA0CxD,CAACH,cAAc,CAAEQ,CAAAA,aAAa,EAAE;MAC9B,IAAI+M,eAAe,GAAG,EAAE,CAAA;EACxB,IAAA,IAAI,UAAU,IAAI/M,aAAa,IAAI,WAAW,IAAIA,aAAa,EAAE;EAC/D+M,MAAAA,eAAe,GAAG;EAChBC,QAAAA,SAAS,EAAE5R,SAAS;EACpB6R,QAAAA,QAAQ,EAAE7R,SAAAA;SACX,CAAA;EACH,KAAA;EAEA,IAAA,OAAO2R,eAAe,CAAA;EACxB,GAAA;;EAEA;EACF;EACA;EACA;EACE5O,EAAAA,WAAWA,CAAClB,KAAK,EAAE4C,MAAM,GAAG,EAAE,EAAE;MAAA,IAAAqN,IAAA,EAAAC,qBAAA,CAAA;EAC9B,IAAA,KAAK,CAAClQ,KAAK,EAAE4C,MAAM,CAAC,CAAA;EAAA,IAAA,IAAA,CAzDtBuN,SAAS,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAGTC,oBAAoB,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAGpBC,yBAAyB,GAAA,KAAA,CAAA,CAAA;MAAA,IAMzBC,CAAAA,kBAAkB,GAAG,IAAI,CAAA;MAAA,IAGzBC,CAAAA,cAAc,GAAG,EAAE,CAAA;MAAA,IAMnBC,CAAAA,YAAY,GAAG,IAAI,CAAA;EAAA,IAAA,IAAA,CAGnB3H,IAAI,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAGJ4H,SAAS,GAAA,KAAA,CAAA,CAAA;MAgCP,MAAMN,SAAS,GAAG,IAAI,CAACnQ,KAAK,CAACuL,aAAa,CAAC,2BAA2B,CAAC,CAAA;MACvE,IACE,EACE4E,SAAS,YAAYO,mBAAmB,IACxCP,SAAS,YAAYQ,gBAAgB,CACtC,EACD;QACA,MAAM,IAAIlP,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEkO,cAAc;EACzBhO,QAAAA,OAAO,EAAEsO,SAAS;EAClBrO,QAAAA,YAAY,EAAE,yCAAyC;EACvDF,QAAAA,UAAU,EAAE,0CAAA;EACd,OAAC,CAAC,CAAA;EACJ,KAAA;MAGA,MAAMgD,MAAM,GAAGH,cAAc,CAACoL,cAAc,CAACjM,MAAM,EAAE,IAAI,CAAChB,MAAM,CAAC,CAAA;EACjE,IAAA,IAAIgC,MAAM,CAAC,CAAC,CAAC,EAAE;EACb,MAAA,MAAM,IAAIpD,WAAW,CAACX,kBAAkB,CAACgP,cAAc,EAAEjL,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;EACtE,KAAA;MAEA,IAAI,CAACiE,IAAI,GAAG,IAAIvD,IAAI,CAAC,IAAI,CAAC1C,MAAM,CAACiG,IAAI,EAAE;EAErCpD,MAAAA,MAAM,EAAEiK,qBAAqB,CAAC,IAAI,CAAC1P,KAAK,EAAE,MAAM,CAAA;EAClD,KAAC,CAAC,CAAA;MAGF,IAAI,CAACyQ,SAAS,GAAAR,CAAAA,IAAA,IAAAC,qBAAA,GAAG,IAAI,CAACtN,MAAM,CAACoN,QAAQ,KAAAE,IAAAA,GAAAA,qBAAA,GAAI,IAAI,CAACtN,MAAM,CAACmN,SAAS,KAAA,IAAA,GAAAE,IAAA,GAAIW,QAAQ,CAAA;MAE1E,IAAI,CAACT,SAAS,GAAGA,SAAS,CAAA;MAE1B,MAAMU,qBAAqB,GAAG,CAAG,EAAA,IAAI,CAACV,SAAS,CAAClE,EAAE,CAAO,KAAA,CAAA,CAAA;EACzD,IAAA,MAAM6E,oBAAoB,GAAGlS,QAAQ,CAACmS,cAAc,CAACF,qBAAqB,CAAC,CAAA;MAC3E,IAAI,CAACC,oBAAoB,EAAE;QACzB,MAAM,IAAIrP,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEkO,cAAc;EACzBhO,QAAAA,OAAO,EAAEiP,oBAAoB;UAC7BlP,UAAU,EAAE,wBAAwBiP,qBAAqB,CAAA,IAAA,CAAA;EAC3D,OAAC,CAAC,CAAA;EACJ,KAAA;MAKA,IAAI,CAAA,EAAGC,oBAAoB,CAACnD,WAAW,CAAA,CAAE,CAAC1H,KAAK,CAAC,OAAO,CAAC,EAAE;QACxD6K,oBAAoB,CAACnD,WAAW,GAAG,IAAI,CAAC9E,IAAI,CAAClD,CAAC,CAAC,qBAAqB,EAAE;UACpEG,KAAK,EAAE,IAAI,CAAC2K,SAAAA;EACd,OAAC,CAAC,CAAA;EACJ,KAAA;MAIA,IAAI,CAACN,SAAS,CAACa,qBAAqB,CAAC,UAAU,EAAEF,oBAAoB,CAAC,CAAA;EAItE,IAAA,MAAMT,yBAAyB,GAAGzR,QAAQ,CAAC8L,aAAa,CAAC,KAAK,CAAC,CAAA;MAC/D2F,yBAAyB,CAACY,SAAS,GACjC,wDAAwD,CAAA;EAC1DZ,IAAAA,yBAAyB,CAAChR,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;MAC7D,IAAI,CAACgR,yBAAyB,GAAGA,yBAAyB,CAAA;EAC1DS,IAAAA,oBAAoB,CAACE,qBAAqB,CACxC,UAAU,EACVX,yBACF,CAAC,CAAA;EAKD,IAAA,MAAMD,oBAAoB,GAAGxR,QAAQ,CAAC8L,aAAa,CAAC,KAAK,CAAC,CAAA;EAC1D0F,IAAAA,oBAAoB,CAACa,SAAS,GAAGH,oBAAoB,CAACG,SAAS,CAAA;EAC/Db,IAAAA,oBAAoB,CAAC7P,SAAS,CAACoK,GAAG,CAAC,+BAA+B,CAAC,CAAA;EACnEyF,IAAAA,oBAAoB,CAAC/Q,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;MACxD,IAAI,CAAC+Q,oBAAoB,GAAGA,oBAAoB,CAAA;EAChDU,IAAAA,oBAAoB,CAACE,qBAAqB,CAAC,UAAU,EAAEZ,oBAAoB,CAAC,CAAA;EAG5EU,IAAAA,oBAAoB,CAACvQ,SAAS,CAACoK,GAAG,CAAC,uBAAuB,CAAC,CAAA;EAG3D,IAAA,IAAI,CAACwF,SAAS,CAACvQ,eAAe,CAAC,WAAW,CAAC,CAAA;MAE3C,IAAI,CAACsR,gBAAgB,EAAE,CAAA;MAKvBxS,MAAM,CAACa,gBAAgB,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC4R,kBAAkB,EAAE,CAAC,CAAA;MAKpE,IAAI,CAACA,kBAAkB,EAAE,CAAA;EAC3B,GAAA;EAUAD,EAAAA,gBAAgBA,GAAG;EACjB,IAAA,IAAI,CAACf,SAAS,CAAC5Q,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC6R,WAAW,EAAE,CAAC,CAAA;EAGlE,IAAA,IAAI,CAACjB,SAAS,CAAC5Q,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC8R,WAAW,EAAE,CAAC,CAAA;EAClE,IAAA,IAAI,CAAClB,SAAS,CAAC5Q,gBAAgB,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC+R,UAAU,EAAE,CAAC,CAAA;EAClE,GAAA;EAUAF,EAAAA,WAAWA,GAAG;MACZ,IAAI,CAACG,yBAAyB,EAAE,CAAA;EAChC,IAAA,IAAI,CAACjB,kBAAkB,GAAGkB,IAAI,CAACC,GAAG,EAAE,CAAA;EACtC,GAAA;EAiBAJ,EAAAA,WAAWA,GAAG;EACZ,IAAA,IAAI,CAACb,YAAY,GAAG9R,MAAM,CAACgT,WAAW,CAAC,MAAM;EAC3C,MAAA,IACE,CAAC,IAAI,CAACpB,kBAAkB,IACxBkB,IAAI,CAACC,GAAG,EAAE,GAAG,GAAG,IAAI,IAAI,CAACnB,kBAAkB,EAC3C;UACA,IAAI,CAACqB,oBAAoB,EAAE,CAAA;EAC7B,OAAA;OACD,EAAE,IAAI,CAAC,CAAA;EACV,GAAA;EASAL,EAAAA,UAAUA,GAAG;MAEX,IAAI,IAAI,CAACd,YAAY,EAAE;EACrB9R,MAAAA,MAAM,CAACkT,aAAa,CAAC,IAAI,CAACpB,YAAY,CAAC,CAAA;EACzC,KAAA;EACF,GAAA;EAOAmB,EAAAA,oBAAoBA,GAAG;MACrB,IAAI,IAAI,CAACxB,SAAS,CAAC1R,KAAK,KAAK,IAAI,CAAC8R,cAAc,EAAE;EAChD,MAAA,IAAI,CAACA,cAAc,GAAG,IAAI,CAACJ,SAAS,CAAC1R,KAAK,CAAA;QAC1C,IAAI,CAAC0S,kBAAkB,EAAE,CAAA;EAC3B,KAAA;EACF,GAAA;EAUAA,EAAAA,kBAAkBA,GAAG;MACnB,IAAI,CAACI,yBAAyB,EAAE,CAAA;MAChC,IAAI,CAACM,8BAA8B,EAAE,CAAA;EACvC,GAAA;EAOAN,EAAAA,yBAAyBA,GAAG;EAC1B,IAAA,MAAMO,eAAe,GAAG,IAAI,CAACrB,SAAS,GAAG,IAAI,CAAC3K,KAAK,CAAC,IAAI,CAACqK,SAAS,CAAC1R,KAAK,CAAC,CAAA;EACzE,IAAA,MAAMsT,OAAO,GAAGD,eAAe,GAAG,CAAC,CAAA;EAInC,IAAA,IAAI,CAAC1B,oBAAoB,CAAC7P,SAAS,CAACyN,MAAM,CACxC,0CAA0C,EAC1C,CAAC,IAAI,CAACgE,eAAe,EACvB,CAAC,CAAA;MAGD,IAAI,CAAC7B,SAAS,CAAC5P,SAAS,CAACyN,MAAM,CAAC,uBAAuB,EAAE+D,OAAO,CAAC,CAAA;MACjE,IAAI,CAAC3B,oBAAoB,CAAC7P,SAAS,CAACyN,MAAM,CAAC,qBAAqB,EAAE+D,OAAO,CAAC,CAAA;MAC1E,IAAI,CAAC3B,oBAAoB,CAAC7P,SAAS,CAACyN,MAAM,CAAC,YAAY,EAAE,CAAC+D,OAAO,CAAC,CAAA;MAGlE,IAAI,CAAC3B,oBAAoB,CAACzC,WAAW,GAAG,IAAI,CAACsE,eAAe,EAAE,CAAA;EAChE,GAAA;EAOAJ,EAAAA,8BAA8BA,GAAG;EAG/B,IAAA,IAAI,IAAI,CAACG,eAAe,EAAE,EAAE;EAC1B,MAAA,IAAI,CAAC3B,yBAAyB,CAACzQ,eAAe,CAAC,aAAa,CAAC,CAAA;EAC/D,KAAC,MAAM;QACL,IAAI,CAACyQ,yBAAyB,CAAChR,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;EACpE,KAAA;MAGA,IAAI,CAACgR,yBAAyB,CAAC1C,WAAW,GAAG,IAAI,CAACsE,eAAe,EAAE,CAAA;EACrE,GAAA;IAUAnM,KAAKA,CAACoM,IAAI,EAAE;EACV,IAAA,IAAI,IAAI,CAACtP,MAAM,CAACoN,QAAQ,EAAE;EAAA,MAAA,IAAAmC,WAAA,CAAA;EACxB,MAAA,MAAMC,MAAM,GAAA,CAAAD,WAAA,GAAGD,IAAI,CAACjM,KAAK,CAAC,MAAM,CAAC,KAAAkM,IAAAA,GAAAA,WAAA,GAAI,EAAE,CAAA;QACvC,OAAOC,MAAM,CAAC3O,MAAM,CAAA;EACtB,KAAA;MAEA,OAAOyO,IAAI,CAACzO,MAAM,CAAA;EACpB,GAAA;EAQAwO,EAAAA,eAAeA,GAAG;EAChB,IAAA,MAAMH,eAAe,GAAG,IAAI,CAACrB,SAAS,GAAG,IAAI,CAAC3K,KAAK,CAAC,IAAI,CAACqK,SAAS,CAAC1R,KAAK,CAAC,CAAA;MACzE,MAAM4T,SAAS,GAAG,IAAI,CAACzP,MAAM,CAACoN,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAA;EAC/D,IAAA,OAAO,IAAI,CAACsC,kBAAkB,CAACR,eAAe,EAAEO,SAAS,CAAC,CAAA;EAC5D,GAAA;EAWAC,EAAAA,kBAAkBA,CAACR,eAAe,EAAEO,SAAS,EAAE;MAC7C,IAAIP,eAAe,KAAK,CAAC,EAAE;QACzB,OAAO,IAAI,CAACjJ,IAAI,CAAClD,CAAC,CAAC,CAAA,EAAG0M,SAAS,CAAA,OAAA,CAAS,CAAC,CAAA;EAC3C,KAAA;MAEA,MAAME,oBAAoB,GACxBT,eAAe,GAAG,CAAC,GAAG,WAAW,GAAG,YAAY,CAAA;MAElD,OAAO,IAAI,CAACjJ,IAAI,CAAClD,CAAC,CAAC,CAAA,EAAG0M,SAAS,CAAA,EAAGE,oBAAoB,CAAA,CAAE,EAAE;EACxDzM,MAAAA,KAAK,EAAEwB,IAAI,CAACC,GAAG,CAACuK,eAAe,CAAA;EACjC,KAAC,CAAC,CAAA;EACJ,GAAA;EAaAE,EAAAA,eAAeA,GAAG;EAEhB,IAAA,IAAI,CAAC,IAAI,CAACpP,MAAM,CAAC4P,SAAS,EAAE;EAC1B,MAAA,OAAO,IAAI,CAAA;EACb,KAAA;MAGA,MAAMC,aAAa,GAAG,IAAI,CAAC3M,KAAK,CAAC,IAAI,CAACqK,SAAS,CAAC1R,KAAK,CAAC,CAAA;EACtD,IAAA,MAAMgS,SAAS,GAAG,IAAI,CAACA,SAAS,CAAA;MAEhC,MAAMiC,cAAc,GAAIjC,SAAS,GAAG,IAAI,CAAC7N,MAAM,CAAC4P,SAAS,GAAI,GAAG,CAAA;MAEhE,OAAOE,cAAc,IAAID,aAAa,CAAA;EACxC,GAAA;EAmEF,CAAA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EAtfa5C,cAAc,CAqXlB5P,UAAU,GAAG,uBAAuB,CAAA;EArXhC4P,cAAc,CA8XlB/M,QAAQ,GAAGiB,MAAM,CAAC0K,MAAM,CAAC;EAC9B+D,EAAAA,SAAS,EAAE,CAAC;EACZ3J,EAAAA,IAAI,EAAE;EAEJ8J,IAAAA,oBAAoB,EAAE;EACpBC,MAAAA,GAAG,EAAE,uCAAuC;EAC5CC,MAAAA,KAAK,EAAE,wCAAA;OACR;EACDC,IAAAA,iBAAiB,EAAE,iCAAiC;EACpDC,IAAAA,mBAAmB,EAAE;EACnBH,MAAAA,GAAG,EAAE,sCAAsC;EAC3CC,MAAAA,KAAK,EAAE,uCAAA;OACR;EAEDG,IAAAA,eAAe,EAAE;EACfJ,MAAAA,GAAG,EAAE,kCAAkC;EACvCC,MAAAA,KAAK,EAAE,mCAAA;OACR;EACDI,IAAAA,YAAY,EAAE,4BAA4B;EAC1CC,IAAAA,cAAc,EAAE;EACdN,MAAAA,GAAG,EAAE,iCAAiC;EACtCC,MAAAA,KAAK,EAAE,kCAAA;OACR;EACDM,IAAAA,mBAAmB,EAAE;EACnBN,MAAAA,KAAK,EAAE,EAAA;EACT,KAAA;EACF,GAAA;EACF,CAAC,CAAC,CAAA;EAzZShD,cAAc,CAialBjM,MAAM,GAAGG,MAAM,CAAC0K,MAAM,CAAC;EAC5BxK,EAAAA,UAAU,EAAE;EACV4E,IAAAA,IAAI,EAAE;EAAErF,MAAAA,IAAI,EAAE,QAAA;OAAU;EACxBwM,IAAAA,QAAQ,EAAE;EAAExM,MAAAA,IAAI,EAAE,QAAA;OAAU;EAC5BuM,IAAAA,SAAS,EAAE;EAAEvM,MAAAA,IAAI,EAAE,QAAA;OAAU;EAC7BgP,IAAAA,SAAS,EAAE;EAAEhP,MAAAA,IAAI,EAAE,QAAA;EAAS,KAAA;KAC7B;EACD4P,EAAAA,KAAK,EAAE,CACL;MACEvO,QAAQ,EAAE,CAAC,UAAU,CAAC;EACtBC,IAAAA,YAAY,EAAE,mDAAA;EAChB,GAAC,EACD;MACED,QAAQ,EAAE,CAAC,WAAW,CAAC;EACvBC,IAAAA,YAAY,EAAE,mDAAA;KACf,CAAA;EAEL,CAAC,CAAC;;ECtcJ;EACA;EACA;EACA;EACA;EACO,MAAMuO,UAAU,SAASpR,sBAAsB,CAAC;EAIrD;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;IACEf,WAAWA,CAAClB,KAAK,EAAE;MACjB,KAAK,CAACA,KAAK,CAAC,CAAA;EAAA,IAAA,IAAA,CAjBdsT,OAAO,GAAA,KAAA,CAAA,CAAA;MAmBL,MAAMA,OAAO,GAAG,IAAI,CAACtT,KAAK,CAACqK,gBAAgB,CAAC,wBAAwB,CAAC,CAAA;EACrE,IAAA,IAAI,CAACiJ,OAAO,CAAC7P,MAAM,EAAE;QACnB,MAAM,IAAIhC,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAE0R,UAAU;EACrBzR,QAAAA,UAAU,EAAE,yCAAA;EACd,OAAC,CAAC,CAAA;EACJ,KAAA;MAEA,IAAI,CAAC0R,OAAO,GAAGA,OAAO,CAAA;EAEtB,IAAA,IAAI,CAACA,OAAO,CAACnI,OAAO,CAAEoI,MAAM,IAAK;EAC/B,MAAA,MAAMC,QAAQ,GAAGD,MAAM,CAACnU,YAAY,CAAC,oBAAoB,CAAC,CAAA;QAG1D,IAAI,CAACoU,QAAQ,EAAE;EACb,QAAA,OAAA;EACF,OAAA;EAGA,MAAA,IAAI,CAAC5U,QAAQ,CAACmS,cAAc,CAACyC,QAAQ,CAAC,EAAE;UACtC,MAAM,IAAI/R,YAAY,CAAC;EACrBE,UAAAA,SAAS,EAAE0R,UAAU;YACrBzR,UAAU,EAAE,6BAA6B4R,QAAQ,CAAA,IAAA,CAAA;EACnD,SAAC,CAAC,CAAA;EACJ,OAAA;EAIAD,MAAAA,MAAM,CAAClU,YAAY,CAAC,eAAe,EAAEmU,QAAQ,CAAC,CAAA;EAC9CD,MAAAA,MAAM,CAAC3T,eAAe,CAAC,oBAAoB,CAAC,CAAA;EAC9C,KAAC,CAAC,CAAA;MAKFlB,MAAM,CAACa,gBAAgB,CAAC,UAAU,EAAE,MAAM,IAAI,CAACkU,yBAAyB,EAAE,CAAC,CAAA;MAK3E,IAAI,CAACA,yBAAyB,EAAE,CAAA;EAGhC,IAAA,IAAI,CAACzT,KAAK,CAACT,gBAAgB,CAAC,OAAO,EAAG0L,KAAK,IAAK,IAAI,CAACyI,WAAW,CAACzI,KAAK,CAAC,CAAC,CAAA;EAC1E,GAAA;EAOAwI,EAAAA,yBAAyBA,GAAG;EAC1B,IAAA,IAAI,CAACH,OAAO,CAACnI,OAAO,CAAEoI,MAAM,IAC1B,IAAI,CAACI,mCAAmC,CAACJ,MAAM,CACjD,CAAC,CAAA;EACH,GAAA;IAWAI,mCAAmCA,CAACJ,MAAM,EAAE;EAC1C,IAAA,MAAMC,QAAQ,GAAGD,MAAM,CAACnU,YAAY,CAAC,eAAe,CAAC,CAAA;MACrD,IAAI,CAACoU,QAAQ,EAAE;EACb,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMnE,OAAO,GAAGzQ,QAAQ,CAACmS,cAAc,CAACyC,QAAQ,CAAC,CAAA;MACjD,IAAInE,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAE9O,SAAS,CAACC,QAAQ,CAAC,+BAA+B,CAAC,EAAE;EAChE,MAAA,MAAMoT,cAAc,GAAGL,MAAM,CAACM,OAAO,CAAA;QAErCN,MAAM,CAAClU,YAAY,CAAC,eAAe,EAAEuU,cAAc,CAAC7F,QAAQ,EAAE,CAAC,CAAA;QAC/DsB,OAAO,CAAC9O,SAAS,CAACyN,MAAM,CACtB,uCAAuC,EACvC,CAAC4F,cACH,CAAC,CAAA;EACH,KAAA;EACF,GAAA;IAWAE,sBAAsBA,CAACP,MAAM,EAAE;MAC7B,MAAMQ,qBAAqB,GAAGnV,QAAQ,CAACyL,gBAAgB,CACrD,CAAA,6BAAA,EAAgCkJ,MAAM,CAAChV,IAAI,CAAA,EAAA,CAC7C,CAAC,CAAA;EAEDwV,IAAAA,qBAAqB,CAAC5I,OAAO,CAAE6I,kBAAkB,IAAK;QACpD,MAAMC,gBAAgB,GAAGV,MAAM,CAACW,IAAI,KAAKF,kBAAkB,CAACE,IAAI,CAAA;EAChE,MAAA,IAAID,gBAAgB,IAAID,kBAAkB,KAAKT,MAAM,EAAE;UACrDS,kBAAkB,CAACH,OAAO,GAAG,KAAK,CAAA;EAClC,QAAA,IAAI,CAACF,mCAAmC,CAACK,kBAAkB,CAAC,CAAA;EAC9D,OAAA;EACF,KAAC,CAAC,CAAA;EACJ,GAAA;IAYAG,sBAAsBA,CAACZ,MAAM,EAAE;MAC7B,MAAMa,0CAA0C,GAC9CxV,QAAQ,CAACyL,gBAAgB,CACvB,CAAA,yDAAA,EAA4DkJ,MAAM,CAAChV,IAAI,CAAA,EAAA,CACzE,CAAC,CAAA;EAEH6V,IAAAA,0CAA0C,CAACjJ,OAAO,CAAEkJ,eAAe,IAAK;QACtE,MAAMJ,gBAAgB,GAAGV,MAAM,CAACW,IAAI,KAAKG,eAAe,CAACH,IAAI,CAAA;EAC7D,MAAA,IAAID,gBAAgB,EAAE;UACpBI,eAAe,CAACR,OAAO,GAAG,KAAK,CAAA;EAC/B,QAAA,IAAI,CAACF,mCAAmC,CAACU,eAAe,CAAC,CAAA;EAC3D,OAAA;EACF,KAAC,CAAC,CAAA;EACJ,GAAA;IAYAX,WAAWA,CAACzI,KAAK,EAAE;EACjB,IAAA,MAAMqJ,aAAa,GAAGrJ,KAAK,CAACkC,MAAM,CAAA;MAGlC,IACE,EAAEmH,aAAa,YAAY3D,gBAAgB,CAAC,IAC5C2D,aAAa,CAAC9Q,IAAI,KAAK,UAAU,EACjC;EACA,MAAA,OAAA;EACF,KAAA;EAGA,IAAA,MAAM+Q,eAAe,GAAGD,aAAa,CAAClV,YAAY,CAAC,eAAe,CAAC,CAAA;EACnE,IAAA,IAAImV,eAAe,EAAE;EACnB,MAAA,IAAI,CAACZ,mCAAmC,CAACW,aAAa,CAAC,CAAA;EACzD,KAAA;EAGA,IAAA,IAAI,CAACA,aAAa,CAACT,OAAO,EAAE;EAC1B,MAAA,OAAA;EACF,KAAA;MAGA,MAAMW,qBAAqB,GACzBF,aAAa,CAAClV,YAAY,CAAC,gBAAgB,CAAC,KAAK,WAAW,CAAA;EAC9D,IAAA,IAAIoV,qBAAqB,EAAE;EACzB,MAAA,IAAI,CAACV,sBAAsB,CAACQ,aAAa,CAAC,CAAA;EAC5C,KAAC,MAAM;EACL,MAAA,IAAI,CAACH,sBAAsB,CAACG,aAAa,CAAC,CAAA;EAC5C,KAAA;EACF,GAAA;EAMF,CAAA;EAvMajB,UAAU,CAsMdpT,UAAU,GAAG,kBAAkB;;EC3MxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACO,MAAMwU,YAAY,SAAS/R,qBAAqB,CAAC;EACtD;EACF;EACA;EACA;EACExB,EAAAA,WAAWA,CAAClB,KAAK,EAAE4C,MAAM,GAAG,EAAE,EAAE;EAC9B,IAAA,KAAK,CAAC5C,KAAK,EAAE4C,MAAM,CAAC,CAAA;EAKpB,IAAA,IAAI,CAAC,IAAI,CAACA,MAAM,CAAC8R,gBAAgB,EAAE;EACjC3V,MAAAA,QAAQ,CAAC,IAAI,CAACiB,KAAK,CAAC,CAAA;EACtB,KAAA;EAEA,IAAA,IAAI,CAACA,KAAK,CAACT,gBAAgB,CAAC,OAAO,EAAG0L,KAAK,IAAK,IAAI,CAACyI,WAAW,CAACzI,KAAK,CAAC,CAAC,CAAA;EAC1E,GAAA;IAQAyI,WAAWA,CAACzI,KAAK,EAAE;EACjB,IAAA,MAAMoE,OAAO,GAAGpE,KAAK,CAACkC,MAAM,CAAA;MAC5B,IAAIkC,OAAO,IAAI,IAAI,CAACsF,WAAW,CAACtF,OAAO,CAAC,EAAE;QACxCpE,KAAK,CAACqE,cAAc,EAAE,CAAA;EACxB,KAAA;EACF,GAAA;IAqBAqF,WAAWA,CAACtF,OAAO,EAAE;EAEnB,IAAA,IAAI,EAAEA,OAAO,YAAYuF,iBAAiB,CAAC,EAAE;EAC3C,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;EAEA,IAAA,MAAMC,OAAO,GAAG7W,kBAAkB,CAACqR,OAAO,CAACyF,IAAI,CAAC,CAAA;MAChD,IAAI,CAACD,OAAO,EAAE;EACZ,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;EAEA,IAAA,MAAMtB,MAAM,GAAG3U,QAAQ,CAACmS,cAAc,CAAC8D,OAAO,CAAC,CAAA;MAC/C,IAAI,CAACtB,MAAM,EAAE;EACX,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;EAEA,IAAA,MAAMwB,cAAc,GAAG,IAAI,CAACC,0BAA0B,CAACzB,MAAM,CAAC,CAAA;MAC9D,IAAI,CAACwB,cAAc,EAAE;EACnB,MAAA,OAAO,KAAK,CAAA;EACd,KAAA;MAKAA,cAAc,CAACE,cAAc,EAAE,CAAA;MAC/B1B,MAAM,CAACzT,KAAK,CAAC;EAAEoV,MAAAA,aAAa,EAAE,IAAA;EAAK,KAAC,CAAC,CAAA;EAErC,IAAA,OAAO,IAAI,CAAA;EACb,GAAA;IAkBAF,0BAA0BA,CAACzB,MAAM,EAAE;EAAA,IAAA,IAAA4B,qBAAA,CAAA;EACjC,IAAA,MAAMC,SAAS,GAAG7B,MAAM,CAAClG,OAAO,CAAC,UAAU,CAAC,CAAA;EAE5C,IAAA,IAAI+H,SAAS,EAAE;EACb,MAAA,MAAMC,QAAQ,GAAGD,SAAS,CAACE,oBAAoB,CAAC,QAAQ,CAAC,CAAA;QAEzD,IAAID,QAAQ,CAAC5R,MAAM,EAAE;EACnB,QAAA,MAAM8R,gBAAgB,GAAGF,QAAQ,CAAC,CAAC,CAAC,CAAA;EAIpC,QAAA,IACE9B,MAAM,YAAY5C,gBAAgB,KACjC4C,MAAM,CAAC/P,IAAI,KAAK,UAAU,IAAI+P,MAAM,CAAC/P,IAAI,KAAK,OAAO,CAAC,EACvD;EACA,UAAA,OAAO+R,gBAAgB,CAAA;EACzB,SAAA;UAQA,MAAMC,SAAS,GAAGD,gBAAgB,CAACE,qBAAqB,EAAE,CAACC,GAAG,CAAA;EAC9D,QAAA,MAAMC,SAAS,GAAGpC,MAAM,CAACkC,qBAAqB,EAAE,CAAA;EAIhD,QAAA,IAAIE,SAAS,CAACC,MAAM,IAAIlX,MAAM,CAACmX,WAAW,EAAE;YAC1C,MAAMC,WAAW,GAAGH,SAAS,CAACD,GAAG,GAAGC,SAAS,CAACC,MAAM,CAAA;YAEpD,IAAIE,WAAW,GAAGN,SAAS,GAAG9W,MAAM,CAACmX,WAAW,GAAG,CAAC,EAAE;EACpD,YAAA,OAAON,gBAAgB,CAAA;EACzB,WAAA;EACF,SAAA;EACF,OAAA;EACF,KAAA;MAEA,OAAAJ,CAAAA,qBAAA,GACEvW,QAAQ,CAAC2M,aAAa,CAAC,CAAA,WAAA,EAAcgI,MAAM,CAACnU,YAAY,CAAC,IAAI,CAAC,CAAA,EAAA,CAAI,CAAC,KAAA,IAAA,GAAA+V,qBAAA,GACnE5B,MAAM,CAAClG,OAAO,CAAC,OAAO,CAAC,CAAA;EAE3B,GAAA;EA6BF,CAAA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EApLaoH,YAAY,CAgJhBxU,UAAU,GAAG,qBAAqB,CAAA;EAhJ9BwU,YAAY,CAyJhB3R,QAAQ,GAAGiB,MAAM,CAAC0K,MAAM,CAAC;EAC9BiG,EAAAA,gBAAgB,EAAE,KAAA;EACpB,CAAC,CAAC,CAAA;EA3JSD,YAAY,CAmKhB7Q,MAAM,GAAGG,MAAM,CAAC0K,MAAM,CAAC;EAC5BxK,EAAAA,UAAU,EAAE;EACVyQ,IAAAA,gBAAgB,EAAE;EAAElR,MAAAA,IAAI,EAAE,SAAA;EAAU,KAAA;EACtC,GAAA;EACF,CAAC,CAAC;;EC/KJ;EACA;EACA;EACA;EACA;EACA;EACO,MAAMuS,YAAY,SAASrT,qBAAqB,CAAC;EAwDtD;EACF;EACA;EACA;EACExB,EAAAA,WAAWA,CAAClB,KAAK,EAAE4C,MAAM,GAAG,EAAE,EAAE;EAC9B,IAAA,KAAK,CAAC5C,KAAK,EAAE4C,MAAM,CAAC,CAAA;EAAA,IAAA,IAAA,CA3DtBiG,IAAI,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAGJmD,OAAO,GAAA,KAAA,CAAA,CAAA;MAAA,IAMPgK,CAAAA,eAAe,GAAG,IAAI,CAAA;MAAA,IAMtBC,CAAAA,WAAW,GAAG,IAAI,CAAA;MAAA,IAMlBC,CAAAA,mBAAmB,GAAG,IAAI,CAAA;MAAA,IAM1BC,CAAAA,QAAQ,GAAG,IAAI,CAAA;MAAA,IAGfC,CAAAA,eAAe,GAAG,CAAC,CAAA;MAAA,IAGnBC,CAAAA,kBAAkB,GAAG,KAAK,CAAA;MAAA,IAG1BC,CAAAA,WAAW,GAAG,IAAI,CAAA;MAAA,IAUlBC,CAAAA,iBAAiB,GAAG,IAAI,CAAA;MAAA,IAMxBC,CAAAA,gBAAgB,GAAG,IAAI,CAAA;MASrB,MAAMxK,OAAO,GAAG,IAAI,CAAChM,KAAK,CAACuL,aAAa,CAAC,+BAA+B,CAAC,CAAA;EACzE,IAAA,IAAI,EAAES,OAAO,YAAY4I,iBAAiB,CAAC,EAAE;QAC3C,MAAM,IAAInT,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEoU,YAAY;EACvBlU,QAAAA,OAAO,EAAEmK,OAAO;EAChBlK,QAAAA,YAAY,EAAE,mBAAmB;EACjCF,QAAAA,UAAU,EAAE,0CAAA;EACd,OAAC,CAAC,CAAA;EACJ,KAAA;MAEA,IAAI,CAACiH,IAAI,GAAG,IAAIvD,IAAI,CAAC,IAAI,CAAC1C,MAAM,CAACiG,IAAI,CAAC,CAAA;MACtC,IAAI,CAACmD,OAAO,GAAGA,OAAO,CAAA;EAEtB,IAAA,MAAMgK,eAAe,GAAGpX,QAAQ,CAAC2M,aAAa,CAC5C,mCACF,CAAC,CAAA;MACD,IAAIyK,eAAe,YAAYpB,iBAAiB,EAAE;QAChD,IAAI,CAACoB,eAAe,GAAGA,eAAe,CAAA;EACxC,KAAA;MAEA,IAAI,CAACS,cAAc,EAAE,CAAA;MACrB,IAAI,CAACC,cAAc,EAAE,CAAA;MACrB,IAAI,CAACC,sBAAsB,EAAE,CAAA;MAG7B,IAAI,EAAE,mCAAmC,IAAI/X,QAAQ,CAAC0B,IAAI,CAAC2C,OAAO,CAAC,EAAE;EACnErE,MAAAA,QAAQ,CAACW,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACqX,cAAc,CAACC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAA;EACxEjY,MAAAA,QAAQ,CAAC0B,IAAI,CAAC2C,OAAO,CAAC6T,iCAAiC,GAAG,MAAM,CAAA;EAClE,KAAA;EAKApY,IAAAA,MAAM,CAACa,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAACwX,SAAS,CAACF,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;EAChE,GAAA;EAOAH,EAAAA,cAAcA,GAAG;MACf,IAAI,CAACT,WAAW,GAAGrX,QAAQ,CAAC8L,aAAa,CAAC,MAAM,CAAC,CAAA;MACjD,IAAI,CAACuL,WAAW,CAAC5W,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;EAC/C,IAAA,IAAI,CAAC4W,WAAW,CAAChF,SAAS,GAAG,uBAAuB,CAAA;MAEpD,IAAI,CAACjR,KAAK,CAAC4K,WAAW,CAAC,IAAI,CAACqL,WAAW,CAAC,CAAA;EAC1C,GAAA;EAOAU,EAAAA,sBAAsBA,GAAG;EAEvB,IAAA,IAAI,CAAC3K,OAAO,CAACzM,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACmU,WAAW,CAACmD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;MAGnE,IAAI,IAAI,CAACb,eAAe,EAAE;EACxB,MAAA,IAAI,CAACA,eAAe,CAACzW,gBAAgB,CACnC,OAAO,EACP,IAAI,CAACmU,WAAW,CAACmD,IAAI,CAAC,IAAI,CAC5B,CAAC,CAAA;EACH,KAAA;EACF,GAAA;EAOAJ,EAAAA,cAAcA,GAAG;MAGf,IAAI,CAACP,mBAAmB,GAAGtX,QAAQ,CAAC8L,aAAa,CAAC,KAAK,CAAC,CAAA;EACxD,IAAA,IAAI,CAACwL,mBAAmB,CAACjF,SAAS,GAAG,iCAAiC,CAAA;MACtE,IAAI,CAACiF,mBAAmB,CAAC7W,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;MAG5D,KAAK,IAAIgM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;EAC1B,MAAA,MAAM2L,UAAU,GAAGpY,QAAQ,CAAC8L,aAAa,CAAC,KAAK,CAAC,CAAA;QAChDsM,UAAU,CAAC/F,SAAS,GAAG,uCAAuC,CAAA;EAC9D,MAAA,IAAI,CAACiF,mBAAmB,CAACtL,WAAW,CAACoM,UAAU,CAAC,CAAA;EAClD,KAAA;MAGA,IAAI,CAAChL,OAAO,CAACpB,WAAW,CAAC,IAAI,CAACsL,mBAAmB,CAAC,CAAA;EACpD,GAAA;EAQAe,EAAAA,eAAeA,GAAG;EAChB,IAAA,IAAI,CAAC,IAAI,CAACf,mBAAmB,EAAE;EAC7B,MAAA,OAAA;EACF,KAAA;EAGA,IAAA,IAAI,CAACA,mBAAmB,CAAC3V,SAAS,CAACyN,MAAM,CACvC,0CAA0C,EAC1C,IAAI,CAACoI,eAAe,GAAG,CACzB,CAAC,CAAA;MAGD,MAAMc,WAAW,GAAG,IAAI,CAAChB,mBAAmB,CAAC7L,gBAAgB,CAC3D,wCACF,CAAC,CAAA;EACD6M,IAAAA,WAAW,CAAC/L,OAAO,CAAC,CAAC6L,UAAU,EAAE3R,KAAK,KAAK;EACzC2R,MAAAA,UAAU,CAACzW,SAAS,CAACyN,MAAM,CACzB,2CAA2C,EAC3C3I,KAAK,GAAG,IAAI,CAAC+Q,eACf,CAAC,CAAA;EACH,KAAC,CAAC,CAAA;EACJ,GAAA;EAUAe,EAAAA,QAAQA,GAAG;EACT,IAAA,IAAI,CAAC,IAAI,CAAClB,WAAW,EAAE;EACrB,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,CAACA,WAAW,CAACtI,WAAW,GAAG,EAAE,CAAA;MAMjC/O,QAAQ,CAAC0B,IAAI,CAACC,SAAS,CAACoK,GAAG,CAAC,mCAAmC,CAAC,CAAA;MAChE,IAAI,CAACwL,QAAQ,GAAGvX,QAAQ,CAAC8L,aAAa,CAAC,KAAK,CAAC,CAAA;EAC7C,IAAA,IAAI,CAACyL,QAAQ,CAAClF,SAAS,GAAG,8BAA8B,CAAA;MACxD,IAAI,CAACkF,QAAQ,CAAC9W,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;MAK3CT,QAAQ,CAAC0B,IAAI,CAACsK,WAAW,CAAC,IAAI,CAACuL,QAAQ,CAAC,CAAA;EACxC,IAAA,IAAI,CAACA,QAAQ,CAACxI,WAAW,GAAG,IAAI,CAAC9E,IAAI,CAAClD,CAAC,CAAC,WAAW,CAAC,CAAA;MAEpDjH,MAAM,CAAC0Y,QAAQ,CAACtC,IAAI,GAAG,IAAI,CAAC9I,OAAO,CAAC8I,IAAI,CAAA;EAC1C,GAAA;IAaApB,WAAWA,CAACzI,KAAK,EAAE;MACjBA,KAAK,CAACqE,cAAc,EAAE,CAAA;MACtB,IAAI,CAAC6H,QAAQ,EAAE,CAAA;EACjB,GAAA;IASAP,cAAcA,CAAC3L,KAAK,EAAE;EACpB,IAAA,IAAI,CAAC,IAAI,CAACgL,WAAW,EAAE;EACrB,MAAA,OAAA;EACF,KAAA;MAUA,IAAIhL,KAAK,CAAC3G,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC+R,kBAAkB,EAAE;QACrD,IAAI,CAACD,eAAe,IAAI,CAAC,CAAA;QAGzB,IAAI,CAACa,eAAe,EAAE,CAAA;QAGtB,IAAI,IAAI,CAACT,gBAAgB,EAAE;EACzB9X,QAAAA,MAAM,CAAC2Y,YAAY,CAAC,IAAI,CAACb,gBAAgB,CAAC,CAAA;UAC1C,IAAI,CAACA,gBAAgB,GAAG,IAAI,CAAA;EAC9B,OAAA;EAEA,MAAA,IAAI,IAAI,CAACJ,eAAe,IAAI,CAAC,EAAE;UAC7B,IAAI,CAACA,eAAe,GAAG,CAAC,CAAA;UAExB,IAAI,IAAI,CAACG,iBAAiB,EAAE;EAC1B7X,UAAAA,MAAM,CAAC2Y,YAAY,CAAC,IAAI,CAACd,iBAAiB,CAAC,CAAA;YAC3C,IAAI,CAACA,iBAAiB,GAAG,IAAI,CAAA;EAC/B,SAAA;UAEA,IAAI,CAACY,QAAQ,EAAE,CAAA;EACjB,OAAC,MAAM;EACL,QAAA,IAAI,IAAI,CAACf,eAAe,KAAK,CAAC,EAAE;EAC9B,UAAA,IAAI,CAACH,WAAW,CAACtI,WAAW,GAAG,IAAI,CAAC9E,IAAI,CAAClD,CAAC,CAAC,mBAAmB,CAAC,CAAA;EACjE,SAAC,MAAM;EACL,UAAA,IAAI,CAACsQ,WAAW,CAACtI,WAAW,GAAG,IAAI,CAAC9E,IAAI,CAAClD,CAAC,CAAC,kBAAkB,CAAC,CAAA;EAChE,SAAA;EACF,OAAA;QAEA,IAAI,CAAC2R,gBAAgB,EAAE,CAAA;EACzB,KAAC,MAAM,IAAI,IAAI,CAACf,iBAAiB,EAAE;QAGjC,IAAI,CAACgB,kBAAkB,EAAE,CAAA;EAC3B,KAAA;EAGA,IAAA,IAAI,CAAClB,kBAAkB,GAAGpL,KAAK,CAACuM,QAAQ,CAAA;EAC1C,GAAA;EAYAF,EAAAA,gBAAgBA,GAAG;MAGjB,IAAI,IAAI,CAACf,iBAAiB,EAAE;EAC1B7X,MAAAA,MAAM,CAAC2Y,YAAY,CAAC,IAAI,CAACd,iBAAiB,CAAC,CAAA;EAC7C,KAAA;EAGA,IAAA,IAAI,CAACA,iBAAiB,GAAG7X,MAAM,CAAC+Q,UAAU,CACxC,IAAI,CAAC8H,kBAAkB,CAACV,IAAI,CAAC,IAAI,CAAC,EAClC,IAAI,CAACP,WACP,CAAC,CAAA;EACH,GAAA;EAOAiB,EAAAA,kBAAkBA,GAAG;EACnB,IAAA,IAAI,CAAC,IAAI,CAACtB,WAAW,EAAE;EACrB,MAAA,OAAA;EACF,KAAA;MAEA,IAAI,IAAI,CAACM,iBAAiB,EAAE;EAC1B7X,MAAAA,MAAM,CAAC2Y,YAAY,CAAC,IAAI,CAACd,iBAAiB,CAAC,CAAA;QAC3C,IAAI,CAACA,iBAAiB,GAAG,IAAI,CAAA;EAC/B,KAAA;EAEA,IAAA,MAAMN,WAAW,GAAG,IAAI,CAACA,WAAW,CAAA;MAEpC,IAAI,CAACG,eAAe,GAAG,CAAC,CAAA;MACxBH,WAAW,CAACtI,WAAW,GAAG,IAAI,CAAC9E,IAAI,CAAClD,CAAC,CAAC,UAAU,CAAC,CAAA;EAEjD,IAAA,IAAI,CAAC6Q,gBAAgB,GAAG9X,MAAM,CAAC+Q,UAAU,CAAC,MAAM;QAC9CwG,WAAW,CAACtI,WAAW,GAAG,EAAE,CAAA;EAC9B,KAAC,EAAE,IAAI,CAAC2I,WAAW,CAAC,CAAA;MAEpB,IAAI,CAACW,eAAe,EAAE,CAAA;EACxB,GAAA;EAgBAF,EAAAA,SAASA,GAAG;MAEVnY,QAAQ,CAAC0B,IAAI,CAACC,SAAS,CAACyM,MAAM,CAAC,mCAAmC,CAAC,CAAA;MAEnE,IAAI,IAAI,CAACmJ,QAAQ,EAAE;EACjB,MAAA,IAAI,CAACA,QAAQ,CAACnJ,MAAM,EAAE,CAAA;QACtB,IAAI,CAACmJ,QAAQ,GAAG,IAAI,CAAA;EACtB,KAAA;MAGA,IAAI,IAAI,CAACF,WAAW,EAAE;QACpB,IAAI,CAACA,WAAW,CAAC5W,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;EAC/C,MAAA,IAAI,CAAC4W,WAAW,CAACtI,WAAW,GAAG,EAAE,CAAA;EACnC,KAAA;MAGA,IAAI,CAACsJ,eAAe,EAAE,CAAA;MAGtB,IAAI,IAAI,CAACV,iBAAiB,EAAE;EAC1B7X,MAAAA,MAAM,CAAC2Y,YAAY,CAAC,IAAI,CAACd,iBAAiB,CAAC,CAAA;EAC7C,KAAA;MAEA,IAAI,IAAI,CAACC,gBAAgB,EAAE;EACzB9X,MAAAA,MAAM,CAAC2Y,YAAY,CAAC,IAAI,CAACb,gBAAgB,CAAC,CAAA;EAC5C,KAAA;EACF,GAAA;EAkCF,CAAA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EA9baT,YAAY,CAmYhB9V,UAAU,GAAG,sBAAsB,CAAA;EAnY/B8V,YAAY,CA4YhBjT,QAAQ,GAAGiB,MAAM,CAAC0K,MAAM,CAAC;EAC9B5F,EAAAA,IAAI,EAAE;EACJ4O,IAAAA,SAAS,EAAE,UAAU;EACrBC,IAAAA,QAAQ,EAAE,yBAAyB;EACnCC,IAAAA,iBAAiB,EAAE,oCAAoC;EACvDC,IAAAA,gBAAgB,EAAE,mCAAA;EACpB,GAAA;EACF,CAAC,CAAC,CAAA;EAnZS7B,YAAY,CA2ZhBnS,MAAM,GAAGG,MAAM,CAAC0K,MAAM,CAAC;EAC5BxK,EAAAA,UAAU,EAAE;EACV4E,IAAAA,IAAI,EAAE;EAAErF,MAAAA,IAAI,EAAE,QAAA;EAAS,KAAA;EACzB,GAAA;EACF,CAAC,CAAC;;ECraJ;EACA;EACA;EACA;EACA;EACO,MAAMqU,MAAM,SAAS5V,sBAAsB,CAAC;EA0BjD;EACF;EACA;EACA;EACA;EACA;IACEf,WAAWA,CAAClB,KAAK,EAAE;MACjB,KAAK,CAACA,KAAK,CAAC,CAAA;EAAA,IAAA,IAAA,CA/Bd8X,WAAW,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAGXC,KAAK,GAAA,KAAA,CAAA,CAAA;MAAA,IASLC,CAAAA,UAAU,GAAG,KAAK,CAAA;MAAA,IAUlBC,CAAAA,GAAG,GAAG,IAAI,CAAA;MAWR,MAAMH,WAAW,GAAG,IAAI,CAAC9X,KAAK,CAACuL,aAAa,CAAC,yBAAyB,CAAC,CAAA;MAKvE,IAAI,CAACuM,WAAW,EAAE;EAChB,MAAA,OAAO,IAAI,CAAA;EACb,KAAA;EAEA,IAAA,MAAMI,MAAM,GAAGJ,WAAW,CAAC1Y,YAAY,CAAC,eAAe,CAAC,CAAA;MACxD,IAAI,CAAC8Y,MAAM,EAAE;QACX,MAAM,IAAIzW,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEkW,MAAM;EACjBjW,QAAAA,UAAU,EACR,2FAAA;EACJ,OAAC,CAAC,CAAA;EACJ,KAAA;EAEA,IAAA,MAAMmW,KAAK,GAAGnZ,QAAQ,CAACmS,cAAc,CAACmH,MAAM,CAAC,CAAA;MAC7C,IAAI,CAACH,KAAK,EAAE;QACV,MAAM,IAAItW,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEkW,MAAM;EACjBhW,QAAAA,OAAO,EAAEkW,KAAK;UACdnW,UAAU,EAAE,yBAAyBsW,MAAM,CAAA,KAAA,CAAA;EAC7C,OAAC,CAAC,CAAA;EACJ,KAAA;MAEA,IAAI,CAACH,KAAK,GAAGA,KAAK,CAAA;MAClB,IAAI,CAACD,WAAW,GAAGA,WAAW,CAAA;MAE9B,IAAI,CAACK,qBAAqB,EAAE,CAAA;EAE5B,IAAA,IAAI,CAACL,WAAW,CAACvY,gBAAgB,CAAC,OAAO,EAAE,MACzC,IAAI,CAAC6Y,qBAAqB,EAC5B,CAAC,CAAA;EACH,GAAA;EAOAD,EAAAA,qBAAqBA,GAAG;EACtB,IAAA,MAAME,UAAU,GAAG/Z,aAAa,CAAC,SAAS,CAAC,CAAA;EAE3C,IAAA,IAAI,CAAC+Z,UAAU,CAAC5Z,KAAK,EAAE;QACrB,MAAM,IAAIgD,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEkW,MAAM;EACjBjW,QAAAA,UAAU,EAAE,CAAA,uBAAA,EAA0ByW,UAAU,CAAC7Z,QAAQ,CAAA,6BAAA,CAAA;EAC3D,OAAC,CAAC,CAAA;EACJ,KAAA;EAGA,IAAA,IAAI,CAACyZ,GAAG,GAAGvZ,MAAM,CAAC4Z,UAAU,CAAC,CAAA,YAAA,EAAeD,UAAU,CAAC5Z,KAAK,CAAA,CAAA,CAAG,CAAC,CAAA;EAIhE,IAAA,IAAI,kBAAkB,IAAI,IAAI,CAACwZ,GAAG,EAAE;EAClC,MAAA,IAAI,CAACA,GAAG,CAAC1Y,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,CAACgZ,SAAS,EAAE,CAAC,CAAA;EAC7D,KAAC,MAAM;QAGL,IAAI,CAACN,GAAG,CAACO,WAAW,CAAC,MAAM,IAAI,CAACD,SAAS,EAAE,CAAC,CAAA;EAC9C,KAAA;MAEA,IAAI,CAACA,SAAS,EAAE,CAAA;EAClB,GAAA;EAYAA,EAAAA,SAASA,GAAG;EACV,IAAA,IAAI,CAAC,IAAI,CAACN,GAAG,IAAI,CAAC,IAAI,CAACF,KAAK,IAAI,CAAC,IAAI,CAACD,WAAW,EAAE;EACjD,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,IAAI,CAACG,GAAG,CAACQ,OAAO,EAAE;EACpB,MAAA,IAAI,CAACV,KAAK,CAACnY,eAAe,CAAC,QAAQ,CAAC,CAAA;QACpC,IAAI,CAACkY,WAAW,CAACzY,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;EAC7C,KAAC,MAAM;EACL,MAAA,IAAI,CAACyY,WAAW,CAAClY,eAAe,CAAC,QAAQ,CAAC,CAAA;EAC1C,MAAA,IAAI,CAACkY,WAAW,CAACzY,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC2Y,UAAU,CAACjK,QAAQ,EAAE,CAAC,CAAA;QAE1E,IAAI,IAAI,CAACiK,UAAU,EAAE;EACnB,QAAA,IAAI,CAACD,KAAK,CAACnY,eAAe,CAAC,QAAQ,CAAC,CAAA;EACtC,OAAC,MAAM;UACL,IAAI,CAACmY,KAAK,CAAC1Y,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;EACvC,OAAA;EACF,KAAA;EACF,GAAA;EAUA+Y,EAAAA,qBAAqBA,GAAG;EACtB,IAAA,IAAI,CAACJ,UAAU,GAAG,CAAC,IAAI,CAACA,UAAU,CAAA;MAClC,IAAI,CAACO,SAAS,EAAE,CAAA;EAClB,GAAA;EAMF,CAAA;EAtJaV,MAAM,CAqJV5X,UAAU,GAAG,cAAc;;EC3JpC;EACA;EACA;EACA;EACA;EACA;EACO,MAAMyY,kBAAkB,SAAShW,qBAAqB,CAAC;EAC5D;EACF;EACA;EACA;EACExB,EAAAA,WAAWA,CAAClB,KAAK,EAAE4C,MAAM,GAAG,EAAE,EAAE;EAC9B,IAAA,KAAK,CAAC5C,KAAK,EAAE4C,MAAM,CAAC,CAAA;EAapB,IAAA,IACE,IAAI,CAAC5C,KAAK,CAACZ,YAAY,CAAC,MAAM,CAAC,KAAK,OAAO,IAC3C,CAAC,IAAI,CAACwD,MAAM,CAAC8R,gBAAgB,EAC7B;EACA3V,MAAAA,QAAQ,CAAC,IAAI,CAACiB,KAAK,CAAC,CAAA;EACtB,KAAA;EACF,GAAA;EA6BF,CAAA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EApEa0Y,kBAAkB,CA8BtBzY,UAAU,GAAG,2BAA2B,CAAA;EA9BpCyY,kBAAkB,CAuCtB5V,QAAQ,GAAGiB,MAAM,CAAC0K,MAAM,CAAC;EAC9BiG,EAAAA,gBAAgB,EAAE,KAAA;EACpB,CAAC,CAAC,CAAA;EAzCSgE,kBAAkB,CAiDtB9U,MAAM,GAAGG,MAAM,CAAC0K,MAAM,CAAC;EAC5BxK,EAAAA,UAAU,EAAE;EACVyQ,IAAAA,gBAAgB,EAAE;EAAElR,MAAAA,IAAI,EAAE,SAAA;EAAU,KAAA;EACtC,GAAA;EACF,CAAC,CAAC;;ECzDJ;EACA;EACA;EACA;EACA;EACA;EACO,MAAMmV,aAAa,SAASjW,qBAAqB,CAAC;EAmBvD;EACF;EACA;EACA;EACExB,EAAAA,WAAWA,CAAClB,KAAK,EAAE4C,MAAM,GAAG,EAAE,EAAE;EAC9B,IAAA,KAAK,CAAC5C,KAAK,EAAE4C,MAAM,CAAC,CAAA;EAAA,IAAA,IAAA,CAtBtBiG,IAAI,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAMJ0K,MAAM,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAMNqF,eAAe,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAGfC,0BAA0B,GAAA,KAAA,CAAA,CAAA;MASxB,MAAMtF,MAAM,GAAG,IAAI,CAACvT,KAAK,CAACuL,aAAa,CAAC,gCAAgC,CAAC,CAAA;EACzE,IAAA,IAAI,EAAEgI,MAAM,YAAY5C,gBAAgB,CAAC,EAAE;QACzC,MAAM,IAAIlP,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEgX,aAAa;EACxB9W,QAAAA,OAAO,EAAE0R,MAAM;EACfzR,QAAAA,YAAY,EAAE,kBAAkB;EAChCF,QAAAA,UAAU,EAAE,+CAAA;EACd,OAAC,CAAC,CAAA;EACJ,KAAA;EAEA,IAAA,IAAI2R,MAAM,CAAC/P,IAAI,KAAK,UAAU,EAAE;EAC9B,MAAA,MAAM,IAAI/B,YAAY,CACpB,2FACF,CAAC,CAAA;EACH,KAAA;MAEA,MAAMmX,eAAe,GAAG,IAAI,CAAC5Y,KAAK,CAACuL,aAAa,CAC9C,iCACF,CAAC,CAAA;EACD,IAAA,IAAI,EAAEqN,eAAe,YAAYE,iBAAiB,CAAC,EAAE;QACnD,MAAM,IAAIrX,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEgX,aAAa;EACxB9W,QAAAA,OAAO,EAAE+W,eAAe;EACxB9W,QAAAA,YAAY,EAAE,mBAAmB;EACjCF,QAAAA,UAAU,EAAE,4CAAA;EACd,OAAC,CAAC,CAAA;EACJ,KAAA;EAEA,IAAA,IAAIgX,eAAe,CAACpV,IAAI,KAAK,QAAQ,EAAE;EACrC,MAAA,MAAM,IAAI/B,YAAY,CACpB,sFACF,CAAC,CAAA;EACH,KAAA;MAEA,IAAI,CAAC8R,MAAM,GAAGA,MAAM,CAAA;MACpB,IAAI,CAACqF,eAAe,GAAGA,eAAe,CAAA;MAEtC,IAAI,CAAC/P,IAAI,GAAG,IAAIvD,IAAI,CAAC,IAAI,CAAC1C,MAAM,CAACiG,IAAI,EAAE;EAErCpD,MAAAA,MAAM,EAAEiK,qBAAqB,CAAC,IAAI,CAAC1P,KAAK,EAAE,MAAM,CAAA;EAClD,KAAC,CAAC,CAAA;EAGF,IAAA,IAAI,CAAC4Y,eAAe,CAAChZ,eAAe,CAAC,QAAQ,CAAC,CAAA;EAM9C,IAAA,MAAMiZ,0BAA0B,GAAGja,QAAQ,CAAC8L,aAAa,CAAC,KAAK,CAAC,CAAA;MAChEmO,0BAA0B,CAAC5H,SAAS,GAClC,uDAAuD,CAAA;EACzD4H,IAAAA,0BAA0B,CAACxZ,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;MAC9D,IAAI,CAACwZ,0BAA0B,GAAGA,0BAA0B,CAAA;MAC5D,IAAI,CAACtF,MAAM,CAACvC,qBAAqB,CAAC,UAAU,EAAE6H,0BAA0B,CAAC,CAAA;EAGzE,IAAA,IAAI,CAACD,eAAe,CAACrZ,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACyO,MAAM,CAAC6I,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;EAGtE,IAAA,IAAI,IAAI,CAACtD,MAAM,CAACW,IAAI,EAAE;EACpB,MAAA,IAAI,CAACX,MAAM,CAACW,IAAI,CAAC3U,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,CAACwZ,IAAI,EAAE,CAAC,CAAA;EAChE,KAAA;EAGAra,IAAAA,MAAM,CAACa,gBAAgB,CAAC,UAAU,EAAG0L,KAAK,IAAK;QAC7C,IAAIA,KAAK,CAAC+N,SAAS,IAAI,IAAI,CAACzF,MAAM,CAAC/P,IAAI,KAAK,UAAU,EAAE;UACtD,IAAI,CAACuV,IAAI,EAAE,CAAA;EACb,OAAA;EACF,KAAC,CAAC,CAAA;MAGF,IAAI,CAACA,IAAI,EAAE,CAAA;EACb,GAAA;IAQA/K,MAAMA,CAAC/C,KAAK,EAAE;MACZA,KAAK,CAACqE,cAAc,EAAE,CAAA;EAGtB,IAAA,IAAI,IAAI,CAACiE,MAAM,CAAC/P,IAAI,KAAK,UAAU,EAAE;QACnC,IAAI,CAACyV,IAAI,EAAE,CAAA;EACX,MAAA,OAAA;EACF,KAAA;MAIA,IAAI,CAACF,IAAI,EAAE,CAAA;EACb,GAAA;EAOAE,EAAAA,IAAIA,GAAG;EACL,IAAA,IAAI,CAACC,OAAO,CAAC,MAAM,CAAC,CAAA;EACtB,GAAA;EAOAH,EAAAA,IAAIA,GAAG;EACL,IAAA,IAAI,CAACG,OAAO,CAAC,UAAU,CAAC,CAAA;EAC1B,GAAA;IAQAA,OAAOA,CAAC1V,IAAI,EAAE;EACZ,IAAA,IAAIA,IAAI,KAAK,IAAI,CAAC+P,MAAM,CAAC/P,IAAI,EAAE;EAC7B,MAAA,OAAA;EACF,KAAA;MAGA,IAAI,CAAC+P,MAAM,CAAClU,YAAY,CAAC,MAAM,EAAEmE,IAAI,CAAC,CAAA;EAEtC,IAAA,MAAM2V,QAAQ,GAAG3V,IAAI,KAAK,UAAU,CAAA;EACpC,IAAA,MAAM4V,YAAY,GAAGD,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAA;EAC/C,IAAA,MAAME,YAAY,GAAGF,QAAQ,GAAG,gBAAgB,GAAG,eAAe,CAAA;EAGlE,IAAA,IAAI,CAACP,eAAe,CAACU,SAAS,GAAG,IAAI,CAACzQ,IAAI,CAAClD,CAAC,CAAC,CAAGyT,EAAAA,YAAY,UAAU,CAAC,CAAA;EAGvE,IAAA,IAAI,CAACR,eAAe,CAACvZ,YAAY,CAC/B,YAAY,EACZ,IAAI,CAACwJ,IAAI,CAAClD,CAAC,CAAC,GAAGyT,YAAY,CAAA,iBAAA,CAAmB,CAChD,CAAC,CAAA;EAGD,IAAA,IAAI,CAACP,0BAA0B,CAACS,SAAS,GAAG,IAAI,CAACzQ,IAAI,CAAClD,CAAC,CACrD,CAAG0T,EAAAA,YAAY,cACjB,CAAC,CAAA;EACH,GAAA;EAqCF,CAAA;;EAEA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EAlPaV,aAAa,CA+KjB1Y,UAAU,GAAG,sBAAsB,CAAA;EA/K/B0Y,aAAa,CAyLjB7V,QAAQ,GAAGiB,MAAM,CAAC0K,MAAM,CAAC;EAC9B5F,EAAAA,IAAI,EAAE;EACJ0Q,IAAAA,YAAY,EAAE,MAAM;EACpBC,IAAAA,YAAY,EAAE,MAAM;EACpBC,IAAAA,qBAAqB,EAAE,eAAe;EACtCC,IAAAA,qBAAqB,EAAE,eAAe;EACtCC,IAAAA,yBAAyB,EAAE,0BAA0B;EACrDC,IAAAA,0BAA0B,EAAE,yBAAA;EAC9B,GAAA;EACF,CAAC,CAAC,CAAA;EAlMSjB,aAAa,CA0MjB/U,MAAM,GAAGG,MAAM,CAAC0K,MAAM,CAAC;EAC5BxK,EAAAA,UAAU,EAAE;EACV4E,IAAAA,IAAI,EAAE;EAAErF,MAAAA,IAAI,EAAE,QAAA;EAAS,KAAA;EACzB,GAAA;EACF,CAAC,CAAC;;ECtNJ;EACA;EACA;EACA;EACA;EACO,MAAMqW,MAAM,SAAS5X,sBAAsB,CAAC;EAIjD;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;IACEf,WAAWA,CAAClB,KAAK,EAAE;MACjB,KAAK,CAACA,KAAK,CAAC,CAAA;EAAA,IAAA,IAAA,CAjBdsT,OAAO,GAAA,KAAA,CAAA,CAAA;MAmBL,MAAMA,OAAO,GAAG,IAAI,CAACtT,KAAK,CAACqK,gBAAgB,CAAC,qBAAqB,CAAC,CAAA;EAClE,IAAA,IAAI,CAACiJ,OAAO,CAAC7P,MAAM,EAAE;QACnB,MAAM,IAAIhC,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEkY,MAAM;EACjBjY,QAAAA,UAAU,EAAE,sCAAA;EACd,OAAC,CAAC,CAAA;EACJ,KAAA;MAEA,IAAI,CAAC0R,OAAO,GAAGA,OAAO,CAAA;EAEtB,IAAA,IAAI,CAACA,OAAO,CAACnI,OAAO,CAAEoI,MAAM,IAAK;EAC/B,MAAA,MAAMC,QAAQ,GAAGD,MAAM,CAACnU,YAAY,CAAC,oBAAoB,CAAC,CAAA;QAG1D,IAAI,CAACoU,QAAQ,EAAE;EACb,QAAA,OAAA;EACF,OAAA;EAGA,MAAA,IAAI,CAAC5U,QAAQ,CAACmS,cAAc,CAACyC,QAAQ,CAAC,EAAE;UACtC,MAAM,IAAI/R,YAAY,CAAC;EACrBE,UAAAA,SAAS,EAAEkY,MAAM;YACjBjY,UAAU,EAAE,6BAA6B4R,QAAQ,CAAA,IAAA,CAAA;EACnD,SAAC,CAAC,CAAA;EACJ,OAAA;EAIAD,MAAAA,MAAM,CAAClU,YAAY,CAAC,eAAe,EAAEmU,QAAQ,CAAC,CAAA;EAC9CD,MAAAA,MAAM,CAAC3T,eAAe,CAAC,oBAAoB,CAAC,CAAA;EAC9C,KAAC,CAAC,CAAA;MAKFlB,MAAM,CAACa,gBAAgB,CAAC,UAAU,EAAE,MAAM,IAAI,CAACkU,yBAAyB,EAAE,CAAC,CAAA;MAK3E,IAAI,CAACA,yBAAyB,EAAE,CAAA;EAGhC,IAAA,IAAI,CAACzT,KAAK,CAACT,gBAAgB,CAAC,OAAO,EAAG0L,KAAK,IAAK,IAAI,CAACyI,WAAW,CAACzI,KAAK,CAAC,CAAC,CAAA;EAC1E,GAAA;EAOAwI,EAAAA,yBAAyBA,GAAG;EAC1B,IAAA,IAAI,CAACH,OAAO,CAACnI,OAAO,CAAEoI,MAAM,IAC1B,IAAI,CAACI,mCAAmC,CAACJ,MAAM,CACjD,CAAC,CAAA;EACH,GAAA;IAWAI,mCAAmCA,CAACJ,MAAM,EAAE;EAC1C,IAAA,MAAMC,QAAQ,GAAGD,MAAM,CAACnU,YAAY,CAAC,eAAe,CAAC,CAAA;MACrD,IAAI,CAACoU,QAAQ,EAAE;EACb,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMnE,OAAO,GAAGzQ,QAAQ,CAACmS,cAAc,CAACyC,QAAQ,CAAC,CAAA;MACjD,IAAInE,OAAO,IAAPA,IAAAA,IAAAA,OAAO,CAAE9O,SAAS,CAACC,QAAQ,CAAC,2BAA2B,CAAC,EAAE;EAC5D,MAAA,MAAMoT,cAAc,GAAGL,MAAM,CAACM,OAAO,CAAA;QAErCN,MAAM,CAAClU,YAAY,CAAC,eAAe,EAAEuU,cAAc,CAAC7F,QAAQ,EAAE,CAAC,CAAA;QAC/DsB,OAAO,CAAC9O,SAAS,CAACyN,MAAM,CACtB,mCAAmC,EACnC,CAAC4F,cACH,CAAC,CAAA;EACH,KAAA;EACF,GAAA;IAaAF,WAAWA,CAACzI,KAAK,EAAE;EACjB,IAAA,MAAMqJ,aAAa,GAAGrJ,KAAK,CAACkC,MAAM,CAAA;MAGlC,IACE,EAAEmH,aAAa,YAAY3D,gBAAgB,CAAC,IAC5C2D,aAAa,CAAC9Q,IAAI,KAAK,OAAO,EAC9B;EACA,MAAA,OAAA;EACF,KAAA;EAIA,IAAA,MAAMsW,UAAU,GAAGlb,QAAQ,CAACyL,gBAAgB,CAC1C,oCACF,CAAC,CAAA;EAED,IAAA,MAAM0P,iBAAiB,GAAGzF,aAAa,CAACJ,IAAI,CAAA;EAC5C,IAAA,MAAM8F,iBAAiB,GAAG1F,aAAa,CAAC/V,IAAI,CAAA;EAE5Cub,IAAAA,UAAU,CAAC3O,OAAO,CAAEoI,MAAM,IAAK;EAC7B,MAAA,MAAMU,gBAAgB,GAAGV,MAAM,CAACW,IAAI,KAAK6F,iBAAiB,CAAA;EAC1D,MAAA,MAAME,WAAW,GAAG1G,MAAM,CAAChV,IAAI,KAAKyb,iBAAiB,CAAA;QAErD,IAAIC,WAAW,IAAIhG,gBAAgB,EAAE;EACnC,QAAA,IAAI,CAACN,mCAAmC,CAACJ,MAAM,CAAC,CAAA;EAClD,OAAA;EACF,KAAC,CAAC,CAAA;EACJ,GAAA;EAMF,CAAA;EAtJasG,MAAM,CAqJV5Z,UAAU,GAAG,cAAc;;ECzJpC;EACA;EACA;EACA;EACA;EACO,MAAMia,iBAAiB,SAASjY,sBAAsB,CAAC;EAyB5D;EACF;EACA;IACEf,WAAWA,CAAClB,KAAK,EAAE;MACjB,KAAK,CAACA,KAAK,CAAC,CAAA;EAAA,IAAA,IAAA,CA3Bd8X,WAAW,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAGXC,KAAK,GAAA,KAAA,CAAA,CAAA;MAAA,IAQLC,CAAAA,UAAU,GAAG,KAAK,CAAA;MAAA,IAUlBC,CAAAA,GAAG,GAAG,IAAI,CAAA;MAQR,MAAMH,WAAW,GAAG,IAAI,CAAC9X,KAAK,CAACuL,aAAa,CAC1C,qCACF,CAAC,CAAA;MAKD,IAAI,CAACuM,WAAW,EAAE;EAChB,MAAA,OAAO,IAAI,CAAA;EACb,KAAA;EAEA,IAAA,MAAMI,MAAM,GAAGJ,WAAW,CAAC1Y,YAAY,CAAC,eAAe,CAAC,CAAA;MACxD,IAAI,CAAC8Y,MAAM,EAAE;QACX,MAAM,IAAIzW,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEuY,iBAAiB;EAC5BtY,QAAAA,UAAU,EACR,uGAAA;EACJ,OAAC,CAAC,CAAA;EACJ,KAAA;EAEA,IAAA,MAAMmW,KAAK,GAAGnZ,QAAQ,CAACmS,cAAc,CAACmH,MAAM,CAAC,CAAA;MAC7C,IAAI,CAACH,KAAK,EAAE;QACV,MAAM,IAAItW,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEuY,iBAAiB;EAC5BrY,QAAAA,OAAO,EAAEkW,KAAK;UACdnW,UAAU,EAAE,yBAAyBsW,MAAM,CAAA,KAAA,CAAA;EAC7C,OAAC,CAAC,CAAA;EACJ,KAAA;MAEA,IAAI,CAACH,KAAK,GAAGA,KAAK,CAAA;MAClB,IAAI,CAACD,WAAW,GAAGA,WAAW,CAAA;MAE9B,IAAI,CAACK,qBAAqB,EAAE,CAAA;EAE5B,IAAA,IAAI,CAACL,WAAW,CAACvY,gBAAgB,CAAC,OAAO,EAAE,MACzC,IAAI,CAAC6Y,qBAAqB,EAC5B,CAAC,CAAA;EACH,GAAA;EAOAD,EAAAA,qBAAqBA,GAAG;EACtB,IAAA,MAAME,UAAU,GAAG/Z,aAAa,CAAC,QAAQ,CAAC,CAAA;EAE1C,IAAA,IAAI,CAAC+Z,UAAU,CAAC5Z,KAAK,EAAE;QACrB,MAAM,IAAIgD,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEuY,iBAAiB;EAC5BtY,QAAAA,UAAU,EAAE,CAAA,uBAAA,EAA0ByW,UAAU,CAAC7Z,QAAQ,CAAA,6BAAA,CAAA;EAC3D,OAAC,CAAC,CAAA;EACJ,KAAA;EAGA,IAAA,IAAI,CAACyZ,GAAG,GAAGvZ,MAAM,CAAC4Z,UAAU,CAAC,CAAA,YAAA,EAAeD,UAAU,CAAC5Z,KAAK,CAAA,CAAA,CAAG,CAAC,CAAA;EAIhE,IAAA,IAAI,kBAAkB,IAAI,IAAI,CAACwZ,GAAG,EAAE;EAClC,MAAA,IAAI,CAACA,GAAG,CAAC1Y,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,CAACgZ,SAAS,EAAE,CAAC,CAAA;EAC7D,KAAC,MAAM;QAGL,IAAI,CAACN,GAAG,CAACO,WAAW,CAAC,MAAM,IAAI,CAACD,SAAS,EAAE,CAAC,CAAA;EAC9C,KAAA;MAEA,IAAI,CAACA,SAAS,EAAE,CAAA;EAClB,GAAA;EAYAA,EAAAA,SAASA,GAAG;EACV,IAAA,IAAI,CAAC,IAAI,CAACN,GAAG,IAAI,CAAC,IAAI,CAACF,KAAK,IAAI,CAAC,IAAI,CAACD,WAAW,EAAE;EACjD,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,IAAI,CAACG,GAAG,CAACQ,OAAO,EAAE;EACpB,MAAA,IAAI,CAACV,KAAK,CAACnY,eAAe,CAAC,QAAQ,CAAC,CAAA;QACpC,IAAI,CAACkY,WAAW,CAACzY,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;EAC7C,KAAC,MAAM;EACL,MAAA,IAAI,CAACyY,WAAW,CAAClY,eAAe,CAAC,QAAQ,CAAC,CAAA;EAC1C,MAAA,IAAI,CAACkY,WAAW,CAACzY,YAAY,CAAC,eAAe,EAAE,IAAI,CAAC2Y,UAAU,CAACjK,QAAQ,EAAE,CAAC,CAAA;QAE1E,IAAI,IAAI,CAACiK,UAAU,EAAE;EACnB,QAAA,IAAI,CAACD,KAAK,CAACnY,eAAe,CAAC,QAAQ,CAAC,CAAA;EACtC,OAAC,MAAM;UACL,IAAI,CAACmY,KAAK,CAAC1Y,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;EACvC,OAAA;EACF,KAAA;EACF,GAAA;EAUA+Y,EAAAA,qBAAqBA,GAAG;EACtB,IAAA,IAAI,CAACJ,UAAU,GAAG,CAAC,IAAI,CAACA,UAAU,CAAA;MAClC,IAAI,CAACO,SAAS,EAAE,CAAA;EAClB,GAAA;EAMF,CAAA;EApJa2B,iBAAiB,CAmJrBja,UAAU,GAAG,0BAA0B;;ECxJhD;EACA;EACA;EACA;EACA;EACA;EACO,MAAMka,QAAQ,SAASlY,sBAAsB,CAAC;EAGnD;EACF;EACA;EACA;EACA;EACA;IACEf,WAAWA,CAAClB,KAAK,EAAE;EAAA,IAAA,IAAAoa,qBAAA,CAAA;MACjB,KAAK,CAACpa,KAAK,CAAC,CAAA;EAEZ,IAAA,MAAMqa,IAAI,GAAG,IAAI,CAACra,KAAK,CAACqa,IAAI,CAAA;EAC5B,IAAA,MAAMvF,IAAI,GAAA,CAAAsF,qBAAA,GAAG,IAAI,CAACpa,KAAK,CAACZ,YAAY,CAAC,MAAM,CAAC,KAAAgb,IAAAA,GAAAA,qBAAA,GAAI,EAAE,CAAA;EAGlD,IAAA,IAAInc,GAAG,CAAA;MASP,IAAI;QACFA,GAAG,GAAG,IAAIS,MAAM,CAAC4b,GAAG,CAAC,IAAI,CAACta,KAAK,CAAC8U,IAAI,CAAC,CAAA;OACtC,CAAC,OAAOyF,KAAK,EAAE;EACd,MAAA,MAAM,IAAI9Y,YAAY,CACpB,CAAmCqT,gCAAAA,EAAAA,IAAI,iBACzC,CAAC,CAAA;EACH,KAAA;EAGA,IAAA,IACE7W,GAAG,CAACuc,MAAM,KAAK9b,MAAM,CAAC0Y,QAAQ,CAACoD,MAAM,IACrCvc,GAAG,CAACwc,QAAQ,KAAK/b,MAAM,CAAC0Y,QAAQ,CAACqD,QAAQ,EACzC;EACA,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMC,eAAe,GAAG1c,kBAAkB,CAACqc,IAAI,CAAC,CAAA;MAGhD,IAAI,CAACK,eAAe,EAAE;EACpB,MAAA,MAAM,IAAIjZ,YAAY,CACpB,CAAmCqT,gCAAAA,EAAAA,IAAI,2BACzC,CAAC,CAAA;EACH,KAAA;EAEA,IAAA,MAAM6F,cAAc,GAAG/b,QAAQ,CAACmS,cAAc,CAAC2J,eAAe,CAAC,CAAA;MAG/D,IAAI,CAACC,cAAc,EAAE;QACnB,MAAM,IAAIlZ,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEwY,QAAQ;EACnBtY,QAAAA,OAAO,EAAE8Y,cAAc;UACvB/Y,UAAU,EAAE,yBAAyB8Y,eAAe,CAAA,IAAA,CAAA;EACtD,OAAC,CAAC,CAAA;EACJ,KAAA;MAQA,IAAI,CAAC1a,KAAK,CAACT,gBAAgB,CAAC,OAAO,EAAE,MACnCR,QAAQ,CAAC4b,cAAc,EAAE;EACvB9a,MAAAA,aAAaA,GAAG;EACd8a,QAAAA,cAAc,CAACpa,SAAS,CAACoK,GAAG,CAAC,iCAAiC,CAAC,CAAA;SAChE;EACDnL,MAAAA,MAAMA,GAAG;EACPmb,QAAAA,cAAc,CAACpa,SAAS,CAACyM,MAAM,CAAC,iCAAiC,CAAC,CAAA;EACpE,OAAA;EACF,KAAC,CACH,CAAC,CAAA;EACH,GAAA;EAMF,CAAA;EAnFamN,QAAQ,CACZ/X,WAAW,GAAGwS,iBAAiB,CAAA;EAD3BuF,QAAQ,CAkFZla,UAAU,GAAG,iBAAiB;;ECxFvC;EACA;EACA;EACA;EACA;EACO,MAAM2a,IAAI,SAAS3Y,sBAAsB,CAAC;EA+B/C;EACF;EACA;IACEf,WAAWA,CAAClB,KAAK,EAAE;MACjB,KAAK,CAACA,KAAK,CAAC,CAAA;EAAA,IAAA,IAAA,CAjCd6a,KAAK,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAGLC,QAAQ,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAGRC,aAAa,GAAA,KAAA,CAAA,CAAA;MAAA,IAGbC,CAAAA,aAAa,GAAG,2BAA2B,CAAA;MAAA,IAG3CC,CAAAA,YAAY,GAAG,KAAK,CAAA;EAAA,IAAA,IAAA,CAGpBC,aAAa,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAGbC,eAAe,GAAA,KAAA,CAAA,CAAA;EAAA,IAAA,IAAA,CAGfC,iBAAiB,GAAA,KAAA,CAAA,CAAA;MAAA,IAMjBnD,CAAAA,GAAG,GAAG,IAAI,CAAA;MAQR,MAAM4C,KAAK,GAAG,IAAI,CAAC7a,KAAK,CAACqK,gBAAgB,CAAC,mBAAmB,CAAC,CAAA;EAC9D,IAAA,IAAI,CAACwQ,KAAK,CAACpX,MAAM,EAAE;QACjB,MAAM,IAAIhC,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEiZ,IAAI;EACfhZ,QAAAA,UAAU,EAAE,uCAAA;EACd,OAAC,CAAC,CAAA;EACJ,KAAA;MAEA,IAAI,CAACiZ,KAAK,GAAGA,KAAK,CAAA;MAGlB,IAAI,CAACK,aAAa,GAAG,IAAI,CAACG,UAAU,CAACxE,IAAI,CAAC,IAAI,CAAC,CAAA;MAC/C,IAAI,CAACsE,eAAe,GAAG,IAAI,CAACG,YAAY,CAACzE,IAAI,CAAC,IAAI,CAAC,CAAA;MACnD,IAAI,CAACuE,iBAAiB,GAAG,IAAI,CAACG,YAAY,CAAC1E,IAAI,CAAC,IAAI,CAAC,CAAA;MAErD,MAAMiE,QAAQ,GAAG,IAAI,CAAC9a,KAAK,CAACuL,aAAa,CAAC,mBAAmB,CAAC,CAAA;MAC9D,MAAMwP,aAAa,GAAG,IAAI,CAAC/a,KAAK,CAACqK,gBAAgB,CAC/C,0BACF,CAAC,CAAA;MAED,IAAI,CAACyQ,QAAQ,EAAE;QACb,MAAM,IAAIrZ,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEiZ,IAAI;EACfhZ,QAAAA,UAAU,EAAE,wCAAA;EACd,OAAC,CAAC,CAAA;EACJ,KAAA;EAEA,IAAA,IAAI,CAACmZ,aAAa,CAACtX,MAAM,EAAE;QACzB,MAAM,IAAIhC,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEiZ,IAAI;EACfhZ,QAAAA,UAAU,EAAE,mDAAA;EACd,OAAC,CAAC,CAAA;EACJ,KAAA;MAEA,IAAI,CAACkZ,QAAQ,GAAGA,QAAQ,CAAA;MACxB,IAAI,CAACC,aAAa,GAAGA,aAAa,CAAA;MAElC,IAAI,CAAC5C,qBAAqB,EAAE,CAAA;EAC9B,GAAA;EAOAA,EAAAA,qBAAqBA,GAAG;EACtB,IAAA,MAAME,UAAU,GAAG/Z,aAAa,CAAC,QAAQ,CAAC,CAAA;EAE1C,IAAA,IAAI,CAAC+Z,UAAU,CAAC5Z,KAAK,EAAE;QACrB,MAAM,IAAIgD,YAAY,CAAC;EACrBE,QAAAA,SAAS,EAAEiZ,IAAI;EACfhZ,QAAAA,UAAU,EAAE,CAAA,uBAAA,EAA0ByW,UAAU,CAAC7Z,QAAQ,CAAA,6BAAA,CAAA;EAC3D,OAAC,CAAC,CAAA;EACJ,KAAA;EAGA,IAAA,IAAI,CAACyZ,GAAG,GAAGvZ,MAAM,CAAC4Z,UAAU,CAAC,CAAA,YAAA,EAAeD,UAAU,CAAC5Z,KAAK,CAAA,CAAA,CAAG,CAAC,CAAA;EAIhE,IAAA,IAAI,kBAAkB,IAAI,IAAI,CAACwZ,GAAG,EAAE;EAClC,MAAA,IAAI,CAACA,GAAG,CAAC1Y,gBAAgB,CAAC,QAAQ,EAAE,MAAM,IAAI,CAACgZ,SAAS,EAAE,CAAC,CAAA;EAC7D,KAAC,MAAM;QAGL,IAAI,CAACN,GAAG,CAACO,WAAW,CAAC,MAAM,IAAI,CAACD,SAAS,EAAE,CAAC,CAAA;EAC9C,KAAA;MAEA,IAAI,CAACA,SAAS,EAAE,CAAA;EAClB,GAAA;EAOAA,EAAAA,SAASA,GAAG;EAAA,IAAA,IAAAiD,SAAA,CAAA;MACV,IAAAA,CAAAA,SAAA,GAAI,IAAI,CAACvD,GAAG,KAARuD,IAAAA,IAAAA,SAAA,CAAU/C,OAAO,EAAE;QACrB,IAAI,CAACgD,KAAK,EAAE,CAAA;EACd,KAAC,MAAM;QACL,IAAI,CAACC,QAAQ,EAAE,CAAA;EACjB,KAAA;EACF,GAAA;EAOAD,EAAAA,KAAKA,GAAG;EAAA,IAAA,IAAAE,YAAA,CAAA;MACN,IAAI,CAACb,QAAQ,CAACzb,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;EAE7C,IAAA,IAAI,CAAC0b,aAAa,CAAC5P,OAAO,CAAEyQ,KAAK,IAAK;EACpCA,MAAAA,KAAK,CAACvc,YAAY,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;EAC5C,KAAC,CAAC,CAAA;EAEF,IAAA,IAAI,CAACwb,KAAK,CAAC1P,OAAO,CAAE0Q,IAAI,IAAK;EAE3B,MAAA,IAAI,CAACC,aAAa,CAACD,IAAI,CAAC,CAAA;QAGxBA,IAAI,CAACtc,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC2b,aAAa,EAAE,IAAI,CAAC,CAAA;QACxDW,IAAI,CAACtc,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC4b,eAAe,EAAE,IAAI,CAAC,CAAA;EAG5D,MAAA,IAAI,CAACY,OAAO,CAACF,IAAI,CAAC,CAAA;EACpB,KAAC,CAAC,CAAA;MAGF,MAAMG,UAAU,IAAAL,YAAA,GAAG,IAAI,CAACM,MAAM,CAACvd,MAAM,CAAC0Y,QAAQ,CAACiD,IAAI,CAAC,YAAAsB,YAAA,GAAI,IAAI,CAACd,KAAK,CAAC,CAAC,CAAC,CAAA;EAErE,IAAA,IAAI,CAACqB,OAAO,CAACF,UAAU,CAAC,CAAA;MAGxBtd,MAAM,CAACa,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC6b,iBAAiB,EAAE,IAAI,CAAC,CAAA;EACrE,GAAA;EAOAM,EAAAA,QAAQA,GAAG;EACT,IAAA,IAAI,CAACZ,QAAQ,CAAClb,eAAe,CAAC,MAAM,CAAC,CAAA;EAErC,IAAA,IAAI,CAACmb,aAAa,CAAC5P,OAAO,CAAEyQ,KAAK,IAAK;EACpCA,MAAAA,KAAK,CAAChc,eAAe,CAAC,MAAM,CAAC,CAAA;EAC/B,KAAC,CAAC,CAAA;EAEF,IAAA,IAAI,CAACib,KAAK,CAAC1P,OAAO,CAAE0Q,IAAI,IAAK;QAE3BA,IAAI,CAACM,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAACjB,aAAa,EAAE,IAAI,CAAC,CAAA;QAC3DW,IAAI,CAACM,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAChB,eAAe,EAAE,IAAI,CAAC,CAAA;EAG/D,MAAA,IAAI,CAACiB,eAAe,CAACP,IAAI,CAAC,CAAA;EAC5B,KAAC,CAAC,CAAA;MAGFnd,MAAM,CAACyd,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAACf,iBAAiB,EAAE,IAAI,CAAC,CAAA;EACxE,GAAA;EAQAG,EAAAA,YAAYA,GAAG;EACb,IAAA,MAAMlB,IAAI,GAAG3b,MAAM,CAAC0Y,QAAQ,CAACiD,IAAI,CAAA;EACjC,IAAA,MAAMgC,YAAY,GAAG,IAAI,CAACJ,MAAM,CAAC5B,IAAI,CAAC,CAAA;MACtC,IAAI,CAACgC,YAAY,EAAE;EACjB,MAAA,OAAA;EACF,KAAA;MAGA,IAAI,IAAI,CAACpB,YAAY,EAAE;QACrB,IAAI,CAACA,YAAY,GAAG,KAAK,CAAA;EACzB,MAAA,OAAA;EACF,KAAA;EAGA,IAAA,MAAMqB,YAAY,GAAG,IAAI,CAACC,aAAa,EAAE,CAAA;MACzC,IAAI,CAACD,YAAY,EAAE;EACjB,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,CAACP,OAAO,CAACO,YAAY,CAAC,CAAA;EAC1B,IAAA,IAAI,CAACJ,OAAO,CAACG,YAAY,CAAC,CAAA;MAC1BA,YAAY,CAACvc,KAAK,EAAE,CAAA;EACtB,GAAA;IAQAic,OAAOA,CAACF,IAAI,EAAE;EACZ,IAAA,IAAI,CAACW,cAAc,CAACX,IAAI,CAAC,CAAA;EACzB,IAAA,IAAI,CAACY,SAAS,CAACZ,IAAI,CAAC,CAAA;EACtB,GAAA;IAQAK,OAAOA,CAACL,IAAI,EAAE;EACZ,IAAA,IAAI,CAACa,YAAY,CAACb,IAAI,CAAC,CAAA;EACvB,IAAA,IAAI,CAACc,SAAS,CAACd,IAAI,CAAC,CAAA;EACtB,GAAA;IASAI,MAAMA,CAAC5B,IAAI,EAAE;MACX,OAAO,IAAI,CAACra,KAAK,CAACuL,aAAa,CAAC,CAAA,wBAAA,EAA2B8O,IAAI,CAAA,EAAA,CAAI,CAAC,CAAA;EACtE,GAAA;IAQAyB,aAAaA,CAACD,IAAI,EAAE;EAClB,IAAA,MAAMe,OAAO,GAAG5e,kBAAkB,CAAC6d,IAAI,CAAC/G,IAAI,CAAC,CAAA;MAC7C,IAAI,CAAC8H,OAAO,EAAE;EACZ,MAAA,OAAA;EACF,KAAA;MAGAf,IAAI,CAACxc,YAAY,CAAC,IAAI,EAAE,CAAOud,IAAAA,EAAAA,OAAO,EAAE,CAAC,CAAA;EACzCf,IAAAA,IAAI,CAACxc,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;EAChCwc,IAAAA,IAAI,CAACxc,YAAY,CAAC,eAAe,EAAEud,OAAO,CAAC,CAAA;EAC3Cf,IAAAA,IAAI,CAACxc,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;EAC3Cwc,IAAAA,IAAI,CAACxc,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;EAGnC,IAAA,MAAMwd,MAAM,GAAG,IAAI,CAACC,QAAQ,CAACjB,IAAI,CAAC,CAAA;MAClC,IAAI,CAACgB,MAAM,EAAE;EACX,MAAA,OAAA;EACF,KAAA;EAEAA,IAAAA,MAAM,CAACxd,YAAY,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;MACvCwd,MAAM,CAACxd,YAAY,CAAC,iBAAiB,EAAEwc,IAAI,CAAC5P,EAAE,CAAC,CAAA;MAC/C4Q,MAAM,CAACtc,SAAS,CAACoK,GAAG,CAAC,IAAI,CAACqQ,aAAa,CAAC,CAAA;EAC1C,GAAA;IAQAoB,eAAeA,CAACP,IAAI,EAAE;EAEpBA,IAAAA,IAAI,CAACjc,eAAe,CAAC,IAAI,CAAC,CAAA;EAC1Bic,IAAAA,IAAI,CAACjc,eAAe,CAAC,MAAM,CAAC,CAAA;EAC5Bic,IAAAA,IAAI,CAACjc,eAAe,CAAC,eAAe,CAAC,CAAA;EACrCic,IAAAA,IAAI,CAACjc,eAAe,CAAC,eAAe,CAAC,CAAA;EACrCic,IAAAA,IAAI,CAACjc,eAAe,CAAC,UAAU,CAAC,CAAA;EAGhC,IAAA,MAAMid,MAAM,GAAG,IAAI,CAACC,QAAQ,CAACjB,IAAI,CAAC,CAAA;MAClC,IAAI,CAACgB,MAAM,EAAE;EACX,MAAA,OAAA;EACF,KAAA;EAEAA,IAAAA,MAAM,CAACjd,eAAe,CAAC,MAAM,CAAC,CAAA;EAC9Bid,IAAAA,MAAM,CAACjd,eAAe,CAAC,iBAAiB,CAAC,CAAA;MACzCid,MAAM,CAACtc,SAAS,CAACyM,MAAM,CAAC,IAAI,CAACgO,aAAa,CAAC,CAAA;EAC7C,GAAA;IASAK,UAAUA,CAACpQ,KAAK,EAAE;EAChB,IAAA,MAAM8R,WAAW,GAAG,IAAI,CAACR,aAAa,EAAE,CAAA;EACxC,IAAA,MAAMS,QAAQ,GAAG/R,KAAK,CAACgS,aAAa,CAAA;MAEpC,IAAI,CAACF,WAAW,IAAI,EAAEC,QAAQ,YAAYpI,iBAAiB,CAAC,EAAE;EAC5D,MAAA,OAAA;EACF,KAAA;MAEA3J,KAAK,CAACqE,cAAc,EAAE,CAAA;EAEtB,IAAA,IAAI,CAACyM,OAAO,CAACgB,WAAW,CAAC,CAAA;EACzB,IAAA,IAAI,CAACb,OAAO,CAACc,QAAQ,CAAC,CAAA;EACtB,IAAA,IAAI,CAACE,kBAAkB,CAACF,QAAQ,CAAC,CAAA;EACnC,GAAA;IAWAE,kBAAkBA,CAACrB,IAAI,EAAE;EACvB,IAAA,MAAMgB,MAAM,GAAG,IAAI,CAACC,QAAQ,CAACjB,IAAI,CAAC,CAAA;MAClC,IAAI,CAACgB,MAAM,EAAE;EACX,MAAA,OAAA;EACF,KAAA;EAIA,IAAA,MAAMD,OAAO,GAAGC,MAAM,CAAC5Q,EAAE,CAAA;MACzB4Q,MAAM,CAAC5Q,EAAE,GAAG,EAAE,CAAA;MACd,IAAI,CAACgP,YAAY,GAAG,IAAI,CAAA;EACxBvc,IAAAA,MAAM,CAAC0Y,QAAQ,CAACiD,IAAI,GAAGuC,OAAO,CAAA;MAC9BC,MAAM,CAAC5Q,EAAE,GAAG2Q,OAAO,CAAA;EACrB,GAAA;IAWAtB,YAAYA,CAACrQ,KAAK,EAAE;MAClB,QAAQA,KAAK,CAAC3G,GAAG;EAEf,MAAA,KAAK,WAAW,CAAA;EAChB,MAAA,KAAK,MAAM;UACT,IAAI,CAAC6Y,mBAAmB,EAAE,CAAA;UAC1BlS,KAAK,CAACqE,cAAc,EAAE,CAAA;EACtB,QAAA,MAAA;EACF,MAAA,KAAK,YAAY,CAAA;EACjB,MAAA,KAAK,OAAO;UACV,IAAI,CAAC8N,eAAe,EAAE,CAAA;UACtBnS,KAAK,CAACqE,cAAc,EAAE,CAAA;EACtB,QAAA,MAAA;EACJ,KAAA;EACF,GAAA;EAOA8N,EAAAA,eAAeA,GAAG;EAChB,IAAA,MAAML,WAAW,GAAG,IAAI,CAACR,aAAa,EAAE,CAAA;EACxC,IAAA,IAAI,EAACQ,WAAW,IAAA,IAAA,IAAXA,WAAW,CAAEM,aAAa,CAAE,EAAA;EAC/B,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMC,gBAAgB,GAAGP,WAAW,CAACM,aAAa,CAACE,kBAAkB,CAAA;MACrE,IAAI,CAACD,gBAAgB,EAAE;EACrB,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMN,QAAQ,GAAGM,gBAAgB,CAAC/R,aAAa,CAAC,mBAAmB,CAAC,CAAA;MACpE,IAAI,CAACyR,QAAQ,EAAE;EACb,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,CAACjB,OAAO,CAACgB,WAAW,CAAC,CAAA;EACzB,IAAA,IAAI,CAACb,OAAO,CAACc,QAAQ,CAAC,CAAA;MACtBA,QAAQ,CAACld,KAAK,EAAE,CAAA;EAChB,IAAA,IAAI,CAACod,kBAAkB,CAACF,QAAQ,CAAC,CAAA;EACnC,GAAA;EAOAG,EAAAA,mBAAmBA,GAAG;EACpB,IAAA,MAAMJ,WAAW,GAAG,IAAI,CAACR,aAAa,EAAE,CAAA;EACxC,IAAA,IAAI,EAACQ,WAAW,IAAA,IAAA,IAAXA,WAAW,CAAEM,aAAa,CAAE,EAAA;EAC/B,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMG,oBAAoB,GACxBT,WAAW,CAACM,aAAa,CAACI,sBAAsB,CAAA;MAClD,IAAI,CAACD,oBAAoB,EAAE;EACzB,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,MAAMlB,YAAY,GAAGkB,oBAAoB,CAACjS,aAAa,CAAC,mBAAmB,CAAC,CAAA;MAC5E,IAAI,CAAC+Q,YAAY,EAAE;EACjB,MAAA,OAAA;EACF,KAAA;EAEA,IAAA,IAAI,CAACP,OAAO,CAACgB,WAAW,CAAC,CAAA;EACzB,IAAA,IAAI,CAACb,OAAO,CAACI,YAAY,CAAC,CAAA;MAC1BA,YAAY,CAACxc,KAAK,EAAE,CAAA;EACpB,IAAA,IAAI,CAACod,kBAAkB,CAACZ,YAAY,CAAC,CAAA;EACvC,GAAA;IASAQ,QAAQA,CAACjB,IAAI,EAAE;EACb,IAAA,MAAMe,OAAO,GAAG5e,kBAAkB,CAAC6d,IAAI,CAAC/G,IAAI,CAAC,CAAA;MAC7C,IAAI,CAAC8H,OAAO,EAAE;EACZ,MAAA,OAAO,IAAI,CAAA;EACb,KAAA;MAEA,OAAO,IAAI,CAAC5c,KAAK,CAACuL,aAAa,CAAC,CAAA,CAAA,EAAIqR,OAAO,CAAA,CAAE,CAAC,CAAA;EAChD,GAAA;IAQAD,SAASA,CAACd,IAAI,EAAE;EACd,IAAA,MAAMgB,MAAM,GAAG,IAAI,CAACC,QAAQ,CAACjB,IAAI,CAAC,CAAA;MAClC,IAAI,CAACgB,MAAM,EAAE;EACX,MAAA,OAAA;EACF,KAAA;MAEAA,MAAM,CAACtc,SAAS,CAACyM,MAAM,CAAC,IAAI,CAACgO,aAAa,CAAC,CAAA;EAC7C,GAAA;IAQAyB,SAASA,CAACZ,IAAI,EAAE;EACd,IAAA,MAAMgB,MAAM,GAAG,IAAI,CAACC,QAAQ,CAACjB,IAAI,CAAC,CAAA;MAClC,IAAI,CAACgB,MAAM,EAAE;EACX,MAAA,OAAA;EACF,KAAA;MAEAA,MAAM,CAACtc,SAAS,CAACoK,GAAG,CAAC,IAAI,CAACqQ,aAAa,CAAC,CAAA;EAC1C,GAAA;IAQAwB,cAAcA,CAACX,IAAI,EAAE;EACnB,IAAA,IAAI,CAACA,IAAI,CAACwB,aAAa,EAAE;EACvB,MAAA,OAAA;EACF,KAAA;EAEAxB,IAAAA,IAAI,CAACxc,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAA;MAC3Cwc,IAAI,CAACwB,aAAa,CAAC9c,SAAS,CAACyM,MAAM,CAAC,iCAAiC,CAAC,CAAA;EACtE6O,IAAAA,IAAI,CAACxc,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;EACrC,GAAA;IAQAqd,YAAYA,CAACb,IAAI,EAAE;EACjB,IAAA,IAAI,CAACA,IAAI,CAACwB,aAAa,EAAE;EACvB,MAAA,OAAA;EACF,KAAA;EAEAxB,IAAAA,IAAI,CAACxc,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;MAC1Cwc,IAAI,CAACwB,aAAa,CAAC9c,SAAS,CAACoK,GAAG,CAAC,iCAAiC,CAAC,CAAA;EACnEkR,IAAAA,IAAI,CAACxc,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;EACpC,GAAA;EAQAkd,EAAAA,aAAaA,GAAG;EACd,IAAA,OAAO,IAAI,CAACvc,KAAK,CAACuL,aAAa,CAC7B,oDACF,CAAC,CAAA;EACH,GAAA;EAMF,CAAA;EArgBaqP,IAAI,CAogBR3a,UAAU,GAAG,YAAY;;EC7flC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAASyd,OAAOA,CAAC9a,MAAM,EAAE;EAAA,EAAA,IAAA+a,aAAA,CAAA;IACvB/a,MAAM,GAAG,OAAOA,MAAM,KAAK,WAAW,GAAGA,MAAM,GAAG,EAAE,CAAA;EAGpD,EAAA,IAAI,CAACxC,WAAW,EAAE,EAAE;MAClB,IAAIwC,MAAM,CAACgb,OAAO,EAAE;EAClBhb,MAAAA,MAAM,CAACgb,OAAO,CAAC,IAAIxc,YAAY,EAAE,EAAE;EACjCwB,QAAAA,MAAAA;EACF,OAAC,CAAC,CAAA;EACJ,KAAC,MAAM;EACLwE,MAAAA,OAAO,CAACyW,GAAG,CAAC,IAAIzc,YAAY,EAAE,CAAC,CAAA;EACjC,KAAA;EACA,IAAA,OAAA;EACF,GAAA;EAEA,EAAA,MAAM0c,UAAU,GAAyB,CACvC,CAAClV,SAAS,EAAEhG,MAAM,CAACmb,SAAS,CAAC,EAC7B,CAAC9O,MAAM,EAAErM,MAAM,CAACob,MAAM,CAAC,EACvB,CAACnO,cAAc,EAAEjN,MAAM,CAACqb,cAAc,CAAC,EACvC,CAAC5K,UAAU,CAAC,EACZ,CAACoB,YAAY,EAAE7R,MAAM,CAACsb,YAAY,CAAC,EACnC,CAACnI,YAAY,EAAEnT,MAAM,CAACub,YAAY,CAAC,EACnC,CAACtG,MAAM,CAAC,EACR,CAACa,kBAAkB,EAAE9V,MAAM,CAACwb,kBAAkB,CAAC,EAC/C,CAACzF,aAAa,EAAE/V,MAAM,CAACyb,aAAa,CAAC,EACrC,CAACxE,MAAM,CAAC,EACR,CAACK,iBAAiB,CAAC,EACnB,CAACC,QAAQ,CAAC,EACV,CAACS,IAAI,CAAC,CACN,CAAA;EAMF,EAAA,MAAM3b,OAAO,GAAG;MACdqf,KAAK,EAAA,CAAAX,aAAA,GAAE/a,MAAM,CAAC0b,KAAK,KAAA,IAAA,GAAAX,aAAA,GAAI/e,QAAQ;MAC/Bgf,OAAO,EAAEhb,MAAM,CAACgb,OAAAA;KACjB,CAAA;IAEDE,UAAU,CAAC3S,OAAO,CAAC,CAAC,CAACrK,SAAS,EAAE8B,MAAM,CAAC,KAAK;EAC1C2b,IAAAA,SAAS,CAACzd,SAAS,EAAE8B,MAAM,EAAE3D,OAAO,CAAC,CAAA;EACvC,GAAC,CAAC,CAAA;EACJ,CAAA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAASsf,SAASA,CAACzd,SAAS,EAAE8B,MAAM,EAAE4b,gBAAgB,EAAE;IACtD,IAAsCne,MAAM,GAAGzB,QAAQ,CAAA;EACvD,EAAA,IAA0Dgf,OAAO,CAAA;EAEjE,EAAA,IAAI,OAAOY,gBAAgB,KAAK,QAAQ,EAAE;EAAA,IAAA,IAAAC,qBAAA,CAAA;EACxCD,IAAAA,gBAAgB,GAEdA,gBACD,CAAA;MAEDne,MAAM,GAAA,CAAAoe,qBAAA,GAAGD,gBAAgB,CAACF,KAAK,KAAA,IAAA,GAAAG,qBAAA,GAAIpe,MAAM,CAAA;MACzCud,OAAO,GAAGY,gBAAgB,CAACZ,OAAO,CAAA;EACpC,GAAA;EAEA,EAAA,IAAI,OAAOY,gBAAgB,KAAK,UAAU,EAAE;EAC1CZ,IAAAA,OAAO,GAAGY,gBAAgB,CAAA;EAC5B,GAAA;IAEA,IAAIA,gBAAgB,YAAYte,WAAW,EAAE;EAC3CG,IAAAA,MAAM,GAAGme,gBAAgB,CAAA;EAC3B,GAAA;IAEA,MAAME,SAAS,GAAGre,MAAM,CAACgK,gBAAgB,CACvC,CAAA,cAAA,EAAiBvJ,SAAS,CAACb,UAAU,CAAA,EAAA,CACvC,CAAC,CAAA;EAGD,EAAA,IAAI,CAACG,WAAW,EAAE,EAAE;EAClB,IAAA,IAAIwd,OAAO,EAAE;EACXA,MAAAA,OAAO,CAAC,IAAIxc,YAAY,EAAE,EAAE;EAC1BO,QAAAA,SAAS,EAAEb,SAAS;EACpB8B,QAAAA,MAAAA;EACF,OAAC,CAAC,CAAA;EACJ,KAAC,MAAM;EACLwE,MAAAA,OAAO,CAACyW,GAAG,CAAC,IAAIzc,YAAY,EAAE,CAAC,CAAA;EACjC,KAAA;EACA,IAAA,OAAO,EAAE,CAAA;EACX,GAAA;IASA,OAAOT,KAAK,CAACwL,IAAI,CAACuS,SAAS,CAAC,CACzBC,GAAG,CAAE3f,QAAQ,IAAK;MACjB,IAAI;EAGF,MAAA,OAAO,OAAO4D,MAAM,KAAK,WAAW,GAChC,IAAI9B,SAAS,CAAC9B,QAAQ,EAAE4D,MAAM,CAAC,GAC/B,IAAI9B,SAAS,CAAC9B,QAAQ,CAAC,CAAA;OAC5B,CAAC,OAAOub,KAAK,EAAE;EACd,MAAA,IAAIqD,OAAO,EAAE;UACXA,OAAO,CAACrD,KAAK,EAAE;EACb1Y,UAAAA,OAAO,EAAE7C,QAAQ;EACjB2C,UAAAA,SAAS,EAAEb,SAAS;EACpB8B,UAAAA,MAAAA;EACF,SAAC,CAAC,CAAA;EACJ,OAAC,MAAM;EACLwE,QAAAA,OAAO,CAACyW,GAAG,CAACtD,KAAK,CAAC,CAAA;EACpB,OAAA;EAEA,MAAA,OAAO,IAAI,CAAA;EACb,KAAA;EACF,GAAC,CAAC,CACDqE,MAAM,CAAC7X,OAAO,CAAC,CAAA;EACpB,CAAA;EAUA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;;;;;;;;;;;;;;;;;;;;;;;;;"}