{"version":3,"file":"ngx-otp-inputs.mjs","sources":["../../../projects/ngx-otp-inputs/src/lib/ngx-otp-inputs.service.ts","../../../projects/ngx-otp-inputs/src/lib/ngx-otp-inputs.component.ts","../../../projects/ngx-otp-inputs/src/public-api.ts","../../../projects/ngx-otp-inputs/src/ngx-otp-inputs.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class NgxOtpInputsService {\r\n\r\n  constructor() { }\r\n}\r\n","import {\r\n  Component,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  OnInit,\r\n  QueryList,\r\n  ElementRef,\r\n  ViewChildren,\r\n  AfterViewInit,\r\n  forwardRef,\r\n  ChangeDetectorRef,\r\n} from '@angular/core';\r\nimport { CommonModule, NgFor } from '@angular/common';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n  selector: 'lib-ngx-otp-inputs',\r\n  standalone: true,\r\n  imports: [CommonModule, NgFor],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => NgxOtpInputsComponent),\r\n      multi: true,\r\n    },\r\n  ],\r\n\r\n  template: `\r\n    <div\r\n      [ngClass]=\"[\r\n        'otp-wrapper',\r\n        wrapperClass,\r\n        direction === 'rtl' ? 'rtl' : 'ltr'\r\n      ]\"\r\n      [style.direction]=\"direction\"\r\n      role=\"group\"\r\n    >\r\n      <input\r\n        #otpInput\r\n        [ngClass]=\"inputClasses\"\r\n        role=\"textbox\"\r\n        aria-multiline=\"false\"\r\n        *ngFor=\"let i of otpIndexes\"\r\n        [readonly]=\"readonly\"\r\n        [value]=\"otpValues[i]\"\r\n        (input)=\"onInput($event, i)\"\r\n        (keydown)=\"onKeyDown($event, i)\"\r\n        (paste)=\"onPaste($event)\"\r\n        (blur)=\"onTouched()\"\r\n        maxlength=\"1\"\r\n        [attr.type]=\"maskInput ? 'password' : 'text'\"\r\n        [attr.aria-label]=\"ariaLabels[i] || 'Digit ' + (i + 1)\"\r\n        [attr.tabindex]=\"disabled ? -1 : i + 1\"\r\n        [disabled]=\"disabled\"\r\n        [attr.inputmode]=\"inputMode\"\r\n        [attr.autocomplete]=\"i === 0 ? 'one-time-code' : null\"\r\n        aria-required=\"true\"\r\n      />\r\n    </div>\r\n  `,\r\n  styles: [\r\n    `\r\n      :host {\r\n        --ngx-otp-width: 48px;\r\n        --ngx-otp-height: 56px;\r\n        --ngx-otp-border-radius: 8px;\r\n        --ngx-otp-border-color: #ccc;\r\n        --ngx-otp-focus-border-color: #1976d2;\r\n        --ngx-otp-font-size: 18px;\r\n        --ngx-otp-bg: #fff;\r\n        --ngx-otp-text-color: #000;\r\n        --ngx-otp-gap: 8px;\r\n      }\r\n      .otp-input.otp-success {\r\n        border-color: #4caf50 !important;\r\n      }\r\n\r\n      .otp-input.otp-failed {\r\n        border-color: #f44336 !important;\r\n      }\r\n\r\n      .otp-wrapper {\r\n        display: flex;\r\n        gap: var(--ngx-otp-gap);\r\n        direction: inherit;\r\n        flex-direction: row;\r\n      }\r\n      .otp-wrapper.ltr {\r\n        flex-direction: row;\r\n      }\r\n\r\n      .otp-wrapper.rtl {\r\n        flex-direction: row-reverse;\r\n      }\r\n\r\n      .otp-input {\r\n        width: var(--ngx-otp-width);\r\n        height: var(--ngx-otp-height);\r\n        font-size: var(--ngx-otp-font-size);\r\n        border-radius: var(--ngx-otp-border-radius);\r\n        background-color: var(--ngx-otp-bg);\r\n        color: var(--ngx-otp-text-color);\r\n        border: 1px solid var(--ngx-otp-border-color);\r\n        text-align: center;\r\n        box-sizing: border-box;\r\n        transition: border-color 0.2s ease-in-out,\r\n          background-color 0.2s ease-in-out;\r\n        caret-color: var(--ngx-otp-text-color);\r\n      }\r\n\r\n      .otp-input:focus {\r\n        border-color: var(--ngx-otp-focus-border-color);\r\n        outline: none;\r\n      }\r\n\r\n      .otp-input.has-error {\r\n        border-color: var(--ngx-otp-error-border-color, red);\r\n      }\r\n\r\n      .otp-input:disabled {\r\n        background-color: #f1f1f1;\r\n        cursor: not-allowed;\r\n        opacity: 0.6;\r\n      }\r\n    `,\r\n  ],\r\n})\r\nexport class NgxOtpInputsComponent\r\n  implements OnInit, ControlValueAccessor, AfterViewInit\r\n{\r\n  constructor(private cdr: ChangeDetectorRef) {}\r\n  otpIndexes: number[] = [];\r\n  otpValues: string[] = [];\r\n\r\n  // == Inputs ==\r\n  @Input() length = 4;\r\n  @Input() direction: 'ltr' | 'rtl' = 'ltr';\r\n\r\n  @Input() disabled = false;\r\n  @Input() inputType: 'number' | 'text' | 'alphanumeric' = 'number';\r\n  @Input() autoFocus = true;\r\n  @Input() inputClass = 'otp-input';\r\n  @Input() wrapperClass = 'otp-wrapper';\r\n  @Input() readonly = false;\r\n  @Input() status: 'success' | 'failed' | null = null;\r\n\r\n  @Input() autoSubmit = false;\r\n  @Input() maskInput = false;\r\n  @Input() inputMode: 'text' | 'numeric' | 'decimal' | 'tel' | 'email' =\r\n    'numeric';\r\n  @Input() autoBlur = false;\r\n  @Input() ariaLabels: string[] = [];\r\n\r\n  // == Outputs ==\r\n  @Output() completed = new EventEmitter<string>();\r\n  @Output() changed = new EventEmitter<string>();\r\n\r\n  // == Template References ==\r\n  @ViewChildren('otpInput') inputs!: QueryList<ElementRef<HTMLInputElement>>;\r\n  private pendingValue: string | null = null;\r\n\r\n  private onChange: (value: string) => void = () => {};\r\n  public onTouched: () => void = () => {};\r\n  // == Lifecycle ==\r\n\r\n  ngOnInit() {\r\n    this.otpValues = Array(this.length).fill('');\r\n    this.otpIndexes = Array.from({ length: this.length }, (_, i) => i);\r\n  }\r\n  ngAfterViewInit(): void {\r\n    if (this.autoFocus) {\r\n      this.focusFirstInput();\r\n    }\r\n    if (this.pendingValue != null) {\r\n      this.setOtpValue(this.pendingValue);\r\n      this.pendingValue = null;\r\n    }\r\n  }\r\n\r\n  // == ControlValueAccessor ==\r\n\r\n  writeValue(value: string): void {\r\n    if (typeof value === 'string') {\r\n      if (this.inputs && this.inputs.length) {\r\n        this.setOtpValue(value);\r\n        this.pendingValue = null;\r\n      } else {\r\n        this.pendingValue = value;\r\n      }\r\n    } else {\r\n      this.pendingValue = null;\r\n      this.otpValues = Array(this.length).fill('');\r\n    }\r\n  }\r\n\r\n  private setOtpValue(value: string) {\r\n    const chars = value.slice(0, this.length).split('');\r\n    this.otpValues = [...chars];\r\n\r\n    while (this.otpValues.length < this.length) {\r\n      this.otpValues.push('');\r\n    }\r\n\r\n    this.cdr.detectChanges();\r\n\r\n    queueMicrotask(() => {\r\n      const inputs = this.inputs.toArray();\r\n      for (let i = 0; i < this.otpValues.length; i++) {\r\n        const inputEl = inputs[i]?.nativeElement;\r\n        if (inputEl) {\r\n          inputEl.value = this.otpValues[i];\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  registerOnChange(fn: (value: string) => void): void {\r\n    this.onChange = fn;\r\n  }\r\n\r\n  registerOnTouched(fn: () => void): void {\r\n    this.onTouched = fn;\r\n  }\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n  }\r\n\r\n  onInput(event: Event, index: number) {\r\n    const input = event.target as HTMLInputElement;\r\n    let val = input.value;\r\n\r\n    val = val.replace(this.getSanitizeRegex(), '');\r\n    const singleChar = val.charAt(0) || '';\r\n\r\n    this.otpValues[index] = singleChar;\r\n    input.value = singleChar;\r\n\r\n    this.emitChange();\r\n\r\n    if (singleChar) {\r\n      if (this.direction === 'rtl' && index > 0) {\r\n        const prev = input.previousElementSibling as HTMLInputElement;\r\n        prev?.focus();\r\n      } else if (this.direction === 'ltr' && index < this.length - 1) {\r\n        const next = input.nextElementSibling as HTMLInputElement;\r\n        next?.focus();\r\n      }\r\n    }\r\n\r\n    this.handleCompletion(input);\r\n  }\r\n\r\n  onKeyDown(event: KeyboardEvent, index: number) {\r\n    const input = event.target as HTMLInputElement;\r\n\r\n    // Backspace\r\n    if (event.key === 'Backspace') {\r\n      if (input.value) {\r\n        this.otpValues[index] = '';\r\n        this.emitChange();\r\n      } else {\r\n        const moveIndex = this.direction === 'rtl' ? index + 1 : index - 1;\r\n\r\n        if (moveIndex >= 0 && moveIndex < this.length) {\r\n          this.otpValues[moveIndex] = '';\r\n          const targetInput = this.inputs.toArray()[moveIndex]?.nativeElement;\r\n          setTimeout(() => targetInput?.focus(), 0);\r\n          this.emitChange();\r\n        }\r\n      }\r\n    }\r\n\r\n    // Enter\r\n    if (event.key === 'Enter') {\r\n      if (this.isCompleted && this.autoSubmit) {\r\n        this.completed.emit(this.otpValue);\r\n      }\r\n    }\r\n\r\n    //  Right Arrow\r\n    if (event.key === 'ArrowRight') {\r\n      const next = input.nextElementSibling as HTMLInputElement;\r\n      setTimeout(() => next?.focus(), 0);\r\n    }\r\n\r\n    //  Left Arrow\r\n    if (event.key === 'ArrowLeft') {\r\n      const prev = input.previousElementSibling as HTMLInputElement;\r\n      setTimeout(() => prev?.focus(), 0);\r\n    }\r\n  }\r\n\r\n  onPaste(event: ClipboardEvent) {\r\n    event.preventDefault();\r\n    const pasted = event.clipboardData?.getData('text') ?? '';\r\n    const sanitized = pasted.replace(this.getSanitizeRegex(), '');\r\n    const inputsArray = this.inputs.toArray().map((el) => el.nativeElement);\r\n\r\n    if (this.direction === 'rtl') {\r\n      for (let i = 0; i < sanitized.length && i < this.length; i++) {\r\n        const rtlIndex = this.length - 1 - i;\r\n        this.otpValues[rtlIndex] = sanitized[i];\r\n      }\r\n\r\n      setTimeout(() => {\r\n        const focusIndex =\r\n          this.length - sanitized.length < 0\r\n            ? 0\r\n            : this.length - sanitized.length;\r\n        inputsArray[focusIndex]?.focus();\r\n        this.handleCompletion(inputsArray[focusIndex]);\r\n      });\r\n    } else {\r\n      for (let i = 0; i < sanitized.length && i < this.length; i++) {\r\n        this.otpValues[i] = sanitized[i];\r\n      }\r\n\r\n      setTimeout(() => {\r\n        const focusIndex = Math.min(sanitized.length - 1, this.length - 1);\r\n        inputsArray[focusIndex]?.focus();\r\n        this.handleCompletion(inputsArray[focusIndex]);\r\n      });\r\n    }\r\n\r\n    this.emitChange();\r\n  }\r\n\r\n  get isCompleted(): boolean {\r\n    return this.otpValues.every((v) => v !== '');\r\n  }\r\n\r\n  private checkCompletion() {\r\n    if (this.isCompleted) {\r\n      this.completed.emit(this.otpValue);\r\n    }\r\n  }\r\n\r\n  private getSanitizeRegex(): RegExp {\r\n    switch (this.inputType) {\r\n      case 'number':\r\n        return /[^0-9]/g;\r\n      case 'text':\r\n        return /[^a-zA-Z]/g;\r\n      case 'alphanumeric':\r\n        return /[^a-zA-Z0-9]/g;\r\n      default:\r\n        return /[^0-9]/g;\r\n    }\r\n  }\r\n\r\n  get otpValue(): string {\r\n    return this.otpValues.join('');\r\n  }\r\n\r\n  reset(): void {\r\n    this.otpValues = Array(this.length).fill('');\r\n    this.emitChange();\r\n\r\n    setTimeout(() => this.focusFirstInput());\r\n  }\r\n\r\n  private handleCompletion(input: HTMLInputElement) {\r\n    if (!this.isCompleted) return;\r\n\r\n    if (this.autoSubmit) {\r\n      this.completed.emit(this.otpValue);\r\n    } else {\r\n      this.checkCompletion();\r\n    }\r\n\r\n    if (this.autoBlur) {\r\n      input.blur();\r\n    }\r\n  }\r\n\r\n  private emitChange() {\r\n    const value = this.otpValue;\r\n    this.onChange(value);\r\n    this.changed.emit(value);\r\n  }\r\n\r\n  private focusFirstInput() {\r\n    const inputsArr = this.inputs.toArray();\r\n    const target =\r\n      this.direction === 'rtl' ? inputsArr[inputsArr.length - 1] : inputsArr[0];\r\n    target?.nativeElement?.focus();\r\n  }\r\n\r\n  get inputClasses() {\r\n    return [\r\n      this.inputClass,\r\n      this.status === 'success' ? 'otp-success' : '',\r\n      this.status === 'failed' ? 'otp-failed' : '',\r\n    ];\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of ngx-otp-inputs\r\n */\r\n\r\nexport * from './lib/ngx-otp-inputs.service';\r\nexport * from './lib/ngx-otp-inputs.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}