{"version":3,"file":"ng-payment-card-form.mjs","sources":["../../../projects/ng-payment-card-form/src/lib/card-form/card-form.component.ts","../../../projects/ng-payment-card-form/src/lib/card-form/card-form.component.html","../../../projects/ng-payment-card-form/src/lib/card-form.module.ts","../../../projects/ng-payment-card-form/src/ng-payment-card-form.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'card-form',\r\n  templateUrl: './card-form.component.html',\r\n  styleUrls: ['./card-form.component.scss']\r\n})\r\nexport class CardFormComponent implements OnInit {\r\n  currentCardBackground: string = '';\r\n  cardName = '';\r\n  cardNumber = '';\r\n  cardCvv = '';\r\n  minCardYear = new Date().getFullYear();\r\n  isCardFlipped = false;\r\n  focusElementStyle: { border?: string } | null = null;\r\n  isInputFocused = false;\r\n  randomBackgrounds: boolean = true;\r\n  backgroundImage: string | null = null;\r\n  currentYear = new Date().getFullYear();\r\n  currentMonth = new Date().getMonth() + 1;\r\n  months: number[] = Array.from({ length: 12 }, (_, i) => i + 1);\r\n  years: number[] = Array.from({ length: 12 }, (_, i) => this.minCardYear + i);\r\n  cardYear: number | null = null;\r\n  cardMonth: string = '';\r\n  cardType: string = '';\r\n  cardNumberPattern: string = '';\r\n\r\n  ngOnInit(): void {\r\n    this.updateCardBackground();\r\n    this.updateCardType();\r\n    this.updateCardNumberPattern();\r\n    this.cardNumber = this.getMaskForCardType(''); \r\n  }\r\n  get minCardMonth(): number {\r\n    return this.cardYear === this.currentYear ? this.currentMonth : 1;\r\n  }\r\n\r\n  updateCardType(): void {\r\n    this.cardType = this.getCardType(); \r\n    this.updateCardNumberPattern(); \r\n  }\r\n\r\n  getCardType(): string {\r\n    const number = this.cardNumber.replace(/\\D/g, '');\r\n    const cardPatterns = {\r\n      amex: /^3[47][0-9]{13}$/,\r\n      visa: /^4[0-9]{12}(?:[0-9]{3})?$/,\r\n      mastercard: /^5[1-5][0-9]{14}$/,\r\n      discover: /^6(?:011|5[0-9]{2})[0-9]{12}$/,\r\n      dinersclub: /^3(?:0([0-5]|9)|[689]\\d?)\\d{0,11}$/,\r\n      jcb: /^35(2[89]|[3-8])/,\r\n      unionpay: /^62/,\r\n      troy: /^9792/\r\n    };\r\n\r\n    for (const [type, pattern] of Object.entries(cardPatterns)) {\r\n      if (pattern.test(number)) {\r\n        return type;\r\n      }\r\n    }\r\n    return ''; \r\n  }\r\n  formatCardNumber(): void {\r\n    if (this.cardNumber === '#### #### #### ####' || this.cardNumber === '') {\r\n      return; // Do not format if placeholder or empty\r\n    }\r\n  \r\n    let value = this.cardNumber.replace(/\\D/g, ''); \r\n    const cardType = this.getCardType();\r\n    let formattedValue = '';\r\n    let mask = this.getMaskForCardType(cardType);\r\n    let maxLength = mask.replace(/[^#]/g, '').length;\r\n    \r\n    if (value.length > maxLength) {\r\n      value = value.substring(0, maxLength);\r\n    }\r\n    \r\n    let maskIndex = 0;\r\n    for (let i = 0; i < value.length && maskIndex < mask.length; i++) {\r\n      if (mask[maskIndex] === '#') {\r\n        formattedValue += value[i];\r\n      } else {\r\n        formattedValue += mask[maskIndex];\r\n        i--; \r\n      }\r\n      maskIndex++;\r\n    }\r\n    this.cardNumber = formattedValue;\r\n    this.updateCardType(); \r\n    this.updateCardNumberPattern(); \r\n  }\r\n  \r\n\r\n  getMaskForCardType(cardType: string): string {\r\n    switch (cardType) {\r\n      case 'amex':\r\n        return '#### ###### #####';\r\n      case 'dinersclub':\r\n        return '#### ###### ####';\r\n      default:\r\n        return '#### #### #### ####'; \r\n    }\r\n  }\r\n\r\n  updateCardNumberPattern(): void {\r\n    this.cardNumberPattern = this.getMaskForCardType(this.cardType).replace(/#/g, '_');\r\n  }\r\n\r\n  focusInput(): void {\r\n    if (this.cardNumber === '#### #### #### ####') {\r\n      this.cardNumber = ''; // Clear placeholder on focus\r\n    }\r\n    this.isInputFocused = true;\r\n    this.updateFocusElementStyle();\r\n  }\r\n  \r\n  blurInput(): void {\r\n    if (this.cardNumber === '') {\r\n      this.cardNumber = '#### #### #### ####'; // Restore placeholder if no input\r\n    }\r\n    this.isInputFocused = false;\r\n    this.updateFocusElementStyle();\r\n  }\r\n  \r\n\r\n  private updateFocusElementStyle(): void {\r\n    this.focusElementStyle = this.isInputFocused ? { border: '2px solid blue' } : null;\r\n  }\r\n\r\n  flipCard(isFlipped: boolean): void {\r\n    this.isCardFlipped = isFlipped;\r\n  }\r\n\r\n  submitForm(): void {\r\n    console.log('Form submitted:', {\r\n      cardName: this.cardName,\r\n      cardNumber: this.cardNumber,\r\n      cardMonth: this.cardMonth,\r\n      cardYear: this.cardYear,\r\n      cardCvv: this.cardCvv\r\n    });\r\n  }\r\n\r\n  getFormattedCardName(): string[] {\r\n    return this.cardName.replace(/\\s\\s+/g, ' ').split('');\r\n  }\r\n\r\n  updateCardBackground(): void {\r\n    const baseUrl = 'https://raw.githubusercontent.com/Asrih7/ng-payment-card-form/main/projects/ng-payment-card-form/src/assets/images/';\r\n    \r\n    if (this.randomBackgrounds && !this.backgroundImage) {\r\n      const random = Math.floor(Math.random() * 25) + 1;\r\n      this.currentCardBackground = `${baseUrl}${random}.jpeg`;\r\n    } else if (this.backgroundImage) {\r\n      this.currentCardBackground = this.backgroundImage;\r\n    } else {\r\n      this.currentCardBackground = '';\r\n    }\r\n  }\r\n\r\n  getCardTypeImageUrl(): string {\r\n    const baseUrl = 'https://raw.githubusercontent.com/Asrih7/ng-payment-card-form/main/projects/ng-payment-card-form/src/assets/images/';\r\n    return this.cardType ? `${baseUrl}${this.cardType}.png` : `${baseUrl}visa.png`;\r\n  }\r\n}","<div class=\"wrapper\" id=\"app\">\r\n  <div class=\"card-form\">\r\n    <div class=\"card-list\">\r\n      <div class=\"card-item\" [ngClass]=\"{ '-active': isCardFlipped }\">\r\n        <div class=\"card-item__side -front\">\r\n          <div class=\"card-item__focus\" [ngClass]=\"{ '-active': isInputFocused }\" [ngStyle]=\"focusElementStyle\"></div>\r\n          <div class=\"card-item__cover\">\r\n            <img [src]=\"currentCardBackground\" class=\"card-item__bg\">\r\n          </div>\r\n\r\n          <div class=\"card-item__wrapper\">\r\n            <div class=\"card-item__top\">\r\n              <img src=\"https://raw.githubusercontent.com/Asrih7/ng-payment-card-form/main/projects/ng-payment-card-form/src/assets/images/chip.png\" class=\"card-item__chip\">\r\n              <div class=\"card-item__type\">\r\n                <img [src]=\"getCardTypeImageUrl()\" class=\"card-item__typeImg\">\r\n              </div>\r\n            </div>\r\n\r\n            <div class=\"card-item__number\">\r\n              <ng-container *ngFor=\"let n of cardNumber.split(''); let i = index\">\r\n                <div class=\"card-item__numberItem\">{{ n === '#' ? '&#35;' : n }}</div>\r\n              </ng-container>\r\n            </div>\r\n\r\n            <div class=\"card-item__content\">\r\n              <label for=\"cardName\" class=\"card-item__info\">\r\n                <div class=\"card-item__holder\">Card Holder</div>\r\n                <ng-container *ngIf=\"cardName.length; else emptyName\">\r\n                  <div class=\"card-item__name\">\r\n                    <ng-container *ngFor=\"let n of getFormattedCardName(); let i = index\">\r\n                      <span class=\"card-item__nameItem\">{{n}}</span>\r\n                    </ng-container>\r\n                  </div>\r\n                </ng-container>\r\n                <ng-template #emptyName>\r\n                  <div class=\"card-item__name\">Full Name</div>\r\n                </ng-template>\r\n              </label>\r\n              <div class=\"card-item__date\">\r\n                <label for=\"cardMonth\" class=\"card-item__dateTitle\">Expires</label>\r\n                <label for=\"cardMonth\" class=\"card-item__dateItem\">\r\n                  <span *ngIf=\"cardMonth\">{{cardMonth}}</span>\r\n                  <span *ngIf=\"!cardMonth\">MM</span>\r\n                </label>\r\n                /\r\n                <label for=\"cardYear\" class=\"card-item__dateItem\">\r\n                  <span *ngIf=\"cardYear\">{{cardYear.toString().slice(2)}}</span>\r\n                  <span *ngIf=\"!cardYear\">YY</span>\r\n                </label>\r\n              </div>\r\n            </div>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"card-item__side -back\">\r\n          <div class=\"card-item__cover\">\r\n            <img [src]=\"currentCardBackground\" class=\"card-item__bg\">\r\n          </div>\r\n          <div class=\"card-item__band\"></div>\r\n          <div class=\"card-item__cvv\">\r\n            <div class=\"card-item__cvvTitle\">CVV</div>\r\n            <div class=\"card-item__cvvBand\">\r\n              <span *ngFor=\"let n of cardCvv.split(''); let i = index\">*</span>\r\n            </div>\r\n            <div class=\"card-item__type\">\r\n              <img [src]=\"getCardTypeImageUrl()\" class=\"card-item__typeImg\">\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"card-form__inner\">\r\n      <div class=\"card-input\">\r\n        <label for=\"cardName\" class=\"card-input__label\">Card Name</label>\r\n        <input type=\"text\" id=\"cardName\" class=\"card-input__input\" [(ngModel)]=\"cardName\" (focus)=\"focusInput()\" (blur)=\"blurInput()\" autocomplete=\"off\">\r\n      </div>\r\n      \r\n      <div class=\"card-input\">\r\n        <label for=\"cardNumber\" class=\"card-input__label\">Card Number</label>\r\n        <input type=\"text\" id=\"cardNumber\" class=\"card-input__input\"\r\n               [(ngModel)]=\"cardNumber\"\r\n               (input)=\"formatCardNumber()\"\r\n               (focus)=\"focusInput()\"\r\n               (blur)=\"blurInput()\"\r\n               maxlength=\"19\"\r\n               autocomplete=\"off\">\r\n      </div>\r\n      \r\n\r\n      <div class=\"card-form__row\">\r\n        <div class=\"card-form__col\">\r\n          <div class=\"card-form__group\">\r\n            <label for=\"cardMonth\" class=\"card-input__label\">Expiration Date</label>\r\n            <select class=\"card-input__input -select\" id=\"cardMonth\" [(ngModel)]=\"cardMonth\" (focus)=\"focusInput()\" (blur)=\"blurInput()\">\r\n              <option value=\"\" disabled selected>Month</option>\r\n              <option *ngFor=\"let month of months\" [value]=\"month < 10 ? '0' + month : month\" [disabled]=\"month < minCardMonth\">\r\n                {{month < 10 ? '0' + month : month}}\r\n              </option>\r\n            </select>\r\n            <select class=\"card-input__input -select\" id=\"cardYear\" [(ngModel)]=\"cardYear\" (focus)=\"focusInput()\" (blur)=\"blurInput()\">\r\n              <option value=\"\" disabled selected>Year</option>\r\n              <option *ngFor=\"let year of years\" [value]=\"year\">\r\n                {{ year }}\r\n              </option>\r\n            </select>\r\n          </div>\r\n        </div>\r\n\r\n        <div class=\"card-form__col -cvv\">\r\n          <div class=\"card-input\">\r\n            <label for=\"cardCvv\" class=\"card-input__label\">CVV</label>\r\n            <input type=\"text\" id=\"cardCvv\" class=\"card-input__input\" [(ngModel)]=\"cardCvv\" (focus)=\"flipCard(true)\" (blur)=\"flipCard(false)\" maxlength=\"4\" autocomplete=\"off\">\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <button class=\"card-form__button\" (click)=\"submitForm()\">Submit</button>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n\r\n","// ng-payment-card-form/src/lib/credit-card-form.module.ts\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CardFormComponent } from './card-form/card-form.component';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\n@NgModule({\r\n  declarations: [CardFormComponent],\r\n  imports: [CommonModule, FormsModule],\r\n  exports: [CardFormComponent] // Ensure the component is exported\r\n})\r\nexport class CreditCardFormModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}