{"version":3,"file":"ng-otp-input.mjs","sources":["../../../projects/ng-otp-input/src/lib/utils/keyboard-util.ts","../../../projects/ng-otp-input/src/lib/pipes/keys.pipe.ts","../../../projects/ng-otp-input/src/lib/components/ng-otp-input/ng-otp-input.component.ts","../../../projects/ng-otp-input/src/lib/components/ng-otp-input/ng-otp-input.component.html","../../../projects/ng-otp-input/src/lib/ng-otp-input.module.ts","../../../projects/ng-otp-input/src/lib/models/config.ts","../../../projects/ng-otp-input/src/public_api.ts","../../../projects/ng-otp-input/src/ng-otp-input.ts"],"sourcesContent":["export class KeyboardUtil{\n    static ifTab(event:KeyboardEvent){\n        return this.ifKey(event,'Tab');\n    }\n    static ifDelete(event:KeyboardEvent){\n        return this.ifKey(event,'Delete;Del');\n    }\n    static ifBackspace(event:KeyboardEvent){\n        return this.ifKey(event,'Backspace');\n    }\n    static ifRightArrow(event:KeyboardEvent){\n        return this.ifKey(event,'ArrowRight;Right')\n    }\n    static ifLeftArrow(event:KeyboardEvent){\n        return this.ifKey(event,'ArrowLeft;Left')\n    }\n    static ifSpacebar(event:KeyboardEvent){\n        return this.ifKey(event,'Spacebar; ')//don't remove the space after ; as this will check for space key\n    }\n    static  ifKey(event:KeyboardEvent, keys:string):boolean{\n        let keysToCheck=keys.split(';');\n        return keysToCheck.some(k=> k ===event.key);\n    }\n}","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'keys'\n})\nexport class KeysPipe implements PipeTransform {\n  transform(value: any): string[] {\n    return Object.keys(value)\n  }\n}\n","import {\n  Component,\n  OnInit,\n  Input,\n  Output,\n  EventEmitter,\n  AfterViewInit\n} from '@angular/core';\nimport { FormGroup, FormControl } from '@angular/forms';\nimport { KeysPipe } from '../../pipes/keys.pipe';\nimport { Config } from '../../models/config';\nimport { KeyboardUtil } from '../../utils/keyboard-util';\n@Component({\n  // tslint:disable-next-line: component-selector\n  selector: 'ng-otp-input',\n  templateUrl: './ng-otp-input.component.html',\n  styleUrls: ['./ng-otp-input.component.scss']\n})\nexport class NgOtpInputComponent implements OnInit, AfterViewInit {\n  @Input() config: Config = { length: 4 };\n  // tslint:disable-next-line: no-output-on-prefix\n  @Output() onInputChange = new EventEmitter<string>();\n  @Input() formCtrl:FormControl;\n  otpForm: FormGroup;\n  currentVal:string;\n  inputControls: FormControl[] = new Array(this.config.length);\n  componentKey =\n    Math.random()\n      .toString(36)\n      .substring(2) + new Date().getTime().toString(36);\n  get inputType(){\n    return this.config?.isPasswordInput \n    ? 'password' \n    : this.config?.allowNumbersOnly \n      ? 'tel'\n      : 'text';\n  }\n  constructor(private keysPipe: KeysPipe) {}\n\n  ngOnInit() {\n    this.otpForm = new FormGroup({});\n    for (let index = 0; index < this.config.length; index++) {\n      this.otpForm.addControl(this.getControlName(index), new FormControl());\n    }\n    this.otpForm.valueChanges.subscribe((v:object)=>{\n      this.keysPipe.transform(this.otpForm.controls).forEach((k) => {\n        var val = this.otpForm.controls[k].value;\n        if(val && val.length>1){\n          if (val.length >= this.config.length) {\n            this.setValue(val);\n          }else{\n            this.rebuildValue();\n          }\n        }\n      });\n    });\n  }\n\n  ngAfterViewInit(): void {\n    if (!this.config.disableAutoFocus) {\n      const containerItem = document.getElementById(`c_${this.componentKey}`);\n      if (containerItem) {\n        const ele: any = containerItem.getElementsByClassName('otp-input')[0];\n        if (ele && ele.focus) {\n          ele.focus();\n        }\n      }\n    }\n  }\n  private getControlName(idx) {\n    return `ctrl_${idx}`;\n  }\n\n  onKeyDown($event, inputIdx){\n    const prevInputId = this.getBoxId(inputIdx - 1);\n    const currentInputId = this.getBoxId(inputIdx);\n    if (KeyboardUtil.ifSpacebar($event)) {\n      $event.preventDefault();\n      return false;\n     }\n     if (KeyboardUtil.ifBackspace($event)) {\n      if(!$event.target.value){\n        this.clearInput(prevInputId,inputIdx-1);\n        this.setSelected(prevInputId);\n      }else{\n        this.clearInput(currentInputId,inputIdx);\n      }\n      this.rebuildValue();\n      return;\n    }\n  }\n  onInput($event){\n    let newVal=this.currentVal ? `${this.currentVal}${$event.target.value}` : $event.target.value;\n    if(this.config.allowNumbersOnly && !this.validateNumber(newVal)){\n      $event.target.value='';\n      $event.stopPropagation();\n      $event.preventDefault();\n      return;\n    }\n  }\n  \n\n  onKeyUp($event, inputIdx) {\n    if(KeyboardUtil.ifTab($event)){\n      inputIdx-=1;\n    }\n    const nextInputId = this.getBoxId(inputIdx + 1);\n    const prevInputId = this.getBoxId(inputIdx - 1);\n    const currentInputId = this.getBoxId(inputIdx);\n    if (KeyboardUtil.ifRightArrow($event)) {\n      $event.preventDefault();\n      this.setSelected(nextInputId);\n      return;\n    }\n    if (KeyboardUtil.ifLeftArrow($event)) {\n      $event.preventDefault();\n      this.setSelected(prevInputId);\n      return;\n    }\n    if (KeyboardUtil.ifDelete($event)) {\n      if(!$event.target.value){\n        this.clearInput(prevInputId,inputIdx-1);\n        this.setSelected(prevInputId);\n      }else{\n        this.clearInput(currentInputId,inputIdx);\n      }\n      this.rebuildValue();\n      return;\n    }\n    \n    if (!$event.target.value) {\n      return;\n    }\n  \n    if (this.ifValidKeyCode($event)) {\n      this.setSelected(nextInputId);\n    }\n    this.rebuildValue();\n  }\n\n  validateNumber(val){\n    return val && /^\\d*\\.?\\d*$/.test(val);\n  }\n\n  getBoxId(idx:string | number){\n    return `otp_${idx}_${this.componentKey}`;\n  }\n\n private clearInput(eleId:string,inputIdx){\n    let ctrlName=this.getControlName(inputIdx);\n    this.otpForm.controls[ctrlName]?.setValue(null);\n    const ele=document.getElementById(eleId);\n    if(ele && ele instanceof HTMLInputElement){\n      ele.value=null;\n    }\n  }\n\n private setSelected(eleId) {\n    this.focusTo(eleId);\n    const ele: any = document.getElementById(eleId);\n    if (ele && ele.setSelectionRange) {\n      setTimeout(() => {\n        ele.setSelectionRange(0, 1);\n      }, 0);\n    }\n  }\n\n private ifValidKeyCode(event) {\n    const inp = event.key;\n    const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n    return (\n      isMobile ||\n      /[a-zA-Z0-9-_]/.test(inp)\n    );\n  }\n\n  focusTo(eleId) {\n    const ele: any = document.getElementById(eleId);\n    if (ele) {\n      ele.focus();\n    }\n  }\n\n  // method to set component value\n  setValue(value: any) {\n    if (this.config.allowNumbersOnly && isNaN(value)) {\n        return;\n    }\n    this.otpForm.reset();\n     if (!value) {\n       this.rebuildValue();\n       return;\n     }\n     value = value.toString().replace(/\\s/g, ''); // remove whitespace\n     Array.from(value).forEach((c, idx) => {\n          if (this.otpForm.get(this.getControlName(idx))) {\n            this.otpForm.get(this.getControlName(idx)).setValue(c);\n          }\n     });\n     if (!this.config.disableAutoFocus) {\n      const containerItem = document.getElementById(`c_${this.componentKey}`);\n      var indexOfElementToFocus = value.length < this.config.length ? value.length : (this.config.length - 1);\n      let ele : any = containerItem.getElementsByClassName('otp-input')[indexOfElementToFocus];\n      if (ele && ele.focus) {\n        ele.focus();\n      }\n     }\n     this.rebuildValue();\n  }\n\nprivate rebuildValue() {\n    let val = '';\n    this.keysPipe.transform(this.otpForm.controls).forEach(k => {\n      if (this.otpForm.controls[k].value) {\n        let ctrlVal=this.otpForm.controls[k].value;\n        let isLengthExceed=ctrlVal.length>1;\n        let isCaseTransformEnabled= !this.config.allowNumbersOnly && this.config.letterCase && (this.config.letterCase.toLocaleLowerCase() == 'upper' || this.config.letterCase.toLocaleLowerCase()== 'lower');\n        ctrlVal=ctrlVal[0];\n        let transformedVal=isCaseTransformEnabled ? this.config.letterCase.toLocaleLowerCase() == 'upper' ? ctrlVal.toUpperCase() : ctrlVal.toLowerCase()  : ctrlVal;\n        if(isCaseTransformEnabled && transformedVal == ctrlVal){\n          isCaseTransformEnabled=false;\n        }else{\n          ctrlVal=transformedVal;\n        }\n        val += ctrlVal;\n        if(isLengthExceed || isCaseTransformEnabled) \n        {\n         this.otpForm.controls[k].setValue(ctrlVal);\n        }\n      }\n    });\n    if(this.formCtrl?.setValue){\n      this.formCtrl.setValue(val);\n    }\n    this.onInputChange.emit(val);\n    this.currentVal=val;\n  }\n  \n  \n  handlePaste(e) {\n    // Get pasted data via clipboard API\n    let clipboardData = e.clipboardData || window['clipboardData'];\n    if(clipboardData){\n     var pastedData =clipboardData.getData('Text');\n    }\n    // Stop data actually being pasted into div\n    e.stopPropagation();\n    e.preventDefault();\n    if (!pastedData || (this.config.allowNumbersOnly && !this.validateNumber(pastedData))) {\n      return;\n    }\n    this.setValue(pastedData);\n  }\n}\n","<div class=\"ng-otp-input-wrapper wrapper {{config.containerClass}}\" id=\"c_{{componentKey}}\" *ngIf=\"otpForm?.controls\"\n  [ngStyle]=\"config.containerStyles\">\n  <input (paste)=\"handlePaste($event)\" inputmode=\"numeric\" [pattern]=\"config.allowNumbersOnly ? '\\\\d*' : ''\" [type]=\"inputType\"  [placeholder]=\"config?.placeholder || ''\"\n    [ngStyle]=\"config.inputStyles\" \n    class=\"otp-input {{config.inputClass}}\" autocomplete=\"one-time-code\" *ngFor=\"let item of otpForm?.controls | keys;let i=index\"\n    [formControl]=\"otpForm.controls[item]\" #inp [id]=\"getBoxId(i)\" \n    (keyup)=\"onKeyUp($event,i)\" (input)=\"onInput($event)\" (keydown)=\"onKeyDown($event,i)\" >\n</div>","import { NgModule } from '@angular/core';\nimport { NgOtpInputComponent } from './components/ng-otp-input/ng-otp-input.component';\nimport { KeysPipe } from './pipes/keys.pipe';\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    FormsModule,\n    ReactiveFormsModule\n  ],\n  declarations: [NgOtpInputComponent, KeysPipe],\n  exports: [NgOtpInputComponent],\n  providers: [KeysPipe]\n})\nexport class NgOtpInputModule { }\n","export class Config {\n  inputStyles?: { [key: string]: any };\n  containerStyles?: { [key: string]: any };\n  length: number;\n  allowNumbersOnly?: boolean;\n  inputClass?: string;\n  containerClass?: string;\n  isPasswordInput?: boolean;\n  disableAutoFocus?: boolean;\n  placeholder?: string;\n  letterCase?: \"Upper\" | \"Lower\";\n}\n","/*\n * Public API Surface of ng-otp-input\n */\n\nexport * from './lib/ng-otp-input.module';\nexport {Config as NgOtpInputConfig} from './lib/models/config';\nexport * from './lib/components/ng-otp-input/ng-otp-input.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.KeysPipe"],"mappings":"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"}