{"version":3,"file":"angular-cc-library.mjs","sources":["../../../projects/angular-cc-library/src/lib/credit-card.ts","../../../projects/angular-cc-library/src/lib/validators.ts","../../../projects/angular-cc-library/src/lib/directives/credit-card-format.directive.ts","../../../projects/angular-cc-library/src/lib/directives/cvc-format.directive.ts","../../../projects/angular-cc-library/src/lib/directives/expiry-format.directive.ts","../../../projects/angular-cc-library/src/lib/credit-card-directives.module.ts","../../../projects/angular-cc-library/src/public-api.ts","../../../projects/angular-cc-library/src/angular-cc-library.ts"],"sourcesContent":["const defaultFormat = /(\\d{1,4})/g;\n\nexport interface CardDefinition {\n  type: string;\n  patterns: number[];\n  format: RegExp;\n  length: number[];\n  cvvLength: number[];\n  luhn: boolean;\n}\n\nconst cards: CardDefinition[] = [\n  {\n    type: 'maestro',\n    patterns: [5018, 502, 503, 506, 56, 58, 639, 6220, 67],\n    format: defaultFormat,\n    length: [12, 13, 14, 15, 16, 17, 18, 19],\n    cvvLength: [3],\n    luhn: true,\n  }, {\n    type: 'forbrugsforeningen',\n    patterns: [600],\n    format: defaultFormat,\n    length: [16],\n    cvvLength: [3],\n    luhn: true,\n  }, {\n    type: 'dankort',\n    patterns: [5019],\n    format: defaultFormat,\n    length: [16],\n    cvvLength: [3],\n    luhn: true,\n  }, {\n    type: 'visa',\n    patterns: [4],\n    format: defaultFormat,\n    length: [13, 16, 19],\n    cvvLength: [3],\n    luhn: true,\n  }, {\n    type: 'mastercard',\n    patterns: [51, 52, 53, 54, 55, 22, 23, 24, 25, 26, 27],\n    format: defaultFormat,\n    length: [16],\n    cvvLength: [3],\n    luhn: true,\n  }, {\n    type: 'amex',\n    patterns: [34, 37],\n    format: /(\\d{1,4})(\\d{1,6})?(\\d{1,5})?/,\n    length: [15],\n    cvvLength: [3, 4],\n    luhn: true,\n  }, {\n    type: 'dinersclub',\n    patterns: [30, 36, 38, 39],\n    format: /(\\d{1,4})(\\d{1,6})?(\\d{1,4})?/,\n    length: [14],\n    cvvLength: [3],\n    luhn: true,\n  }, {\n    type: 'discover',\n    patterns: [60, 64, 65, 622],\n    format: defaultFormat,\n    length: [16],\n    cvvLength: [3],\n    luhn: true,\n  }, {\n    type: 'unionpay',\n    patterns: [62, 88],\n    format: defaultFormat,\n    length: [16, 17, 18, 19],\n    cvvLength: [3],\n    luhn: false,\n  }, {\n    type: 'jcb',\n    patterns: [35],\n    format: defaultFormat,\n    length: [16, 19],\n    cvvLength: [3],\n    luhn: true,\n  },\n];\n\n// @dynamic\nexport class CreditCard {\n\n  public static cards() {\n    return cards;\n  }\n\n  public static cardFromNumber(num: string): CardDefinition {\n    num = (num + '').replace(/\\D/g, '');\n\n    for (let i = 0, len = cards.length; i < len; i++) {\n      const card = cards[i];\n      const ref = card.patterns;\n\n      for (let j = 0, len1 = ref.length; j < len1; j++) {\n        const pattern = ref[j];\n        const p = pattern + '';\n\n        if (num.substr(0, p.length) === p) {\n          return card;\n        }\n      }\n    }\n  }\n\n  public static restrictNumeric(e: KeyboardEvent): boolean {\n    if (e.metaKey || e.ctrlKey) {\n      return true;\n    }\n    if (e.which === 32) {\n      return false;\n    }\n    if (e.which === 0) {\n      return true;\n    }\n    if (e.which < 33) {\n      return true;\n    }\n    const input = String.fromCharCode(e.which);\n    return !!/[\\d\\s]/.test(input);\n  }\n\n  public static hasTextSelected(target: HTMLInputElement) {\n    return target.selectionStart !== null && target.selectionStart !== target.selectionEnd;\n  }\n\n  public static cardType(num: string) {\n    if (!num) {\n      return num;\n    }\n\n    const card = this.cardFromNumber(num);\n\n    if (card !== null && typeof card !== 'undefined') {\n      return card.type;\n    } else {\n      return null;\n    }\n  }\n\n  public static formatCardNumber(num: string) {\n    num = num.replace(/\\D/g, '');\n    const card = this.cardFromNumber(num);\n\n    if (!card) {\n      return num;\n    }\n\n    const upperLength = card.length[card.length.length - 1];\n    num = num.slice(0, upperLength);\n\n    if (card.format.global) {\n      const matches = num.match(card.format);\n      if (matches != null) {\n        return matches.join(' ');\n      }\n    } else {\n      const groups = card.format.exec(num);\n      if (groups == null) {\n        return;\n      }\n      groups.shift();\n      return groups.filter(Boolean).join(' ');\n    }\n  }\n\n  public static safeVal(value: string, target: HTMLInputElement, updateValue: (value: string) => void): number {\n    let cursor: number | null = null;\n    const last = target.value;\n    let result: number = null;\n\n    try {\n      cursor = target.selectionStart;\n    } catch {\n      // do nothing\n    }\n\n    updateValue(value);\n\n    if (cursor !== null && target === document.activeElement) {\n      if (cursor === last.length) {\n        cursor = value.length;\n      }\n\n      if (last !== value) {\n        const prevPair = last.slice(cursor - 1, +cursor + 1 || 9e9);\n        const currPair = value.slice(cursor - 1, +cursor + 1 || 9e9);\n        const digit = value[cursor];\n\n        if (/\\d/.test(digit) && prevPair === (`${digit} `) && currPair === (` ${digit}`)) {\n          cursor = cursor + 1;\n        }\n      }\n\n      result = cursor;\n    }\n    return result;\n  }\n\n  public static isCardNumber(key: number, target: HTMLInputElement): boolean {\n    const digit = String.fromCharCode(key);\n    if (!/^\\d+$/.test(digit)) {\n      return false;\n    }\n    if (CreditCard.hasTextSelected(target)) {\n      return true;\n    }\n    const value = (target.value + digit).replace(/\\D/g, '');\n    const card = CreditCard.cardFromNumber(value);\n\n    if (card) {\n      return value.length <= card.length[card.length.length - 1];\n    } else {\n      return value.length <= 16;\n    }\n  }\n\n  public static restrictExpiry(key: number, target: HTMLInputElement) {\n    const digit = String.fromCharCode(key);\n    if (!/^\\d+$/.test(digit) || this.hasTextSelected(target)) {\n      return false;\n    }\n    const value = `${target.value}${digit}`.replace(/\\D/g, '');\n\n    return value.length > 6;\n  }\n\n  public static replaceFullWidthChars(str: string) {\n    if (str === null) {\n      str = '';\n    }\n\n    const fullWidth = '\\uff10\\uff11\\uff12\\uff13\\uff14\\uff15\\uff16\\uff17\\uff18\\uff19';\n    const halfWidth = '0123456789';\n    let value = '';\n    const chars = str.split('');\n\n    for (let i = 0; i < chars.length; i++) {\n      let chr = chars[i];\n      const idx = fullWidth.indexOf(chr);\n      if (idx > -1) {\n        chr = halfWidth[idx];\n      }\n      value += chr;\n    }\n    return value;\n  }\n\n  public static formatExpiry(expiry: string) {\n    const parts = expiry.match(/^\\D*(\\d{1,2})(\\D+)?(\\d{1,4})?/);\n\n    if (!parts) {\n      return '';\n    }\n\n    let mon  = parts[1] || '';\n    let sep  = parts[2] || '';\n    const year = parts[3] || '';\n\n    if (year.length > 0) {\n      sep = ' / ';\n    } else if (sep === ' /') {\n      mon = mon.substring(0, 1);\n      sep = '';\n    } else if (mon.length === 2 || sep.length > 0) {\n      sep = ' / ';\n    } else if (mon.length === 1 && (mon !== '0' && mon !== '1')) {\n      mon = `0${mon}`;\n      sep = ' / ';\n    }\n    return `${mon}${sep}${year}`;\n  }\n\n  public static restrictCvc(key: number, target: HTMLInputElement) {\n    const digit = String.fromCharCode(key);\n    if (!/^\\d+$/.test(digit) || this.hasTextSelected(target)) {\n      return false;\n    }\n    const val = `${target.value}${digit}`;\n    return val.length <= 4;\n  }\n\n  public static luhnCheck(num: string) {\n    const digits = num.split('').reverse();\n    let odd = true;\n    let sum = 0;\n\n    for (let i = 0; i < digits.length; i++) {\n      let digit = parseInt(digits[i], 10);\n      if ((odd = !odd)) {\n        digit *= 2;\n      }\n      if (digit > 9) {\n        digit -= 9;\n      }\n      sum += digit;\n    }\n\n    return sum % 10 === 0;\n  }\n}\n","import { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { CreditCard } from './credit-card';\n\nexport class CreditCardValidators {\n  public static validateCCNumber(control: AbstractControl): ValidationErrors | null {\n    if (Validators.required(control) !== undefined && Validators.required(control) !== null) {\n      return {ccNumber: true};\n    }\n\n    const num = control.value.toString().replace(/\\s+|-/g, '');\n\n    if (!/^\\d+$/.test(num)) {\n      return {ccNumber: true};\n    }\n\n    const card = CreditCard.cardFromNumber(num);\n\n    if (!card) {\n      return {ccNumber: true};\n    }\n\n    if (card.length.includes(num.length) && (card.luhn === false || CreditCard.luhnCheck(num))) {\n      return null;\n    }\n\n    const upperlength = card.length[card.length.length - 1];\n    if (num.length > upperlength) {\n      const registeredNum = num.substring(0, upperlength);\n      if (CreditCard.luhnCheck(registeredNum)) {\n        return null;\n      }\n    }\n\n    return {ccNumber: true};\n  }\n\n  public static validateExpDate(control: AbstractControl): ValidationErrors | null {\n    if (Validators.required(control) !== undefined && Validators.required(control) !== null) {\n      return {expDate: true};\n    }\n\n    if (typeof control.value !== 'undefined' && control.value.length >= 5) {\n      let [month, year] = control.value.split(/[\\s/]+/, 2);\n\n      if ((year != null ? year.length : void 0) === 2 && /^\\d+$/.test(year)) {\n        const prefix = new Date().getFullYear().toString().slice(0, 2);\n        year = prefix + year;\n      }\n\n      month = parseInt(month, 10).toString();\n      year = parseInt(year, 10).toString();\n\n      if (/^\\d+$/.test(month) && /^\\d+$/.test(year) && (month >= 1 && month <= 12)) {\n        const expiry = new Date(year, month);\n        const currentTime = new Date();\n        expiry.setMonth(expiry.getMonth() - 1);\n        expiry.setMonth(expiry.getMonth() + 1, 1);\n\n        if (expiry > currentTime) {\n          return null;\n        }\n      }\n    }\n\n    return {expDate: true};\n  }\n}\n\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\nimport { CreditCard } from '../credit-card';\nimport { NgControl } from '@angular/forms';\nimport { BehaviorSubject } from 'rxjs';\n\n@Directive({\n  selector: '[ccNumber]',\n  exportAs: 'ccNumber',\n  standalone: true,\n})\nexport class CreditCardFormatDirective {\n  private el = inject(ElementRef);\n  private target: HTMLInputElement = this.el.nativeElement;\n  private control = inject(NgControl, { optional: true, self: true });\n  private cards = CreditCard.cards();\n\n  public resolvedScheme$ = new BehaviorSubject<string>('unknown');\n\n  /**\n   * Updates the value to target element, or FormControl if exists.\n   * @param value New input value.\n   */\n  private updateValue(value: string) {\n    if (this.control) {\n      this.control.control.setValue(value);\n    } else {\n      this.target.value = value;\n    }\n  }\n\n  @HostListener('keypress', ['$event'])\n  public onKeypress(e: KeyboardEvent) {\n    if (CreditCard.restrictNumeric(e)) {\n      if (CreditCard.isCardNumber(e.which, this.target)) {\n        this.formatCardNumber(e);\n      }\n    } else {\n      e.preventDefault();\n    }\n  }\n\n  @HostListener('keydown', ['$event'])\n  public onKeydown(e: KeyboardEvent) {\n    this.formatBackCardNumber(e);\n    this.reFormatCardNumber();\n  }\n\n  @HostListener('keyup')\n  public onKeyup() {\n    this.setCardType();\n  }\n\n  @HostListener('paste')\n  public onPaste() {\n    this.reFormatCardNumber();\n  }\n\n  @HostListener('change')\n  public onChange() {\n    this.reFormatCardNumber();\n  }\n\n  @HostListener('input')\n  public onInput() {\n    this.reFormatCardNumber();\n    this.setCardType();\n  }\n\n  private formatCardNumber(e: KeyboardEvent) {\n    const digit = String.fromCharCode(e.which);\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n\n    const value = this.target.value;\n    const card = CreditCard.cardFromNumber(value + digit);\n    const length = (value.replace(/\\D/g, '') + digit).length;\n    const upperLength = card ? card.length[card.length.length - 1] : 19;\n\n    if (length >= upperLength) {\n      return;\n    }\n  }\n\n  private formatBackCardNumber(e: KeyboardEvent) {\n    const value = this.target.value;\n    const selStart = this.target.selectionStart;\n\n    if (e.which !== 8) {\n      return;\n    }\n\n    if (selStart != null\n      && selStart === this.target.selectionEnd\n      && selStart > 0\n      && selStart !== value.length\n      && value[selStart - 1] === ' ') {\n      e.preventDefault();\n      if (selStart <= 2) {\n        this.updateValue(value.slice(selStart));\n        this.target.selectionStart = 0;\n        this.target.selectionEnd = 0;\n      } else {\n        this.updateValue(value.slice(0, selStart - 2) + value.slice(selStart));\n        this.target.selectionStart = selStart - 2;\n        this.target.selectionEnd = selStart - 2;\n      }\n    }\n  }\n\n  private setCardType() {\n    const cardType = CreditCard.cardType(this.target.value) || 'unknown';\n\n    this.resolvedScheme$.next(cardType);\n\n    if (!this.target.classList.contains(cardType)) {\n      this.cards.forEach((card) => {\n        this.target.classList.remove(card.type);\n      });\n\n      this.target.classList.remove('unknown');\n      this.target.classList.add(cardType);\n      this.target.classList.toggle('identified', cardType !== 'unknown');\n    }\n  }\n\n  private reFormatCardNumber() {\n    const value = CreditCard.formatCardNumber(\n      CreditCard.replaceFullWidthChars(this.target.value),\n    );\n    const oldValue = this.target.value;\n    if (value !== oldValue) {\n      this.target.selectionStart = this.target.selectionEnd = CreditCard.safeVal(value, this.target, (safeVal => {\n        this.updateValue(safeVal);\n      }));\n    }\n  }\n}\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\nimport { CreditCard } from '../credit-card';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n  selector: '[ccCVC]',\n  standalone: true,\n})\nexport class CvcFormatDirective {\n  private el = inject(ElementRef);\n  private target: HTMLInputElement = this.el.nativeElement;\n  private control = inject(NgControl, { optional: true, self: true });\n\n  /**\n   * Updates the value to target element, or FormControl if exists.\n   * @param value New input value.\n   */\n  private updateValue(value: string) {\n    if (this.control) {\n      this.control.control.setValue(value);\n    } else {\n      this.target.value = value;\n    }\n  }\n\n  @HostListener('keypress', ['$event'])\n  public onKeypress(e: KeyboardEvent) {\n    if (!CreditCard.restrictNumeric(e) && !CreditCard.restrictCvc(e.which, this.target)) {\n      e.preventDefault();\n    }\n  }\n\n  @HostListener('paste')\n  @HostListener('change')\n  @HostListener('input')\n  public reformatCvc() {\n    const val = CreditCard.replaceFullWidthChars(this.target.value)\n      .replace(/\\D/g, '')\n      .slice(0, 4);\n    const oldVal = this.target.value;\n    if (val !== oldVal) {\n      this.target.selectionStart = this.target.selectionEnd = CreditCard.safeVal(val, this.target, (safeVal => {\n        this.updateValue(safeVal);\n      }));\n    }\n  }\n}\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\nimport { CreditCard } from '../credit-card';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n  selector: '[ccExp]',\n  standalone: true,\n})\nexport class ExpiryFormatDirective {\n  private el = inject(ElementRef);\n  private target: HTMLInputElement = this.el.nativeElement;\n  private control = inject(NgControl, { optional: true, self: true });\n\n  /**\n   * Updates the value to target element, or FormControl if exists.\n   * @param value New input value.\n   */\n  private updateValue(value: string) {\n    if (this.control) {\n      this.control.control.setValue(value);\n    } else {\n      this.target.value = value;\n    }\n  }\n\n  @HostListener('keypress', ['$event'])\n  public onKeypress(e: KeyboardEvent) {\n    if (CreditCard.restrictNumeric(e)) {\n      if (CreditCard.restrictExpiry(e.which, this.target)) {\n        this.formatExpiry(e);\n        this.formatForwardSlashAndSpace(e);\n        this.formatForwardExpiry(e);\n      }\n    } else {\n      e.preventDefault();\n      return false;\n    }\n  }\n\n  @HostListener('keydown', ['$event'])\n  public onKeydown(e: KeyboardEvent) {\n    if (CreditCard.restrictNumeric(e) && CreditCard.restrictExpiry(e.which, this.target)) {\n      this.formatBackExpiry(e);\n    }\n  }\n\n  @HostListener('change')\n  public onChange() {\n    this.reformatExpiry();\n  }\n\n  @HostListener('input')\n  public onInput() {\n    this.reformatExpiry();\n  }\n\n  private formatExpiry(e: KeyboardEvent) {\n    const digit = String.fromCharCode(e.which);\n    const val = `${this.target.value}${digit}`;\n\n    if (!/^\\d+$/.test(digit)) {\n      return;\n    }\n\n    if (/^\\d$/.test(val) && (val !== '0' && val !== '1')) {\n      e.preventDefault();\n      this.updateValue(`0${val} / `);\n    } else if (/^\\d\\d$/.test(val)) {\n      e.preventDefault();\n      const m1 = parseInt(val[0], 10);\n      const m2 = parseInt(val[1], 10);\n      if (m2 > 2 && m1 !== 0) {\n        this.updateValue(`0${m1} / ${m2}`);\n      } else {\n        this.updateValue(`${val} / `);\n      }\n\n    }\n  }\n\n  private formatForwardSlashAndSpace(e: KeyboardEvent) {\n    const which = String.fromCharCode(e.which);\n    const val = this.target.value;\n\n    if (!(which === '/' || which === ' ')) {\n      return false;\n    }\n    if (/^\\d$/.test(val) && val !== '0') {\n      this.updateValue(`0${val} / `);\n    }\n  }\n\n  private formatForwardExpiry(e: KeyboardEvent) {\n    const digit = String.fromCharCode(e.which);\n    const val = this.target.value;\n\n    if (!/^\\d+$/.test(digit) && /^\\d\\d$/.test(val)) {\n      this.updateValue(this.target.value = `${val} / `);\n    }\n  }\n\n  private formatBackExpiry(e: KeyboardEvent) {\n    const val = this.target.valueOf as unknown as string;\n\n    if (e.which !== 8) {\n      return;\n    }\n    if ((this.target.selectionStart != null) && this.target.selectionStart !== val.length) {\n      return;\n    }\n    if (/\\d\\s\\/\\s$/.test(val)) {\n      e.preventDefault();\n      this.updateValue(val.replace(/\\d\\s\\/\\s$/, ''));\n    }\n  }\n\n  private reformatExpiry() {\n    const val = CreditCard.formatExpiry(\n      CreditCard.replaceFullWidthChars(this.target.value),\n    );\n\n    const oldVal = this.target.value;\n    if (val !== oldVal) {\n      this.target.selectionStart = this.target.selectionEnd = CreditCard.safeVal(val, this.target, (safeVal => {\n        this.updateValue(safeVal);\n      }));\n    }\n  }\n}\n","import { NgModule } from '@angular/core';\n\nimport { CreditCardFormatDirective } from './directives/credit-card-format.directive';\nimport { ExpiryFormatDirective } from './directives/expiry-format.directive';\nimport { CvcFormatDirective } from './directives/cvc-format.directive';\n\nconst CREDIT_CARD_LIBRARY_DIRECTIVES = [\n  CreditCardFormatDirective,\n  ExpiryFormatDirective,\n  CvcFormatDirective,\n];\n\n@NgModule({\n  imports: [CREDIT_CARD_LIBRARY_DIRECTIVES],\n  exports: [CREDIT_CARD_LIBRARY_DIRECTIVES],\n})\nexport class CreditCardDirectivesModule {\n}\n","/*\n * Public API Surface of angular-cc-library\n */\n\nexport * from './lib/validators';\nexport * from './lib/credit-card';\n\nexport * from './lib/directives/credit-card-format.directive';\nexport * from './lib/directives/cvc-format.directive';\nexport * from './lib/directives/expiry-format.directive';\n\nexport * from './lib/credit-card-directives.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}