{"version":3,"file":"ngx-pass-code.mjs","sources":["../../../../libs/ngx-pass-code/src/lib/directives/focus-next-previous-input.directive.ts","../../../../libs/ngx-pass-code/src/lib/directives/transform-uppercase.directive.ts","../../../../libs/ngx-pass-code/src/lib/directives/autofocus-first-input.directive.ts","../../../../libs/ngx-pass-code/src/lib/component/pass-code.component.ts","../../../../libs/ngx-pass-code/src/lib/component/pass-code.component.html","../../../../libs/ngx-pass-code/src/lib/ngx-pass-code.module.ts","../../../../libs/ngx-pass-code/src/ngx-pass-code.ts"],"sourcesContent":["import { Directive, HostListener, Input } from '@angular/core'\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: '[focusNextPreviousInput]'\n})\nexport class FocusNextPreviousInputDirective {\n  @Input() autoblur = false\n\n  private BACKSPACE_KEY = 8\n  private TAB_KEY = 9\n  private DELETE_KEY = 46\n  private LEFT_ARROW_KEY = 37\n  private RIGHT_ARROW_KEY = 39\n  private SPACE_KEY = 32\n\n  @HostListener('keyup', ['$event']) onKeyUp(e: any) {\n    e.preventDefault()\n\n    if (\n      e.keyCode === this.LEFT_ARROW_KEY ||\n      e.keyCode === this.DELETE_KEY ||\n      e.keyCode === this.BACKSPACE_KEY\n    ) {\n      this.goPrevious(e)\n      return\n    }\n\n    // allow jumping across\n    if (e.keyCode === this.TAB_KEY) {\n      return\n    }\n\n    if (e.srcElement.maxLength === e.srcElement.value.length) {\n      this.goNext(e)\n    }\n  }\n\n  private goPrevious(e: any): void {\n    const previousControl = e.srcElement.previousElementSibling\n\n    if (previousControl) {\n      previousControl.focus()\n      previousControl.select()\n    }\n  }\n\n  private goNext(e: any): void {\n    const nextControl = e.srcElement.nextElementSibling\n\n    if (nextControl) {\n      nextControl.focus()\n      nextControl.select()\n    } else if (this.autoblur) {\n      e.srcElement.blur()\n    }\n  }\n\n  @HostListener('keydown', ['$event']) onKeyDown(e: any) {\n    // prevent whitespace\n    if (e.keyCode === this.SPACE_KEY) {\n      e.preventDefault()\n      return\n    }\n\n    // assure only one number\n    if (\n      e.srcElement.type === 'number' &&\n      e.keyCode !== this.DELETE_KEY &&\n      e.keyCode !== this.BACKSPACE_KEY &&\n      e.keyCode !== this.RIGHT_ARROW_KEY &&\n      e.keyCode !== this.LEFT_ARROW_KEY &&\n      e.keyCode !== this.TAB_KEY\n    ) {\n      e.srcElement.value = e.srcElement.value.toString().substring(0, 0)\n    }\n  }\n}\n","import { Directive, ElementRef, Input, OnInit } from '@angular/core'\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: '[transformInputValue]'\n})\nexport class TransformInputValueDirective implements OnInit {\n  @Input() uppercase = false\n\n  constructor(private el: ElementRef) {}\n\n  ngOnInit(): void {\n    this.uppercase\n      ? (this.el.nativeElement.style.textTransform = 'uppercase')\n      : (this.el.nativeElement.style.textTransform = '')\n  }\n}\n","import { AfterViewInit, Directive, ElementRef, Input } from '@angular/core'\n\n@Directive({\n  // eslint-disable-next-line @angular-eslint/directive-selector\n  selector: '[autofocusFirstInput]'\n})\nexport class AutofocusFirstInputDirective implements AfterViewInit {\n  @Input() autofocus = false\n\n  constructor(private elementRef: ElementRef) {}\n\n  ngAfterViewInit() {\n    if (this.autofocus) {\n      const firstInput = this.elementRef.nativeElement.querySelector(\n        'input'\n      ) as HTMLInputElement\n\n      // wait for control value set so it can be selected and overridden on typing\n      setTimeout(() => {\n        firstInput.focus()\n        firstInput.select()\n      })\n    }\n  }\n}\n","import {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  DestroyRef,\n  Input,\n  OnInit,\n  inject\n} from '@angular/core'\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormArray,\n  FormControl,\n  NgControl,\n  ValidationErrors,\n  Validator\n} from '@angular/forms'\nimport {\n  asyncScheduler,\n  distinctUntilChanged,\n  map,\n  tap\n} from 'rxjs'\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n  selector: 'ngx-pass-code',\n  templateUrl: './pass-code.component.html',\n  styleUrls: ['./pass-code.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PassCodeComponent\n  implements OnInit, ControlValueAccessor, Validator\n{\n  @Input() length = 0\n  @Input() type: 'text' | 'number' | 'password' = 'text'\n  @Input() uppercase = false\n  @Input() autofocus = false // set focus on first input\n  @Input() autoblur = false // remove focus from last input when filled\n\n  passCodes!: FormArray<FormControl>\n  isCodeInvalid = false // validation ui is shown only if all controls are invalid\n\n  private initialized = false\n  private destroyRef$ = inject(DestroyRef)\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onChange = (value: string | number | null) => {}\n\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  onTouched = () => {}\n\n  constructor(\n    private controlDirective: NgControl,\n    private cdRef: ChangeDetectorRef\n  ) {\n    this.controlDirective.valueAccessor = this\n  }\n\n  ngOnInit(): void {\n    this.passCodes = new FormArray(\n      [...new Array(this.length)].map(() => new FormControl(''))\n    )\n\n    this.setSyncValidatorsFromParent()\n    this.updateParentControlValidation()\n    this.propagateViewValueToModel()\n  }\n\n  writeValue(value: string): void {\n    const stringifyTrimmedValue = value?.toString().trim()\n    if (!this.initialized) {\n      // https://github.com/angular/angular/issues/29218 - have to know length property before writing any value\n      asyncScheduler.schedule(() => {\n        this.initialized = true\n        this.propagateModelValueToView(stringifyTrimmedValue)\n        this.cdRef.markForCheck() // because of scheduling\n      })\n    } else {\n      this.propagateModelValueToView(stringifyTrimmedValue)\n    }\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    if (!this.initialized) {\n      asyncScheduler.schedule(() => {\n        this.disableControls(isDisabled)\n      })\n\n      return\n    }\n\n    this.disableControls(isDisabled)\n  }\n\n  validate(): ValidationErrors | null {\n    if (this.passCodes.valid) {\n      return null\n    }\n\n    const errors = this.passCodes.controls\n      .map(control => control.errors)\n      .filter(error => error !== null)\n\n    return errors.length ? errors : null\n  }\n\n  private get parentControl(): AbstractControl<any, any> {\n    return this.controlDirective.control as AbstractControl<any, any>\n  }\n\n  private setSyncValidatorsFromParent(): void {\n    const parentValidators = this.parentControl.validator\n\n    if (!parentValidators) {\n      return\n    }\n\n    this.passCodes.controls.forEach(control => {\n      control.setValidators(parentValidators)\n    })\n    this.passCodes.updateValueAndValidity({ emitEvent: false })\n  }\n\n  private updateParentControlValidation(): void {\n    this.parentControl.setValidators(this.validate.bind(this))\n    this.parentControl.updateValueAndValidity({ emitEvent: false })\n  }\n\n  private propagateModelValueToView(value: string): void {\n    value ? this.setValue(value) : this.resetValue()\n    this.updatePassCodeValidity()\n  }\n\n  private setValue(value: string): void {\n    if (this.type === 'number' && isNaN(parseInt(value))) {\n      throw new TypeError(\n        'Provided value does not match provided type property number!'\n      )\n    }\n\n    const splittedValue = value.substring(0, this.length).split('') // remove chars after specified length and split\n\n    if (splittedValue.length < this.length) {\n      this.resetValue()\n    }\n\n    this.passCodes.patchValue(splittedValue, { emitEvent: false })\n  }\n\n  private resetValue(): void {\n    const nullValues = Array(this.length).fill(null)\n    this.passCodes.patchValue(nullValues, { emitEvent: false })\n  }\n\n  private propagateViewValueToModel(): void {\n    this.passCodes.valueChanges\n      .pipe(\n        tap(() => this.updatePassCodeValidity()),\n        map(codes => {\n          const code = codes.join('')\n\n          if (this.passCodes.invalid || !code) {\n            return null\n          }\n\n          if (this.type === 'number') {\n            return parseInt(code)\n          }\n\n          return this.uppercase ? code.toUpperCase() : code\n        }),\n        distinctUntilChanged(),\n        takeUntilDestroyed(this.destroyRef$)\n      )\n      .subscribe(this.onChange)\n  }\n\n  private updatePassCodeValidity(): void {\n    const allControlsAreInvalid = this.validate()?.['length'] === this.length\n    this.isCodeInvalid = allControlsAreInvalid && this.passCodes.dirty\n    this.parentControl.updateValueAndValidity({ emitEvent: false })\n  }\n\n  private disableControls(isDisabled: boolean): void {\n    isDisabled\n      ? this.passCodes.disable({ emitEvent: false })\n      : this.passCodes.enable({ emitEvent: false })\n\n    this.parentControl.updateValueAndValidity({ emitEvent: false })\n  }\n}\n","<div\n  class=\"container\"\n  [autofocus]=\"autofocus && !!passCodes.controls.length\"\n  autofocusFirstInput\n>\n  <input\n    *ngFor=\"let control of passCodes.controls\"\n    (blur)=\"onTouched()\"\n    onclick=\"select()\"\n    [autoblur]=\"autoblur\"\n    [formControl]=\"control\"\n    [type]=\"type\"\n    [uppercase]=\"uppercase\"\n    [ngClass]=\"{\n      'invalid-input': isCodeInvalid\n    }\"\n    maxlength=\"1\"\n    focusNextPreviousInput\n    transformInputValue\n    autofocusFirst\n  />\n</div>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\nimport { ReactiveFormsModule } from '@angular/forms'\nimport { PassCodeComponent } from './component/pass-code.component'\nimport { AutofocusFirstInputDirective } from './directives/autofocus-first-input.directive'\nimport { FocusNextPreviousInputDirective } from './directives/focus-next-previous-input.directive'\nimport { TransformInputValueDirective } from './directives/transform-uppercase.directive'\n\n@NgModule({\n  imports: [CommonModule, ReactiveFormsModule],\n  declarations: [\n    PassCodeComponent,\n    FocusNextPreviousInputDirective,\n    TransformInputValueDirective,\n    AutofocusFirstInputDirective\n  ],\n  exports: [PassCodeComponent]\n})\nexport class NgxPassCodeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3.FocusNextPreviousInputDirective","i4.TransformInputValueDirective","i5.AutofocusFirstInputDirective"],"mappings":"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"}