{"version":3,"file":"ng-pass-otp.mjs","sources":["../../../projects/ng-pass-otp/src/lib/pipes/keys.pipe.ts","../../../projects/ng-pass-otp/src/lib/directives/numbers-only.directive.ts","../../../projects/ng-pass-otp/src/lib/components/ng-pass-otp/ng-pass-otp.component.ts","../../../projects/ng-pass-otp/src/lib/components/ng-pass-otp/ng-pass-otp.component.html","../../../projects/ng-pass-otp/src/lib/ng-pass-otp.module.ts","../../../projects/ng-pass-otp/src/public-api.ts","../../../projects/ng-pass-otp/src/ng-pass-otp.ts"],"sourcesContent":["import {Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Pipe({\r\n  name: 'keys',\r\n})\r\nexport class KeysPipe implements PipeTransform {\r\n  transform(value: any): string[] {\r\n    return Object.keys(value);\r\n  }\r\n}\r\n","import {Directive, Input, ElementRef, Renderer2} from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[numbersOnly]',\r\n})\r\nexport class NumbersOnlyDirective {\r\n  @Input() disabledNumbersOnly: boolean;\r\n  constructor(private _elRef: ElementRef, private _renderer: Renderer2) {}\r\n\r\n  ngOnInit() {\r\n    if (!this.disabledNumbersOnly) {\r\n      this._renderer.setAttribute(\r\n        this._elRef.nativeElement,\r\n        'onkeypress',\r\n        'return (event.charCode >= 48 && event.charCode <= 57) || event.charCode == 0'\r\n      );\r\n    }\r\n  }\r\n}\r\n","/** @format */\r\n\r\nimport { AfterViewInit, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { Config } from '../../models/config';\r\nimport { KeysPipe } from '../../pipes/keys.pipe';\r\n\r\n@Component({\r\n  selector: 'ng-pass-otp',\r\n  templateUrl: './ng-pass-otp.component.html',\r\n  styleUrls: ['./ng-pass-otp.component.scss']\r\n})\r\nexport class NgPassOtpComponent implements OnInit, AfterViewInit {\r\n  @Input() config: Config = { length: 4 };\r\n  // tslint:disable-next-line: no-output-on-prefix\r\n  @Output() onInputChange = new EventEmitter<string>();\r\n  @Input() otpForm: FormGroup;\r\n  inputControls: FormControl[] = new Array(this.config.length);\r\n  componentKey =\r\n    Math.random()\r\n      .toString(36)\r\n      .substring(2) + new Date().getTime().toString(36);\r\n  inputType: string;\r\n\r\n  constructor(private keysPipe: KeysPipe) {}\r\n\r\n  ngOnInit() {\r\n    this.otpForm = new FormGroup({});\r\n    for (let index = 0; index < this.config.length; index++) {\r\n      this.otpForm.addControl(this.getControlName(index), new FormControl());\r\n    }\r\n    this.inputType = this.getInputType();\r\n  }\r\n  ngAfterViewInit(): void {\r\n    if (!this.config.disableAutoFocus) {\r\n      const containerItem = document.getElementById(`c_${this.componentKey}`);\r\n      if (containerItem) {\r\n        containerItem.addEventListener('paste', evt => this.handlePaste(evt));\r\n        const ele: any = containerItem.getElementsByClassName('.otp-input')[0];\r\n        if (ele && ele.focus) {\r\n          ele.focus();\r\n        }\r\n      }\r\n    }\r\n  }\r\n  private getControlName(idx) {\r\n    return `ctrl_${idx}`;\r\n  }\r\n\r\n  ifLeftArrow(event) {\r\n    return this.ifKeyCode(event, 37);\r\n  }\r\n\r\n  ifRightArrow(event) {\r\n    return this.ifKeyCode(event, 39);\r\n  }\r\n\r\n  ifBackspaceOrDelete(event) {\r\n    return (\r\n      event.key === 'Backspace' ||\r\n      event.key === 'Delete' ||\r\n      this.ifKeyCode(event, 8) ||\r\n      this.ifKeyCode(event, 46)\r\n    );\r\n  }\r\n\r\n  ifKeyCode(event, targetCode) {\r\n    const key = event.keyCode || event.charCode;\r\n    return key === targetCode ? true : false;\r\n  }\r\n\r\n  onKeyDown($event) {\r\n    const isSpace = this.ifKeyCode($event, 32);\r\n    if (isSpace) {\r\n      // prevent space\r\n      return false;\r\n    }\r\n  }\r\n\r\n  onKeyUp($event, inputIdx) {\r\n    const nextInputId = this.appendKey(`otp_${inputIdx + 1}`);\r\n    const prevInputId = this.appendKey(`otp_${inputIdx - 1}`);\r\n    if (this.ifRightArrow($event)) {\r\n      this.setSelected(nextInputId);\r\n      return;\r\n    }\r\n    if (this.ifLeftArrow($event)) {\r\n      this.setSelected(prevInputId);\r\n      return;\r\n    }\r\n    const isBackspace = this.ifBackspaceOrDelete($event);\r\n    if (isBackspace && !$event.target.value) {\r\n      this.setSelected(prevInputId);\r\n      this.rebuildValue();\r\n      return;\r\n    }\r\n    if (!$event.target.value) {\r\n      return;\r\n    }\r\n    if (this.ifValidEntry($event)) {\r\n      this.focusTo(nextInputId);\r\n    }\r\n    this.rebuildValue();\r\n  }\r\n\r\n  appendKey(id) {\r\n    return `${id}_${this.componentKey}`;\r\n  }\r\n\r\n  setSelected(eleId) {\r\n    this.focusTo(eleId);\r\n    const ele: any = document.getElementById(eleId);\r\n    if (ele && ele.setSelectionRange) {\r\n      setTimeout(() => {\r\n        ele.setSelectionRange(0, 1);\r\n      }, 0);\r\n    }\r\n  }\r\n\r\n  ifValidEntry(event) {\r\n    const inp = String.fromCharCode(event.keyCode);\r\n    const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\r\n    return (\r\n      isMobile ||\r\n      /[a-zA-Z0-9-_]/.test(inp) ||\r\n      (this.config.allowKeyCodes &&\r\n        this.config.allowKeyCodes.includes(event.keyCode)) ||\r\n      (event.keyCode >= 96 && event.keyCode <= 105)\r\n    );\r\n  }\r\n\r\n  focusTo(eleId) {\r\n    const ele: any = document.getElementById(eleId);\r\n    if (ele) {\r\n      ele.focus();\r\n    }\r\n  }\r\n\r\n  // method to set component value\r\n  setValue(value: any) {\r\n    if (this.config.allowNumbersOnly && isNaN(value)) {\r\n      return;\r\n    }\r\n    this.otpForm.reset();\r\n    if (!value) {\r\n      this.rebuildValue();\r\n      return;\r\n    }\r\n    value = value.toString().replace(/\\s/g, ''); // remove whitespace\r\n    Array.from(value).forEach((c, idx) => {\r\n      if (this.otpForm.get(this.getControlName(idx))) {\r\n        this.otpForm.get(this.getControlName(idx)).setValue(c);\r\n      }\r\n    });\r\n    const containerItem = document.getElementById(`c_${this.componentKey}`);\r\n    const indexOfElementToFocus =\r\n      value.length < this.config.length ? value.length : this.config.length - 1;\r\n    const ele: any = containerItem.getElementsByClassName('otp-input')[\r\n      indexOfElementToFocus\r\n    ];\r\n    if (ele && ele.focus) {\r\n      ele.focus();\r\n    }\r\n    this.rebuildValue();\r\n  }\r\n\r\n  rebuildValue() {\r\n    let val = '';\r\n    this.keysPipe.transform(this.otpForm.controls).forEach(k => {\r\n      if (this.otpForm.controls[k].value) {\r\n        val += this.otpForm.controls[k].value;\r\n      }\r\n    });\r\n    this.onInputChange.emit(val);\r\n  }\r\n\r\n  getInputType(): string {\r\n    return this.config.setTypePassword\r\n      ? 'password'\r\n      : this.config.allowNumbersOnly\r\n      ? 'tel'\r\n      : 'text';\r\n  }\r\n  handlePaste(e) {\r\n    // Get pasted data via clipboard API\r\n    const clipboardData = e.clipboardData || window['clipboardData'];\r\n    if (clipboardData) {\r\n      var pastedData = clipboardData.getData('Text');\r\n    }\r\n    // Stop data actually being pasted into div\r\n    e.stopPropagation();\r\n    e.preventDefault();\r\n    if (!pastedData) {\r\n      return;\r\n    }\r\n    this.setValue(pastedData);\r\n  }\r\n}\r\n","<div\r\n  class=\"wrapper {{ config.containerClass }}\"\r\n  id=\"c_{{ componentKey }}\"\r\n  *ngIf=\"otpForm?.controls\"\r\n  [ngStyle]=\"config.containerStyles\"\r\n>\r\n  <input\r\n    [pattern]=\"config.allowNumbersOnly ? '\\\\d*' : ''\"\r\n    [type]=\"inputType\"\r\n    numbersOnly\r\n    [disabledNumbersOnly]=\"!config.allowNumbersOnly\"\r\n    [ngStyle]=\"config.inputStyles\"\r\n    maxlength=\"1\"\r\n    class=\"otp-input {{ config.inputClass }}\"\r\n    autocomplete=\"off\"\r\n    *ngFor=\"let item of otpForm?.controls | keys; let i = index\"\r\n    [formControl]=\"otpForm.controls[item]\"\r\n    id=\"otp_{{ i }}_{{ componentKey }}\"\r\n    (keyup)=\"onKeyUp($event, i)\"\r\n    (keydown)=\"onKeyDown($event)\"\r\n    [attr.inputmode]=\"config.allowNumbersOnly ? 'tel' : 'none'\"\r\n  />\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { NgPassOtpComponent } from './components/ng-pass-otp/ng-pass-otp.component';\r\nimport { NumbersOnlyDirective } from './directives/numbers-only.directive';\r\nimport { KeysPipe } from './pipes/keys.pipe';\r\n\r\n@NgModule({\r\n  declarations: [NgPassOtpComponent, KeysPipe, NumbersOnlyDirective],\r\n  imports: [CommonModule, FormsModule, ReactiveFormsModule],\r\n  exports: [NgPassOtpComponent],\r\n  providers: [KeysPipe]\r\n})\r\nexport class NgPassOtpModule {}\r\n","/*\r\n * Public API Surface of ng-pass-otp\r\n */\r\n\r\nexport * from './lib/ng-pass-otp.module';\r\nexport * from './lib/components/ng-pass-otp/ng-pass-otp.component'\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}