ngx-mask 14.2.2 → 14.2.4
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.
- package/esm2020/lib/config.mjs +1 -1
- package/esm2020/lib/custom-keyboard-event.mjs +2 -1
- package/esm2020/lib/mask-applier.service.mjs +50 -35
- package/esm2020/lib/mask.directive.mjs +51 -33
- package/esm2020/lib/mask.pipe.mjs +4 -4
- package/esm2020/lib/mask.service.mjs +47 -25
- package/esm2020/lib/ngx-mask.module.mjs +5 -5
- package/fesm2015/ngx-mask.mjs +165 -103
- package/fesm2015/ngx-mask.mjs.map +1 -1
- package/fesm2020/ngx-mask.mjs +153 -97
- package/fesm2020/ngx-mask.mjs.map +1 -1
- package/lib/mask-applier.service.d.ts +1 -1
- package/lib/mask.directive.d.ts +5 -5
- package/lib/mask.service.d.ts +3 -3
- package/package.json +1 -1
|
@@ -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 suffix: string;\n prefix: string;\n thousandSeparator: string;\n decimalMarker: '.' | ',' | ['.', ','];\n clearIfNotMatch: boolean;\n showTemplate: boolean;\n showMaskTyped: boolean;\n placeHolderCharacter: string;\n shownMaskExpression: string;\n dropSpecialCharacters: boolean | string[];\n specialCharacters: string[];\n hiddenInput: boolean | undefined;\n validation: boolean;\n separatorLimit: string;\n allowNegativeNumbers: boolean;\n leadZeroDateTime: boolean;\n triggerOnMaskChange: boolean;\n maskFilled: EventEmitter<void>;\n patterns: {\n [character: string]: {\n pattern: RegExp;\n optional?: boolean;\n symbol?: string;\n };\n };\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 'initial ngx-mask config'\n);\n\nexport const initialConfig: IConfig = {\n suffix: '',\n prefix: '',\n thousandSeparator: ' ',\n decimalMarker: ['.', ','],\n clearIfNotMatch: false,\n showTemplate: false,\n showMaskTyped: false,\n placeHolderCharacter: '_',\n dropSpecialCharacters: true,\n hiddenInput: undefined,\n shownMaskExpression: '',\n separatorLimit: '',\n allowNegativeNumbers: false,\n validation: true,\n // eslint-disable-next-line @typescript-eslint/quotes\n specialCharacters: ['-', '/', '(', ')', '.', ':', ' ', '+', ',', '@', '[', ']', '\"', \"'\"],\n leadZeroDateTime: false,\n triggerOnMaskChange: false,\n maskFilled: new EventEmitter<void>(),\n patterns: {\n '0': {\n pattern: new RegExp('\\\\d'),\n },\n '9': {\n pattern: new RegExp('\\\\d'),\n optional: true,\n },\n X: {\n pattern: new RegExp('\\\\d'),\n symbol: '*',\n },\n A: {\n pattern: new RegExp('[a-zA-Z0-9]'),\n },\n S: {\n pattern: new RegExp('[a-zA-Z]'),\n },\n U: {\n pattern: new RegExp('[A-Z]'),\n },\n L: {\n pattern: new RegExp('[a-z]'),\n },\n d: {\n pattern: new RegExp('\\\\d'),\n },\n m: {\n pattern: new RegExp('\\\\d'),\n },\n M: {\n pattern: new RegExp('\\\\d'),\n },\n H: {\n pattern: new RegExp('\\\\d'),\n },\n h: {\n pattern: new RegExp('\\\\d'),\n },\n s: {\n pattern: new RegExp('\\\\d'),\n },\n },\n};\n\nexport const timeMasks: string[] = ['Hh:m0:s0', 'Hh:m0', 'm0:s0'];\n\nexport const withoutValidation: string[] = [\n 'percent',\n 'Hh',\n 's0',\n 'm0',\n 'separator',\n 'd0/M0/0000',\n 'd0/M0',\n 'd0',\n 'M0',\n];\n","import { Inject, Injectable } from '@angular/core';\nimport { config, IConfig } from './config';\n\n@Injectable()\nexport class MaskApplierService {\n public dropSpecialCharacters: IConfig['dropSpecialCharacters'];\n\n public hiddenInput: IConfig['hiddenInput'];\n\n public showTemplate!: IConfig['showTemplate'];\n\n public clearIfNotMatch!: IConfig['clearIfNotMatch'];\n\n public maskExpression = '';\n\n public actualValue = '';\n\n public shownMaskExpression = '';\n\n public maskSpecialCharacters!: IConfig['specialCharacters'];\n\n public maskAvailablePatterns!: IConfig['patterns'];\n\n public prefix!: IConfig['prefix'];\n\n public suffix!: IConfig['suffix'];\n\n public thousandSeparator!: IConfig['thousandSeparator'];\n\n public decimalMarker!: IConfig['decimalMarker'];\n\n public customPattern!: IConfig['patterns'];\n\n public ipError?: boolean;\n\n public cpfCnpjError?: boolean;\n\n public showMaskTyped!: IConfig['showMaskTyped'];\n\n public placeHolderCharacter!: IConfig['placeHolderCharacter'];\n\n public validation: IConfig['validation'];\n\n public separatorLimit: IConfig['separatorLimit'];\n\n public allowNegativeNumbers: IConfig['allowNegativeNumbers'];\n\n public leadZeroDateTime: IConfig['leadZeroDateTime'];\n\n private _shift!: Set<number>;\n\n public constructor(@Inject(config) protected _config: IConfig) {\n this._shift = new Set();\n this.clearIfNotMatch = this._config.clearIfNotMatch;\n this.dropSpecialCharacters = this._config.dropSpecialCharacters;\n this.maskSpecialCharacters = this._config.specialCharacters;\n this.maskAvailablePatterns = this._config.patterns;\n this.prefix = this._config.prefix;\n this.suffix = this._config.suffix;\n this.thousandSeparator = this._config.thousandSeparator;\n this.decimalMarker = this._config.decimalMarker;\n this.hiddenInput = this._config.hiddenInput;\n this.showMaskTyped = this._config.showMaskTyped;\n this.placeHolderCharacter = this._config.placeHolderCharacter;\n this.validation = this._config.validation;\n this.separatorLimit = this._config.separatorLimit;\n this.allowNegativeNumbers = this._config.allowNegativeNumbers;\n this.leadZeroDateTime = this._config.leadZeroDateTime;\n }\n\n public applyMaskWithPattern(\n inputValue: string,\n maskAndPattern: [string, IConfig['patterns']]\n ): string {\n const [mask, customPattern] = maskAndPattern;\n this.customPattern = customPattern;\n return this.applyMask(inputValue, mask);\n }\n\n public applyMask(\n inputValue: string | object | boolean | null | undefined,\n maskExpression: string,\n position = 0,\n justPasted = false,\n backspaced = false,\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb: (...args: any[]) => any = () => {}\n ): string {\n if (!maskExpression || typeof inputValue !== 'string') {\n return '';\n }\n let cursor = 0;\n let result = '';\n let multi = false;\n let backspaceShift = false;\n let shift = 1;\n let stepBack = false;\n if (inputValue.slice(0, this.prefix.length) === this.prefix) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.slice(this.prefix.length, inputValue.length);\n }\n if (!!this.suffix && inputValue?.length > 0) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkAndRemoveSuffix(inputValue);\n }\n const inputArray: string[] = inputValue.toString().split('');\n if (maskExpression === 'IP') {\n const valuesIP = inputValue.split('.');\n this.ipError = this._validIP(valuesIP);\n // eslint-disable-next-line no-param-reassign\n maskExpression = '099.099.099.099';\n }\n const arr: string[] = [];\n for (let i = 0; i < inputValue.length; i++) {\n if (inputValue[i]?.match('\\\\d')) {\n arr.push(inputValue[i] ?? '');\n }\n }\n if (maskExpression === 'CPF_CNPJ') {\n this.cpfCnpjError = arr.length !== 11 && arr.length !== 14;\n if (arr.length > 11) {\n // eslint-disable-next-line no-param-reassign\n maskExpression = '00.000.000/0000-00';\n } else {\n // eslint-disable-next-line no-param-reassign\n maskExpression = '000.000.000-00';\n }\n }\n if (maskExpression.startsWith('percent')) {\n if (\n inputValue.match('[a-z]|[A-Z]') ||\n // eslint-disable-next-line no-useless-escape\n inputValue.match(/[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,\\/.]/)\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._stripToDecimal(inputValue);\n const precision: number = this.getPrecision(maskExpression);\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n }\n if (\n inputValue.indexOf('.') > 0 &&\n !this.percentage(inputValue.substring(0, inputValue.indexOf('.')))\n ) {\n const base: string = inputValue.substring(0, inputValue.indexOf('.') - 1);\n // eslint-disable-next-line no-param-reassign\n inputValue = `${base}${inputValue.substring(\n inputValue.indexOf('.'),\n inputValue.length\n )}`;\n }\n if (this.percentage(inputValue)) {\n result = inputValue;\n } else {\n result = inputValue.substring(0, inputValue.length - 1);\n }\n } else if (maskExpression.startsWith('separator')) {\n if (\n inputValue.match('[wа-яА-Я]') ||\n inputValue.match('[ЁёА-я]') ||\n inputValue.match('[a-z]|[A-Z]') ||\n inputValue.match(/[-@#!$%\\\\^&*()_£¬'+|~=`{}\\]:\";<>.?/]/) ||\n inputValue.match('[^A-Za-z0-9,]')\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._stripToDecimal(inputValue);\n }\n\n // eslint-disable-next-line no-param-reassign\n inputValue =\n inputValue.length > 1 &&\n inputValue[0] === '0' &&\n inputValue[1] !== this.thousandSeparator &&\n !this._compareOrIncludes(\n inputValue[1],\n this.decimalMarker,\n this.thousandSeparator\n ) &&\n !backspaced\n ? inputValue.slice(0, inputValue.length - 1)\n : inputValue;\n\n if (backspaced) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._compareOrIncludes(\n inputValue[inputValue.length - 1],\n this.decimalMarker,\n this.thousandSeparator\n )\n ? inputValue.slice(0, inputValue.length - 1)\n : inputValue;\n }\n // TODO: we had different rexexps here for the different cases... but tests dont seam to bother - check this\n // separator: no COMMA, dot-sep: no SPACE, COMMA OK, comma-sep: no SPACE, COMMA OK\n\n const thousandSeparatorCharEscaped: string = this._charToRegExpExpression(\n this.thousandSeparator\n );\n let invalidChars: string = '@#!$%^&*()_+|~=`{}\\\\[\\\\]:\\\\s,\\\\.\";<>?\\\\/'.replace(\n thousandSeparatorCharEscaped,\n ''\n );\n //.replace(decimalMarkerEscaped, '');\n if (Array.isArray(this.decimalMarker)) {\n for (const marker of this.decimalMarker) {\n invalidChars = invalidChars.replace(this._charToRegExpExpression(marker), '');\n }\n } else {\n invalidChars = invalidChars.replace(\n this._charToRegExpExpression(this.decimalMarker),\n ''\n );\n }\n\n const invalidCharRegexp = new RegExp('[' + invalidChars + ']');\n\n if (\n inputValue.match(invalidCharRegexp) ||\n (inputValue.length === 1 &&\n this._compareOrIncludes(inputValue, this.decimalMarker, this.thousandSeparator))\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n\n const precision: number = this.getPrecision(maskExpression);\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n const strForSep: string = inputValue.replace(\n new RegExp(thousandSeparatorCharEscaped, 'g'),\n ''\n );\n result = this._formatWithSeparators(\n strForSep,\n this.thousandSeparator,\n this.decimalMarker,\n precision\n );\n const commaShift: number = result.indexOf(',') - inputValue.indexOf(',');\n const shiftStep: number = result.length - inputValue.length;\n\n if (shiftStep > 0 && result[position] !== ',') {\n backspaceShift = true;\n let _shift = 0;\n do {\n this._shift.add(position + _shift);\n _shift++;\n } while (_shift < shiftStep);\n } else if (\n (commaShift !== 0 &&\n position > 0 &&\n !(result.indexOf(',') >= position && position > 3)) ||\n (!(result.indexOf('.') >= position && position > 3) && shiftStep <= 0)\n ) {\n this._shift.clear();\n backspaceShift = true;\n shift = shiftStep;\n // eslint-disable-next-line no-param-reassign\n position += shiftStep;\n this._shift.add(position);\n } else {\n this._shift.clear();\n }\n } else {\n for (\n // eslint-disable-next-line\n let i: number = 0, inputSymbol: string = inputArray[0]!;\n i < inputArray.length;\n i++, inputSymbol = inputArray[i] ?? ''\n ) {\n if (cursor === maskExpression.length) {\n break;\n }\n if (\n this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? '') &&\n maskExpression[cursor + 1] === '?'\n ) {\n result += inputSymbol;\n cursor += 2;\n } else if (\n maskExpression[cursor + 1] === '*' &&\n multi &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? '')\n ) {\n result += inputSymbol;\n cursor += 3;\n multi = false;\n } else if (\n this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? '') &&\n maskExpression[cursor + 1] === '*'\n ) {\n result += inputSymbol;\n multi = true;\n } else if (\n maskExpression[cursor + 1] === '?' &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? '')\n ) {\n result += inputSymbol;\n cursor += 3;\n } else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? '')) {\n if (maskExpression[cursor] === 'H') {\n if (Number(inputSymbol) > 2) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n if (maskExpression[cursor] === 'h') {\n if (result === '2' && Number(inputSymbol) > 3) {\n cursor += 1;\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === 'm') {\n if (Number(inputSymbol) > 5) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n if (maskExpression[cursor] === 's') {\n if (Number(inputSymbol) > 5) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n const daysCount = 31;\n if (maskExpression[cursor] === 'd') {\n if (\n (Number(inputSymbol) > 3 && this.leadZeroDateTime) ||\n Number(inputValue.slice(cursor, cursor + 2)) > daysCount ||\n inputValue[cursor + 1] === '/'\n ) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n if (maskExpression[cursor] === 'M') {\n const monthsCount = 12;\n // mask without day\n const withoutDays: boolean =\n cursor === 0 &&\n (Number(inputSymbol) > 2 ||\n Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n inputValue[cursor + 1] === '/');\n // day<10 && month<12 for input\n const day1monthInput: boolean =\n inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n ((inputValue[cursor - 2] === '/' &&\n Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount &&\n inputValue[cursor] !== '/') ||\n inputValue[cursor] === '/' ||\n (inputValue[cursor - 3] === '/' &&\n Number(inputValue.slice(cursor - 2, cursor)) > monthsCount &&\n inputValue[cursor - 1] !== '/') ||\n inputValue[cursor - 1] === '/');\n // 10<day<31 && month<12 for input\n const day2monthInput: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n inputValue[cursor - 1] === '/' &&\n (Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n inputValue[cursor + 1] === '/');\n // day<10 && month<12 for paste whole data\n const day1monthPaste: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) > daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n !inputValue.slice(cursor - 2, cursor).includes('/') &&\n Number(inputValue.slice(cursor - 2, cursor)) > monthsCount;\n // 10<day<31 && month<12 for paste whole data\n const day2monthPaste: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n inputValue[cursor - 1] !== '/' &&\n Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount;\n\n if (\n (Number(inputSymbol) > 1 && this.leadZeroDateTime) ||\n withoutDays ||\n day1monthInput ||\n day2monthInput ||\n day1monthPaste ||\n day2monthPaste\n ) {\n cursor += 1;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n if (this.leadZeroDateTime) {\n result += '0';\n }\n continue;\n }\n }\n result += inputSymbol;\n cursor++;\n } else if (inputSymbol === ' ' && maskExpression[cursor] === ' ') {\n result += inputSymbol;\n cursor++;\n } else if (\n this.maskSpecialCharacters.indexOf(maskExpression[cursor] ?? '') !== -1\n ) {\n result += maskExpression[cursor];\n cursor++;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n } else if (\n this.maskSpecialCharacters.indexOf(inputSymbol) > -1 &&\n this.maskAvailablePatterns[maskExpression[cursor] ?? ''] &&\n this.maskAvailablePatterns[maskExpression[cursor] ?? '']?.optional\n ) {\n if (\n !!inputArray[cursor] &&\n maskExpression !== '099.099.099.099' &&\n maskExpression !== '000.000.000-00' &&\n maskExpression !== '00.000.000/0000-00' &&\n !maskExpression.match(/^9+\\.0+$/)\n ) {\n result += inputArray[cursor];\n }\n cursor++;\n i--;\n } else if (\n this.maskExpression[cursor + 1] === '*' &&\n this._findSpecialChar(this.maskExpression[cursor + 2] ?? '') &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi\n ) {\n cursor += 3;\n result += inputSymbol;\n } else if (\n this.maskExpression[cursor + 1] === '?' &&\n this._findSpecialChar(this.maskExpression[cursor + 2] ?? '') &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi\n ) {\n cursor += 3;\n result += inputSymbol;\n } else if (\n this.showMaskTyped &&\n this.maskSpecialCharacters.indexOf(inputSymbol) < 0 &&\n inputSymbol !== this.placeHolderCharacter\n ) {\n stepBack = true;\n }\n }\n }\n if (\n result.length + 1 === maskExpression.length &&\n this.maskSpecialCharacters.indexOf(maskExpression[maskExpression.length - 1] ?? '') !==\n -1\n ) {\n result += maskExpression[maskExpression.length - 1];\n }\n\n let newPosition: number = position + 1;\n\n while (this._shift.has(newPosition)) {\n shift++;\n newPosition++;\n }\n\n let actualShift: number =\n justPasted && !maskExpression.startsWith('separator')\n ? cursor\n : this._shift.has(position)\n ? shift\n : 0;\n if (stepBack) {\n actualShift--;\n }\n\n cb(actualShift, backspaceShift);\n if (shift < 0) {\n this._shift.clear();\n }\n let onlySpecial = false;\n if (backspaced) {\n onlySpecial = inputArray.every((char) => this.maskSpecialCharacters.includes(char));\n }\n let res = `${this.prefix}${onlySpecial ? '' : result}${this.suffix}`;\n if (result.length === 0) {\n res = `${this.prefix}${result}`;\n }\n return res;\n }\n\n public _findSpecialChar(inputSymbol: string): undefined | string {\n return this.maskSpecialCharacters.find((val: string) => val === inputSymbol);\n }\n\n protected _checkSymbolMask(inputSymbol: string, maskSymbol: string): boolean {\n this.maskAvailablePatterns = this.customPattern\n ? this.customPattern\n : this.maskAvailablePatterns;\n return (\n (this.maskAvailablePatterns[maskSymbol]?.pattern &&\n this.maskAvailablePatterns[maskSymbol]?.pattern.test(inputSymbol)) ??\n false\n );\n }\n\n private _formatWithSeparators = (\n str: string,\n thousandSeparatorChar: string,\n decimalChars: string | string[],\n precision: number\n ) => {\n let x: string[] = [];\n let decimalChar = '';\n if (Array.isArray(decimalChars)) {\n const regExp = new RegExp(\n decimalChars.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|')\n );\n x = str.split(regExp);\n decimalChar = str.match(regExp)?.[0] ?? '';\n } else {\n x = str.split(decimalChars);\n decimalChar = decimalChars;\n }\n const decimals: string = x.length > 1 ? `${decimalChar}${x[1]}` : '';\n let res: string = x[0] ?? '';\n const separatorLimit: string = this.separatorLimit.replace(/\\s/g, '');\n if (separatorLimit && +separatorLimit) {\n if (res[0] === '-') {\n res = `-${res.slice(1, res.length).slice(0, separatorLimit.length)}`;\n } else {\n res = res.slice(0, separatorLimit.length);\n }\n }\n const rgx = /(\\d+)(\\d{3})/;\n\n while (thousandSeparatorChar && rgx.test(res)) {\n res = res.replace(rgx, '$1' + thousandSeparatorChar + '$2');\n }\n\n if (precision === undefined) {\n return res + decimals;\n } else if (precision === 0) {\n return res;\n }\n return res + decimals.substring(0, precision + 1);\n };\n\n private percentage = (str: string): boolean => {\n return Number(str) >= 0 && Number(str) <= 100;\n };\n\n private getPrecision = (maskExpression: string): number => {\n const x: string[] = maskExpression.split('.');\n if (x.length > 1) {\n return Number(x[x.length - 1]);\n }\n\n return Infinity;\n };\n\n private checkAndRemoveSuffix = (inputValue: string): string => {\n for (let i = this.suffix?.length - 1; i >= 0; i--) {\n const substr = this.suffix.substring(i, this.suffix?.length);\n if (\n inputValue.includes(substr) &&\n i !== this.suffix?.length - 1 &&\n (i - 1 < 0 ||\n !inputValue.includes(this.suffix.substring(i - 1, this.suffix?.length)))\n ) {\n return inputValue.replace(substr, '');\n }\n }\n return inputValue;\n };\n\n private checkInputPrecision = (\n inputValue: string,\n precision: number,\n decimalMarker: IConfig['decimalMarker']\n ): string => {\n if (precision < Infinity) {\n // TODO need think about decimalMarker\n if (Array.isArray(decimalMarker)) {\n const marker = decimalMarker.find((dm) => dm !== this.thousandSeparator);\n // eslint-disable-next-line no-param-reassign\n decimalMarker = marker ? marker : decimalMarker[0];\n }\n const precisionRegEx = new RegExp(\n this._charToRegExpExpression(decimalMarker) + `\\\\d{${precision}}.*$`\n );\n\n const precisionMatch: RegExpMatchArray | null = inputValue.match(precisionRegEx) ?? [];\n const precisionMatchLength: number = precisionMatch[0]?.length ?? 0;\n if (precisionMatchLength - 1 > precision) {\n const diff = precisionMatchLength - 1 - precision;\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - diff);\n }\n if (\n precision === 0 &&\n this._compareOrIncludes(\n inputValue[inputValue.length - 1],\n decimalMarker,\n this.thousandSeparator\n )\n ) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n }\n return inputValue;\n };\n\n private _stripToDecimal(str: string): string {\n return str\n .split('')\n .filter((i: string, idx: number) => {\n const isDecimalMarker =\n typeof this.decimalMarker === 'string'\n ? i === this.decimalMarker\n : // TODO (inepipenko) use utility type\n this.decimalMarker.includes(i as ',' | '.');\n return (\n i.match('^-?\\\\d') ||\n i === this.thousandSeparator ||\n isDecimalMarker ||\n (i === '-' && idx === 0 && this.allowNegativeNumbers)\n );\n })\n .join('');\n }\n\n private _charToRegExpExpression(char: string): string {\n // if (Array.isArray(char)) {\n // \treturn char.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|');\n // }\n if (char) {\n const charsToEscape = '[\\\\^$.|?*+()';\n return char === ' ' ? '\\\\s' : charsToEscape.indexOf(char) >= 0 ? `\\\\${char}` : char;\n }\n return char;\n }\n\n private _shiftStep(maskExpression: string, cursor: number, inputLength: number) {\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor))\n ? inputLength\n : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n }\n\n protected _compareOrIncludes<T>(value: T, comparedValue: T | T[], excludedValue: T): boolean {\n return Array.isArray(comparedValue)\n ? comparedValue.filter((v) => v !== excludedValue).includes(value)\n : value === comparedValue;\n }\n\n private _validIP(valuesIP: string[]): boolean {\n return !(\n valuesIP.length === 4 &&\n !valuesIP.some((value: string, index: number) => {\n if (valuesIP.length !== index + 1) {\n return value === '' || Number(value) > 255;\n }\n return value === '' || Number(value.substring(0, 3)) > 255;\n })\n );\n }\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 public override maskExpression = '';\n\n public isNumberValue = false;\n\n public override placeHolderCharacter = '_';\n\n public maskIsShown = '';\n\n public selStart: number | null = null;\n\n public selEnd: number | null = null;\n\n /**\n * Whether we are currently in writeValue function, in this case when applying the mask we don't want to trigger onChange function,\n * since writeValue should be a one way only process of writing the DOM value based on the Angular model value.\n */\n public writingValue = false;\n\n public maskChanged = false;\n\n public triggerOnMaskChange = false;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n public onChange = (_: any) => {};\n\n public constructor(\n @Inject(DOCUMENT) private document: Document,\n @Inject(config) protected override _config: IConfig,\n private _elementRef: ElementRef,\n private _renderer: Renderer2\n ) {\n super(_config);\n }\n\n // eslint-disable-next-line complexity\n public override applyMask(\n inputValue: string,\n maskExpression: string,\n position = 0,\n justPasted = false,\n backspaced = false,\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb: (...args: any[]) => any = () => {}\n ): string {\n if (!maskExpression) {\n return inputValue !== this.actualValue ? this.actualValue : inputValue;\n }\n this.maskIsShown = this.showMaskTyped ? this.showMaskInInput() : '';\n if (this.maskExpression === 'IP' && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || '#');\n }\n if (this.maskExpression === 'CPF_CNPJ' && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || '#');\n }\n if (!inputValue && this.showMaskTyped) {\n this.formControlResult(this.prefix);\n return this.prefix + this.maskIsShown;\n }\n const getSymbol: string =\n !!inputValue && typeof this.selStart === 'number'\n ? inputValue[this.selStart] ?? ''\n : '';\n let newInputValue = '';\n if (this.hiddenInput !== undefined && !this.writingValue) {\n let actualResult: string[] = this.actualValue.split('');\n // eslint-disable @typescript-eslint/no-unused-expressions\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n inputValue !== '' && actualResult.length\n ? typeof this.selStart === 'number' && typeof this.selEnd === 'number'\n ? inputValue.length > actualResult.length\n ? actualResult.splice(this.selStart, 0, getSymbol)\n : inputValue.length < actualResult.length\n ? actualResult.length - inputValue.length === 1\n ? actualResult.splice(this.selStart - 1, 1)\n : actualResult.splice(this.selStart, this.selEnd - this.selStart)\n : null\n : null\n : (actualResult = []);\n if (this.showMaskTyped) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.removeMask(inputValue);\n }\n // eslint-enable @typescript-eslint/no-unused-expressions\n newInputValue =\n this.actualValue.length && actualResult.length <= inputValue.length\n ? this.shiftTypedSymbols(actualResult.join(''))\n : inputValue;\n }\n\n if (this.showMaskTyped) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.removeMask(inputValue);\n }\n\n newInputValue = Boolean(newInputValue) && newInputValue.length ? newInputValue : inputValue;\n\n const result: string = super.applyMask(\n newInputValue,\n maskExpression,\n position,\n justPasted,\n backspaced,\n cb\n );\n\n this.actualValue = this.getActualValue(result);\n // handle some separator implications:\n // a.) adjust decimalMarker default (. -> ,) if thousandSeparator is a dot\n if (this.thousandSeparator === '.' && this.decimalMarker === '.') {\n this.decimalMarker = ',';\n }\n\n // b) remove decimal marker from list of special characters to mask\n if (this.maskExpression.startsWith('separator') && this.dropSpecialCharacters === true) {\n this.maskSpecialCharacters = this.maskSpecialCharacters.filter(\n (item: string) =>\n !this._compareOrIncludes(item, this.decimalMarker, this.thousandSeparator) //item !== this.decimalMarker, // !\n );\n }\n this.formControlResult(result);\n if (!this.showMaskTyped) {\n if (this.hiddenInput) {\n return result && result.length\n ? this.hideInput(result, this.maskExpression)\n : result;\n }\n return result;\n }\n const resLen: number = result.length;\n const prefNmask: string = this.prefix + this.maskIsShown;\n\n if (this.maskExpression.includes('H')) {\n const countSkipedSymbol = this._numberSkipedSymbols(result);\n return result + prefNmask.slice(resLen + countSkipedSymbol);\n } else if (this.maskExpression === 'IP' || this.maskExpression === 'CPF_CNPJ') {\n return result + prefNmask;\n }\n return result + prefNmask.slice(resLen);\n }\n\n // get the number of characters that were shifted\n private _numberSkipedSymbols(value: string): number {\n const regex = /(^|\\D)(\\d\\D)/g;\n let match = regex.exec(value);\n let countSkipedSymbol = 0;\n while (match != null) {\n countSkipedSymbol += 1;\n match = regex.exec(value);\n }\n return countSkipedSymbol;\n }\n\n public applyValueChanges(\n position: number,\n justPasted: boolean,\n backspaced: boolean,\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n cb: (...args: any[]) => any = () => {}\n ): void {\n const formElement = this._elementRef.nativeElement;\n formElement.value = this.applyMask(\n formElement.value,\n this.maskExpression,\n position,\n justPasted,\n backspaced,\n cb\n );\n if (formElement === this._getActiveElement()) {\n return;\n }\n this.clearIfNotMatchFn();\n }\n\n public hideInput(inputValue: string, maskExpression: string): string {\n return inputValue\n .split('')\n .map((curr: string, index: number) => {\n if (\n this.maskAvailablePatterns &&\n this.maskAvailablePatterns[maskExpression[index] ?? ''] &&\n this.maskAvailablePatterns[maskExpression[index] ?? '']?.symbol\n ) {\n return this.maskAvailablePatterns[maskExpression[index] ?? '']?.symbol;\n }\n return curr;\n })\n .join('');\n }\n\n // this function is not necessary, it checks result against maskExpression\n public getActualValue(res: string): string {\n const compare: string[] = res.split('').filter((symbol: string, i: number) => {\n const maskChar = this.maskExpression[i] ?? '';\n return (\n this._checkSymbolMask(symbol, maskChar) ||\n (this.maskSpecialCharacters.includes(maskChar) && symbol === maskChar)\n );\n });\n if (compare.join('') === res) {\n return compare.join('');\n }\n return res;\n }\n\n public shiftTypedSymbols(inputValue: string): string {\n let symbolToReplace = '';\n const newInputValue: (string | undefined)[] =\n (inputValue &&\n inputValue.split('').map((currSymbol: string, index: number) => {\n if (\n this.maskSpecialCharacters.includes(inputValue[index + 1] ?? '') &&\n inputValue[index + 1] !== this.maskExpression[index + 1]\n ) {\n symbolToReplace = currSymbol;\n return inputValue[index + 1];\n }\n if (symbolToReplace.length) {\n const replaceSymbol: string = symbolToReplace;\n symbolToReplace = '';\n return replaceSymbol;\n }\n return currSymbol;\n })) ||\n [];\n return newInputValue.join('');\n }\n\n /**\n * Convert number value to string\n * 3.1415 -> '3.1415'\n * 1e-7 -> '0.0000001'\n */\n public numberToString(value: number | string): string {\n if (!value && value !== 0) {\n return String(value);\n }\n return Number(value).toLocaleString('fullwide', {\n useGrouping: false,\n maximumFractionDigits: 20,\n });\n }\n\n public showMaskInInput(inputVal?: string): string {\n if (this.showMaskTyped && !!this.shownMaskExpression) {\n if (this.maskExpression.length !== this.shownMaskExpression.length) {\n throw new Error('Mask expression must match mask placeholder length');\n } else {\n return this.shownMaskExpression;\n }\n } else if (this.showMaskTyped) {\n if (inputVal) {\n if (this.maskExpression === 'IP') {\n return this._checkForIp(inputVal);\n }\n if (this.maskExpression === 'CPF_CNPJ') {\n return this._checkForCpfCnpj(inputVal);\n }\n }\n return this.maskExpression.replace(/\\w/g, this.placeHolderCharacter);\n }\n return '';\n }\n\n public clearIfNotMatchFn(): void {\n const formElement = this._elementRef.nativeElement;\n if (\n this.clearIfNotMatch &&\n this.prefix.length + this.maskExpression.length + this.suffix.length !==\n formElement.value.replace(/_/g, '').length\n ) {\n this.formElementProperty = ['value', ''];\n this.applyMask(formElement.value, this.maskExpression);\n }\n }\n\n public set formElementProperty([name, value]: [string, string | boolean]) {\n Promise.resolve().then(() =>\n this._renderer.setProperty(this._elementRef.nativeElement, name, value)\n );\n }\n\n public checkSpecialCharAmount(mask: string): number {\n const chars: string[] = mask\n .split('')\n .filter((item: string) => this._findSpecialChar(item));\n return chars.length;\n }\n\n public removeMask(inputValue: string): string {\n return this._removeMask(\n this._removeSuffix(this._removePrefix(inputValue)),\n this.maskSpecialCharacters.concat('_').concat(this.placeHolderCharacter)\n );\n }\n\n private _checkForIp(inputVal: string): string {\n if (inputVal === '#') {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n const arr: string[] = [];\n for (let i = 0; i < inputVal.length; i++) {\n const value = inputVal[i] ?? '';\n if (!value) {\n continue;\n }\n if (value.match('\\\\d')) {\n arr.push(value);\n }\n }\n if (arr.length <= 3) {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n if (arr.length > 3 && arr.length <= 6) {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n if (arr.length > 6 && arr.length <= 9) {\n return this.placeHolderCharacter;\n }\n if (arr.length > 9 && arr.length <= 12) {\n return '';\n }\n return '';\n }\n\n private _checkForCpfCnpj(inputVal: string): string {\n const cpf =\n `${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n const cnpj =\n `${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `/${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n\n if (inputVal === '#') {\n return cpf;\n }\n const arr: string[] = [];\n for (let i = 0; i < inputVal.length; i++) {\n const value = inputVal[i] ?? '';\n if (!value) {\n continue;\n }\n if (value.match('\\\\d')) {\n arr.push(value);\n }\n }\n if (arr.length <= 3) {\n return cpf.slice(arr.length, cpf.length);\n }\n if (arr.length > 3 && arr.length <= 6) {\n return cpf.slice(arr.length + 1, cpf.length);\n }\n if (arr.length > 6 && arr.length <= 9) {\n return cpf.slice(arr.length + 2, cpf.length);\n }\n if (arr.length > 9 && arr.length < 11) {\n return cpf.slice(arr.length + 3, cpf.length);\n }\n if (arr.length === 11) {\n return '';\n }\n if (arr.length === 12) {\n if (inputVal.length === 17) {\n return cnpj.slice(16, cnpj.length);\n }\n return cnpj.slice(15, cnpj.length);\n }\n if (arr.length > 12 && arr.length <= 14) {\n return cnpj.slice(arr.length + 4, cnpj.length);\n }\n return '';\n }\n\n /**\n * Recursively determine the current active element by navigating the Shadow DOM until the Active Element is found.\n */\n private _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n const shadowRootEl = document?.activeElement?.shadowRoot;\n if (!shadowRootEl?.activeElement) {\n return document.activeElement;\n } else {\n return this._getActiveElement(shadowRootEl);\n }\n }\n\n /**\n * Propogates the input value back to the Angular model by triggering the onChange function. It won't do this if writingValue\n * is true. If that is true it means we are currently in the writeValue function, which is supposed to only update the actual\n * 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 * model value too. Therefore, we don't trigger onChange in this scenario.\n * @param inputValue the current form input value\n */\n private formControlResult(inputValue: string): void {\n if (this.writingValue || (!this.triggerOnMaskChange && this.maskChanged)) {\n this.maskChanged = false;\n return;\n }\n if (Array.isArray(this.dropSpecialCharacters)) {\n this.onChange(\n this._toNumber(\n this._removeMask(\n this._removeSuffix(this._removePrefix(inputValue)),\n this.dropSpecialCharacters\n )\n )\n );\n } else if (this.dropSpecialCharacters) {\n this.onChange(this._toNumber(this._checkSymbols(inputValue)));\n } else {\n this.onChange(this._removeSuffix(inputValue));\n }\n }\n\n private _toNumber(value: string | number | undefined | null) {\n if (!this.isNumberValue || value === '') {\n return value;\n }\n const num = Number(value);\n return Number.isNaN(num) ? value : num;\n }\n\n private _removeMask(value: string, specialCharactersForRemove: string[]): string {\n return value ? value.replace(this._regExpForRemove(specialCharactersForRemove), '') : value;\n }\n\n private _removePrefix(value: string): string {\n if (!this.prefix) {\n return value;\n }\n return value ? value.replace(this.prefix, '') : value;\n }\n\n private _removeSuffix(value: string): string {\n if (!this.suffix) {\n return value;\n }\n return value ? value.replace(this.suffix, '') : value;\n }\n\n private _retrieveSeparatorValue(result: string): string {\n return this._removeMask(\n this._removeSuffix(this._removePrefix(result)),\n this.maskSpecialCharacters\n );\n }\n\n private _regExpForRemove(specialCharactersForRemove: string[]): RegExp {\n return new RegExp(\n specialCharactersForRemove.map((item: string) => `\\\\${item}`).join('|'),\n 'gi'\n );\n }\n\n private _replaceDecimalMarkerToDot(value: string): string {\n const markers = Array.isArray(this.decimalMarker)\n ? this.decimalMarker\n : [this.decimalMarker];\n\n return value.replace(this._regExpForRemove(markers), '.');\n }\n\n private _checkSymbols(result: string): string | number | undefined | null {\n if (result === '') {\n return result;\n }\n\n const separatorPrecision: number | null = this._retrieveSeparatorPrecision(\n this.maskExpression\n );\n const separatorValue: string = this._replaceDecimalMarkerToDot(\n this._retrieveSeparatorValue(result)\n );\n\n if (!this.isNumberValue) {\n return separatorValue;\n }\n if (separatorPrecision) {\n if (result === this.decimalMarker) {\n return null;\n }\n return this._checkPrecision(this.maskExpression, separatorValue);\n } else {\n return Number(separatorValue);\n }\n }\n\n // TODO should think about helpers or separting decimal precision to own property\n private _retrieveSeparatorPrecision(maskExpretion: string): number | null {\n const matcher: RegExpMatchArray | null = maskExpretion.match(\n new RegExp(`^separator\\\\.([^d]*)`)\n );\n return matcher ? Number(matcher[1]) : null;\n }\n\n private _checkPrecision(separatorExpression: string, separatorValue: string): number | string {\n if (separatorExpression.indexOf('2') > 0) {\n return Number(separatorValue).toFixed(2);\n }\n return Number(separatorValue);\n }\n}\n","import {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n FormControl,\n} from '@angular/forms';\nimport {\n Directive,\n EventEmitter,\n forwardRef,\n HostListener,\n Inject,\n Input,\n OnChanges,\n Output,\n SimpleChanges,\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 selector: 'input[mask], textarea[mask]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaskDirective),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaskDirective),\n multi: true,\n },\n MaskService,\n ],\n exportAs: 'mask,ngxMask',\n})\nexport class MaskDirective implements ControlValueAccessor, OnChanges, Validator {\n // eslint-disable-next-line @angular-eslint/no-input-rename\n @Input('mask') public maskExpression: string | undefined | null = '';\n\n @Input() public specialCharacters: IConfig['specialCharacters'] = [];\n\n @Input() public patterns: IConfig['patterns'] = {};\n\n @Input() public prefix: IConfig['prefix'] = '';\n\n @Input() public suffix: IConfig['suffix'] = '';\n\n @Input() public thousandSeparator: IConfig['thousandSeparator'] = ' ';\n\n @Input() public decimalMarker: IConfig['decimalMarker'] = '.';\n\n @Input() public dropSpecialCharacters: IConfig['dropSpecialCharacters'] | null = null;\n\n @Input() public hiddenInput: IConfig['hiddenInput'] | null = null;\n\n @Input() public showMaskTyped: IConfig['showMaskTyped'] | null = null;\n\n @Input() public placeHolderCharacter: IConfig['placeHolderCharacter'] | null = null;\n\n @Input() public shownMaskExpression: IConfig['shownMaskExpression'] | null = null;\n\n @Input() public showTemplate: IConfig['showTemplate'] | null = null;\n\n @Input() public clearIfNotMatch: IConfig['clearIfNotMatch'] | null = null;\n\n @Input() public validation: IConfig['validation'] | null = null;\n\n @Input() public separatorLimit: IConfig['separatorLimit'] | null = null;\n\n @Input() public allowNegativeNumbers: IConfig['allowNegativeNumbers'] | null = null;\n\n @Input() public leadZeroDateTime: IConfig['leadZeroDateTime'] | null = null;\n\n @Input() public triggerOnMaskChange: IConfig['triggerOnMaskChange'] | null = null;\n\n @Output() public maskFilled: IConfig['maskFilled'] = new EventEmitter<void>();\n\n private _maskValue = '';\n\n private _inputValue!: string;\n\n private _position: number | null = null;\n\n private _start!: number;\n\n private _end!: number;\n\n private _code!: string;\n\n private _maskExpressionArray: string[] = [];\n\n private _justPasted = false;\n\n public constructor(\n @Inject(DOCUMENT) private document: Document,\n public _maskService: MaskService,\n @Inject(config) protected _config: IConfig\n ) {}\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-explicit-any\n public onChange = (_: any) => {};\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public onTouch = () => {};\n\n public ngOnChanges(changes: SimpleChanges): void {\n const {\n maskExpression,\n specialCharacters,\n patterns,\n prefix,\n suffix,\n thousandSeparator,\n decimalMarker,\n dropSpecialCharacters,\n hiddenInput,\n showMaskTyped,\n placeHolderCharacter,\n shownMaskExpression,\n showTemplate,\n clearIfNotMatch,\n validation,\n separatorLimit,\n allowNegativeNumbers,\n leadZeroDateTime,\n triggerOnMaskChange,\n } = changes;\n if (maskExpression) {\n if (\n maskExpression.currentValue !== maskExpression.previousValue &&\n !maskExpression.firstChange\n ) {\n this._maskService.maskChanged = true;\n }\n if (maskExpression.currentValue && maskExpression.currentValue.split('||').length > 1) {\n this._maskExpressionArray = maskExpression.currentValue\n .split('||')\n .sort((a: string, b: string) => {\n return a.length - b.length;\n });\n this._setMask();\n } else {\n this._maskExpressionArray = [];\n this._maskValue = maskExpression.currentValue || '';\n this._maskService.maskExpression = this._maskValue;\n }\n }\n if (specialCharacters) {\n if (!specialCharacters.currentValue || !Array.isArray(specialCharacters.currentValue)) {\n return;\n } else {\n this._maskService.maskSpecialCharacters = specialCharacters.currentValue || [];\n }\n }\n // Only overwrite the mask available patterns if a pattern has actually been passed in\n if (patterns && patterns.currentValue) {\n this._maskService.maskAvailablePatterns = patterns.currentValue;\n }\n if (prefix) {\n this._maskService.prefix = prefix.currentValue;\n }\n if (suffix) {\n this._maskService.suffix = suffix.currentValue;\n }\n if (thousandSeparator) {\n this._maskService.thousandSeparator = thousandSeparator.currentValue;\n }\n if (decimalMarker) {\n this._maskService.decimalMarker = decimalMarker.currentValue;\n }\n if (dropSpecialCharacters) {\n this._maskService.dropSpecialCharacters = dropSpecialCharacters.currentValue;\n }\n if (hiddenInput) {\n this._maskService.hiddenInput = hiddenInput.currentValue;\n }\n if (showMaskTyped) {\n this._maskService.showMaskTyped = showMaskTyped.currentValue;\n }\n if (placeHolderCharacter) {\n this._maskService.placeHolderCharacter = placeHolderCharacter.currentValue;\n }\n if (shownMaskExpression) {\n this._maskService.shownMaskExpression = shownMaskExpression.currentValue;\n }\n if (showTemplate) {\n this._maskService.showTemplate = showTemplate.currentValue;\n }\n if (clearIfNotMatch) {\n this._maskService.clearIfNotMatch = clearIfNotMatch.currentValue;\n }\n if (validation) {\n this._maskService.validation = validation.currentValue;\n }\n if (separatorLimit) {\n this._maskService.separatorLimit = separatorLimit.currentValue;\n }\n if (allowNegativeNumbers) {\n this._maskService.allowNegativeNumbers = allowNegativeNumbers.currentValue;\n if (this._maskService.allowNegativeNumbers) {\n this._maskService.maskSpecialCharacters =\n this._maskService.maskSpecialCharacters.filter((c: string) => c !== '-');\n }\n }\n if (leadZeroDateTime) {\n this._maskService.leadZeroDateTime = leadZeroDateTime.currentValue;\n }\n if (triggerOnMaskChange) {\n this._maskService.triggerOnMaskChange = triggerOnMaskChange.currentValue;\n }\n this._applyMask();\n }\n\n // eslint-disable-next-line complexity\n public validate({ value }: FormControl): ValidationErrors | null {\n if (!this._maskService.validation || !this._maskValue) {\n return null;\n }\n if (this._maskService.ipError) {\n return this._createValidationError(value);\n }\n if (this._maskService.cpfCnpjError) {\n return this._createValidationError(value);\n }\n if (this._maskValue.startsWith('separator')) {\n return null;\n }\n if (withoutValidation.includes(this._maskValue)) {\n return null;\n }\n if (this._maskService.clearIfNotMatch) {\n return null;\n }\n if (timeMasks.includes(this._maskValue)) {\n return this._validateTime(value);\n }\n if (value && value.toString().length >= 1) {\n let counterOfOpt = 0;\n for (const key in this._maskService.maskAvailablePatterns) {\n if (this._maskService.maskAvailablePatterns[key]?.optional) {\n if (this._maskValue.indexOf(key) !== this._maskValue.lastIndexOf(key)) {\n const opt: string = this._maskValue\n .split('')\n .filter((i: string) => i === key)\n .join('');\n counterOfOpt += opt.length;\n } else if (this._maskValue.indexOf(key) !== -1) {\n counterOfOpt++;\n }\n if (\n this._maskValue.indexOf(key) !== -1 &&\n value.toString().length >= this._maskValue.indexOf(key)\n ) {\n return null;\n }\n if (counterOfOpt === this._maskValue.length) {\n return null;\n }\n }\n }\n if (\n this._maskValue.indexOf('{') === 1 &&\n value.toString().length ===\n this._maskValue.length +\n Number((this._maskValue.split('{')[1] ?? '').split('}')[0]) -\n 4\n ) {\n return null;\n }\n if (this._maskValue.indexOf('*') === 1 || this._maskValue.indexOf('?') === 1) {\n return null;\n } else if (\n (this._maskValue.indexOf('*') > 1 &&\n value.toString().length < this._maskValue.indexOf('*')) ||\n (this._maskValue.indexOf('?') > 1 &&\n value.toString().length < this._maskValue.indexOf('?')) ||\n this._maskValue.indexOf('{') === 1\n ) {\n return this._createValidationError(value);\n }\n if (this._maskValue.indexOf('*') === -1 || this._maskValue.indexOf('?') === -1) {\n const length: number = this._maskService.dropSpecialCharacters\n ? this._maskValue.length -\n this._maskService.checkSpecialCharAmount(this._maskValue) -\n counterOfOpt\n : this._maskValue.length - counterOfOpt;\n if (value.toString().length < length) {\n return this._createValidationError(value);\n }\n }\n }\n if (value) {\n this.maskFilled.emit();\n return null;\n }\n return null;\n }\n\n @HostListener('paste')\n public onPaste() {\n this._justPasted = true;\n }\n\n @HostListener('ngModelChange', ['$event'])\n public onModelChange(value: string | undefined | null | number): void {\n // on form reset we need to update the actualValue\n if (\n (value === '' || value === null || value === undefined) &&\n this._maskService.actualValue\n ) {\n this._maskService.actualValue = this._maskService.getActualValue('');\n }\n }\n\n @HostListener('input', ['$event'])\n public onInput(e: CustomKeyboardEvent): void {\n const el: HTMLInputElement = e.target as HTMLInputElement;\n this._inputValue = el.value;\n\n this._setMask();\n\n if (!this._maskValue) {\n this.onChange(el.value);\n return;\n }\n const position: number =\n el.selectionStart === 1\n ? (el.selectionStart as number) + this._maskService.prefix.length\n : (el.selectionStart as number);\n let caretShift = 0;\n let backspaceShift = false;\n this._maskService.applyValueChanges(\n position,\n this._justPasted,\n this._code === 'Backspace' || this._code === 'Delete',\n (shift: number, _backspaceShift: boolean) => {\n this._justPasted = false;\n caretShift = shift;\n backspaceShift = _backspaceShift;\n }\n );\n // only set the selection if the element is active\n if (this._getActiveElement() !== el) {\n return;\n }\n this._position =\n this._position === 1 && this._inputValue.length === 1 ? null : this._position;\n let positionToApply: number = this._position\n ? this._inputValue.length + position + caretShift\n : position + (this._code === 'Backspace' && !backspaceShift ? 0 : caretShift);\n if (positionToApply > this._getActualInputLength()) {\n positionToApply = this._getActualInputLength();\n }\n if (positionToApply < 0) {\n positionToApply = 0;\n }\n el.setSelectionRange(positionToApply, positionToApply);\n this._position = null;\n }\n\n @HostListener('blur')\n public onBlur(): void {\n if (this._maskValue) {\n this._maskService.clearIfNotMatchFn();\n }\n this.onTouch();\n }\n\n @HostListener('click', ['$event'])\n public onClick(e: MouseEvent | CustomKeyboardEvent): void {\n if (!this._maskValue) {\n return;\n }\n const el: HTMLInputElement = e.target as HTMLInputElement;\n const posStart = 0;\n const posEnd = 0;\n if (\n el !== null &&\n el.selectionStart !== null &&\n el.selectionStart === el.selectionEnd &&\n el.selectionStart > this._maskService.prefix.length &&\n // eslint-disable-next-line\n (e as any).keyCode !== 38\n ) {\n if (this._maskService.showMaskTyped) {\n // We are showing the mask in the input\n this._maskService.maskIsShown = this._maskService.showMaskInInput();\n if (\n el.setSelectionRange &&\n this._maskService.prefix + this._maskService.maskIsShown === el.value\n ) {\n // the input ONLY contains the mask, so position the cursor at the start\n el.focus();\n el.setSelectionRange(posStart, posEnd);\n } else {\n // the input contains some characters already\n if (el.selectionStart > this._maskService.actualValue.length) {\n // if the user clicked beyond our value's length, position the cursor at the end of our value\n el.setSelectionRange(\n this._maskService.actualValue.length,\n this._maskService.actualValue.length\n );\n }\n }\n }\n }\n const nextValue: string | null =\n el &&\n (!el.value || el.value === this._maskService.prefix\n ? this._maskService.prefix + this._maskService.maskIsShown\n : el.value);\n /** Fix of cursor position jumping to end in most browsers no matter where cursor is inserted onFocus */\n if (el && el.value !== nextValue) {\n el.value = nextValue;\n }\n\n /** fix of cursor position with prefix when mouse click occur */\n if (\n el &&\n ((el.selectionStart as number) || (el.selectionEnd as number)) <=\n this._maskService.prefix.length\n ) {\n el.selectionStart = this._maskService.prefix.length;\n return;\n }\n /** select only inserted text */\n if (el && (el.selectionEnd as number) > this._getActualInputLength()) {\n el.selectionEnd = this._getActualInputLength();\n }\n }\n\n // eslint-disable-next-line complexity\n @HostListener('keydown', ['$event'])\n public onKeyDown(e: CustomKeyboardEvent): void {\n if (!this._maskValue) {\n return;\n }\n this._code = e.code ? e.code : e.key;\n const el: HTMLInputElement = e.target as HTMLInputElement;\n this._inputValue = el.value;\n\n this._setMask();\n\n if (e.keyCode === 38) {\n e.preventDefault();\n }\n if (e.keyCode === 37 || e.keyCode === 8 || e.keyCode === 46) {\n if (e.keyCode === 8 && el.value.length === 0) {\n el.selectionStart = el.selectionEnd;\n }\n if (e.keyCode === 8 && (el.selectionStart as number) !== 0) {\n // If specialChars is false, (shouldn't ever happen) then set to the defaults\n this.specialCharacters = this.specialCharacters?.length\n ? this.specialCharacters\n : this._config.specialCharacters;\n if (this.prefix.length > 1 && (el.selectionStart as number) <= this.prefix.length) {\n el.setSelectionRange(this.prefix.length, el.selectionEnd);\n } else {\n if (\n this._inputValue.length !== (el.selectionStart as number) &&\n (el.selectionStart as number) !== 1\n ) {\n while (\n this.specialCharacters.includes(\n (\n this._inputValue[(el.selectionStart as number) - 1] ?? ''\n ).toString()\n ) &&\n ((this.prefix.length >= 1 &&\n (el.selectionStart as number) > this.prefix.length) ||\n this.prefix.length === 0)\n ) {\n el.setSelectionRange(\n (el.selectionStart as number) - 1,\n el.selectionEnd\n );\n }\n }\n }\n }\n this.checkSelectionOnDeletion(el);\n if (\n this._maskService.prefix.length &&\n (el.selectionStart as number) <= this._maskService.prefix.length &&\n (el.selectionEnd as number) <= this._maskService.prefix.length\n ) {\n e.preventDefault();\n }\n const cursorStart: number | null = el.selectionStart;\n if (\n e.keyCode === 8 &&\n !el.readOnly &&\n cursorStart === 0 &&\n el.selectionEnd === el.value.length &&\n el.value.length !== 0\n ) {\n this._position = this._maskService.prefix ? this._maskService.prefix.length : 0;\n this._maskService.applyMask(\n this._maskService.prefix,\n this._maskService.maskExpression,\n this._position\n );\n }\n }\n if (\n !!this.suffix &&\n this.suffix.length > 1 &&\n this._inputValue.length - this.suffix.length < (el.selectionStart as number)\n ) {\n el.setSelectionRange(\n this._inputValue.length - this.suffix.length,\n this._inputValue.length\n );\n } else if (\n (e.keyCode === 65 && e.ctrlKey) ||\n (e.keyCode === 65 && e.metaKey) // Cmd + A (Mac)\n ) {\n el.setSelectionRange(0, this._getActualInputLength());\n e.preventDefault();\n }\n this._maskService.selStart = el.selectionStart;\n this._maskService.selEnd = el.selectionEnd;\n }\n\n /** It writes the value in the input */\n public async writeValue(\n inputValue: string | number | { value: string | number; disable?: boolean }\n ): Promise<void> {\n if (typeof inputValue === 'object' && inputValue !== null && 'value' in inputValue) {\n if ('disable' in inputValue) {\n this.setDisabledState(Boolean(inputValue.disable));\n }\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.value;\n }\n\n if (typeof inputValue === 'number' || this._maskValue.startsWith('separator')) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._maskService.numberToString(inputValue);\n if (!Array.isArray(this.decimalMarker)) {\n // eslint-disable-next-line no-param-reassign\n inputValue =\n this.decimalMarker !== '.'\n ? inputValue.replace('.', this.decimalMarker)\n : inputValue;\n }\n this._maskService.isNumberValue = true;\n }\n\n if (typeof inputValue !== 'string') {\n // eslint-disable-next-line no-param-reassign\n inputValue = '';\n }\n\n this._inputValue = inputValue;\n this._setMask();\n\n if (\n (inputValue && this._maskService.maskExpression) ||\n (this._maskService.maskExpression &&\n (this._maskService.prefix || this._maskService.showMaskTyped))\n ) {\n // Let the service we know we are writing value so that triggering onChange function won't happen during applyMask\n this._maskService.writingValue = true;\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(inputValue, this._maskService.maskExpression),\n ];\n // Let the service know we've finished writing value\n this._maskService.writingValue = false;\n } else {\n this._maskService.formElementProperty = ['value', inputValue];\n }\n this._inputValue = inputValue;\n }\n\n public registerOnChange(fn: typeof this.onChange): void {\n this._maskService.onChange = this.onChange = fn;\n }\n\n public registerOnTouched(fn: typeof this.onTouch): void {\n this.onTouch = fn;\n }\n\n private _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n const shadowRootEl = document?.activeElement?.shadowRoot;\n if (!shadowRootEl?.activeElement) {\n return document.activeElement;\n } else {\n return this._getActiveElement(shadowRootEl);\n }\n }\n\n public checkSelectionOnDeletion(el: HTMLInputElement): void {\n el.selectionStart = Math.min(\n Math.max(this.prefix.length, el.selectionStart as number),\n this._inputValue.length - this.suffix.length\n );\n el.selectionEnd = Math.min(\n Math.max(this.prefix.length, el.selectionEnd as number),\n this._inputValue.length - this.suffix.length\n );\n }\n\n /** It disables the input element */\n public setDisabledState(isDisabled: boolean): void {\n this._maskService.formElementProperty = ['disabled', isDisabled];\n }\n\n private _repeatPatternSymbols(maskExp: string): string {\n return (\n (maskExp.match(/{[0-9]+}/) &&\n maskExp\n .split('')\n .reduce((accum: string, currVal: string, index: number): string => {\n this._start = currVal === '{' ? index : this._start;\n\n if (currVal !== '}') {\n return this._maskService._findSpecialChar(currVal)\n ? accum + currVal\n : accum;\n }\n this._end = index;\n const repeatNumber = Number(maskExp.slice(this._start + 1, this._end));\n const replaceWith: string = new Array(repeatNumber + 1).join(\n maskExp[this._start - 1]\n );\n return accum + replaceWith;\n }, '')) ||\n maskExp\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private _applyMask(): any {\n this._maskService.maskExpression = this._repeatPatternSymbols(this._maskValue || '');\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(this._inputValue, this._maskService.maskExpression),\n ];\n }\n\n private _validateTime(value: string): ValidationErrors | null {\n const rowMaskLen: number = this._maskValue\n .split('')\n .filter((s: string) => s !== ':').length;\n if (!value) {\n return null; // Don't validate empty values to allow for optional form control\n }\n\n if (\n (+(value[value.length - 1] ?? -1) === 0 && value.length < rowMaskLen) ||\n value.length <= rowMaskLen - 2\n ) {\n return this._createValidationError(value);\n }\n\n return null;\n }\n\n private _getActualInputLength() {\n return (\n this._maskService.actualValue.length ||\n this._maskService.actualValue.length + this._maskService.prefix.length\n );\n }\n\n private _createValidationError(actualValue: string): ValidationErrors {\n return {\n mask: {\n requiredMask: this._maskValue,\n actualValue,\n },\n };\n }\n\n private _setMask() {\n if (this._maskExpressionArray.length > 0) {\n this._maskExpressionArray.some((mask): boolean | void => {\n const test =\n this._maskService.removeMask(this._inputValue)?.length <=\n this._maskService.removeMask(mask)?.length;\n if (this._inputValue && test) {\n this._maskValue = mask;\n this.maskExpression = mask;\n this._maskService.maskExpression = mask;\n return test;\n } else {\n const expression =\n this._maskExpressionArray[this._maskExpressionArray.length - 1] ?? '';\n this._maskValue =\n this.maskExpression =\n this._maskService.maskExpression =\n expression;\n }\n });\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { MaskApplierService } from './mask-applier.service';\nimport { IConfig } from './config';\n\n@Pipe({\n name: 'mask',\n pure: true,\n})\nexport class MaskPipe implements PipeTransform {\n public constructor(private _maskService: MaskApplierService) {}\n\n public transform(\n value: string | number,\n mask: string | [string, IConfig['patterns']],\n thousandSeparator: string | null = null\n ): string {\n if (!value && typeof value !== 'number') {\n return '';\n }\n if (thousandSeparator) {\n this._maskService.thousandSeparator = thousandSeparator;\n }\n if (typeof mask === 'string') {\n return this._maskService.applyMask(`${value}`, mask);\n }\n return this._maskService.applyMaskWithPattern(`${value}`, mask);\n }\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 initConfig: optionsConfig,\n configValue: optionsConfig | (() => optionsConfig)\n): optionsConfig {\n return configValue instanceof Function\n ? { ...initConfig, ...configValue() }\n : { ...initConfig, ...configValue };\n}\n@NgModule({\n exports: [MaskDirective, MaskPipe],\n declarations: [MaskDirective, MaskPipe],\n})\nexport class NgxMaskModule {\n public static forRoot(\n configValue?: optionsConfig | (() => optionsConfig)\n ): ModuleWithProviders<NgxMaskModule> {\n return {\n ngModule: NgxMaskModule,\n providers: [\n {\n provide: NEW_CONFIG,\n useValue: configValue,\n },\n {\n provide: INITIAL_CONFIG,\n useValue: initialConfig,\n },\n {\n provide: config,\n useFactory: _configFactory,\n deps: [INITIAL_CONFIG, NEW_CONFIG],\n },\n MaskApplierService,\n ],\n };\n }\n\n public static forChild(): ModuleWithProviders<NgxMaskModule> {\n return {\n ngModule: NgxMaskModule,\n };\n }\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\ndeclare let global: any;\n\nconst commonjsGlobal =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : typeof self !== 'undefined'\n ? self\n : {};\n\n(function () {\n if (!commonjsGlobal.KeyboardEvent) {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n commonjsGlobal.KeyboardEvent = function (_eventType: any, _init: any) {};\n }\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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"}
|