UNPKG

ngx-otp-input

Version:

One Time Password input library for Angular (14+)

1 lines 24.3 kB
{"version":3,"file":"ngx-otp-input.mjs","sources":["../../../projects/ngx-otp-input/src/lib/directives/paste.directive.ts","../../../projects/ngx-otp-input/src/lib/directives/autoFocus.directive.ts","../../../projects/ngx-otp-input/src/lib/directives/inputNavigations.directive.ts","../../../projects/ngx-otp-input/src/lib/directives/autoBlur.directive.ts","../../../projects/ngx-otp-input/src/lib/directives/ariaLabels.directive.ts","../../../projects/ngx-otp-input/src/lib/default.config.ts","../../../projects/ngx-otp-input/src/lib/ngx-otp-input.component.ts","../../../projects/ngx-otp-input/src/lib/ngx-otp-input.component.html","../../../projects/ngx-otp-input/src/public-api.ts","../../../projects/ngx-otp-input/src/ngx-otp-input.ts"],"sourcesContent":["import {\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n QueryList,\n} from '@angular/core';\n\n@Directive({\n standalone: true,\n selector: '[ngxOtpPaste]',\n})\nexport class PasteDirective {\n @ContentChildren('otpInputElement', { descendants: true })\n inputs!: QueryList<ElementRef<HTMLInputElement>>;\n\n @Input() regexp!: RegExp;\n\n @Output() handlePaste: EventEmitter<string[]> = new EventEmitter<string[]>();\n\n @HostListener('paste', ['$event'])\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const clipboardData = event.clipboardData?.getData('text');\n if (clipboardData && this.regexp.test(clipboardData)) {\n const values = clipboardData.split('');\n this.inputs.forEach((input, index) => {\n if (values[index]) {\n input.nativeElement.value = values[index];\n }\n });\n this.handlePaste.emit(values);\n }\n }\n}\n","import {\n AfterContentInit,\n ContentChild,\n Directive,\n ElementRef,\n Input,\n} from '@angular/core';\n\n@Directive({\n standalone: true,\n selector: '[ngxAutoFocus]',\n})\nexport class AutoFocusDirective implements AfterContentInit {\n @ContentChild('otpInputElement', { static: false })\n firstInput!: ElementRef<HTMLInputElement>;\n\n @Input() ngxAutoFocus!: boolean;\n\n ngAfterContentInit(): void {\n if (this.ngxAutoFocus && this.firstInput) {\n this.firstInput.nativeElement.focus();\n }\n }\n}\n","import {\n AfterContentInit,\n ContentChildren,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n Output,\n QueryList,\n} from '@angular/core';\n\nexport type OtpValueChangeEvent = [number, string];\n\n@Directive({\n standalone: true,\n selector: '[ngxInputNavigations]',\n})\nexport class InputNavigationsDirective implements AfterContentInit {\n private inputsArray: ElementRef<HTMLInputElement>[] = [];\n\n @ContentChildren('otpInputElement', { descendants: true })\n inputs!: QueryList<ElementRef<HTMLInputElement>>;\n\n @Input() regexp!: RegExp;\n\n @Output() valueChange: EventEmitter<OtpValueChangeEvent> =\n new EventEmitter<OtpValueChangeEvent>();\n\n ngAfterContentInit() {\n this.inputsArray = this.inputs.toArray();\n }\n\n private findInputIndex(target: HTMLElement): number {\n return this.inputsArray.findIndex(\n (input) => input.nativeElement === target,\n );\n }\n\n private setFocus(index: number): void {\n if (index >= 0 && index < this.inputs.length) {\n this.inputsArray[index].nativeElement.focus();\n }\n }\n\n @HostListener('keydown.arrowLeft', ['$event'])\n onArrowLeft(event: KeyboardEvent): void {\n const index = this.findInputIndex(event.target as HTMLElement);\n if (index > 0) {\n this.setFocus(index - 1);\n }\n }\n\n @HostListener('keydown.arrowRight', ['$event'])\n onArrowRight(event: KeyboardEvent): void {\n const index = this.findInputIndex(event.target as HTMLElement);\n if (index < this.inputs.length - 1) {\n this.setFocus(index + 1);\n }\n }\n\n @HostListener('keydown.backspace', ['$event'])\n onBackspace(event: KeyboardEvent): void {\n const index = this.findInputIndex(event.target as HTMLElement);\n if (index >= 0) {\n this.valueChange.emit([index, '']);\n this.setFocus(index - 1);\n event.preventDefault();\n }\n }\n\n @HostListener('input', ['$event'])\n onKeyUp(event: InputEvent): void {\n const index = this.findInputIndex(event.target as HTMLElement);\n if ((event.target as HTMLInputElement).value?.match(this.regexp)) {\n this.valueChange.emit([index, (event.target as HTMLInputElement).value]);\n this.setFocus(index + 1);\n } else {\n this.inputsArray[index].nativeElement.value = '';\n }\n }\n}\n","import {\n AfterContentInit,\n ContentChildren,\n Directive,\n ElementRef,\n Input,\n OnChanges,\n QueryList,\n SimpleChanges,\n} from '@angular/core';\n\n@Directive({\n standalone: true,\n selector: '[ngxAutoBlur]',\n})\nexport class AutoBlurDirective implements OnChanges, AfterContentInit {\n private inputHTMLElements: HTMLInputElement[] = [];\n\n @ContentChildren('otpInputElement', { descendants: true })\n inputs!: QueryList<ElementRef<HTMLInputElement>>;\n\n @Input()\n ngxAutoBlur!: boolean;\n\n @Input()\n isFormValid!: boolean;\n\n ngOnChanges(changes: SimpleChanges) {\n if (\n this.ngxAutoBlur &&\n this.inputHTMLElements.length > 0 &&\n changes['isFormValid'].currentValue\n ) {\n this.inputHTMLElements.forEach((input) => {\n input.blur();\n });\n }\n }\n\n ngAfterContentInit() {\n this.inputs.forEach((input) => {\n this.inputHTMLElements.push(input.nativeElement);\n });\n }\n}\n","import {\n Directive,\n Input,\n ElementRef,\n ContentChildren,\n QueryList,\n AfterContentInit,\n} from '@angular/core';\n\n@Directive({\n standalone: true,\n selector: '[ngxOtpAriaLabels]',\n})\nexport class AriaLabelsDirective implements AfterContentInit {\n @ContentChildren('otpInputElement', { descendants: true })\n inputs!: QueryList<ElementRef<HTMLInputElement>>;\n\n @Input() ngxOtpAriaLabels!: string[];\n\n ngAfterContentInit(): void {\n this.setAriaLabelsAttrs();\n }\n\n private getDefaultAriaLabelText(index: number): string {\n return `One Time Password Input Number ${index + 1}`;\n }\n\n private setAriaLabelsAttrs(): void {\n this.inputs.forEach((input, index) => {\n input.nativeElement.setAttribute(\n 'aria-label',\n this.ngxOtpAriaLabels[index] ?? this.getDefaultAriaLabelText(index),\n );\n });\n }\n}\n","export interface NgxOtpInputComponentOptions {\n otpLength?: number;\n autoFocus?: boolean;\n autoBlur?: boolean;\n hideInputValues?: boolean;\n regexp?: RegExp;\n showBlinkingCursor?: boolean;\n ariaLabels?: string[];\n inputMode?: string;\n}\n\nexport const defaultOptions: NgxOtpInputComponentOptions = {\n otpLength: 6,\n autoFocus: true,\n autoBlur: true,\n hideInputValues: false,\n regexp: /^[0-9]+$/,\n showBlinkingCursor: true,\n ariaLabels: [],\n inputMode: 'numeric',\n};\n","import {\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n FormArray,\n FormControl,\n ReactiveFormsModule,\n Validators,\n} from '@angular/forms';\nimport { PasteDirective } from './directives/paste.directive';\nimport { AutoFocusDirective } from './directives/autoFocus.directive';\nimport {\n InputNavigationsDirective,\n OtpValueChangeEvent,\n} from './directives/inputNavigations.directive';\nimport { AutoBlurDirective } from './directives/autoBlur.directive';\nimport { AriaLabelsDirective } from './directives/ariaLabels.directive';\nimport { NgxOtpInputComponentOptions, defaultOptions } from './default.config';\n\nexport enum NgxOtpStatus {\n SUCCESS = 'success',\n FAILED = 'failed',\n}\n\n@Component({\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n PasteDirective,\n AutoFocusDirective,\n InputNavigationsDirective,\n AutoBlurDirective,\n AriaLabelsDirective,\n ],\n selector: 'ngx-otp-input',\n templateUrl: 'ngx-otp-input.component.html',\n styleUrls: ['ngx-otp-input.component.scss'],\n})\nexport class NgxOtpInputComponent implements OnInit, OnChanges {\n protected ngxOtpInputArray!: FormArray;\n protected ngxOtpOptions: NgxOtpInputComponentOptions = defaultOptions;\n\n @Input() set options(customOptions: NgxOtpInputComponentOptions) {\n this.ngxOtpOptions = { ...defaultOptions, ...customOptions };\n }\n\n @Input() status: NgxOtpStatus | null | undefined;\n @Input() disabled = false;\n @Input() otp: string | null | undefined;\n @Output() otpChange = new EventEmitter<string[]>();\n @Output() otpComplete = new EventEmitter<string>();\n\n // For testing purposes\n get ngxOtpOptionsInUse(): NgxOtpInputComponentOptions {\n return this.ngxOtpOptions;\n }\n\n get inputType(): string {\n return this.ngxOtpOptions.hideInputValues ? 'password' : 'text';\n }\n\n get isOTPSuccess(): boolean {\n return this.status === NgxOtpStatus.SUCCESS;\n }\n\n get isOTPFailed(): boolean {\n return this.status === NgxOtpStatus.FAILED;\n }\n\n ngOnInit(): void {\n this.initOtpInputArray();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const otpChange = changes['otp'];\n if (otpChange?.currentValue) {\n if (!otpChange.firstChange) {\n this.setInitialOtp(otpChange.currentValue);\n } else {\n this.ngxOtpOptions.autoFocus = false;\n }\n }\n }\n\n private initOtpInputArray(): void {\n this.ngxOtpInputArray = new FormArray(\n Array.from(\n { length: this.ngxOtpOptions.otpLength! },\n () => new FormControl('', Validators.required),\n ),\n );\n if (this.otp) {\n this.setInitialOtp(this.otp);\n }\n }\n\n private setInitialOtp(otp: string): void {\n if (this.ngxOtpOptions.regexp!.test(otp)) {\n const otpValueArray = otp.split('');\n otpValueArray.forEach((value, index) => {\n this.ngxOtpInputArray.controls[index].setValue(value ?? '');\n });\n this.emitOtpValueChange();\n if (otpValueArray.length !== this.ngxOtpOptions.otpLength) {\n console.warn(\n 'OTP length does not match the provided otpLength option!',\n );\n }\n } else {\n throw new Error('Invalid OTP provided for the component <ngx-otp-input>');\n }\n }\n\n protected handleInputChanges($event: OtpValueChangeEvent) {\n const [index, value] = $event;\n this.ngxOtpInputArray.controls[index].setValue(value);\n this.emitOtpValueChange();\n }\n\n protected handlePasteChange($event: string[]): void {\n if ($event.length === this.ngxOtpOptions.otpLength) {\n this.ngxOtpInputArray.setValue($event);\n } else {\n $event.map((value, index) => {\n this.ngxOtpInputArray.controls[index]?.setValue?.(value);\n });\n }\n this.emitOtpValueChange();\n }\n\n private emitOtpValueChange(): void {\n this.otpChange.emit(this.ngxOtpInputArray.value);\n if (this.ngxOtpInputArray.valid) {\n this.otpComplete.emit(this.ngxOtpInputArray.value.join(''));\n }\n }\n\n protected isInputFilled(index: number): boolean {\n return !!this.ngxOtpInputArray.controls[index].value;\n }\n\n reset(): void {\n this.ngxOtpInputArray.reset();\n }\n}\n","<form\n ngxOtpPaste\n ngxInputNavigations\n [regexp]=\"ngxOtpOptions.regexp!\"\n [isFormValid]=\"ngxOtpInputArray.valid\"\n [ngxAutoFocus]=\"ngxOtpOptions.autoFocus!\"\n [ngxAutoBlur]=\"ngxOtpOptions.autoBlur!\"\n [ngxOtpAriaLabels]=\"ngxOtpOptions.ariaLabels!\"\n [ngClass]=\"{\n 'ngx-blinking-cursor': ngxOtpOptions.showBlinkingCursor\n }\"\n (valueChange)=\"handleInputChanges($event)\"\n (handlePaste)=\"handlePasteChange($event)\"\n class=\"ngx-otp-input-form\"\n data-testid=\"ngx-otp-input-form\"\n>\n <input\n *ngFor=\"let control of ngxOtpInputArray.controls; let i = index\"\n #otpInputElement\n [value]=\"control.value\"\n [type]=\"inputType\"\n [inputMode]=\"ngxOtpOptions.inputMode\"\n [disabled]=\"disabled\"\n [ngClass]=\"{\n 'ngx-otp-input-disabled': disabled,\n 'ngx-otp-input-filled': isInputFilled(i),\n 'ngx-otp-input-success': isOTPSuccess,\n 'ngx-otp-input-failed': isOTPFailed\n }\"\n class=\"ngx-otp-input-box\"\n maxlength=\"1\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n autocapitalize=\"off\"\n autocorrect=\"off\"\n data-testid=\"ngx-otp-input-box\"\n />\n</form>\n","/*\n * Public API Surface of ngx-otp-input\n */\n\nexport * from './lib/ngx-otp-input.component';\nexport { NgxOtpInputComponentOptions } from './lib/default.config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}