{"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-empty-function, @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 // eslint-disable-next-line no-param-reassign\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 // eslint-disable-next-line no-param-reassign\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 if (inputValue[0] === \"0\" /* MaskExpression.NUMBER_ZERO */ && inputValue[1] === this.decimalMarker && (inputValue[position] === \"0\" /* MaskExpression.NUMBER_ZERO */ || inputValue[position] === this.decimalMarker)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = inputValue.slice(2, inputValue.length);\n }\n if (inputValue[0] === \"-\" /* MaskExpression.MINUS */ && inputValue[1] === \"0\" /* MaskExpression.NUMBER_ZERO */ && inputValue[2] === this.decimalMarker && (inputValue[position] === \"0\" /* MaskExpression.NUMBER_ZERO */ || inputValue[position] === this.decimalMarker)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = \"-\" /* MaskExpression.MINUS */ + inputValue.slice(3, inputValue.length);\n }\n // eslint-disable-next-line no-param-reassign\n inputValue = this._compareOrIncludes(inputValue[inputValue.length - 1], this.decimalMarker, this.thousandSeparator) ? inputValue.slice(0, inputValue.length - 1) : inputValue;\n }\n // TODO: we had different rexexps here for the different cases... but tests dont seam to bother - check this\n // separator: no COMMA, dot-sep: no SPACE, COMMA OK, comma-sep: no SPACE, COMMA OK\n 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] === \",\" /* MaskExpression.COMMA */) {\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 (\n // eslint-disable-next-line\n 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 inputValueCursorMinusThree = inputValue[cursor - 3];\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) && !backspaced) || (startWithMonthInput ? Number(inputValueSliceMinusOnePlusOne) > daysCount || !this.specialCharacters.includes(inputValueCursor) && this.specialCharacters.includes(inputValueCursorPlusTwo) || this.specialCharacters.includes(inputValueCursor) : Number(inputValueSliceCursorPlusTwo) > daysCount || this.specialCharacters.includes(inputValueCursorPlusOne) && !backspaced)) {\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) || this.specialCharacters.includes(inputValueCursorMinusThree) && Number(inputValueSliceMinusTwoCursor) > monthsCount && !this.specialCharacters.includes(inputValueCursorMinusOne) || this.specialCharacters.includes(inputValueCursorMinusOne));\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) && !backspaced);\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 (inputSymbol === \" \" /* MaskExpression.WHITE_SPACE */ && maskExpression[cursor] === \" \" /* MaskExpression.WHITE_SPACE */ || inputSymbol === \"/\" /* MaskExpression.SLASH */ && maskExpression[cursor] === \"/\" /* MaskExpression.SLASH */) {\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 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 static {\n this.ɵfac = function NgxMaskApplierService_Factory(t) {\n return new (t || 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-empty-function, @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 // eslint-disable-next-line complexity\n applyMask(inputValue, maskExpression, position = 0, justPasted = false, backspaced = false,\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @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 // eslint-disable-next-line @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 // eslint-disable-next-line no-param-reassign\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) {\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 ? 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-empty-function, @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.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(t) {\n return (ɵNgxMaskService_BaseFactory || (ɵNgxMaskService_BaseFactory = i0.ɵɵgetInheritedFactory(NgxMaskService)))(t || 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 // eslint-disable-next-line @angular-eslint/no-input-rename\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._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-empty-function, @typescript-eslint/no-explicit-any\n this.onChange = _ => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\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 // eslint-disable-next-line complexity\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.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.CURLY_BRACKETS_LEFT */) === 1 && value.toString().length === this._maskValue.length + Number((this._maskValue.split(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */)[1] ?? \"\" /* MaskExpression.EMPTY_STRING */).split(\"}\" /* MaskExpression.CURLY_BRACKETS_RIGHT */)[0]) - 4) {\n return null;\n } else 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 */) || this._maskValue.indexOf(\"{\" /* MaskExpression.CURLY_BRACKETS_LEFT */) === 1) {\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 position = this.specialCharacters.includes(this._inputValue.slice(position - 1, position)) ? position - 1 : position;\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 // eslint-disable-next-line complexity\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 // eslint-disable-next-line no-param-reassign\n let inputValue = controlValue;\n if (typeof inputValue === 'number' || this._maskValue.startsWith(\"separator\" /* MaskExpression.SEPARATOR */)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = String(inputValue);\n const localeDecimalMarker = this._maskService.currentLocaleDecimalMarker();\n if (!Array.isArray(this._maskService.decimalMarker)) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._maskService.decimalMarker !== localeDecimalMarker ? inputValue.replace(localeDecimalMarker, this._maskService.decimalMarker) : inputValue;\n }\n if (Array.isArray(this._maskService.decimalMarker) && this.decimalMarker === \".\" /* MaskExpression.DOT */) {\n this._maskService.decimalMarker = \",\" /* MaskExpression.COMMA */;\n }\n if (this._maskService.leadZero && inputValue && this.maskExpression && this.dropSpecialCharacters !== false) {\n // eslint-disable-next-line no-param-reassign\n inputValue = this._maskService._checkPrecision(this._maskService.maskExpression, inputValue);\n }\n if (this._maskService.decimalMarker === \",\" /* MaskExpression.COMMA */) {\n // eslint-disable-next-line no-param-reassign\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 // eslint-disable-next-line no-param-reassign\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 && !mask.includes(\"S\" /* MaskExpression.LETTER_S */) || 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 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) {\n this._maskValue = this.maskExpression = this._maskService.maskExpression = mask;\n return check;\n }\n }\n });\n }\n static {\n this.ɵfac = function NgxMaskDirective_Factory(t) {\n return new (t || 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: [i0.ɵɵInputFlags.None, \"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(t) {\n return new (t || 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","_NgxMaskApplierService","inject","str","thousandSeparatorChar","decimalChars","precision","_a","x","decimalChar","regExp","v","decimals","res","separatorLimit","rgx","sanitizedStr","maskExpression","inputValue","_b","_c","_d","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","thousandSeparatorCharEscaped","invalidChars","invalidCharRegexp","strForSep","commaShift","shiftStep","_shift","inputSymbol","symbolStarInPattern","daysCount","inputValueCursor","inputValueCursorPlusOne","inputValueCursorPlusTwo","inputValueCursorMinusOne","inputValueCursorMinusTwo","inputValueCursorMinusThree","inputValueSliceMinusThreeMinusOne","inputValueSliceMinusOnePlusOne","inputValueSliceCursorPlusTwo","inputValueSliceMinusTwoCursor","maskStartWithMonth","startWithMonthInput","withoutDays","specialChart","day1monthInput","day2monthInput","day2monthInputDot","day1monthPaste","day2monthPaste","newPosition","actualShift","onlySpecial","char","val","maskSymbol","idx","isDecimalMarker","inputLength","comparedValue","excludedValue","index","decimalIndex","emptyOrMinus","parsedValue","integerPart","decimalPart","integerString","decimal","ɵɵdefineInjectable","NgxMaskService","_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","t","ɵɵgetInheritedFactory","_configFactory","initConfig","configValue","__spreadValues","provideNgxMask","provideEnvironmentNgxMask","makeEnvironmentProviders","NgxMaskDirective","_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","positionToApply","posStart","posEnd","nextValue","cursorStart","controlValue","__async","localeDecimalMarker","fn","isDisabled","rowMaskLen","actualValue","test","expression","check","character","indexMask","ɵɵdefineDirective","rf","ctx","ɵɵlistener","$event","InputFlags","ɵɵProvidersFeature","NG_VALUE_ACCESSOR","NG_VALIDATORS","ɵɵNgOnChangesFeature"],"x_google_ignoreList":[0]}