{"version":3,"file":"form-validator.bundle.mjs","sources":["../../../../node_modules/govuk-frontend/dist/govuk/common/index.mjs","../../../../node_modules/govuk-frontend/dist/govuk/errors/index.mjs","../../../../node_modules/govuk-frontend/dist/govuk/component.mjs","../../../../node_modules/govuk-frontend/dist/govuk/common/configuration.mjs","../../../../src/moj/helpers.mjs","../../../../src/moj/components/form-validator/form-validator.mjs"],"sourcesContent":["function getBreakpoint(name) {\n  const property = `--govuk-breakpoint-${name}`;\n  const value = window.getComputedStyle(document.documentElement).getPropertyValue(property);\n  return {\n    property,\n    value: value || undefined\n  };\n}\nfunction setFocus($element, options = {}) {\n  var _options$onBeforeFocu;\n  const isFocusable = $element.getAttribute('tabindex');\n  if (!isFocusable) {\n    $element.setAttribute('tabindex', '-1');\n  }\n  function onFocus() {\n    $element.addEventListener('blur', onBlur, {\n      once: true\n    });\n  }\n  function onBlur() {\n    var _options$onBlur;\n    (_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);\n    if (!isFocusable) {\n      $element.removeAttribute('tabindex');\n    }\n  }\n  $element.addEventListener('focus', onFocus, {\n    once: true\n  });\n  (_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);\n  $element.focus();\n}\nfunction isInitialised($root, moduleName) {\n  return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);\n}\n\n/**\n * Checks if GOV.UK Frontend is supported on this page\n *\n * Some browsers will load and run our JavaScript but GOV.UK Frontend\n * won't be supported.\n *\n * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support\n * @returns {boolean} Whether GOV.UK Frontend is supported on this page\n */\nfunction isSupported($scope = document.body) {\n  if (!$scope) {\n    return false;\n  }\n  return $scope.classList.contains('govuk-frontend-supported');\n}\nfunction isArray(option) {\n  return Array.isArray(option);\n}\nfunction isObject(option) {\n  return !!option && typeof option === 'object' && !isArray(option);\n}\nfunction isScope($scope) {\n  return !!$scope && ($scope instanceof Element || $scope instanceof Document);\n}\nfunction formatErrorMessage(Component, message) {\n  return `${Component.moduleName}: ${message}`;\n}\n/**\n * @typedef ComponentWithModuleName\n * @property {string} moduleName - Name of the component\n */\n\nexport { formatErrorMessage, getBreakpoint, isInitialised, isObject, isScope, isSupported, setFocus };\n//# sourceMappingURL=index.mjs.map\n","import { isObject, formatErrorMessage } from '../common/index.mjs';\n\nclass GOVUKFrontendError extends Error {\n  constructor(...args) {\n    super(...args);\n    this.name = 'GOVUKFrontendError';\n  }\n}\nclass SupportError extends GOVUKFrontendError {\n  /**\n   * Checks if GOV.UK Frontend is supported on this page\n   *\n   * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support\n   */\n  constructor($scope = document.body) {\n    const supportMessage = 'noModule' in HTMLScriptElement.prototype ? 'GOV.UK Frontend initialised without `<body class=\"govuk-frontend-supported\">` from template `<script>` snippet' : 'GOV.UK Frontend is not supported in this browser';\n    super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type=\"module\">`');\n    this.name = 'SupportError';\n  }\n}\nclass ConfigError extends GOVUKFrontendError {\n  constructor(...args) {\n    super(...args);\n    this.name = 'ConfigError';\n  }\n}\nclass ElementError extends GOVUKFrontendError {\n  constructor(messageOrOptions) {\n    let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';\n    if (isObject(messageOrOptions)) {\n      const {\n        component,\n        identifier,\n        element,\n        expectedType\n      } = messageOrOptions;\n      message = identifier;\n      message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';\n      if (component) {\n        message = formatErrorMessage(component, message);\n      }\n    }\n    super(message);\n    this.name = 'ElementError';\n  }\n}\nclass InitError extends GOVUKFrontendError {\n  constructor(componentOrMessage) {\n    const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\\`$root\\`) already initialised`);\n    super(message);\n    this.name = 'InitError';\n  }\n}\n/**\n * @import { ComponentWithModuleName } from '../common/index.mjs'\n */\n\nexport { ConfigError, ElementError, GOVUKFrontendError, InitError, SupportError };\n//# sourceMappingURL=index.mjs.map\n","import { isInitialised, isSupported } from './common/index.mjs';\nimport { InitError, ElementError, SupportError } from './errors/index.mjs';\n\nclass Component {\n  /**\n   * Returns the root element of the component\n   *\n   * @protected\n   * @returns {RootElementType} - the root element of component\n   */\n  get $root() {\n    return this._$root;\n  }\n  constructor($root) {\n    this._$root = void 0;\n    const childConstructor = this.constructor;\n    if (typeof childConstructor.moduleName !== 'string') {\n      throw new InitError(`\\`moduleName\\` not defined in component`);\n    }\n    if (!($root instanceof childConstructor.elementType)) {\n      throw new ElementError({\n        element: $root,\n        component: childConstructor,\n        identifier: 'Root element (`$root`)',\n        expectedType: childConstructor.elementType.name\n      });\n    } else {\n      this._$root = $root;\n    }\n    childConstructor.checkSupport();\n    this.checkInitialised();\n    const moduleName = childConstructor.moduleName;\n    this.$root.setAttribute(`data-${moduleName}-init`, '');\n  }\n  checkInitialised() {\n    const constructor = this.constructor;\n    const moduleName = constructor.moduleName;\n    if (moduleName && isInitialised(this.$root, moduleName)) {\n      throw new InitError(constructor);\n    }\n  }\n  static checkSupport() {\n    if (!isSupported()) {\n      throw new SupportError();\n    }\n  }\n}\n\n/**\n * @typedef ChildClass\n * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component\n */\n\n/**\n * @typedef {typeof Component & ChildClass} ChildClassConstructor\n */\nComponent.elementType = HTMLElement;\n\nexport { Component };\n//# sourceMappingURL=component.mjs.map\n","import { Component } from '../component.mjs';\nimport { ConfigError } from '../errors/index.mjs';\nimport { isObject, formatErrorMessage, isScope } from './index.mjs';\n\nconst configOverride = Symbol.for('configOverride');\nclass ConfigurableComponent extends Component {\n  [configOverride](param) {\n    return {};\n  }\n\n  /**\n   * Returns the root element of the component\n   *\n   * @protected\n   * @returns {ConfigurationType} - the root element of component\n   */\n  get config() {\n    return this._config;\n  }\n  constructor($root, config) {\n    super($root);\n    this._config = void 0;\n    const childConstructor = this.constructor;\n    if (!isObject(childConstructor.defaults)) {\n      throw new ConfigError(formatErrorMessage(childConstructor, 'Config passed as parameter into constructor but no defaults defined'));\n    }\n    const datasetConfig = normaliseDataset(childConstructor, this._$root.dataset);\n    this._config = mergeConfigs(childConstructor.defaults, config != null ? config : {}, this[configOverride](datasetConfig), datasetConfig);\n  }\n}\nfunction normaliseString(value, property) {\n  const trimmedValue = value ? value.trim() : '';\n  let output;\n  let outputType = property == null ? void 0 : property.type;\n  if (!outputType) {\n    if (['true', 'false'].includes(trimmedValue)) {\n      outputType = 'boolean';\n    }\n    if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {\n      outputType = 'number';\n    }\n  }\n  switch (outputType) {\n    case 'boolean':\n      output = trimmedValue === 'true';\n      break;\n    case 'number':\n      output = Number(trimmedValue);\n      break;\n    default:\n      output = value;\n  }\n  return output;\n}\nfunction normaliseDataset(Component, dataset) {\n  if (!isObject(Component.schema)) {\n    throw new ConfigError(formatErrorMessage(Component, 'Config passed as parameter into constructor but no schema defined'));\n  }\n  const out = {};\n  const entries = Object.entries(Component.schema.properties);\n  for (const entry of entries) {\n    const [namespace, property] = entry;\n    const field = namespace.toString();\n    if (field in dataset) {\n      out[field] = normaliseString(dataset[field], property);\n    }\n    if ((property == null ? void 0 : property.type) === 'object') {\n      out[field] = extractConfigByNamespace(Component.schema, dataset, namespace);\n    }\n  }\n  return out;\n}\nfunction normaliseOptions(scopeOrOptions) {\n  let $scope = document;\n  let onError;\n  if (isObject(scopeOrOptions)) {\n    const options = scopeOrOptions;\n    if (isScope(options.scope) || options.scope === null) {\n      $scope = options.scope;\n    }\n    if (typeof options.onError === 'function') {\n      onError = options.onError;\n    }\n  }\n  if (isScope(scopeOrOptions)) {\n    $scope = scopeOrOptions;\n  } else if (scopeOrOptions === null) {\n    $scope = null;\n  } else if (typeof scopeOrOptions === 'function') {\n    onError = scopeOrOptions;\n  }\n  return {\n    scope: $scope,\n    onError\n  };\n}\nfunction mergeConfigs(...configObjects) {\n  const formattedConfigObject = {};\n  for (const configObject of configObjects) {\n    for (const key of Object.keys(configObject)) {\n      const option = formattedConfigObject[key];\n      const override = configObject[key];\n      if (isObject(option) && isObject(override)) {\n        formattedConfigObject[key] = mergeConfigs(option, override);\n      } else {\n        formattedConfigObject[key] = override;\n      }\n    }\n  }\n  return formattedConfigObject;\n}\nfunction validateConfig(schema, config) {\n  const validationErrors = [];\n  for (const [name, conditions] of Object.entries(schema)) {\n    const errors = [];\n    if (Array.isArray(conditions)) {\n      for (const {\n        required,\n        errorMessage\n      } of conditions) {\n        if (!required.every(key => !!config[key])) {\n          errors.push(errorMessage);\n        }\n      }\n      if (name === 'anyOf' && !(conditions.length - errors.length >= 1)) {\n        validationErrors.push(...errors);\n      }\n    }\n  }\n  return validationErrors;\n}\nfunction extractConfigByNamespace(schema, dataset, namespace) {\n  const property = schema.properties[namespace];\n  if ((property == null ? void 0 : property.type) !== 'object') {\n    return;\n  }\n  const newObject = {\n    [namespace]: {}\n  };\n  for (const [key, value] of Object.entries(dataset)) {\n    let current = newObject;\n    const keyParts = key.split('.');\n    for (const [index, name] of keyParts.entries()) {\n      if (isObject(current)) {\n        if (index < keyParts.length - 1) {\n          if (!isObject(current[name])) {\n            current[name] = {};\n          }\n          current = current[name];\n        } else if (key !== namespace) {\n          current[name] = normaliseString(value);\n        }\n      }\n    }\n  }\n  return newObject[namespace];\n}\n/**\n * Schema for component config\n *\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType\n * @typedef {object} Schema\n * @property {Record<keyof ConfigurationType, SchemaProperty | undefined>} properties - Schema properties\n * @property {SchemaCondition<ConfigurationType>[]} [anyOf] - List of schema conditions\n */\n/**\n * Schema property for component config\n *\n * @typedef {object} SchemaProperty\n * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type\n */\n/**\n * Schema condition for component config\n *\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType\n * @typedef {object} SchemaCondition\n * @property {(keyof ConfigurationType)[]} required - List of required config fields\n * @property {string} errorMessage - Error message when required config fields not provided\n */\n/**\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]\n * @typedef ChildClass\n * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component\n * @property {Schema<ConfigurationType>} [schema] - The schema of the component configuration\n * @property {ConfigurationType} [defaults] - The default values of the configuration of the component\n */\n/**\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]\n * @typedef {typeof Component & ChildClass<ConfigurationType>} ChildClassConstructor<ConfigurationType>\n */\n/**\n * @import { CompatibleClass, Config, CreateAllOptions, OnErrorCallback } from '../init.mjs'\n */\n\nexport { ConfigurableComponent, configOverride, extractConfigByNamespace, mergeConfigs, normaliseDataset, normaliseOptions, normaliseString, validateConfig };\n//# sourceMappingURL=configuration.mjs.map\n","/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n  let re, m\n  if ($element.getAttribute(attr)) {\n    if ($element.getAttribute(attr) === value) {\n      $element.removeAttribute(attr)\n    } else {\n      re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n      m = $element.getAttribute(attr).match(re)\n      if (m && m.length === 3) {\n        $element.setAttribute(\n          attr,\n          $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n        )\n      }\n    }\n  }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n  let re\n  if (!$element.getAttribute(attr)) {\n    $element.setAttribute(attr, value)\n  } else {\n    re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n    if (!re.test($element.getAttribute(attr))) {\n      $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n    }\n  }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n  if (!$element || !($element instanceof HTMLElement)) {\n    return\n  }\n\n  // Get the next sibling element\n  let $sibling = $element.nextElementSibling\n\n  // If there's no selector, return the first sibling\n  if (!selector) return $sibling\n\n  // If the sibling matches our selector, use it\n  // If not, jump to the next sibling and continue the loop\n  while ($sibling) {\n    if ($sibling.matches(selector)) return $sibling\n    $sibling = $sibling.nextElementSibling\n  }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n  if (!$element || !($element instanceof HTMLElement)) {\n    return\n  }\n\n  // Get the previous sibling element\n  let $sibling = $element.previousElementSibling\n\n  // If there's no selector, return the first sibling\n  if (!selector) return $sibling\n\n  // If the sibling matches our selector, use it\n  // If not, jump to the next sibling and continue the loop\n  while ($sibling) {\n    if ($sibling.matches(selector)) return $sibling\n    $sibling = $sibling.previousElementSibling\n  }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n  // If no element or selector is provided, return\n  if (!$element || !($element instanceof HTMLElement) || !selector) {\n    return\n  }\n\n  // Start with the current element\n  let $currentElement = $element\n\n  while ($currentElement) {\n    // First check the current element\n    if ($currentElement.matches(selector)) {\n      return $currentElement\n    }\n\n    // Check all previous siblings\n    let $sibling = $currentElement.previousElementSibling\n    while ($sibling) {\n      // Check if the sibling itself is a heading\n      if ($sibling.matches(selector)) {\n        return $sibling\n      }\n      $sibling = $sibling.previousElementSibling\n    }\n\n    // If no match found in siblings, move up to parent\n    $currentElement = $currentElement.parentElement\n  }\n}\n","import { ConfigurableComponent } from 'govuk-frontend'\n\nimport { addAttributeValue, removeAttributeValue } from '../../helpers.mjs'\n\n/**\n * @augments {ConfigurableComponent<FormValidatorConfig, HTMLFormElement>}\n */\nexport class FormValidator extends ConfigurableComponent {\n  /**\n   * @param {Element | null} $root - HTML element to use for form validator\n   * @param {FormValidatorConfig} [config] - Form validator config\n   */\n  constructor($root, config = {}) {\n    super($root, config)\n\n    const $summary =\n      this.config.summary.element ||\n      document.querySelector(this.config.summary.selector)\n\n    if (!$summary || !($summary instanceof HTMLElement)) {\n      return this\n    }\n\n    this.$summary = $summary\n\n    this.errors = /** @type {ValidationError[]} */ ([])\n    this.validators = /** @type {Validator[]} */ ([])\n    this.originalTitle = document.title\n\n    this.$root.addEventListener('submit', this.onSubmit.bind(this))\n  }\n\n  escapeHtml(string = '') {\n    return String(string).replace(\n      /[&<>\"'`=/]/g,\n      (name) => FormValidator.entityMap[name]\n    )\n  }\n\n  resetTitle() {\n    document.title = this.originalTitle\n  }\n\n  updateTitle() {\n    document.title = `${this.errors.length} errors - ${document.title}`\n  }\n\n  showSummary() {\n    this.$summary.innerHTML = this.getSummaryHtml()\n    this.$summary.classList.remove('moj-hidden')\n    this.$summary.setAttribute('aria-labelledby', 'errorSummary-heading')\n    this.$summary.focus()\n  }\n\n  getSummaryHtml() {\n    let html =\n      '<h2 id=\"error-summary-title\" class=\"govuk-error-summary__title\">There is a problem</h2>'\n    html += '<div class=\"govuk-error-summary__body\">'\n    html += '<ul class=\"govuk-list govuk-error-summary__list\">'\n    for (const error of this.errors) {\n      html += '<li>'\n      html += `<a href=\"#${this.escapeHtml(error.fieldName)}\">`\n      html += this.escapeHtml(error.message)\n      html += '</a>'\n      html += '</li>'\n    }\n    html += '</ul>'\n    html += '</div>'\n    return html\n  }\n\n  hideSummary() {\n    this.$summary.classList.add('moj-hidden')\n    this.$summary.removeAttribute('aria-labelledby')\n  }\n\n  /**\n   * @param {SubmitEvent} event - Form submit event\n   */\n  onSubmit(event) {\n    this.removeInlineErrors()\n    this.hideSummary()\n    this.resetTitle()\n    if (!this.validate()) {\n      event.preventDefault()\n      this.updateTitle()\n      this.showSummary()\n      this.showInlineErrors()\n    }\n  }\n\n  showInlineErrors() {\n    for (const error of this.errors) {\n      this.showInlineError(error)\n    }\n  }\n\n  /**\n   * @param {ValidationError} error\n   */\n  showInlineError(error) {\n    const $errorSpan = document.createElement('span')\n    $errorSpan.id = `${error.fieldName}-error`\n    $errorSpan.classList.add('govuk-error-message')\n    $errorSpan.innerHTML = this.escapeHtml(error.message)\n\n    const $control = document.querySelector(`#${error.fieldName}`)\n    const $fieldset = $control.closest('.govuk-fieldset')\n    const $fieldContainer = ($fieldset || $control).closest('.govuk-form-group')\n\n    const $label = $fieldContainer.querySelector('label')\n    const $legend = $fieldContainer.querySelector('legend')\n\n    $fieldContainer.classList.add('govuk-form-group--error')\n\n    if ($fieldset && $legend) {\n      $legend.after($errorSpan)\n      $fieldContainer.setAttribute('aria-invalid', 'true')\n      addAttributeValue($fieldset, 'aria-describedby', $errorSpan.id)\n    } else if ($label && $control) {\n      $label.after($errorSpan)\n      $control.setAttribute('aria-invalid', 'true')\n      addAttributeValue($control, 'aria-describedby', $errorSpan.id)\n    }\n  }\n\n  removeInlineErrors() {\n    for (const error of this.errors) {\n      this.removeInlineError(error)\n    }\n  }\n\n  /**\n   * @param {ValidationError} error\n   */\n  removeInlineError(error) {\n    const $errorSpan = document.querySelector(`#${error.fieldName}-error`)\n\n    const $control = document.querySelector(`#${error.fieldName}`)\n    const $fieldset = $control.closest('.govuk-fieldset')\n    const $fieldContainer = ($fieldset || $control).closest('.govuk-form-group')\n\n    const $label = $fieldContainer.querySelector('label')\n    const $legend = $fieldContainer.querySelector('legend')\n\n    $errorSpan.remove()\n    $fieldContainer.classList.remove('govuk-form-group--error')\n\n    if ($fieldset && $legend) {\n      $fieldContainer.removeAttribute('aria-invalid')\n      removeAttributeValue($fieldset, 'aria-describedby', $errorSpan.id)\n    } else if ($label && $control) {\n      $control.removeAttribute('aria-invalid')\n      removeAttributeValue($control, 'aria-describedby', $errorSpan.id)\n    }\n  }\n\n  /**\n   * @param {string} fieldName - Field name\n   * @param {ValidationRule[]} rules - Validation rules\n   */\n  addValidator(fieldName, rules) {\n    this.validators.push({\n      fieldName,\n      rules,\n      field: this.$root.elements.namedItem(fieldName)\n    })\n  }\n\n  validate() {\n    this.errors = []\n\n    /** @type {Validator | null} */\n    let validator = null\n\n    /** @type {boolean | string} */\n    let validatorReturnValue = true\n\n    let i\n    let j\n\n    for (i = 0; i < this.validators.length; i++) {\n      validator = this.validators[i]\n      for (j = 0; j < validator.rules.length; j++) {\n        validatorReturnValue = validator.rules[j].method(\n          validator.field,\n          validator.rules[j].params\n        )\n\n        if (\n          typeof validatorReturnValue === 'boolean' &&\n          !validatorReturnValue\n        ) {\n          this.errors.push({\n            fieldName: validator.fieldName,\n            message: validator.rules[j].message\n          })\n          break\n        } else if (typeof validatorReturnValue === 'string') {\n          this.errors.push({\n            fieldName: validatorReturnValue,\n            message: validator.rules[j].message\n          })\n          break\n        }\n      }\n    }\n    return this.errors.length === 0\n  }\n\n  /**\n   * @type {Record<string, string>}\n   */\n  static entityMap = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;',\n    '/': '&#x2F;',\n    '`': '&#x60;',\n    '=': '&#x3D;'\n  }\n\n  /**\n   * Name for the component used when initialising using data-module attributes.\n   */\n  static moduleName = 'moj-form-validator'\n\n  /**\n   * Multi file upload default config\n   *\n   * @type {FormValidatorConfig}\n   */\n  static defaults = Object.freeze({\n    summary: {\n      selector: '.govuk-error-summary'\n    }\n  })\n\n  /**\n   * Multi file upload config schema\n   *\n   * @satisfies {Schema<FormValidatorConfig>}\n   */\n  static schema = Object.freeze(\n    /** @type {const} */ ({\n      properties: {\n        summary: { type: 'object' }\n      }\n    })\n  )\n}\n\n/**\n * @typedef {object} FormValidatorConfig\n * @property {object} [summary] - Error summary config\n * @property {string} [summary.selector] - Selector for error summary\n * @property {Element | null} [summary.element] - HTML element for error summary\n */\n\n/**\n * @typedef {object} ValidationRule\n * @property {(field: Validator['field'], params: Record<string, Validator['field']>) => boolean | string} method - Validation method\n * @property {string} message - Error message\n * @property {Record<string, Validator['field']>} [params] - Parameters for validation\n */\n\n/**\n * @typedef {object} ValidationError\n * @property {string} fieldName - Name of the field\n * @property {string} message - Validation error message\n */\n\n/**\n * @typedef {object} Validator\n * @property {string} fieldName - Name of the field\n * @property {ValidationRule[]} rules - Validation rules\n * @property {Element | RadioNodeList} field - Form field\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n"],"names":["isInitialised","$root","moduleName","HTMLElement","hasAttribute","isSupported","$scope","document","body","classList","contains","isArray","option","Array","isObject","formatErrorMessage","Component","message","GOVUKFrontendError","Error","constructor","args","name","SupportError","supportMessage","HTMLScriptElement","prototype","ConfigError","ElementError","messageOrOptions","component","identifier","element","expectedType","InitError","componentOrMessage","_$root","childConstructor","elementType","checkSupport","checkInitialised","setAttribute","configOverride","Symbol","for","ConfigurableComponent","param","config","_config","defaults","datasetConfig","normaliseDataset","dataset","mergeConfigs","normaliseString","value","property","trimmedValue","trim","output","outputType","type","includes","length","isFinite","Number","schema","out","entries","Object","properties","entry","namespace","field","toString","extractConfigByNamespace","configObjects","formattedConfigObject","configObject","key","keys","override","newObject","current","keyParts","split","index","removeAttributeValue","$element","attr","re","m","getAttribute","removeAttribute","RegExp","match","replace","addAttributeValue","test","FormValidator","$summary","summary","querySelector","selector","errors","validators","originalTitle","title","addEventListener","onSubmit","bind","escapeHtml","string","String","entityMap","resetTitle","updateTitle","showSummary","innerHTML","getSummaryHtml","remove","focus","html","error","fieldName","hideSummary","add","event","removeInlineErrors","validate","preventDefault","showInlineErrors","showInlineError","$errorSpan","createElement","id","$control","$fieldset","closest","$fieldContainer","$label","$legend","after","removeInlineError","addValidator","rules","push","elements","namedItem","validator","validatorReturnValue","i","j","method","params","freeze"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}