ngx-mask 14.2.2 → 14.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-mask.mjs","sources":["../../../projects/ngx-mask-lib/src/lib/config.ts","../../../projects/ngx-mask-lib/src/lib/mask-applier.service.ts","../../../projects/ngx-mask-lib/src/lib/mask.service.ts","../../../projects/ngx-mask-lib/src/lib/mask.directive.ts","../../../projects/ngx-mask-lib/src/lib/mask.pipe.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.module.ts","../../../projects/ngx-mask-lib/src/lib/custom-keyboard-event.ts","../../../projects/ngx-mask-lib/src/ngx-mask.ts"],"sourcesContent":["import { InjectionToken, EventEmitter } from '@angular/core';\n\nexport interface IConfig {\n\tsuffix: string;\n\tprefix: string;\n\tthousandSeparator: string;\n\tdecimalMarker: '.' | ',' | ['.', ','];\n\tclearIfNotMatch: boolean;\n\tshowTemplate: boolean;\n\tshowMaskTyped: boolean;\n\tplaceHolderCharacter: string;\n\tshownMaskExpression: string;\n\tdropSpecialCharacters: boolean | string[];\n\tspecialCharacters: string[];\n\thiddenInput: boolean | undefined;\n\tvalidation: boolean;\n\tseparatorLimit: string;\n\tallowNegativeNumbers: boolean;\n\tleadZeroDateTime: boolean;\n\ttriggerOnMaskChange: boolean;\n\tmaskFilled: EventEmitter<void>;\n\tpatterns: {\n\t\t[character: string]: {\n\t\t\tpattern: RegExp;\n\t\t\toptional?: boolean;\n\t\t\tsymbol?: string;\n\t\t};\n\t};\n}\n\nexport type optionsConfig = Partial<IConfig>;\nexport const config: InjectionToken<IConfig> = new InjectionToken('ngx-mask config');\nexport const NEW_CONFIG: InjectionToken<IConfig> = new InjectionToken('new ngx-mask config');\nexport const INITIAL_CONFIG: InjectionToken<IConfig> = new InjectionToken(\n\t'initial ngx-mask config',\n);\n\nexport const initialConfig: IConfig = {\n\tsuffix: '',\n\tprefix: '',\n\tthousandSeparator: ' ',\n\tdecimalMarker: ['.', ','],\n\tclearIfNotMatch: false,\n\tshowTemplate: false,\n\tshowMaskTyped: false,\n\tplaceHolderCharacter: '_',\n\tdropSpecialCharacters: true,\n\thiddenInput: undefined,\n\tshownMaskExpression: '',\n\tseparatorLimit: '',\n\tallowNegativeNumbers: false,\n\tvalidation: true,\n\t// eslint-disable-next-line @typescript-eslint/quotes\n\tspecialCharacters: ['-', '/', '(', ')', '.', ':', ' ', '+', ',', '@', '[', ']', '\"', \"'\"],\n\tleadZeroDateTime: false,\n\ttriggerOnMaskChange: false,\n\tmaskFilled: new EventEmitter<void>(),\n\tpatterns: {\n\t\t'0': {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\t'9': {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t\toptional: true,\n\t\t},\n\t\tX: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t\tsymbol: '*',\n\t\t},\n\t\tA: {\n\t\t\tpattern: new RegExp('[a-zA-Z0-9]'),\n\t\t},\n\t\tS: {\n\t\t\tpattern: new RegExp('[a-zA-Z]'),\n\t\t},\n\t\tU: {\n\t\t\tpattern: new RegExp('[A-Z]'),\n\t\t},\n\t\tL: {\n\t\t\tpattern: new RegExp('[a-z]'),\n\t\t},\n\t\td: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\tm: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\tM: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\tH: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\th: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\ts: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t},\n};\n\nexport const timeMasks: string[] = ['Hh:m0:s0', 'Hh:m0', 'm0:s0'];\n\nexport const withoutValidation: string[] = [\n\t'percent',\n\t'Hh',\n\t's0',\n\t'm0',\n\t'separator',\n\t'd0/M0/0000',\n\t'd0/M0',\n\t'd0',\n\t'M0',\n];\n","import { Inject, Injectable } from '@angular/core';\nimport { config, IConfig } from './config';\n\n@Injectable()\nexport class MaskApplierService {\n\tpublic dropSpecialCharacters: IConfig['dropSpecialCharacters'];\n\n\tpublic hiddenInput: IConfig['hiddenInput'];\n\n\tpublic showTemplate!: IConfig['showTemplate'];\n\n\tpublic clearIfNotMatch!: IConfig['clearIfNotMatch'];\n\n\tpublic maskExpression: string = '';\n\n\tpublic actualValue: string = '';\n\n\tpublic shownMaskExpression: string = '';\n\n\tpublic maskSpecialCharacters!: IConfig['specialCharacters'];\n\n\tpublic maskAvailablePatterns!: IConfig['patterns'];\n\n\tpublic prefix!: IConfig['prefix'];\n\n\tpublic suffix!: IConfig['suffix'];\n\n\tpublic thousandSeparator!: IConfig['thousandSeparator'];\n\n\tpublic decimalMarker!: IConfig['decimalMarker'];\n\n\tpublic customPattern!: IConfig['patterns'];\n\n\tpublic ipError?: boolean;\n\n\tpublic cpfCnpjError?: boolean;\n\n\tpublic showMaskTyped!: IConfig['showMaskTyped'];\n\n\tpublic placeHolderCharacter!: IConfig['placeHolderCharacter'];\n\n\tpublic validation: IConfig['validation'];\n\n\tpublic separatorLimit: IConfig['separatorLimit'];\n\n\tpublic allowNegativeNumbers: IConfig['allowNegativeNumbers'];\n\n\tpublic leadZeroDateTime: IConfig['leadZeroDateTime'];\n\n\tprivate _shift!: Set<number>;\n\n\tpublic constructor(@Inject(config) protected _config: IConfig) {\n\t\tthis._shift = new Set();\n\t\tthis.clearIfNotMatch = this._config.clearIfNotMatch;\n\t\tthis.dropSpecialCharacters = this._config.dropSpecialCharacters;\n\t\tthis.maskSpecialCharacters = this._config.specialCharacters;\n\t\tthis.maskAvailablePatterns = this._config.patterns;\n\t\tthis.prefix = this._config.prefix;\n\t\tthis.suffix = this._config.suffix;\n\t\tthis.thousandSeparator = this._config.thousandSeparator;\n\t\tthis.decimalMarker = this._config.decimalMarker;\n\t\tthis.hiddenInput = this._config.hiddenInput;\n\t\tthis.showMaskTyped = this._config.showMaskTyped;\n\t\tthis.placeHolderCharacter = this._config.placeHolderCharacter;\n\t\tthis.validation = this._config.validation;\n\t\tthis.separatorLimit = this._config.separatorLimit;\n\t\tthis.allowNegativeNumbers = this._config.allowNegativeNumbers;\n\t\tthis.leadZeroDateTime = this._config.leadZeroDateTime;\n\t}\n\n\tpublic applyMaskWithPattern(\n\t\tinputValue: string,\n\t\tmaskAndPattern: [string, IConfig['patterns']],\n\t): string {\n\t\tconst [mask, customPattern] = maskAndPattern;\n\t\tthis.customPattern = customPattern;\n\t\treturn this.applyMask(inputValue, mask);\n\t}\n\n\tpublic applyMask(\n\t\tinputValue: string | object | boolean | null | undefined,\n\t\tmaskExpression: string,\n\t\tposition: number = 0,\n\t\tjustPasted: boolean = false,\n\t\tbackspaced: boolean = false,\n\t\tcb: Function = () => {},\n\t): string {\n\t\tif (!maskExpression || typeof inputValue !== 'string') {\n\t\t\treturn '';\n\t\t}\n\t\tlet cursor = 0;\n\t\tlet result = '';\n\t\tlet multi = false;\n\t\tlet backspaceShift = false;\n\t\tlet shift = 1;\n\t\tlet stepBack = false;\n\t\tif (inputValue.slice(0, this.prefix.length) === this.prefix) {\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = inputValue.slice(this.prefix.length, inputValue.length);\n\t\t}\n\t\tif (!!this.suffix && inputValue?.length > 0) {\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = this.checkAndRemoveSuffix(inputValue);\n\t\t}\n\t\tconst inputArray: string[] = inputValue.toString().split('');\n\t\tif (maskExpression === 'IP') {\n\t\t\tconst valuesIP = inputValue.split('.');\n\t\t\tthis.ipError = this._validIP(valuesIP);\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tmaskExpression = '099.099.099.099';\n\t\t}\n\t\tconst arr: string[] = [];\n\t\tfor (let i = 0; i < inputValue.length; i++) {\n\t\t\tif (inputValue[i]?.match('\\\\d')) {\n\t\t\t\tarr.push(inputValue[i]!);\n\t\t\t}\n\t\t}\n\t\tif (maskExpression === 'CPF_CNPJ') {\n\t\t\tthis.cpfCnpjError = arr.length !== 11 && arr.length !== 14;\n\t\t\tif (arr.length > 11) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tmaskExpression = '00.000.000/0000-00';\n\t\t\t} else {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tmaskExpression = '000.000.000-00';\n\t\t\t}\n\t\t}\n\t\tif (maskExpression.startsWith('percent')) {\n\t\t\tif (\n\t\t\t\tinputValue.match('[a-z]|[A-Z]') ||\n\t\t\t\tinputValue.match(/[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,\\/.]/)\n\t\t\t) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = this._stripToDecimal(inputValue);\n\t\t\t\tconst precision: number = this.getPrecision(maskExpression);\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tinputValue.indexOf('.') > 0 &&\n\t\t\t\t!this.percentage(inputValue.substring(0, inputValue.indexOf('.')))\n\t\t\t) {\n\t\t\t\tconst base: string = inputValue.substring(0, inputValue.indexOf('.') - 1);\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = `${base}${inputValue.substring(inputValue.indexOf('.'), inputValue.length)}`;\n\t\t\t}\n\t\t\tif (this.percentage(inputValue)) {\n\t\t\t\tresult = inputValue;\n\t\t\t} else {\n\t\t\t\tresult = inputValue.substring(0, inputValue.length - 1);\n\t\t\t}\n\t\t} else if (maskExpression.startsWith('separator')) {\n\t\t\tif (\n\t\t\t\tinputValue.match('[wа-яА-Я]') ||\n\t\t\t\tinputValue.match('[ЁёА-я]') ||\n\t\t\t\tinputValue.match('[a-z]|[A-Z]') ||\n\t\t\t\tinputValue.match(/[-@#!$%\\\\^&*()_£¬'+|~=`{}\\[\\]:\";<>.?\\/]/) ||\n\t\t\t\tinputValue.match('[^A-Za-z0-9,]')\n\t\t\t) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = this._stripToDecimal(inputValue);\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue =\n\t\t\t\tinputValue.length > 1 &&\n\t\t\t\tinputValue[0] === '0' &&\n\t\t\t\t!this._compareOrIncludes(inputValue[1], this.decimalMarker, this.thousandSeparator) &&\n\t\t\t\t!backspaced\n\t\t\t\t\t? inputValue.slice(1, inputValue.length)\n\t\t\t\t\t: inputValue;\n\n\t\t\tif (backspaced) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = this._compareOrIncludes(\n\t\t\t\t\tinputValue[inputValue.length - 1],\n\t\t\t\t\tthis.decimalMarker,\n\t\t\t\t\tthis.thousandSeparator,\n\t\t\t\t)\n\t\t\t\t\t? inputValue.slice(0, inputValue.length - 1)\n\t\t\t\t\t: inputValue;\n\t\t\t}\n\t\t\t// TODO: we had different rexexps here for the different cases... but tests dont seam to bother - check this\n\t\t\t// separator: no COMMA, dot-sep: no SPACE, COMMA OK, comma-sep: no SPACE, COMMA OK\n\n\t\t\tconst thousandSeparatorCharEscaped: string = this._charToRegExpExpression(\n\t\t\t\tthis.thousandSeparator,\n\t\t\t);\n\t\t\tlet invalidChars: string = '@#!$%^&*()_+|~=`{}\\\\[\\\\]:\\\\s,\\\\.\";<>?\\\\/'.replace(\n\t\t\t\tthousandSeparatorCharEscaped,\n\t\t\t\t'',\n\t\t\t);\n\t\t\t//.replace(decimalMarkerEscaped, '');\n\t\t\tif (Array.isArray(this.decimalMarker)) {\n\t\t\t\tfor (const marker of this.decimalMarker) {\n\t\t\t\t\tinvalidChars = invalidChars.replace(this._charToRegExpExpression(marker), '');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinvalidChars = invalidChars.replace(this._charToRegExpExpression(this.decimalMarker), '');\n\t\t\t}\n\n\t\t\tconst invalidCharRegexp: RegExp = new RegExp('[' + invalidChars + ']');\n\n\t\t\tif (\n\t\t\t\tinputValue.match(invalidCharRegexp) ||\n\t\t\t\t(inputValue.length === 1 &&\n\t\t\t\t\tthis._compareOrIncludes(inputValue, this.decimalMarker, this.thousandSeparator))\n\t\t\t) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = inputValue.substring(0, inputValue.length - 1);\n\t\t\t}\n\n\t\t\tconst precision: number = this.getPrecision(maskExpression);\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n\t\t\tconst strForSep: string = inputValue.replace(\n\t\t\t\tnew RegExp(thousandSeparatorCharEscaped, 'g'),\n\t\t\t\t'',\n\t\t\t);\n\t\t\tresult = this._formatWithSeparators(\n\t\t\t\tstrForSep,\n\t\t\t\tthis.thousandSeparator,\n\t\t\t\tthis.decimalMarker,\n\t\t\t\tprecision,\n\t\t\t);\n\t\t\tconst commaShift: number = result.indexOf(',') - inputValue.indexOf(',');\n\t\t\tconst shiftStep: number = result.length - inputValue.length;\n\n\t\t\tif (shiftStep > 0 && result[position] !== ',') {\n\t\t\t\tbackspaceShift = true;\n\t\t\t\tlet _shift = 0;\n\t\t\t\tdo {\n\t\t\t\t\tthis._shift.add(position + _shift);\n\t\t\t\t\t_shift++;\n\t\t\t\t} while (_shift < shiftStep);\n\t\t\t} else if (\n\t\t\t\t(commaShift !== 0 && position > 0 && !(result.indexOf(',') >= position && position > 3)) ||\n\t\t\t\t(!(result.indexOf('.') >= position && position > 3) && shiftStep <= 0)\n\t\t\t) {\n\t\t\t\tthis._shift.clear();\n\t\t\t\tbackspaceShift = true;\n\t\t\t\tshift = shiftStep;\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tposition += shiftStep;\n\t\t\t\tthis._shift.add(position);\n\t\t\t} else {\n\t\t\t\tthis._shift.clear();\n\t\t\t}\n\t\t} else {\n\t\t\tfor (\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\tlet i: number = 0, inputSymbol: string = inputArray[0]!;\n\t\t\t\ti < inputArray.length;\n\t\t\t\ti++, inputSymbol = inputArray[i]!\n\t\t\t) {\n\t\t\t\tif (cursor === maskExpression.length) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tthis._checkSymbolMask(inputSymbol, maskExpression[cursor]!) &&\n\t\t\t\t\tmaskExpression[cursor + 1] === '?'\n\t\t\t\t) {\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tcursor += 2;\n\t\t\t\t} else if (\n\t\t\t\t\tmaskExpression[cursor + 1] === '*' &&\n\t\t\t\t\tmulti &&\n\t\t\t\t\tthis._checkSymbolMask(inputSymbol, maskExpression[cursor + 2]!)\n\t\t\t\t) {\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tcursor += 3;\n\t\t\t\t\tmulti = false;\n\t\t\t\t} else if (\n\t\t\t\t\tthis._checkSymbolMask(inputSymbol, maskExpression[cursor]!) &&\n\t\t\t\t\tmaskExpression[cursor + 1] === '*'\n\t\t\t\t) {\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tmulti = true;\n\t\t\t\t} else if (\n\t\t\t\t\tmaskExpression[cursor + 1] === '?' &&\n\t\t\t\t\tthis._checkSymbolMask(inputSymbol, maskExpression[cursor + 2]!)\n\t\t\t\t) {\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tcursor += 3;\n\t\t\t\t} else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor]!)) {\n\t\t\t\t\tif (maskExpression[cursor] === 'H') {\n\t\t\t\t\t\tif (Number(inputSymbol) > 2) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tif (this.leadZeroDateTime) {\n\t\t\t\t\t\t\t\tresult += '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (maskExpression[cursor] === 'h') {\n\t\t\t\t\t\tif (result === '2' && Number(inputSymbol) > 3) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (maskExpression[cursor] === 'm') {\n\t\t\t\t\t\tif (Number(inputSymbol) > 5) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tif (this.leadZeroDateTime) {\n\t\t\t\t\t\t\t\tresult += '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (maskExpression[cursor] === 's') {\n\t\t\t\t\t\tif (Number(inputSymbol) > 5) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tif (this.leadZeroDateTime) {\n\t\t\t\t\t\t\t\tresult += '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst daysCount = 31;\n\t\t\t\t\tif (maskExpression[cursor] === 'd') {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(Number(inputSymbol) > 3 && this.leadZeroDateTime) ||\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor, cursor + 2)) > daysCount ||\n\t\t\t\t\t\t\tinputValue[cursor + 1] === '/'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tif (this.leadZeroDateTime) {\n\t\t\t\t\t\t\t\tresult += '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (maskExpression[cursor] === 'M') {\n\t\t\t\t\t\tconst monthsCount = 12;\n\t\t\t\t\t\t// mask without day\n\t\t\t\t\t\tconst withoutDays: boolean =\n\t\t\t\t\t\t\tcursor === 0 &&\n\t\t\t\t\t\t\t(Number(inputSymbol) > 2 ||\n\t\t\t\t\t\t\t\tNumber(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n\t\t\t\t\t\t\t\tinputValue[cursor + 1] === '/');\n\t\t\t\t\t\t// day<10 && month<12 for input\n\t\t\t\t\t\tconst day1monthInput: boolean =\n\t\t\t\t\t\t\tinputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n\t\t\t\t\t\t\t((inputValue[cursor - 2] === '/' &&\n\t\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount &&\n\t\t\t\t\t\t\t\tinputValue[cursor] !== '/') ||\n\t\t\t\t\t\t\t\tinputValue[cursor] === '/' ||\n\t\t\t\t\t\t\t\t(inputValue[cursor - 3] === '/' &&\n\t\t\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 2, cursor)) > monthsCount &&\n\t\t\t\t\t\t\t\t\tinputValue[cursor - 1] !== '/') ||\n\t\t\t\t\t\t\t\tinputValue[cursor - 1] === '/');\n\t\t\t\t\t\t// 10<day<31 && month<12 for input\n\t\t\t\t\t\tconst day2monthInput: boolean =\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n\t\t\t\t\t\t\t!inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n\t\t\t\t\t\t\tinputValue[cursor - 1] === '/' &&\n\t\t\t\t\t\t\t(Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n\t\t\t\t\t\t\t\tinputValue[cursor + 1] === '/');\n\t\t\t\t\t\t// day<10 && month<12 for paste whole data\n\t\t\t\t\t\tconst day1monthPaste: boolean =\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 3, cursor - 1)) > daysCount &&\n\t\t\t\t\t\t\t!inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n\t\t\t\t\t\t\t!inputValue.slice(cursor - 2, cursor).includes('/') &&\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 2, cursor)) > monthsCount;\n\t\t\t\t\t\t// 10<day<31 && month<12 for paste whole data\n\t\t\t\t\t\tconst day2monthPaste: boolean =\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n\t\t\t\t\t\t\t!inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n\t\t\t\t\t\t\tinputValue[cursor - 1] !== '/' &&\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(Number(inputSymbol) > 1 && this.leadZeroDateTime) ||\n\t\t\t\t\t\t\twithoutDays ||\n\t\t\t\t\t\t\tday1monthInput ||\n\t\t\t\t\t\t\tday2monthInput ||\n\t\t\t\t\t\t\tday1monthPaste ||\n\t\t\t\t\t\t\tday2monthPaste\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tif (this.leadZeroDateTime) {\n\t\t\t\t\t\t\t\tresult += '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tcursor++;\n\t\t\t\t} else if (inputSymbol === ' ' && maskExpression[cursor] === ' ') {\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tcursor++;\n\t\t\t\t} else if (this.maskSpecialCharacters.indexOf(maskExpression[cursor]!) !== -1) {\n\t\t\t\t\tresult += maskExpression[cursor];\n\t\t\t\t\tcursor++;\n\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\ti--;\n\t\t\t\t} else if (\n\t\t\t\t\tthis.maskSpecialCharacters.indexOf(inputSymbol) > -1 &&\n\t\t\t\t\tthis.maskAvailablePatterns[maskExpression[cursor]!] &&\n\t\t\t\t\tthis.maskAvailablePatterns[maskExpression[cursor]!]?.optional\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!!inputArray[cursor] &&\n\t\t\t\t\t\tmaskExpression !== '099.099.099.099' &&\n\t\t\t\t\t\tmaskExpression !== '000.000.000-00' &&\n\t\t\t\t\t\tmaskExpression !== '00.000.000/0000-00' &&\n\t\t\t\t\t\t!maskExpression.match(/^9+\\.0+$/)\n\t\t\t\t\t) {\n\t\t\t\t\t\tresult += inputArray[cursor];\n\t\t\t\t\t}\n\t\t\t\t\tcursor++;\n\t\t\t\t\ti--;\n\t\t\t\t} else if (\n\t\t\t\t\tthis.maskExpression[cursor + 1] === '*' &&\n\t\t\t\t\tthis._findSpecialChar(this.maskExpression[cursor + 2]!) &&\n\t\t\t\t\tthis._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n\t\t\t\t\tmulti\n\t\t\t\t) {\n\t\t\t\t\tcursor += 3;\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t} else if (\n\t\t\t\t\tthis.maskExpression[cursor + 1] === '?' &&\n\t\t\t\t\tthis._findSpecialChar(this.maskExpression[cursor + 2]!) &&\n\t\t\t\t\tthis._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n\t\t\t\t\tmulti\n\t\t\t\t) {\n\t\t\t\t\tcursor += 3;\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t} else if (\n\t\t\t\t\tthis.showMaskTyped &&\n\t\t\t\t\tthis.maskSpecialCharacters.indexOf(inputSymbol) < 0 &&\n\t\t\t\t\tinputSymbol !== this.placeHolderCharacter\n\t\t\t\t) {\n\t\t\t\t\tstepBack = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\tresult.length + 1 === maskExpression.length &&\n\t\t\tthis.maskSpecialCharacters.indexOf(maskExpression[maskExpression.length - 1]!) !== -1\n\t\t) {\n\t\t\tresult += maskExpression[maskExpression.length - 1];\n\t\t}\n\n\t\tlet newPosition: number = position + 1;\n\n\t\twhile (this._shift.has(newPosition)) {\n\t\t\tshift++;\n\t\t\tnewPosition++;\n\t\t}\n\n\t\tlet actualShift: number =\n\t\t\tjustPasted && !maskExpression.startsWith('separator')\n\t\t\t\t? cursor\n\t\t\t\t: this._shift.has(position)\n\t\t\t\t? shift\n\t\t\t\t: 0;\n\t\tif (stepBack) {\n\t\t\tactualShift--;\n\t\t}\n\n\t\tcb(actualShift, backspaceShift);\n\t\tif (shift < 0) {\n\t\t\tthis._shift.clear();\n\t\t}\n\t\tlet onlySpecial = false;\n\t\tif (backspaced) {\n\t\t\tonlySpecial = inputArray.every((char) => this.maskSpecialCharacters.includes(char));\n\t\t}\n\t\tlet res = `${this.prefix}${onlySpecial ? '' : result}${this.suffix}`;\n\t\tif (result.length === 0) {\n\t\t\tres = `${this.prefix}${result}`;\n\t\t}\n\t\treturn res;\n\t}\n\n\tpublic _findSpecialChar(inputSymbol: string): undefined | string {\n\t\treturn this.maskSpecialCharacters.find((val: string) => val === inputSymbol);\n\t}\n\n\tprotected _checkSymbolMask(inputSymbol: string, maskSymbol: string): boolean {\n\t\tthis.maskAvailablePatterns = this.customPattern\n\t\t\t? this.customPattern\n\t\t\t: this.maskAvailablePatterns;\n\t\treturn (\n\t\t\tthis.maskAvailablePatterns[maskSymbol]! &&\n\t\t\tthis.maskAvailablePatterns[maskSymbol]!.pattern &&\n\t\t\tthis.maskAvailablePatterns[maskSymbol]!.pattern.test(inputSymbol)\n\t\t);\n\t}\n\n\tprivate _formatWithSeparators = (\n\t\tstr: string,\n\t\tthousandSeparatorChar: string,\n\t\tdecimalChars: string | string[],\n\t\tprecision: number,\n\t) => {\n\t\tlet x: string[] = [];\n\t\tlet decimalChar: string = '';\n\t\tif (Array.isArray(decimalChars)) {\n\t\t\tconst regExp = new RegExp(\n\t\t\t\tdecimalChars.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|'),\n\t\t\t);\n\t\t\tx = str.split(regExp);\n\t\t\tdecimalChar = str.match(regExp)?.[0] ?? '';\n\t\t} else {\n\t\t\tx = str.split(decimalChars);\n\t\t\tdecimalChar = decimalChars;\n\t\t}\n\t\tconst decimals: string = x.length > 1 ? `${decimalChar}${x[1]}` : '';\n\t\tlet res: string = x[0]!;\n\t\tconst separatorLimit: string = this.separatorLimit.replace(/\\s/g, '');\n\t\tif (separatorLimit && +separatorLimit) {\n\t\t\tif (res[0] === '-') {\n\t\t\t\tres = `-${res.slice(1, res.length).slice(0, separatorLimit.length)}`;\n\t\t\t} else {\n\t\t\t\tres = res.slice(0, separatorLimit.length);\n\t\t\t}\n\t\t}\n\t\tconst rgx: RegExp = /(\\d+)(\\d{3})/;\n\n\t\twhile (thousandSeparatorChar && rgx.test(res)) {\n\t\t\tres = res.replace(rgx, '$1' + thousandSeparatorChar + '$2');\n\t\t}\n\n\t\tif (precision === undefined) {\n\t\t\treturn res + decimals;\n\t\t} else if (precision === 0) {\n\t\t\treturn res;\n\t\t}\n\t\treturn res + decimals.substr(0, precision + 1);\n\t};\n\n\tprivate percentage = (str: string): boolean => {\n\t\treturn Number(str) >= 0 && Number(str) <= 100;\n\t};\n\n\tprivate getPrecision = (maskExpression: string): number => {\n\t\tconst x: string[] = maskExpression.split('.');\n\t\tif (x.length > 1) {\n\t\t\treturn Number(x[x.length - 1]);\n\t\t}\n\n\t\treturn Infinity;\n\t};\n\n\tprivate checkAndRemoveSuffix = (inputValue: string): string => {\n\t\tfor (let i = this.suffix?.length - 1; i >= 0; i--) {\n\t\t\tconst substr = this.suffix.substr(i, this.suffix?.length);\n\t\t\tif (\n\t\t\t\tinputValue.includes(substr) &&\n\t\t\t\t(i - 1 < 0 || !inputValue.includes(this.suffix.substr(i - 1, this.suffix?.length)))\n\t\t\t) {\n\t\t\t\treturn inputValue.replace(substr, '');\n\t\t\t}\n\t\t}\n\t\treturn inputValue;\n\t};\n\n\tprivate checkInputPrecision = (\n\t\tinputValue: string,\n\t\tprecision: number,\n\t\tdecimalMarker: IConfig['decimalMarker'],\n\t): string => {\n\t\tif (precision < Infinity) {\n\t\t\t// TODO need think about decimalMarker\n\t\t\tif (Array.isArray(decimalMarker)) {\n\t\t\t\tconst marker = decimalMarker.find((dm) => dm !== this.thousandSeparator);\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tdecimalMarker = marker ? marker : decimalMarker[0];\n\t\t\t}\n\t\t\tconst precisionRegEx: RegExp = new RegExp(\n\t\t\t\tthis._charToRegExpExpression(decimalMarker) + `\\\\d{${precision}}.*$`,\n\t\t\t);\n\n\t\t\tconst precisionMatch: RegExpMatchArray | null = inputValue.match(precisionRegEx);\n\t\t\tif (precisionMatch && precisionMatch[0]!.length - 1 > precision) {\n\t\t\t\tconst diff = precisionMatch[0]!.length - 1 - precision;\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = inputValue.substring(0, inputValue.length - diff);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tprecision === 0 &&\n\t\t\t\tthis._compareOrIncludes(\n\t\t\t\t\tinputValue[inputValue.length - 1],\n\t\t\t\t\tdecimalMarker,\n\t\t\t\t\tthis.thousandSeparator,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = inputValue.substring(0, inputValue.length - 1);\n\t\t\t}\n\t\t}\n\t\treturn inputValue;\n\t};\n\n\tprivate _stripToDecimal(str: string): string {\n\t\treturn str\n\t\t\t.split('')\n\t\t\t.filter((i: string, idx: number) => {\n\t\t\t\treturn (\n\t\t\t\t\ti.match('^-?\\\\d') ||\n\t\t\t\t\ti.match('\\\\s') ||\n\t\t\t\t\ti === '.' ||\n\t\t\t\t\ti === ',' ||\n\t\t\t\t\t(i === '-' && idx === 0 && this.allowNegativeNumbers)\n\t\t\t\t);\n\t\t\t})\n\t\t\t.join('');\n\t}\n\n\tprivate _charToRegExpExpression(char: string): string {\n\t\t// if (Array.isArray(char)) {\n\t\t// \treturn char.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|');\n\t\t// }\n\t\tif (char) {\n\t\t\tconst charsToEscape = '[\\\\^$.|?*+()';\n\t\t\treturn char === ' ' ? '\\\\s' : charsToEscape.indexOf(char) >= 0 ? `\\\\${char}` : char;\n\t\t}\n\t\treturn char;\n\t}\n\n\tprivate _shiftStep(maskExpression: string, cursor: number, inputLength: number) {\n\t\tconst shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputLength : cursor;\n\t\tthis._shift.add(shiftStep + this.prefix.length || 0);\n\t}\n\n\tprotected _compareOrIncludes<T>(value: T, comparedValue: T | T[], excludedValue: T): boolean {\n\t\treturn Array.isArray(comparedValue)\n\t\t\t? comparedValue.filter((v) => v !== excludedValue).includes(value)\n\t\t\t: value === comparedValue;\n\t}\n\n\tprivate _validIP(valuesIP: string[]): boolean {\n\t\treturn !(\n\t\t\tvaluesIP.length === 4 &&\n\t\t\t!valuesIP.some((value: string, index: number) => {\n\t\t\t\tif (valuesIP.length !== index + 1) {\n\t\t\t\t\treturn value === '' || Number(value) > 255;\n\t\t\t\t}\n\t\t\t\treturn value === '' || Number(value.substring(0, 3)) > 255;\n\t\t\t})\n\t\t);\n\t}\n}\n","import { ElementRef, Inject, Injectable, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { config, IConfig } from './config';\nimport { MaskApplierService } from './mask-applier.service';\n\n@Injectable()\nexport class MaskService extends MaskApplierService {\n\tpublic override maskExpression: string = '';\n\n\tpublic isNumberValue: boolean = false;\n\n\tpublic override placeHolderCharacter: string = '_';\n\n\tpublic maskIsShown: string = '';\n\n\tpublic selStart: number | null = null;\n\n\tpublic selEnd: number | null = null;\n\n\t/**\n\t * Whether we are currently in writeValue function, in this case when applying the mask we don't want to trigger onChange function,\n\t * since writeValue should be a one way only process of writing the DOM value based on the Angular model value.\n\t */\n\tpublic writingValue: boolean = false;\n\n\tpublic maskChanged: boolean = false;\n\n\tpublic triggerOnMaskChange: boolean = false;\n\n\tpublic onChange = (_: any) => {};\n\n\tpublic constructor(\n\t\t@Inject(DOCUMENT) private document: any,\n\t\t@Inject(config) protected override _config: IConfig,\n\t\tprivate _elementRef: ElementRef,\n\t\tprivate _renderer: Renderer2,\n\t) {\n\t\tsuper(_config);\n\t}\n\n\t// eslint-disable-next-line complexity\n\tpublic override applyMask(\n\t\tinputValue: string,\n\t\tmaskExpression: string,\n\t\tposition: number = 0,\n\t\tjustPasted = false,\n\t\tbackspaced = false,\n\t\tcb: Function = () => {},\n\t): string {\n\t\tif (!maskExpression) {\n\t\t\treturn inputValue !== this.actualValue ? this.actualValue : inputValue;\n\t\t}\n\t\tthis.maskIsShown = this.showMaskTyped ? this.showMaskInInput() : '';\n\t\tif (this.maskExpression === 'IP' && this.showMaskTyped) {\n\t\t\tthis.maskIsShown = this.showMaskInInput(inputValue || '#');\n\t\t}\n\t\tif (this.maskExpression === 'CPF_CNPJ' && this.showMaskTyped) {\n\t\t\tthis.maskIsShown = this.showMaskInInput(inputValue || '#');\n\t\t}\n\t\tif (!inputValue && this.showMaskTyped) {\n\t\t\tthis.formControlResult(this.prefix);\n\t\t\treturn this.prefix + this.maskIsShown;\n\t\t}\n\t\tconst getSymbol: string | undefined =\n\t\t\t!!inputValue && typeof this.selStart === 'number' ? inputValue[this.selStart] : '';\n\t\tlet newInputValue = '';\n\t\tif (this.hiddenInput !== undefined && !this.writingValue) {\n\t\t\tlet actualResult: string[] = this.actualValue.split('');\n\t\t\t// eslint-disable @typescript-eslint/no-unused-expressions\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\tinputValue !== '' && actualResult.length\n\t\t\t\t? typeof this.selStart === 'number' && typeof this.selEnd === 'number'\n\t\t\t\t\t? inputValue.length > actualResult.length\n\t\t\t\t\t\t? actualResult.splice(this.selStart, 0, getSymbol!)\n\t\t\t\t\t\t: inputValue.length < actualResult.length\n\t\t\t\t\t\t? actualResult.length - inputValue.length === 1\n\t\t\t\t\t\t\t? actualResult.splice(this.selStart - 1, 1)\n\t\t\t\t\t\t\t: actualResult.splice(this.selStart, this.selEnd - this.selStart)\n\t\t\t\t\t\t: null\n\t\t\t\t\t: null\n\t\t\t\t: (actualResult = []);\n\t\t\tif (this.showMaskTyped) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = this.removeMask(inputValue);\n\t\t\t}\n\t\t\t// eslint-enable @typescript-eslint/no-unused-expressions\n\t\t\tnewInputValue =\n\t\t\t\tthis.actualValue.length && actualResult.length <= inputValue.length\n\t\t\t\t\t? this.shiftTypedSymbols(actualResult.join(''))\n\t\t\t\t\t: inputValue;\n\t\t}\n\n\t\tif (this.showMaskTyped) {\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = this.removeMask(inputValue);\n\t\t}\n\n\t\tnewInputValue = Boolean(newInputValue) && newInputValue.length ? newInputValue : inputValue;\n\n\t\tconst result: string = super.applyMask(\n\t\t\tnewInputValue,\n\t\t\tmaskExpression,\n\t\t\tposition,\n\t\t\tjustPasted,\n\t\t\tbackspaced,\n\t\t\tcb,\n\t\t);\n\n\t\tthis.actualValue = this.getActualValue(result);\n\t\t// handle some separator implications:\n\t\t// a.) adjust decimalMarker default (. -> ,) if thousandSeparator is a dot\n\t\tif (this.thousandSeparator === '.' && this.decimalMarker === '.') {\n\t\t\tthis.decimalMarker = ',';\n\t\t}\n\n\t\t// b) remove decimal marker from list of special characters to mask\n\t\tif (this.maskExpression.startsWith('separator') && this.dropSpecialCharacters === true) {\n\t\t\tthis.maskSpecialCharacters = this.maskSpecialCharacters.filter(\n\t\t\t\t(item: string) =>\n\t\t\t\t\t!this._compareOrIncludes(item, this.decimalMarker, this.thousandSeparator), //item !== this.decimalMarker, // !\n\t\t\t);\n\t\t}\n\t\tthis.formControlResult(result);\n\t\tif (!this.showMaskTyped) {\n\t\t\tif (this.hiddenInput) {\n\t\t\t\treturn result && result.length ? this.hideInput(result, this.maskExpression) : result;\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tconst resLen: number = result.length;\n\t\tconst prefNmask: string = this.prefix + this.maskIsShown;\n\n\t\tif (this.maskExpression.includes('H')) {\n\t\t\tconst countSkipedSymbol = this._numberSkipedSymbols(result);\n\t\t\treturn result + prefNmask.slice(resLen + countSkipedSymbol);\n\t\t} else if (this.maskExpression === 'IP' || this.maskExpression === 'CPF_CNPJ') {\n\t\t\treturn result + prefNmask;\n\t\t}\n\t\treturn result + prefNmask.slice(resLen);\n\t}\n\n\t// get the number of characters that were shifted\n\tprivate _numberSkipedSymbols(value: string): number {\n\t\tconst regex = /(^|\\D)(\\d\\D)/g;\n\t\tlet match = regex.exec(value);\n\t\tlet countSkipedSymbol = 0;\n\t\twhile (match != null) {\n\t\t\tcountSkipedSymbol += 1;\n\t\t\tmatch = regex.exec(value);\n\t\t}\n\t\treturn countSkipedSymbol;\n\t}\n\n\tpublic applyValueChanges(\n\t\tposition: number,\n\t\tjustPasted: boolean,\n\t\tbackspaced: boolean,\n\t\tcb: Function = () => {},\n\t): void {\n\t\tconst formElement = this._elementRef.nativeElement;\n\t\tformElement.value = this.applyMask(\n\t\t\tformElement.value,\n\t\t\tthis.maskExpression,\n\t\t\tposition,\n\t\t\tjustPasted,\n\t\t\tbackspaced,\n\t\t\tcb,\n\t\t);\n\t\tif (formElement === this._getActiveElement()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.clearIfNotMatchFn();\n\t}\n\n\tpublic hideInput(inputValue: string, maskExpression: string): string {\n\t\treturn inputValue\n\t\t\t.split('')\n\t\t\t.map((curr: string, index: number) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.maskAvailablePatterns &&\n\t\t\t\t\tthis.maskAvailablePatterns[maskExpression[index]!] &&\n\t\t\t\t\tthis.maskAvailablePatterns[maskExpression[index]!]?.symbol\n\t\t\t\t) {\n\t\t\t\t\treturn this.maskAvailablePatterns[maskExpression[index]!]?.symbol;\n\t\t\t\t}\n\t\t\t\treturn curr;\n\t\t\t})\n\t\t\t.join('');\n\t}\n\n\t// this function is not necessary, it checks result against maskExpression\n\tpublic getActualValue(res: string): string {\n\t\tconst compare: string[] = res\n\t\t\t.split('')\n\t\t\t.filter(\n\t\t\t\t(symbol: string, i: number) =>\n\t\t\t\t\tthis._checkSymbolMask(symbol, this.maskExpression[i]!) ||\n\t\t\t\t\t(this.maskSpecialCharacters.includes(this.maskExpression[i]!) &&\n\t\t\t\t\t\tsymbol === this.maskExpression[i]),\n\t\t\t);\n\t\tif (compare.join('') === res) {\n\t\t\treturn compare.join('');\n\t\t}\n\t\treturn res;\n\t}\n\n\tpublic shiftTypedSymbols(inputValue: string): string {\n\t\tlet symbolToReplace = '';\n\t\tconst newInputValue: (string | undefined)[] =\n\t\t\t(inputValue &&\n\t\t\t\tinputValue.split('').map((currSymbol: string, index: number) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.maskSpecialCharacters.includes(inputValue[index + 1]!) &&\n\t\t\t\t\t\tinputValue[index + 1] !== this.maskExpression[index + 1]\n\t\t\t\t\t) {\n\t\t\t\t\t\tsymbolToReplace = currSymbol;\n\t\t\t\t\t\treturn inputValue[index + 1];\n\t\t\t\t\t}\n\t\t\t\t\tif (symbolToReplace.length) {\n\t\t\t\t\t\tconst replaceSymbol: string = symbolToReplace;\n\t\t\t\t\t\tsymbolToReplace = '';\n\t\t\t\t\t\treturn replaceSymbol;\n\t\t\t\t\t}\n\t\t\t\t\treturn currSymbol;\n\t\t\t\t})) ||\n\t\t\t[];\n\t\treturn newInputValue.join('');\n\t}\n\n\t/**\n\t * Convert number value to string\n\t * 3.1415 -> '3.1415'\n\t * 1e-7 -> '0.0000001'\n\t */\n\tpublic numberToString(value: number | string): string {\n\t\tif (!value && value !== 0) {\n\t\t\treturn String(value);\n\t\t}\n\t\treturn Number(value).toLocaleString('fullwide', {\n\t\t\tuseGrouping: false,\n\t\t\tmaximumFractionDigits: 20,\n\t\t});\n\t}\n\n\tpublic showMaskInInput(inputVal?: string): string {\n\t\tif (this.showMaskTyped && !!this.shownMaskExpression) {\n\t\t\tif (this.maskExpression.length !== this.shownMaskExpression.length) {\n\t\t\t\tthrow new Error('Mask expression must match mask placeholder length');\n\t\t\t} else {\n\t\t\t\treturn this.shownMaskExpression;\n\t\t\t}\n\t\t} else if (this.showMaskTyped) {\n\t\t\tif (inputVal) {\n\t\t\t\tif (this.maskExpression === 'IP') {\n\t\t\t\t\treturn this._checkForIp(inputVal);\n\t\t\t\t}\n\t\t\t\tif (this.maskExpression === 'CPF_CNPJ') {\n\t\t\t\t\treturn this._checkForCpfCnpj(inputVal);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.maskExpression.replace(/\\w/g, this.placeHolderCharacter);\n\t\t}\n\t\treturn '';\n\t}\n\n\tpublic clearIfNotMatchFn(): void {\n\t\tconst formElement = this._elementRef.nativeElement;\n\t\tif (\n\t\t\tthis.clearIfNotMatch &&\n\t\t\tthis.prefix.length + this.maskExpression.length + this.suffix.length !==\n\t\t\t\tformElement.value.replace(/_/g, '').length\n\t\t) {\n\t\t\tthis.formElementProperty = ['value', ''];\n\t\t\tthis.applyMask(formElement.value, this.maskExpression);\n\t\t}\n\t}\n\n\tpublic set formElementProperty([name, value]: [string, string | boolean]) {\n\t\tPromise.resolve().then(() =>\n\t\t\tthis._renderer.setProperty(this._elementRef.nativeElement, name, value),\n\t\t);\n\t}\n\n\tpublic checkSpecialCharAmount(mask: string): number {\n\t\tconst chars: string[] = mask.split('').filter((item: string) => this._findSpecialChar(item));\n\t\treturn chars.length;\n\t}\n\n\tpublic removeMask(inputValue: string): string {\n\t\treturn this._removeMask(\n\t\t\tthis._removeSuffix(this._removePrefix(inputValue)),\n\t\t\tthis.maskSpecialCharacters.concat('_').concat(this.placeHolderCharacter),\n\t\t);\n\t}\n\n\tprivate _checkForIp(inputVal: string): string {\n\t\tif (inputVal === '#') {\n\t\t\treturn `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n\t\t}\n\t\tconst arr: string[] = [];\n\t\tfor (let i = 0; i < inputVal.length; i++) {\n\t\t\tif (inputVal[i]?.match('\\\\d')) {\n\t\t\t\tarr.push(inputVal[i]!);\n\t\t\t}\n\t\t}\n\t\tif (arr.length <= 3) {\n\t\t\treturn `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n\t\t}\n\t\tif (arr.length > 3 && arr.length <= 6) {\n\t\t\treturn `${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n\t\t}\n\t\tif (arr.length > 6 && arr.length <= 9) {\n\t\t\treturn this.placeHolderCharacter;\n\t\t}\n\t\tif (arr.length > 9 && arr.length <= 12) {\n\t\t\treturn '';\n\t\t}\n\t\treturn '';\n\t}\n\n\tprivate _checkForCpfCnpj(inputVal: string): string {\n\t\tconst cpf =\n\t\t\t`${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n\t\tconst cnpj =\n\t\t\t`${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`/${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n\n\t\tif (inputVal === '#') {\n\t\t\treturn cpf;\n\t\t}\n\t\tconst arr: string[] = [];\n\t\tfor (let i = 0; i < inputVal.length; i++) {\n\t\t\tif (inputVal[i]?.match('\\\\d')) {\n\t\t\t\tarr.push(inputVal[i]!);\n\t\t\t}\n\t\t}\n\t\tif (arr.length <= 3) {\n\t\t\treturn cpf.slice(arr.length, cpf.length);\n\t\t}\n\t\tif (arr.length > 3 && arr.length <= 6) {\n\t\t\treturn cpf.slice(arr.length + 1, cpf.length);\n\t\t}\n\t\tif (arr.length > 6 && arr.length <= 9) {\n\t\t\treturn cpf.slice(arr.length + 2, cpf.length);\n\t\t}\n\t\tif (arr.length > 9 && arr.length < 11) {\n\t\t\treturn cpf.slice(arr.length + 3, cpf.length);\n\t\t}\n\t\tif (arr.length === 11) {\n\t\t\treturn '';\n\t\t}\n\t\tif (arr.length === 12) {\n\t\t\tif (inputVal.length === 17) {\n\t\t\t\treturn cnpj.slice(16, cnpj.length);\n\t\t\t}\n\t\t\treturn cnpj.slice(15, cnpj.length);\n\t\t}\n\t\tif (arr.length > 12 && arr.length <= 14) {\n\t\t\treturn cnpj.slice(arr.length + 4, cnpj.length);\n\t\t}\n\t\treturn '';\n\t}\n\n\t/**\n\t * Recursively determine the current active element by navigating the Shadow DOM until the Active Element is found.\n\t */\n\tprivate _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n\t\tconst shadowRootEl = document?.activeElement?.shadowRoot;\n\t\tif (!shadowRootEl?.activeElement) {\n\t\t\treturn document.activeElement;\n\t\t} else {\n\t\t\treturn this._getActiveElement(shadowRootEl);\n\t\t}\n\t}\n\n\t/**\n\t * Propogates the input value back to the Angular model by triggering the onChange function. It won't do this if writingValue\n\t * is true. If that is true it means we are currently in the writeValue function, which is supposed to only update the actual\n\t * DOM element based on the Angular model value. It should be a one way process, i.e. writeValue should not be modifying the Angular\n\t * model value too. Therefore, we don't trigger onChange in this scenario.\n\t * @param inputValue the current form input value\n\t */\n\tprivate formControlResult(inputValue: string): void {\n\t\tif (this.writingValue || (!this.triggerOnMaskChange && this.maskChanged)) {\n\t\t\tthis.maskChanged = false;\n\t\t\treturn;\n\t\t}\n\t\tif (Array.isArray(this.dropSpecialCharacters)) {\n\t\t\tthis.onChange(\n\t\t\t\tthis._toNumber(\n\t\t\t\t\tthis._removeMask(\n\t\t\t\t\t\tthis._removeSuffix(this._removePrefix(inputValue)),\n\t\t\t\t\t\tthis.dropSpecialCharacters,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t} else if (this.dropSpecialCharacters) {\n\t\t\tthis.onChange(this._toNumber(this._checkSymbols(inputValue)));\n\t\t} else {\n\t\t\tthis.onChange(this._removeSuffix(inputValue));\n\t\t}\n\t}\n\n\tprivate _toNumber(value: string | number | undefined | null) {\n\t\tif (!this.isNumberValue || value === '') {\n\t\t\treturn value;\n\t\t}\n\t\tconst num = Number(value);\n\t\treturn Number.isNaN(num) ? value : num;\n\t}\n\n\tprivate _removeMask(value: string, specialCharactersForRemove: string[]): string {\n\t\treturn value ? value.replace(this._regExpForRemove(specialCharactersForRemove), '') : value;\n\t}\n\n\tprivate _removePrefix(value: string): string {\n\t\tif (!this.prefix) {\n\t\t\treturn value;\n\t\t}\n\t\treturn value ? value.replace(this.prefix, '') : value;\n\t}\n\n\tprivate _removeSuffix(value: string): string {\n\t\tif (!this.suffix) {\n\t\t\treturn value;\n\t\t}\n\t\treturn value ? value.replace(this.suffix, '') : value;\n\t}\n\n\tprivate _retrieveSeparatorValue(result: string): string {\n\t\treturn this._removeMask(\n\t\t\tthis._removeSuffix(this._removePrefix(result)),\n\t\t\tthis.maskSpecialCharacters,\n\t\t);\n\t}\n\n\tprivate _regExpForRemove(specialCharactersForRemove: string[]): RegExp {\n\t\treturn new RegExp(\n\t\t\tspecialCharactersForRemove.map((item: string) => `\\\\${item}`).join('|'),\n\t\t\t'gi',\n\t\t);\n\t}\n\n\tprivate _replaceDecimalMarkerToDot(value: string): string {\n\t\tconst markers = Array.isArray(this.decimalMarker) ? this.decimalMarker : [this.decimalMarker];\n\n\t\treturn value.replace(this._regExpForRemove(markers), '.');\n\t}\n\n\tprivate _checkSymbols(result: string): string | number | undefined | null {\n\t\tif (result === '') {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst separatorPrecision: number | null = this._retrieveSeparatorPrecision(this.maskExpression);\n\t\tconst separatorValue: string = this._replaceDecimalMarkerToDot(\n\t\t\tthis._retrieveSeparatorValue(result),\n\t\t);\n\n\t\tif (!this.isNumberValue) {\n\t\t\treturn separatorValue;\n\t\t}\n\t\tif (separatorPrecision) {\n\t\t\tif (result === this.decimalMarker) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn this._checkPrecision(this.maskExpression, separatorValue);\n\t\t} else {\n\t\t\treturn Number(separatorValue);\n\t\t}\n\t}\n\n\t// TODO should think about helpers or separting decimal precision to own property\n\tprivate _retrieveSeparatorPrecision(maskExpretion: string): number | null {\n\t\tconst matcher: RegExpMatchArray | null = maskExpretion.match(\n\t\t\tnew RegExp(`^separator\\\\.([^d]*)`),\n\t\t);\n\t\treturn matcher ? Number(matcher[1]) : null;\n\t}\n\n\tprivate _checkPrecision(separatorExpression: string, separatorValue: string): number | string {\n\t\tif (separatorExpression.indexOf('2') > 0) {\n\t\t\treturn Number(separatorValue).toFixed(2);\n\t\t}\n\t\treturn Number(separatorValue);\n\t}\n}\n","import {\n\tControlValueAccessor,\n\tNG_VALIDATORS,\n\tNG_VALUE_ACCESSOR,\n\tValidationErrors,\n\tValidator,\n\tFormControl,\n} from '@angular/forms';\nimport {\n\tDirective,\n\tEventEmitter,\n\tforwardRef,\n\tHostListener,\n\tInject,\n\tInput,\n\tOnChanges,\n\tOutput,\n\tSimpleChanges,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { CustomKeyboardEvent } from './custom-keyboard-event';\nimport { config, IConfig, timeMasks, withoutValidation } from './config';\nimport { MaskService } from './mask.service';\n\n@Directive({\n\tselector: 'input[mask], textarea[mask]',\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => MaskDirective),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => MaskDirective),\n\t\t\tmulti: true,\n\t\t},\n\t\tMaskService,\n\t],\n\texportAs: 'mask,ngxMask',\n})\nexport class MaskDirective implements ControlValueAccessor, OnChanges, Validator {\n\t// eslint-disable-next-line @angular-eslint/no-input-rename\n\t@Input('mask') public maskExpression: string = '';\n\n\t@Input() public specialCharacters: IConfig['specialCharacters'] = [];\n\n\t@Input() public patterns: IConfig['patterns'] = {};\n\n\t@Input() public prefix: IConfig['prefix'] = '';\n\n\t@Input() public suffix: IConfig['suffix'] = '';\n\n\t@Input() public thousandSeparator: IConfig['thousandSeparator'] = ' ';\n\n\t@Input() public decimalMarker: IConfig['decimalMarker'] = '.';\n\n\t@Input() public dropSpecialCharacters: IConfig['dropSpecialCharacters'] | null = null;\n\n\t@Input() public hiddenInput: IConfig['hiddenInput'] | null = null;\n\n\t@Input() public showMaskTyped: IConfig['showMaskTyped'] | null = null;\n\n\t@Input() public placeHolderCharacter: IConfig['placeHolderCharacter'] | null = null;\n\n\t@Input() public shownMaskExpression: IConfig['shownMaskExpression'] | null = null;\n\n\t@Input() public showTemplate: IConfig['showTemplate'] | null = null;\n\n\t@Input() public clearIfNotMatch: IConfig['clearIfNotMatch'] | null = null;\n\n\t@Input() public validation: IConfig['validation'] | null = null;\n\n\t@Input() public separatorLimit: IConfig['separatorLimit'] | null = null;\n\n\t@Input() public allowNegativeNumbers: IConfig['allowNegativeNumbers'] | null = null;\n\n\t@Input() public leadZeroDateTime: IConfig['leadZeroDateTime'] | null = null;\n\n\t@Input() public triggerOnMaskChange: IConfig['triggerOnMaskChange'] | null = null;\n\n\t@Output() public maskFilled: IConfig['maskFilled'] = new EventEmitter<void>();\n\n\tprivate _maskValue: string = '';\n\n\tprivate _inputValue!: string;\n\n\tprivate _position: number | null = null;\n\n\tprivate _start!: number;\n\n\tprivate _end!: number;\n\n\tprivate _code!: string;\n\n\tprivate _maskExpressionArray: string[] = [];\n\n\tprivate _justPasted: boolean = false;\n\n\tpublic constructor(\n\t\t@Inject(DOCUMENT) private document: any,\n\t\tpublic _maskService: MaskService,\n\t\t@Inject(config) protected _config: IConfig,\n\t) {}\n\n\tpublic onChange = (_: any) => {};\n\n\tpublic onTouch = () => {};\n\n\tpublic ngOnChanges(changes: SimpleChanges): void {\n\t\tconst {\n\t\t\tmaskExpression,\n\t\t\tspecialCharacters,\n\t\t\tpatterns,\n\t\t\tprefix,\n\t\t\tsuffix,\n\t\t\tthousandSeparator,\n\t\t\tdecimalMarker,\n\t\t\tdropSpecialCharacters,\n\t\t\thiddenInput,\n\t\t\tshowMaskTyped,\n\t\t\tplaceHolderCharacter,\n\t\t\tshownMaskExpression,\n\t\t\tshowTemplate,\n\t\t\tclearIfNotMatch,\n\t\t\tvalidation,\n\t\t\tseparatorLimit,\n\t\t\tallowNegativeNumbers,\n\t\t\tleadZeroDateTime,\n\t\t\ttriggerOnMaskChange,\n\t\t} = changes;\n\t\tif (maskExpression) {\n\t\t\tif (\n\t\t\t\tmaskExpression.currentValue !== maskExpression.previousValue &&\n\t\t\t\t!maskExpression.firstChange\n\t\t\t) {\n\t\t\t\tthis._maskService.maskChanged = true;\n\t\t\t}\n\t\t\tif (maskExpression.currentValue && maskExpression.currentValue.split('||').length > 1) {\n\t\t\t\tthis._maskExpressionArray = maskExpression.currentValue\n\t\t\t\t\t.split('||')\n\t\t\t\t\t.sort((a: string, b: string) => {\n\t\t\t\t\t\treturn a.length - b.length;\n\t\t\t\t\t});\n\t\t\t\tthis._setMask();\n\t\t\t} else {\n\t\t\t\tthis._maskExpressionArray = [];\n\t\t\t\tthis._maskValue = maskExpression.currentValue || '';\n\t\t\t\tthis._maskService.maskExpression = this._maskValue;\n\t\t\t}\n\t\t}\n\t\tif (specialCharacters) {\n\t\t\tif (!specialCharacters.currentValue || !Array.isArray(specialCharacters.currentValue)) {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tthis._maskService.maskSpecialCharacters = specialCharacters.currentValue || [];\n\t\t\t}\n\t\t}\n\t\t// Only overwrite the mask available patterns if a pattern has actually been passed in\n\t\tif (patterns && patterns.currentValue) {\n\t\t\tthis._maskService.maskAvailablePatterns = patterns.currentValue;\n\t\t}\n\t\tif (prefix) {\n\t\t\tthis._maskService.prefix = prefix.currentValue;\n\t\t}\n\t\tif (suffix) {\n\t\t\tthis._maskService.suffix = suffix.currentValue;\n\t\t}\n\t\tif (thousandSeparator) {\n\t\t\tthis._maskService.thousandSeparator = thousandSeparator.currentValue;\n\t\t}\n\t\tif (decimalMarker) {\n\t\t\tthis._maskService.decimalMarker = decimalMarker.currentValue;\n\t\t}\n\t\tif (dropSpecialCharacters) {\n\t\t\tthis._maskService.dropSpecialCharacters = dropSpecialCharacters.currentValue;\n\t\t}\n\t\tif (hiddenInput) {\n\t\t\tthis._maskService.hiddenInput = hiddenInput.currentValue;\n\t\t}\n\t\tif (showMaskTyped) {\n\t\t\tthis._maskService.showMaskTyped = showMaskTyped.currentValue;\n\t\t}\n\t\tif (placeHolderCharacter) {\n\t\t\tthis._maskService.placeHolderCharacter = placeHolderCharacter.currentValue;\n\t\t}\n\t\tif (shownMaskExpression) {\n\t\t\tthis._maskService.shownMaskExpression = shownMaskExpression.currentValue;\n\t\t}\n\t\tif (showTemplate) {\n\t\t\tthis._maskService.showTemplate = showTemplate.currentValue;\n\t\t}\n\t\tif (clearIfNotMatch) {\n\t\t\tthis._maskService.clearIfNotMatch = clearIfNotMatch.currentValue;\n\t\t}\n\t\tif (validation) {\n\t\t\tthis._maskService.validation = validation.currentValue;\n\t\t}\n\t\tif (separatorLimit) {\n\t\t\tthis._maskService.separatorLimit = separatorLimit.currentValue;\n\t\t}\n\t\tif (allowNegativeNumbers) {\n\t\t\tthis._maskService.allowNegativeNumbers = allowNegativeNumbers.currentValue;\n\t\t\tif (this._maskService.allowNegativeNumbers) {\n\t\t\t\tthis._maskService.maskSpecialCharacters = this._maskService.maskSpecialCharacters.filter(\n\t\t\t\t\t(c: string) => c !== '-',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (leadZeroDateTime) {\n\t\t\tthis._maskService.leadZeroDateTime = leadZeroDateTime.currentValue;\n\t\t}\n\t\tif (triggerOnMaskChange) {\n\t\t\tthis._maskService.triggerOnMaskChange = triggerOnMaskChange.currentValue;\n\t\t}\n\t\tthis._applyMask();\n\t}\n\n\t// eslint-disable-next-line complexity\n\tpublic validate({ value }: FormControl): ValidationErrors | null {\n\t\tif (!this._maskService.validation || !this._maskValue) {\n\t\t\treturn null;\n\t\t}\n\t\tif (this._maskService.ipError) {\n\t\t\treturn this._createValidationError(value);\n\t\t}\n\t\tif (this._maskService.cpfCnpjError) {\n\t\t\treturn this._createValidationError(value);\n\t\t}\n\t\tif (this._maskValue.startsWith('separator')) {\n\t\t\treturn null;\n\t\t}\n\t\tif (withoutValidation.includes(this._maskValue)) {\n\t\t\treturn null;\n\t\t}\n\t\tif (this._maskService.clearIfNotMatch) {\n\t\t\treturn null;\n\t\t}\n\t\tif (timeMasks.includes(this._maskValue)) {\n\t\t\treturn this._validateTime(value);\n\t\t}\n\t\tif (value && value.toString().length >= 1) {\n\t\t\tlet counterOfOpt = 0;\n\t\t\tfor (const key in this._maskService.maskAvailablePatterns) {\n\t\t\t\tif (this._maskService.maskAvailablePatterns[key]!.optional) {\n\t\t\t\t\tif (this._maskValue.indexOf(key) !== this._maskValue.lastIndexOf(key)) {\n\t\t\t\t\t\tconst opt: string = this._maskValue\n\t\t\t\t\t\t\t.split('')\n\t\t\t\t\t\t\t.filter((i: string) => i === key)\n\t\t\t\t\t\t\t.join('');\n\t\t\t\t\t\tcounterOfOpt += opt.length;\n\t\t\t\t\t} else if (this._maskValue.indexOf(key) !== -1) {\n\t\t\t\t\t\tcounterOfOpt++;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis._maskValue.indexOf(key) !== -1 &&\n\t\t\t\t\t\tvalue.toString().length >= this._maskValue.indexOf(key)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tif (counterOfOpt === this._maskValue.length) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tthis._maskValue.indexOf('{') === 1 &&\n\t\t\t\tvalue.toString().length ===\n\t\t\t\t\tthis._maskValue.length + Number(this._maskValue.split('{')[1]!.split('}')[0]) - 4\n\t\t\t) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (this._maskValue.indexOf('*') === 1 || this._maskValue.indexOf('?') === 1) {\n\t\t\t\treturn null;\n\t\t\t} else if (\n\t\t\t\t(this._maskValue.indexOf('*') > 1 &&\n\t\t\t\t\tvalue.toString().length < this._maskValue.indexOf('*')) ||\n\t\t\t\t(this._maskValue.indexOf('?') > 1 &&\n\t\t\t\t\tvalue.toString().length < this._maskValue.indexOf('?')) ||\n\t\t\t\tthis._maskValue.indexOf('{') === 1\n\t\t\t) {\n\t\t\t\treturn this._createValidationError(value);\n\t\t\t}\n\t\t\tif (this._maskValue.indexOf('*') === -1 || this._maskValue.indexOf('?') === -1) {\n\t\t\t\tconst length: number = this._maskService.dropSpecialCharacters\n\t\t\t\t\t? this._maskValue.length -\n\t\t\t\t\t this._maskService.checkSpecialCharAmount(this._maskValue) -\n\t\t\t\t\t counterOfOpt\n\t\t\t\t\t: this._maskValue.length - counterOfOpt;\n\t\t\t\tif (value.toString().length < length) {\n\t\t\t\t\treturn this._createValidationError(value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (value) {\n\t\t\tthis.maskFilled.emit();\n\t\t\treturn null;\n\t\t}\n\t\treturn null;\n\t}\n\n\t@HostListener('paste')\n\tpublic onPaste() {\n\t\tthis._justPasted = true;\n\t}\n\n\t@HostListener('ngModelChange', ['$event'])\n\tpublic onModelChange(value: any): void {\n\t\t// on form reset we need to update the actualValue\n\t\tif ((value === '' || value === null || value === undefined) && this._maskService.actualValue) {\n\t\t\tthis._maskService.actualValue = this._maskService.getActualValue('');\n\t\t}\n\t}\n\n\t@HostListener('input', ['$event'])\n\tpublic onInput(e: CustomKeyboardEvent): void {\n\t\tconst el: HTMLInputElement = e.target as HTMLInputElement;\n\t\tthis._inputValue = el.value;\n\n\t\tthis._setMask();\n\n\t\tif (!this._maskValue) {\n\t\t\tthis.onChange(el.value);\n\t\t\treturn;\n\t\t}\n\t\tconst position: number =\n\t\t\tel.selectionStart === 1\n\t\t\t\t? (el.selectionStart as number) + this._maskService.prefix.length\n\t\t\t\t: (el.selectionStart as number);\n\t\tlet caretShift = 0;\n\t\tlet backspaceShift = false;\n\t\tthis._maskService.applyValueChanges(\n\t\t\tposition,\n\t\t\tthis._justPasted,\n\t\t\tthis._code === 'Backspace' || this._code === 'Delete',\n\t\t\t(shift: number, _backspaceShift: boolean) => {\n\t\t\t\tthis._justPasted = false;\n\t\t\t\tcaretShift = shift;\n\t\t\t\tbackspaceShift = _backspaceShift;\n\t\t\t},\n\t\t);\n\t\t// only set the selection if the element is active\n\t\tif (this._getActiveElement() !== el) {\n\t\t\treturn;\n\t\t}\n\t\tthis._position = this._position === 1 && this._inputValue.length === 1 ? null : this._position;\n\t\tlet positionToApply: number = this._position\n\t\t\t? this._inputValue.length + position + caretShift\n\t\t\t: position + (this._code === 'Backspace' && !backspaceShift ? 0 : caretShift);\n\t\tif (positionToApply > this._getActualInputLength()) {\n\t\t\tpositionToApply = this._getActualInputLength();\n\t\t}\n\t\tif (positionToApply < 0) {\n\t\t\tpositionToApply = 0;\n\t\t}\n\t\tel.setSelectionRange(positionToApply, positionToApply);\n\t\tthis._position = null;\n\t}\n\n\t@HostListener('blur')\n\tpublic onBlur(): void {\n\t\tif (this._maskValue) {\n\t\t\tthis._maskService.clearIfNotMatchFn();\n\t\t}\n\t\tthis.onTouch();\n\t}\n\n\t@HostListener('click', ['$event'])\n\tpublic onClick(e: MouseEvent | CustomKeyboardEvent): void {\n\t\tif (!this._maskValue) {\n\t\t\treturn;\n\t\t}\n\t\tconst el: HTMLInputElement = e.target as HTMLInputElement;\n\t\tconst posStart = 0;\n\t\tconst posEnd = 0;\n\t\tif (\n\t\t\tel !== null &&\n\t\t\tel.selectionStart !== null &&\n\t\t\tel.selectionStart === el.selectionEnd &&\n\t\t\tel.selectionStart > this._maskService.prefix.length &&\n\t\t\t// eslint-disable-next-line\n\t\t\t(e as any).keyCode !== 38\n\t\t) {\n\t\t\tif (this._maskService.showMaskTyped) {\n\t\t\t\t// We are showing the mask in the input\n\t\t\t\tthis._maskService.maskIsShown = this._maskService.showMaskInInput();\n\t\t\t\tif (\n\t\t\t\t\tel.setSelectionRange &&\n\t\t\t\t\tthis._maskService.prefix + this._maskService.maskIsShown === el.value\n\t\t\t\t) {\n\t\t\t\t\t// the input ONLY contains the mask, so position the cursor at the start\n\t\t\t\t\tel.focus();\n\t\t\t\t\tel.setSelectionRange(posStart, posEnd);\n\t\t\t\t} else {\n\t\t\t\t\t// the input contains some characters already\n\t\t\t\t\tif (el.selectionStart > this._maskService.actualValue.length) {\n\t\t\t\t\t\t// if the user clicked beyond our value's length, position the cursor at the end of our value\n\t\t\t\t\t\tel.setSelectionRange(\n\t\t\t\t\t\t\tthis._maskService.actualValue.length,\n\t\t\t\t\t\t\tthis._maskService.actualValue.length,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst nextValue: string | null =\n\t\t\t!el.value || el.value === this._maskService.prefix\n\t\t\t\t? this._maskService.prefix + this._maskService.maskIsShown\n\t\t\t\t: el.value;\n\t\t/** Fix of cursor position jumping to end in most browsers no matter where cursor is inserted onFocus */\n\t\tif (el.value !== nextValue) {\n\t\t\tel.value = nextValue;\n\t\t}\n\n\t\t/** fix of cursor position with prefix when mouse click occur */\n\t\tif (\n\t\t\t((el.selectionStart as number) || (el.selectionEnd as number)) <=\n\t\t\tthis._maskService.prefix.length\n\t\t) {\n\t\t\tel.selectionStart = this._maskService.prefix.length;\n\t\t\treturn;\n\t\t}\n\t\t/** select only inserted text */\n\t\tif ((el.selectionEnd as number) > this._getActualInputLength()) {\n\t\t\tel.selectionEnd = this._getActualInputLength();\n\t\t}\n\t}\n\n\t// eslint-disable-next-line complexity\n\t@HostListener('keydown', ['$event'])\n\tpublic onKeyDown(e: CustomKeyboardEvent): void {\n\t\tif (!this._maskValue) {\n\t\t\treturn;\n\t\t}\n\t\tthis._code = e.code ? e.code : e.key;\n\t\tconst el: HTMLInputElement = e.target as HTMLInputElement;\n\t\tthis._inputValue = el.value;\n\n\t\tthis._setMask();\n\n\t\tif (e.keyCode === 38) {\n\t\t\te.preventDefault();\n\t\t}\n\t\tif (e.keyCode === 37 || e.keyCode === 8 || e.keyCode === 46) {\n\t\t\tif (e.keyCode === 8 && el.value.length === 0) {\n\t\t\t\tel.selectionStart = el.selectionEnd;\n\t\t\t}\n\t\t\tif (e.keyCode === 8 && (el.selectionStart as number) !== 0) {\n\t\t\t\t// If specialChars is false, (shouldn't ever happen) then set to the defaults\n\t\t\t\tthis.specialCharacters = this.specialCharacters?.length\n\t\t\t\t\t? this.specialCharacters\n\t\t\t\t\t: this._config.specialCharacters;\n\t\t\t\tif (this.prefix.length > 1 && (el.selectionStart as number) <= this.prefix.length) {\n\t\t\t\t\tel.setSelectionRange(this.prefix.length, el.selectionEnd);\n\t\t\t\t} else {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis._inputValue.length !== (el.selectionStart as number) &&\n\t\t\t\t\t\t(el.selectionStart as number) !== 1\n\t\t\t\t\t) {\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\tthis.specialCharacters.includes(\n\t\t\t\t\t\t\t\tthis._inputValue[(el.selectionStart as number) - 1]!.toString(),\n\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t((this.prefix.length >= 1 && (el.selectionStart as number) > this.prefix.length) ||\n\t\t\t\t\t\t\t\tthis.prefix.length === 0)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tel.setSelectionRange((el.selectionStart as number) - 1, el.selectionEnd);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.checkSelectionOnDeletion(el);\n\t\t\tif (\n\t\t\t\tthis._maskService.prefix.length &&\n\t\t\t\t(el.selectionStart as number) <= this._maskService.prefix.length &&\n\t\t\t\t(el.selectionEnd as number) <= this._maskService.prefix.length\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tconst cursorStart: number | null = el.selectionStart;\n\t\t\tif (\n\t\t\t\te.keyCode === 8 &&\n\t\t\t\t!el.readOnly &&\n\t\t\t\tcursorStart === 0 &&\n\t\t\t\tel.selectionEnd === el.value.length &&\n\t\t\t\tel.value.length !== 0\n\t\t\t) {\n\t\t\t\tthis._position = this._maskService.prefix ? this._maskService.prefix.length : 0;\n\t\t\t\tthis._maskService.applyMask(\n\t\t\t\t\tthis._maskService.prefix,\n\t\t\t\t\tthis._maskService.maskExpression,\n\t\t\t\t\tthis._position,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\t!!this.suffix &&\n\t\t\tthis.suffix.length > 1 &&\n\t\t\tthis._inputValue.length - this.suffix.length < (el.selectionStart as number)\n\t\t) {\n\t\t\tel.setSelectionRange(this._inputValue.length - this.suffix.length, this._inputValue.length);\n\t\t} else if (\n\t\t\t(e.keyCode === 65 && e.ctrlKey) ||\n\t\t\t(e.keyCode === 65 && e.metaKey) // Cmd + A (Mac)\n\t\t) {\n\t\t\tel.setSelectionRange(0, this._getActualInputLength());\n\t\t\te.preventDefault();\n\t\t}\n\t\tthis._maskService.selStart = el.selectionStart;\n\t\tthis._maskService.selEnd = el.selectionEnd;\n\t}\n\n\t/** It writes the value in the input */\n\tpublic async writeValue(\n\t\tinputValue: string | number | { value: string | number; disable?: boolean },\n\t): Promise<void> {\n\t\tif (typeof inputValue === 'object' && inputValue !== null && 'value' in inputValue) {\n\t\t\tif ('disable' in inputValue) {\n\t\t\t\tthis.setDisabledState(Boolean(inputValue.disable));\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = inputValue.value;\n\t\t}\n\n\t\tif (typeof inputValue === 'number' || this._maskValue.startsWith('separator')) {\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = this._maskService.numberToString(inputValue);\n\t\t\tif (!Array.isArray(this.decimalMarker)) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue =\n\t\t\t\t\tthis.decimalMarker !== '.' ? inputValue.replace('.', this.decimalMarker) : inputValue;\n\t\t\t}\n\t\t\tthis._maskService.isNumberValue = true;\n\t\t}\n\n\t\tif (typeof inputValue !== 'string') {\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = '';\n\t\t}\n\n\t\tthis._inputValue = inputValue;\n\t\tthis._setMask();\n\n\t\tif (\n\t\t\t(inputValue && this._maskService.maskExpression) ||\n\t\t\t(this._maskService.maskExpression &&\n\t\t\t\t(this._maskService.prefix || this._maskService.showMaskTyped))\n\t\t) {\n\t\t\t// Let the service we know we are writing value so that triggering onChange function wont happen during applyMask\n\t\t\tthis._maskService.writingValue = true;\n\t\t\tthis._maskService.formElementProperty = [\n\t\t\t\t'value',\n\t\t\t\tthis._maskService.applyMask(inputValue, this._maskService.maskExpression),\n\t\t\t];\n\t\t\t// Let the service know we've finished writing value\n\t\t\tthis._maskService.writingValue = false;\n\t\t} else {\n\t\t\tthis._maskService.formElementProperty = ['value', inputValue];\n\t\t}\n\t\tthis._inputValue = inputValue;\n\t}\n\n\tpublic registerOnChange(fn: any): void {\n\t\tthis.onChange = fn;\n\t\tthis._maskService.onChange = this.onChange;\n\t}\n\n\tpublic registerOnTouched(fn: any): void {\n\t\tthis.onTouch = fn;\n\t}\n\n\tprivate _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n\t\tconst shadowRootEl = document?.activeElement?.shadowRoot;\n\t\tif (!shadowRootEl?.activeElement) {\n\t\t\treturn document.activeElement;\n\t\t} else {\n\t\t\treturn this._getActiveElement(shadowRootEl);\n\t\t}\n\t}\n\n\tpublic checkSelectionOnDeletion(el: HTMLInputElement): void {\n\t\tel.selectionStart = Math.min(\n\t\t\tMath.max(this.prefix.length, el.selectionStart as number),\n\t\t\tthis._inputValue.length - this.suffix.length,\n\t\t);\n\t\tel.selectionEnd = Math.min(\n\t\t\tMath.max(this.prefix.length, el.selectionEnd as number),\n\t\t\tthis._inputValue.length - this.suffix.length,\n\t\t);\n\t}\n\n\t/** It disables the input element */\n\tpublic setDisabledState(isDisabled: boolean): void {\n\t\tthis._maskService.formElementProperty = ['disabled', isDisabled];\n\t}\n\n\tprivate _repeatPatternSymbols(maskExp: string): string {\n\t\treturn (\n\t\t\t(maskExp.match(/{[0-9]+}/) &&\n\t\t\t\tmaskExp.split('').reduce((accum: string, currval: string, index: number): string => {\n\t\t\t\t\tthis._start = currval === '{' ? index : this._start;\n\n\t\t\t\t\tif (currval !== '}') {\n\t\t\t\t\t\treturn this._maskService._findSpecialChar(currval) ? accum + currval : accum;\n\t\t\t\t\t}\n\t\t\t\t\tthis._end = index;\n\t\t\t\t\tconst repeatNumber: number = Number(maskExp.slice(this._start + 1, this._end));\n\t\t\t\t\tconst replaceWith: string = new Array(repeatNumber + 1).join(maskExp[this._start - 1]);\n\t\t\t\t\treturn accum + replaceWith;\n\t\t\t\t}, '')) ||\n\t\t\tmaskExp\n\t\t);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tprivate _applyMask(): any {\n\t\tthis._maskService.maskExpression = this._repeatPatternSymbols(this._maskValue || '');\n\t\tthis._maskService.formElementProperty = [\n\t\t\t'value',\n\t\t\tthis._maskService.applyMask(this._inputValue, this._maskService.maskExpression),\n\t\t];\n\t}\n\n\tprivate _validateTime(value: string): ValidationErrors | null {\n\t\tconst rowMaskLen: number = this._maskValue.split('').filter((s: string) => s !== ':').length;\n\t\tif (!value) {\n\t\t\treturn null; // Don't validate empty values to allow for optional form control\n\t\t}\n\n\t\tif (\n\t\t\t(+value[value.length - 1]! === 0 && value.length < rowMaskLen) ||\n\t\t\tvalue.length <= rowMaskLen - 2\n\t\t) {\n\t\t\treturn this._createValidationError(value);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _getActualInputLength() {\n\t\treturn (\n\t\t\tthis._maskService.actualValue.length ||\n\t\t\tthis._maskService.actualValue.length + this._maskService.prefix.length\n\t\t);\n\t}\n\n\tprivate _createValidationError(actualValue: string): ValidationErrors {\n\t\treturn {\n\t\t\tmask: {\n\t\t\t\trequiredMask: this._maskValue,\n\t\t\t\tactualValue,\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate _setMask() {\n\t\tif (this._maskExpressionArray.length > 0) {\n\t\t\tthis._maskExpressionArray.some((mask): boolean | void => {\n\t\t\t\tconst test =\n\t\t\t\t\tthis._maskService.removeMask(this._inputValue)?.length <=\n\t\t\t\t\tthis._maskService.removeMask(mask)?.length;\n\t\t\t\tif (this._inputValue && test) {\n\t\t\t\t\tthis._maskValue = mask;\n\t\t\t\t\tthis.maskExpression = mask;\n\t\t\t\t\tthis._maskService.maskExpression = mask;\n\t\t\t\t\treturn test;\n\t\t\t\t} else {\n\t\t\t\t\tthis._maskValue = this._maskExpressionArray[this._maskExpressionArray.length - 1]!;\n\t\t\t\t\tthis.maskExpression = this._maskExpressionArray[this._maskExpressionArray.length - 1]!;\n\t\t\t\t\tthis._maskService.maskExpression =\n\t\t\t\t\t\tthis._maskExpressionArray[this._maskExpressionArray.length - 1]!;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { MaskApplierService } from './mask-applier.service';\nimport { IConfig } from './config';\n\n@Pipe({\n\tname: 'mask',\n\tpure: true,\n})\nexport class MaskPipe implements PipeTransform {\n\tpublic constructor(private _maskService: MaskApplierService) {}\n\n\tpublic transform(\n\t\tvalue: string | number,\n\t\tmask: string | [string, IConfig['patterns']],\n\t\tthousandSeparator: string | null = null,\n\t): string {\n\t\tif (!value && typeof value !== 'number') {\n\t\t\treturn '';\n\t\t}\n\t\tif (thousandSeparator) {\n\t\t\tthis._maskService.thousandSeparator = thousandSeparator;\n\t\t}\n\t\tif (typeof mask === 'string') {\n\t\t\treturn this._maskService.applyMask(`${value}`, mask);\n\t\t}\n\t\treturn this._maskService.applyMaskWithPattern(`${value}`, mask);\n\t}\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { config, INITIAL_CONFIG, initialConfig, NEW_CONFIG, optionsConfig } from './config';\nimport { MaskApplierService } from './mask-applier.service';\nimport { MaskDirective } from './mask.directive';\nimport { MaskPipe } from './mask.pipe';\n/**\n * @internal\n */\nexport function _configFactory(\n\tinitConfig: optionsConfig,\n\tconfigValue: optionsConfig | (() => optionsConfig),\n): optionsConfig {\n\treturn configValue instanceof Function\n\t\t? { ...initConfig, ...configValue() }\n\t\t: { ...initConfig, ...configValue };\n}\n@NgModule({\n\texports: [MaskDirective, MaskPipe],\n\tdeclarations: [MaskDirective, MaskPipe],\n})\nexport class NgxMaskModule {\n\tpublic static forRoot(\n\t\tconfigValue?: optionsConfig | (() => optionsConfig),\n\t): ModuleWithProviders<NgxMaskModule> {\n\t\treturn {\n\t\t\tngModule: NgxMaskModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: NEW_CONFIG,\n\t\t\t\t\tuseValue: configValue,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: INITIAL_CONFIG,\n\t\t\t\t\tuseValue: initialConfig,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: config,\n\t\t\t\t\tuseFactory: _configFactory,\n\t\t\t\t\tdeps: [INITIAL_CONFIG, NEW_CONFIG],\n\t\t\t\t},\n\t\t\t\tMaskApplierService,\n\t\t\t],\n\t\t};\n\t}\n\n\tpublic static forChild(): ModuleWithProviders<NgxMaskModule> {\n\t\treturn {\n\t\t\tngModule: NgxMaskModule,\n\t\t};\n\t}\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\ndeclare var global: any;\n\nconst commonjsGlobal =\n\ttypeof globalThis !== 'undefined'\n\t\t? globalThis\n\t\t: typeof window !== 'undefined'\n\t\t? window\n\t\t: typeof global !== 'undefined'\n\t\t? global\n\t\t: typeof self !== 'undefined'\n\t\t? self\n\t\t: {};\n\n(function () {\n\tif (!commonjsGlobal.KeyboardEvent) {\n\t\tcommonjsGlobal.KeyboardEvent = function (_eventType: any, _init: any) {};\n\t}\n})();\n\nexport type CustomKeyboardEvent = KeyboardEvent;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.MaskService","i1.MaskApplierService"],"mappings":"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"}
1
+ {"version":3,"file":"ngx-mask.mjs","sources":["../../../projects/ngx-mask-lib/src/lib/config.ts","../../../projects/ngx-mask-lib/src/lib/mask-applier.service.ts","../../../projects/ngx-mask-lib/src/lib/mask.service.ts","../../../projects/ngx-mask-lib/src/lib/mask.directive.ts","../../../projects/ngx-mask-lib/src/lib/mask.pipe.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.module.ts","../../../projects/ngx-mask-lib/src/lib/custom-keyboard-event.ts","../../../projects/ngx-mask-lib/src/ngx-mask.ts"],"sourcesContent":["import { InjectionToken, EventEmitter } from '@angular/core';\n\nexport interface IConfig {\n\tsuffix: string;\n\tprefix: string;\n\tthousandSeparator: string;\n\tdecimalMarker: '.' | ',' | ['.', ','];\n\tclearIfNotMatch: boolean;\n\tshowTemplate: boolean;\n\tshowMaskTyped: boolean;\n\tplaceHolderCharacter: string;\n\tshownMaskExpression: string;\n\tdropSpecialCharacters: boolean | string[];\n\tspecialCharacters: string[];\n\thiddenInput: boolean | undefined;\n\tvalidation: boolean;\n\tseparatorLimit: string;\n\tallowNegativeNumbers: boolean;\n\tleadZeroDateTime: boolean;\n\ttriggerOnMaskChange: boolean;\n\tmaskFilled: EventEmitter<void>;\n\tpatterns: {\n\t\t[character: string]: {\n\t\t\tpattern: RegExp;\n\t\t\toptional?: boolean;\n\t\t\tsymbol?: string;\n\t\t};\n\t};\n}\n\nexport type optionsConfig = Partial<IConfig>;\nexport const config: InjectionToken<IConfig> = new InjectionToken('ngx-mask config');\nexport const NEW_CONFIG: InjectionToken<IConfig> = new InjectionToken('new ngx-mask config');\nexport const INITIAL_CONFIG: InjectionToken<IConfig> = new InjectionToken(\n\t'initial ngx-mask config',\n);\n\nexport const initialConfig: IConfig = {\n\tsuffix: '',\n\tprefix: '',\n\tthousandSeparator: ' ',\n\tdecimalMarker: ['.', ','],\n\tclearIfNotMatch: false,\n\tshowTemplate: false,\n\tshowMaskTyped: false,\n\tplaceHolderCharacter: '_',\n\tdropSpecialCharacters: true,\n\thiddenInput: undefined,\n\tshownMaskExpression: '',\n\tseparatorLimit: '',\n\tallowNegativeNumbers: false,\n\tvalidation: true,\n\t// eslint-disable-next-line @typescript-eslint/quotes\n\tspecialCharacters: ['-', '/', '(', ')', '.', ':', ' ', '+', ',', '@', '[', ']', '\"', \"'\"],\n\tleadZeroDateTime: false,\n\ttriggerOnMaskChange: false,\n\tmaskFilled: new EventEmitter<void>(),\n\tpatterns: {\n\t\t'0': {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\t'9': {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t\toptional: true,\n\t\t},\n\t\tX: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t\tsymbol: '*',\n\t\t},\n\t\tA: {\n\t\t\tpattern: new RegExp('[a-zA-Z0-9]'),\n\t\t},\n\t\tS: {\n\t\t\tpattern: new RegExp('[a-zA-Z]'),\n\t\t},\n\t\tU: {\n\t\t\tpattern: new RegExp('[A-Z]'),\n\t\t},\n\t\tL: {\n\t\t\tpattern: new RegExp('[a-z]'),\n\t\t},\n\t\td: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\tm: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\tM: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\tH: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\th: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t\ts: {\n\t\t\tpattern: new RegExp('\\\\d'),\n\t\t},\n\t},\n};\n\nexport const timeMasks: string[] = ['Hh:m0:s0', 'Hh:m0', 'm0:s0'];\n\nexport const withoutValidation: string[] = [\n\t'percent',\n\t'Hh',\n\t's0',\n\t'm0',\n\t'separator',\n\t'd0/M0/0000',\n\t'd0/M0',\n\t'd0',\n\t'M0',\n];\n","import { Inject, Injectable } from '@angular/core';\nimport { config, IConfig } from './config';\n\n@Injectable()\nexport class MaskApplierService {\n\tpublic dropSpecialCharacters: IConfig['dropSpecialCharacters'];\n\n\tpublic hiddenInput: IConfig['hiddenInput'];\n\n\tpublic showTemplate!: IConfig['showTemplate'];\n\n\tpublic clearIfNotMatch!: IConfig['clearIfNotMatch'];\n\n\tpublic maskExpression: string = '';\n\n\tpublic actualValue: string = '';\n\n\tpublic shownMaskExpression: string = '';\n\n\tpublic maskSpecialCharacters!: IConfig['specialCharacters'];\n\n\tpublic maskAvailablePatterns!: IConfig['patterns'];\n\n\tpublic prefix!: IConfig['prefix'];\n\n\tpublic suffix!: IConfig['suffix'];\n\n\tpublic thousandSeparator!: IConfig['thousandSeparator'];\n\n\tpublic decimalMarker!: IConfig['decimalMarker'];\n\n\tpublic customPattern!: IConfig['patterns'];\n\n\tpublic ipError?: boolean;\n\n\tpublic cpfCnpjError?: boolean;\n\n\tpublic showMaskTyped!: IConfig['showMaskTyped'];\n\n\tpublic placeHolderCharacter!: IConfig['placeHolderCharacter'];\n\n\tpublic validation: IConfig['validation'];\n\n\tpublic separatorLimit: IConfig['separatorLimit'];\n\n\tpublic allowNegativeNumbers: IConfig['allowNegativeNumbers'];\n\n\tpublic leadZeroDateTime: IConfig['leadZeroDateTime'];\n\n\tprivate _shift!: Set<number>;\n\n\tpublic constructor(@Inject(config) protected _config: IConfig) {\n\t\tthis._shift = new Set();\n\t\tthis.clearIfNotMatch = this._config.clearIfNotMatch;\n\t\tthis.dropSpecialCharacters = this._config.dropSpecialCharacters;\n\t\tthis.maskSpecialCharacters = this._config.specialCharacters;\n\t\tthis.maskAvailablePatterns = this._config.patterns;\n\t\tthis.prefix = this._config.prefix;\n\t\tthis.suffix = this._config.suffix;\n\t\tthis.thousandSeparator = this._config.thousandSeparator;\n\t\tthis.decimalMarker = this._config.decimalMarker;\n\t\tthis.hiddenInput = this._config.hiddenInput;\n\t\tthis.showMaskTyped = this._config.showMaskTyped;\n\t\tthis.placeHolderCharacter = this._config.placeHolderCharacter;\n\t\tthis.validation = this._config.validation;\n\t\tthis.separatorLimit = this._config.separatorLimit;\n\t\tthis.allowNegativeNumbers = this._config.allowNegativeNumbers;\n\t\tthis.leadZeroDateTime = this._config.leadZeroDateTime;\n\t}\n\n\tpublic applyMaskWithPattern(\n\t\tinputValue: string,\n\t\tmaskAndPattern: [string, IConfig['patterns']],\n\t): string {\n\t\tconst [mask, customPattern] = maskAndPattern;\n\t\tthis.customPattern = customPattern;\n\t\treturn this.applyMask(inputValue, mask);\n\t}\n\n\tpublic applyMask(\n\t\tinputValue: string | object | boolean | null | undefined,\n\t\tmaskExpression: string,\n\t\tposition: number = 0,\n\t\tjustPasted: boolean = false,\n\t\tbackspaced: boolean = false,\n\t\tcb: Function = () => {},\n\t): string {\n\t\tif (!maskExpression || typeof inputValue !== 'string') {\n\t\t\treturn '';\n\t\t}\n\t\tlet cursor = 0;\n\t\tlet result = '';\n\t\tlet multi = false;\n\t\tlet backspaceShift = false;\n\t\tlet shift = 1;\n\t\tlet stepBack = false;\n\t\tif (inputValue.slice(0, this.prefix.length) === this.prefix) {\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = inputValue.slice(this.prefix.length, inputValue.length);\n\t\t}\n\t\tif (!!this.suffix && inputValue?.length > 0) {\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = this.checkAndRemoveSuffix(inputValue);\n\t\t}\n\t\tconst inputArray: string[] = inputValue.toString().split('');\n\t\tif (maskExpression === 'IP') {\n\t\t\tconst valuesIP = inputValue.split('.');\n\t\t\tthis.ipError = this._validIP(valuesIP);\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tmaskExpression = '099.099.099.099';\n\t\t}\n\t\tconst arr: string[] = [];\n\t\tfor (let i = 0; i < inputValue.length; i++) {\n\t\t\tif (inputValue[i]?.match('\\\\d')) {\n\t\t\t\tarr.push(inputValue[i]!);\n\t\t\t}\n\t\t}\n\t\tif (maskExpression === 'CPF_CNPJ') {\n\t\t\tthis.cpfCnpjError = arr.length !== 11 && arr.length !== 14;\n\t\t\tif (arr.length > 11) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tmaskExpression = '00.000.000/0000-00';\n\t\t\t} else {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tmaskExpression = '000.000.000-00';\n\t\t\t}\n\t\t}\n\t\tif (maskExpression.startsWith('percent')) {\n\t\t\tif (\n\t\t\t\tinputValue.match('[a-z]|[A-Z]') ||\n\t\t\t\tinputValue.match(/[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,\\/.]/)\n\t\t\t) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = this._stripToDecimal(inputValue);\n\t\t\t\tconst precision: number = this.getPrecision(maskExpression);\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tinputValue.indexOf('.') > 0 &&\n\t\t\t\t!this.percentage(inputValue.substring(0, inputValue.indexOf('.')))\n\t\t\t) {\n\t\t\t\tconst base: string = inputValue.substring(0, inputValue.indexOf('.') - 1);\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = `${base}${inputValue.substring(inputValue.indexOf('.'), inputValue.length)}`;\n\t\t\t}\n\t\t\tif (this.percentage(inputValue)) {\n\t\t\t\tresult = inputValue;\n\t\t\t} else {\n\t\t\t\tresult = inputValue.substring(0, inputValue.length - 1);\n\t\t\t}\n\t\t} else if (maskExpression.startsWith('separator')) {\n\t\t\tif (\n\t\t\t\tinputValue.match('[wа-яА-Я]') ||\n\t\t\t\tinputValue.match('[ЁёА-я]') ||\n\t\t\t\tinputValue.match('[a-z]|[A-Z]') ||\n\t\t\t\tinputValue.match(/[-@#!$%\\\\^&*()_£¬'+|~=`{}\\[\\]:\";<>.?\\/]/) ||\n\t\t\t\tinputValue.match('[^A-Za-z0-9,]')\n\t\t\t) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = this._stripToDecimal(inputValue);\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue =\n\t\t\t\tinputValue.length > 1 &&\n\t\t\t\tinputValue[0] === '0' &&\n\t\t\t\tinputValue[1] !== this.thousandSeparator &&\n\t\t\t\t!this._compareOrIncludes(inputValue[1], this.decimalMarker, this.thousandSeparator) &&\n\t\t\t\t!backspaced\n\t\t\t\t\t? inputValue.slice(0, inputValue.length - 1)\n\t\t\t\t\t: inputValue;\n\n\t\t\tif (backspaced) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = this._compareOrIncludes(\n\t\t\t\t\tinputValue[inputValue.length - 1],\n\t\t\t\t\tthis.decimalMarker,\n\t\t\t\t\tthis.thousandSeparator,\n\t\t\t\t)\n\t\t\t\t\t? inputValue.slice(0, inputValue.length - 1)\n\t\t\t\t\t: inputValue;\n\t\t\t}\n\t\t\t// TODO: we had different rexexps here for the different cases... but tests dont seam to bother - check this\n\t\t\t// separator: no COMMA, dot-sep: no SPACE, COMMA OK, comma-sep: no SPACE, COMMA OK\n\n\t\t\tconst thousandSeparatorCharEscaped: string = this._charToRegExpExpression(\n\t\t\t\tthis.thousandSeparator,\n\t\t\t);\n\t\t\tlet invalidChars: string = '@#!$%^&*()_+|~=`{}\\\\[\\\\]:\\\\s,\\\\.\";<>?\\\\/'.replace(\n\t\t\t\tthousandSeparatorCharEscaped,\n\t\t\t\t'',\n\t\t\t);\n\t\t\t//.replace(decimalMarkerEscaped, '');\n\t\t\tif (Array.isArray(this.decimalMarker)) {\n\t\t\t\tfor (const marker of this.decimalMarker) {\n\t\t\t\t\tinvalidChars = invalidChars.replace(this._charToRegExpExpression(marker), '');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinvalidChars = invalidChars.replace(this._charToRegExpExpression(this.decimalMarker), '');\n\t\t\t}\n\n\t\t\tconst invalidCharRegexp: RegExp = new RegExp('[' + invalidChars + ']');\n\n\t\t\tif (\n\t\t\t\tinputValue.match(invalidCharRegexp) ||\n\t\t\t\t(inputValue.length === 1 &&\n\t\t\t\t\tthis._compareOrIncludes(inputValue, this.decimalMarker, this.thousandSeparator))\n\t\t\t) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = inputValue.substring(0, inputValue.length - 1);\n\t\t\t}\n\n\t\t\tconst precision: number = this.getPrecision(maskExpression);\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n\t\t\tconst strForSep: string = inputValue.replace(\n\t\t\t\tnew RegExp(thousandSeparatorCharEscaped, 'g'),\n\t\t\t\t'',\n\t\t\t);\n\t\t\tresult = this._formatWithSeparators(\n\t\t\t\tstrForSep,\n\t\t\t\tthis.thousandSeparator,\n\t\t\t\tthis.decimalMarker,\n\t\t\t\tprecision,\n\t\t\t);\n\t\t\tconst commaShift: number = result.indexOf(',') - inputValue.indexOf(',');\n\t\t\tconst shiftStep: number = result.length - inputValue.length;\n\n\t\t\tif (shiftStep > 0 && result[position] !== ',') {\n\t\t\t\tbackspaceShift = true;\n\t\t\t\tlet _shift = 0;\n\t\t\t\tdo {\n\t\t\t\t\tthis._shift.add(position + _shift);\n\t\t\t\t\t_shift++;\n\t\t\t\t} while (_shift < shiftStep);\n\t\t\t} else if (\n\t\t\t\t(commaShift !== 0 && position > 0 && !(result.indexOf(',') >= position && position > 3)) ||\n\t\t\t\t(!(result.indexOf('.') >= position && position > 3) && shiftStep <= 0)\n\t\t\t) {\n\t\t\t\tthis._shift.clear();\n\t\t\t\tbackspaceShift = true;\n\t\t\t\tshift = shiftStep;\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tposition += shiftStep;\n\t\t\t\tthis._shift.add(position);\n\t\t\t} else {\n\t\t\t\tthis._shift.clear();\n\t\t\t}\n\t\t} else {\n\t\t\tfor (\n\t\t\t\t// eslint-disable-next-line\n\t\t\t\tlet i: number = 0, inputSymbol: string = inputArray[0]!;\n\t\t\t\ti < inputArray.length;\n\t\t\t\ti++, inputSymbol = inputArray[i]!\n\t\t\t) {\n\t\t\t\tif (cursor === maskExpression.length) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tthis._checkSymbolMask(inputSymbol, maskExpression[cursor]!) &&\n\t\t\t\t\tmaskExpression[cursor + 1] === '?'\n\t\t\t\t) {\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tcursor += 2;\n\t\t\t\t} else if (\n\t\t\t\t\tmaskExpression[cursor + 1] === '*' &&\n\t\t\t\t\tmulti &&\n\t\t\t\t\tthis._checkSymbolMask(inputSymbol, maskExpression[cursor + 2]!)\n\t\t\t\t) {\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tcursor += 3;\n\t\t\t\t\tmulti = false;\n\t\t\t\t} else if (\n\t\t\t\t\tthis._checkSymbolMask(inputSymbol, maskExpression[cursor]!) &&\n\t\t\t\t\tmaskExpression[cursor + 1] === '*'\n\t\t\t\t) {\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tmulti = true;\n\t\t\t\t} else if (\n\t\t\t\t\tmaskExpression[cursor + 1] === '?' &&\n\t\t\t\t\tthis._checkSymbolMask(inputSymbol, maskExpression[cursor + 2]!)\n\t\t\t\t) {\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tcursor += 3;\n\t\t\t\t} else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor]!)) {\n\t\t\t\t\tif (maskExpression[cursor] === 'H') {\n\t\t\t\t\t\tif (Number(inputSymbol) > 2) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tif (this.leadZeroDateTime) {\n\t\t\t\t\t\t\t\tresult += '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (maskExpression[cursor] === 'h') {\n\t\t\t\t\t\tif (result === '2' && Number(inputSymbol) > 3) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (maskExpression[cursor] === 'm') {\n\t\t\t\t\t\tif (Number(inputSymbol) > 5) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tif (this.leadZeroDateTime) {\n\t\t\t\t\t\t\t\tresult += '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (maskExpression[cursor] === 's') {\n\t\t\t\t\t\tif (Number(inputSymbol) > 5) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tif (this.leadZeroDateTime) {\n\t\t\t\t\t\t\t\tresult += '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tconst daysCount = 31;\n\t\t\t\t\tif (maskExpression[cursor] === 'd') {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(Number(inputSymbol) > 3 && this.leadZeroDateTime) ||\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor, cursor + 2)) > daysCount ||\n\t\t\t\t\t\t\tinputValue[cursor + 1] === '/'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tif (this.leadZeroDateTime) {\n\t\t\t\t\t\t\t\tresult += '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (maskExpression[cursor] === 'M') {\n\t\t\t\t\t\tconst monthsCount = 12;\n\t\t\t\t\t\t// mask without day\n\t\t\t\t\t\tconst withoutDays: boolean =\n\t\t\t\t\t\t\tcursor === 0 &&\n\t\t\t\t\t\t\t(Number(inputSymbol) > 2 ||\n\t\t\t\t\t\t\t\tNumber(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n\t\t\t\t\t\t\t\tinputValue[cursor + 1] === '/');\n\t\t\t\t\t\t// day<10 && month<12 for input\n\t\t\t\t\t\tconst day1monthInput: boolean =\n\t\t\t\t\t\t\tinputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n\t\t\t\t\t\t\t((inputValue[cursor - 2] === '/' &&\n\t\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount &&\n\t\t\t\t\t\t\t\tinputValue[cursor] !== '/') ||\n\t\t\t\t\t\t\t\tinputValue[cursor] === '/' ||\n\t\t\t\t\t\t\t\t(inputValue[cursor - 3] === '/' &&\n\t\t\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 2, cursor)) > monthsCount &&\n\t\t\t\t\t\t\t\t\tinputValue[cursor - 1] !== '/') ||\n\t\t\t\t\t\t\t\tinputValue[cursor - 1] === '/');\n\t\t\t\t\t\t// 10<day<31 && month<12 for input\n\t\t\t\t\t\tconst day2monthInput: boolean =\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n\t\t\t\t\t\t\t!inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n\t\t\t\t\t\t\tinputValue[cursor - 1] === '/' &&\n\t\t\t\t\t\t\t(Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n\t\t\t\t\t\t\t\tinputValue[cursor + 1] === '/');\n\t\t\t\t\t\t// day<10 && month<12 for paste whole data\n\t\t\t\t\t\tconst day1monthPaste: boolean =\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 3, cursor - 1)) > daysCount &&\n\t\t\t\t\t\t\t!inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n\t\t\t\t\t\t\t!inputValue.slice(cursor - 2, cursor).includes('/') &&\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 2, cursor)) > monthsCount;\n\t\t\t\t\t\t// 10<day<31 && month<12 for paste whole data\n\t\t\t\t\t\tconst day2monthPaste: boolean =\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n\t\t\t\t\t\t\t!inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n\t\t\t\t\t\t\tinputValue[cursor - 1] !== '/' &&\n\t\t\t\t\t\t\tNumber(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t(Number(inputSymbol) > 1 && this.leadZeroDateTime) ||\n\t\t\t\t\t\t\twithoutDays ||\n\t\t\t\t\t\t\tday1monthInput ||\n\t\t\t\t\t\t\tday2monthInput ||\n\t\t\t\t\t\t\tday1monthPaste ||\n\t\t\t\t\t\t\tday2monthPaste\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcursor += 1;\n\t\t\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\t\t\ti--;\n\t\t\t\t\t\t\tif (this.leadZeroDateTime) {\n\t\t\t\t\t\t\t\tresult += '0';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tcursor++;\n\t\t\t\t} else if (inputSymbol === ' ' && maskExpression[cursor] === ' ') {\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t\tcursor++;\n\t\t\t\t} else if (this.maskSpecialCharacters.indexOf(maskExpression[cursor]!) !== -1) {\n\t\t\t\t\tresult += maskExpression[cursor];\n\t\t\t\t\tcursor++;\n\t\t\t\t\tthis._shiftStep(maskExpression, cursor, inputArray.length);\n\t\t\t\t\ti--;\n\t\t\t\t} else if (\n\t\t\t\t\tthis.maskSpecialCharacters.indexOf(inputSymbol) > -1 &&\n\t\t\t\t\tthis.maskAvailablePatterns[maskExpression[cursor]!] &&\n\t\t\t\t\tthis.maskAvailablePatterns[maskExpression[cursor]!]?.optional\n\t\t\t\t) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t!!inputArray[cursor] &&\n\t\t\t\t\t\tmaskExpression !== '099.099.099.099' &&\n\t\t\t\t\t\tmaskExpression !== '000.000.000-00' &&\n\t\t\t\t\t\tmaskExpression !== '00.000.000/0000-00' &&\n\t\t\t\t\t\t!maskExpression.match(/^9+\\.0+$/)\n\t\t\t\t\t) {\n\t\t\t\t\t\tresult += inputArray[cursor];\n\t\t\t\t\t}\n\t\t\t\t\tcursor++;\n\t\t\t\t\ti--;\n\t\t\t\t} else if (\n\t\t\t\t\tthis.maskExpression[cursor + 1] === '*' &&\n\t\t\t\t\tthis._findSpecialChar(this.maskExpression[cursor + 2]!) &&\n\t\t\t\t\tthis._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n\t\t\t\t\tmulti\n\t\t\t\t) {\n\t\t\t\t\tcursor += 3;\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t} else if (\n\t\t\t\t\tthis.maskExpression[cursor + 1] === '?' &&\n\t\t\t\t\tthis._findSpecialChar(this.maskExpression[cursor + 2]!) &&\n\t\t\t\t\tthis._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n\t\t\t\t\tmulti\n\t\t\t\t) {\n\t\t\t\t\tcursor += 3;\n\t\t\t\t\tresult += inputSymbol;\n\t\t\t\t} else if (\n\t\t\t\t\tthis.showMaskTyped &&\n\t\t\t\t\tthis.maskSpecialCharacters.indexOf(inputSymbol) < 0 &&\n\t\t\t\t\tinputSymbol !== this.placeHolderCharacter\n\t\t\t\t) {\n\t\t\t\t\tstepBack = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\tresult.length + 1 === maskExpression.length &&\n\t\t\tthis.maskSpecialCharacters.indexOf(maskExpression[maskExpression.length - 1]!) !== -1\n\t\t) {\n\t\t\tresult += maskExpression[maskExpression.length - 1];\n\t\t}\n\n\t\tlet newPosition: number = position + 1;\n\n\t\twhile (this._shift.has(newPosition)) {\n\t\t\tshift++;\n\t\t\tnewPosition++;\n\t\t}\n\n\t\tlet actualShift: number =\n\t\t\tjustPasted && !maskExpression.startsWith('separator')\n\t\t\t\t? cursor\n\t\t\t\t: this._shift.has(position)\n\t\t\t\t? shift\n\t\t\t\t: 0;\n\t\tif (stepBack) {\n\t\t\tactualShift--;\n\t\t}\n\n\t\tcb(actualShift, backspaceShift);\n\t\tif (shift < 0) {\n\t\t\tthis._shift.clear();\n\t\t}\n\t\tlet onlySpecial = false;\n\t\tif (backspaced) {\n\t\t\tonlySpecial = inputArray.every((char) => this.maskSpecialCharacters.includes(char));\n\t\t}\n\t\tlet res = `${this.prefix}${onlySpecial ? '' : result}${this.suffix}`;\n\t\tif (result.length === 0) {\n\t\t\tres = `${this.prefix}${result}`;\n\t\t}\n\t\treturn res;\n\t}\n\n\tpublic _findSpecialChar(inputSymbol: string): undefined | string {\n\t\treturn this.maskSpecialCharacters.find((val: string) => val === inputSymbol);\n\t}\n\n\tprotected _checkSymbolMask(inputSymbol: string, maskSymbol: string): boolean {\n\t\tthis.maskAvailablePatterns = this.customPattern\n\t\t\t? this.customPattern\n\t\t\t: this.maskAvailablePatterns;\n\t\treturn (\n\t\t\tthis.maskAvailablePatterns[maskSymbol]! &&\n\t\t\tthis.maskAvailablePatterns[maskSymbol]!.pattern &&\n\t\t\tthis.maskAvailablePatterns[maskSymbol]!.pattern.test(inputSymbol)\n\t\t);\n\t}\n\n\tprivate _formatWithSeparators = (\n\t\tstr: string,\n\t\tthousandSeparatorChar: string,\n\t\tdecimalChars: string | string[],\n\t\tprecision: number,\n\t) => {\n\t\tlet x: string[] = [];\n\t\tlet decimalChar: string = '';\n\t\tif (Array.isArray(decimalChars)) {\n\t\t\tconst regExp = new RegExp(\n\t\t\t\tdecimalChars.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|'),\n\t\t\t);\n\t\t\tx = str.split(regExp);\n\t\t\tdecimalChar = str.match(regExp)?.[0] ?? '';\n\t\t} else {\n\t\t\tx = str.split(decimalChars);\n\t\t\tdecimalChar = decimalChars;\n\t\t}\n\t\tconst decimals: string = x.length > 1 ? `${decimalChar}${x[1]}` : '';\n\t\tlet res: string = x[0]!;\n\t\tconst separatorLimit: string = this.separatorLimit.replace(/\\s/g, '');\n\t\tif (separatorLimit && +separatorLimit) {\n\t\t\tif (res[0] === '-') {\n\t\t\t\tres = `-${res.slice(1, res.length).slice(0, separatorLimit.length)}`;\n\t\t\t} else {\n\t\t\t\tres = res.slice(0, separatorLimit.length);\n\t\t\t}\n\t\t}\n\t\tconst rgx: RegExp = /(\\d+)(\\d{3})/;\n\n\t\twhile (thousandSeparatorChar && rgx.test(res)) {\n\t\t\tres = res.replace(rgx, '$1' + thousandSeparatorChar + '$2');\n\t\t}\n\n\t\tif (precision === undefined) {\n\t\t\treturn res + decimals;\n\t\t} else if (precision === 0) {\n\t\t\treturn res;\n\t\t}\n\t\treturn res + decimals.substr(0, precision + 1);\n\t};\n\n\tprivate percentage = (str: string): boolean => {\n\t\treturn Number(str) >= 0 && Number(str) <= 100;\n\t};\n\n\tprivate getPrecision = (maskExpression: string): number => {\n\t\tconst x: string[] = maskExpression.split('.');\n\t\tif (x.length > 1) {\n\t\t\treturn Number(x[x.length - 1]);\n\t\t}\n\n\t\treturn Infinity;\n\t};\n\n\tprivate checkAndRemoveSuffix = (inputValue: string): string => {\n\t\tfor (let i = this.suffix?.length - 1; i >= 0; i--) {\n\t\t\tconst substr = this.suffix.substr(i, this.suffix?.length);\n\t\t\tif (\n\t\t\t\tinputValue.includes(substr) &&\n\t\t\t\t(i - 1 < 0 || !inputValue.includes(this.suffix.substr(i - 1, this.suffix?.length)))\n\t\t\t) {\n\t\t\t\treturn inputValue.replace(substr, '');\n\t\t\t}\n\t\t}\n\t\treturn inputValue;\n\t};\n\n\tprivate checkInputPrecision = (\n\t\tinputValue: string,\n\t\tprecision: number,\n\t\tdecimalMarker: IConfig['decimalMarker'],\n\t): string => {\n\t\tif (precision < Infinity) {\n\t\t\t// TODO need think about decimalMarker\n\t\t\tif (Array.isArray(decimalMarker)) {\n\t\t\t\tconst marker = decimalMarker.find((dm) => dm !== this.thousandSeparator);\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tdecimalMarker = marker ? marker : decimalMarker[0];\n\t\t\t}\n\t\t\tconst precisionRegEx: RegExp = new RegExp(\n\t\t\t\tthis._charToRegExpExpression(decimalMarker) + `\\\\d{${precision}}.*$`,\n\t\t\t);\n\n\t\t\tconst precisionMatch: RegExpMatchArray | null = inputValue.match(precisionRegEx);\n\t\t\tif (precisionMatch && precisionMatch[0]!.length - 1 > precision) {\n\t\t\t\tconst diff = precisionMatch[0]!.length - 1 - precision;\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = inputValue.substring(0, inputValue.length - diff);\n\t\t\t}\n\t\t\tif (\n\t\t\t\tprecision === 0 &&\n\t\t\t\tthis._compareOrIncludes(\n\t\t\t\t\tinputValue[inputValue.length - 1],\n\t\t\t\t\tdecimalMarker,\n\t\t\t\t\tthis.thousandSeparator,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = inputValue.substring(0, inputValue.length - 1);\n\t\t\t}\n\t\t}\n\t\treturn inputValue;\n\t};\n\n\tprivate _stripToDecimal(str: string): string {\n\t\treturn str\n\t\t\t.split('')\n\t\t\t.filter((i: string, idx: number) => {\n\t\t\t\tconst isDecimalMarker =\n\t\t\t\t\ttypeof this.decimalMarker === 'string'\n\t\t\t\t\t\t? i === this.decimalMarker\n\t\t\t\t\t\t: // TODO (inepipenko) use utility type\n\t\t\t\t\t\t this.decimalMarker.includes(i as ',' | '.');\n\t\t\t\treturn (\n\t\t\t\t\ti.match('^-?\\\\d') ||\n\t\t\t\t\ti === this.thousandSeparator ||\n\t\t\t\t\tisDecimalMarker ||\n\t\t\t\t\t(i === '-' && idx === 0 && this.allowNegativeNumbers)\n\t\t\t\t);\n\t\t\t})\n\t\t\t.join('');\n\t}\n\n\tprivate _charToRegExpExpression(char: string): string {\n\t\t// if (Array.isArray(char)) {\n\t\t// \treturn char.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|');\n\t\t// }\n\t\tif (char) {\n\t\t\tconst charsToEscape = '[\\\\^$.|?*+()';\n\t\t\treturn char === ' ' ? '\\\\s' : charsToEscape.indexOf(char) >= 0 ? `\\\\${char}` : char;\n\t\t}\n\t\treturn char;\n\t}\n\n\tprivate _shiftStep(maskExpression: string, cursor: number, inputLength: number) {\n\t\tconst shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputLength : cursor;\n\t\tthis._shift.add(shiftStep + this.prefix.length || 0);\n\t}\n\n\tprotected _compareOrIncludes<T>(value: T, comparedValue: T | T[], excludedValue: T): boolean {\n\t\treturn Array.isArray(comparedValue)\n\t\t\t? comparedValue.filter((v) => v !== excludedValue).includes(value)\n\t\t\t: value === comparedValue;\n\t}\n\n\tprivate _validIP(valuesIP: string[]): boolean {\n\t\treturn !(\n\t\t\tvaluesIP.length === 4 &&\n\t\t\t!valuesIP.some((value: string, index: number) => {\n\t\t\t\tif (valuesIP.length !== index + 1) {\n\t\t\t\t\treturn value === '' || Number(value) > 255;\n\t\t\t\t}\n\t\t\t\treturn value === '' || Number(value.substring(0, 3)) > 255;\n\t\t\t})\n\t\t);\n\t}\n}\n","import { ElementRef, Inject, Injectable, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { config, IConfig } from './config';\nimport { MaskApplierService } from './mask-applier.service';\n\n@Injectable()\nexport class MaskService extends MaskApplierService {\n\tpublic override maskExpression: string = '';\n\n\tpublic isNumberValue: boolean = false;\n\n\tpublic override placeHolderCharacter: string = '_';\n\n\tpublic maskIsShown: string = '';\n\n\tpublic selStart: number | null = null;\n\n\tpublic selEnd: number | null = null;\n\n\t/**\n\t * Whether we are currently in writeValue function, in this case when applying the mask we don't want to trigger onChange function,\n\t * since writeValue should be a one way only process of writing the DOM value based on the Angular model value.\n\t */\n\tpublic writingValue: boolean = false;\n\n\tpublic maskChanged: boolean = false;\n\n\tpublic triggerOnMaskChange: boolean = false;\n\n\tpublic onChange = (_: any) => {};\n\n\tpublic constructor(\n\t\t@Inject(DOCUMENT) private document: any,\n\t\t@Inject(config) protected override _config: IConfig,\n\t\tprivate _elementRef: ElementRef,\n\t\tprivate _renderer: Renderer2,\n\t) {\n\t\tsuper(_config);\n\t}\n\n\t// eslint-disable-next-line complexity\n\tpublic override applyMask(\n\t\tinputValue: string,\n\t\tmaskExpression: string,\n\t\tposition: number = 0,\n\t\tjustPasted = false,\n\t\tbackspaced = false,\n\t\tcb: Function = () => {},\n\t): string {\n\t\tif (!maskExpression) {\n\t\t\treturn inputValue !== this.actualValue ? this.actualValue : inputValue;\n\t\t}\n\t\tthis.maskIsShown = this.showMaskTyped ? this.showMaskInInput() : '';\n\t\tif (this.maskExpression === 'IP' && this.showMaskTyped) {\n\t\t\tthis.maskIsShown = this.showMaskInInput(inputValue || '#');\n\t\t}\n\t\tif (this.maskExpression === 'CPF_CNPJ' && this.showMaskTyped) {\n\t\t\tthis.maskIsShown = this.showMaskInInput(inputValue || '#');\n\t\t}\n\t\tif (!inputValue && this.showMaskTyped) {\n\t\t\tthis.formControlResult(this.prefix);\n\t\t\treturn this.prefix + this.maskIsShown;\n\t\t}\n\t\tconst getSymbol: string | undefined =\n\t\t\t!!inputValue && typeof this.selStart === 'number' ? inputValue[this.selStart] : '';\n\t\tlet newInputValue = '';\n\t\tif (this.hiddenInput !== undefined && !this.writingValue) {\n\t\t\tlet actualResult: string[] = this.actualValue.split('');\n\t\t\t// eslint-disable @typescript-eslint/no-unused-expressions\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-expressions\n\t\t\tinputValue !== '' && actualResult.length\n\t\t\t\t? typeof this.selStart === 'number' && typeof this.selEnd === 'number'\n\t\t\t\t\t? inputValue.length > actualResult.length\n\t\t\t\t\t\t? actualResult.splice(this.selStart, 0, getSymbol!)\n\t\t\t\t\t\t: inputValue.length < actualResult.length\n\t\t\t\t\t\t? actualResult.length - inputValue.length === 1\n\t\t\t\t\t\t\t? actualResult.splice(this.selStart - 1, 1)\n\t\t\t\t\t\t\t: actualResult.splice(this.selStart, this.selEnd - this.selStart)\n\t\t\t\t\t\t: null\n\t\t\t\t\t: null\n\t\t\t\t: (actualResult = []);\n\t\t\tif (this.showMaskTyped) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue = this.removeMask(inputValue);\n\t\t\t}\n\t\t\t// eslint-enable @typescript-eslint/no-unused-expressions\n\t\t\tnewInputValue =\n\t\t\t\tthis.actualValue.length && actualResult.length <= inputValue.length\n\t\t\t\t\t? this.shiftTypedSymbols(actualResult.join(''))\n\t\t\t\t\t: inputValue;\n\t\t}\n\n\t\tif (this.showMaskTyped) {\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = this.removeMask(inputValue);\n\t\t}\n\n\t\tnewInputValue = Boolean(newInputValue) && newInputValue.length ? newInputValue : inputValue;\n\n\t\tconst result: string = super.applyMask(\n\t\t\tnewInputValue,\n\t\t\tmaskExpression,\n\t\t\tposition,\n\t\t\tjustPasted,\n\t\t\tbackspaced,\n\t\t\tcb,\n\t\t);\n\n\t\tthis.actualValue = this.getActualValue(result);\n\t\t// handle some separator implications:\n\t\t// a.) adjust decimalMarker default (. -> ,) if thousandSeparator is a dot\n\t\tif (this.thousandSeparator === '.' && this.decimalMarker === '.') {\n\t\t\tthis.decimalMarker = ',';\n\t\t}\n\n\t\t// b) remove decimal marker from list of special characters to mask\n\t\tif (this.maskExpression.startsWith('separator') && this.dropSpecialCharacters === true) {\n\t\t\tthis.maskSpecialCharacters = this.maskSpecialCharacters.filter(\n\t\t\t\t(item: string) =>\n\t\t\t\t\t!this._compareOrIncludes(item, this.decimalMarker, this.thousandSeparator), //item !== this.decimalMarker, // !\n\t\t\t);\n\t\t}\n\t\tthis.formControlResult(result);\n\t\tif (!this.showMaskTyped) {\n\t\t\tif (this.hiddenInput) {\n\t\t\t\treturn result && result.length ? this.hideInput(result, this.maskExpression) : result;\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tconst resLen: number = result.length;\n\t\tconst prefNmask: string = this.prefix + this.maskIsShown;\n\n\t\tif (this.maskExpression.includes('H')) {\n\t\t\tconst countSkipedSymbol = this._numberSkipedSymbols(result);\n\t\t\treturn result + prefNmask.slice(resLen + countSkipedSymbol);\n\t\t} else if (this.maskExpression === 'IP' || this.maskExpression === 'CPF_CNPJ') {\n\t\t\treturn result + prefNmask;\n\t\t}\n\t\treturn result + prefNmask.slice(resLen);\n\t}\n\n\t// get the number of characters that were shifted\n\tprivate _numberSkipedSymbols(value: string): number {\n\t\tconst regex = /(^|\\D)(\\d\\D)/g;\n\t\tlet match = regex.exec(value);\n\t\tlet countSkipedSymbol = 0;\n\t\twhile (match != null) {\n\t\t\tcountSkipedSymbol += 1;\n\t\t\tmatch = regex.exec(value);\n\t\t}\n\t\treturn countSkipedSymbol;\n\t}\n\n\tpublic applyValueChanges(\n\t\tposition: number,\n\t\tjustPasted: boolean,\n\t\tbackspaced: boolean,\n\t\tcb: Function = () => {},\n\t): void {\n\t\tconst formElement = this._elementRef.nativeElement;\n\t\tformElement.value = this.applyMask(\n\t\t\tformElement.value,\n\t\t\tthis.maskExpression,\n\t\t\tposition,\n\t\t\tjustPasted,\n\t\t\tbackspaced,\n\t\t\tcb,\n\t\t);\n\t\tif (formElement === this._getActiveElement()) {\n\t\t\treturn;\n\t\t}\n\t\tthis.clearIfNotMatchFn();\n\t}\n\n\tpublic hideInput(inputValue: string, maskExpression: string): string {\n\t\treturn inputValue\n\t\t\t.split('')\n\t\t\t.map((curr: string, index: number) => {\n\t\t\t\tif (\n\t\t\t\t\tthis.maskAvailablePatterns &&\n\t\t\t\t\tthis.maskAvailablePatterns[maskExpression[index]!] &&\n\t\t\t\t\tthis.maskAvailablePatterns[maskExpression[index]!]?.symbol\n\t\t\t\t) {\n\t\t\t\t\treturn this.maskAvailablePatterns[maskExpression[index]!]?.symbol;\n\t\t\t\t}\n\t\t\t\treturn curr;\n\t\t\t})\n\t\t\t.join('');\n\t}\n\n\t// this function is not necessary, it checks result against maskExpression\n\tpublic getActualValue(res: string): string {\n\t\tconst compare: string[] = res\n\t\t\t.split('')\n\t\t\t.filter(\n\t\t\t\t(symbol: string, i: number) =>\n\t\t\t\t\tthis._checkSymbolMask(symbol, this.maskExpression[i]!) ||\n\t\t\t\t\t(this.maskSpecialCharacters.includes(this.maskExpression[i]!) &&\n\t\t\t\t\t\tsymbol === this.maskExpression[i]),\n\t\t\t);\n\t\tif (compare.join('') === res) {\n\t\t\treturn compare.join('');\n\t\t}\n\t\treturn res;\n\t}\n\n\tpublic shiftTypedSymbols(inputValue: string): string {\n\t\tlet symbolToReplace = '';\n\t\tconst newInputValue: (string | undefined)[] =\n\t\t\t(inputValue &&\n\t\t\t\tinputValue.split('').map((currSymbol: string, index: number) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.maskSpecialCharacters.includes(inputValue[index + 1]!) &&\n\t\t\t\t\t\tinputValue[index + 1] !== this.maskExpression[index + 1]\n\t\t\t\t\t) {\n\t\t\t\t\t\tsymbolToReplace = currSymbol;\n\t\t\t\t\t\treturn inputValue[index + 1];\n\t\t\t\t\t}\n\t\t\t\t\tif (symbolToReplace.length) {\n\t\t\t\t\t\tconst replaceSymbol: string = symbolToReplace;\n\t\t\t\t\t\tsymbolToReplace = '';\n\t\t\t\t\t\treturn replaceSymbol;\n\t\t\t\t\t}\n\t\t\t\t\treturn currSymbol;\n\t\t\t\t})) ||\n\t\t\t[];\n\t\treturn newInputValue.join('');\n\t}\n\n\t/**\n\t * Convert number value to string\n\t * 3.1415 -> '3.1415'\n\t * 1e-7 -> '0.0000001'\n\t */\n\tpublic numberToString(value: number | string): string {\n\t\tif (!value && value !== 0) {\n\t\t\treturn String(value);\n\t\t}\n\t\treturn Number(value).toLocaleString('fullwide', {\n\t\t\tuseGrouping: false,\n\t\t\tmaximumFractionDigits: 20,\n\t\t});\n\t}\n\n\tpublic showMaskInInput(inputVal?: string): string {\n\t\tif (this.showMaskTyped && !!this.shownMaskExpression) {\n\t\t\tif (this.maskExpression.length !== this.shownMaskExpression.length) {\n\t\t\t\tthrow new Error('Mask expression must match mask placeholder length');\n\t\t\t} else {\n\t\t\t\treturn this.shownMaskExpression;\n\t\t\t}\n\t\t} else if (this.showMaskTyped) {\n\t\t\tif (inputVal) {\n\t\t\t\tif (this.maskExpression === 'IP') {\n\t\t\t\t\treturn this._checkForIp(inputVal);\n\t\t\t\t}\n\t\t\t\tif (this.maskExpression === 'CPF_CNPJ') {\n\t\t\t\t\treturn this._checkForCpfCnpj(inputVal);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this.maskExpression.replace(/\\w/g, this.placeHolderCharacter);\n\t\t}\n\t\treturn '';\n\t}\n\n\tpublic clearIfNotMatchFn(): void {\n\t\tconst formElement = this._elementRef.nativeElement;\n\t\tif (\n\t\t\tthis.clearIfNotMatch &&\n\t\t\tthis.prefix.length + this.maskExpression.length + this.suffix.length !==\n\t\t\t\tformElement.value.replace(/_/g, '').length\n\t\t) {\n\t\t\tthis.formElementProperty = ['value', ''];\n\t\t\tthis.applyMask(formElement.value, this.maskExpression);\n\t\t}\n\t}\n\n\tpublic set formElementProperty([name, value]: [string, string | boolean]) {\n\t\tPromise.resolve().then(() =>\n\t\t\tthis._renderer.setProperty(this._elementRef.nativeElement, name, value),\n\t\t);\n\t}\n\n\tpublic checkSpecialCharAmount(mask: string): number {\n\t\tconst chars: string[] = mask.split('').filter((item: string) => this._findSpecialChar(item));\n\t\treturn chars.length;\n\t}\n\n\tpublic removeMask(inputValue: string): string {\n\t\treturn this._removeMask(\n\t\t\tthis._removeSuffix(this._removePrefix(inputValue)),\n\t\t\tthis.maskSpecialCharacters.concat('_').concat(this.placeHolderCharacter),\n\t\t);\n\t}\n\n\tprivate _checkForIp(inputVal: string): string {\n\t\tif (inputVal === '#') {\n\t\t\treturn `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n\t\t}\n\t\tconst arr: string[] = [];\n\t\tfor (let i = 0; i < inputVal.length; i++) {\n\t\t\tif (inputVal[i]?.match('\\\\d')) {\n\t\t\t\tarr.push(inputVal[i]!);\n\t\t\t}\n\t\t}\n\t\tif (arr.length <= 3) {\n\t\t\treturn `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n\t\t}\n\t\tif (arr.length > 3 && arr.length <= 6) {\n\t\t\treturn `${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n\t\t}\n\t\tif (arr.length > 6 && arr.length <= 9) {\n\t\t\treturn this.placeHolderCharacter;\n\t\t}\n\t\tif (arr.length > 9 && arr.length <= 12) {\n\t\t\treturn '';\n\t\t}\n\t\treturn '';\n\t}\n\n\tprivate _checkForCpfCnpj(inputVal: string): string {\n\t\tconst cpf =\n\t\t\t`${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n\t\tconst cnpj =\n\t\t\t`${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`/${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n\t\t\t`-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n\n\t\tif (inputVal === '#') {\n\t\t\treturn cpf;\n\t\t}\n\t\tconst arr: string[] = [];\n\t\tfor (let i = 0; i < inputVal.length; i++) {\n\t\t\tif (inputVal[i]?.match('\\\\d')) {\n\t\t\t\tarr.push(inputVal[i]!);\n\t\t\t}\n\t\t}\n\t\tif (arr.length <= 3) {\n\t\t\treturn cpf.slice(arr.length, cpf.length);\n\t\t}\n\t\tif (arr.length > 3 && arr.length <= 6) {\n\t\t\treturn cpf.slice(arr.length + 1, cpf.length);\n\t\t}\n\t\tif (arr.length > 6 && arr.length <= 9) {\n\t\t\treturn cpf.slice(arr.length + 2, cpf.length);\n\t\t}\n\t\tif (arr.length > 9 && arr.length < 11) {\n\t\t\treturn cpf.slice(arr.length + 3, cpf.length);\n\t\t}\n\t\tif (arr.length === 11) {\n\t\t\treturn '';\n\t\t}\n\t\tif (arr.length === 12) {\n\t\t\tif (inputVal.length === 17) {\n\t\t\t\treturn cnpj.slice(16, cnpj.length);\n\t\t\t}\n\t\t\treturn cnpj.slice(15, cnpj.length);\n\t\t}\n\t\tif (arr.length > 12 && arr.length <= 14) {\n\t\t\treturn cnpj.slice(arr.length + 4, cnpj.length);\n\t\t}\n\t\treturn '';\n\t}\n\n\t/**\n\t * Recursively determine the current active element by navigating the Shadow DOM until the Active Element is found.\n\t */\n\tprivate _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n\t\tconst shadowRootEl = document?.activeElement?.shadowRoot;\n\t\tif (!shadowRootEl?.activeElement) {\n\t\t\treturn document.activeElement;\n\t\t} else {\n\t\t\treturn this._getActiveElement(shadowRootEl);\n\t\t}\n\t}\n\n\t/**\n\t * Propogates the input value back to the Angular model by triggering the onChange function. It won't do this if writingValue\n\t * is true. If that is true it means we are currently in the writeValue function, which is supposed to only update the actual\n\t * DOM element based on the Angular model value. It should be a one way process, i.e. writeValue should not be modifying the Angular\n\t * model value too. Therefore, we don't trigger onChange in this scenario.\n\t * @param inputValue the current form input value\n\t */\n\tprivate formControlResult(inputValue: string): void {\n\t\tif (this.writingValue || (!this.triggerOnMaskChange && this.maskChanged)) {\n\t\t\tthis.maskChanged = false;\n\t\t\treturn;\n\t\t}\n\t\tif (Array.isArray(this.dropSpecialCharacters)) {\n\t\t\tthis.onChange(\n\t\t\t\tthis._toNumber(\n\t\t\t\t\tthis._removeMask(\n\t\t\t\t\t\tthis._removeSuffix(this._removePrefix(inputValue)),\n\t\t\t\t\t\tthis.dropSpecialCharacters,\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t);\n\t\t} else if (this.dropSpecialCharacters) {\n\t\t\tthis.onChange(this._toNumber(this._checkSymbols(inputValue)));\n\t\t} else {\n\t\t\tthis.onChange(this._removeSuffix(inputValue));\n\t\t}\n\t}\n\n\tprivate _toNumber(value: string | number | undefined | null) {\n\t\tif (!this.isNumberValue || value === '') {\n\t\t\treturn value;\n\t\t}\n\t\tconst num = Number(value);\n\t\treturn Number.isNaN(num) ? value : num;\n\t}\n\n\tprivate _removeMask(value: string, specialCharactersForRemove: string[]): string {\n\t\treturn value ? value.replace(this._regExpForRemove(specialCharactersForRemove), '') : value;\n\t}\n\n\tprivate _removePrefix(value: string): string {\n\t\tif (!this.prefix) {\n\t\t\treturn value;\n\t\t}\n\t\treturn value ? value.replace(this.prefix, '') : value;\n\t}\n\n\tprivate _removeSuffix(value: string): string {\n\t\tif (!this.suffix) {\n\t\t\treturn value;\n\t\t}\n\t\treturn value ? value.replace(this.suffix, '') : value;\n\t}\n\n\tprivate _retrieveSeparatorValue(result: string): string {\n\t\treturn this._removeMask(\n\t\t\tthis._removeSuffix(this._removePrefix(result)),\n\t\t\tthis.maskSpecialCharacters,\n\t\t);\n\t}\n\n\tprivate _regExpForRemove(specialCharactersForRemove: string[]): RegExp {\n\t\treturn new RegExp(\n\t\t\tspecialCharactersForRemove.map((item: string) => `\\\\${item}`).join('|'),\n\t\t\t'gi',\n\t\t);\n\t}\n\n\tprivate _replaceDecimalMarkerToDot(value: string): string {\n\t\tconst markers = Array.isArray(this.decimalMarker) ? this.decimalMarker : [this.decimalMarker];\n\n\t\treturn value.replace(this._regExpForRemove(markers), '.');\n\t}\n\n\tprivate _checkSymbols(result: string): string | number | undefined | null {\n\t\tif (result === '') {\n\t\t\treturn result;\n\t\t}\n\n\t\tconst separatorPrecision: number | null = this._retrieveSeparatorPrecision(this.maskExpression);\n\t\tconst separatorValue: string = this._replaceDecimalMarkerToDot(\n\t\t\tthis._retrieveSeparatorValue(result),\n\t\t);\n\n\t\tif (!this.isNumberValue) {\n\t\t\treturn separatorValue;\n\t\t}\n\t\tif (separatorPrecision) {\n\t\t\tif (result === this.decimalMarker) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn this._checkPrecision(this.maskExpression, separatorValue);\n\t\t} else {\n\t\t\treturn Number(separatorValue);\n\t\t}\n\t}\n\n\t// TODO should think about helpers or separting decimal precision to own property\n\tprivate _retrieveSeparatorPrecision(maskExpretion: string): number | null {\n\t\tconst matcher: RegExpMatchArray | null = maskExpretion.match(\n\t\t\tnew RegExp(`^separator\\\\.([^d]*)`),\n\t\t);\n\t\treturn matcher ? Number(matcher[1]) : null;\n\t}\n\n\tprivate _checkPrecision(separatorExpression: string, separatorValue: string): number | string {\n\t\tif (separatorExpression.indexOf('2') > 0) {\n\t\t\treturn Number(separatorValue).toFixed(2);\n\t\t}\n\t\treturn Number(separatorValue);\n\t}\n}\n","import {\n\tControlValueAccessor,\n\tNG_VALIDATORS,\n\tNG_VALUE_ACCESSOR,\n\tValidationErrors,\n\tValidator,\n\tFormControl,\n} from '@angular/forms';\nimport {\n\tDirective,\n\tEventEmitter,\n\tforwardRef,\n\tHostListener,\n\tInject,\n\tInput,\n\tOnChanges,\n\tOutput,\n\tSimpleChanges,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { CustomKeyboardEvent } from './custom-keyboard-event';\nimport { config, IConfig, timeMasks, withoutValidation } from './config';\nimport { MaskService } from './mask.service';\n\n@Directive({\n\tselector: 'input[mask], textarea[mask]',\n\tproviders: [\n\t\t{\n\t\t\tprovide: NG_VALUE_ACCESSOR,\n\t\t\tuseExisting: forwardRef(() => MaskDirective),\n\t\t\tmulti: true,\n\t\t},\n\t\t{\n\t\t\tprovide: NG_VALIDATORS,\n\t\t\tuseExisting: forwardRef(() => MaskDirective),\n\t\t\tmulti: true,\n\t\t},\n\t\tMaskService,\n\t],\n\texportAs: 'mask,ngxMask',\n})\nexport class MaskDirective implements ControlValueAccessor, OnChanges, Validator {\n\t// eslint-disable-next-line @angular-eslint/no-input-rename\n\t@Input('mask') public maskExpression: string = '';\n\n\t@Input() public specialCharacters: IConfig['specialCharacters'] = [];\n\n\t@Input() public patterns: IConfig['patterns'] = {};\n\n\t@Input() public prefix: IConfig['prefix'] = '';\n\n\t@Input() public suffix: IConfig['suffix'] = '';\n\n\t@Input() public thousandSeparator: IConfig['thousandSeparator'] = ' ';\n\n\t@Input() public decimalMarker: IConfig['decimalMarker'] = '.';\n\n\t@Input() public dropSpecialCharacters: IConfig['dropSpecialCharacters'] | null = null;\n\n\t@Input() public hiddenInput: IConfig['hiddenInput'] | null = null;\n\n\t@Input() public showMaskTyped: IConfig['showMaskTyped'] | null = null;\n\n\t@Input() public placeHolderCharacter: IConfig['placeHolderCharacter'] | null = null;\n\n\t@Input() public shownMaskExpression: IConfig['shownMaskExpression'] | null = null;\n\n\t@Input() public showTemplate: IConfig['showTemplate'] | null = null;\n\n\t@Input() public clearIfNotMatch: IConfig['clearIfNotMatch'] | null = null;\n\n\t@Input() public validation: IConfig['validation'] | null = null;\n\n\t@Input() public separatorLimit: IConfig['separatorLimit'] | null = null;\n\n\t@Input() public allowNegativeNumbers: IConfig['allowNegativeNumbers'] | null = null;\n\n\t@Input() public leadZeroDateTime: IConfig['leadZeroDateTime'] | null = null;\n\n\t@Input() public triggerOnMaskChange: IConfig['triggerOnMaskChange'] | null = null;\n\n\t@Output() public maskFilled: IConfig['maskFilled'] = new EventEmitter<void>();\n\n\tprivate _maskValue: string = '';\n\n\tprivate _inputValue!: string;\n\n\tprivate _position: number | null = null;\n\n\tprivate _start!: number;\n\n\tprivate _end!: number;\n\n\tprivate _code!: string;\n\n\tprivate _maskExpressionArray: string[] = [];\n\n\tprivate _justPasted: boolean = false;\n\n\tpublic constructor(\n\t\t@Inject(DOCUMENT) private document: any,\n\t\tpublic _maskService: MaskService,\n\t\t@Inject(config) protected _config: IConfig,\n\t) {}\n\n\tpublic onChange = (_: any) => {};\n\n\tpublic onTouch = () => {};\n\n\tpublic ngOnChanges(changes: SimpleChanges): void {\n\t\tconst {\n\t\t\tmaskExpression,\n\t\t\tspecialCharacters,\n\t\t\tpatterns,\n\t\t\tprefix,\n\t\t\tsuffix,\n\t\t\tthousandSeparator,\n\t\t\tdecimalMarker,\n\t\t\tdropSpecialCharacters,\n\t\t\thiddenInput,\n\t\t\tshowMaskTyped,\n\t\t\tplaceHolderCharacter,\n\t\t\tshownMaskExpression,\n\t\t\tshowTemplate,\n\t\t\tclearIfNotMatch,\n\t\t\tvalidation,\n\t\t\tseparatorLimit,\n\t\t\tallowNegativeNumbers,\n\t\t\tleadZeroDateTime,\n\t\t\ttriggerOnMaskChange,\n\t\t} = changes;\n\t\tif (maskExpression) {\n\t\t\tif (\n\t\t\t\tmaskExpression.currentValue !== maskExpression.previousValue &&\n\t\t\t\t!maskExpression.firstChange\n\t\t\t) {\n\t\t\t\tthis._maskService.maskChanged = true;\n\t\t\t}\n\t\t\tif (maskExpression.currentValue && maskExpression.currentValue.split('||').length > 1) {\n\t\t\t\tthis._maskExpressionArray = maskExpression.currentValue\n\t\t\t\t\t.split('||')\n\t\t\t\t\t.sort((a: string, b: string) => {\n\t\t\t\t\t\treturn a.length - b.length;\n\t\t\t\t\t});\n\t\t\t\tthis._setMask();\n\t\t\t} else {\n\t\t\t\tthis._maskExpressionArray = [];\n\t\t\t\tthis._maskValue = maskExpression.currentValue || '';\n\t\t\t\tthis._maskService.maskExpression = this._maskValue;\n\t\t\t}\n\t\t}\n\t\tif (specialCharacters) {\n\t\t\tif (!specialCharacters.currentValue || !Array.isArray(specialCharacters.currentValue)) {\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tthis._maskService.maskSpecialCharacters = specialCharacters.currentValue || [];\n\t\t\t}\n\t\t}\n\t\t// Only overwrite the mask available patterns if a pattern has actually been passed in\n\t\tif (patterns && patterns.currentValue) {\n\t\t\tthis._maskService.maskAvailablePatterns = patterns.currentValue;\n\t\t}\n\t\tif (prefix) {\n\t\t\tthis._maskService.prefix = prefix.currentValue;\n\t\t}\n\t\tif (suffix) {\n\t\t\tthis._maskService.suffix = suffix.currentValue;\n\t\t}\n\t\tif (thousandSeparator) {\n\t\t\tthis._maskService.thousandSeparator = thousandSeparator.currentValue;\n\t\t}\n\t\tif (decimalMarker) {\n\t\t\tthis._maskService.decimalMarker = decimalMarker.currentValue;\n\t\t}\n\t\tif (dropSpecialCharacters) {\n\t\t\tthis._maskService.dropSpecialCharacters = dropSpecialCharacters.currentValue;\n\t\t}\n\t\tif (hiddenInput) {\n\t\t\tthis._maskService.hiddenInput = hiddenInput.currentValue;\n\t\t}\n\t\tif (showMaskTyped) {\n\t\t\tthis._maskService.showMaskTyped = showMaskTyped.currentValue;\n\t\t}\n\t\tif (placeHolderCharacter) {\n\t\t\tthis._maskService.placeHolderCharacter = placeHolderCharacter.currentValue;\n\t\t}\n\t\tif (shownMaskExpression) {\n\t\t\tthis._maskService.shownMaskExpression = shownMaskExpression.currentValue;\n\t\t}\n\t\tif (showTemplate) {\n\t\t\tthis._maskService.showTemplate = showTemplate.currentValue;\n\t\t}\n\t\tif (clearIfNotMatch) {\n\t\t\tthis._maskService.clearIfNotMatch = clearIfNotMatch.currentValue;\n\t\t}\n\t\tif (validation) {\n\t\t\tthis._maskService.validation = validation.currentValue;\n\t\t}\n\t\tif (separatorLimit) {\n\t\t\tthis._maskService.separatorLimit = separatorLimit.currentValue;\n\t\t}\n\t\tif (allowNegativeNumbers) {\n\t\t\tthis._maskService.allowNegativeNumbers = allowNegativeNumbers.currentValue;\n\t\t\tif (this._maskService.allowNegativeNumbers) {\n\t\t\t\tthis._maskService.maskSpecialCharacters = this._maskService.maskSpecialCharacters.filter(\n\t\t\t\t\t(c: string) => c !== '-',\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (leadZeroDateTime) {\n\t\t\tthis._maskService.leadZeroDateTime = leadZeroDateTime.currentValue;\n\t\t}\n\t\tif (triggerOnMaskChange) {\n\t\t\tthis._maskService.triggerOnMaskChange = triggerOnMaskChange.currentValue;\n\t\t}\n\t\tthis._applyMask();\n\t}\n\n\t// eslint-disable-next-line complexity\n\tpublic validate({ value }: FormControl): ValidationErrors | null {\n\t\tif (!this._maskService.validation || !this._maskValue) {\n\t\t\treturn null;\n\t\t}\n\t\tif (this._maskService.ipError) {\n\t\t\treturn this._createValidationError(value);\n\t\t}\n\t\tif (this._maskService.cpfCnpjError) {\n\t\t\treturn this._createValidationError(value);\n\t\t}\n\t\tif (this._maskValue.startsWith('separator')) {\n\t\t\treturn null;\n\t\t}\n\t\tif (withoutValidation.includes(this._maskValue)) {\n\t\t\treturn null;\n\t\t}\n\t\tif (this._maskService.clearIfNotMatch) {\n\t\t\treturn null;\n\t\t}\n\t\tif (timeMasks.includes(this._maskValue)) {\n\t\t\treturn this._validateTime(value);\n\t\t}\n\t\tif (value && value.toString().length >= 1) {\n\t\t\tlet counterOfOpt = 0;\n\t\t\tfor (const key in this._maskService.maskAvailablePatterns) {\n\t\t\t\tif (this._maskService.maskAvailablePatterns[key]!.optional) {\n\t\t\t\t\tif (this._maskValue.indexOf(key) !== this._maskValue.lastIndexOf(key)) {\n\t\t\t\t\t\tconst opt: string = this._maskValue\n\t\t\t\t\t\t\t.split('')\n\t\t\t\t\t\t\t.filter((i: string) => i === key)\n\t\t\t\t\t\t\t.join('');\n\t\t\t\t\t\tcounterOfOpt += opt.length;\n\t\t\t\t\t} else if (this._maskValue.indexOf(key) !== -1) {\n\t\t\t\t\t\tcounterOfOpt++;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis._maskValue.indexOf(key) !== -1 &&\n\t\t\t\t\t\tvalue.toString().length >= this._maskValue.indexOf(key)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tif (counterOfOpt === this._maskValue.length) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tthis._maskValue.indexOf('{') === 1 &&\n\t\t\t\tvalue.toString().length ===\n\t\t\t\t\tthis._maskValue.length + Number(this._maskValue.split('{')[1]!.split('}')[0]) - 4\n\t\t\t) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tif (this._maskValue.indexOf('*') === 1 || this._maskValue.indexOf('?') === 1) {\n\t\t\t\treturn null;\n\t\t\t} else if (\n\t\t\t\t(this._maskValue.indexOf('*') > 1 &&\n\t\t\t\t\tvalue.toString().length < this._maskValue.indexOf('*')) ||\n\t\t\t\t(this._maskValue.indexOf('?') > 1 &&\n\t\t\t\t\tvalue.toString().length < this._maskValue.indexOf('?')) ||\n\t\t\t\tthis._maskValue.indexOf('{') === 1\n\t\t\t) {\n\t\t\t\treturn this._createValidationError(value);\n\t\t\t}\n\t\t\tif (this._maskValue.indexOf('*') === -1 || this._maskValue.indexOf('?') === -1) {\n\t\t\t\tconst length: number = this._maskService.dropSpecialCharacters\n\t\t\t\t\t? this._maskValue.length -\n\t\t\t\t\t this._maskService.checkSpecialCharAmount(this._maskValue) -\n\t\t\t\t\t counterOfOpt\n\t\t\t\t\t: this._maskValue.length - counterOfOpt;\n\t\t\t\tif (value.toString().length < length) {\n\t\t\t\t\treturn this._createValidationError(value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (value) {\n\t\t\tthis.maskFilled.emit();\n\t\t\treturn null;\n\t\t}\n\t\treturn null;\n\t}\n\n\t@HostListener('paste')\n\tpublic onPaste() {\n\t\tthis._justPasted = true;\n\t}\n\n\t@HostListener('ngModelChange', ['$event'])\n\tpublic onModelChange(value: any): void {\n\t\t// on form reset we need to update the actualValue\n\t\tif ((value === '' || value === null || value === undefined) && this._maskService.actualValue) {\n\t\t\tthis._maskService.actualValue = this._maskService.getActualValue('');\n\t\t}\n\t}\n\n\t@HostListener('input', ['$event'])\n\tpublic onInput(e: CustomKeyboardEvent): void {\n\t\tconst el: HTMLInputElement = e.target as HTMLInputElement;\n\t\tthis._inputValue = el.value;\n\n\t\tthis._setMask();\n\n\t\tif (!this._maskValue) {\n\t\t\tthis.onChange(el.value);\n\t\t\treturn;\n\t\t}\n\t\tconst position: number =\n\t\t\tel.selectionStart === 1\n\t\t\t\t? (el.selectionStart as number) + this._maskService.prefix.length\n\t\t\t\t: (el.selectionStart as number);\n\t\tlet caretShift = 0;\n\t\tlet backspaceShift = false;\n\t\tthis._maskService.applyValueChanges(\n\t\t\tposition,\n\t\t\tthis._justPasted,\n\t\t\tthis._code === 'Backspace' || this._code === 'Delete',\n\t\t\t(shift: number, _backspaceShift: boolean) => {\n\t\t\t\tthis._justPasted = false;\n\t\t\t\tcaretShift = shift;\n\t\t\t\tbackspaceShift = _backspaceShift;\n\t\t\t},\n\t\t);\n\t\t// only set the selection if the element is active\n\t\tif (this._getActiveElement() !== el) {\n\t\t\treturn;\n\t\t}\n\t\tthis._position = this._position === 1 && this._inputValue.length === 1 ? null : this._position;\n\t\tlet positionToApply: number = this._position\n\t\t\t? this._inputValue.length + position + caretShift\n\t\t\t: position + (this._code === 'Backspace' && !backspaceShift ? 0 : caretShift);\n\t\tif (positionToApply > this._getActualInputLength()) {\n\t\t\tpositionToApply = this._getActualInputLength();\n\t\t}\n\t\tif (positionToApply < 0) {\n\t\t\tpositionToApply = 0;\n\t\t}\n\t\tel.setSelectionRange(positionToApply, positionToApply);\n\t\tthis._position = null;\n\t}\n\n\t@HostListener('blur')\n\tpublic onBlur(): void {\n\t\tif (this._maskValue) {\n\t\t\tthis._maskService.clearIfNotMatchFn();\n\t\t}\n\t\tthis.onTouch();\n\t}\n\n\t@HostListener('click', ['$event'])\n\tpublic onClick(e: MouseEvent | CustomKeyboardEvent): void {\n\t\tif (!this._maskValue) {\n\t\t\treturn;\n\t\t}\n\t\tconst el: HTMLInputElement = e.target as HTMLInputElement;\n\t\tconst posStart = 0;\n\t\tconst posEnd = 0;\n\t\tif (\n\t\t\tel !== null &&\n\t\t\tel.selectionStart !== null &&\n\t\t\tel.selectionStart === el.selectionEnd &&\n\t\t\tel.selectionStart > this._maskService.prefix.length &&\n\t\t\t// eslint-disable-next-line\n\t\t\t(e as any).keyCode !== 38\n\t\t) {\n\t\t\tif (this._maskService.showMaskTyped) {\n\t\t\t\t// We are showing the mask in the input\n\t\t\t\tthis._maskService.maskIsShown = this._maskService.showMaskInInput();\n\t\t\t\tif (\n\t\t\t\t\tel.setSelectionRange &&\n\t\t\t\t\tthis._maskService.prefix + this._maskService.maskIsShown === el.value\n\t\t\t\t) {\n\t\t\t\t\t// the input ONLY contains the mask, so position the cursor at the start\n\t\t\t\t\tel.focus();\n\t\t\t\t\tel.setSelectionRange(posStart, posEnd);\n\t\t\t\t} else {\n\t\t\t\t\t// the input contains some characters already\n\t\t\t\t\tif (el.selectionStart > this._maskService.actualValue.length) {\n\t\t\t\t\t\t// if the user clicked beyond our value's length, position the cursor at the end of our value\n\t\t\t\t\t\tel.setSelectionRange(\n\t\t\t\t\t\t\tthis._maskService.actualValue.length,\n\t\t\t\t\t\t\tthis._maskService.actualValue.length,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst nextValue: string | null =\n\t\t\t!el.value || el.value === this._maskService.prefix\n\t\t\t\t? this._maskService.prefix + this._maskService.maskIsShown\n\t\t\t\t: el.value;\n\t\t/** Fix of cursor position jumping to end in most browsers no matter where cursor is inserted onFocus */\n\t\tif (el.value !== nextValue) {\n\t\t\tel.value = nextValue;\n\t\t}\n\n\t\t/** fix of cursor position with prefix when mouse click occur */\n\t\tif (\n\t\t\t((el.selectionStart as number) || (el.selectionEnd as number)) <=\n\t\t\tthis._maskService.prefix.length\n\t\t) {\n\t\t\tel.selectionStart = this._maskService.prefix.length;\n\t\t\treturn;\n\t\t}\n\t\t/** select only inserted text */\n\t\tif ((el.selectionEnd as number) > this._getActualInputLength()) {\n\t\t\tel.selectionEnd = this._getActualInputLength();\n\t\t}\n\t}\n\n\t// eslint-disable-next-line complexity\n\t@HostListener('keydown', ['$event'])\n\tpublic onKeyDown(e: CustomKeyboardEvent): void {\n\t\tif (!this._maskValue) {\n\t\t\treturn;\n\t\t}\n\t\tthis._code = e.code ? e.code : e.key;\n\t\tconst el: HTMLInputElement = e.target as HTMLInputElement;\n\t\tthis._inputValue = el.value;\n\n\t\tthis._setMask();\n\n\t\tif (e.keyCode === 38) {\n\t\t\te.preventDefault();\n\t\t}\n\t\tif (e.keyCode === 37 || e.keyCode === 8 || e.keyCode === 46) {\n\t\t\tif (e.keyCode === 8 && el.value.length === 0) {\n\t\t\t\tel.selectionStart = el.selectionEnd;\n\t\t\t}\n\t\t\tif (e.keyCode === 8 && (el.selectionStart as number) !== 0) {\n\t\t\t\t// If specialChars is false, (shouldn't ever happen) then set to the defaults\n\t\t\t\tthis.specialCharacters = this.specialCharacters?.length\n\t\t\t\t\t? this.specialCharacters\n\t\t\t\t\t: this._config.specialCharacters;\n\t\t\t\tif (this.prefix.length > 1 && (el.selectionStart as number) <= this.prefix.length) {\n\t\t\t\t\tel.setSelectionRange(this.prefix.length, el.selectionEnd);\n\t\t\t\t} else {\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis._inputValue.length !== (el.selectionStart as number) &&\n\t\t\t\t\t\t(el.selectionStart as number) !== 1\n\t\t\t\t\t) {\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\tthis.specialCharacters.includes(\n\t\t\t\t\t\t\t\tthis._inputValue[(el.selectionStart as number) - 1]!.toString(),\n\t\t\t\t\t\t\t) &&\n\t\t\t\t\t\t\t((this.prefix.length >= 1 && (el.selectionStart as number) > this.prefix.length) ||\n\t\t\t\t\t\t\t\tthis.prefix.length === 0)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tel.setSelectionRange((el.selectionStart as number) - 1, el.selectionEnd);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.checkSelectionOnDeletion(el);\n\t\t\tif (\n\t\t\t\tthis._maskService.prefix.length &&\n\t\t\t\t(el.selectionStart as number) <= this._maskService.prefix.length &&\n\t\t\t\t(el.selectionEnd as number) <= this._maskService.prefix.length\n\t\t\t) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\tconst cursorStart: number | null = el.selectionStart;\n\t\t\tif (\n\t\t\t\te.keyCode === 8 &&\n\t\t\t\t!el.readOnly &&\n\t\t\t\tcursorStart === 0 &&\n\t\t\t\tel.selectionEnd === el.value.length &&\n\t\t\t\tel.value.length !== 0\n\t\t\t) {\n\t\t\t\tthis._position = this._maskService.prefix ? this._maskService.prefix.length : 0;\n\t\t\t\tthis._maskService.applyMask(\n\t\t\t\t\tthis._maskService.prefix,\n\t\t\t\t\tthis._maskService.maskExpression,\n\t\t\t\t\tthis._position,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (\n\t\t\t!!this.suffix &&\n\t\t\tthis.suffix.length > 1 &&\n\t\t\tthis._inputValue.length - this.suffix.length < (el.selectionStart as number)\n\t\t) {\n\t\t\tel.setSelectionRange(this._inputValue.length - this.suffix.length, this._inputValue.length);\n\t\t} else if (\n\t\t\t(e.keyCode === 65 && e.ctrlKey) ||\n\t\t\t(e.keyCode === 65 && e.metaKey) // Cmd + A (Mac)\n\t\t) {\n\t\t\tel.setSelectionRange(0, this._getActualInputLength());\n\t\t\te.preventDefault();\n\t\t}\n\t\tthis._maskService.selStart = el.selectionStart;\n\t\tthis._maskService.selEnd = el.selectionEnd;\n\t}\n\n\t/** It writes the value in the input */\n\tpublic async writeValue(\n\t\tinputValue: string | number | { value: string | number; disable?: boolean },\n\t): Promise<void> {\n\t\tif (typeof inputValue === 'object' && inputValue !== null && 'value' in inputValue) {\n\t\t\tif ('disable' in inputValue) {\n\t\t\t\tthis.setDisabledState(Boolean(inputValue.disable));\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = inputValue.value;\n\t\t}\n\n\t\tif (typeof inputValue === 'number' || this._maskValue.startsWith('separator')) {\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = this._maskService.numberToString(inputValue);\n\t\t\tif (!Array.isArray(this.decimalMarker)) {\n\t\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\t\tinputValue =\n\t\t\t\t\tthis.decimalMarker !== '.' ? inputValue.replace('.', this.decimalMarker) : inputValue;\n\t\t\t}\n\t\t\tthis._maskService.isNumberValue = true;\n\t\t}\n\n\t\tif (typeof inputValue !== 'string') {\n\t\t\t// eslint-disable-next-line no-param-reassign\n\t\t\tinputValue = '';\n\t\t}\n\n\t\tthis._inputValue = inputValue;\n\t\tthis._setMask();\n\n\t\tif (\n\t\t\t(inputValue && this._maskService.maskExpression) ||\n\t\t\t(this._maskService.maskExpression &&\n\t\t\t\t(this._maskService.prefix || this._maskService.showMaskTyped))\n\t\t) {\n\t\t\t// Let the service we know we are writing value so that triggering onChange function wont happen during applyMask\n\t\t\tthis._maskService.writingValue = true;\n\t\t\tthis._maskService.formElementProperty = [\n\t\t\t\t'value',\n\t\t\t\tthis._maskService.applyMask(inputValue, this._maskService.maskExpression),\n\t\t\t];\n\t\t\t// Let the service know we've finished writing value\n\t\t\tthis._maskService.writingValue = false;\n\t\t} else {\n\t\t\tthis._maskService.formElementProperty = ['value', inputValue];\n\t\t}\n\t\tthis._inputValue = inputValue;\n\t}\n\n\tpublic registerOnChange(fn: any): void {\n\t\tthis._maskService.onChange = this.onChange = fn;\n\t}\n\n\tpublic registerOnTouched(fn: any): void {\n\t\tthis.onTouch = fn;\n\t}\n\n\tprivate _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n\t\tconst shadowRootEl = document?.activeElement?.shadowRoot;\n\t\tif (!shadowRootEl?.activeElement) {\n\t\t\treturn document.activeElement;\n\t\t} else {\n\t\t\treturn this._getActiveElement(shadowRootEl);\n\t\t}\n\t}\n\n\tpublic checkSelectionOnDeletion(el: HTMLInputElement): void {\n\t\tel.selectionStart = Math.min(\n\t\t\tMath.max(this.prefix.length, el.selectionStart as number),\n\t\t\tthis._inputValue.length - this.suffix.length,\n\t\t);\n\t\tel.selectionEnd = Math.min(\n\t\t\tMath.max(this.prefix.length, el.selectionEnd as number),\n\t\t\tthis._inputValue.length - this.suffix.length,\n\t\t);\n\t}\n\n\t/** It disables the input element */\n\tpublic setDisabledState(isDisabled: boolean): void {\n\t\tthis._maskService.formElementProperty = ['disabled', isDisabled];\n\t}\n\n\tprivate _repeatPatternSymbols(maskExp: string): string {\n\t\treturn (\n\t\t\t(maskExp.match(/{[0-9]+}/) &&\n\t\t\t\tmaskExp.split('').reduce((accum: string, currval: string, index: number): string => {\n\t\t\t\t\tthis._start = currval === '{' ? index : this._start;\n\n\t\t\t\t\tif (currval !== '}') {\n\t\t\t\t\t\treturn this._maskService._findSpecialChar(currval) ? accum + currval : accum;\n\t\t\t\t\t}\n\t\t\t\t\tthis._end = index;\n\t\t\t\t\tconst repeatNumber: number = Number(maskExp.slice(this._start + 1, this._end));\n\t\t\t\t\tconst replaceWith: string = new Array(repeatNumber + 1).join(maskExp[this._start - 1]);\n\t\t\t\t\treturn accum + replaceWith;\n\t\t\t\t}, '')) ||\n\t\t\tmaskExp\n\t\t);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tprivate _applyMask(): any {\n\t\tthis._maskService.maskExpression = this._repeatPatternSymbols(this._maskValue || '');\n\t\tthis._maskService.formElementProperty = [\n\t\t\t'value',\n\t\t\tthis._maskService.applyMask(this._inputValue, this._maskService.maskExpression),\n\t\t];\n\t}\n\n\tprivate _validateTime(value: string): ValidationErrors | null {\n\t\tconst rowMaskLen: number = this._maskValue.split('').filter((s: string) => s !== ':').length;\n\t\tif (!value) {\n\t\t\treturn null; // Don't validate empty values to allow for optional form control\n\t\t}\n\n\t\tif (\n\t\t\t(+value[value.length - 1]! === 0 && value.length < rowMaskLen) ||\n\t\t\tvalue.length <= rowMaskLen - 2\n\t\t) {\n\t\t\treturn this._createValidationError(value);\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _getActualInputLength() {\n\t\treturn (\n\t\t\tthis._maskService.actualValue.length ||\n\t\t\tthis._maskService.actualValue.length + this._maskService.prefix.length\n\t\t);\n\t}\n\n\tprivate _createValidationError(actualValue: string): ValidationErrors {\n\t\treturn {\n\t\t\tmask: {\n\t\t\t\trequiredMask: this._maskValue,\n\t\t\t\tactualValue,\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate _setMask() {\n\t\tif (this._maskExpressionArray.length > 0) {\n\t\t\tthis._maskExpressionArray.some((mask): boolean | void => {\n\t\t\t\tconst test =\n\t\t\t\t\tthis._maskService.removeMask(this._inputValue)?.length <=\n\t\t\t\t\tthis._maskService.removeMask(mask)?.length;\n\t\t\t\tif (this._inputValue && test) {\n\t\t\t\t\tthis._maskValue = mask;\n\t\t\t\t\tthis.maskExpression = mask;\n\t\t\t\t\tthis._maskService.maskExpression = mask;\n\t\t\t\t\treturn test;\n\t\t\t\t} else {\n\t\t\t\t\tthis._maskValue = this._maskExpressionArray[this._maskExpressionArray.length - 1]!;\n\t\t\t\t\tthis.maskExpression = this._maskExpressionArray[this._maskExpressionArray.length - 1]!;\n\t\t\t\t\tthis._maskService.maskExpression =\n\t\t\t\t\t\tthis._maskExpressionArray[this._maskExpressionArray.length - 1]!;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { MaskApplierService } from './mask-applier.service';\nimport { IConfig } from './config';\n\n@Pipe({\n\tname: 'mask',\n\tpure: true,\n})\nexport class MaskPipe implements PipeTransform {\n\tpublic constructor(private _maskService: MaskApplierService) {}\n\n\tpublic transform(\n\t\tvalue: string | number,\n\t\tmask: string | [string, IConfig['patterns']],\n\t\tthousandSeparator: string | null = null,\n\t): string {\n\t\tif (!value && typeof value !== 'number') {\n\t\t\treturn '';\n\t\t}\n\t\tif (thousandSeparator) {\n\t\t\tthis._maskService.thousandSeparator = thousandSeparator;\n\t\t}\n\t\tif (typeof mask === 'string') {\n\t\t\treturn this._maskService.applyMask(`${value}`, mask);\n\t\t}\n\t\treturn this._maskService.applyMaskWithPattern(`${value}`, mask);\n\t}\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { config, INITIAL_CONFIG, initialConfig, NEW_CONFIG, optionsConfig } from './config';\nimport { MaskApplierService } from './mask-applier.service';\nimport { MaskDirective } from './mask.directive';\nimport { MaskPipe } from './mask.pipe';\n/**\n * @internal\n */\nexport function _configFactory(\n\tinitConfig: optionsConfig,\n\tconfigValue: optionsConfig | (() => optionsConfig),\n): optionsConfig {\n\treturn configValue instanceof Function\n\t\t? { ...initConfig, ...configValue() }\n\t\t: { ...initConfig, ...configValue };\n}\n@NgModule({\n\texports: [MaskDirective, MaskPipe],\n\tdeclarations: [MaskDirective, MaskPipe],\n})\nexport class NgxMaskModule {\n\tpublic static forRoot(\n\t\tconfigValue?: optionsConfig | (() => optionsConfig),\n\t): ModuleWithProviders<NgxMaskModule> {\n\t\treturn {\n\t\t\tngModule: NgxMaskModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: NEW_CONFIG,\n\t\t\t\t\tuseValue: configValue,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: INITIAL_CONFIG,\n\t\t\t\t\tuseValue: initialConfig,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: config,\n\t\t\t\t\tuseFactory: _configFactory,\n\t\t\t\t\tdeps: [INITIAL_CONFIG, NEW_CONFIG],\n\t\t\t\t},\n\t\t\t\tMaskApplierService,\n\t\t\t],\n\t\t};\n\t}\n\n\tpublic static forChild(): ModuleWithProviders<NgxMaskModule> {\n\t\treturn {\n\t\t\tngModule: NgxMaskModule,\n\t\t};\n\t}\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\ndeclare var global: any;\n\nconst commonjsGlobal =\n\ttypeof globalThis !== 'undefined'\n\t\t? globalThis\n\t\t: typeof window !== 'undefined'\n\t\t? window\n\t\t: typeof global !== 'undefined'\n\t\t? global\n\t\t: typeof self !== 'undefined'\n\t\t? self\n\t\t: {};\n\n(function () {\n\tif (!commonjsGlobal.KeyboardEvent) {\n\t\tcommonjsGlobal.KeyboardEvent = function (_eventType: any, _init: any) {};\n\t}\n})();\n\nexport type CustomKeyboardEvent = KeyboardEvent;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.MaskService","i1.MaskApplierService"],"mappings":"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"}