{"version":3,"sources":["node_modules/ngx-mask/fesm2022/ngx-mask.mjs"],"sourcesContent":["import * as i0 from '@angular/core';\nimport { InjectionToken, EventEmitter, inject, Injectable, ElementRef, Renderer2, makeEnvironmentProviders, Directive, Input, Output, HostListener, Pipe } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';\nconst NGX_MASK_CONFIG = new InjectionToken('ngx-mask config');\nconst NEW_CONFIG = new InjectionToken('new ngx-mask config');\nconst INITIAL_CONFIG = new InjectionToken('initial ngx-mask config');\nconst initialConfig = {\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 apm: false,\n leadZero: false,\n keepCharacterPositions: false,\n triggerOnMaskChange: false,\n inputTransformFn: value => value,\n outputTransformFn: value => value,\n maskFilled: new EventEmitter(),\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};\nconst timeMasks = [\"Hh:m0:s0\" /* MaskExpression.HOURS_MINUTES_SECONDS */, \"Hh:m0\" /* MaskExpression.HOURS_MINUTES */, \"m0:s0\" /* MaskExpression.MINUTES_SECONDS */];\nconst withoutValidation = [\"percent\" /* MaskExpression.PERCENT */, \"Hh\" /* MaskExpression.HOURS_HOUR */, \"s0\" /* MaskExpression.SECONDS */, \"m0\" /* MaskExpression.MINUTES */, \"separator\" /* MaskExpression.SEPARATOR */, \"d0/M0/0000\" /* MaskExpression.DAYS_MONTHS_YEARS */, \"d0/M0\" /* MaskExpression.DAYS_MONTHS */, \"d0\" /* MaskExpression.DAYS */, \"M0\" /* MaskExpression.MONTHS */];\nlet NgxMaskApplierService = /*#__PURE__*/(() => {\n class NgxMaskApplierService {\n constructor() {\n this._config = inject(NGX_MASK_CONFIG);\n this.dropSpecialCharacters = this._config.dropSpecialCharacters;\n this.hiddenInput = this._config.hiddenInput;\n this.clearIfNotMatch = this._config.clearIfNotMatch;\n this.specialCharacters = this._config.specialCharacters;\n this.patterns = 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.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 this.leadZero = this._config.leadZero;\n this.apm = this._config.apm;\n this.inputTransformFn = this._config.inputTransformFn;\n this.outputTransformFn = this._config.outputTransformFn;\n this.keepCharacterPositions = this._config.keepCharacterPositions;\n this._shift = new Set();\n this.plusOnePosition = false;\n this.maskExpression = '';\n this.actualValue = '';\n this.showKeepCharacterExp = '';\n this.shownMaskExpression = '';\n this.deletedSpecialCharacter = false;\n this._formatWithSeparators = (str, thousandSeparatorChar, decimalChars, precision) => {\n let x = [];\n let decimalChar = '';\n if (Array.isArray(decimalChars)) {\n const regExp = new RegExp(decimalChars.map(v => '[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v).join('|'));\n x = str.split(regExp);\n decimalChar = str.match(regExp)?.[0] ?? \"\" /* MaskExpression.EMPTY_STRING */;\n } else {\n x = str.split(decimalChars);\n decimalChar = decimalChars;\n }\n const decimals = x.length > 1 ? `${decimalChar}${x[1]}` : \"\" /* MaskExpression.EMPTY_STRING */;\n let res = x[0] ?? \"\" /* MaskExpression.EMPTY_STRING */;\n const separatorLimit = this.separatorLimit.replace(/\\s/g, \"\" /* MaskExpression.EMPTY_STRING */);\n if (separatorLimit && +separatorLimit) {\n if (res[0] === \"-\" /* MaskExpression.MINUS */) {\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 while (thousandSeparatorChar && rgx.test(res)) {\n res = res.replace(rgx, '$1' + thousandSeparatorChar + '$2');\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 this.percentage = str => {\n const sanitizedStr = str.replace(',', '.');\n const value = Number(this.allowNegativeNumbers && str.includes(\"-\" /* MaskExpression.MINUS */) ? sanitizedStr.slice(1, str.length) : sanitizedStr);\n return !isNaN(value) && value >= 0 && value <= 100;\n };\n this.getPrecision = maskExpression => {\n const x = maskExpression.split(\".\" /* MaskExpression.DOT */);\n if (x.length > 1) {\n return Number(x[x.length - 1]);\n }\n return Infinity;\n };\n this.checkAndRemoveSuffix = inputValue => {\n for (let i = this.suffix?.length - 1; i >= 0; i--) {\n const substr = this.suffix.substring(i, this.suffix?.length);\n if (inputValue.includes(substr) && i !== this.suffix?.length - 1 && (i - 1 < 0 || !inputValue.includes(this.suffix.substring(i - 1, this.suffix?.length)))) {\n return inputValue.replace(substr, \"\" /* MaskExpression.EMPTY_STRING */);\n }\n }\n return inputValue;\n };\n this.checkInputPrecision = (inputValue, precision, decimalMarker) => {\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(this._charToRegExpExpression(decimalMarker) + `\\\\d{${precision}}.*$`);\n const precisionMatch = inputValue.match(precisionRegEx);\n const precisionMatchLength = (precisionMatch && 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 (precision === 0 && this._compareOrIncludes(inputValue[inputValue.length - 1], decimalMarker, this.thousandSeparator)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n }\n return inputValue;\n };\n }\n applyMaskWithPattern(inputValue, maskAndPattern) {\n const [mask, customPattern] = maskAndPattern;\n this.customPattern = customPattern;\n return this.applyMask(inputValue, mask);\n }\n applyMask(inputValue, maskExpression, position = 0, justPasted = false, backspaced = false,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cb = () => {}) {\n if (!maskExpression || typeof inputValue !== 'string') {\n return \"\" /* MaskExpression.EMPTY_STRING */;\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 if (inputValue === '(' && this.prefix) {\n // eslint-disable-next-line no-param-reassign\n inputValue = '';\n }\n const inputArray = inputValue.toString().split(\"\" /* MaskExpression.EMPTY_STRING */);\n if (this.allowNegativeNumbers && inputValue.slice(cursor, cursor + 1) === \"-\" /* MaskExpression.MINUS */) {\n result += inputValue.slice(cursor, cursor + 1);\n }\n if (maskExpression === \"IP\" /* MaskExpression.IP */) {\n const valuesIP = inputValue.split(\".\" /* MaskExpression.DOT */);\n this.ipError = this._validIP(valuesIP);\n // eslint-disable-next-line no-param-reassign\n maskExpression = '099.099.099.099';\n }\n const arr = [];\n for (let i = 0; i < inputValue.length; i++) {\n if (inputValue[i]?.match('\\\\d')) {\n arr.push(inputValue[i] ?? \"\" /* MaskExpression.EMPTY_STRING */);\n }\n }\n if (maskExpression === \"CPF_CNPJ\" /* 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\" /* MaskExpression.PERCENT */)) {\n if (inputValue.match('[a-z]|[A-Z]') ||\n // eslint-disable-next-line no-useless-escape\n inputValue.match(/[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,\\/.]/) && !backspaced) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._stripToDecimal(inputValue);\n const precision = this.getPrecision(maskExpression);\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n }\n const decimalMarker = typeof this.decimalMarker === 'string' ? this.decimalMarker : \".\" /* MaskExpression.DOT */;\n if (inputValue.indexOf(decimalMarker) > 0 && !this.percentage(inputValue.substring(0, inputValue.indexOf(decimalMarker)))) {\n let base = inputValue.substring(0, inputValue.indexOf(decimalMarker) - 1);\n if (this.allowNegativeNumbers && inputValue.slice(cursor, cursor + 1) === \"-\" /* MaskExpression.MINUS */ && !backspaced) {\n base = inputValue.substring(0, inputValue.indexOf(decimalMarker));\n }\n // eslint-disable-next-line no-param-reassign\n inputValue = `${base}${inputValue.substring(inputValue.indexOf(decimalMarker), inputValue.length)}`;\n }\n let value = '';\n this.allowNegativeNumbers && inputValue.slice(cursor, cursor + 1) === \"-\" /* MaskExpression.MINUS */ ? value = `${\"-\" /* MaskExpression.MINUS */}${inputValue.slice(cursor + 1, cursor + inputValue.length)}` : value = inputValue;\n if (this.percentage(value)) {\n result = this._splitPercentZero(inputValue);\n } else {\n result = this._splitPercentZero(inputValue.substring(0, inputValue.length - 1));\n }\n } else if (maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */)) {\n if (inputValue.match('[wа-яА-Я]') || inputValue.match('[ЁёА-я]') || inputValue.match('[a-z]|[A-Z]') || inputValue.match(/[-@#!$%\\\\^&*()_£¬'+|~=`{}\\]:\";<>.?/]/) || inputValue.match('[^A-Za-z0-9,]')) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._stripToDecimal(inputValue);\n }\n const precision = this.getPrecision(maskExpression);\n const decimalMarker = Array.isArray(this.decimalMarker) ? \".\" /* MaskExpression.DOT */ : this.decimalMarker;\n if (precision === 0) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.allowNegativeNumbers ? inputValue.length > 2 && inputValue[0] === \"-\" /* MaskExpression.MINUS */ && inputValue[1] === \"0\" /* MaskExpression.NUMBER_ZERO */ && inputValue[2] !== this.thousandSeparator && inputValue[2] !== \",\" /* MaskExpression.COMMA */ && inputValue[2] !== \".\" /* MaskExpression.DOT */ ? '-' + inputValue.slice(2, inputValue.length) : inputValue[0] === \"0\" /* MaskExpression.NUMBER_ZERO */ && inputValue.length > 1 && inputValue[1] !== this.thousandSeparator && inputValue[1] !== \",\" /* MaskExpression.COMMA */ && inputValue[1] !== \".\" /* MaskExpression.DOT */ ? inputValue.slice(1, inputValue.length) : inputValue : inputValue.length > 1 && inputValue[0] === \"0\" /* MaskExpression.NUMBER_ZERO */ && inputValue[1] !== this.thousandSeparator && inputValue[1] !== \",\" /* MaskExpression.COMMA */ && inputValue[1] !== \".\" /* MaskExpression.DOT */ ? inputValue.slice(1, inputValue.length) : inputValue;\n } else {\n if (inputValue[0] === decimalMarker && inputValue.length > 1) {\n // eslint-disable-next-line no-param-reassign\n inputValue = \"0\" /* MaskExpression.NUMBER_ZERO */ + inputValue.slice(0, inputValue.length + 1);\n this.plusOnePosition = true;\n }\n if (inputValue[0] === \"0\" /* MaskExpression.NUMBER_ZERO */ && inputValue[1] !== decimalMarker && inputValue[1] !== this.thousandSeparator) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.length > 1 ? inputValue.slice(0, 1) + decimalMarker + inputValue.slice(1, inputValue.length + 1) : inputValue;\n this.plusOnePosition = true;\n }\n if (this.allowNegativeNumbers && inputValue[0] === \"-\" /* MaskExpression.MINUS */ && (inputValue[1] === decimalMarker || inputValue[1] === \"0\" /* MaskExpression.NUMBER_ZERO */)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue[1] === decimalMarker && inputValue.length > 2 ? inputValue.slice(0, 1) + \"0\" /* MaskExpression.NUMBER_ZERO */ + inputValue.slice(1, inputValue.length) : inputValue[1] === \"0\" /* MaskExpression.NUMBER_ZERO */ && inputValue.length > 2 && inputValue[2] !== decimalMarker ? inputValue.slice(0, 2) + decimalMarker + inputValue.slice(2, inputValue.length) : inputValue;\n this.plusOnePosition = true;\n }\n }\n if (backspaced) {\n const inputValueAfterZero = inputValue.slice(this._findFirstNonZeroDigitIndex(inputValue), inputValue.length);\n const positionOfZeroOrDecimalMarker = inputValue[position] === \"0\" /* MaskExpression.NUMBER_ZERO */ || inputValue[position] === decimalMarker;\n const zeroIndexNumberZero = inputValue[0] === \"0\" /* MaskExpression.NUMBER_ZERO */;\n const zeroIndexMinus = inputValue[0] === \"-\" /* MaskExpression.MINUS */;\n const zeroIndexThousand = inputValue[0] === this.thousandSeparator;\n const firstIndexDecimalMarker = inputValue[1] === decimalMarker;\n const firstIndexNumberZero = inputValue[1] === \"0\" /* MaskExpression.NUMBER_ZERO */;\n const secondIndexDecimalMarker = inputValue[2] === decimalMarker;\n if (zeroIndexNumberZero && firstIndexDecimalMarker && positionOfZeroOrDecimalMarker && position < 2) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValueAfterZero;\n }\n if (zeroIndexMinus && firstIndexNumberZero && secondIndexDecimalMarker && positionOfZeroOrDecimalMarker && position < 3) {\n // eslint-disable-next-line no-param-reassign\n inputValue = \"-\" /* MaskExpression.MINUS */ + inputValueAfterZero;\n }\n if (inputValueAfterZero !== \"-\" /* MaskExpression.MINUS */ && (position === 0 && (zeroIndexNumberZero || zeroIndexThousand) || this.allowNegativeNumbers && position === 1 && zeroIndexMinus && !firstIndexNumberZero)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = zeroIndexMinus ? \"-\" /* MaskExpression.MINUS */ + inputValueAfterZero : inputValueAfterZero;\n }\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 const thousandSeparatorCharEscaped = this._charToRegExpExpression(this.thousandSeparator);\n let invalidChars = '@#!$%^&*()_+|~=`{}\\\\[\\\\]:\\\\s,\\\\.\";<>?\\\\/'.replace(thousandSeparatorCharEscaped, '');\n //.replace(decimalMarkerEscaped, '');\n if (Array.isArray(this.decimalMarker)) {\n for (const marker of this.decimalMarker) {\n invalidChars = invalidChars.replace(this._charToRegExpExpression(marker), \"\" /* MaskExpression.EMPTY_STRING */);\n }\n } else {\n invalidChars = invalidChars.replace(this._charToRegExpExpression(this.decimalMarker), '');\n }\n const invalidCharRegexp = new RegExp('[' + invalidChars + ']');\n if (inputValue.match(invalidCharRegexp)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n // eslint-disable-next-line no-param-reassign\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n const strForSep = inputValue.replace(new RegExp(thousandSeparatorCharEscaped, 'g'), '');\n result = this._formatWithSeparators(strForSep, this.thousandSeparator, this.decimalMarker, precision);\n const commaShift = result.indexOf(\",\" /* MaskExpression.COMMA */) - inputValue.indexOf(\",\" /* MaskExpression.COMMA */);\n const shiftStep = result.length - inputValue.length;\n if (result[position - 1] === this.thousandSeparator && this.prefix && backspaced) {\n // eslint-disable-next-line no-param-reassign\n position = position - 1;\n } else if (shiftStep > 0 && result[position] !== this.thousandSeparator) {\n backspaceShift = true;\n let _shift = 0;\n do {\n this._shift.add(position + _shift);\n _shift++;\n } while (_shift < shiftStep);\n } else if (result[position - 1] === this.decimalMarker || shiftStep === -4 || shiftStep === -3 || result[position] === this.thousandSeparator) {\n this._shift.clear();\n this._shift.add(position - 1);\n } else if (commaShift !== 0 && position > 0 && !(result.indexOf(\",\" /* MaskExpression.COMMA */) >= position && position > 3) || !(result.indexOf(\".\" /* MaskExpression.DOT */) >= position && position > 3) && shiftStep <= 0) {\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 (let i = 0, inputSymbol = inputArray[0]; i < inputArray.length; i++, inputSymbol = inputArray[i] ?? \"\" /* MaskExpression.EMPTY_STRING */) {\n if (cursor === maskExpression.length) {\n break;\n }\n const symbolStarInPattern = \"*\" /* MaskExpression.SYMBOL_STAR */ in this.patterns;\n if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */) && maskExpression[cursor + 1] === \"?\" /* MaskExpression.SYMBOL_QUESTION */) {\n result += inputSymbol;\n cursor += 2;\n } else if (maskExpression[cursor + 1] === \"*\" /* MaskExpression.SYMBOL_STAR */ && multi && this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? \"\" /* MaskExpression.EMPTY_STRING */)) {\n result += inputSymbol;\n cursor += 3;\n multi = false;\n } else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */) && maskExpression[cursor + 1] === \"*\" /* MaskExpression.SYMBOL_STAR */ && !symbolStarInPattern) {\n result += inputSymbol;\n multi = true;\n } else if (maskExpression[cursor + 1] === \"?\" /* MaskExpression.SYMBOL_QUESTION */ && this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? \"\" /* MaskExpression.EMPTY_STRING */)) {\n result += inputSymbol;\n cursor += 3;\n } else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */)) {\n if (maskExpression[cursor] === \"H\" /* MaskExpression.HOURS */) {\n if (this.apm ? Number(inputSymbol) > 9 : Number(inputSymbol) > 2) {\n // eslint-disable-next-line no-param-reassign\n position = !this.leadZeroDateTime ? position + 1 : position;\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\" /* MaskExpression.HOUR */) {\n if (this.apm ? result.length === 1 && Number(result) > 1 || result === '1' && Number(inputSymbol) > 2 || inputValue.slice(cursor - 1, cursor).length === 1 && Number(inputValue.slice(cursor - 1, cursor)) > 2 || inputValue.slice(cursor - 1, cursor) === '1' && Number(inputSymbol) > 2 : result === '2' && Number(inputSymbol) > 3 || (result.slice(cursor - 2, cursor) === '2' || result.slice(cursor - 3, cursor) === '2' || result.slice(cursor - 4, cursor) === '2' || result.slice(cursor - 1, cursor) === '2') && Number(inputSymbol) > 3 && cursor > 10) {\n // eslint-disable-next-line no-param-reassign\n position = position + 1;\n cursor += 1;\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === \"m\" /* MaskExpression.MINUTE */ || maskExpression[cursor] === \"s\" /* MaskExpression.SECOND */) {\n if (Number(inputSymbol) > 5) {\n // eslint-disable-next-line no-param-reassign\n position = !this.leadZeroDateTime ? position + 1 : position;\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 const inputValueCursor = inputValue[cursor];\n const inputValueCursorPlusOne = inputValue[cursor + 1];\n const inputValueCursorPlusTwo = inputValue[cursor + 2];\n const inputValueCursorMinusOne = inputValue[cursor - 1];\n const inputValueCursorMinusTwo = inputValue[cursor - 2];\n const inputValueSliceMinusThreeMinusOne = inputValue.slice(cursor - 3, cursor - 1);\n const inputValueSliceMinusOnePlusOne = inputValue.slice(cursor - 1, cursor + 1);\n const inputValueSliceCursorPlusTwo = inputValue.slice(cursor, cursor + 2);\n const inputValueSliceMinusTwoCursor = inputValue.slice(cursor - 2, cursor);\n if (maskExpression[cursor] === \"d\" /* MaskExpression.DAY */) {\n const maskStartWithMonth = maskExpression.slice(0, 2) === \"M0\" /* MaskExpression.MONTHS */;\n const startWithMonthInput = maskExpression.slice(0, 2) === \"M0\" /* MaskExpression.MONTHS */ && this.specialCharacters.includes(inputValueCursorMinusTwo);\n if (Number(inputSymbol) > 3 && this.leadZeroDateTime || !maskStartWithMonth && (Number(inputValueSliceCursorPlusTwo) > daysCount || Number(inputValueSliceMinusOnePlusOne) > daysCount || this.specialCharacters.includes(inputValueCursorPlusOne)) || (startWithMonthInput ? Number(inputValueSliceMinusOnePlusOne) > daysCount || !this.specialCharacters.includes(inputValueCursor) && this.specialCharacters.includes(inputValueCursorPlusTwo) || this.specialCharacters.includes(inputValueCursor) : Number(inputValueSliceCursorPlusTwo) > daysCount || this.specialCharacters.includes(inputValueCursorPlusOne))) {\n // eslint-disable-next-line no-param-reassign\n position = !this.leadZeroDateTime ? position + 1 : position;\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\" /* MaskExpression.MONTH */) {\n const monthsCount = 12;\n // mask without day\n const withoutDays = cursor === 0 && (Number(inputSymbol) > 2 || Number(inputValueSliceCursorPlusTwo) > monthsCount || this.specialCharacters.includes(inputValueCursorPlusOne) && !backspaced);\n // day<10 && month<12 for input\n const specialChart = maskExpression.slice(cursor + 2, cursor + 3);\n const day1monthInput = inputValueSliceMinusThreeMinusOne.includes(specialChart) && maskExpression.includes('d0') && (this.specialCharacters.includes(inputValueCursorMinusTwo) && Number(inputValueSliceMinusOnePlusOne) > monthsCount && !this.specialCharacters.includes(inputValueCursor) || this.specialCharacters.includes(inputValueCursor));\n // month<12 && day<10 for input\n const day2monthInput = Number(inputValueSliceMinusThreeMinusOne) <= daysCount && !this.specialCharacters.includes(inputValueSliceMinusThreeMinusOne) && this.specialCharacters.includes(inputValueCursorMinusOne) && (Number(inputValueSliceCursorPlusTwo) > monthsCount || this.specialCharacters.includes(inputValueCursorPlusOne));\n // cursor === 5 && without days\n const day2monthInputDot = Number(inputValueSliceCursorPlusTwo) > monthsCount && cursor === 5 || this.specialCharacters.includes(inputValueCursorPlusOne) && cursor === 5;\n // // day<10 && month<12 for paste whole data\n const day1monthPaste = Number(inputValueSliceMinusThreeMinusOne) > daysCount && !this.specialCharacters.includes(inputValueSliceMinusThreeMinusOne) && !this.specialCharacters.includes(inputValueSliceMinusTwoCursor) && Number(inputValueSliceMinusTwoCursor) > monthsCount && maskExpression.includes('d0');\n // 10 monthsCount;\n if (Number(inputSymbol) > 1 && this.leadZeroDateTime || withoutDays || day1monthInput || day2monthPaste || day1monthPaste || day2monthInput || day2monthInputDot && !this.leadZeroDateTime) {\n // eslint-disable-next-line no-param-reassign\n position = !this.leadZeroDateTime ? position + 1 : position;\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 (this.specialCharacters.includes(inputSymbol) && maskExpression[cursor] === inputSymbol) {\n result += inputSymbol;\n cursor++;\n } else if (this.specialCharacters.indexOf(maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */) !== -1) {\n result += maskExpression[cursor];\n cursor++;\n this._shiftStep(maskExpression, cursor, inputArray.length);\n i--;\n } else if (maskExpression[cursor] === \"9\" /* MaskExpression.NUMBER_NINE */ && this.showMaskTyped) {\n this._shiftStep(maskExpression, cursor, inputArray.length);\n } else if (this.patterns[maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */] && this.patterns[maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */]?.optional) {\n if (!!inputArray[cursor] && maskExpression !== '099.099.099.099' && maskExpression !== '000.000.000-00' && maskExpression !== '00.000.000/0000-00' && !maskExpression.match(/^9+\\.0+$/) && !this.patterns[maskExpression[cursor] ?? \"\" /* MaskExpression.EMPTY_STRING */]?.optional) {\n result += inputArray[cursor];\n }\n if (maskExpression.includes(\"9\" /* MaskExpression.NUMBER_NINE */ + \"*\" /* MaskExpression.SYMBOL_STAR */) && maskExpression.includes(\"0\" /* MaskExpression.NUMBER_ZERO */ + \"*\" /* MaskExpression.SYMBOL_STAR */)) {\n cursor++;\n }\n cursor++;\n i--;\n } else if (this.maskExpression[cursor + 1] === \"*\" /* MaskExpression.SYMBOL_STAR */ && this._findSpecialChar(this.maskExpression[cursor + 2] ?? \"\" /* MaskExpression.EMPTY_STRING */) && this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] && multi) {\n cursor += 3;\n result += inputSymbol;\n } else if (this.maskExpression[cursor + 1] === \"?\" /* MaskExpression.SYMBOL_QUESTION */ && this._findSpecialChar(this.maskExpression[cursor + 2] ?? \"\" /* MaskExpression.EMPTY_STRING */) && this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] && multi) {\n cursor += 3;\n result += inputSymbol;\n } else if (this.showMaskTyped && this.specialCharacters.indexOf(inputSymbol) < 0 && inputSymbol !== this.placeHolderCharacter && this.placeHolderCharacter.length === 1) {\n stepBack = true;\n }\n }\n }\n if (result.length + 1 === maskExpression.length && this.specialCharacters.indexOf(maskExpression[maskExpression.length - 1] ?? \"\" /* MaskExpression.EMPTY_STRING */) !== -1) {\n result += maskExpression[maskExpression.length - 1];\n }\n let newPosition = position + 1;\n while (this._shift.has(newPosition)) {\n shift++;\n newPosition++;\n }\n let actualShift = justPasted && !maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) ? cursor : this._shift.has(position) ? shift : 0;\n if (stepBack) {\n actualShift--;\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.specialCharacters.includes(char));\n }\n let res = `${this.prefix}${onlySpecial ? \"\" /* MaskExpression.EMPTY_STRING */ : result}${this.showMaskTyped ? '' : this.suffix}`;\n if (result.length === 0) {\n res = !this.dropSpecialCharacters ? `${this.prefix}${result}` : `${result}`;\n }\n const isSpecialCharacterMaskFirstSymbol = inputValue.length === 1 && this.specialCharacters.includes(maskExpression[0]) && inputValue !== maskExpression[0];\n if (!this._checkSymbolMask(inputValue, maskExpression[1]) && isSpecialCharacterMaskFirstSymbol) {\n return '';\n }\n if (result.includes(\"-\" /* MaskExpression.MINUS */) && this.prefix && this.allowNegativeNumbers) {\n if (backspaced && result === \"-\" /* MaskExpression.MINUS */) {\n return '';\n }\n res = `${\"-\" /* MaskExpression.MINUS */}${this.prefix}${result.split(\"-\" /* MaskExpression.MINUS */).join(\"\" /* MaskExpression.EMPTY_STRING */)}${this.suffix}`;\n }\n return res;\n }\n _findDropSpecialChar(inputSymbol) {\n if (Array.isArray(this.dropSpecialCharacters)) {\n return this.dropSpecialCharacters.find(val => val === inputSymbol);\n }\n return this._findSpecialChar(inputSymbol);\n }\n _findSpecialChar(inputSymbol) {\n return this.specialCharacters.find(val => val === inputSymbol);\n }\n _checkSymbolMask(inputSymbol, maskSymbol) {\n this.patterns = this.customPattern ? this.customPattern : this.patterns;\n return (this.patterns[maskSymbol]?.pattern && this.patterns[maskSymbol]?.pattern.test(inputSymbol)) ?? false;\n }\n _stripToDecimal(str) {\n return str.split(\"\" /* MaskExpression.EMPTY_STRING */).filter((i, idx) => {\n const isDecimalMarker = typeof this.decimalMarker === 'string' ? i === this.decimalMarker :\n // TODO (inepipenko) use utility type\n this.decimalMarker.includes(i);\n return i.match('^-?\\\\d') || i === this.thousandSeparator || isDecimalMarker || i === \"-\" /* MaskExpression.MINUS */ && idx === 0 && this.allowNegativeNumbers;\n }).join(\"\" /* MaskExpression.EMPTY_STRING */);\n }\n _charToRegExpExpression(char) {\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 _shiftStep(maskExpression, cursor, inputLength) {\n const shiftStep = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputLength : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n }\n _compareOrIncludes(value, comparedValue, excludedValue) {\n return Array.isArray(comparedValue) ? comparedValue.filter(v => v !== excludedValue).includes(value) : value === comparedValue;\n }\n _validIP(valuesIP) {\n return !(valuesIP.length === 4 && !valuesIP.some((value, index) => {\n if (valuesIP.length !== index + 1) {\n return value === \"\" /* MaskExpression.EMPTY_STRING */ || Number(value) > 255;\n }\n return value === \"\" /* MaskExpression.EMPTY_STRING */ || Number(value.substring(0, 3)) > 255;\n }));\n }\n _splitPercentZero(value) {\n if (value === \"-\" /* MaskExpression.MINUS */ && this.allowNegativeNumbers) {\n return value;\n }\n const decimalIndex = typeof this.decimalMarker === 'string' ? value.indexOf(this.decimalMarker) : value.indexOf(\".\" /* MaskExpression.DOT */);\n const emptyOrMinus = this.allowNegativeNumbers && value.includes(\"-\" /* MaskExpression.MINUS */) ? '-' : '';\n if (decimalIndex === -1) {\n const parsedValue = parseInt(emptyOrMinus ? value.slice(1, value.length) : value, 10);\n return isNaN(parsedValue) ? \"\" /* MaskExpression.EMPTY_STRING */ : `${emptyOrMinus}${parsedValue}`;\n } else {\n const integerPart = parseInt(value.replace('-', '').substring(0, decimalIndex), 10);\n const decimalPart = value.substring(decimalIndex + 1);\n const integerString = isNaN(integerPart) ? '' : integerPart.toString();\n const decimal = typeof this.decimalMarker === 'string' ? this.decimalMarker : \".\" /* MaskExpression.DOT */;\n return integerString === \"\" /* MaskExpression.EMPTY_STRING */ ? \"\" /* MaskExpression.EMPTY_STRING */ : `${emptyOrMinus}${integerString}${decimal}${decimalPart}`;\n }\n }\n _findFirstNonZeroDigitIndex(inputString) {\n for (let i = 0; i < inputString.length; i++) {\n const char = inputString[i];\n if (char && char >= '1' && char <= '9') {\n return i;\n }\n }\n return -1;\n }\n static {\n this.ɵfac = function NgxMaskApplierService_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgxMaskApplierService)();\n };\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgxMaskApplierService,\n factory: NgxMaskApplierService.ɵfac\n });\n }\n }\n return NgxMaskApplierService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgxMaskService = /*#__PURE__*/(() => {\n class NgxMaskService extends NgxMaskApplierService {\n constructor() {\n super(...arguments);\n this.isNumberValue = false;\n this.maskIsShown = '';\n this.selStart = null;\n this.selEnd = null;\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 this.writingValue = false;\n this.maskChanged = false;\n this._maskExpressionArray = [];\n this.triggerOnMaskChange = false;\n this._previousValue = '';\n this._currentValue = '';\n this._emitValue = false;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.onChange = _ => {};\n this._elementRef = inject(ElementRef, {\n optional: true\n });\n this.document = inject(DOCUMENT);\n this._config = inject(NGX_MASK_CONFIG);\n this._renderer = inject(Renderer2, {\n optional: true\n });\n }\n applyMask(inputValue, maskExpression, position = 0, justPasted = false, backspaced = false,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cb = () => {}) {\n if (!maskExpression) {\n return inputValue !== this.actualValue ? this.actualValue : inputValue;\n }\n this.maskIsShown = this.showMaskTyped ? this.showMaskInInput() : \"\" /* MaskExpression.EMPTY_STRING */;\n if (this.maskExpression === \"IP\" /* MaskExpression.IP */ && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || \"#\" /* MaskExpression.HASH */);\n }\n if (this.maskExpression === \"CPF_CNPJ\" /* MaskExpression.CPF_CNPJ */ && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || \"#\" /* MaskExpression.HASH */);\n }\n if (!inputValue && this.showMaskTyped) {\n this.formControlResult(this.prefix);\n return `${this.prefix}${this.maskIsShown}${this.suffix}`;\n }\n const getSymbol = !!inputValue && typeof this.selStart === 'number' ? inputValue[this.selStart] ?? \"\" /* MaskExpression.EMPTY_STRING */ : \"\" /* MaskExpression.EMPTY_STRING */;\n let newInputValue = '';\n if (this.hiddenInput !== undefined && !this.writingValue) {\n let actualResult = inputValue && inputValue.length === 1 ? inputValue.split(\"\" /* MaskExpression.EMPTY_STRING */) : this.actualValue.split(\"\" /* MaskExpression.EMPTY_STRING */);\n // eslint-disable @typescript-eslint/no-unused-expressions\n if (typeof this.selStart === 'object' && typeof this.selEnd === 'object') {\n this.selStart = Number(this.selStart);\n this.selEnd = Number(this.selEnd);\n } else {\n inputValue !== \"\" /* MaskExpression.EMPTY_STRING */ && actualResult.length ? typeof this.selStart === 'number' && typeof this.selEnd === 'number' ? inputValue.length > actualResult.length ? actualResult.splice(this.selStart, 0, getSymbol) : inputValue.length < actualResult.length ? actualResult.length - inputValue.length === 1 ? backspaced ? actualResult.splice(this.selStart - 1, 1) : actualResult.splice(inputValue.length - 1, 1) : actualResult.splice(this.selStart, this.selEnd - this.selStart) : null : null : actualResult = [];\n }\n if (this.showMaskTyped) {\n if (!this.hiddenInput) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.removeMask(inputValue);\n }\n }\n // eslint-enable @typescript-eslint/no-unused-expressions\n newInputValue = this.actualValue.length && actualResult.length <= inputValue.length ? this.shiftTypedSymbols(actualResult.join(\"\" /* MaskExpression.EMPTY_STRING */)) : inputValue;\n }\n if (justPasted && (this.hiddenInput || !this.hiddenInput)) {\n newInputValue = inputValue;\n }\n if (backspaced && this.specialCharacters.indexOf(this.maskExpression[position] ?? \"\" /* MaskExpression.EMPTY_STRING */) !== -1 && this.showMaskTyped && !this.prefix) {\n newInputValue = this._currentValue;\n }\n if (this.deletedSpecialCharacter && position) {\n if (this.specialCharacters.includes(this.actualValue.slice(position, position + 1))) {\n // eslint-disable-next-line no-param-reassign\n position = position + 1;\n } else if (maskExpression.slice(position - 1, position + 1) !== \"M0\" /* MaskExpression.MONTHS */) {\n // eslint-disable-next-line no-param-reassign\n position = position - 2;\n }\n this.deletedSpecialCharacter = false;\n }\n if (this.showMaskTyped && this.placeHolderCharacter.length === 1 && !this.leadZeroDateTime) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this.removeMask(inputValue);\n }\n if (this.maskChanged) {\n newInputValue = inputValue;\n } else {\n newInputValue = Boolean(newInputValue) && newInputValue.length ? newInputValue : inputValue;\n }\n if (this.showMaskTyped && this.keepCharacterPositions && this.actualValue && !justPasted && !this.writingValue) {\n const value = this.dropSpecialCharacters ? this.removeMask(this.actualValue) : this.actualValue;\n this.formControlResult(value);\n return this.actualValue ? this.actualValue : `${this.prefix}${this.maskIsShown}${this.suffix}`;\n }\n const result = super.applyMask(newInputValue, maskExpression, position, justPasted, backspaced, cb);\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 === \".\" /* MaskExpression.DOT */ && this.decimalMarker === \".\" /* MaskExpression.DOT */) {\n this.decimalMarker = \",\" /* MaskExpression.COMMA */;\n }\n // b) remove decimal marker from list of special characters to mask\n if (this.maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) && this.dropSpecialCharacters === true) {\n this.specialCharacters = this.specialCharacters.filter(item => !this._compareOrIncludes(item, this.decimalMarker, this.thousandSeparator) //item !== this.decimalMarker, // !\n );\n }\n if (result || result === '') {\n this._previousValue = this._currentValue;\n this._currentValue = result;\n this._emitValue = this._previousValue !== this._currentValue || this.maskChanged || this._previousValue === this._currentValue && justPasted;\n }\n this._emitValue ? this.writingValue && this.triggerOnMaskChange ? requestAnimationFrame(() => this.formControlResult(result)) : this.formControlResult(result) : '';\n if (!this.showMaskTyped || this.showMaskTyped && this.hiddenInput) {\n if (this.hiddenInput) {\n if (backspaced) {\n return this.hideInput(result, this.maskExpression);\n }\n return `${this.hideInput(result, this.maskExpression)}${this.maskIsShown.slice(result.length)}`;\n }\n return result;\n }\n const resLen = result.length;\n const prefNmask = `${this.prefix}${this.maskIsShown}${this.suffix}`;\n if (this.maskExpression.includes(\"H\" /* MaskExpression.HOURS */)) {\n const countSkipedSymbol = this._numberSkipedSymbols(result);\n return `${result}${prefNmask.slice(resLen + countSkipedSymbol)}`;\n } else if (this.maskExpression === \"IP\" /* MaskExpression.IP */ || this.maskExpression === \"CPF_CNPJ\" /* MaskExpression.CPF_CNPJ */) {\n return `${result}${prefNmask}`;\n }\n return `${result}${prefNmask.slice(resLen)}`;\n }\n // get the number of characters that were shifted\n _numberSkipedSymbols(value) {\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 applyValueChanges(position, justPasted, backspaced,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cb = () => {}) {\n const formElement = this._elementRef?.nativeElement;\n if (!formElement) {\n return;\n }\n formElement.value = this.applyMask(formElement.value, this.maskExpression, position, justPasted, backspaced, cb);\n if (formElement === this._getActiveElement()) {\n return;\n }\n this.clearIfNotMatchFn();\n }\n hideInput(inputValue, maskExpression) {\n return inputValue.split(\"\" /* MaskExpression.EMPTY_STRING */).map((curr, index) => {\n if (this.patterns && this.patterns[maskExpression[index] ?? \"\" /* MaskExpression.EMPTY_STRING */] && this.patterns[maskExpression[index] ?? \"\" /* MaskExpression.EMPTY_STRING */]?.symbol) {\n return this.patterns[maskExpression[index] ?? \"\" /* MaskExpression.EMPTY_STRING */]?.symbol;\n }\n return curr;\n }).join(\"\" /* MaskExpression.EMPTY_STRING */);\n }\n // this function is not necessary, it checks result against maskExpression\n getActualValue(res) {\n const compare = res.split(\"\" /* MaskExpression.EMPTY_STRING */).filter((symbol, i) => {\n const maskChar = this.maskExpression[i] ?? \"\" /* MaskExpression.EMPTY_STRING */;\n return this._checkSymbolMask(symbol, maskChar) || this.specialCharacters.includes(maskChar) && symbol === maskChar;\n });\n if (compare.join(\"\" /* MaskExpression.EMPTY_STRING */) === res) {\n return compare.join(\"\" /* MaskExpression.EMPTY_STRING */);\n }\n return res;\n }\n shiftTypedSymbols(inputValue) {\n let symbolToReplace = '';\n const newInputValue = inputValue && inputValue.split(\"\" /* MaskExpression.EMPTY_STRING */).map((currSymbol, index) => {\n if (this.specialCharacters.includes(inputValue[index + 1] ?? \"\" /* MaskExpression.EMPTY_STRING */) && inputValue[index + 1] !== this.maskExpression[index + 1]) {\n symbolToReplace = currSymbol;\n return inputValue[index + 1];\n }\n if (symbolToReplace.length) {\n const replaceSymbol = symbolToReplace;\n symbolToReplace = \"\" /* MaskExpression.EMPTY_STRING */;\n return replaceSymbol;\n }\n return currSymbol;\n }) || [];\n return newInputValue.join(\"\" /* MaskExpression.EMPTY_STRING */);\n }\n /**\n * Convert number value to string\n * 3.1415 -> '3.1415'\n * 1e-7 -> '0.0000001'\n */\n numberToString(value) {\n if (!value && value !== 0 || this.maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) && (this.leadZero || !this.dropSpecialCharacters) || this.maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) && this.separatorLimit.length > 14 && String(value).length > 14) {\n return String(value);\n }\n return Number(value).toLocaleString('fullwide', {\n useGrouping: false,\n maximumFractionDigits: 20\n }).replace(`/${\"-\" /* MaskExpression.MINUS */}/`, \"-\" /* MaskExpression.MINUS */);\n }\n showMaskInInput(inputVal) {\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\" /* MaskExpression.IP */) {\n return this._checkForIp(inputVal);\n }\n if (this.maskExpression === \"CPF_CNPJ\" /* MaskExpression.CPF_CNPJ */) {\n return this._checkForCpfCnpj(inputVal);\n }\n }\n if (this.placeHolderCharacter.length === this.maskExpression.length) {\n return this.placeHolderCharacter;\n }\n return this.maskExpression.replace(/\\w/g, this.placeHolderCharacter);\n }\n return '';\n }\n clearIfNotMatchFn() {\n const formElement = this._elementRef?.nativeElement;\n if (!formElement) {\n return;\n }\n if (this.clearIfNotMatch && this.prefix.length + this.maskExpression.length + this.suffix.length !== formElement.value.replace(this.placeHolderCharacter, \"\" /* MaskExpression.EMPTY_STRING */).length) {\n this.formElementProperty = ['value', \"\" /* MaskExpression.EMPTY_STRING */];\n this.applyMask('', this.maskExpression);\n }\n }\n set formElementProperty([name, value]) {\n if (!this._renderer || !this._elementRef) {\n return;\n }\n //[TODO]: andriikamaldinov1 find better solution\n Promise.resolve().then(() => this._renderer?.setProperty(this._elementRef?.nativeElement, name, value));\n }\n checkDropSpecialCharAmount(mask) {\n const chars = mask.split(\"\" /* MaskExpression.EMPTY_STRING */).filter(item => this._findDropSpecialChar(item));\n return chars.length;\n }\n removeMask(inputValue) {\n return this._removeMask(this._removeSuffix(this._removePrefix(inputValue)), this.specialCharacters.concat('_').concat(this.placeHolderCharacter));\n }\n _checkForIp(inputVal) {\n if (inputVal === \"#\" /* MaskExpression.HASH */) {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n const arr = [];\n for (let i = 0; i < inputVal.length; i++) {\n const value = inputVal[i] ?? \"\" /* MaskExpression.EMPTY_STRING */;\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 _checkForCpfCnpj(inputVal) {\n const cpf = `${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` + `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` + `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` + `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n const cnpj = `${this.placeHolderCharacter}${this.placeHolderCharacter}` + `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` + `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` + `/${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` + `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n if (inputVal === \"#\" /* MaskExpression.HASH */) {\n return cpf;\n }\n const arr = [];\n for (let i = 0; i < inputVal.length; i++) {\n const value = inputVal[i] ?? \"\" /* MaskExpression.EMPTY_STRING */;\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 * Recursively determine the current active element by navigating the Shadow DOM until the Active Element is found.\n */\n _getActiveElement(document = this.document) {\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 * 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 formControlResult(inputValue) {\n if (this.writingValue || !this.triggerOnMaskChange && this.maskChanged) {\n this.triggerOnMaskChange && this.maskChanged ? this.onChange(this.outputTransformFn(this._toNumber(this._checkSymbols(this._removeSuffix(this._removePrefix(inputValue)))))) : '';\n this.maskChanged = false;\n return;\n }\n if (Array.isArray(this.dropSpecialCharacters)) {\n this.onChange(this.outputTransformFn(this._toNumber(this._checkSymbols(this._removeMask(this._removeSuffix(this._removePrefix(inputValue)), this.dropSpecialCharacters)))));\n } else if (this.dropSpecialCharacters || !this.dropSpecialCharacters && this.prefix === inputValue) {\n this.onChange(this.outputTransformFn(this._toNumber(this._checkSymbols(this._removeSuffix(this._removePrefix(inputValue))))));\n } else {\n this.onChange(this.outputTransformFn(this._toNumber(inputValue)));\n }\n }\n _toNumber(value) {\n if (!this.isNumberValue || value === \"\" /* MaskExpression.EMPTY_STRING */) {\n return value;\n }\n if (this.maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) && (this.leadZero || !this.dropSpecialCharacters)) {\n return value;\n }\n if (String(value).length > 16 && this.separatorLimit.length > 14) {\n return String(value);\n }\n const num = Number(value);\n if (this.maskExpression.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) && Number.isNaN(num)) {\n const val = String(value).replace(',', '.');\n return Number(val);\n }\n return Number.isNaN(num) ? value : num;\n }\n _removeMask(value, specialCharactersForRemove) {\n if (this.maskExpression.startsWith(\"percent\" /* MaskExpression.PERCENT */) && value.includes(\".\" /* MaskExpression.DOT */)) {\n return value;\n }\n return value ? value.replace(this._regExpForRemove(specialCharactersForRemove), \"\" /* MaskExpression.EMPTY_STRING */) : value;\n }\n _removePrefix(value) {\n if (!this.prefix) {\n return value;\n }\n return value ? value.replace(this.prefix, \"\" /* MaskExpression.EMPTY_STRING */) : value;\n }\n _removeSuffix(value) {\n if (!this.suffix) {\n return value;\n }\n return value ? value.replace(this.suffix, \"\" /* MaskExpression.EMPTY_STRING */) : value;\n }\n _retrieveSeparatorValue(result) {\n let specialCharacters = Array.isArray(this.dropSpecialCharacters) ? this.specialCharacters.filter(v => {\n return this.dropSpecialCharacters.includes(v);\n }) : this.specialCharacters;\n if (!this.deletedSpecialCharacter && this._checkPatternForSpace() && result.includes(\" \" /* MaskExpression.WHITE_SPACE */) && this.maskExpression.includes(\"*\" /* MaskExpression.SYMBOL_STAR */)) {\n specialCharacters = specialCharacters.filter(char => char !== \" \" /* MaskExpression.WHITE_SPACE */);\n }\n return this._removeMask(result, specialCharacters);\n }\n _regExpForRemove(specialCharactersForRemove) {\n return new RegExp(specialCharactersForRemove.map(item => `\\\\${item}`).join('|'), 'gi');\n }\n _replaceDecimalMarkerToDot(value) {\n const markers = Array.isArray(this.decimalMarker) ? this.decimalMarker : [this.decimalMarker];\n return value.replace(this._regExpForRemove(markers), \".\" /* MaskExpression.DOT */);\n }\n _checkSymbols(result) {\n if (result === \"\" /* MaskExpression.EMPTY_STRING */) {\n return result;\n }\n if (this.maskExpression.startsWith(\"percent\" /* MaskExpression.PERCENT */) && this.decimalMarker === \",\" /* MaskExpression.COMMA */) {\n // eslint-disable-next-line no-param-reassign\n result = result.replace(\",\" /* MaskExpression.COMMA */, \".\" /* MaskExpression.DOT */);\n }\n const separatorPrecision = this._retrieveSeparatorPrecision(this.maskExpression);\n const separatorValue = this._replaceDecimalMarkerToDot(this._retrieveSeparatorValue(result));\n if (!this.isNumberValue) {\n return separatorValue;\n }\n if (separatorPrecision) {\n if (result === this.decimalMarker) {\n return null;\n }\n if (this.separatorLimit.length > 14) {\n return String(separatorValue);\n }\n return this._checkPrecision(this.maskExpression, separatorValue);\n } else {\n return separatorValue;\n }\n }\n _checkPatternForSpace() {\n for (const key in this.patterns) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.patterns[key] && this.patterns[key]?.hasOwnProperty('pattern')) {\n const patternString = this.patterns[key]?.pattern.toString();\n const pattern = this.patterns[key]?.pattern;\n if (patternString?.includes(\" \" /* MaskExpression.WHITE_SPACE */) && pattern?.test(this.maskExpression)) {\n return true;\n }\n }\n }\n return false;\n }\n // TODO should think about helpers or separting decimal precision to own property\n _retrieveSeparatorPrecision(maskExpretion) {\n const matcher = maskExpretion.match(new RegExp(`^separator\\\\.([^d]*)`));\n return matcher ? Number(matcher[1]) : null;\n }\n _checkPrecision(separatorExpression, separatorValue) {\n const separatorPrecision = separatorExpression.slice(10, 11);\n if (separatorExpression.indexOf('2') > 0 || this.leadZero && Number(separatorPrecision) > 0) {\n if (this.decimalMarker === \",\" /* MaskExpression.COMMA */ && this.leadZero) {\n // eslint-disable-next-line no-param-reassign\n separatorValue = separatorValue.replace(',', '.');\n }\n return this.leadZero ? Number(separatorValue).toFixed(Number(separatorPrecision)) : Number(separatorValue).toFixed(2);\n }\n return this.numberToString(separatorValue);\n }\n _repeatPatternSymbols(maskExp) {\n return maskExp.match(/{[0-9]+}/) && maskExp.split(\"\" /* MaskExpression.EMPTY_STRING */).reduce((accum, currVal, index) => {\n this._start = currVal === \"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */ ? index : this._start;\n if (currVal !== \"}\" /* MaskExpression.CURLY_BRACKETS_RIGHT */) {\n return this._findSpecialChar(currVal) ? accum + currVal : accum;\n }\n this._end = index;\n const repeatNumber = Number(maskExp.slice(this._start + 1, this._end));\n const replaceWith = new Array(repeatNumber + 1).join(maskExp[this._start - 1]);\n if (maskExp.slice(0, this._start).length > 1 && maskExp.includes(\"S\" /* MaskExpression.LETTER_S */)) {\n const symbols = maskExp.slice(0, this._start - 1);\n return symbols.includes(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */) ? accum + replaceWith : symbols + accum + replaceWith;\n } else {\n return accum + replaceWith;\n }\n }, '') || maskExp;\n }\n currentLocaleDecimalMarker() {\n return 1.1.toLocaleString().substring(1, 2);\n }\n static {\n this.ɵfac = /* @__PURE__ */(() => {\n let ɵNgxMaskService_BaseFactory;\n return function NgxMaskService_Factory(__ngFactoryType__) {\n return (ɵNgxMaskService_BaseFactory || (ɵNgxMaskService_BaseFactory = i0.ɵɵgetInheritedFactory(NgxMaskService)))(__ngFactoryType__ || NgxMaskService);\n };\n })();\n }\n static {\n this.ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n token: NgxMaskService,\n factory: NgxMaskService.ɵfac\n });\n }\n }\n return NgxMaskService;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * @internal\n */\nfunction _configFactory() {\n const initConfig = inject(INITIAL_CONFIG);\n const configValue = inject(NEW_CONFIG);\n return configValue instanceof Function ? {\n ...initConfig,\n ...configValue()\n } : {\n ...initConfig,\n ...configValue\n };\n}\nfunction provideNgxMask(configValue) {\n return [{\n provide: NEW_CONFIG,\n useValue: configValue\n }, {\n provide: INITIAL_CONFIG,\n useValue: initialConfig\n }, {\n provide: NGX_MASK_CONFIG,\n useFactory: _configFactory\n }, NgxMaskService];\n}\nfunction provideEnvironmentNgxMask(configValue) {\n return makeEnvironmentProviders(provideNgxMask(configValue));\n}\nlet NgxMaskDirective = /*#__PURE__*/(() => {\n class NgxMaskDirective {\n constructor() {\n this.maskExpression = '';\n this.specialCharacters = [];\n this.patterns = {};\n this.prefix = '';\n this.suffix = '';\n this.thousandSeparator = ' ';\n this.decimalMarker = '.';\n this.dropSpecialCharacters = null;\n this.hiddenInput = null;\n this.showMaskTyped = null;\n this.placeHolderCharacter = null;\n this.shownMaskExpression = null;\n this.showTemplate = null;\n this.clearIfNotMatch = null;\n this.validation = null;\n this.separatorLimit = null;\n this.allowNegativeNumbers = null;\n this.leadZeroDateTime = null;\n this.leadZero = null;\n this.triggerOnMaskChange = null;\n this.apm = null;\n this.inputTransformFn = null;\n this.outputTransformFn = null;\n this.keepCharacterPositions = null;\n this.maskFilled = new EventEmitter();\n this._maskValue = '';\n this._position = null;\n this._maskExpressionArray = [];\n this._allowFewMaskChangeMask = false;\n this._justPasted = false;\n this._isFocused = false;\n /**For IME composition event */\n this._isComposing = false;\n this.document = inject(DOCUMENT);\n this._maskService = inject(NgxMaskService, {\n self: true\n });\n this._config = inject(NGX_MASK_CONFIG);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.onChange = _ => {};\n this.onTouch = () => {};\n }\n ngOnChanges(changes) {\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 leadZero,\n triggerOnMaskChange,\n apm,\n inputTransformFn,\n outputTransformFn,\n keepCharacterPositions\n } = changes;\n if (maskExpression) {\n if (maskExpression.currentValue !== maskExpression.previousValue && !maskExpression.firstChange) {\n this._maskService.maskChanged = true;\n }\n if (maskExpression.currentValue && maskExpression.currentValue.split(\"||\" /* MaskExpression.OR */).length > 1) {\n this._maskExpressionArray = maskExpression.currentValue.split(\"||\" /* MaskExpression.OR */).sort((a, b) => {\n return a.length - b.length;\n });\n this._setMask();\n } else {\n this._maskExpressionArray = [];\n this._maskValue = maskExpression.currentValue || \"\" /* MaskExpression.EMPTY_STRING */;\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.specialCharacters = specialCharacters.currentValue || [];\n }\n }\n if (allowNegativeNumbers) {\n this._maskService.allowNegativeNumbers = allowNegativeNumbers.currentValue;\n if (this._maskService.allowNegativeNumbers) {\n this._maskService.specialCharacters = this._maskService.specialCharacters.filter(c => c !== \"-\" /* MaskExpression.MINUS */);\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.patterns = patterns.currentValue;\n }\n if (apm && apm.currentValue) {\n this._maskService.apm = apm.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 if (showMaskTyped.previousValue === false && showMaskTyped.currentValue === true && this._isFocused) {\n requestAnimationFrame(() => {\n this._maskService._elementRef?.nativeElement.click();\n });\n }\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 (leadZeroDateTime) {\n this._maskService.leadZeroDateTime = leadZeroDateTime.currentValue;\n }\n if (leadZero) {\n this._maskService.leadZero = leadZero.currentValue;\n }\n if (triggerOnMaskChange) {\n this._maskService.triggerOnMaskChange = triggerOnMaskChange.currentValue;\n }\n if (inputTransformFn) {\n this._maskService.inputTransformFn = inputTransformFn.currentValue;\n }\n if (outputTransformFn) {\n this._maskService.outputTransformFn = outputTransformFn.currentValue;\n }\n if (keepCharacterPositions) {\n this._maskService.keepCharacterPositions = keepCharacterPositions.currentValue;\n }\n this._applyMask();\n }\n validate({\n value\n }) {\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\" /* MaskExpression.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 if (this._maskValue.includes(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */) && this._maskValue.includes(\"}\" /* MaskExpression.CURLY_BRACKETS_RIGHT */)) {\n const lengthInsideCurlyBrackets = this._maskValue.slice(this._maskValue.indexOf(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */) + 1, this._maskValue.indexOf(\"}\" /* MaskExpression.CURLY_BRACKETS_RIGHT */));\n return lengthInsideCurlyBrackets === String(value.length) ? null : this._createValidationError(value);\n }\n if (this._maskValue.startsWith(\"percent\" /* MaskExpression.PERCENT */)) {\n return null;\n }\n for (const key in this._maskService.patterns) {\n if (this._maskService.patterns[key]?.optional) {\n if (this._maskValue.indexOf(key) !== this._maskValue.lastIndexOf(key)) {\n const opt = this._maskValue.split(\"\" /* MaskExpression.EMPTY_STRING */).filter(i => i === key).join(\"\" /* MaskExpression.EMPTY_STRING */);\n counterOfOpt += opt.length;\n } else if (this._maskValue.indexOf(key) !== -1) {\n counterOfOpt++;\n }\n if (this._maskValue.indexOf(key) !== -1 && value.toString().length >= this._maskValue.indexOf(key)) {\n return null;\n }\n if (counterOfOpt === this._maskValue.length) {\n return null;\n }\n }\n }\n if (this._maskValue.indexOf(\"*\" /* MaskExpression.SYMBOL_STAR */) > 1 && value.toString().length < this._maskValue.indexOf(\"*\" /* MaskExpression.SYMBOL_STAR */) || this._maskValue.indexOf(\"?\" /* MaskExpression.SYMBOL_QUESTION */) > 1 && value.toString().length < this._maskValue.indexOf(\"?\" /* MaskExpression.SYMBOL_QUESTION */)) {\n return this._createValidationError(value);\n }\n if (this._maskValue.indexOf(\"*\" /* MaskExpression.SYMBOL_STAR */) === -1 || this._maskValue.indexOf(\"?\" /* MaskExpression.SYMBOL_QUESTION */) === -1) {\n // eslint-disable-next-line no-param-reassign\n value = typeof value === 'number' ? String(value) : value;\n const array = this._maskValue.split('*');\n const length = this._maskService.dropSpecialCharacters ? this._maskValue.length - this._maskService.checkDropSpecialCharAmount(this._maskValue) - counterOfOpt : this.prefix ? this._maskValue.length + this.prefix.length - counterOfOpt : this._maskValue.length - counterOfOpt;\n if (array.length === 1) {\n if (value.toString().length < length) {\n return this._createValidationError(value);\n }\n }\n if (array.length > 1) {\n const lastIndexArray = array[array.length - 1];\n if (lastIndexArray && this._maskService.specialCharacters.includes(lastIndexArray[0]) && String(value).includes(lastIndexArray[0] ?? '') && !this.dropSpecialCharacters) {\n const special = value.split(lastIndexArray[0]);\n return special[special.length - 1].length === lastIndexArray.length - 1 ? null : this._createValidationError(value);\n } else if ((lastIndexArray && !this._maskService.specialCharacters.includes(lastIndexArray[0]) || !lastIndexArray || this._maskService.dropSpecialCharacters) && value.length >= length - 1) {\n return null;\n } else {\n return this._createValidationError(value);\n }\n }\n }\n if (this._maskValue.indexOf(\"*\" /* MaskExpression.SYMBOL_STAR */) === 1 || this._maskValue.indexOf(\"?\" /* MaskExpression.SYMBOL_QUESTION */) === 1) {\n return null;\n }\n }\n if (value) {\n this.maskFilled.emit();\n return null;\n }\n return null;\n }\n onPaste() {\n this._justPasted = true;\n }\n onFocus() {\n this._isFocused = true;\n }\n onModelChange(value) {\n // on form reset we need to update the actualValue\n if ((value === \"\" /* MaskExpression.EMPTY_STRING */ || value === null || value === undefined) && this._maskService.actualValue) {\n this._maskService.actualValue = this._maskService.getActualValue(\"\" /* MaskExpression.EMPTY_STRING */);\n }\n }\n onInput(e) {\n // If IME is composing text, we wait for the composed text.\n if (this._isComposing) return;\n const el = e.target;\n const transformedValue = this._maskService.inputTransformFn(el.value);\n if (el.type !== 'number') {\n if (typeof transformedValue === 'string' || typeof transformedValue === 'number') {\n el.value = transformedValue.toString();\n this._inputValue = el.value;\n this._setMask();\n if (!this._maskValue) {\n this.onChange(el.value);\n return;\n }\n let position = el.selectionStart === 1 ? el.selectionStart + this._maskService.prefix.length : el.selectionStart;\n if (this.showMaskTyped && this.keepCharacterPositions && this._maskService.placeHolderCharacter.length === 1) {\n const inputSymbol = el.value.slice(position - 1, position);\n const prefixLength = this.prefix.length;\n const checkSymbols = this._maskService._checkSymbolMask(inputSymbol, this._maskService.maskExpression[position - 1 - prefixLength] ?? \"\" /* MaskExpression.EMPTY_STRING */);\n const checkSpecialCharacter = this._maskService._checkSymbolMask(inputSymbol, this._maskService.maskExpression[position + 1 - prefixLength] ?? \"\" /* MaskExpression.EMPTY_STRING */);\n const selectRangeBackspace = this._maskService.selStart === this._maskService.selEnd;\n const selStart = Number(this._maskService.selStart) - prefixLength;\n const selEnd = Number(this._maskService.selEnd) - prefixLength;\n if (this._code === \"Backspace\" /* MaskExpression.BACKSPACE */) {\n if (!selectRangeBackspace) {\n if (this._maskService.selStart === prefixLength) {\n this._maskService.actualValue = `${this.prefix}${this._maskService.maskIsShown.slice(0, selEnd)}${this._inputValue.split(this.prefix).join('')}`;\n } else if (this._maskService.selStart === this._maskService.maskIsShown.length + prefixLength) {\n this._maskService.actualValue = `${this._inputValue}${this._maskService.maskIsShown.slice(selStart, selEnd)}`;\n } else {\n this._maskService.actualValue = `${this.prefix}${this._inputValue.split(this.prefix).join('').slice(0, selStart)}${this._maskService.maskIsShown.slice(selStart, selEnd)}${this._maskService.actualValue.slice(selEnd + prefixLength, this._maskService.maskIsShown.length + prefixLength)}${this.suffix}`;\n }\n } else if (!this._maskService.specialCharacters.includes(this._maskService.maskExpression.slice(position - this.prefix.length, position + 1 - this.prefix.length)) && selectRangeBackspace) {\n if (selStart === 1 && this.prefix) {\n this._maskService.actualValue = `${this.prefix}${this._maskService.placeHolderCharacter}${el.value.split(this.prefix).join('').split(this.suffix).join('')}${this.suffix}`;\n position = position - 1;\n } else {\n const part1 = el.value.substring(0, position);\n const part2 = el.value.substring(position);\n this._maskService.actualValue = `${part1}${this._maskService.placeHolderCharacter}${part2}`;\n }\n }\n }\n if (this._code !== \"Backspace\" /* MaskExpression.BACKSPACE */) {\n if (!checkSymbols && !checkSpecialCharacter && selectRangeBackspace) {\n position = Number(el.selectionStart) - 1;\n } else if (this._maskService.specialCharacters.includes(el.value.slice(position, position + 1)) && checkSpecialCharacter && !this._maskService.specialCharacters.includes(el.value.slice(position + 1, position + 2))) {\n this._maskService.actualValue = `${el.value.slice(0, position - 1)}${el.value.slice(position, position + 1)}${inputSymbol}${el.value.slice(position + 2)}`;\n position = position + 1;\n } else if (checkSymbols) {\n if (el.value.length === 1 && position === 1) {\n this._maskService.actualValue = `${this.prefix}${inputSymbol}${this._maskService.maskIsShown.slice(1, this._maskService.maskIsShown.length)}${this.suffix}`;\n } else {\n this._maskService.actualValue = `${el.value.slice(0, position - 1)}${inputSymbol}${el.value.slice(position + 1).split(this.suffix).join('')}${this.suffix}`;\n }\n } else if (this.prefix && el.value.length === 1 && position - prefixLength === 1 && this._maskService._checkSymbolMask(el.value, this._maskService.maskExpression[position - 1 - prefixLength] ?? \"\" /* MaskExpression.EMPTY_STRING */)) {\n this._maskService.actualValue = `${this.prefix}${el.value}${this._maskService.maskIsShown.slice(1, this._maskService.maskIsShown.length)}${this.suffix}`;\n }\n }\n }\n let caretShift = 0;\n let backspaceShift = false;\n if (this._code === \"Delete\" /* MaskExpression.DELETE */ && \"separator\" /* MaskExpression.SEPARATOR */) {\n this._maskService.deletedSpecialCharacter = true;\n }\n if (this._inputValue.length >= this._maskService.maskExpression.length - 1 && this._code !== \"Backspace\" /* MaskExpression.BACKSPACE */ && this._maskService.maskExpression === \"d0/M0/0000\" /* MaskExpression.DAYS_MONTHS_YEARS */ && position < 10) {\n const inputSymbol = this._inputValue.slice(position - 1, position);\n el.value = this._inputValue.slice(0, position - 1) + inputSymbol + this._inputValue.slice(position + 1);\n }\n if (this._maskService.maskExpression === \"d0/M0/0000\" /* MaskExpression.DAYS_MONTHS_YEARS */ && this.leadZeroDateTime) {\n if (position < 3 && Number(el.value) > 31 && Number(el.value) < 40 || position === 5 && Number(el.value.slice(3, 5)) > 12) {\n position = position + 2;\n }\n }\n if (this._maskService.maskExpression === \"Hh:m0:s0\" /* MaskExpression.HOURS_MINUTES_SECONDS */ && this.apm) {\n if (this._justPasted && el.value.slice(0, 2) === \"00\" /* MaskExpression.DOUBLE_ZERO */) {\n el.value = el.value.slice(1, 2) + el.value.slice(2, el.value.length);\n }\n el.value = el.value === \"00\" /* MaskExpression.DOUBLE_ZERO */ ? \"0\" /* MaskExpression.NUMBER_ZERO */ : el.value;\n }\n this._maskService.applyValueChanges(position, this._justPasted, this._code === \"Backspace\" /* MaskExpression.BACKSPACE */ || this._code === \"Delete\" /* MaskExpression.DELETE */, (shift, _backspaceShift) => {\n this._justPasted = false;\n caretShift = shift;\n backspaceShift = _backspaceShift;\n });\n // only set the selection if the element is active\n if (this._getActiveElement() !== el) {\n return;\n }\n if (this._maskService.plusOnePosition) {\n position = position + 1;\n this._maskService.plusOnePosition = false;\n }\n // update position after applyValueChanges to prevent cursor on wrong position when it has an array of maskExpression\n if (this._maskExpressionArray.length) {\n if (this._code === \"Backspace\" /* MaskExpression.BACKSPACE */) {\n const specialChartMinusOne = this.specialCharacters.includes(this._maskService.actualValue.slice(position - 1, position));\n const specialChartPlusOne = this.specialCharacters.includes(this._maskService.actualValue.slice(position, position + 1));\n if (this._allowFewMaskChangeMask && !specialChartPlusOne) {\n position = el.selectionStart + 1;\n this._allowFewMaskChangeMask = false;\n } else {\n position = specialChartMinusOne ? position - 1 : position;\n }\n } else {\n position = el.selectionStart === 1 ? el.selectionStart + this._maskService.prefix.length : el.selectionStart;\n }\n }\n this._position = this._position === 1 && this._inputValue.length === 1 ? null : this._position;\n let positionToApply = this._position ? this._inputValue.length + position + caretShift : position + (this._code === \"Backspace\" /* MaskExpression.BACKSPACE */ && !backspaceShift ? 0 : caretShift);\n if (positionToApply > this._getActualInputLength()) {\n positionToApply = el.value === this._maskService.decimalMarker && el.value.length === 1 ? this._getActualInputLength() + 1 : this._getActualInputLength();\n }\n if (positionToApply < 0) {\n positionToApply = 0;\n }\n el.setSelectionRange(positionToApply, positionToApply);\n this._position = null;\n } else {\n console.warn('Ngx-mask writeValue work with string | number, your current value:', typeof transformedValue);\n }\n } else {\n if (!this._maskValue) {\n this.onChange(el.value);\n return;\n }\n this._maskService.applyValueChanges(el.value.length, this._justPasted, this._code === \"Backspace\" /* MaskExpression.BACKSPACE */ || this._code === \"Delete\" /* MaskExpression.DELETE */);\n }\n }\n // IME starts\n onCompositionStart() {\n this._isComposing = true;\n }\n // IME completes\n onCompositionEnd(e) {\n this._isComposing = false;\n this._justPasted = true;\n this.onInput(e);\n }\n onBlur(e) {\n if (this._maskValue) {\n const el = e.target;\n if (this.leadZero && el.value.length > 0 && typeof this.decimalMarker === 'string') {\n const maskExpression = this._maskService.maskExpression;\n const precision = Number(this._maskService.maskExpression.slice(maskExpression.length - 1, maskExpression.length));\n if (precision > 0) {\n el.value = this.suffix ? el.value.split(this.suffix).join('') : el.value;\n const decimalPart = el.value.split(this.decimalMarker)[1];\n el.value = el.value.includes(this.decimalMarker) ? el.value + \"0\" /* MaskExpression.NUMBER_ZERO */.repeat(precision - decimalPart.length) + this.suffix : el.value + this.decimalMarker + \"0\" /* MaskExpression.NUMBER_ZERO */.repeat(precision) + this.suffix;\n this._maskService.actualValue = el.value;\n }\n }\n this._maskService.clearIfNotMatchFn();\n }\n this._isFocused = false;\n this.onTouch();\n }\n onClick(e) {\n if (!this._maskValue) {\n return;\n }\n const el = e.target;\n const posStart = 0;\n const posEnd = 0;\n if (el !== null && el.selectionStart !== null && el.selectionStart === el.selectionEnd && el.selectionStart > this._maskService.prefix.length &&\n // eslint-disable-next-line\n e.keyCode !== 38) {\n if (this._maskService.showMaskTyped && !this.keepCharacterPositions) {\n // We are showing the mask in the input\n this._maskService.maskIsShown = this._maskService.showMaskInInput();\n if (el.setSelectionRange && this._maskService.prefix + this._maskService.maskIsShown === el.value) {\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(this._maskService.actualValue.length, this._maskService.actualValue.length);\n }\n }\n }\n }\n const nextValue = el && (el.value === this._maskService.prefix ? this._maskService.prefix + this._maskService.maskIsShown : 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 /** fix of cursor position with prefix when mouse click occur */\n if (el && el.type !== 'number' && (el.selectionStart || el.selectionEnd) <= this._maskService.prefix.length) {\n el.selectionStart = this._maskService.prefix.length;\n return;\n }\n /** select only inserted text */\n if (el && el.selectionEnd > this._getActualInputLength()) {\n el.selectionEnd = this._getActualInputLength();\n }\n }\n onKeyDown(e) {\n if (!this._maskValue) {\n return;\n }\n if (this._isComposing) {\n // User finalize their choice from IME composition, so trigger onInput() for the composed text.\n if (e.key === 'Enter') this.onCompositionEnd(e);\n return;\n }\n this._code = e.code ? e.code : e.key;\n const el = e.target;\n this._inputValue = el.value;\n this._setMask();\n if (el.type !== 'number') {\n if (e.key === \"ArrowUp\" /* MaskExpression.ARROW_UP */) {\n e.preventDefault();\n }\n if (e.key === \"ArrowLeft\" /* MaskExpression.ARROW_LEFT */ || e.key === \"Backspace\" /* MaskExpression.BACKSPACE */ || e.key === \"Delete\" /* MaskExpression.DELETE */) {\n if (e.key === \"Backspace\" /* MaskExpression.BACKSPACE */ && el.value.length === 0) {\n el.selectionStart = el.selectionEnd;\n }\n if (e.key === \"Backspace\" /* MaskExpression.BACKSPACE */ && el.selectionStart !== 0) {\n // If specialChars is false, (shouldn't ever happen) then set to the defaults\n this.specialCharacters = this.specialCharacters?.length ? this.specialCharacters : this._config.specialCharacters;\n if (this.prefix.length > 1 && el.selectionStart <= this.prefix.length) {\n el.setSelectionRange(this.prefix.length, el.selectionEnd);\n } else {\n if (this._inputValue.length !== el.selectionStart && el.selectionStart !== 1) {\n while (this.specialCharacters.includes((this._inputValue[el.selectionStart - 1] ?? \"\" /* MaskExpression.EMPTY_STRING */).toString()) && (this.prefix.length >= 1 && el.selectionStart > this.prefix.length || this.prefix.length === 0)) {\n el.setSelectionRange(el.selectionStart - 1, el.selectionEnd);\n }\n }\n }\n }\n this.checkSelectionOnDeletion(el);\n if (this._maskService.prefix.length && el.selectionStart <= this._maskService.prefix.length && el.selectionEnd <= this._maskService.prefix.length) {\n e.preventDefault();\n }\n const cursorStart = el.selectionStart;\n if (e.key === \"Backspace\" /* MaskExpression.BACKSPACE */ && !el.readOnly && cursorStart === 0 && el.selectionEnd === el.value.length && el.value.length !== 0) {\n this._position = this._maskService.prefix ? this._maskService.prefix.length : 0;\n this._maskService.applyMask(this._maskService.prefix, this._maskService.maskExpression, this._position);\n }\n }\n if (!!this.suffix && this.suffix.length > 1 && this._inputValue.length - this.suffix.length < el.selectionStart) {\n el.setSelectionRange(this._inputValue.length - this.suffix.length, this._inputValue.length);\n } else if (e.code === 'KeyA' && e.ctrlKey || e.code === 'KeyA' && 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 async writeValue(controlValue) {\n if (typeof controlValue === 'object' && controlValue !== null && 'value' in controlValue) {\n if ('disable' in controlValue) {\n this.setDisabledState(Boolean(controlValue.disable));\n }\n // eslint-disable-next-line no-param-reassign\n controlValue = controlValue.value;\n }\n if (controlValue !== null) {\n // eslint-disable-next-line no-param-reassign\n controlValue = this.inputTransformFn ? this.inputTransformFn(controlValue) : controlValue;\n }\n if (typeof controlValue === 'string' || typeof controlValue === 'number' || controlValue === null || controlValue === undefined) {\n if (controlValue === null || controlValue === undefined || controlValue === '') {\n this._maskService._currentValue = '';\n this._maskService._previousValue = '';\n }\n let inputValue = controlValue;\n if (typeof inputValue === 'number' || this._maskValue.startsWith(\"separator\" /* MaskExpression.SEPARATOR */)) {\n inputValue = String(inputValue);\n const localeDecimalMarker = this._maskService.currentLocaleDecimalMarker();\n if (!Array.isArray(this._maskService.decimalMarker)) {\n inputValue = this._maskService.decimalMarker !== localeDecimalMarker ? inputValue.replace(localeDecimalMarker, this._maskService.decimalMarker) : inputValue;\n }\n if (this._maskService.leadZero && inputValue && this.maskExpression && this.dropSpecialCharacters !== false) {\n inputValue = this._maskService._checkPrecision(this._maskService.maskExpression, inputValue);\n }\n if (this.decimalMarker === \",\" /* MaskExpression.COMMA */ || Array.isArray(this._maskService.decimalMarker) && this.thousandSeparator === \".\" /* MaskExpression.DOT */) {\n inputValue = inputValue.toString().replace(\".\" /* MaskExpression.DOT */, \",\" /* MaskExpression.COMMA */);\n }\n if (this.maskExpression?.startsWith(\"separator\" /* MaskExpression.SEPARATOR */) && this.leadZero) {\n requestAnimationFrame(() => {\n this._maskService.applyMask(inputValue?.toString() ?? '', this._maskService.maskExpression);\n });\n }\n this._maskService.isNumberValue = true;\n }\n if (typeof inputValue !== 'string') {\n inputValue = '';\n }\n this._inputValue = inputValue;\n this._setMask();\n if (inputValue && this._maskService.maskExpression || this._maskService.maskExpression && (this._maskService.prefix || this._maskService.showMaskTyped)) {\n // Let the service we know we are writing value so that triggering onChange function won't happen during applyMask\n typeof this.inputTransformFn !== 'function' ? this._maskService.writingValue = true : '';\n this._maskService.formElementProperty = ['value', this._maskService.applyMask(inputValue, this._maskService.maskExpression)];\n // Let the service know we've finished writing value\n typeof this.inputTransformFn !== 'function' ? this._maskService.writingValue = false : '';\n } else {\n this._maskService.formElementProperty = ['value', inputValue];\n }\n this._inputValue = inputValue;\n } else {\n console.warn('Ngx-mask writeValue work with string | number, your current value:', typeof controlValue);\n }\n }\n registerOnChange(fn) {\n this._maskService.onChange = this.onChange = fn;\n }\n registerOnTouched(fn) {\n this.onTouch = fn;\n }\n _getActiveElement(document = this.document) {\n const shadowRootEl = document?.activeElement?.shadowRoot;\n if (!shadowRootEl?.activeElement) {\n return document.activeElement;\n } else {\n return this._getActiveElement(shadowRootEl);\n }\n }\n checkSelectionOnDeletion(el) {\n el.selectionStart = Math.min(Math.max(this.prefix.length, el.selectionStart), this._inputValue.length - this.suffix.length);\n el.selectionEnd = Math.min(Math.max(this.prefix.length, el.selectionEnd), this._inputValue.length - this.suffix.length);\n }\n /** It disables the input element */\n setDisabledState(isDisabled) {\n this._maskService.formElementProperty = ['disabled', isDisabled];\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _applyMask() {\n this._maskService.maskExpression = this._maskService._repeatPatternSymbols(this._maskValue || '');\n this._maskService.formElementProperty = ['value', this._maskService.applyMask(this._inputValue, this._maskService.maskExpression)];\n }\n _validateTime(value) {\n const rowMaskLen = this._maskValue.split(\"\" /* MaskExpression.EMPTY_STRING */).filter(s => s !== ':').length;\n if (!value) {\n return null; // Don't validate empty values to allow for optional form control\n }\n if (+(value[value.length - 1] ?? -1) === 0 && value.length < rowMaskLen || value.length <= rowMaskLen - 2) {\n return this._createValidationError(value);\n }\n return null;\n }\n _getActualInputLength() {\n return this._maskService.actualValue.length || this._maskService.actualValue.length + this._maskService.prefix.length;\n }\n _createValidationError(actualValue) {\n return {\n mask: {\n requiredMask: this._maskValue,\n actualValue\n }\n };\n }\n _setMask() {\n this._maskExpressionArray.some(mask => {\n const specialChart = mask.split(\"\" /* MaskExpression.EMPTY_STRING */).some(char => this._maskService.specialCharacters.includes(char));\n if (specialChart && this._inputValue && this._areAllCharactersInEachStringSame(this._maskExpressionArray) || mask.includes(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */)) {\n const test = this._maskService.removeMask(this._inputValue)?.length <= this._maskService.removeMask(mask)?.length;\n if (test) {\n this._maskValue = this.maskExpression = this._maskService.maskExpression = mask.includes(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */) ? this._maskService._repeatPatternSymbols(mask) : mask;\n return test;\n } else {\n if (this._code === \"Backspace\" /* MaskExpression.BACKSPACE */) {\n this._allowFewMaskChangeMask = true;\n }\n const expression = this._maskExpressionArray[this._maskExpressionArray.length - 1] ?? \"\" /* MaskExpression.EMPTY_STRING */;\n this._maskValue = this.maskExpression = this._maskService.maskExpression = expression.includes(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */) ? this._maskService._repeatPatternSymbols(expression) : expression;\n }\n } else {\n const check = this._maskService.removeMask(this._inputValue)?.split(\"\" /* MaskExpression.EMPTY_STRING */).every((character, index) => {\n const indexMask = mask.charAt(index);\n return this._maskService._checkSymbolMask(character, indexMask);\n });\n if (check || this._justPasted) {\n this._maskValue = this.maskExpression = this._maskService.maskExpression = mask;\n return check;\n }\n }\n });\n }\n _areAllCharactersInEachStringSame(array) {\n const specialCharacters = this._maskService.specialCharacters;\n function removeSpecialCharacters(str) {\n const regex = new RegExp(`[${specialCharacters.map(ch => `\\\\${ch}`).join('')}]`, 'g');\n return str.replace(regex, '');\n }\n const processedArr = array.map(removeSpecialCharacters);\n return processedArr.every(str => {\n const uniqueCharacters = new Set(str);\n return uniqueCharacters.size === 1;\n });\n }\n static {\n this.ɵfac = function NgxMaskDirective_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgxMaskDirective)();\n };\n }\n static {\n this.ɵdir = /* @__PURE__ */i0.ɵɵdefineDirective({\n type: NgxMaskDirective,\n selectors: [[\"input\", \"mask\", \"\"], [\"textarea\", \"mask\", \"\"]],\n hostBindings: function NgxMaskDirective_HostBindings(rf, ctx) {\n if (rf & 1) {\n i0.ɵɵlistener(\"paste\", function NgxMaskDirective_paste_HostBindingHandler() {\n return ctx.onPaste();\n })(\"focus\", function NgxMaskDirective_focus_HostBindingHandler($event) {\n return ctx.onFocus($event);\n })(\"ngModelChange\", function NgxMaskDirective_ngModelChange_HostBindingHandler($event) {\n return ctx.onModelChange($event);\n })(\"input\", function NgxMaskDirective_input_HostBindingHandler($event) {\n return ctx.onInput($event);\n })(\"compositionstart\", function NgxMaskDirective_compositionstart_HostBindingHandler($event) {\n return ctx.onCompositionStart($event);\n })(\"compositionend\", function NgxMaskDirective_compositionend_HostBindingHandler($event) {\n return ctx.onCompositionEnd($event);\n })(\"blur\", function NgxMaskDirective_blur_HostBindingHandler($event) {\n return ctx.onBlur($event);\n })(\"click\", function NgxMaskDirective_click_HostBindingHandler($event) {\n return ctx.onClick($event);\n })(\"keydown\", function NgxMaskDirective_keydown_HostBindingHandler($event) {\n return ctx.onKeyDown($event);\n });\n }\n },\n inputs: {\n maskExpression: [0, \"mask\", \"maskExpression\"],\n specialCharacters: \"specialCharacters\",\n patterns: \"patterns\",\n prefix: \"prefix\",\n suffix: \"suffix\",\n thousandSeparator: \"thousandSeparator\",\n decimalMarker: \"decimalMarker\",\n dropSpecialCharacters: \"dropSpecialCharacters\",\n hiddenInput: \"hiddenInput\",\n showMaskTyped: \"showMaskTyped\",\n placeHolderCharacter: \"placeHolderCharacter\",\n shownMaskExpression: \"shownMaskExpression\",\n showTemplate: \"showTemplate\",\n clearIfNotMatch: \"clearIfNotMatch\",\n validation: \"validation\",\n separatorLimit: \"separatorLimit\",\n allowNegativeNumbers: \"allowNegativeNumbers\",\n leadZeroDateTime: \"leadZeroDateTime\",\n leadZero: \"leadZero\",\n triggerOnMaskChange: \"triggerOnMaskChange\",\n apm: \"apm\",\n inputTransformFn: \"inputTransformFn\",\n outputTransformFn: \"outputTransformFn\",\n keepCharacterPositions: \"keepCharacterPositions\"\n },\n outputs: {\n maskFilled: \"maskFilled\"\n },\n exportAs: [\"mask\", \"ngxMask\"],\n standalone: true,\n features: [i0.ɵɵProvidersFeature([{\n provide: NG_VALUE_ACCESSOR,\n useExisting: NgxMaskDirective,\n multi: true\n }, {\n provide: NG_VALIDATORS,\n useExisting: NgxMaskDirective,\n multi: true\n }, NgxMaskService]), i0.ɵɵNgOnChangesFeature]\n });\n }\n }\n return NgxMaskDirective;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet NgxMaskPipe = /*#__PURE__*/(() => {\n class NgxMaskPipe {\n constructor() {\n this.defaultOptions = inject(NGX_MASK_CONFIG);\n this._maskService = inject(NgxMaskService);\n this._maskExpressionArray = [];\n this.mask = '';\n }\n transform(value, mask, {\n patterns,\n ...config\n } = {}) {\n const currentConfig = {\n maskExpression: mask,\n ...this.defaultOptions,\n ...config,\n patterns: {\n ...this._maskService.patterns,\n ...patterns\n }\n };\n Object.entries(currentConfig).forEach(([key, value]) => {\n //eslint-disable-next-line @typescript-eslint/no-explicit-any\n this._maskService[key] = value;\n });\n if (mask.includes('||')) {\n if (mask.split('||').length > 1) {\n this._maskExpressionArray = mask.split('||').sort((a, b) => {\n return a.length - b.length;\n });\n this._setMask(value);\n return this._maskService.applyMask(`${value}`, this.mask);\n } else {\n this._maskExpressionArray = [];\n return this._maskService.applyMask(`${value}`, this.mask);\n }\n }\n if (mask.includes(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */)) {\n return this._maskService.applyMask(`${value}`, this._maskService._repeatPatternSymbols(mask));\n }\n if (mask.startsWith(\"separator\" /* MaskExpression.SEPARATOR */)) {\n if (config.decimalMarker) {\n this._maskService.decimalMarker = config.decimalMarker;\n }\n if (config.thousandSeparator) {\n this._maskService.thousandSeparator = config.thousandSeparator;\n }\n if (config.leadZero) {\n // eslint-disable-next-line no-param-reassign\n this._maskService.leadZero = config.leadZero;\n }\n // eslint-disable-next-line no-param-reassign\n value = String(value);\n const localeDecimalMarker = this._maskService.currentLocaleDecimalMarker();\n if (!Array.isArray(this._maskService.decimalMarker)) {\n // eslint-disable-next-line no-param-reassign\n value = this._maskService.decimalMarker !== localeDecimalMarker ? value.replace(localeDecimalMarker, this._maskService.decimalMarker) : value;\n }\n if (this._maskService.leadZero && value && this._maskService.dropSpecialCharacters !== false) {\n // eslint-disable-next-line no-param-reassign\n value = this._maskService._checkPrecision(mask, value);\n }\n if (this._maskService.decimalMarker === \",\" /* MaskExpression.COMMA */) {\n // eslint-disable-next-line no-param-reassign\n value = value.toString().replace(\".\" /* MaskExpression.DOT */, \",\" /* MaskExpression.COMMA */);\n }\n this._maskService.isNumberValue = true;\n }\n if (value === null || value === undefined) {\n return this._maskService.applyMask('', mask);\n }\n return this._maskService.applyMask(`${value}`, mask);\n }\n _setMask(value) {\n if (this._maskExpressionArray.length > 0) {\n this._maskExpressionArray.some(mask => {\n const test = this._maskService.removeMask(value)?.length <= this._maskService.removeMask(mask)?.length;\n if (value && test) {\n this.mask = mask;\n return test;\n } else {\n const expression = this._maskExpressionArray[this._maskExpressionArray.length - 1] ?? \"\" /* MaskExpression.EMPTY_STRING */;\n this.mask = expression;\n }\n });\n }\n }\n static {\n this.ɵfac = function NgxMaskPipe_Factory(__ngFactoryType__) {\n return new (__ngFactoryType__ || NgxMaskPipe)();\n };\n }\n static {\n this.ɵpipe = /* @__PURE__ */i0.ɵɵdefinePipe({\n name: \"mask\",\n type: NgxMaskPipe,\n pure: true,\n standalone: true\n });\n }\n }\n return NgxMaskPipe;\n})();\n(() => {\n (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { INITIAL_CONFIG, NEW_CONFIG, NGX_MASK_CONFIG, NgxMaskDirective, NgxMaskPipe, NgxMaskService, initialConfig, provideEnvironmentNgxMask, provideNgxMask, timeMasks, withoutValidation };\n"],"mappings":"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","names":["NGX_MASK_CONFIG","InjectionToken","NEW_CONFIG","INITIAL_CONFIG","initialConfig","value","EventEmitter","timeMasks","withoutValidation","NgxMaskApplierService","inject","str","thousandSeparatorChar","decimalChars","precision","x","decimalChar","regExp","v","decimals","res","separatorLimit","rgx","sanitizedStr","maskExpression","inputValue","i","substr","decimalMarker","marker","dm","precisionRegEx","precisionMatch","precisionMatchLength","diff","maskAndPattern","mask","customPattern","position","justPasted","backspaced","cb","cursor","result","multi","backspaceShift","shift","stepBack","inputArray","valuesIP","arr","base","inputValueAfterZero","positionOfZeroOrDecimalMarker","zeroIndexNumberZero","zeroIndexMinus","zeroIndexThousand","firstIndexDecimalMarker","firstIndexNumberZero","secondIndexDecimalMarker","thousandSeparatorCharEscaped","invalidChars","invalidCharRegexp","strForSep","commaShift","shiftStep","_shift","inputSymbol","symbolStarInPattern","daysCount","inputValueCursor","inputValueCursorPlusOne","inputValueCursorPlusTwo","inputValueCursorMinusOne","inputValueCursorMinusTwo","inputValueSliceMinusThreeMinusOne","inputValueSliceMinusOnePlusOne","inputValueSliceCursorPlusTwo","inputValueSliceMinusTwoCursor","maskStartWithMonth","startWithMonthInput","withoutDays","specialChart","day1monthInput","day2monthInput","day2monthInputDot","day1monthPaste","day2monthPaste","newPosition","actualShift","onlySpecial","char","isSpecialCharacterMaskFirstSymbol","val","maskSymbol","idx","isDecimalMarker","inputLength","comparedValue","excludedValue","index","decimalIndex","emptyOrMinus","parsedValue","integerPart","decimalPart","integerString","decimal","inputString","__ngFactoryType__","ɵɵdefineInjectable","NgxMaskService","_","ElementRef","DOCUMENT","Renderer2","getSymbol","newInputValue","actualResult","item","resLen","prefNmask","countSkipedSymbol","regex","match","formElement","curr","compare","symbol","maskChar","symbolToReplace","currSymbol","replaceSymbol","inputVal","name","cpf","cnpj","document","shadowRootEl","num","specialCharactersForRemove","specialCharacters","markers","separatorPrecision","separatorValue","key","patternString","pattern","maskExpretion","matcher","separatorExpression","maskExp","accum","currVal","repeatNumber","replaceWith","symbols","ɵNgxMaskService_BaseFactory","ɵɵgetInheritedFactory","_configFactory","initConfig","configValue","__spreadValues","provideNgxMask","provideEnvironmentNgxMask","makeEnvironmentProviders","NgxMaskDirective","changes","patterns","prefix","suffix","thousandSeparator","dropSpecialCharacters","hiddenInput","showMaskTyped","placeHolderCharacter","shownMaskExpression","showTemplate","clearIfNotMatch","validation","allowNegativeNumbers","leadZeroDateTime","leadZero","triggerOnMaskChange","apm","inputTransformFn","outputTransformFn","keepCharacterPositions","a","b","c","counterOfOpt","opt","array","length","lastIndexArray","special","el","transformedValue","prefixLength","checkSymbols","checkSpecialCharacter","selectRangeBackspace","selStart","selEnd","part1","part2","caretShift","_backspaceShift","specialChartMinusOne","specialChartPlusOne","positionToApply","posStart","posEnd","nextValue","cursorStart","controlValue","__async","localeDecimalMarker","fn","isDisabled","rowMaskLen","actualValue","test","expression","check","character","indexMask","removeSpecialCharacters","ch","ɵɵdefineDirective","rf","ctx","ɵɵlistener","$event","ɵɵProvidersFeature","NG_VALUE_ACCESSOR","NG_VALIDATORS","ɵɵNgOnChangesFeature"],"x_google_ignoreList":[0]}