{"version":3,"file":"cloudideaas-ngx-mask-ionic.mjs","sources":["../../src/lib/input-container/input-container.component.ts","../../src/lib/input-container/input-container.component.html","../../src/lib/config.ts","../../src/lib/mask-applier.service.ts","../../src/lib/mask.service.ts","../../src/lib/mask.directive.ts","../../src/lib/mask.pipe.ts","../../src/lib/ngx-mask-ionic.module.ts","../../src/cloudideaas-ngx-mask-ionic.ts"],"sourcesContent":["import { Component, OnInit, Input, forwardRef } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\n\r\n@Component({\r\n  selector: 'app-input-container',\r\n  templateUrl: './input-container.component.html',\r\n  styleUrls: ['./input-container.component.scss'],\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => InputContainerComponent),\r\n      multi: true\r\n    }\r\n  ]\r\n})\r\nexport class InputContainerComponent implements ControlValueAccessor {\r\n  private innerValue: any = '';\r\n  private onChangeCallback: (_: any) => void;\r\n  private onTouchedCallback: () => void;\r\n\r\n  get value(): any {\r\n    return this.innerValue;\r\n  }\r\n  set value(v: any) {\r\n    if (v !== this.innerValue) {\r\n      this.innerValue = v;\r\n      this.onChangeCallback(v);\r\n    }\r\n  }\r\n\r\n  constructor() {}\r\n\r\n  writeValue(value: any) {\r\n    if (value !== this.innerValue) {\r\n      this.innerValue = value;\r\n    }\r\n  }\r\n  registerOnChange(fn: any): void {\r\n    this.onChangeCallback = fn;\r\n  }\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouchedCallback = fn;\r\n  }\r\n\r\n  setDisabledState?(isDisabled: boolean): void {}\r\n}\r\n","<input type=\"text\" value=\"{{ value }}\" />","import { InjectionToken } from '@angular/core';\r\n\r\nexport interface IConfig {\r\n  sufix: string;\r\n  prefix: string;\r\n  clearIfNotMatch: boolean;\r\n  showTemplate: boolean;\r\n  showMaskTyped: boolean;\r\n  dropSpecialCharacters: boolean | string[];\r\n  specialCharacters: string[];\r\n  patterns: {\r\n    [character: string]: {\r\n      pattern: RegExp;\r\n      optional?: boolean;\r\n    };\r\n  };\r\n}\r\n\r\nexport type optionsConfig = Partial<IConfig>;\r\nexport const config: InjectionToken<string> = new InjectionToken('config');\r\nexport const NEW_CONFIG: InjectionToken<string> = new InjectionToken(\r\n  'NEW_CONFIG'\r\n);\r\nexport const INITIAL_CONFIG: InjectionToken<IConfig> = new InjectionToken(\r\n  'INITIAL_CONFIG'\r\n);\r\n\r\nexport const initialConfig: IConfig = {\r\n  sufix: '',\r\n  prefix: '',\r\n  clearIfNotMatch: false,\r\n  showTemplate: false,\r\n  showMaskTyped: false,\r\n  dropSpecialCharacters: true,\r\n  specialCharacters: [\r\n    '/',\r\n    '(',\r\n    ')',\r\n    '.',\r\n    ':',\r\n    '-',\r\n    ' ',\r\n    '+',\r\n    ',',\r\n    '@',\r\n    '[',\r\n    ']',\r\n    '\"',\r\n    \"'\"\r\n  ],\r\n  patterns: {\r\n    '0': {\r\n      pattern: new RegExp('\\\\d')\r\n    },\r\n    '9': {\r\n      pattern: new RegExp('\\\\d'),\r\n      optional: true\r\n    },\r\n    A: {\r\n      pattern: new RegExp('[a-zA-Z0-9]')\r\n    },\r\n    S: {\r\n      pattern: new RegExp('[a-zA-Z]')\r\n    },\r\n    d: {\r\n      pattern: new RegExp('\\\\d')\r\n    },\r\n    m: {\r\n      pattern: new RegExp('\\\\d')\r\n    }\r\n  }\r\n};\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { config, IConfig } from './config';\r\n\r\n@Injectable()\r\nexport abstract class MaskApplierService {\r\n  public dropSpecialCharacters: IConfig['dropSpecialCharacters'];\r\n  public showTemplate: IConfig['showTemplate'];\r\n  public clearIfNotMatch: IConfig['clearIfNotMatch'];\r\n  public maskExpression = '';\r\n  public maskSpecialCharacters: IConfig['specialCharacters'];\r\n  public maskAvailablePatterns: IConfig['patterns'];\r\n  public prefix: IConfig['prefix'];\r\n  public sufix: IConfig['sufix'];\r\n  public customPattern: IConfig['patterns'];\r\n\r\n  private _shift: Set<number>;\r\n\r\n  public constructor(@Inject(config) protected _config: IConfig) {\r\n    this._shift = new Set();\r\n    this.maskSpecialCharacters = this._config!.specialCharacters;\r\n    this.maskAvailablePatterns = this._config.patterns;\r\n    this.clearIfNotMatch = this._config.clearIfNotMatch;\r\n    this.dropSpecialCharacters = this._config.dropSpecialCharacters;\r\n    this.maskSpecialCharacters = this._config!.specialCharacters;\r\n    this.maskAvailablePatterns = this._config.patterns;\r\n    this.prefix = this._config.prefix;\r\n    this.sufix = this._config.sufix;\r\n  }\r\n  // tslint:disable-next-line:no-any\r\n  public applyMaskWithPattern(\r\n    inputValue: string,\r\n    maskAndPattern: [string, IConfig['patterns']]\r\n  ): string {\r\n    const [mask, customPattern] = maskAndPattern;\r\n    this.customPattern = customPattern;\r\n    return this.applyMask(inputValue, mask);\r\n  }\r\n  public applyMask(\r\n    inputValue: string,\r\n    maskExpression: string,\r\n    position: number = 0,\r\n    cb: Function = () => {}\r\n  ): string {\r\n    if (\r\n      inputValue === undefined ||\r\n      inputValue === null ||\r\n      maskExpression === undefined\r\n    ) {\r\n      return '';\r\n    }\r\n\r\n    let cursor = 0;\r\n    let result = ``;\r\n    let multi = false;\r\n\r\n    if (inputValue.slice(0, this.prefix.length) === this.prefix) {\r\n      inputValue = inputValue.slice(this.prefix.length, inputValue.length);\r\n    }\r\n\r\n    const inputArray: string[] = inputValue.toString().split('');\r\n\r\n    // tslint:disable-next-line\r\n    for (\r\n      let i: number = 0, inputSymbol: string = inputArray[0];\r\n      i < inputArray.length;\r\n      i++, inputSymbol = inputArray[i]\r\n    ) {\r\n      if (cursor === maskExpression.length) {\r\n        break;\r\n      }\r\n      if (\r\n        this._checkSymbolMask(inputSymbol, maskExpression[cursor]) &&\r\n        maskExpression[cursor + 1] === '?'\r\n      ) {\r\n        result += inputSymbol;\r\n        cursor += 2;\r\n      } else if (\r\n        maskExpression[cursor + 1] === '*' &&\r\n        multi &&\r\n        this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2])\r\n      ) {\r\n        result += inputSymbol;\r\n        cursor += 3;\r\n        multi = false;\r\n      } else if (\r\n        this._checkSymbolMask(inputSymbol, maskExpression[cursor]) &&\r\n        maskExpression[cursor + 1] === '*'\r\n      ) {\r\n        result += inputSymbol;\r\n        multi = true;\r\n      } else if (\r\n        maskExpression[cursor + 1] === '?' &&\r\n        this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2])\r\n      ) {\r\n        result += inputSymbol;\r\n        cursor += 3;\r\n      } else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor])) {\r\n        if (maskExpression[cursor] === 'd') {\r\n          if (Number(inputSymbol) > 3) {\r\n            result += 0;\r\n            cursor += 1;\r\n            const shiftStep: number = /\\*|\\?/g.test(\r\n              maskExpression.slice(0, cursor)\r\n            )\r\n              ? inputArray.length\r\n              : cursor;\r\n            this._shift.add(shiftStep + this.prefix.length || 0);\r\n            i--;\r\n            continue;\r\n          }\r\n        }\r\n        if (maskExpression[cursor - 1] === 'd') {\r\n          if (Number(inputValue.slice(cursor - 1, cursor + 1)) > 31) {\r\n            continue;\r\n          }\r\n        }\r\n        if (maskExpression[cursor] === 'm') {\r\n          if (Number(inputSymbol) > 1) {\r\n            result += 0;\r\n            cursor += 1;\r\n            const shiftStep: number = /\\*|\\?/g.test(\r\n              maskExpression.slice(0, cursor)\r\n            )\r\n              ? inputArray.length\r\n              : cursor;\r\n            this._shift.add(shiftStep + this.prefix.length || 0);\r\n            i--;\r\n            continue;\r\n          }\r\n        }\r\n        if (maskExpression[cursor - 1] === 'm') {\r\n          if (Number(inputValue.slice(cursor - 1, cursor + 1)) > 12) {\r\n            continue;\r\n          }\r\n        }\r\n        result += inputSymbol;\r\n        cursor++;\r\n      } else if (\r\n        this.maskSpecialCharacters.indexOf(maskExpression[cursor]) !== -1\r\n      ) {\r\n        result += maskExpression[cursor];\r\n        cursor++;\r\n        const shiftStep: number = /\\*|\\?/g.test(maskExpression.slice(0, cursor))\r\n          ? inputArray.length\r\n          : cursor;\r\n        this._shift.add(shiftStep + this.prefix.length || 0);\r\n        i--;\r\n      } else if (\r\n        this.maskSpecialCharacters.indexOf(inputSymbol) > -1 &&\r\n        this.maskAvailablePatterns[maskExpression[cursor]] &&\r\n        this.maskAvailablePatterns[maskExpression[cursor]].optional\r\n      ) {\r\n        cursor++;\r\n        i--;\r\n      } else if (\r\n        this.maskExpression[cursor + 1] === '*' &&\r\n        this._findSpecialChar(this.maskExpression[cursor + 2]) &&\r\n        this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2]\r\n      ) {\r\n        cursor += 3;\r\n        result += inputSymbol;\r\n      }\r\n    }\r\n\r\n    if (\r\n      result.length + 1 === maskExpression.length &&\r\n      this.maskSpecialCharacters.indexOf(\r\n        maskExpression[maskExpression.length - 1]\r\n      ) !== -1\r\n    ) {\r\n      result += maskExpression[maskExpression.length - 1];\r\n    }\r\n\r\n    let shift = 1;\r\n    let newPosition: number = position + 1;\r\n\r\n    while (this._shift.has(newPosition)) {\r\n      shift++;\r\n      newPosition++;\r\n    }\r\n\r\n    cb(this._shift.has(position) ? shift : 0);\r\n    let res = `${this.prefix}${result}`;\r\n    res =\r\n      this.sufix && cursor === maskExpression.length\r\n        ? `${this.prefix}${result}${this.sufix}`\r\n        : `${this.prefix}${result}`;\r\n    return res;\r\n  }\r\n  public _findSpecialChar(inputSymbol: string): undefined | string {\r\n    const symbol: string | undefined = this.maskSpecialCharacters.find(\r\n      (val: string) => val === inputSymbol\r\n    );\r\n    return symbol;\r\n  }\r\n\r\n  private _checkSymbolMask(inputSymbol: string, maskSymbol: string): boolean {\r\n    this.maskAvailablePatterns = this.customPattern\r\n      ? this.customPattern\r\n      : this.maskAvailablePatterns;\r\n    return (\r\n      this.maskAvailablePatterns[maskSymbol] &&\r\n      this.maskAvailablePatterns[maskSymbol].pattern &&\r\n      this.maskAvailablePatterns[maskSymbol].pattern.test(inputSymbol)\r\n    );\r\n  }\r\n}\r\n","import { ElementRef, Inject, Injectable, Renderer2 } from '@angular/core';\r\nimport { config, IConfig } from './config';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { MaskApplierService } from './mask-applier.service';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Injectable()\r\nexport class MaskService extends MaskApplierService {\r\n  public override maskExpression = '';\r\n  public isNumberValue = false;\r\n  public showMaskTyped = false;\r\n  public maskIsShown = '';\r\n  private _formElement: HTMLInputElement;\r\n  private unmaskedValue: string | number;\r\n  public onTouch = () => {};\r\n  public constructor(\r\n    // tslint:disable-next-line\r\n    @Inject(DOCUMENT) private document: any,\r\n    @Inject(config) protected override _config: IConfig,\r\n    private _elementRef: ElementRef,\r\n    private _renderer: Renderer2,\r\n    private _ngControl: NgControl\r\n  ) {\r\n    super(_config);\r\n\r\n    this._formElement = null;\r\n    this.setFormElement(_elementRef.nativeElement);\r\n\r\n    setTimeout(() => {\r\n      if (this._formElement.localName !== 'input') {\r\n        const inputEl = this._elementRef.nativeElement.querySelector('input');\r\n        if (inputEl != null) {\r\n          this.setFormElement(inputEl);\r\n        } else {\r\n          console.warn(\r\n            'mask-service: Could not find Input Element.  Please make sure one is present.'\r\n          );\r\n        }\r\n      }\r\n\r\n      this._ngControl.valueChanges.subscribe((value: string) => {\r\n        this._onControlValueChange(value);\r\n      });\r\n    });\r\n  }\r\n\r\n  public setFormElement(el: HTMLInputElement) {\r\n    this._formElement = el;\r\n  }\r\n\r\n  public override applyMask(\r\n    inputValue: string,\r\n    maskExpression: string,\r\n    position: number = 0,\r\n    cb: Function = () => {}\r\n  ): string {\r\n    this.maskIsShown = this.showMaskTyped\r\n      ? this.maskExpression.replace(/[0-9]/g, '_')\r\n      : '';\r\n    if (!inputValue && this.showMaskTyped) {\r\n      return this.prefix + this.maskIsShown;\r\n    }\r\n\r\n    const result = super.applyMask(inputValue, maskExpression, position, cb);\r\n    this.unmaskedValue = this.getUnmaskedValue(result);\r\n\r\n    return this._applyMaskResult(result);\r\n  }\r\n\r\n  public applyValueChanges(\r\n    position: number = 0,\r\n    cb: Function = () => {}\r\n  ): void {\r\n    const maskedInput: string | number = this.applyMask(\r\n      this._formElement.value,\r\n      this.maskExpression,\r\n      position,\r\n      cb\r\n    );\r\n    this._formElement.value = maskedInput;\r\n    if (this._formElement === this.document.activeElement) {\r\n      return;\r\n    }\r\n    this.clearIfNotMatchFn();\r\n  }\r\n\r\n  public showMaskInInput(): void {\r\n    if (this.showMaskTyped) {\r\n      this.maskIsShown = this.maskExpression.replace(/[0-9]/g, '_');\r\n    }\r\n  }\r\n\r\n  public clearIfNotMatchFn(): void {\r\n    console.log('clear-if-not-matched');\r\n    if (\r\n      this.clearIfNotMatch === true &&\r\n      this.maskExpression.length !== this._formElement.value.length\r\n    ) {\r\n      this.setValue('');\r\n      this.applyMask(this._formElement.value, this.maskExpression);\r\n    }\r\n  }\r\n\r\n  public setValue(value: string) {\r\n    this.unmaskedValue = this.getUnmaskedValue(value);\r\n    this._ngControl.control.setValue(value);\r\n  }\r\n  public setFormElementProperty(name: string, value: string | boolean) {\r\n    if (this._formElement) {\r\n      this._renderer.setProperty(this._formElement, name, value);\r\n    }\r\n  }\r\n\r\n  public getUnmaskedValue(result: string): string | number {\r\n    const resultNoSuffixOrPrefix = this._removeSufix(\r\n      this._removePrefix(result)\r\n    );\r\n    let changeValue: string | number = resultNoSuffixOrPrefix;\r\n\r\n    if (Array.isArray(this.dropSpecialCharacters)) {\r\n      changeValue = this._removeMask(\r\n        resultNoSuffixOrPrefix,\r\n        this.dropSpecialCharacters\r\n      );\r\n    } else if (this.dropSpecialCharacters) {\r\n      changeValue = this._removeMask(\r\n        resultNoSuffixOrPrefix,\r\n        this.maskSpecialCharacters\r\n      );\r\n      changeValue = this.isNumberValue ? Number(changeValue) : changeValue;\r\n    }\r\n\r\n    return changeValue;\r\n  }\r\n\r\n  private _removeMask(\r\n    value: string,\r\n    specialCharactersForRemove: string[]\r\n  ): string {\r\n    return value\r\n      ? value.replace(this._regExpForRemove(specialCharactersForRemove), '')\r\n      : value;\r\n  }\r\n\r\n  private _removePrefix(value: string): string {\r\n    if (!this.prefix) {\r\n      return value;\r\n    }\r\n    return value ? value.replace(this.prefix, '') : value;\r\n  }\r\n\r\n  private _removeSufix(value: string): string {\r\n    if (!this.sufix) {\r\n      return value;\r\n    }\r\n    return value ? value.replace(this.sufix, '') : value;\r\n  }\r\n\r\n  private _regExpForRemove(specialCharactersForRemove: string[]): RegExp {\r\n    return new RegExp(\r\n      specialCharactersForRemove.map((item: string) => `\\\\${item}`).join('|'),\r\n      'gi'\r\n    );\r\n  }\r\n\r\n  private _applyMaskResult(result: string) {\r\n    if (!this.showMaskTyped) {\r\n      return result;\r\n    }\r\n    const resLen: number = result.length;\r\n    const prefNmask: string = this.prefix + this.maskIsShown;\r\n    const ifMaskIsShown = prefNmask.slice(resLen);\r\n\r\n    return result + ifMaskIsShown;\r\n  }\r\n\r\n  private _onControlValueChange(value: string) {\r\n    /*\r\n      Because we are no longer working with the ControlValueAccessor (since it doesn't play nice with Ionic).\r\n      We need logic here to track changes made programmatically to the form value.  Specifically changes\r\n      done OUTSIDE of the mask. Since changes done inside the mask may also fire off this method\r\n      we need to do some jiu jitsu to ensure we are ignoring those changes.\r\n    */\r\n    const newValue = this.getUnmaskedValue(value);\r\n\r\n    if (this.unmaskedValue === newValue) {\r\n      return;\r\n    }\r\n\r\n    let unmaskedSubstring: string = null;\r\n\r\n    // This method (value change) fires off before a Keydown or Input event, so we need to subtract\r\n    // the latest change and compare to our previous (known) value.\r\n    if (this.unmaskedValue != null) {\r\n      const v = this.unmaskedValue.toString();\r\n      unmaskedSubstring = v.substring(0, v.length - 1);\r\n    }\r\n\r\n    if (newValue !== unmaskedSubstring) {\r\n      const nv = newValue != null ? newValue.toString() : null;\r\n      const v = this.applyMask(nv, this.maskExpression);\r\n      this.setValue(v);\r\n    }\r\n  }\r\n}\r\n","import { Directive, ElementRef, HostListener, Inject, Input } from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { NgControl } from '@angular/forms';\r\nimport { MaskService } from './mask.service';\r\nimport { IConfig } from './config';\r\n\r\n@Directive({\r\n  selector: '[mask]',\r\n  providers: [MaskService]\r\n})\r\nexport class MaskDirective {\r\n  private _maskValue: string;\r\n  private _inputValue: string;\r\n  private _inputElement: HTMLElement;\r\n  private _position: number | null = null;\r\n  // tslint:disable-next-line\r\n  private _start: number;\r\n  private _end: number;\r\n  // tslint:disable-next-line\r\n  public onTouch = () => {};\r\n  public constructor(\r\n    // tslint:disable-next-line\r\n    @Inject(DOCUMENT) private document: any,\r\n    private _maskService: MaskService,\r\n    private _ngControl: NgControl,\r\n    private _elementRef: ElementRef,\r\n  ) {}\r\n\r\n  @Input('mask')\r\n  public set maskExpression(value: string) {\r\n    this._maskValue = value || '';\r\n    if (!this._maskValue) {\r\n      return;\r\n    }\r\n    setTimeout(() => {\r\n      this._inputValue = this._ngControl.control.value;\r\n      this._initializeMask();\r\n      this.addEventListeners();\r\n    }, 100);\r\n  }\r\n\r\n  @Input()\r\n  public set specialCharacters(value: IConfig['specialCharacters']) {\r\n    if (\r\n      !value ||\r\n      !Array.isArray(value) ||\r\n      (Array.isArray(value) && !value.length)\r\n    ) {\r\n      return;\r\n    }\r\n    this._maskService.maskSpecialCharacters = value;\r\n  }\r\n\r\n  @Input()\r\n  public set patterns(value: IConfig['patterns']) {\r\n    if (!value) {\r\n      return;\r\n    }\r\n    this._maskService.maskAvailablePatterns = value;\r\n  }\r\n\r\n  @Input()\r\n  public set prefix(value: IConfig['prefix']) {\r\n    if (!value) {\r\n      return;\r\n    }\r\n    this._maskService.prefix = value;\r\n  }\r\n\r\n  @Input()\r\n  public set sufix(value: IConfig['sufix']) {\r\n    if (!value) {\r\n      return;\r\n    }\r\n    this._maskService.sufix = value;\r\n  }\r\n\r\n  @Input()\r\n  public set dropSpecialCharacters(value: IConfig['dropSpecialCharacters']) {\r\n    this._maskService.dropSpecialCharacters = value;\r\n  }\r\n\r\n  @Input()\r\n  public set showMaskTyped(value: IConfig['showMaskTyped']) {\r\n    if (!value) {\r\n      return;\r\n    }\r\n    this._maskService.showMaskTyped = value;\r\n  }\r\n\r\n  @Input()\r\n  public set showTemplate(value: IConfig['showTemplate']) {\r\n    this._maskService.showTemplate = value;\r\n  }\r\n\r\n  @Input()\r\n  public set clearIfNotMatch(value: IConfig['clearIfNotMatch']) {\r\n    this._maskService.clearIfNotMatch = value;\r\n  }\r\n\r\n  addEventListeners() {\r\n    \r\n    // this is here because host listeners do not work in Ng version 16.2.12\r\n\r\n    this._inputElement = <HTMLElement> this._elementRef.nativeElement.querySelector('input');\r\n\r\n    this._inputElement.addEventListener(\"input\", (e: KeyboardEvent) => this.onInput(e));\r\n    this._inputElement.addEventListener(\"blur\", () => this.onBlur());\r\n    this._inputElement.addEventListener(\"focus\", (e: KeyboardEvent | MouseEvent) => this.onFocus(e));\r\n    this._inputElement.addEventListener(\"keydown\", (e: KeyboardEvent) => this.onKeyDown(e));\r\n    this._inputElement.addEventListener(\"paste\", () => this.onPaste());\r\n    this._inputElement.addEventListener(\"touch\", () => this.onTouch());\r\n  }\r\n\r\n  @HostListener('input', ['$event'])\r\n  public onInput(e: KeyboardEvent): void {\r\n    const el: HTMLInputElement = e.target as HTMLInputElement;\r\n    this._inputValue = el.value;\r\n\r\n    if (!this._maskValue) {\r\n      return;\r\n    }\r\n    const position: number =\r\n      (el.selectionStart as number) === 1\r\n        ? (el.selectionStart as number) + this._maskService.prefix.length\r\n        : (el.selectionStart as number);\r\n    let caretShift = 0;\r\n    this._maskService.applyValueChanges(\r\n      position,\r\n      (shift: number) => (caretShift = shift)\r\n    );\r\n    // only set the selection if the element is active\r\n    if (this.document.activeElement !== el) {\r\n      return;\r\n    }\r\n    el.selectionStart = el.selectionEnd =\r\n      this._position !== null\r\n        ? this._position\r\n        : position +\r\n          // tslint:disable-next-line\r\n          ((e as any).inputType === 'deleteContentBackward' ? 0 : caretShift);\r\n    this._position = null;\r\n  }\r\n\r\n\r\n  @HostListener('blur')\r\n  public onBlur(): void {\r\n    this._maskService.clearIfNotMatchFn();\r\n    this.onTouch();\r\n  }\r\n\r\n  @HostListener('click', ['$event'])\r\n  public onFocus(e: MouseEvent | KeyboardEvent): void {\r\n    const el: HTMLInputElement = e.target as HTMLInputElement;\r\n\r\n    if (\r\n      el !== null &&\r\n      el.selectionStart !== null &&\r\n      el.selectionStart === el.selectionEnd &&\r\n      el.selectionStart > this._maskService.prefix.length &&\r\n      // tslint:disable-next-line\r\n      (e as any).keyCode !== 38\r\n    ) {\r\n      return;\r\n    }\r\n    if (this._maskService.showMaskTyped) {\r\n      this._maskService.maskIsShown = this._maskService.maskExpression.replace(\r\n        /[0-9]/g,\r\n        '_'\r\n      );\r\n    }\r\n    el.value =\r\n      !el.value || el.value === this._maskService.prefix\r\n        ? this._maskService.prefix + this._maskService.maskIsShown\r\n        : el.value;\r\n    /** fix of cursor position with prefix when mouse click occur */\r\n    if (\r\n      ((el.selectionStart as number) || (el.selectionEnd as number)) <=\r\n      this._maskService.prefix.length\r\n    ) {\r\n      el.selectionStart = this._maskService.prefix.length;\r\n      return;\r\n    }\r\n  }\r\n\r\n  @HostListener('keydown', ['$event'])\r\n  public onKeyDown(e: KeyboardEvent): void {\r\n    const el: HTMLInputElement = e.target as HTMLInputElement;\r\n    if (e.keyCode === 38) {\r\n      e.preventDefault();\r\n    }\r\n    if (e.keyCode === 37 || e.keyCode === 8) {\r\n      if (\r\n        (el.selectionStart as number) <= this._maskService.prefix.length &&\r\n        (el.selectionEnd as number) <= this._maskService.prefix.length\r\n      ) {\r\n        e.preventDefault();\r\n      }\r\n      this.onFocus(e);\r\n      if (\r\n        e.keyCode === 8 &&\r\n        el.selectionStart === 0 &&\r\n        el.selectionEnd === el.value.length\r\n      ) {\r\n        el.value = this._maskService.prefix;\r\n        this._position = this._maskService.prefix\r\n          ? this._maskService.prefix.length\r\n          : 1;\r\n        this.onInput(e);\r\n      }\r\n    }\r\n  }\r\n\r\n  @HostListener('paste')\r\n  public onPaste(): void {\r\n    this._position = Number.MAX_SAFE_INTEGER;\r\n  }\r\n\r\n  /** It disables the input element */\r\n  public setDisabledState(isDisabled: boolean): void {\r\n    this._maskService.setFormElementProperty('disabled', isDisabled);\r\n  }\r\n\r\n  private _repeatPatternSymbols(maskExp: string): string {\r\n    return (\r\n      (maskExp.match(/{[0-9]+}/) &&\r\n        maskExp\r\n          .split('')\r\n          .reduce((accum: string, currval: string, index: number): string => {\r\n            this._start = currval === '{' ? index : this._start;\r\n\r\n            if (currval !== '}') {\r\n              return this._maskService._findSpecialChar(currval)\r\n                ? accum + currval\r\n                : accum;\r\n            }\r\n            this._end = index;\r\n            const repeatNumber: number = Number(\r\n              maskExp.slice(this._start + 1, this._end)\r\n            );\r\n            const repaceWith: string = new Array(repeatNumber + 1).join(\r\n              maskExp[this._start - 1]\r\n            );\r\n            return accum + repaceWith;\r\n          }, '')) ||\r\n      maskExp\r\n    );\r\n  }\r\n\r\n  private _initializeMask() {\r\n    this._maskService.maskExpression = this._repeatPatternSymbols(\r\n      this._maskValue\r\n    );\r\n\r\n    const m = this._maskService.applyMask(\r\n      this._inputValue,\r\n      this._maskService.maskExpression\r\n    );\r\n\r\n    this._maskService.setValue(m);\r\n  }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { MaskApplierService } from './mask-applier.service';\r\nimport { IConfig } from './config';\r\n\r\n@Pipe({\r\n  name: 'mask',\r\n  pure: true\r\n})\r\nexport class MaskPipe implements PipeTransform {\r\n  public constructor(private _maskService: MaskApplierService) {}\r\n\r\n  public transform(\r\n    value: string | number,\r\n    mask: string | [string, IConfig['patterns']]\r\n  ): string {\r\n    if (!value) {\r\n      return '';\r\n    }\r\n    if (typeof mask === 'string') {\r\n      return this._maskService.applyMask(`${value}`, mask);\r\n    }\r\n    return this._maskService.applyMaskWithPattern(`${value}`, mask);\r\n  }\r\n}\r\n","import { FormsModule } from '@angular/forms';\r\nimport {\r\n  config,\r\n  INITIAL_CONFIG,\r\n  initialConfig,\r\n  NEW_CONFIG,\r\n  optionsConfig\r\n  } from './config';\r\nimport { MaskApplierService } from './mask-applier.service';\r\nimport { MaskDirective } from './mask.directive';\r\nimport { MaskPipe } from './mask.pipe';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { MaskService } from './mask.service';\r\n\r\n@NgModule({\r\n  imports: [ FormsModule],\r\n  providers: [MaskService, MaskPipe],\r\n  exports: [MaskDirective, MaskPipe],\r\n  declarations: [MaskDirective, MaskPipe]\r\n})\r\nexport class NgxMaskIonicModule {\r\n  public static forRoot(configValue?: optionsConfig): ModuleWithProviders<NgxMaskIonicModule> {\r\n    return {\r\n      ngModule: NgxMaskIonicModule,\r\n      providers: [\r\n        {\r\n          provide: NEW_CONFIG,\r\n          useValue: configValue\r\n        },\r\n        {\r\n          provide: INITIAL_CONFIG,\r\n          useValue: initialConfig\r\n        },\r\n        {\r\n          provide: config,\r\n          useFactory: _configFactory,\r\n          deps: [INITIAL_CONFIG, NEW_CONFIG]\r\n        },\r\n        MaskPipe\r\n      ]\r\n    };\r\n  }\r\n  public static forChild(configValue?: optionsConfig): ModuleWithProviders<NgxMaskIonicModule> {\r\n    return {\r\n      ngModule: NgxMaskIonicModule\r\n    };\r\n  }\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport function _configFactory(\r\n  initConfig: optionsConfig,\r\n  configValue: optionsConfig | (() => optionsConfig)\r\n): Function | optionsConfig {\r\n  return typeof configValue === 'function'\r\n    ? configValue()\r\n    : { ...initConfig, ...configValue };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MaskService","i2","i1.MaskApplierService"],"mappings":"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"}