{"version":3,"file":"ngx-validators.mjs","sources":["../../../projects/ngx-validators/src/lib/abstract-control-util.ts","../../../projects/ngx-validators/src/lib/password/password-validators.ts","../../../projects/ngx-validators/src/lib/email/email-util.ts","../../../projects/ngx-validators/src/lib/email/email-validators.ts","../../../projects/ngx-validators/src/lib/universal/universal-validators.ts","../../../projects/ngx-validators/src/lib/creditcard/creditcard-validators.ts","../../../projects/ngx-validators/src/lib/password/password.directive.ts","../../../projects/ngx-validators/src/lib/email/email.directive.ts","../../../projects/ngx-validators/src/lib/universal/universal.directive.ts","../../../projects/ngx-validators/src/lib/creditcard/creditcard.directive.ts","../../../projects/ngx-validators/src/lib/equal-to/equal-to.directive.ts","../../../projects/ngx-validators/src/lib/validators.module.ts","../../../projects/ngx-validators/src/lib/equal-to/equal-to-validator.ts","../../../projects/ngx-validators/src/public-api.ts","../../../projects/ngx-validators/src/ngx-validators.ts"],"sourcesContent":["import type { AbstractControl } from \"@angular/forms\";\n\nexport class AbstractControlUtil {\n  static isNotPresent(control: AbstractControl): boolean {\n    const value = control.value;\n    if (value === undefined || value === null) {\n      return true;\n    }\n    return value !== \"\" ? false : true;\n  }\n\n  static addError(\n    control: AbstractControl | null,\n    errorId: string,\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    value: any\n  ) {\n    if (!control) {\n      return;\n    }\n    if (!control.errors) {\n      control.setErrors({ [errorId]: value });\n    } else if (!control.hasError(errorId)) {\n      control.errors[errorId] = value;\n    }\n  }\n\n  static removeError(control: AbstractControl | null, errorId: string) {\n    if (!control) {\n      return;\n    }\n    if (control.errors && control.hasError(errorId)) {\n      if (Object.keys(control.errors).length > 1) {\n        delete control.errors[errorId];\n      } else {\n        control.setErrors(null);\n      }\n    }\n  }\n}\n","import type { AbstractControl, ValidatorFn, ValidationErrors } from \"@angular/forms\";\nimport { AbstractControlUtil } from \"./../abstract-control-util\";\n\n// tslint:disable-next-line:variable-name\nexport class PasswordValidators {\n  public static repeatCharacterRegexRule(repeatCount: number) {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const repeatDec = repeatCount - 1;\n      const pattern = \"([^\\\\x00-\\\\x1F])\\\\1{\" + repeatDec + \"}\";\n      if (control.value !== \"\" && new RegExp(pattern).test(control.value)) {\n        return { repeatCharacterRegexRule: { repeatCount } };\n      }\n      return null;\n    };\n    return validator;\n  }\n\n  public static allowedCharacterRule(allowedChars: string[]): ValidatorFn {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const value: string = control.value;\n      let valid = true;\n      const invalidChars: string[] = [];\n\n      for (const char of value) {\n        if (allowedChars.indexOf(char) === -1) {\n          valid = false;\n          if (invalidChars.indexOf(char) === -1) {\n            invalidChars.push(char);\n          }\n        }\n      }\n      if (!valid) {\n        return {\n          allowedCharacterRule: {\n            invalidChars,\n            allowedChars,\n          },\n        };\n      }\n      return null;\n    };\n    return validator;\n  }\n\n  public static alphabeticalCharacterRule(amount: number): ValidatorFn {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const value: string = control.value;\n      if (value.length === 0) {\n        return null;\n      }\n      const pattern = /[^A-Za-z]+/g;\n      const stripped = value.replace(pattern, \"\");\n      if (stripped.length < amount) {\n        return {\n          alphabeticalCharacterRule: {\n            required: amount,\n            actual: stripped.length,\n          },\n        };\n      }\n      return null;\n    };\n    return validator;\n  }\n\n  public static digitCharacterRule(amount: number): ValidatorFn {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const value: string = control.value;\n      if (value.length === 0) {\n        return null;\n      }\n      const pattern = /[^0-9.]+/g;\n      const stripped = value.replace(pattern, \"\");\n      if (stripped.length < amount) {\n        return {\n          digitCharacterRule: { required: amount, actual: stripped.length },\n        };\n      }\n      return null;\n    };\n    return validator;\n  }\n\n  public static lowercaseCharacterRule(amount: number): ValidatorFn {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const value: string = control.value;\n      if (value.length === 0) {\n        return null;\n      }\n      const pattern = /[^a-z]+/g;\n      const stripped = value.replace(pattern, \"\");\n      if (stripped.length < amount) {\n        return {\n          lowercaseCharacterRule: { required: amount, actual: stripped.length },\n        };\n      }\n      return null;\n    };\n    return validator;\n  }\n\n  public static uppercaseCharacterRule(amount: number): ValidatorFn {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const value: string = control.value;\n      if (value.length === 0) {\n        return null;\n      }\n      const pattern = /[^A-Z]+/g;\n      const stripped = value.replace(pattern, \"\");\n      if (stripped.length < amount) {\n        return {\n          uppercaseCharacterRule: { required: amount, actual: stripped.length },\n        };\n      }\n      return null;\n    };\n    return validator;\n  }\n\n  public static specialCharacterRule(amount: number): ValidatorFn {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const value: string = control.value;\n      if (value.length === 0) {\n        return null;\n      }\n      const pattern = /[\\w\\s]+/g;\n      const stripped = value.replace(pattern, \"\");\n      if (stripped.length < amount) {\n        return {\n          specialCharacterRule: { required: amount, actual: stripped.length },\n        };\n      }\n      return null;\n    };\n    return validator;\n  }\n\n  public static mismatchedPasswords(passwordControlName?: string, confirmPasswordControlName?: string): ValidatorFn {\n    const validator = (group: AbstractControl): ValidationErrors | null => {\n      const newPasswordValue = group.get(passwordControlName ? passwordControlName : \"newPassword\")?.value;\n\n      const newPasswordConfirmValue = group.get(\n        confirmPasswordControlName ? confirmPasswordControlName : \"confirmPassword\"\n      )?.value;\n      if (newPasswordValue !== newPasswordConfirmValue) {\n        AbstractControlUtil.addError(\n          group.get(confirmPasswordControlName ? confirmPasswordControlName : \"confirmPassword\"),\n          \"mismatchedPasswords\",\n          true\n        );\n\n        return { mismatchedPasswords: true };\n      } else {\n        AbstractControlUtil.removeError(\n          group.get(confirmPasswordControlName ? confirmPasswordControlName : \"confirmPassword\"),\n          \"mismatchedPasswords\"\n        );\n      }\n      return null;\n    };\n    return validator;\n  }\n}\n","/*\n * Code fromMailcheck https://github.com/mailcheck/mailcheck\n * Author\n * Derrick Ko (@derrickko)\n *\n * Released under the MIT License.\n *\n * v 1.1.2\n */\n\nexport interface EmailOptions {\n  domains: string[];\n  secondLevelDomains: string[];\n  topLevelDomains: string[];\n}\n\nexport interface SplittedEmail {\n  topLevelDomain: string;\n  secondLevelDomain: string;\n  domain: string;\n  address: string;\n}\n\nexport interface Suggestion {\n  address: string;\n  domain: string;\n  full: string;\n}\n\ninterface Offset {\n  c1: number;\n  c2: number;\n  trans: boolean;\n}\n\nexport class EmailSuggestion {\n  private defaultOptions: EmailOptions = {\n    domains: [\n      \"msn.com\",\n      \"bellsouth.net\",\n      \"telus.net\",\n      \"comcast.net\",\n      \"optusnet.com.au\",\n      \"earthlink.net\",\n      \"qq.com\",\n      \"sky.com\",\n      \"icloud.com\",\n      \"mac.com\",\n      \"sympatico.ca\",\n      \"googlemail.com\",\n      \"att.net\",\n      \"xtra.co.nz\",\n      \"web.de\",\n      \"cox.net\",\n      \"gmail.com\",\n      \"ymail.com\",\n      \"yahoo.com\",\n      \"aim.com\",\n      \"rogers.com\",\n      \"verizon.net\",\n      \"rocketmail.com\",\n      \"google.com\",\n      \"optonline.net\",\n      \"sbcglobal.net\",\n      \"aol.com\",\n      \"me.com\",\n      \"btinternet.com\",\n      \"charter.net\",\n      \"shaw.ca\",\n    ],\n    secondLevelDomains: [\"yahoo\", \"hotmail\", \"mail\", \"live\", \"outlook\", \"gmx\"],\n    topLevelDomains: [\n      \"com\",\n      \"com.au\",\n      \"com.tw\",\n      \"ca\",\n      \"co.nz\",\n      \"co.uk\",\n      \"de\",\n      \"fr\",\n      \"it\",\n      \"ru\",\n      \"net\",\n      \"org\",\n      \"edu\",\n      \"gov\",\n      \"jp\",\n      \"nl\",\n      \"kr\",\n      \"se\",\n      \"eu\",\n      \"ie\",\n      \"co.il\",\n      \"us\",\n      \"at\",\n      \"be\",\n      \"dk\",\n      \"hk\",\n      \"es\",\n      \"gr\",\n      \"ch\",\n      \"no\",\n      \"cz\",\n      \"in\",\n      \"net\",\n      \"net.au\",\n      \"info\",\n      \"biz\",\n      \"mil\",\n      \"co.jp\",\n      \"sg\",\n      \"hu\",\n      \"uk\",\n    ],\n  };\n\n  public suggest(email: string, options?: EmailOptions): { [key: string]: Suggestion } | null {\n    let opt = this.defaultOptions;\n    if (options !== undefined) {\n      opt = options;\n    }\n    const emailParts = this.splitEmail(email.toLowerCase());\n\n    if (!emailParts) {\n      return null;\n    }\n\n    if (opt.secondLevelDomains && opt.topLevelDomains) {\n      // If the email is a valid 2nd-level + top-level, do not suggest anything.\n      if (\n        opt.secondLevelDomains.indexOf(emailParts.secondLevelDomain) !== -1 &&\n        opt.topLevelDomains.indexOf(emailParts.topLevelDomain) !== -1\n      ) {\n        return null;\n      }\n    }\n\n    let closestDomain = this.findClosestDomain(emailParts.domain ?? \"\", opt.domains, 2);\n    if (closestDomain) {\n      if (closestDomain === emailParts.domain) {\n        // The email address exactly matches one of the supplied domains; do not return a suggestion.\n        return null;\n      } else {\n        // The email address closely matches one of the supplied domains; return a suggestion\n        return {\n          suggestion: {\n            address: emailParts.address,\n            domain: closestDomain,\n            full: emailParts.address + \"@\" + closestDomain,\n          },\n        };\n      }\n    }\n\n    const closestSecondLevelDomain = this.findClosestDomain(emailParts.secondLevelDomain, opt.secondLevelDomains, 2);\n    const closestTopLevelDomain = this.findClosestDomain(emailParts.topLevelDomain, opt.topLevelDomains, 2);\n\n    if (emailParts.domain) {\n      closestDomain = emailParts.domain;\n      let rtrn = false;\n\n      if (closestSecondLevelDomain && closestSecondLevelDomain !== emailParts.secondLevelDomain) {\n        // The email address may have a mispelled second-level domain; return a suggestion\n        closestDomain = closestDomain.replace(emailParts.secondLevelDomain, closestSecondLevelDomain);\n        rtrn = true;\n      }\n\n      if (\n        closestTopLevelDomain &&\n        closestTopLevelDomain !== emailParts.topLevelDomain &&\n        emailParts.secondLevelDomain !== \"\"\n      ) {\n        // The email address may have a mispelled top-level domain; return a suggestion\n        closestDomain = closestDomain.replace(new RegExp(emailParts.topLevelDomain + \"$\"), closestTopLevelDomain);\n        rtrn = true;\n      }\n\n      if (rtrn) {\n        return {\n          suggestion: {\n            address: emailParts.address,\n            domain: closestDomain,\n            full: emailParts.address + \"@\" + closestDomain,\n          },\n        };\n      }\n    }\n\n    /* The email address exactly matches one of the supplied domains, does not closely\n     * match any domain and does not appear to simply have a mispelled top-level domain,\n     * or is an invalid email address; do not return a suggestion.\n     */\n    return null;\n  }\n\n  public splitEmail(email: string) {\n    const parts = email.trim().split(\"@\");\n\n    if (parts.length < 2) {\n      return null;\n    }\n\n    // tslint:disable-next-line: prefer-for-of\n    for (let i = 0; i < parts.length; i++) {\n      if (parts[i] === \"\") {\n        return null;\n      }\n    }\n\n    const result = {\n      topLevelDomain: \"\",\n      secondLevelDomain: \"\",\n      domain: parts.pop(),\n      address: \"\",\n    };\n\n    const domainParts = result.domain?.split(\".\");\n\n    if (!domainParts) {\n      return null;\n    }\n\n    if (domainParts.length === 0) {\n      return null;\n    } else if (domainParts.length === 1) {\n      result.topLevelDomain = domainParts[0];\n    } else {\n      // The address has a domain and a top-level domain\n      result.secondLevelDomain = domainParts[0];\n      for (let j = 1; j < domainParts.length; j++) {\n        result.topLevelDomain += domainParts[j] + \".\";\n      }\n      result.topLevelDomain = result.topLevelDomain.substring(0, result.topLevelDomain.length - 1);\n    }\n\n    result.address = parts.join(\"@\");\n\n    return result;\n  }\n\n  private findClosestDomain(domain: string, domains: string[], threshold: number): string | null {\n    let dist;\n    let minDist = Infinity;\n    let closestDomain = null;\n\n    if (!domain || !domains) {\n      return null;\n    }\n\n    // tslint:disable-next-line: prefer-for-of\n    for (let i = 0; i < domains.length; i++) {\n      if (domain === domains[i]) {\n        return domain;\n      }\n      dist = this.sift4Distance(domain, domains[i], 5);\n      if (dist < minDist) {\n        minDist = dist;\n        closestDomain = domains[i];\n      }\n    }\n\n    if (minDist <= threshold && closestDomain !== null) {\n      return closestDomain;\n    } else {\n      return null;\n    }\n  }\n\n  private sift4Distance(s1: string, s2: string, maxOffset: number): number {\n    // sift4: https://siderite.blogspot.com/2014/11/super-fast-and-accurate-string-distance.html\n    if (maxOffset === null) {\n      maxOffset = 5; // default\n    }\n\n    if (!s1 || !s1.length) {\n      if (!s2) {\n        return 0;\n      }\n      return s2.length;\n    }\n\n    if (!s2 || !s2.length) {\n      return s1.length;\n    }\n\n    const l1 = s1.length;\n    const l2 = s2.length;\n\n    let c1 = 0; // cursor for string 1\n    let c2 = 0; // cursor for string 2\n    let lcss = 0; // largest common subsequence\n    let localCS = 0; // local common substring\n    let trans = 0; // number of transpositions ('ab' vs 'ba')\n    const offsetArr: Offset[] = []; // offset pair array, for computing the transpositions\n\n    while (c1 < l1 && c2 < l2) {\n      if (s1.charAt(c1) === s2.charAt(c2)) {\n        localCS++;\n        let isTrans = false;\n        // see if current match is a transposition\n        let i = 0;\n        while (i < offsetArr.length) {\n          const ofs = offsetArr[i];\n          if (c1 <= ofs.c1 || c2 <= ofs.c2) {\n            // when two matches cross, the one considered a transposition is the one with the largest difference in offsets\n            isTrans = Math.abs(c2 - c1) >= Math.abs(ofs.c2 - ofs.c1);\n            if (isTrans) {\n              trans++;\n            } else {\n              if (!ofs.trans) {\n                ofs.trans = true;\n                trans++;\n              }\n            }\n            break;\n          } else {\n            if (c1 > ofs.c2 && c2 > ofs.c1) {\n              offsetArr.splice(i, 1);\n            } else {\n              i++;\n            }\n          }\n        }\n        offsetArr.push({\n          c1,\n          c2,\n          trans: isTrans,\n        });\n      } else {\n        lcss += localCS;\n        localCS = 0;\n        if (c1 !== c2) {\n          c1 = c2 = Math.min(c1, c2); // using min allows the computation of transpositions\n        }\n        // if matching characters are found, remove 1 from both cursors (they get incremented at the end of the loop)\n        // so that we can have only one code block handling matches\n        for (let j = 0; j < maxOffset && (c1 + j < l1 || c2 + j < l2); j++) {\n          if (c1 + j < l1 && s1.charAt(c1 + j) === s2.charAt(c2)) {\n            c1 += j - 1;\n            c2--;\n            break;\n          }\n          if (c2 + j < l2 && s1.charAt(c1) === s2.charAt(c2 + j)) {\n            c1--;\n            c2 += j - 1;\n            break;\n          }\n        }\n      }\n      c1++;\n      c2++;\n      // this covers the case where the last match is on the last token in list, so that it can compute transpositions correctly\n      if (c1 >= l1 || c2 >= l2) {\n        lcss += localCS;\n        localCS = 0;\n        c1 = c2 = Math.min(c1, c2);\n      }\n    }\n    lcss += localCS;\n    return Math.round(Math.max(l1, l2) - lcss + trans); // add the cost of transpositions to the final result\n  }\n}\n","import type { AbstractControl, ValidatorFn, ValidationErrors } from \"@angular/forms\";\nimport { AbstractControlUtil } from \"./../abstract-control-util\";\nimport type { EmailOptions } from \"./email-util\";\nimport { EmailSuggestion } from \"./email-util\";\n\nexport class EmailValidators {\n  private static emailSuggestion: EmailSuggestion = new EmailSuggestion();\n\n  public static simple(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) {\n      return null;\n    }\n\n    const pattern = /.+@.+\\..+/i;\n    if (pattern.test(control.value)) {\n      return null;\n    }\n    return { simpleEmailRule: true };\n  }\n\n  // https://www.w3.org/TR/html5/forms.html#valid-e-mail-address\n  public static normal(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) {\n      return null;\n    }\n\n    const pattern =\n      // tslint:disable-next-line:max-line-length\n      /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n    if (pattern.test(control.value)) {\n      return null;\n    }\n    return { normalEmailRule: true };\n  }\n\n  public static suggest(options?: EmailOptions): ValidatorFn {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) {\n        return null;\n      }\n      return this.emailSuggestion.suggest(control.value, options);\n    };\n    return validator;\n  }\n}\n","import type { AbstractControl, ValidatorFn, ValidationErrors } from \"@angular/forms\";\nimport { AbstractControlUtil } from \"../abstract-control-util\";\n\nexport class UniversalValidators {\n  public static noWhitespace(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) return null;\n    const pattern = \"\\\\s\";\n    if (new RegExp(pattern).test(control.value)) {\n      return { noWhitespaceRequired: true };\n    }\n    return null;\n  }\n\n  public static noEmptyString(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) return null;\n    if (control.value.trim().length === 0) {\n      return { noEmptyString: true };\n    }\n    return null;\n  }\n\n  public static isNumber(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) return null;\n    if (isNaN(control.value)) {\n      return { numberRequired: true };\n    }\n    return null;\n  }\n\n  public static isInRange(minValue: number, maxValue: number): ValidatorFn {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      if (isNaN(control.value)) {\n        return { numberRequired: true };\n      }\n      if (+control.value < minValue) {\n        return {\n          rangeValueToSmall: {\n            requiredMinValue: minValue,\n            requiredMaxValue: maxValue,\n            actual: control.value,\n          },\n        };\n      }\n\n      if (+control.value > maxValue) {\n        return {\n          rangeValueToBig: {\n            requiredMinValue: minValue,\n            requiredMaxValue: maxValue,\n            actual: control.value,\n          },\n        };\n      } else {\n        return null;\n      }\n    };\n    return validator;\n  }\n\n  public static minLength(minLength: number) {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const value: string = control.value;\n      if (value.length >= minLength) {\n        return null;\n      }\n      return {\n        minLength: { requiredMinLength: minLength, actualLength: value.length },\n      };\n    };\n    return validator;\n  }\n\n  public static maxLength(maxLength: number) {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const value: string = control.value;\n      if (maxLength >= value.length) {\n        return null;\n      }\n      return {\n        maxLength: { requiredMaxLength: maxLength, actualLength: value.length },\n      };\n    };\n    return validator;\n  }\n\n  public static min(min: number) {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const value: string = control.value;\n      if (isNaN(control.value)) {\n        return { numberRequired: true };\n      }\n      if (+value >= min) {\n        return null;\n      }\n      return { min: { required: min, actual: control.value } };\n    };\n    return validator;\n  }\n\n  public static max(max: number) {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const value: string = control.value;\n      if (isNaN(control.value)) {\n        return { numberRequired: true };\n      }\n      if (max >= +value) {\n        return null;\n      }\n      return { max: { required: max, actual: control.value } };\n    };\n    return validator;\n  }\n\n  public static minDate(minDate: Date) {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const date: Date = new Date(control.value);\n      if (isNaN(date.getTime())) {\n        return { dateRequired: true };\n      }\n      if (date.getTime() >= minDate.getTime()) {\n        return null;\n      }\n      return { minDate: { required: minDate, actual: date } };\n    };\n    return validator;\n  }\n\n  public static maxDate(minDate: Date) {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const date: Date = new Date(control.value);\n      if (isNaN(date.getTime())) {\n        return { dateRequired: true };\n      }\n      if (date.getTime() <= minDate.getTime()) {\n        return null;\n      }\n      return { maxDate: { required: minDate, actual: date } };\n    };\n    return validator;\n  }\n\n  /**\n   * @description\n   * Validator that requires the control's type to equal to the provided type.\n   *\n   * @usageNotes\n   *\n   * ### Validate against a string type\n   *\n   * ```typescript\n   * const control = new FormControl(2, Validators.type('string'));\n   *\n   * console.log(control.errors); // {type: {required: 'string', actual: 'number'}}\n   * ```\n   *\n   * @returns A validator function that returns an error map with the\n   * `type` property if the validation check fails, otherwise `null`.\n   *\n   */\n  public static type(type: \"number\" | \"string\" | \"object\" | \"boolean\") {\n    const validator = (control: AbstractControl): ValidationErrors | null => {\n      if (AbstractControlUtil.isNotPresent(control)) return null;\n      const typeOfControl = typeof control.value;\n      return typeOfControl !== type ? { type: { required: type, actual: typeOfControl } } : null;\n    };\n    return validator;\n  }\n}\n","import type { AbstractControl, ValidationErrors } from \"@angular/forms\";\nimport { AbstractControlUtil } from \"./../abstract-control-util\";\n\nconst visaRegex = \"^(?:4[0-9]{12})(?:[0-9]{3})?$\";\nconst americanExpressRegex = \"^(?:3[47][0-9]{13})$\";\nconst maestroRegex = \"^(?:(?:5[0678]\\\\d\\\\d|6304|6390|67\\\\d\\\\d)\\\\d{8,15})$\";\nconst jcbRegex = \"^(?:(?:2131|1800|35\\\\d{3})\\\\d{11})$\";\nconst discoverRegex = \"^(?:6(?:011|5[0-9]{2})(?:[0-9]{12}))$\";\nconst dinersclubRegex = \"^(?:3(?:0[0-5]|[68][0-9])[0-9]{11})$\";\nconst mastercardRegex = \"^(?:5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}$\";\n\nexport class CreditCardValidators {\n  public static isCreditCard(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) return null;\n    if (\n      new RegExp(\n        americanExpressRegex +\n          \"|\" +\n          visaRegex +\n          \"|\" +\n          maestroRegex +\n          \"|\" +\n          jcbRegex +\n          \"|\" +\n          discoverRegex +\n          \"|\" +\n          mastercardRegex +\n          \"|\" +\n          dinersclubRegex\n      ).test(control.value)\n    ) {\n      return null;\n    }\n    return { creditcard: true };\n  }\n\n  public static americanExpress(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) return null;\n    if (new RegExp(americanExpressRegex).test(control.value)) {\n      return null;\n    }\n    return { americanExpress: true };\n  }\n\n  public static dinersclub(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) return null;\n    if (new RegExp(dinersclubRegex).test(control.value)) {\n      return null;\n    }\n    return { dinersclub: true };\n  }\n\n  public static discover(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) return null;\n    if (new RegExp(discoverRegex).test(control.value)) {\n      return null;\n    }\n    return { discover: true };\n  }\n  public static jcb(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) return null;\n    if (new RegExp(jcbRegex).test(control.value)) {\n      return null;\n    }\n    return { jcb: true };\n  }\n  public static maestro(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) return null;\n    if (new RegExp(maestroRegex).test(control.value)) {\n      return null;\n    }\n    return { maestro: true };\n  }\n\n  public static mastercard(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) return null;\n    if (new RegExp(mastercardRegex).test(control.value)) {\n      return null;\n    }\n    return { mastercard: true };\n  }\n\n  public static visa(control: AbstractControl): ValidationErrors | null {\n    if (AbstractControlUtil.isNotPresent(control)) return null;\n    if (new RegExp(visaRegex).test(control.value)) {\n      return null;\n    }\n    return { visa: true };\n  }\n}\n","import type { OnInit, SimpleChanges, OnChanges } from \"@angular/core\";\nimport { Directive, Input, forwardRef } from \"@angular/core\";\nimport type { Validator, ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\nimport { NG_VALIDATORS, Validators } from \"@angular/forms\";\n\nimport { PasswordValidators } from \"./password-validators\";\n\n@Directive({\n  selector: \"[password][formControlName],[password][formControl],[password][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => PasswordValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class PasswordValidatorDirective implements Validator, OnInit, OnChanges {\n  @Input() repeatCharacter = 4;\n  @Input() alphabeticalCharacter = 1;\n  @Input() digitCharacter = 1;\n  @Input() lowercaseCharacter = 1;\n  @Input() uppercaseCharacter = 1;\n\n  private repeatCharacterValidator?: ValidatorFn;\n  private alphabeticalCharacterValidator?: ValidatorFn;\n  private digitCharacterValidator?: ValidatorFn;\n  private lowercaseCharacterValidator?: ValidatorFn;\n  private uppercaseCharacterValidator?: ValidatorFn;\n  private onChange?: () => void;\n\n  ngOnInit() {\n    this.repeatCharacterValidator = PasswordValidators.repeatCharacterRegexRule(this.repeatCharacter);\n    this.alphabeticalCharacterValidator = PasswordValidators.alphabeticalCharacterRule(this.alphabeticalCharacter);\n    this.digitCharacterValidator = PasswordValidators.digitCharacterRule(this.digitCharacter);\n    this.lowercaseCharacterValidator = PasswordValidators.lowercaseCharacterRule(this.lowercaseCharacter);\n    this.uppercaseCharacterValidator = PasswordValidators.uppercaseCharacterRule(this.uppercaseCharacter);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    let inputChanged = false;\n    if (changes[\"repeatCharacter\"]) {\n      this.repeatCharacterValidator = PasswordValidators.repeatCharacterRegexRule(\n        changes[\"repeatCharacter\"].currentValue\n      );\n      inputChanged = changes[\"repeatCharacter\"].isFirstChange() ? false : true;\n    }\n\n    if (changes[\"alphabeticalCharacter\"]) {\n      this.alphabeticalCharacterValidator = PasswordValidators.alphabeticalCharacterRule(\n        changes[\"alphabeticalCharacter\"].currentValue\n      );\n      inputChanged = changes[\"alphabeticalCharacter\"].isFirstChange() ? false : true;\n    }\n\n    if (changes[\"digitCharacter\"]) {\n      this.digitCharacterValidator = PasswordValidators.digitCharacterRule(changes[\"digitCharacter\"].currentValue);\n      inputChanged = changes[\"digitCharacter\"].isFirstChange() ? false : true;\n    }\n\n    if (changes[\"lowercaseCharacter\"]) {\n      this.lowercaseCharacterValidator = PasswordValidators.lowercaseCharacterRule(\n        changes[\"lowercaseCharacter\"].currentValue\n      );\n      inputChanged = changes[\"lowercaseCharacter\"].isFirstChange() ? false : true;\n    }\n\n    if (changes[\"uppercaseCharacter\"]) {\n      this.uppercaseCharacterValidator = PasswordValidators.uppercaseCharacterRule(\n        changes[\"uppercaseCharacter\"].currentValue\n      );\n      inputChanged = changes[\"uppercaseCharacter\"].isFirstChange() ? false : true;\n    }\n\n    if (inputChanged && this.onChange) {\n      this.onChange();\n    }\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    const compose: ValidatorFn | null = Validators.compose([\n      this.repeatCharacterValidator,\n      this.digitCharacterValidator,\n      this.alphabeticalCharacterValidator,\n      this.lowercaseCharacterValidator,\n      this.uppercaseCharacterValidator,\n    ]);\n    return compose ? compose(c) : null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n}\n","import type { EmailOptions } from \"./email-util\";\nimport type { OnInit, OnChanges, SimpleChanges } from \"@angular/core\";\nimport { Directive, Input, forwardRef } from \"@angular/core\";\nimport type { Validator, ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\nimport { NG_VALIDATORS } from \"@angular/forms\";\n\nimport { EmailValidators } from \"./email-validators\";\n\n@Directive({\n  selector: \"[email][formControlName],[email][formControl],[email][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => EmailValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class EmailValidatorDirective implements Validator, OnInit, OnChanges {\n  @Input() email: \"normal\" | \"simple\" = \"normal\";\n\n  private validator?: ValidatorFn;\n  private onChange?: () => void;\n\n  ngOnInit() {\n    this.setValidator(this.email);\n  }\n\n  setValidator(type: string) {\n    switch (type) {\n      case \"simple\":\n        this.validator = EmailValidators.simple;\n        break;\n      case \"normal\":\n        this.validator = EmailValidators.normal;\n        break;\n      default:\n        this.validator = EmailValidators.normal;\n        break;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes[\"email\"] && !changes[\"email\"].isFirstChange()) {\n      this.setValidator(changes[\"email\"].currentValue);\n      if (this.onChange) {\n        this.onChange();\n      }\n    }\n  }\n\n  registerOnValidatorChange?(fn: () => void): void {\n    this.onChange = fn;\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator ? this.validator(c) : null;\n  }\n}\n\n@Directive({\n  selector: \"[emailSuggest][formControlName],[emailSuggest][formControl],[emailSuggest][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => EmailSuggestValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class EmailSuggestValidatorDirective implements Validator, OnInit, OnChanges {\n  @Input() emailSuggest?: EmailOptions;\n\n  private validator?: ValidatorFn;\n  private onChange?: () => void;\n\n  ngOnInit() {\n    this.validator = EmailValidators.suggest(this.emailSuggest);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes[\"emailSuggest\"] && !changes[\"emailSuggest\"].isFirstChange()) {\n      this.validator = EmailValidators.suggest(changes[\"emailSuggest\"].currentValue);\n      if (this.onChange) {\n        this.onChange();\n      }\n    }\n  }\n\n  registerOnValidatorChange?(fn: () => void): void {\n    this.onChange = fn;\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator ? this.validator(c) : null;\n  }\n}\n","import type { OnInit, OnChanges, SimpleChanges } from \"@angular/core\";\nimport { Directive, forwardRef, Input } from \"@angular/core\";\nimport type { AbstractControl, Validator, ValidatorFn, ValidationErrors } from \"@angular/forms\";\nimport { NG_VALIDATORS } from \"@angular/forms\";\n\nimport { UniversalValidators } from \"./universal-validators\";\n\n@Directive({\n  selector: \"[noWhitespace][formControlName],[noWhitespace][formControl],[noWhitespace][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => WhiteSpaceValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class WhiteSpaceValidatorDirective implements Validator {\n  private validator: ValidatorFn = UniversalValidators.noWhitespace;\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator(c);\n  }\n}\n\n@Directive({\n  selector: \"[noEmptyString][formControlName],[noEmptyString][formControl],[noEmptyString][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => EmptyStringValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class EmptyStringValidatorDirective implements Validator {\n  private validator: ValidatorFn = UniversalValidators.noEmptyString;\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator(c);\n  }\n}\n\n@Directive({\n  selector: \"[isNumber][formControlName],[isNumber][formControl],[isNumber][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => IsNumberValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class IsNumberValidatorDirective implements Validator {\n  private validator = UniversalValidators.isNumber;\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator(c);\n  }\n}\n\n@Directive({\n  selector: \"[isInRange][formControlName],[isInRange][formControl],[isInRange][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => IsInRangeValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class IsInRangeValidatorDirective implements Validator, OnInit, OnChanges {\n  @Input() minValue = 0;\n  @Input() maxValue = 0;\n\n  private validator?: ValidatorFn;\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onChange = () => {};\n\n  ngOnInit() {\n    this.validator = UniversalValidators.isInRange(this.minValue, this.maxValue);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    let minValue = this.minValue;\n    let maxValue = this.maxValue;\n    let changed = false;\n\n    if (changes[\"minValue\"]) {\n      minValue = changes[\"minValue\"].currentValue;\n      changed = changes[\"minValue\"].isFirstChange() ? false : true;\n    }\n\n    if (changes[\"maxValue\"]) {\n      maxValue = changes[\"maxValue\"].currentValue;\n      changed = changes[\"maxValue\"].isFirstChange() ? false : true;\n    }\n\n    if (changed) {\n      this.validator = UniversalValidators.isInRange(minValue, maxValue);\n      this.onChange();\n    }\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator ? this.validator(c) : null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n}\n\n@Directive({\n  selector: \"input[type=text][max][formControlName],input[type=text][max][formControl],input[type=text][max][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => MaxValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class MaxValidatorDirective implements Validator, OnInit, OnChanges {\n  @Input() max = 0;\n\n  private validator?: ValidatorFn;\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onChange = () => {};\n\n  ngOnInit() {\n    this.validator = UniversalValidators.max(this.max);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes[\"max\"] && !changes[\"max\"].isFirstChange()) {\n      this.validator = UniversalValidators.max(changes[\"max\"].currentValue);\n      this.onChange();\n    }\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator ? this.validator(c) : null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n}\n\n@Directive({\n  selector: \"input[type=text][min][formControlName],input[type=text][min][formControl],input[type=text][min][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => MinValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class MinValidatorDirective implements Validator, OnInit, OnChanges {\n  @Input() min = 0;\n\n  private validator?: ValidatorFn;\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onChange = () => {};\n\n  ngOnInit() {\n    this.validator = UniversalValidators.min(this.min);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes[\"min\"] && !changes[\"min\"].isFirstChange()) {\n      this.validator = UniversalValidators.min(changes[\"min\"].currentValue);\n      this.onChange();\n    }\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator ? this.validator(c) : null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n}\n\n@Directive({\n  selector:\n    \"input[type=text][minDate][formControlName],input[type=text][minDate][formControl],input[type=text][minDate][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => MinDateValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class MinDateValidatorDirective implements Validator, OnInit, OnChanges {\n  @Input() minDate = \"\";\n\n  private validator?: ValidatorFn;\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onChange = () => {};\n\n  ngOnInit() {\n    this.validator = UniversalValidators.minDate(new Date(this.minDate));\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes[\"minDate\"] && !changes[\"minDate\"].isFirstChange()) {\n      this.validator = UniversalValidators.minDate(changes[\"min\"].currentValue);\n      this.onChange();\n    }\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator ? this.validator(c) : null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n}\n\n@Directive({\n  selector:\n    \"input[type=text][maxDate][formControlName],input[type=text][maxDate][formControl],input[type=text][maxDate][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => MaxDateValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class MaxDateValidatorDirective implements Validator, OnInit, OnChanges {\n  @Input() maxDate = \"\";\n\n  private validator?: ValidatorFn;\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onChange = () => {};\n\n  ngOnInit() {\n    this.validator = UniversalValidators.maxDate(new Date(this.maxDate));\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes[\"maxDate\"] && !changes[\"maxDate\"].isFirstChange()) {\n      this.validator = UniversalValidators.maxDate(changes[\"min\"].currentValue);\n      this.onChange();\n    }\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator ? this.validator(c) : null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n}\n\n@Directive({\n  selector: \"input[requireType][formControlName]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => TypeValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class TypeValidatorDirective implements Validator, OnInit, OnChanges {\n  @Input() requiredType: \"number\" | \"string\" | \"object\" | \"boolean\" = \"string\";\n\n  private validator?: ValidatorFn;\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  private onChange = () => {};\n\n  ngOnInit() {\n    this.validator = UniversalValidators.type(this.requiredType);\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes[\"requireType\"] && !changes[\"requireType\"].isFirstChange()) {\n      this.validator = UniversalValidators.type(changes[\"requireType\"].currentValue);\n      this.onChange();\n    }\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator ? this.validator(c) : null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n}\n","import type { OnInit, SimpleChanges, OnChanges } from \"@angular/core\";\nimport { Directive, Input, forwardRef } from \"@angular/core\";\nimport type { Validator, ValidatorFn, AbstractControl, ValidationErrors } from \"@angular/forms\";\nimport { NG_VALIDATORS } from \"@angular/forms\";\n\nimport { CreditCardValidators } from \"./creditcard-validators\";\n\n@Directive({\n  selector: \"[creditCard][formControlName],[creditCard][formControl],[creditCard][ngModel]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // eslint-disable-next-line @typescript-eslint/no-use-before-define\n      useExisting: forwardRef(() => CreditCardValidatorDirective),\n      multi: true,\n    },\n  ],\n})\nexport class CreditCardValidatorDirective implements Validator, OnInit, OnChanges {\n  @Input() creditCard = \"all\";\n\n  private validator?: ValidatorFn;\n  private onChange?: () => void;\n\n  ngOnInit() {\n    this.setCreditcardValidator(this.creditCard);\n  }\n\n  setCreditcardValidator(type: string) {\n    switch (type) {\n      case \"all\":\n        this.validator = CreditCardValidators.isCreditCard;\n        break;\n      case \"americanExpress\":\n        this.validator = CreditCardValidators.americanExpress;\n        break;\n      case \"dinersclub\":\n        this.validator = CreditCardValidators.dinersclub;\n        break;\n      case \"discover\":\n        this.validator = CreditCardValidators.discover;\n        break;\n      case \"jcb\":\n        this.validator = CreditCardValidators.jcb;\n        break;\n      case \"maestro\":\n        this.validator = CreditCardValidators.maestro;\n        break;\n      case \"mastercard\":\n        this.validator = CreditCardValidators.mastercard;\n        break;\n      case \"visa\":\n        this.validator = CreditCardValidators.visa;\n        break;\n      default:\n        this.validator = CreditCardValidators.isCreditCard;\n        break;\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes[\"creditCard\"] && !changes[\"creditCard\"].isFirstChange()) {\n      this.setCreditcardValidator(changes[\"creditCard\"].currentValue);\n      if (this.onChange) {\n        this.onChange();\n      }\n    }\n  }\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    return this.validator ? this.validator(c) : null;\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n}\n","import type { OnDestroy, SimpleChanges, OnChanges } from \"@angular/core\";\nimport { Directive, forwardRef, Input } from \"@angular/core\";\nimport type { AbstractControl, ValidationErrors, Validator } from \"@angular/forms\";\nimport { NG_VALIDATORS } from \"@angular/forms\";\nimport type { Subscription } from \"rxjs\";\nimport { delay } from \"rxjs/operators\";\n\n@Directive({\n  selector: \"[equalTo][ngModel], [equalTo][formControlName], [equalTo][formControl]\",\n  providers: [\n    {\n      provide: NG_VALIDATORS,\n      // tslint:disable-next-line:no-forward-ref\n      useExisting: forwardRef(() => EqualToDirective),\n      multi: true,\n    },\n  ],\n})\nexport class EqualToDirective implements Validator, OnDestroy, OnChanges {\n  @Input() equalTo: string | AbstractControl = \"\";\n\n  private subscription?: Subscription;\n  private onChange?: () => void;\n\n  validate(c: AbstractControl): ValidationErrors | null {\n    const otherControl = typeof this.equalTo === \"string\" ? c.parent?.get(this.equalTo) : this.equalTo;\n\n    if (!this.subscription) {\n      this.subscription = otherControl?.valueChanges.pipe(delay(1)).subscribe(() => {\n        c.updateValueAndValidity();\n      });\n    }\n    return c.value !== otherControl?.value ? { notEqualTo: true } : null;\n  }\n\n  ngOnDestroy(): void {\n    this.subscription?.unsubscribe();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes[\"equalTo\"] && !changes[\"equalTo\"].isFirstChange()) {\n      if (this.onChange) {\n        this.onChange();\n      }\n    }\n  }\n\n  registerOnValidatorChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n}\n","import {\n  EmptyStringValidatorDirective,\n  IsInRangeValidatorDirective,\n  IsNumberValidatorDirective,\n  MaxDateValidatorDirective,\n  MaxValidatorDirective,\n  MinDateValidatorDirective,\n  MinValidatorDirective,\n  TypeValidatorDirective,\n  WhiteSpaceValidatorDirective,\n} from \"./universal/universal.directive\";\nimport { NgModule } from \"@angular/core\";\n\nimport { CreditCardValidatorDirective } from \"./creditcard/creditcard.directive\";\nimport { EmailValidatorDirective, EmailSuggestValidatorDirective } from \"./email/email.directive\";\nimport { PasswordValidatorDirective } from \"./password/password.directive\";\nimport { EqualToDirective } from \"./equal-to/equal-to.directive\";\n\n@NgModule({\n  declarations: [\n    CreditCardValidatorDirective,\n    EmailValidatorDirective,\n    EmailSuggestValidatorDirective,\n    PasswordValidatorDirective,\n    IsInRangeValidatorDirective,\n    IsNumberValidatorDirective,\n    MaxValidatorDirective,\n    MinValidatorDirective,\n    MinDateValidatorDirective,\n    MaxDateValidatorDirective,\n    WhiteSpaceValidatorDirective,\n    EmptyStringValidatorDirective,\n    EqualToDirective,\n    TypeValidatorDirective,\n  ],\n  exports: [\n    CreditCardValidatorDirective,\n    EmailValidatorDirective,\n    EmailSuggestValidatorDirective,\n    PasswordValidatorDirective,\n    IsInRangeValidatorDirective,\n    IsNumberValidatorDirective,\n    MaxValidatorDirective,\n    MinValidatorDirective,\n    MinDateValidatorDirective,\n    MaxDateValidatorDirective,\n    WhiteSpaceValidatorDirective,\n    EmptyStringValidatorDirective,\n    EqualToDirective,\n    TypeValidatorDirective,\n  ],\n})\nexport class ValidatorsModule {}\n","import type { AbstractControl, ValidatorFn } from \"@angular/forms\";\nimport { AbstractControlUtil } from \"../abstract-control-util\";\n\nexport class EqualToValidator {\n  static equalTo(c1Name: string, c2Name: string): ValidatorFn {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const validator = (parent: AbstractControl): any => {\n      const c1 = parent.get(c1Name);\n      const c2 = parent.get(c2Name);\n\n      if (c1?.value === c2?.value) {\n        AbstractControlUtil.removeError(c2, \"notEqualTo\");\n      } else {\n        AbstractControlUtil.addError(c2, \"notEqualTo\", true);\n      }\n    };\n    return validator;\n  }\n}\n","// validators\nexport { PasswordValidators } from \"./lib/password/password-validators\";\nexport { EmailValidators } from \"./lib/email/email-validators\";\nexport * from \"./lib/email/email-util\";\nexport { UniversalValidators } from \"./lib/universal/universal-validators\";\nexport { CreditCardValidators } from \"./lib/creditcard/creditcard-validators\";\n\n// Directive\nexport { PasswordValidatorDirective } from \"./lib/password/password.directive\";\nexport { EmailValidatorDirective, EmailSuggestValidatorDirective } from \"./lib/email/email.directive\";\nexport {\n  IsInRangeValidatorDirective,\n  IsNumberValidatorDirective,\n  MaxValidatorDirective,\n  MinValidatorDirective,\n  WhiteSpaceValidatorDirective,\n  EmptyStringValidatorDirective,\n  TypeValidatorDirective,\n  MinDateValidatorDirective,\n  MaxDateValidatorDirective,\n} from \"./lib/universal/universal.directive\";\nexport { CreditCardValidatorDirective } from \"./lib/creditcard/creditcard.directive\";\n\n// Module\nexport { ValidatorsModule } from \"./lib/validators.module\";\n\n// Util\nexport { AbstractControlUtil } from \"./lib/abstract-control-util\";\n\n// EqualTo\nexport * from \"./lib/equal-to/equal-to.directive\";\nexport * from \"./lib/equal-to/equal-to-validator\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}