{"version":3,"file":"otp-angular.mjs","sources":["../../../projects/otp-angular/src/lib/alpha-numeric.ts","../../../projects/otp-angular/src/lib/default.ts","../../../projects/otp-angular/src/lib/disabled.ts","../../../projects/otp-angular/src/lib/otp-angular.ts","../../../projects/otp-angular/src/lib/otp-angular.html","../../../projects/otp-angular/src/public-api.ts","../../../projects/otp-angular/src/otp-angular.ts"],"sourcesContent":["import { Directive, HostListener, inject } from '@angular/core';\nimport { NgControl } from '@angular/forms';\n\n@Directive({\n  selector: '[AlphaNumeric]'\n})\nexport class AlphaNumeric {\n  private control = inject(NgControl);\n\n  @HostListener('input', ['$event'])\n  onInputChange(event: Event): void {\n    const input = event.target as HTMLInputElement;\n    const cleanValue = input.value.replace(/[^a-zA-Z0-9]/g, '');\n    if (input.value !== cleanValue) {\n      input.value = cleanValue;\n      this.control.control?.setValue(cleanValue); // Keep form state in sync\n    }\n  }\n\n}\n","import { IOtp } from \"./type\";\n\nexport class DefaultOptions implements IOtp {\n\n    length: number = 4;\n    numbersOnly: boolean = false;\n    autoFocus: boolean = false;\n    isPassword: boolean = false;\n    showError: boolean = false;\n    showCaps: boolean = true;\n    containerClass: string | Array<string> = '';\n    containerStyles: Object = {};\n    inputClass: string | Array<string> = ''\n    inputStyles: Object = {};\n    placeholder: string = '';\n    separator: string = '';\n    resend: number = 0;\n    resendLabel: string = 'RESEND VERIFICATION CODE';\n    resendContainerClass: string = '';\n    resendLabelClass: string = '';\n    resendTimerClass: string = '';\n\n    constructor(data?: any) {\n        if (!data) return;\n        Object.keys(data).forEach((key: string) => {\n            typeof (data[key] !== undefined) && typeof (data[key] !== null) && ((this as any)[key] = data[key]);\n        })\n    }\n}","import { Directive, DOCUMENT, ElementRef, inject, Input } from '@angular/core';\n\n@Directive({\n  selector: '[otpDisabled]'\n})\nexport class Disabled {\n  @Input('otpDisabled') otpDisabled: boolean = false;\n  private el = inject(ElementRef);\n  private document = inject(DOCUMENT);\n\n  constructor() {\n    this.document.addEventListener(\"mousemove\", (e) => {\n      this.otpDisabledInit(this.otpDisabled);\n    });\n  }\n\n  private otpDisabledInit(otpDisabled: boolean): void {\n    if (this.el.nativeElement.nodeName !== 'INPUT') {\n      if (otpDisabled) {\n        this.el.nativeElement?.classList.add('disabled');\n        this.el.nativeElement?.setAttribute('disabled', true);\n        this.el.nativeElement.style.pointerEvents = 'none';\n        this.el.nativeElement.setAttribute('disabled', true);\n      } else {\n        this.el.nativeElement?.classList.remove('disabled');\n        this.el.nativeElement.style.pointerEvents = 'auto';\n        this.el.nativeElement?.removeAttribute('disabled');\n        this.el.nativeElement.removeAttribute('disabled');\n      }\n    } else {\n      if (otpDisabled) {\n        this.el.nativeElement.setAttribute('readonly', true);\n        this.el.nativeElement.setAttribute('disabled', true);\n      } else {\n        this.el.nativeElement.removeAttribute('readonly');\n        this.el.nativeElement.removeAttribute('disabled');\n      }\n    }\n  }\n\n}\n","import { afterNextRender, Component, computed, DOCUMENT, effect, inject, input, linkedSignal, model, output, signal, untracked } from '@angular/core';\nimport { AlphaNumeric } from './alpha-numeric';\nimport { FormsModule } from '@angular/forms';\nimport { IOtp } from './type';\nimport { DefaultOptions } from './default';\nimport { Disabled } from './disabled';\n\n@Component({\n  selector: 'otp-angular',\n  imports: [FormsModule, AlphaNumeric, Disabled],\n  templateUrl: './otp-angular.html',\n  styleUrl: './otp-angular.scss'\n})\nexport class OtpAngular {\n  private readonly document = inject(DOCUMENT);\n\n  config = model<IOtp>();\n  disabled = signal<boolean>(false);\n  onInputChange = output<string | number | null>();\n\n\n  protected defaultConfig = computed(() => {\n    return {\n      ...new DefaultOptions(),\n      ...this.config()\n    }\n  })\n\n  protected myValue = signal<Array<number | string>>([]);\n  protected inputStyleArray = computed(() => {\n    const _config = this.config();\n    if (Array.isArray(_config?.inputStyles)) {\n      return _config?.inputStyles\n    } else {\n      return [{ ..._config?.inputStyles }]\n    }\n  })\n\n  // Resend\n  protected countdown = linkedSignal(() => {\n    return Number(this.defaultConfig()?.resend)\n  })\n  protected isResendAllowed = signal<boolean>(false);\n  onResendAvailable = output<boolean>();\n  private timer: any;\n\n  constructor() {\n    effect(() => {\n      const _countdown = this.countdown();\n      if (_countdown <= 0) {\n        clearInterval(this.timer)\n        this.isResendAllowed.set(true)\n      }\n    })\n\n    effect(() => {\n      const _isResendAllowed = this.isResendAllowed();\n      if (!_isResendAllowed) {\n        untracked(() => {\n          this.timer = setInterval(() => {\n            this.countdown.update(value => value - 1)\n          }, 1000);\n        })\n      }\n    })\n\n    afterNextRender(() => {\n      const _config = this.defaultConfig();\n      if (_config.autoFocus) {\n        const _firstID = this.document.getElementById('otp-input-1') as HTMLInputElement;\n        _firstID.focus();\n      }\n    })\n  }\n\n  setValue(value: string | number): void {\n    this.myValue.set(value.toString().split(''));\n    const _config = this.defaultConfig();\n    this.onInputChange.emit(_config.numbersOnly ? Number(value) : value.toString().trim())\n  }\n\n\n  protected keydown(e: KeyboardEvent, index: number): void {\n    const _config = this.defaultConfig();\n    const prev = this.document.getElementById(`otp-input-${index}`) as HTMLInputElement;\n    const current = this.document.getElementById(`otp-input-${index + 1}`) as HTMLInputElement;\n    const next = this.document.getElementById(`otp-input-${index + 2}`) as HTMLInputElement;\n\n\n    if (e.key === 'Backspace') {\n      if (current.value.trim() === '') {\n        index !== 0 && prev.focus(), setTimeout(() => prev.select(), 0);\n      } else {\n        current.value = '';\n      }\n      return\n    }\n    if (e.key === 'ArrowLeft' && index !== 0) {\n      prev.focus();\n      setTimeout(() => prev.select(), 0);\n      return\n    }\n    if (e.key === 'ArrowRight' && index !== _config.length - 1) {\n      next.focus();\n      setTimeout(() => next.select(), 0);\n      return\n    }\n\n    const input = e.target as HTMLInputElement;\n\n    if (e.key.length === 1) {\n      const isAlphanumeric = /^[a-zA-Z0-9]*$/.test(e.key);\n      isAlphanumeric && (input.value = '');\n    }\n  }\n\n  protected onInput(e: Event, index: number): void {\n    const _config = this.defaultConfig();\n    const input = e.target as HTMLInputElement;\n\n    if (input.value.length > 1) {\n      if (input.value.length >= _config.length) {\n        const digits = input.value.toString().split('').map(Number);\n        for (let i = 0; i < _config.length; i++) {\n          const element = digits[i];\n          const srcElement = this.document.getElementById(`otp-input-${i + 1}`) as HTMLInputElement;\n          srcElement.value = element.toString();\n        }\n      } else {\n        const maxLength = input.value.length + index;\n        const digits = input.value.toString().padStart(Number(maxLength), '0').split('').map(Number);\n        a: for (let i = index; i < _config.length; i++) {\n          const element = digits[i];\n          if (element !== undefined) {\n            const srcElement = this.document.getElementById(`otp-input-${i + 1}`) as HTMLInputElement;\n            srcElement.value = element.toString();\n          } else {\n            break a;\n          }\n        }\n      }\n    }\n\n    const current = this.document.getElementById(`otp-input-${index + 1}`) as HTMLInputElement;\n    const next = this.document.getElementById(`otp-input-${index + 2}`) as HTMLInputElement;\n\n    if (input.value.trim() === '') return\n    index === _config.length - 1 ? current.blur() : next.focus();\n\n    if (_config.showCaps && e.target) {\n      input.value = input.value.toUpperCase();\n    }\n\n    this.emit();\n  }\n\n  protected blur(e: FocusEvent, index: number): void {\n    const _config = this.defaultConfig();\n    if (_config.showError) {\n      const input = e.target as HTMLInputElement;\n      if (input.value.trim() === '') {\n        input.classList.add('error')\n      } else {\n        input.classList.remove('error')\n      }\n    }\n  }\n\n  private emit(): void {\n    const _config = this.defaultConfig();\n    let output: string = '';\n\n    for (let index = 0; index < _config.length; index++) {\n      const input = this.document.getElementById(`otp-input-${index + 1}`) as HTMLInputElement;\n      output += input.value;\n    }\n\n    const _output = _config.numbersOnly ? Number(output) : output.trim();\n    if(_output.toString().trim() === '') {\n      this.onInputChange.emit(null)\n    } else {\n      this.onInputChange.emit(_output)\n    }\n\n  }\n\n\n  // Resend\n  protected resend(): void {\n    this.onResendAvailable.emit(true);\n  }\n\n  reset(): void {\n    const _config = this.defaultConfig();\n    console.log(\"_config: \", _config);\n    if (_config && _config.resend) {\n      this.countdown.set(_config.resend);\n      this.isResendAllowed.set(false)\n    }\n  }\n}\n","@let _config = defaultConfig();\n@let _myValue = myValue();\n@let _disabled = disabled();\n\n@if(_config) {\n@let _containerClass = _config.containerClass;\n@let containerClass = typeof _containerClass === 'string' ? _containerClass.split(' ')[0] : _containerClass.join(' ');\n@let _inputClass = _config.inputClass;\n@let inputClass = typeof _inputClass === 'string' ? _inputClass.split(' ')[0] : _inputClass;\n@let _containerStyles = _config.containerStyles;\n\n@let _inputStyles = inputStyleArray();\n\n@let _resend = _config.resend;\n@let _resendLabel = _config.resendLabel;\n@let _resendContainerClass = _config.resendContainerClass;\n@let _resendLabelClass = _config.resendLabelClass;\n@let _resendTimerClass = _config.resendTimerClass; \n\n<div class=\"__otpContainer {{containerClass}}\" [style]=\"_containerStyles\">\n    @for (item of [].constructor(_config.length); track $index) {\n        <div class=\"otp-input-wrapper\">\n            <input [id]=\"`otp-input-${$index+1}`\" [max]=\"1\" AlphaNumeric autocomplete=\"off\" name=\"dummy\"\n                [placeholder]=\"_config.placeholder\"\n                [otpDisabled]=\"_disabled\" [class]=\"inputClass[$index]\" [style]=\"_inputStyles[$index]\"\n                [attr.inputmode]=\"_config.numbersOnly ? 'numeric' : null\" [attr.pattern]=\"_config.numbersOnly ? '[0-9]*' : null\"\n                [type]=\"_config.isPassword ? `password` : `text`\"\n                (keydown)=\"keydown($event, $index)\" (blur)=\"blur($event, $index)\" (input)=\"onInput($event, $index)\"\n                [(ngModel)]=\"_myValue[$index]\" />\n                @if (_config.separator && $index < _config.length - 1) {\n                    <span class=\"otp-separator\">{{_config.separator.toString().split('')[0]}}</span>\n                }\n        </div>\n    }\n    @if(_resend && _resend > 0) {\n        <div class=\"otp-resend {{_resendContainerClass}}\">\n            @if (isResendAllowed()) {\n                <div aria-label=\"resend\" type=\"button\" class=\"resendTxt {{_resendLabelClass}}\" (click)=\"resend()\">{{_resendLabel}}</div>\n            } @else {\n                <div class=\"resendTxt {{_resendTimerClass}}\" >{{_resendLabel}} IN {{countdown()}}s</div>\n            }\n        </div>\n    }\n</div>\n}","/*\n * Public API Surface of otp-angular\n */\n\nexport * from './lib/otp-angular';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}