{"version":3,"file":"tapsellorg-angular-material-library-src-lib-pin-input.mjs","sources":["../../projects/pegah-library/src/lib/pin-input/pin-input.component.config.ts","../../projects/pegah-library/src/lib/pin-input/pin-input.component.ts","../../projects/pegah-library/src/lib/pin-input/pin-input.component.html","../../projects/pegah-library/src/lib/pin-input/tapsellorg-angular-material-library-src-lib-pin-input.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport const CodeInputComponentConfigToken = new InjectionToken<CodeInputComponentConfig>(\n  'CodeInputComponentConfig',\n);\n\nexport interface CodeInputComponentConfig {\n  codeLength: number;\n  inputType: string;\n  inputMode: string;\n  initialFocusField: number;\n  isCharsCode: boolean;\n  isCodeHidden: boolean;\n  isPrevFocusableAfterClearing: boolean;\n  isFocusingOnLastByClickIfFilled: boolean;\n  code: string | number;\n  disabled: boolean;\n  autocapitalize: string;\n}\n\nexport const defaultComponentConfig: CodeInputComponentConfig = {\n  codeLength: 4,\n  inputType: 'tel',\n  inputMode: 'numeric',\n  initialFocusField: 0,\n  isCharsCode: false,\n  isCodeHidden: false,\n  isPrevFocusableAfterClearing: true,\n  isFocusingOnLastByClickIfFilled: false,\n  code: '',\n  disabled: false,\n  autocapitalize: '',\n};\n","import {\n  AfterViewChecked,\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  effect,\n  ElementRef,\n  input,\n  OnDestroy,\n  OnInit,\n  output,\n  QueryList,\n  ViewChildren,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { defaultComponentConfig } from './pin-input.component.config';\nimport { CommonModule } from '@angular/common';\n\nenum InputState {\n  ready = 0,\n  reset = 1,\n}\n\n@Component({\n  selector: 'pgh-pin-input',\n  imports: [CommonModule],\n  templateUrl: './pin-input.component.html',\n  styleUrl: './pin-input.component.scss',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PghPinInputComponent implements AfterViewInit, OnInit, OnDestroy, AfterViewChecked {\n  @ViewChildren('input') inputsList!: QueryList<ElementRef>;\n\n  readonly codeLength = input<number>(defaultComponentConfig.codeLength);\n  readonly inputType = input<string>(defaultComponentConfig.inputType);\n  readonly inputMode = input<string>(defaultComponentConfig.inputMode);\n  readonly initialFocusField = input<number>(defaultComponentConfig.initialFocusField);\n  readonly isCharsCode = input<boolean>(defaultComponentConfig.isCharsCode);\n  readonly isCodeHidden = input<boolean>(defaultComponentConfig.isCodeHidden);\n  readonly isPrevFocusableAfterClearing = input<boolean>(\n    defaultComponentConfig.isPrevFocusableAfterClearing,\n  );\n  readonly isFocusingOnLastByClickIfFilled = input<boolean>(\n    defaultComponentConfig.isFocusingOnLastByClickIfFilled,\n  );\n  readonly disabled = input<boolean>(defaultComponentConfig.disabled);\n  readonly autocapitalize = input<string>(defaultComponentConfig.autocapitalize);\n  readonly code = input<string | number>(defaultComponentConfig.code);\n  readonly codeChanged = output<string>();\n  readonly codeCompleted = output<string>();\n\n  codeLengthEffect = effect(() => this.onCodeLengthChanges(this.codeLength()));\n  codeEffect = effect(() => this.onInputCodeChanges(this.code()));\n\n  placeholders: number[] = [];\n  private inputs: HTMLInputElement[] = [];\n  private inputsStates: InputState[] = [];\n  private inputsListSubscription!: Subscription;\n  private state = {\n    isFocusingAfterAppearingCompleted: false,\n    isInitialFocusFieldEnabled: false,\n  };\n\n  ngOnInit(): void {\n    // defining the state\n    this.state.isInitialFocusFieldEnabled = !this.isEmpty(this.initialFocusField());\n    // initiating the code\n    this.onCodeLengthChanges(this.codeLength());\n  }\n\n  ngAfterViewInit(): void {\n    // initiation of the inputs\n    this.inputsListSubscription = this.inputsList.changes.subscribe(\n      this.onInputsListChanges.bind(this),\n    );\n    this.onInputsListChanges(this.inputsList);\n  }\n\n  ngAfterViewChecked(): void {\n    this.focusOnInputAfterAppearing();\n  }\n\n  ngOnDestroy(): void {\n    if (this.inputsListSubscription) {\n      this.inputsListSubscription.unsubscribe();\n    }\n  }\n\n  reset(isChangesEmitting = false): void {\n    // resetting the code to its initial value or to an empty value\n    this.onInputCodeChanges(this.code());\n\n    if (this.state.isInitialFocusFieldEnabled) {\n      // tslint:disable-next-line:no-non-null-assertion\n      this.focusOnField(this.initialFocusField());\n    }\n\n    if (isChangesEmitting) {\n      this.emitChanges();\n    }\n  }\n\n  focusOnField(index: number): void {\n    if (index >= this.codeLength()) {\n      throw new Error('The index of the focusing input box should be less than the codeLength.');\n    }\n\n    this.inputs[index]?.focus();\n  }\n\n  onClick(e: any): void {\n    // handle click events only if the the prop is enabled\n    if (!this.isFocusingOnLastByClickIfFilled()) {\n      return;\n    }\n\n    const { target } = e;\n    const last = this.inputs[this.codeLength() - 1];\n    // already focused\n    if (target === last) {\n      return;\n    }\n\n    // check filling\n    const isFilled = this.getCurrentFilledCode().length >= this.codeLength();\n    if (!isFilled) {\n      return;\n    }\n\n    // focusing on the last input if is filled\n    setTimeout(() => last?.focus());\n  }\n\n  onInput(e: any, i: number): void {\n    const { target } = e;\n    const value = e.data || target.value;\n\n    if (this.isEmpty(value)) {\n      return;\n    }\n\n    // only digits are allowed if isCharsCode flag is absent/false\n    if (!this.canInputValue(value)) {\n      e.preventDefault();\n      e.stopPropagation();\n      this.setInputValue(target, null);\n      this.setStateForInput(target, InputState.reset);\n      return;\n    }\n\n    const values = value.toString().trim().split('');\n    for (let j = 0; j < values.length; j++) {\n      const index = j + i;\n      if (index > this.codeLength() - 1) {\n        break;\n      }\n\n      this.setInputValue(this.inputs[index], values[j]);\n    }\n    this.emitChanges();\n\n    const next = i + values.length;\n    if (next > this.codeLength() - 1) {\n      target.blur();\n      return;\n    }\n\n    this.inputs[next]?.focus();\n  }\n\n  onPaste(e: ClipboardEvent, i: number): void {\n    e.preventDefault();\n    e.stopPropagation();\n\n    const data = e.clipboardData ? e.clipboardData.getData('text').trim() : undefined;\n\n    if (this.isEmpty(data)) {\n      return;\n    }\n\n    // Convert paste text into iterable\n    // tslint:disable-next-line:no-non-null-assertion\n    const values = data!.split('');\n    let valIndex = 0;\n\n    for (let j = i; j < this.inputs.length; j++) {\n      // The values end is reached. Loop exit\n      if (valIndex === values.length) {\n        break;\n      }\n\n      const input = this.inputs[j];\n      const val = values[valIndex];\n\n      // Cancel the loop when a value cannot be used\n      if (!this.canInputValue(val)) {\n        this.setInputValue(input, null);\n        this.setStateForInput(input, InputState.reset);\n        return;\n      }\n\n      this.setInputValue(input, val.toString());\n      valIndex++;\n    }\n\n    this.inputs[i].blur();\n    this.emitChanges();\n  }\n\n  async onKeydown(e: any, i: number): Promise<void> {\n    const { target } = e;\n    const isTargetEmpty = this.isEmpty(target.value);\n    const prev = i - 1;\n\n    // processing only the backspace and delete key events\n    const isBackspaceKey = await this.isBackspaceKey(e);\n    const isDeleteKey = this.isDeleteKey(e);\n    if (!isBackspaceKey && !isDeleteKey) {\n      return;\n    }\n\n    e.preventDefault();\n\n    this.setInputValue(target, null);\n    if (!isTargetEmpty) {\n      this.emitChanges();\n    }\n\n    // preventing to focusing on the previous field if it does not exist or the delete key has been pressed\n    if (prev < 0 || isDeleteKey) {\n      return;\n    }\n\n    if (isTargetEmpty || this.isPrevFocusableAfterClearing()) {\n      this.inputs[prev]?.focus();\n    }\n  }\n\n  private onInputCodeChanges(code: string | number): void {\n    if (!this.inputs.length) {\n      return;\n    }\n\n    if (this.isEmpty(code)) {\n      this.inputs.forEach((input: HTMLInputElement) => {\n        this.setInputValue(input, null);\n      });\n      return;\n    }\n\n    const chars = (code?.toString().trim() ?? '').split('');\n    // checking if all the values are correct\n    let isAllCharsAreAllowed = true;\n    for (const char of chars) {\n      if (!this.canInputValue(char)) {\n        isAllCharsAreAllowed = false;\n        break;\n      }\n    }\n\n    this.inputs.forEach((input: HTMLInputElement, index: number) => {\n      const value = isAllCharsAreAllowed ? chars[index] : null;\n      this.setInputValue(input, value);\n    });\n  }\n\n  private onCodeLengthChanges(codeLength: number): void {\n    if (!codeLength) {\n      return;\n    }\n\n    if (codeLength > this.placeholders.length) {\n      const numbers = Array(codeLength - this.placeholders.length).fill(1);\n      this.placeholders.splice(this.placeholders.length - 1, 0, ...numbers);\n    } else if (codeLength < this.placeholders.length) {\n      this.placeholders.splice(codeLength);\n    }\n  }\n\n  private onInputsListChanges(list: QueryList<ElementRef>): void {\n    if (list.length > this.inputs.length) {\n      const inputsToAdd = list.filter((item, index) => index > this.inputs.length - 1);\n      this.inputs.splice(this.inputs.length, 0, ...inputsToAdd.map(item => item.nativeElement));\n      const states = Array(inputsToAdd.length).fill(InputState.ready);\n      this.inputsStates.splice(this.inputsStates.length, 0, ...states);\n    } else if (list.length < this.inputs.length) {\n      this.inputs.splice(list.length);\n      this.inputsStates.splice(list.length);\n    }\n\n    // filling the inputs after changing of their count\n    this.onInputCodeChanges(this.code());\n  }\n\n  private focusOnInputAfterAppearing(): void {\n    if (!this.state.isInitialFocusFieldEnabled) {\n      return;\n    }\n\n    if (this.state.isFocusingAfterAppearingCompleted) {\n      return;\n    }\n\n    this.focusOnField(this.initialFocusField());\n    this.state.isFocusingAfterAppearingCompleted =\n      this.initialFocusField() !== undefined &&\n      this.initialFocusField() !== null &&\n      document.activeElement === this.inputs[this.initialFocusField()];\n  }\n\n  private emitChanges(): void {\n    setTimeout(() => this.emitCode(), 50);\n  }\n\n  private emitCode(): void {\n    const code = this.getCurrentFilledCode();\n\n    this.codeChanged.emit(code);\n\n    if (code.length >= this.codeLength()) {\n      this.codeCompleted.emit(code);\n    }\n  }\n\n  private getCurrentFilledCode(): string {\n    let code = '';\n\n    for (const input of this.inputs) {\n      if (!this.isEmpty(input.value)) {\n        code += input.value;\n      }\n    }\n\n    return code;\n  }\n\n  private isBackspaceKey(e: any): Promise<boolean> {\n    const isBackspace =\n      (e.key && e.key.toLowerCase() === 'backspace') || (e.keyCode && e.keyCode === 8);\n    if (isBackspace) {\n      return Promise.resolve(true);\n    }\n\n    // process only key with placeholder keycode on android devices\n    if (!e.keyCode || e.keyCode !== 229) {\n      return Promise.resolve(false);\n    }\n\n    return new Promise<boolean>(resolve => {\n      setTimeout(() => {\n        const input = e.target;\n        const isReset = this.getStateForInput(input) === InputState.reset;\n        if (isReset) {\n          this.setStateForInput(input, InputState.ready);\n        }\n        // if backspace key pressed the caret will have position 0 (for single value field)\n        resolve(input.selectionStart === 0 && !isReset);\n      });\n    });\n  }\n\n  private isDeleteKey(e: any): boolean {\n    return (e.key && e.key.toLowerCase() === 'delete') || (e.keyCode && e.keyCode === 46);\n  }\n\n  private setInputValue(input: HTMLInputElement, value: any): void {\n    const isEmpty = this.isEmpty(value);\n    const valueClassCSS = 'has-value';\n    const emptyClassCSS = 'empty';\n    if (isEmpty) {\n      input.value = '';\n      input.classList.remove(valueClassCSS);\n      input.parentElement!.classList.add(emptyClassCSS);\n    } else {\n      input.value = value;\n      input.classList.add(valueClassCSS);\n      input.parentElement!.classList.remove(emptyClassCSS);\n    }\n  }\n\n  private canInputValue(value: any): boolean {\n    if (this.isEmpty(value)) {\n      return false;\n    }\n\n    const isDigitsValue = /^[0-9]+$/.test(value.toString());\n    return isDigitsValue || this.isCharsCode();\n  }\n\n  private setStateForInput(input: HTMLInputElement, state: InputState): void {\n    const index = this.inputs.indexOf(input);\n    if (index < 0) {\n      return;\n    }\n\n    this.inputsStates[index] = state;\n  }\n\n  private getStateForInput(input: HTMLInputElement): InputState | undefined {\n    const index = this.inputs.indexOf(input);\n    return this.inputsStates[index];\n  }\n\n  private isEmpty(value: any): boolean {\n    return value === null || value === undefined || !value.toString().length;\n  }\n}\n","<div class=\"wrapper-input\">\n  @for (holder of placeholders; track $index) {\n  <span [class.code-hidden]=\"isCodeHidden()\">\n    <input\n      #input\n      (click)=\"onClick($event)\"\n      (paste)=\"onPaste($event, $index)\"\n      (input)=\"onInput($event, $index)\"\n      (keydown)=\"onKeydown($event, $index)\"\n      [type]=\"inputType()\"\n      [disabled]=\"disabled()\"\n      [attr.inputmode]=\"inputMode()\"\n      [attr.autocapitalize]=\"autocapitalize()\"\n      autocomplete=\"one-time-code\"\n    />\n  </span>\n  }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}