{"version":3,"file":"scripts/ngx-mask/ngx-mask-18.min.js","mappings":"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","sources":["webpack://baas-static-web/webpack/runtime/create fake namespace object","webpack://baas-static-web/webpack/bootstrap","webpack://baas-static-web/webpack/runtime/define property getters","webpack://baas-static-web/webpack/runtime/hasOwnProperty shorthand","webpack://baas-static-web/webpack/runtime/make namespace object","webpack://baas-static-web/external var \"ng.core\"","webpack://baas-static-web/external var \"ng.common\"","webpack://baas-static-web/external var \"ng.forms\"","webpack://baas-static-web/./node_modules/ngx-mask/fesm2022/ngx-mask.mjs","webpack://baas-static-web/./src/3rd-party/ngx-mask.ts"],"sourcesContent":["var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = ng.core;","const __WEBPACK_NAMESPACE_OBJECT__ = ng.common;","const __WEBPACK_NAMESPACE_OBJECT__ = ng.forms;","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';\n\nvar MaskExpression;\n(function (MaskExpression) {\n MaskExpression[\"SEPARATOR\"] = \"separator\";\n MaskExpression[\"PERCENT\"] = \"percent\";\n MaskExpression[\"IP\"] = \"IP\";\n MaskExpression[\"CPF_CNPJ\"] = \"CPF_CNPJ\";\n MaskExpression[\"MONTH\"] = \"M\";\n MaskExpression[\"MONTHS\"] = \"M0\";\n MaskExpression[\"MINUTE\"] = \"m\";\n MaskExpression[\"HOUR\"] = \"h\";\n MaskExpression[\"HOURS\"] = \"H\";\n MaskExpression[\"MINUTES\"] = \"m0\";\n MaskExpression[\"HOURS_HOUR\"] = \"Hh\";\n MaskExpression[\"SECONDS\"] = \"s0\";\n MaskExpression[\"HOURS_MINUTES_SECONDS\"] = \"Hh:m0:s0\";\n MaskExpression[\"EMAIL_MASK\"] = \"A*@A*.A*\";\n MaskExpression[\"HOURS_MINUTES\"] = \"Hh:m0\";\n MaskExpression[\"MINUTES_SECONDS\"] = \"m0:s0\";\n MaskExpression[\"DAYS_MONTHS_YEARS\"] = \"d0/M0/0000\";\n MaskExpression[\"DAYS_MONTHS\"] = \"d0/M0\";\n MaskExpression[\"DAYS\"] = \"d0\";\n MaskExpression[\"DAY\"] = \"d\";\n MaskExpression[\"SECOND\"] = \"s\";\n MaskExpression[\"LETTER_S\"] = \"S\";\n MaskExpression[\"DOT\"] = \".\";\n MaskExpression[\"COMMA\"] = \",\";\n MaskExpression[\"CURLY_BRACKETS_LEFT\"] = \"{\";\n MaskExpression[\"CURLY_BRACKETS_RIGHT\"] = \"}\";\n MaskExpression[\"MINUS\"] = \"-\";\n MaskExpression[\"OR\"] = \"||\";\n MaskExpression[\"HASH\"] = \"#\";\n MaskExpression[\"EMPTY_STRING\"] = \"\";\n MaskExpression[\"SYMBOL_STAR\"] = \"*\";\n MaskExpression[\"SYMBOL_QUESTION\"] = \"?\";\n MaskExpression[\"SLASH\"] = \"/\";\n MaskExpression[\"WHITE_SPACE\"] = \" \";\n MaskExpression[\"NUMBER_ZERO\"] = \"0\";\n MaskExpression[\"NUMBER_NINE\"] = \"9\";\n MaskExpression[\"BACKSPACE\"] = \"Backspace\";\n MaskExpression[\"DELETE\"] = \"Delete\";\n MaskExpression[\"ARROW_LEFT\"] = \"ArrowLeft\";\n MaskExpression[\"ARROW_UP\"] = \"ArrowUp\";\n MaskExpression[\"DOUBLE_ZERO\"] = \"00\";\n})(MaskExpression || (MaskExpression = {}));\n\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: null,\n shownMaskExpression: '',\n separatorLimit: '',\n allowNegativeNumbers: false,\n validation: true,\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 = [\n MaskExpression.HOURS_MINUTES_SECONDS,\n MaskExpression.HOURS_MINUTES,\n MaskExpression.MINUTES_SECONDS,\n];\nconst withoutValidation = [\n MaskExpression.PERCENT,\n MaskExpression.HOURS_HOUR,\n MaskExpression.SECONDS,\n MaskExpression.MINUTES,\n MaskExpression.SEPARATOR,\n MaskExpression.DAYS_MONTHS_YEARS,\n MaskExpression.DAYS_MONTHS,\n MaskExpression.DAYS,\n MaskExpression.MONTHS,\n];\n\nclass NgxMaskApplierService {\n _config = inject(NGX_MASK_CONFIG);\n dropSpecialCharacters = this._config.dropSpecialCharacters;\n hiddenInput = this._config.hiddenInput;\n showTemplate;\n clearIfNotMatch = this._config.clearIfNotMatch;\n specialCharacters = this._config.specialCharacters;\n patterns = this._config.patterns;\n prefix = this._config.prefix;\n suffix = this._config.suffix;\n thousandSeparator = this._config.thousandSeparator;\n decimalMarker = this._config.decimalMarker;\n customPattern;\n showMaskTyped = this._config.showMaskTyped;\n placeHolderCharacter = this._config.placeHolderCharacter;\n validation = this._config.validation;\n separatorLimit = this._config.separatorLimit;\n allowNegativeNumbers = this._config.allowNegativeNumbers;\n leadZeroDateTime = this._config.leadZeroDateTime;\n leadZero = this._config.leadZero;\n apm = this._config.apm;\n inputTransformFn = this._config.inputTransformFn;\n outputTransformFn = this._config.outputTransformFn;\n keepCharacterPositions = this._config.keepCharacterPositions;\n _shift = new Set();\n plusOnePosition = false;\n maskExpression = '';\n actualValue = '';\n showKeepCharacterExp = '';\n shownMaskExpression = '';\n deletedSpecialCharacter = false;\n ipError;\n cpfCnpjError;\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, 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 let processedValue = inputValue;\n let processedPosition = position;\n if (processedValue.slice(0, this.prefix.length) === this.prefix) {\n processedValue = processedValue.slice(this.prefix.length, processedValue.length);\n }\n if (!!this.suffix && processedValue.length > 0) {\n processedValue = this.checkAndRemoveSuffix(processedValue);\n }\n if (processedValue === '(' && this.prefix) {\n processedValue = '';\n }\n const inputArray = processedValue.toString().split(MaskExpression.EMPTY_STRING);\n if (this.allowNegativeNumbers &&\n processedValue.slice(cursor, cursor + 1) === MaskExpression.MINUS) {\n result += processedValue.slice(cursor, cursor + 1);\n }\n if (maskExpression === MaskExpression.IP) {\n const valuesIP = processedValue.split(MaskExpression.DOT);\n this.ipError = this._validIP(valuesIP);\n maskExpression = '099.099.099.099';\n }\n const arr = [];\n for (let i = 0; i < processedValue.length; i++) {\n if (processedValue[i]?.match('\\\\d')) {\n arr.push(processedValue[i] ?? MaskExpression.EMPTY_STRING);\n }\n }\n if (maskExpression === MaskExpression.CPF_CNPJ) {\n this.cpfCnpjError = arr.length !== 11 && arr.length !== 14;\n if (arr.length > 11) {\n maskExpression = '00.000.000/0000-00';\n }\n else {\n maskExpression = '000.000.000-00';\n }\n }\n if (maskExpression.startsWith(MaskExpression.PERCENT)) {\n if (processedValue.match('[a-z]|[A-Z]') ||\n (processedValue.match(/[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,\\/.]/) && !backspaced)) {\n processedValue = this._stripToDecimal(processedValue);\n const precision = this.getPrecision(maskExpression);\n processedValue = this.checkInputPrecision(processedValue, precision, this.decimalMarker);\n }\n const decimalMarker = typeof this.decimalMarker === 'string' ? this.decimalMarker : MaskExpression.DOT;\n if (processedValue.indexOf(decimalMarker) > 0 &&\n !this.percentage(processedValue.substring(0, processedValue.indexOf(decimalMarker)))) {\n let base = processedValue.substring(0, processedValue.indexOf(decimalMarker) - 1);\n if (this.allowNegativeNumbers &&\n processedValue.slice(cursor, cursor + 1) === MaskExpression.MINUS &&\n !backspaced) {\n base = processedValue.substring(0, processedValue.indexOf(decimalMarker));\n }\n processedValue = `${base}${processedValue.substring(processedValue.indexOf(decimalMarker), processedValue.length)}`;\n }\n let value = '';\n this.allowNegativeNumbers &&\n processedValue.slice(cursor, cursor + 1) === MaskExpression.MINUS\n ? (value = `${MaskExpression.MINUS}${processedValue.slice(cursor + 1, cursor + processedValue.length)}`)\n : (value = processedValue);\n if (this.percentage(value)) {\n result = this._splitPercentZero(processedValue);\n }\n else {\n result = this._splitPercentZero(processedValue.substring(0, processedValue.length - 1));\n }\n }\n else if (maskExpression.startsWith(MaskExpression.SEPARATOR)) {\n if (processedValue.match('[wа-яА-Я]') ||\n processedValue.match('[ЁёА-я]') ||\n processedValue.match('[a-z]|[A-Z]') ||\n processedValue.match(/[-@#!$%\\\\^&*()_£¬'+|~=`{}\\]:\";<>.?/]/) ||\n processedValue.match('[^A-Za-z0-9,]')) {\n processedValue = this._stripToDecimal(processedValue);\n }\n const precision = this.getPrecision(maskExpression);\n const decimalMarker = Array.isArray(this.decimalMarker)\n ? this.thousandSeparator === MaskExpression.DOT\n ? MaskExpression.COMMA\n : MaskExpression.DOT\n : this.decimalMarker;\n if (precision === 0) {\n processedValue = this.allowNegativeNumbers\n ? processedValue.length > 2 &&\n processedValue[0] === MaskExpression.MINUS &&\n processedValue[1] === MaskExpression.NUMBER_ZERO &&\n processedValue[2] !== this.thousandSeparator &&\n processedValue[2] !== MaskExpression.COMMA &&\n processedValue[2] !== MaskExpression.DOT\n ? '-' + processedValue.slice(2, processedValue.length)\n : processedValue[0] === MaskExpression.NUMBER_ZERO &&\n processedValue.length > 1 &&\n processedValue[1] !== this.thousandSeparator &&\n processedValue[1] !== MaskExpression.COMMA &&\n processedValue[1] !== MaskExpression.DOT\n ? processedValue.slice(1, processedValue.length)\n : processedValue\n : processedValue.length > 1 &&\n processedValue[0] === MaskExpression.NUMBER_ZERO &&\n processedValue[1] !== this.thousandSeparator &&\n processedValue[1] !== MaskExpression.COMMA &&\n processedValue[1] !== MaskExpression.DOT\n ? processedValue.slice(1, processedValue.length)\n : processedValue;\n }\n else {\n if (processedValue[0] === decimalMarker && processedValue.length > 1) {\n processedValue =\n MaskExpression.NUMBER_ZERO +\n processedValue.slice(0, processedValue.length + 1);\n this.plusOnePosition = true;\n }\n if (processedValue[0] === MaskExpression.NUMBER_ZERO &&\n processedValue[1] !== decimalMarker &&\n processedValue[1] !== this.thousandSeparator) {\n processedValue =\n processedValue.length > 1\n ? processedValue.slice(0, 1) +\n decimalMarker +\n processedValue.slice(1, processedValue.length + 1)\n : processedValue;\n this.plusOnePosition = true;\n }\n if (this.allowNegativeNumbers &&\n processedValue[0] === MaskExpression.MINUS &&\n (processedValue[1] === decimalMarker ||\n processedValue[1] === MaskExpression.NUMBER_ZERO)) {\n processedValue =\n processedValue[1] === decimalMarker && processedValue.length > 2\n ? processedValue.slice(0, 1) +\n MaskExpression.NUMBER_ZERO +\n processedValue.slice(1, processedValue.length)\n : processedValue[1] === MaskExpression.NUMBER_ZERO &&\n processedValue.length > 2 &&\n processedValue[2] !== decimalMarker\n ? processedValue.slice(0, 2) +\n decimalMarker +\n processedValue.slice(2, processedValue.length)\n : processedValue;\n this.plusOnePosition = true;\n }\n }\n if (backspaced) {\n const inputValueAfterZero = processedValue.slice(this._findFirstNonZeroDigitIndex(processedValue), processedValue.length);\n const positionOfZeroOrDecimalMarker = processedValue[processedPosition] === MaskExpression.NUMBER_ZERO ||\n processedValue[processedPosition] === decimalMarker;\n const zeroIndexNumberZero = processedValue[0] === MaskExpression.NUMBER_ZERO;\n const zeroIndexMinus = processedValue[0] === MaskExpression.MINUS;\n const zeroIndexThousand = processedValue[0] === this.thousandSeparator;\n const firstIndexDecimalMarker = processedValue[1] === decimalMarker;\n const firstIndexNumberZero = processedValue[1] === MaskExpression.NUMBER_ZERO;\n const secondIndexDecimalMarker = processedValue[2] === decimalMarker;\n if (zeroIndexNumberZero &&\n firstIndexDecimalMarker &&\n positionOfZeroOrDecimalMarker &&\n processedPosition < 2) {\n processedValue = inputValueAfterZero;\n }\n if (zeroIndexMinus &&\n firstIndexNumberZero &&\n secondIndexDecimalMarker &&\n positionOfZeroOrDecimalMarker &&\n processedPosition < 3) {\n processedValue = MaskExpression.MINUS + inputValueAfterZero;\n }\n if (inputValueAfterZero !== MaskExpression.MINUS &&\n ((processedPosition === 0 && (zeroIndexNumberZero || zeroIndexThousand)) ||\n (this.allowNegativeNumbers &&\n processedPosition === 1 &&\n zeroIndexMinus &&\n !firstIndexNumberZero))) {\n processedValue = zeroIndexMinus\n ? MaskExpression.MINUS + inputValueAfterZero\n : inputValueAfterZero;\n }\n }\n const thousandSeparatorCharEscaped = this._charToRegExpExpression(this.thousandSeparator);\n let invalidChars = '@#!$%^&*()_+|~=`{}\\\\[\\\\]:\\\\s,\\\\.\";<>?\\\\/'.replace(thousandSeparatorCharEscaped, '');\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 }\n else {\n invalidChars = invalidChars.replace(this._charToRegExpExpression(this.decimalMarker), '');\n }\n const invalidCharRegexp = new RegExp('[' + invalidChars + ']');\n if (processedValue.match(invalidCharRegexp)) {\n processedValue = processedValue.substring(0, processedValue.length - 1);\n }\n processedValue = this.checkInputPrecision(processedValue, precision, this.decimalMarker);\n const strForSep = processedValue.replace(new RegExp(thousandSeparatorCharEscaped, 'g'), '');\n result = this._formatWithSeparators(strForSep, this.thousandSeparator, this.decimalMarker, precision);\n const commaShift = result.indexOf(MaskExpression.COMMA) - processedValue.indexOf(MaskExpression.COMMA);\n const shiftStep = result.length - processedValue.length;\n const backspacedDecimalMarkerWithSeparatorLimit = backspaced && result.length < inputValue.length && this.separatorLimit;\n if ((result[processedPosition - 1] === this.thousandSeparator ||\n result[processedPosition - this.prefix.length]) &&\n this.prefix &&\n backspaced) {\n processedPosition = processedPosition - 1;\n }\n else if ((shiftStep > 0 && result[processedPosition] !== this.thousandSeparator) ||\n backspacedDecimalMarkerWithSeparatorLimit) {\n backspaceShift = true;\n let _shift = 0;\n do {\n this._shift.add(processedPosition + _shift);\n _shift++;\n } while (_shift < shiftStep);\n }\n else if (result[processedPosition - 1] === this.thousandSeparator ||\n shiftStep === -4 ||\n shiftStep === -3 ||\n result[processedPosition] === this.thousandSeparator) {\n this._shift.clear();\n this._shift.add(processedPosition - 1);\n }\n else if ((commaShift !== 0 &&\n processedPosition > 0 &&\n !(result.indexOf(MaskExpression.COMMA) >= processedPosition &&\n processedPosition > 3)) ||\n (!(result.indexOf(MaskExpression.DOT) >= processedPosition && processedPosition > 3) &&\n shiftStep <= 0)) {\n this._shift.clear();\n backspaceShift = true;\n shift = shiftStep;\n processedPosition += shiftStep;\n this._shift.add(processedPosition);\n }\n else {\n this._shift.clear();\n }\n }\n else {\n for (let i = 0, inputSymbol = inputArray[0]; i < inputArray.length; i++, inputSymbol = inputArray[i] ?? MaskExpression.EMPTY_STRING) {\n if (cursor === maskExpression.length) {\n break;\n }\n const symbolStarInPattern = MaskExpression.SYMBOL_STAR in this.patterns;\n if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? MaskExpression.EMPTY_STRING) &&\n maskExpression[cursor + 1] === MaskExpression.SYMBOL_QUESTION) {\n result += inputSymbol;\n cursor += 2;\n }\n else if (maskExpression[cursor + 1] === MaskExpression.SYMBOL_STAR &&\n multi &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? MaskExpression.EMPTY_STRING)) {\n result += inputSymbol;\n cursor += 3;\n multi = false;\n }\n else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? MaskExpression.EMPTY_STRING) &&\n maskExpression[cursor + 1] === MaskExpression.SYMBOL_STAR &&\n !symbolStarInPattern) {\n result += inputSymbol;\n multi = true;\n }\n else if (maskExpression[cursor + 1] === MaskExpression.SYMBOL_QUESTION &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2] ?? MaskExpression.EMPTY_STRING)) {\n result += inputSymbol;\n cursor += 3;\n }\n else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor] ?? MaskExpression.EMPTY_STRING)) {\n if (maskExpression[cursor] === MaskExpression.HOURS) {\n if (this.apm ? Number(inputSymbol) > 9 : Number(inputSymbol) > 2) {\n processedPosition = !this.leadZeroDateTime\n ? processedPosition + 1\n : processedPosition;\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] === MaskExpression.HOUR) {\n if (this.apm\n ? (result.length === 1 && Number(result) > 1) ||\n (result === '1' && Number(inputSymbol) > 2) ||\n (processedValue.slice(cursor - 1, cursor).length === 1 &&\n Number(processedValue.slice(cursor - 1, cursor)) > 2) ||\n (processedValue.slice(cursor - 1, cursor) === '1' &&\n Number(inputSymbol) > 2)\n : (result === '2' && Number(inputSymbol) > 3) ||\n ((result.slice(cursor - 2, cursor) === '2' ||\n result.slice(cursor - 3, cursor) === '2' ||\n result.slice(cursor - 4, cursor) === '2' ||\n result.slice(cursor - 1, cursor) === '2') &&\n Number(inputSymbol) > 3 &&\n cursor > 10)) {\n processedPosition = processedPosition + 1;\n cursor += 1;\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === MaskExpression.MINUTE ||\n maskExpression[cursor] === MaskExpression.SECOND) {\n if (Number(inputSymbol) > 5) {\n processedPosition = !this.leadZeroDateTime\n ? processedPosition + 1\n : processedPosition;\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 = processedValue[cursor];\n const inputValueCursorPlusOne = processedValue[cursor + 1];\n const inputValueCursorPlusTwo = processedValue[cursor + 2];\n const inputValueCursorMinusOne = processedValue[cursor - 1];\n const inputValueCursorMinusTwo = processedValue[cursor - 2];\n const inputValueSliceMinusThreeMinusOne = processedValue.slice(cursor - 3, cursor - 1);\n const inputValueSliceMinusOnePlusOne = processedValue.slice(cursor - 1, cursor + 1);\n const inputValueSliceCursorPlusTwo = processedValue.slice(cursor, cursor + 2);\n const inputValueSliceMinusTwoCursor = processedValue.slice(cursor - 2, cursor);\n if (maskExpression[cursor] === MaskExpression.DAY) {\n const maskStartWithMonth = maskExpression.slice(0, 2) === MaskExpression.MONTHS;\n const startWithMonthInput = maskExpression.slice(0, 2) === MaskExpression.MONTHS &&\n this.specialCharacters.includes(inputValueCursorMinusTwo);\n if ((Number(inputSymbol) > 3 && this.leadZeroDateTime) ||\n (!maskStartWithMonth &&\n (Number(inputValueSliceCursorPlusTwo) > daysCount ||\n Number(inputValueSliceMinusOnePlusOne) > daysCount ||\n this.specialCharacters.includes(inputValueCursorPlusOne))) ||\n (startWithMonthInput\n ? Number(inputValueSliceMinusOnePlusOne) > daysCount ||\n (!this.specialCharacters.includes(inputValueCursor) &&\n this.specialCharacters.includes(inputValueCursorPlusTwo)) ||\n this.specialCharacters.includes(inputValueCursor)\n : Number(inputValueSliceCursorPlusTwo) > daysCount ||\n (this.specialCharacters.includes(inputValueCursorPlusOne) &&\n !backspaced))) {\n processedPosition = !this.leadZeroDateTime\n ? processedPosition + 1\n : processedPosition;\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] === MaskExpression.MONTH) {\n const monthsCount = 12;\n const withoutDays = cursor === 0 &&\n (Number(inputSymbol) > 2 ||\n Number(inputValueSliceCursorPlusTwo) > monthsCount ||\n (this.specialCharacters.includes(inputValueCursorPlusOne) &&\n !backspaced));\n const specialChart = maskExpression.slice(cursor + 2, cursor + 3);\n const day1monthInput = inputValueSliceMinusThreeMinusOne.includes(specialChart) &&\n maskExpression.includes('d0') &&\n ((this.specialCharacters.includes(inputValueCursorMinusTwo) &&\n Number(inputValueSliceMinusOnePlusOne) > monthsCount &&\n !this.specialCharacters.includes(inputValueCursor)) ||\n this.specialCharacters.includes(inputValueCursor));\n const day2monthInput = Number(inputValueSliceMinusThreeMinusOne) <= daysCount &&\n !this.specialCharacters.includes(inputValueSliceMinusThreeMinusOne) &&\n this.specialCharacters.includes(inputValueCursorMinusOne) &&\n (Number(inputValueSliceCursorPlusTwo) > monthsCount ||\n this.specialCharacters.includes(inputValueCursorPlusOne));\n const day2monthInputDot = (Number(inputValueSliceCursorPlusTwo) > monthsCount && cursor === 5) ||\n (this.specialCharacters.includes(inputValueCursorPlusOne) &&\n cursor === 5);\n const day1monthPaste = Number(inputValueSliceMinusThreeMinusOne) > daysCount &&\n !this.specialCharacters.includes(inputValueSliceMinusThreeMinusOne) &&\n !this.specialCharacters.includes(inputValueSliceMinusTwoCursor) &&\n Number(inputValueSliceMinusTwoCursor) > monthsCount &&\n maskExpression.includes('d0');\n const day2monthPaste = Number(inputValueSliceMinusThreeMinusOne) <= daysCount &&\n !this.specialCharacters.includes(inputValueSliceMinusThreeMinusOne) &&\n !this.specialCharacters.includes(inputValueCursorMinusOne) &&\n Number(inputValueSliceMinusOnePlusOne) > monthsCount;\n if ((Number(inputSymbol) > 1 && this.leadZeroDateTime) ||\n withoutDays ||\n day1monthInput ||\n day2monthPaste ||\n day1monthPaste ||\n day2monthInput ||\n (day2monthInputDot && !this.leadZeroDateTime)) {\n processedPosition = !this.leadZeroDateTime\n ? processedPosition + 1\n : processedPosition;\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 }\n else if (this.specialCharacters.includes(inputSymbol) &&\n maskExpression[cursor] === inputSymbol) {\n result += inputSymbol;\n cursor++;\n }\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 }\n else if (maskExpression[cursor] === MaskExpression.NUMBER_NINE &&\n this.showMaskTyped) {\n this._shiftStep(maskExpression, cursor, inputArray.length);\n }\n else if (this.patterns[maskExpression[cursor] ?? MaskExpression.EMPTY_STRING] &&\n this.patterns[maskExpression[cursor] ?? MaskExpression.EMPTY_STRING]?.optional) {\n if (!!inputArray[cursor] &&\n maskExpression !== '099.099.099.099' &&\n maskExpression !== '000.000.000-00' &&\n maskExpression !== '00.000.000/0000-00' &&\n !maskExpression.match(/^9+\\.0+$/) &&\n !this.patterns[maskExpression[cursor] ?? MaskExpression.EMPTY_STRING]\n ?.optional) {\n result += inputArray[cursor];\n }\n if (maskExpression.includes(MaskExpression.NUMBER_NINE + MaskExpression.SYMBOL_STAR) &&\n maskExpression.includes(MaskExpression.NUMBER_ZERO + MaskExpression.SYMBOL_STAR)) {\n cursor++;\n }\n cursor++;\n i--;\n }\n else if (this.maskExpression[cursor + 1] === MaskExpression.SYMBOL_STAR &&\n this._findSpecialChar(this.maskExpression[cursor + 2] ?? MaskExpression.EMPTY_STRING) &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi) {\n cursor += 3;\n result += inputSymbol;\n }\n else if (this.maskExpression[cursor + 1] === MaskExpression.SYMBOL_QUESTION &&\n this._findSpecialChar(this.maskExpression[cursor + 2] ?? MaskExpression.EMPTY_STRING) &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi) {\n cursor += 3;\n result += inputSymbol;\n }\n else if (this.showMaskTyped &&\n this.specialCharacters.indexOf(inputSymbol) < 0 &&\n inputSymbol !== this.placeHolderCharacter &&\n this.placeHolderCharacter.length === 1) {\n stepBack = true;\n }\n }\n }\n if (result.length + 1 === maskExpression.length &&\n this.specialCharacters.indexOf(maskExpression[maskExpression.length - 1] ?? MaskExpression.EMPTY_STRING) !== -1) {\n result += maskExpression[maskExpression.length - 1];\n }\n let newPosition = processedPosition + 1;\n while (this._shift.has(newPosition)) {\n shift++;\n newPosition++;\n }\n let actualShift = justPasted && !maskExpression.startsWith(MaskExpression.SEPARATOR)\n ? cursor\n : this._shift.has(processedPosition)\n ? shift\n : 0;\n if (stepBack) {\n actualShift--;\n }\n cb(actualShift, backspaceShift);\n if (shift < 0) {\n this._shift.clear();\n }\n let onlySpecial = false;\n if (backspaced) {\n onlySpecial = inputArray.every((char) => this.specialCharacters.includes(char));\n }\n let res = `${this.prefix}${onlySpecial ? MaskExpression.EMPTY_STRING : result}${this.showMaskTyped ? '' : this.suffix}`;\n if (result.length === 0) {\n res = !this.dropSpecialCharacters ? `${this.prefix}${result}` : `${result}`;\n }\n const isSpecialCharacterMaskFirstSymbol = processedValue.length === 1 &&\n this.specialCharacters.includes(maskExpression[0]) &&\n processedValue !== maskExpression[0];\n if (!this._checkSymbolMask(processedValue, maskExpression[1]) &&\n isSpecialCharacterMaskFirstSymbol) {\n return '';\n }\n if (result.includes(MaskExpression.MINUS) && this.prefix && this.allowNegativeNumbers) {\n if (backspaced && result === MaskExpression.MINUS) {\n return '';\n }\n res = `${MaskExpression.MINUS}${this.prefix}${result\n .split(MaskExpression.MINUS)\n .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 &&\n this.patterns[maskSymbol]?.pattern.test(inputSymbol)) ??\n false);\n }\n _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 }\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 }\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 (typeof precision === 'undefined') {\n return res + decimals;\n }\n else if (precision === 0) {\n return res;\n }\n return res + decimals.substring(0, precision + 1);\n };\n percentage = (str) => {\n const sanitizedStr = str.replace(',', '.');\n const value = Number(this.allowNegativeNumbers && str.includes(MaskExpression.MINUS)\n ? sanitizedStr.slice(1, str.length)\n : sanitizedStr);\n return !isNaN(value) && value >= 0 && value <= 100;\n };\n 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 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) &&\n i !== this.suffix?.length - 1 &&\n (i - 1 < 0 ||\n !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 checkInputPrecision = (inputValue, precision, decimalMarker) => {\n let processedInputValue = inputValue;\n let processedDecimalMarker = decimalMarker;\n if (precision < Infinity) {\n if (Array.isArray(processedDecimalMarker)) {\n const marker = processedDecimalMarker.find((dm) => dm !== this.thousandSeparator);\n processedDecimalMarker = marker ? marker : processedDecimalMarker[0];\n }\n const precisionRegEx = new RegExp(this._charToRegExpExpression(processedDecimalMarker) + `\\\\d{${precision}}.*$`);\n const precisionMatch = processedInputValue.match(precisionRegEx);\n const precisionMatchLength = (precisionMatch && precisionMatch[0]?.length) ?? 0;\n if (precisionMatchLength - 1 > precision) {\n const diff = precisionMatchLength - 1 - precision;\n processedInputValue = processedInputValue.substring(0, processedInputValue.length - diff);\n }\n if (precision === 0 &&\n this._compareOrIncludes(processedInputValue[processedInputValue.length - 1], processedDecimalMarker, this.thousandSeparator)) {\n processedInputValue = processedInputValue.substring(0, processedInputValue.length - 1);\n }\n }\n return processedInputValue;\n };\n _stripToDecimal(str) {\n return str\n .split(MaskExpression.EMPTY_STRING)\n .filter((i, idx) => {\n const isDecimalMarker = typeof this.decimalMarker === 'string'\n ? i === this.decimalMarker\n :\n this.decimalMarker.includes(i);\n return (i.match('^-?\\\\d') ||\n i === this.thousandSeparator ||\n isDecimalMarker ||\n (i === MaskExpression.MINUS && idx === 0 && this.allowNegativeNumbers));\n })\n .join(MaskExpression.EMPTY_STRING);\n }\n _charToRegExpExpression(char) {\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))\n ? inputLength\n : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n }\n _compareOrIncludes(value, comparedValue, excludedValue) {\n return Array.isArray(comparedValue)\n ? comparedValue.filter((v) => v !== excludedValue).includes(value)\n : value === comparedValue;\n }\n _validIP(valuesIP) {\n return !(valuesIP.length === 4 &&\n !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'\n ? value.indexOf(this.decimalMarker)\n : 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)\n ? MaskExpression.EMPTY_STRING\n : `${emptyOrMinus}${parsedValue}`;\n }\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\n ? MaskExpression.EMPTY_STRING\n : `${emptyOrMinus}${integerString}${decimal}${decimalPart}`;\n }\n }\n _findFirstNonZeroDigitIndex(inputString) {\n for (let i = 0; i < inputString.length; i++) {\n const char = inputString[i];\n if (char && char >= '1' && char <= '9') {\n return i;\n }\n }\n return -1;\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.2.9\", ngImport: i0, type: NgxMaskApplierService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"18.2.9\", ngImport: i0, type: NgxMaskApplierService });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.2.9\", ngImport: i0, type: NgxMaskApplierService, decorators: [{\n type: Injectable\n }] });\n\nclass NgxMaskService extends NgxMaskApplierService {\n isNumberValue = false;\n maskIsShown = '';\n selStart = null;\n selEnd = null;\n writingValue = false;\n maskChanged = false;\n _maskExpressionArray = [];\n triggerOnMaskChange = false;\n _previousValue = '';\n _currentValue = '';\n _emitValue = false;\n _start;\n _end;\n onChange = (_) => { };\n _elementRef = inject(ElementRef, { optional: true });\n document = inject(DOCUMENT);\n _config = inject(NGX_MASK_CONFIG);\n _renderer = inject(Renderer2, { optional: true });\n applyMask(inputValue, maskExpression, position = 0, justPasted = false, backspaced = false, cb = () => { }) {\n if (!maskExpression) {\n return inputValue !== this.actualValue ? this.actualValue : inputValue;\n }\n this.maskIsShown = this.showMaskTyped\n ? this.showMaskInInput()\n : MaskExpression.EMPTY_STRING;\n if (this.maskExpression === MaskExpression.IP && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || MaskExpression.HASH);\n }\n if (this.maskExpression === 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'\n ? (inputValue[this.selStart] ?? MaskExpression.EMPTY_STRING)\n : MaskExpression.EMPTY_STRING;\n let newInputValue = '';\n let newPosition = position;\n if (this.hiddenInput !== null && !this.writingValue) {\n let actualResult = inputValue && inputValue.length === 1\n ? inputValue.split(MaskExpression.EMPTY_STRING)\n : this.actualValue.split(MaskExpression.EMPTY_STRING);\n if (typeof this.selStart === 'object' && typeof this.selEnd === 'object') {\n this.selStart = Number(this.selStart);\n this.selEnd = Number(this.selEnd);\n }\n else {\n inputValue !== MaskExpression.EMPTY_STRING && actualResult.length\n ? typeof this.selStart === 'number' && typeof this.selEnd === 'number'\n ? inputValue.length > actualResult.length\n ? actualResult.splice(this.selStart, 0, getSymbol)\n : inputValue.length < actualResult.length\n ? actualResult.length - inputValue.length === 1\n ? backspaced\n ? actualResult.splice(this.selStart - 1, 1)\n : actualResult.splice(inputValue.length - 1, 1)\n : actualResult.splice(this.selStart, this.selEnd - this.selStart)\n : null\n : null\n : (actualResult = []);\n }\n if (this.showMaskTyped && !this.hiddenInput) {\n newInputValue = this.removeMask(inputValue);\n }\n newInputValue =\n this.actualValue.length && actualResult.length <= inputValue.length\n ? this.shiftTypedSymbols(actualResult.join(MaskExpression.EMPTY_STRING))\n : inputValue;\n }\n if (justPasted && (this.hiddenInput || !this.hiddenInput)) {\n newInputValue = inputValue;\n }\n if (backspaced &&\n this.specialCharacters.indexOf(this.maskExpression[newPosition] ?? MaskExpression.EMPTY_STRING) !== -1 &&\n this.showMaskTyped &&\n !this.prefix) {\n newInputValue = this._currentValue;\n }\n if (this.deletedSpecialCharacter && newPosition) {\n if (this.specialCharacters.includes(this.actualValue.slice(newPosition, newPosition + 1))) {\n newPosition = newPosition + 1;\n }\n else if (maskExpression.slice(newPosition - 1, newPosition + 1) !== MaskExpression.MONTHS) {\n newPosition = newPosition - 2;\n }\n this.deletedSpecialCharacter = false;\n }\n if (this.showMaskTyped &&\n this.placeHolderCharacter.length === 1 &&\n !this.leadZeroDateTime) {\n newInputValue = this.removeMask(inputValue);\n }\n if (this.maskChanged) {\n newInputValue = inputValue;\n }\n else {\n newInputValue =\n Boolean(newInputValue) && newInputValue.length ? newInputValue : inputValue;\n }\n if (this.showMaskTyped &&\n this.keepCharacterPositions &&\n this.actualValue &&\n !justPasted &&\n !this.writingValue) {\n const value = this.dropSpecialCharacters\n ? this.removeMask(this.actualValue)\n : this.actualValue;\n this.formControlResult(value);\n return this.actualValue\n ? this.actualValue\n : `${this.prefix}${this.maskIsShown}${this.suffix}`;\n }\n const result = super.applyMask(newInputValue, maskExpression, newPosition, justPasted, backspaced, cb);\n this.actualValue = this.getActualValue(result);\n if (this.thousandSeparator === MaskExpression.DOT &&\n this.decimalMarker === MaskExpression.DOT) {\n this.decimalMarker = MaskExpression.COMMA;\n }\n if (this.maskExpression.startsWith(MaskExpression.SEPARATOR) &&\n this.dropSpecialCharacters === true) {\n this.specialCharacters = this.specialCharacters.filter((item) => !this._compareOrIncludes(item, this.decimalMarker, this.thousandSeparator));\n }\n if (result || result === '') {\n this._previousValue = this._currentValue;\n this._currentValue = result;\n this._emitValue =\n this._previousValue !== this._currentValue ||\n this.maskChanged ||\n this.writingValue ||\n (this._previousValue === this._currentValue && justPasted);\n }\n this._emitValue\n ? this.writingValue && this.triggerOnMaskChange\n ? requestAnimationFrame(() => this.formControlResult(result))\n : this.formControlResult(result)\n : '';\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(MaskExpression.HOURS)) {\n const countSkipedSymbol = this._numberSkipedSymbols(result);\n return `${result}${prefNmask.slice(resLen + countSkipedSymbol)}`;\n }\n else if (this.maskExpression === MaskExpression.IP ||\n this.maskExpression === MaskExpression.CPF_CNPJ) {\n return `${result}${prefNmask}`;\n }\n return `${result}${prefNmask.slice(resLen)}`;\n }\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, 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\n .split(MaskExpression.EMPTY_STRING)\n .map((curr, index) => {\n if (this.patterns &&\n this.patterns[maskExpression[index] ?? MaskExpression.EMPTY_STRING] &&\n this.patterns[maskExpression[index] ?? MaskExpression.EMPTY_STRING]?.symbol) {\n return this.patterns[maskExpression[index] ?? MaskExpression.EMPTY_STRING]\n ?.symbol;\n }\n return curr;\n })\n .join(MaskExpression.EMPTY_STRING);\n }\n getActualValue(res) {\n const compare = res\n .split(MaskExpression.EMPTY_STRING)\n .filter((symbol, i) => {\n const maskChar = this.maskExpression[i] ?? MaskExpression.EMPTY_STRING;\n return (this._checkSymbolMask(symbol, maskChar) ||\n (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 &&\n inputValue\n .split(MaskExpression.EMPTY_STRING)\n .map((currSymbol, index) => {\n if (this.specialCharacters.includes(inputValue[index + 1] ?? MaskExpression.EMPTY_STRING) &&\n 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 [];\n return newInputValue.join(MaskExpression.EMPTY_STRING);\n }\n numberToString(value) {\n if ((!value && value !== 0) ||\n (this.maskExpression.startsWith(MaskExpression.SEPARATOR) &&\n (this.leadZero || !this.dropSpecialCharacters)) ||\n (this.maskExpression.startsWith(MaskExpression.SEPARATOR) &&\n this.separatorLimit.length > 14 &&\n String(value).length > 14)) {\n return String(value);\n }\n return Number(value)\n .toLocaleString('fullwide', {\n useGrouping: false,\n maximumFractionDigits: 20,\n })\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 }\n else {\n return this.shownMaskExpression;\n }\n }\n else if (this.showMaskTyped) {\n if (inputVal) {\n if (this.maskExpression === MaskExpression.IP) {\n return this._checkForIp(inputVal);\n }\n if (this.maskExpression === 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 &&\n this.prefix.length + this.maskExpression.length + this.suffix.length !==\n formElement.value.replace(this.placeHolderCharacter, MaskExpression.EMPTY_STRING)\n .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 Promise.resolve().then(() => this._renderer?.setProperty(this._elementRef?.nativeElement, name, value));\n }\n checkDropSpecialCharAmount(mask) {\n const chars = mask\n .split(MaskExpression.EMPTY_STRING)\n .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}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n const cnpj = `${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `/${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n 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 _getActiveElement(document = this.document) {\n const shadowRootEl = document?.activeElement?.shadowRoot;\n if (!shadowRootEl?.activeElement) {\n return document.activeElement;\n }\n else {\n return this._getActiveElement(shadowRootEl);\n }\n }\n formControlResult(inputValue) {\n if (this.writingValue && !inputValue) {\n this.onChange('');\n return;\n }\n if (this.writingValue || (!this.triggerOnMaskChange && this.maskChanged)) {\n this.triggerOnMaskChange && this.maskChanged\n ? this.onChange(this.outputTransformFn(this._toNumber(this._checkSymbols(this._removeSuffix(this._removePrefix(inputValue))))))\n : '';\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 }\n else if (this.dropSpecialCharacters ||\n (!this.dropSpecialCharacters && this.prefix === inputValue)) {\n this.onChange(this.outputTransformFn(this._toNumber(this._checkSymbols(this._removeSuffix(this._removePrefix(inputValue))))));\n }\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(MaskExpression.SEPARATOR) &&\n (this.leadZero || !this.dropSpecialCharacters)) {\n return value;\n }\n if (String(value).length > 14 && this.maskExpression.startsWith(MaskExpression.SEPARATOR)) {\n return String(value);\n }\n const num = Number(value);\n if (this.maskExpression.startsWith(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(MaskExpression.PERCENT) &&\n value.includes(MaskExpression.DOT)) {\n return value;\n }\n return value\n ? value.replace(this._regExpForRemove(specialCharactersForRemove), MaskExpression.EMPTY_STRING)\n : 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)\n ? this.specialCharacters.filter((v) => {\n return this.dropSpecialCharacters.includes(v);\n })\n : this.specialCharacters;\n if (!this.deletedSpecialCharacter &&\n this._checkPatternForSpace() &&\n result.includes(MaskExpression.WHITE_SPACE) &&\n 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)\n ? this.decimalMarker\n : [this.decimalMarker];\n return value.replace(this._regExpForRemove(markers), MaskExpression.DOT);\n }\n _checkSymbols(result) {\n let processedResult = result;\n if (processedResult === MaskExpression.EMPTY_STRING) {\n return processedResult;\n }\n if (this.maskExpression.startsWith(MaskExpression.PERCENT) &&\n this.decimalMarker === MaskExpression.COMMA) {\n processedResult = processedResult.replace(MaskExpression.COMMA, MaskExpression.DOT);\n }\n const separatorPrecision = this._retrieveSeparatorPrecision(this.maskExpression);\n const separatorValue = this._replaceDecimalMarkerToDot(this._retrieveSeparatorValue(processedResult));\n if (!this.isNumberValue) {\n return separatorValue;\n }\n if (separatorPrecision) {\n if (processedResult === this.decimalMarker) {\n return null;\n }\n if (separatorValue.length > 14) {\n return String(separatorValue);\n }\n return this._checkPrecision(this.maskExpression, separatorValue);\n }\n else {\n return separatorValue;\n }\n }\n _checkPatternForSpace() {\n for (const key in this.patterns) {\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) &&\n pattern?.test(this.maskExpression)) {\n return true;\n }\n }\n }\n return false;\n }\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 = this.getPrecision(separatorExpression);\n let value = separatorValue;\n if (separatorExpression.indexOf('2') > 0 ||\n (this.leadZero && Number(separatorPrecision) > 0)) {\n if (this.decimalMarker === MaskExpression.COMMA && this.leadZero) {\n value = value.replace(',', '.');\n }\n return this.leadZero\n ? Number(value).toFixed(Number(separatorPrecision))\n : Number(value).toFixed(2);\n }\n return this.numberToString(value);\n }\n _repeatPatternSymbols(maskExp) {\n return ((maskExp.match(/{[0-9]+}/) &&\n maskExp\n .split(MaskExpression.EMPTY_STRING)\n .reduce((accum, currVal, index) => {\n this._start =\n 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 &&\n maskExp.includes(MaskExpression.LETTER_S)) {\n const symbols = maskExp.slice(0, this._start - 1);\n return symbols.includes(MaskExpression.CURLY_BRACKETS_LEFT)\n ? accum + replaceWith\n : symbols + accum + replaceWith;\n }\n else {\n return accum + replaceWith;\n }\n }, '')) ||\n maskExp);\n }\n currentLocaleDecimalMarker() {\n return (1.1).toLocaleString().substring(1, 2);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.2.9\", ngImport: i0, type: NgxMaskService, deps: null, target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"18.2.9\", ngImport: i0, type: NgxMaskService });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.2.9\", ngImport: i0, type: NgxMaskService, decorators: [{\n type: Injectable\n }] });\n\nfunction _configFactory() {\n const initConfig = inject(INITIAL_CONFIG);\n const configValue = inject(NEW_CONFIG);\n return configValue instanceof Function\n ? { ...initConfig, ...configValue() }\n : { ...initConfig, ...configValue };\n}\nfunction provideNgxMask(configValue) {\n return [\n {\n provide: NEW_CONFIG,\n useValue: configValue,\n },\n {\n provide: INITIAL_CONFIG,\n useValue: initialConfig,\n },\n {\n provide: NGX_MASK_CONFIG,\n useFactory: _configFactory,\n },\n NgxMaskService,\n ];\n}\nfunction provideEnvironmentNgxMask(configValue) {\n return makeEnvironmentProviders(provideNgxMask(configValue));\n}\n\nclass NgxMaskDirective {\n maskExpression = '';\n specialCharacters = [];\n patterns = {};\n prefix = '';\n suffix = '';\n thousandSeparator = ' ';\n decimalMarker = '.';\n dropSpecialCharacters = null;\n hiddenInput = null;\n showMaskTyped = null;\n placeHolderCharacter = null;\n shownMaskExpression = null;\n showTemplate = null;\n clearIfNotMatch = null;\n validation = null;\n separatorLimit = null;\n allowNegativeNumbers = null;\n leadZeroDateTime = null;\n leadZero = null;\n triggerOnMaskChange = null;\n apm = null;\n inputTransformFn = null;\n outputTransformFn = null;\n keepCharacterPositions = null;\n maskFilled = new EventEmitter();\n _maskValue = '';\n _inputValue;\n _position = null;\n _code;\n _maskExpressionArray = [];\n _allowFewMaskChangeMask = false;\n _justPasted = false;\n _isFocused = false;\n _isComposing = false;\n document = inject(DOCUMENT);\n _maskService = inject(NgxMaskService, { self: true });\n _config = inject(NGX_MASK_CONFIG);\n onChange = (_) => { };\n onTouch = () => { };\n ngOnChanges(changes) {\n const { maskExpression, specialCharacters, patterns, prefix, suffix, thousandSeparator, decimalMarker, dropSpecialCharacters, hiddenInput, showMaskTyped, placeHolderCharacter, shownMaskExpression, showTemplate, clearIfNotMatch, validation, separatorLimit, allowNegativeNumbers, leadZeroDateTime, leadZero, triggerOnMaskChange, apm, inputTransformFn, outputTransformFn, keepCharacterPositions, } = changes;\n if (maskExpression) {\n if (maskExpression.currentValue !== maskExpression.previousValue &&\n !maskExpression.firstChange) {\n this._maskService.maskChanged = true;\n }\n if (maskExpression.currentValue &&\n maskExpression.currentValue.split(MaskExpression.OR).length > 1) {\n this._maskExpressionArray = maskExpression.currentValue\n .split(MaskExpression.OR)\n .sort((a, b) => {\n return a.length - b.length;\n });\n this._setMask();\n }\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 }\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 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 &&\n showMaskTyped.currentValue === true &&\n this._isFocused) {\n requestAnimationFrame(() => {\n this._maskService._elementRef?.nativeElement.click();\n });\n }\n }\n if (placeHolderCharacter) {\n this._maskService.placeHolderCharacter = placeHolderCharacter.currentValue;\n }\n if (shownMaskExpression) {\n this._maskService.shownMaskExpression = shownMaskExpression.currentValue;\n }\n if (showTemplate) {\n this._maskService.showTemplate = showTemplate.currentValue;\n }\n if (clearIfNotMatch) {\n this._maskService.clearIfNotMatch = clearIfNotMatch.currentValue;\n }\n if (validation) {\n this._maskService.validation = validation.currentValue;\n }\n if (separatorLimit) {\n this._maskService.separatorLimit = separatorLimit.currentValue;\n }\n if (leadZeroDateTime) {\n this._maskService.leadZeroDateTime = leadZeroDateTime.currentValue;\n }\n if (leadZero) {\n this._maskService.leadZero = leadZero.currentValue;\n }\n if (triggerOnMaskChange) {\n this._maskService.triggerOnMaskChange = triggerOnMaskChange.currentValue;\n }\n if (inputTransformFn) {\n this._maskService.inputTransformFn = inputTransformFn.currentValue;\n }\n if (outputTransformFn) {\n this._maskService.outputTransformFn = outputTransformFn.currentValue;\n }\n if (keepCharacterPositions) {\n this._maskService.keepCharacterPositions = keepCharacterPositions.currentValue;\n }\n this._applyMask();\n }\n validate({ value }) {\n const processedValue = typeof value === 'number' ? String(value) : value;\n if (!this._maskService.validation || !this._maskValue) {\n return null;\n }\n if (this._maskService.ipError) {\n return this._createValidationError(processedValue);\n }\n if (this._maskService.cpfCnpjError) {\n return this._createValidationError(processedValue);\n }\n if (this._maskValue.startsWith(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(processedValue);\n }\n if (this._maskValue === MaskExpression.EMAIL_MASK) {\n const emailPattern = /^[^@]+@[^@]+\\.[^@]+$/;\n if (!emailPattern.test(processedValue) && processedValue) {\n return this._createValidationError(processedValue);\n }\n else {\n return null;\n }\n }\n if (processedValue && processedValue.length >= 1) {\n let counterOfOpt = 0;\n if (this._maskValue.includes(MaskExpression.CURLY_BRACKETS_LEFT) &&\n this._maskValue.includes(MaskExpression.CURLY_BRACKETS_RIGHT)) {\n const lengthInsideCurlyBrackets = this._maskValue.slice(this._maskValue.indexOf(MaskExpression.CURLY_BRACKETS_LEFT) + 1, this._maskValue.indexOf(MaskExpression.CURLY_BRACKETS_RIGHT));\n return lengthInsideCurlyBrackets === String(processedValue.length)\n ? null\n : this._createValidationError(processedValue);\n }\n if (this._maskValue.startsWith(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\n .split(MaskExpression.EMPTY_STRING)\n .filter((i) => i === key)\n .join(MaskExpression.EMPTY_STRING);\n counterOfOpt += opt.length;\n }\n else if (this._maskValue.indexOf(key) !== -1) {\n counterOfOpt++;\n }\n if (this._maskValue.indexOf(key) !== -1 &&\n processedValue.length >= this._maskValue.indexOf(key)) {\n return null;\n }\n if (counterOfOpt === this._maskValue.length) {\n return null;\n }\n }\n }\n if ((this._maskValue.indexOf(MaskExpression.SYMBOL_STAR) > 1 &&\n processedValue.length < this._maskValue.indexOf(MaskExpression.SYMBOL_STAR)) ||\n (this._maskValue.indexOf(MaskExpression.SYMBOL_QUESTION) > 1 &&\n processedValue.length < this._maskValue.indexOf(MaskExpression.SYMBOL_QUESTION))) {\n return this._createValidationError(processedValue);\n }\n if (this._maskValue.indexOf(MaskExpression.SYMBOL_STAR) === -1 ||\n this._maskValue.indexOf(MaskExpression.SYMBOL_QUESTION) === -1) {\n const array = this._maskValue.split('*');\n const length = this._maskService.dropSpecialCharacters\n ? this._maskValue.length -\n this._maskService.checkDropSpecialCharAmount(this._maskValue) -\n counterOfOpt\n : this.prefix\n ? this._maskValue.length + this.prefix.length - counterOfOpt\n : this._maskValue.length - counterOfOpt;\n if (array.length === 1) {\n if (processedValue.length < length) {\n return this._createValidationError(processedValue);\n }\n }\n if (array.length > 1) {\n const lastIndexArray = array[array.length - 1];\n if (lastIndexArray &&\n this._maskService.specialCharacters.includes(lastIndexArray[0]) &&\n String(processedValue).includes(lastIndexArray[0] ?? '') &&\n !this.dropSpecialCharacters) {\n const special = value.split(lastIndexArray[0]);\n return special[special.length - 1].length === lastIndexArray.length - 1\n ? null\n : this._createValidationError(processedValue);\n }\n else if (((lastIndexArray &&\n !this._maskService.specialCharacters.includes(lastIndexArray[0])) ||\n !lastIndexArray ||\n this._maskService.dropSpecialCharacters) &&\n processedValue.length >= length - 1) {\n return null;\n }\n else {\n return this._createValidationError(processedValue);\n }\n }\n }\n if (this._maskValue.indexOf(MaskExpression.SYMBOL_STAR) === 1 ||\n 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 if ((value === MaskExpression.EMPTY_STRING ||\n value === null ||\n typeof value === 'undefined') &&\n this._maskService.actualValue) {\n this._maskService.actualValue = this._maskService.getActualValue(MaskExpression.EMPTY_STRING);\n }\n }\n onInput(e) {\n if (this._isComposing) {\n return;\n }\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\n ? el.selectionStart + this._maskService.prefix.length\n : el.selectionStart;\n if (this.showMaskTyped &&\n this.keepCharacterPositions &&\n 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] ??\n MaskExpression.EMPTY_STRING);\n const checkSpecialCharacter = this._maskService._checkSymbolMask(inputSymbol, this._maskService.maskExpression[position + 1 - prefixLength] ??\n 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 const backspaceOrDelete = this._code === MaskExpression.BACKSPACE ||\n this._code === MaskExpression.DELETE;\n if (backspaceOrDelete) {\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 }\n else if (this._maskService.selStart ===\n this._maskService.maskIsShown.length + prefixLength) {\n this._maskService.actualValue = `${this._inputValue}${this._maskService.maskIsShown.slice(selStart, selEnd)}`;\n }\n else {\n this._maskService.actualValue = `${this.prefix}${this._inputValue\n .split(this.prefix)\n .join('')\n .slice(0, selStart)}${this._maskService.maskIsShown.slice(selStart, selEnd)}${this._maskService.actualValue.slice(selEnd + prefixLength, this._maskService.maskIsShown.length + prefixLength)}${this.suffix}`;\n }\n }\n else if (!this._maskService.specialCharacters.includes(this._maskService.maskExpression.slice(position - this.prefix.length, position + 1 - this.prefix.length)) &&\n selectRangeBackspace) {\n if (selStart === 1 && this.prefix) {\n this._maskService.actualValue = `${this.prefix}${this._maskService.placeHolderCharacter}${el.value\n .split(this.prefix)\n .join('')\n .split(this.suffix)\n .join('')}${this.suffix}`;\n position = position - 1;\n }\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 position = this._code === MaskExpression.DELETE ? position + 1 : position;\n }\n if (!backspaceOrDelete) {\n if (!checkSymbols && !checkSpecialCharacter && selectRangeBackspace) {\n position = Number(el.selectionStart) - 1;\n }\n else if (this._maskService.specialCharacters.includes(el.value.slice(position, position + 1)) &&\n checkSpecialCharacter &&\n !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 }\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 }\n else {\n this._maskService.actualValue = `${el.value.slice(0, position - 1)}${inputSymbol}${el.value\n .slice(position + 1)\n .split(this.suffix)\n .join('')}${this.suffix}`;\n }\n }\n else if (this.prefix &&\n el.value.length === 1 &&\n position - prefixLength === 1 &&\n this._maskService._checkSymbolMask(el.value, this._maskService.maskExpression[position - 1 - prefixLength] ??\n 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 === MaskExpression.DELETE && MaskExpression.SEPARATOR) {\n this._maskService.deletedSpecialCharacter = true;\n }\n if (this._inputValue.length >= this._maskService.maskExpression.length - 1 &&\n this._code !== MaskExpression.BACKSPACE &&\n this._maskService.maskExpression === MaskExpression.DAYS_MONTHS_YEARS &&\n position < 10) {\n const inputSymbol = this._inputValue.slice(position - 1, position);\n el.value =\n this._inputValue.slice(0, position - 1) +\n inputSymbol +\n this._inputValue.slice(position + 1);\n }\n if (this._maskService.maskExpression === MaskExpression.DAYS_MONTHS_YEARS &&\n this.leadZeroDateTime) {\n if ((position < 3 && Number(el.value) > 31 && Number(el.value) < 40) ||\n (position === 5 && Number(el.value.slice(3, 5)) > 12)) {\n position = position + 2;\n }\n }\n if (this._maskService.maskExpression === MaskExpression.HOURS_MINUTES_SECONDS &&\n this.apm) {\n if (this._justPasted && el.value.slice(0, 2) === MaskExpression.DOUBLE_ZERO) {\n el.value = el.value.slice(1, 2) + el.value.slice(2, el.value.length);\n }\n el.value =\n el.value === MaskExpression.DOUBLE_ZERO\n ? MaskExpression.NUMBER_ZERO\n : el.value;\n }\n this._maskService.applyValueChanges(position, this._justPasted, this._code === MaskExpression.BACKSPACE || this._code === MaskExpression.DELETE, (shift, _backspaceShift) => {\n this._justPasted = false;\n caretShift = shift;\n backspaceShift = _backspaceShift;\n });\n if (this._getActiveElement() !== el) {\n return;\n }\n if (this._maskService.plusOnePosition) {\n position = position + 1;\n this._maskService.plusOnePosition = false;\n }\n if (this._maskExpressionArray.length) {\n if (this._code === MaskExpression.BACKSPACE) {\n const specialChartMinusOne = this.specialCharacters.includes(this._maskService.actualValue.slice(position - 1, position));\n const specialChartPlusOne = this.specialCharacters.includes(this._maskService.actualValue.slice(position, position + 1));\n if (this._allowFewMaskChangeMask && !specialChartPlusOne) {\n position = el.selectionStart + 1;\n this._allowFewMaskChangeMask = false;\n }\n else {\n position = specialChartMinusOne ? position - 1 : position;\n }\n }\n else {\n position =\n el.selectionStart === 1\n ? el.selectionStart + this._maskService.prefix.length\n : el.selectionStart;\n }\n }\n this._position =\n this._position === 1 && this._inputValue.length === 1 ? null : this._position;\n let positionToApply = this._position\n ? this._inputValue.length + position + caretShift\n : position +\n (this._code === MaskExpression.BACKSPACE && !backspaceShift ? 0 : caretShift);\n if (positionToApply > this._getActualInputLength()) {\n positionToApply =\n el.value === this._maskService.decimalMarker && el.value.length === 1\n ? this._getActualInputLength() + 1\n : this._getActualInputLength();\n }\n if (positionToApply < 0) {\n positionToApply = 0;\n }\n el.setSelectionRange(positionToApply, positionToApply);\n this._position = null;\n }\n else {\n console.warn('Ngx-mask writeValue work with string | number, your current value:', typeof transformedValue);\n }\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 === MaskExpression.BACKSPACE || this._code === MaskExpression.DELETE);\n }\n }\n onCompositionStart() {\n this._isComposing = true;\n }\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._maskService.leadZero &&\n el.value.length > 0 &&\n typeof this._maskService.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._maskService.suffix\n ? el.value.split(this._maskService.suffix).join('')\n : el.value;\n const decimalPart = el.value.split(this._maskService.decimalMarker)[1];\n el.value = el.value.includes(this._maskService.decimalMarker)\n ? el.value +\n MaskExpression.NUMBER_ZERO.repeat(precision - decimalPart.length) +\n this._maskService.suffix\n : el.value +\n this._maskService.decimalMarker +\n MaskExpression.NUMBER_ZERO.repeat(precision) +\n this._maskService.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 &&\n el.selectionStart !== null &&\n el.selectionStart === el.selectionEnd &&\n el.selectionStart > this._maskService.prefix.length &&\n e.keyCode !== 38) {\n if (this._maskService.showMaskTyped && !this.keepCharacterPositions) {\n this._maskService.maskIsShown = this._maskService.showMaskInInput();\n if (el.setSelectionRange &&\n this._maskService.prefix + this._maskService.maskIsShown === el.value) {\n el.focus();\n el.setSelectionRange(posStart, posEnd);\n }\n else {\n if (el.selectionStart > this._maskService.actualValue.length) {\n el.setSelectionRange(this._maskService.actualValue.length, this._maskService.actualValue.length);\n }\n }\n }\n }\n const nextValue = el &&\n (el.value === this._maskService.prefix\n ? this._maskService.prefix + this._maskService.maskIsShown\n : el.value);\n if (el && el.value !== nextValue) {\n el.value = nextValue;\n }\n if (el &&\n el.type !== 'number' &&\n (el.selectionStart || el.selectionEnd) <=\n this._maskService.prefix.length) {\n const specialCharactersAtTheStart = this._maskService.maskExpression.match(new RegExp(`^[${this._maskService.specialCharacters.map((c) => `\\\\${c}`).join('')}]+`))?.[0].length || 0;\n el.selectionStart = this._maskService.prefix.length + specialCharactersAtTheStart;\n return;\n }\n if (el && el.selectionEnd > this._getActualInputLength()) {\n el.selectionEnd = this._getActualInputLength();\n }\n }\n onKeyDown(e) {\n if (!this._maskValue) {\n return;\n }\n if (this._isComposing) {\n if (e.key === 'Enter') {\n this.onCompositionEnd(e);\n }\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 === MaskExpression.ARROW_UP) {\n e.preventDefault();\n }\n if (e.key === MaskExpression.ARROW_LEFT ||\n e.key === MaskExpression.BACKSPACE ||\n e.key === MaskExpression.DELETE) {\n if (e.key === MaskExpression.BACKSPACE && el.value.length === 0) {\n el.selectionStart = el.selectionEnd;\n }\n if (e.key === MaskExpression.BACKSPACE && el.selectionStart !== 0) {\n this.specialCharacters = this.specialCharacters?.length\n ? this.specialCharacters\n : this._config.specialCharacters;\n if (this.prefix.length > 1 &&\n el.selectionStart <= this.prefix.length) {\n el.setSelectionRange(this.prefix.length, el.selectionEnd);\n }\n else {\n if (this._inputValue.length !== el.selectionStart &&\n el.selectionStart !== 1) {\n while (this.specialCharacters.includes((this._inputValue[el.selectionStart - 1] ??\n MaskExpression.EMPTY_STRING).toString()) &&\n ((this.prefix.length >= 1 &&\n el.selectionStart > this.prefix.length) ||\n 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 &&\n el.selectionStart <= this._maskService.prefix.length &&\n el.selectionEnd <= this._maskService.prefix.length) {\n e.preventDefault();\n }\n const cursorStart = el.selectionStart;\n if (e.key === MaskExpression.BACKSPACE &&\n !el.readOnly &&\n cursorStart === 0 &&\n el.selectionEnd === el.value.length &&\n 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 &&\n this.suffix.length > 1 &&\n this._inputValue.length - this.suffix.length < el.selectionStart) {\n el.setSelectionRange(this._inputValue.length - this.suffix.length, this._inputValue.length);\n }\n else if ((e.code === 'KeyA' && e.ctrlKey) ||\n (e.code === 'KeyA' && e.metaKey)) {\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 async writeValue(controlValue) {\n let value = controlValue;\n if (typeof value === 'object' && value !== null && 'value' in value) {\n if ('disable' in value) {\n this.setDisabledState(Boolean(value.disable));\n }\n value = value.value;\n }\n if (value !== null) {\n value = this.inputTransformFn ? this.inputTransformFn(value) : value;\n }\n if (typeof value === 'string' ||\n typeof value === 'number' ||\n value === null ||\n typeof value === 'undefined') {\n if (value === null || typeof value === 'undefined' || value === '') {\n this._maskService._currentValue = '';\n this._maskService._previousValue = '';\n }\n let inputValue = value;\n if (typeof inputValue === 'number' ||\n this._maskValue.startsWith(MaskExpression.SEPARATOR)) {\n inputValue = String(inputValue);\n const localeDecimalMarker = this._maskService.currentLocaleDecimalMarker();\n if (!Array.isArray(this._maskService.decimalMarker)) {\n inputValue =\n this._maskService.decimalMarker !== localeDecimalMarker\n ? inputValue.replace(localeDecimalMarker, this._maskService.decimalMarker)\n : inputValue;\n }\n if (this._maskService.leadZero &&\n inputValue &&\n this.maskExpression &&\n this.dropSpecialCharacters !== false) {\n inputValue = this._maskService._checkPrecision(this._maskService.maskExpression, inputValue);\n }\n if (this._maskService.decimalMarker === MaskExpression.COMMA ||\n (Array.isArray(this._maskService.decimalMarker) &&\n this._maskService.thousandSeparator === MaskExpression.DOT)) {\n inputValue = inputValue\n .toString()\n .replace(MaskExpression.DOT, MaskExpression.COMMA);\n }\n if (this.maskExpression?.startsWith(MaskExpression.SEPARATOR) && this.leadZero) {\n requestAnimationFrame(() => {\n this._maskService.applyMask(inputValue?.toString() ?? '', this._maskService.maskExpression);\n });\n }\n this._maskService.isNumberValue = true;\n }\n if (typeof inputValue !== 'string') {\n inputValue = '';\n }\n this._inputValue = inputValue;\n this._setMask();\n if ((inputValue && this._maskService.maskExpression) ||\n (this._maskService.maskExpression &&\n (this._maskService.prefix || this._maskService.showMaskTyped))) {\n if (typeof this.inputTransformFn !== 'function') {\n this._maskService.writingValue = true;\n }\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(inputValue, this._maskService.maskExpression),\n ];\n if (typeof this.inputTransformFn !== 'function') {\n this._maskService.writingValue = false;\n }\n }\n else {\n this._maskService.formElementProperty = ['value', inputValue];\n }\n this._inputValue = inputValue;\n }\n else {\n console.warn('Ngx-mask writeValue work with string | number, your current value:', typeof value);\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 }\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 setDisabledState(isDisabled) {\n this._maskService.formElementProperty = ['disabled', isDisabled];\n }\n _applyMask() {\n this._maskService.maskExpression = this._maskService._repeatPatternSymbols(this._maskValue || '');\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(this._inputValue, this._maskService.maskExpression),\n ];\n }\n _validateTime(value) {\n const rowMaskLen = this._maskValue\n .split(MaskExpression.EMPTY_STRING)\n .filter((s) => s !== ':').length;\n if (!value) {\n return null;\n }\n if ((+(value[value.length - 1] ?? -1) === 0 && value.length < rowMaskLen) ||\n value.length <= rowMaskLen - 2) {\n return this._createValidationError(value);\n }\n return null;\n }\n _getActualInputLength() {\n return (this._maskService.actualValue.length ||\n 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\n .split(MaskExpression.EMPTY_STRING)\n .some((char) => this._maskService.specialCharacters.includes(char));\n if ((specialChart &&\n this._inputValue &&\n this._areAllCharactersInEachStringSame(this._maskExpressionArray)) ||\n mask.includes(MaskExpression.CURLY_BRACKETS_LEFT)) {\n const test = this._maskService.removeMask(this._inputValue)?.length <=\n this._maskService.removeMask(mask)?.length;\n if (test) {\n this._maskValue =\n this.maskExpression =\n this._maskService.maskExpression =\n mask.includes(MaskExpression.CURLY_BRACKETS_LEFT)\n ? this._maskService._repeatPatternSymbols(mask)\n : mask;\n return test;\n }\n else {\n if (this._code === MaskExpression.BACKSPACE) {\n this._allowFewMaskChangeMask = true;\n }\n const expression = this._maskExpressionArray[this._maskExpressionArray.length - 1] ??\n MaskExpression.EMPTY_STRING;\n this._maskValue =\n this.maskExpression =\n this._maskService.maskExpression =\n expression.includes(MaskExpression.CURLY_BRACKETS_LEFT)\n ? this._maskService._repeatPatternSymbols(expression)\n : expression;\n }\n }\n else {\n const check = this._maskService\n .removeMask(this._inputValue)\n ?.split(MaskExpression.EMPTY_STRING)\n .every((character, index) => {\n const indexMask = mask.charAt(index);\n return this._maskService._checkSymbolMask(character, indexMask);\n });\n if (check || this._justPasted) {\n this._maskValue = this.maskExpression = this._maskService.maskExpression = mask;\n return check;\n }\n }\n });\n }\n _areAllCharactersInEachStringSame(array) {\n const specialCharacters = this._maskService.specialCharacters;\n function removeSpecialCharacters(str) {\n const regex = new RegExp(`[${specialCharacters.map((ch) => `\\\\${ch}`).join('')}]`, 'g');\n return str.replace(regex, '');\n }\n const processedArr = array.map(removeSpecialCharacters);\n return processedArr.every((str) => {\n const uniqueCharacters = new Set(str);\n return uniqueCharacters.size === 1;\n });\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.2.9\", ngImport: i0, type: NgxMaskDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });\n static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"18.2.9\", type: NgxMaskDirective, isStandalone: true, selector: \"input[mask], textarea[mask]\", inputs: { maskExpression: [\"mask\", \"maskExpression\"], specialCharacters: \"specialCharacters\", patterns: \"patterns\", prefix: \"prefix\", suffix: \"suffix\", thousandSeparator: \"thousandSeparator\", decimalMarker: \"decimalMarker\", dropSpecialCharacters: \"dropSpecialCharacters\", hiddenInput: \"hiddenInput\", showMaskTyped: \"showMaskTyped\", placeHolderCharacter: \"placeHolderCharacter\", shownMaskExpression: \"shownMaskExpression\", showTemplate: \"showTemplate\", clearIfNotMatch: \"clearIfNotMatch\", validation: \"validation\", separatorLimit: \"separatorLimit\", allowNegativeNumbers: \"allowNegativeNumbers\", leadZeroDateTime: \"leadZeroDateTime\", leadZero: \"leadZero\", triggerOnMaskChange: \"triggerOnMaskChange\", apm: \"apm\", inputTransformFn: \"inputTransformFn\", outputTransformFn: \"outputTransformFn\", keepCharacterPositions: \"keepCharacterPositions\" }, outputs: { maskFilled: \"maskFilled\" }, host: { listeners: { \"paste\": \"onPaste()\", \"focus\": \"onFocus($event)\", \"ngModelChange\": \"onModelChange($event)\", \"input\": \"onInput($event)\", \"compositionstart\": \"onCompositionStart($event)\", \"compositionend\": \"onCompositionEnd($event)\", \"blur\": \"onBlur($event)\", \"click\": \"onClick($event)\", \"keydown\": \"onKeyDown($event)\" } }, providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n NgxMaskService,\n ], exportAs: [\"mask\", \"ngxMask\"], usesOnChanges: true, ngImport: i0 });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.2.9\", ngImport: i0, type: NgxMaskDirective, decorators: [{\n type: Directive,\n args: [{\n selector: 'input[mask], textarea[mask]',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: NgxMaskDirective,\n multi: true,\n },\n NgxMaskService,\n ],\n exportAs: 'mask,ngxMask',\n }]\n }], propDecorators: { maskExpression: [{\n type: Input,\n args: ['mask']\n }], specialCharacters: [{\n type: Input\n }], patterns: [{\n type: Input\n }], prefix: [{\n type: Input\n }], suffix: [{\n type: Input\n }], thousandSeparator: [{\n type: Input\n }], decimalMarker: [{\n type: Input\n }], dropSpecialCharacters: [{\n type: Input\n }], hiddenInput: [{\n type: Input\n }], showMaskTyped: [{\n type: Input\n }], placeHolderCharacter: [{\n type: Input\n }], shownMaskExpression: [{\n type: Input\n }], showTemplate: [{\n type: Input\n }], clearIfNotMatch: [{\n type: Input\n }], validation: [{\n type: Input\n }], separatorLimit: [{\n type: Input\n }], allowNegativeNumbers: [{\n type: Input\n }], leadZeroDateTime: [{\n type: Input\n }], leadZero: [{\n type: Input\n }], triggerOnMaskChange: [{\n type: Input\n }], apm: [{\n type: Input\n }], inputTransformFn: [{\n type: Input\n }], outputTransformFn: [{\n type: Input\n }], keepCharacterPositions: [{\n type: Input\n }], maskFilled: [{\n type: Output\n }], onPaste: [{\n type: HostListener,\n args: ['paste']\n }], onFocus: [{\n type: HostListener,\n args: ['focus', ['$event']]\n }], onModelChange: [{\n type: HostListener,\n args: ['ngModelChange', ['$event']]\n }], onInput: [{\n type: HostListener,\n args: ['input', ['$event']]\n }], onCompositionStart: [{\n type: HostListener,\n args: ['compositionstart', ['$event']]\n }], onCompositionEnd: [{\n type: HostListener,\n args: ['compositionend', ['$event']]\n }], onBlur: [{\n type: HostListener,\n args: ['blur', ['$event']]\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] } });\n\nclass NgxMaskPipe {\n defaultOptions = inject(NGX_MASK_CONFIG);\n _maskService = inject(NgxMaskService);\n _maskExpressionArray = [];\n mask = '';\n transform(value, mask, { patterns, ...config } = {}) {\n let processedValue = value;\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, val]) => {\n this._maskService[key] = val;\n });\n if (mask.includes('||')) {\n const maskParts = mask.split('||');\n if (maskParts.length > 1) {\n this._maskExpressionArray = maskParts.sort((a, b) => a.length - b.length);\n this._setMask(processedValue);\n return this._maskService.applyMask(`${processedValue}`, this.mask);\n }\n else {\n this._maskExpressionArray = [];\n return this._maskService.applyMask(`${processedValue}`, this.mask);\n }\n }\n if (mask.includes(MaskExpression.CURLY_BRACKETS_LEFT)) {\n return this._maskService.applyMask(`${processedValue}`, this._maskService._repeatPatternSymbols(mask));\n }\n if (mask.startsWith(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 this._maskService.leadZero = config.leadZero;\n }\n processedValue = String(processedValue);\n const localeDecimalMarker = this._maskService.currentLocaleDecimalMarker();\n if (!Array.isArray(this._maskService.decimalMarker)) {\n processedValue =\n this._maskService.decimalMarker !== localeDecimalMarker\n ? processedValue.replace(localeDecimalMarker, this._maskService.decimalMarker)\n : processedValue;\n }\n if (this._maskService.leadZero &&\n processedValue &&\n this._maskService.dropSpecialCharacters !== false) {\n processedValue = this._maskService._checkPrecision(mask, processedValue);\n }\n if (this._maskService.decimalMarker === MaskExpression.COMMA) {\n processedValue = processedValue.replace(MaskExpression.DOT, MaskExpression.COMMA);\n }\n this._maskService.isNumberValue = true;\n }\n if (processedValue === null || typeof processedValue === 'undefined') {\n return this._maskService.applyMask('', mask);\n }\n return this._maskService.applyMask(`${processedValue}`, mask);\n }\n _setMask(value) {\n if (this._maskExpressionArray.length > 0) {\n this._maskExpressionArray.some((mask) => {\n const test = this._maskService.removeMask(value)?.length <=\n this._maskService.removeMask(mask)?.length;\n if (value && test) {\n this.mask = mask;\n return test;\n }\n else {\n const expression = this._maskExpressionArray[this._maskExpressionArray.length - 1] ??\n MaskExpression.EMPTY_STRING;\n this.mask = expression;\n }\n });\n }\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"18.2.9\", ngImport: i0, type: NgxMaskPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });\n static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"18.2.9\", ngImport: i0, type: NgxMaskPipe, isStandalone: true, name: \"mask\" });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"18.2.9\", ngImport: i0, type: NgxMaskPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mask',\n pure: true,\n standalone: true,\n }]\n }] });\n\nexport { INITIAL_CONFIG, NEW_CONFIG, NGX_MASK_CONFIG, NgxMaskDirective, NgxMaskPipe, NgxMaskService, initialConfig, provideEnvironmentNgxMask, provideNgxMask, timeMasks, withoutValidation };\n//# sourceMappingURL=ngx-mask.mjs.map\n","import * as ngxMask from 'ngx-mask';\r\n\r\nwindow['ngx-mask'] = ngxMask\r\n\r\nexport { ngxMask };"],"names":["leafPrototypes","getProto","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","Object","getPrototypeOf","obj","t","value","mode","this","__esModule","then","ns","create","r","def","current","indexOf","getOwnPropertyNames","forEach","key","d","definition","o","defineProperty","enumerable","get","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","ng","core","common","forms","MaskExpression","NGX_MASK_CONFIG","InjectionToken","NEW_CONFIG","INITIAL_CONFIG","initialConfig","suffix","prefix","thousandSeparator","decimalMarker","clearIfNotMatch","showTemplate","showMaskTyped","placeHolderCharacter","dropSpecialCharacters","hiddenInput","shownMaskExpression","separatorLimit","allowNegativeNumbers","validation","specialCharacters","leadZeroDateTime","apm","leadZero","keepCharacterPositions","triggerOnMaskChange","inputTransformFn","outputTransformFn","maskFilled","EventEmitter","patterns","pattern","RegExp","optional","X","symbol","A","S","U","L","m","M","H","h","s","timeMasks","HOURS_MINUTES_SECONDS","HOURS_MINUTES","MINUTES_SECONDS","withoutValidation","PERCENT","HOURS_HOUR","SECONDS","MINUTES","SEPARATOR","DAYS_MONTHS_YEARS","DAYS_MONTHS","DAYS","MONTHS","NgxMaskApplierService","_config","inject","customPattern","_shift","Set","plusOnePosition","maskExpression","actualValue","showKeepCharacterExp","deletedSpecialCharacter","ipError","cpfCnpjError","applyMaskWithPattern","inputValue","maskAndPattern","mask","applyMask","position","justPasted","backspaced","cb","EMPTY_STRING","cursor","result","multi","backspaceShift","shift","stepBack","processedValue","processedPosition","slice","length","checkAndRemoveSuffix","inputArray","toString","split","MINUS","IP","valuesIP","DOT","_validIP","arr","i","match","push","CPF_CNPJ","startsWith","_stripToDecimal","precision","getPrecision","checkInputPrecision","percentage","substring","base","_splitPercentZero","Array","isArray","COMMA","NUMBER_ZERO","inputValueAfterZero","_findFirstNonZeroDigitIndex","positionOfZeroOrDecimalMarker","zeroIndexNumberZero","zeroIndexMinus","zeroIndexThousand","firstIndexDecimalMarker","firstIndexNumberZero","secondIndexDecimalMarker","thousandSeparatorCharEscaped","_charToRegExpExpression","invalidChars","replace","marker","invalidCharRegexp","strForSep","_formatWithSeparators","commaShift","shiftStep","backspacedDecimalMarkerWithSeparatorLimit","add","clear","inputSymbol","symbolStarInPattern","SYMBOL_STAR","_checkSymbolMask","SYMBOL_QUESTION","HOURS","Number","_shiftStep","HOUR","MINUTE","SECOND","daysCount","inputValueCursor","inputValueCursorPlusOne","inputValueCursorPlusTwo","inputValueCursorMinusOne","inputValueCursorMinusTwo","inputValueSliceMinusThreeMinusOne","inputValueSliceMinusOnePlusOne","inputValueSliceCursorPlusTwo","inputValueSliceMinusTwoCursor","DAY","maskStartWithMonth","startWithMonthInput","includes","MONTH","monthsCount","withoutDays","specialChart","day1monthInput","day2monthInput","day2monthInputDot","day1monthPaste","day2monthPaste","NUMBER_NINE","_findSpecialChar","newPosition","has","actualShift","onlySpecial","every","char","res","isSpecialCharacterMaskFirstSymbol","join","_findDropSpecialChar","find","val","maskSymbol","test","str","thousandSeparatorChar","decimalChars","x","decimalChar","regExp","map","v","decimals","rgx","sanitizedStr","isNaN","Infinity","substr","processedInputValue","processedDecimalMarker","dm","precisionRegEx","precisionMatch","precisionMatchLength","diff","_compareOrIncludes","filter","idx","isDecimalMarker","inputLength","comparedValue","excludedValue","some","index","decimalIndex","emptyOrMinus","parsedValue","parseInt","integerPart","decimalPart","integerString","decimal","inputString","static","minVersion","version","ngImport","type","deps","target","Injectable","decorators","NgxMaskService","isNumberValue","maskIsShown","selStart","selEnd","writingValue","maskChanged","_maskExpressionArray","_previousValue","_currentValue","_emitValue","_start","_end","onChange","_","_elementRef","ElementRef","document","DOCUMENT","_renderer","Renderer2","showMaskInInput","HASH","formControlResult","getSymbol","newInputValue","actualResult","splice","removeMask","shiftTypedSymbols","Boolean","super","getActualValue","item","requestAnimationFrame","hideInput","resLen","prefNmask","countSkipedSymbol","_numberSkipedSymbols","regex","exec","applyValueChanges","formElement","nativeElement","_getActiveElement","clearIfNotMatchFn","curr","compare","maskChar","symbolToReplace","currSymbol","replaceSymbol","numberToString","String","toLocaleString","useGrouping","maximumFractionDigits","inputVal","Error","_checkForIp","_checkForCpfCnpj","formElementProperty","name","Promise","resolve","setProperty","checkDropSpecialCharAmount","_removeMask","_removeSuffix","_removePrefix","concat","cpf","cnpj","shadowRootEl","activeElement","shadowRoot","_toNumber","_checkSymbols","num","specialCharactersForRemove","_regExpForRemove","_retrieveSeparatorValue","_checkPatternForSpace","WHITE_SPACE","_replaceDecimalMarkerToDot","markers","processedResult","separatorPrecision","_retrieveSeparatorPrecision","separatorValue","_checkPrecision","patternString","maskExpretion","matcher","separatorExpression","toFixed","_repeatPatternSymbols","maskExp","reduce","accum","currVal","CURLY_BRACKETS_LEFT","CURLY_BRACKETS_RIGHT","repeatNumber","replaceWith","LETTER_S","symbols","currentLocaleDecimalMarker","_configFactory","initConfig","configValue","Function","provideNgxMask","provide","useValue","useFactory","provideEnvironmentNgxMask","makeEnvironmentProviders","NgxMaskDirective","_maskValue","_inputValue","_position","_code","_allowFewMaskChangeMask","_justPasted","_isFocused","_isComposing","_maskService","self","onTouch","ngOnChanges","changes","currentValue","previousValue","firstChange","OR","sort","a","b","_setMask","c","click","_applyMask","validate","_createValidationError","_validateTime","EMAIL_MASK","counterOfOpt","lastIndexOf","array","lastIndexArray","special","emit","onPaste","onFocus","onModelChange","onInput","e","el","transformedValue","selectionStart","prefixLength","checkSymbols","checkSpecialCharacter","selectRangeBackspace","backspaceOrDelete","BACKSPACE","DELETE","part1","part2","caretShift","DOUBLE_ZERO","_backspaceShift","specialChartMinusOne","specialChartPlusOne","positionToApply","_getActualInputLength","setSelectionRange","console","warn","onCompositionStart","onCompositionEnd","onBlur","repeat","onClick","selectionEnd","keyCode","focus","nextValue","specialCharactersAtTheStart","onKeyDown","code","ARROW_UP","preventDefault","ARROW_LEFT","checkSelectionOnDeletion","cursorStart","readOnly","ctrlKey","metaKey","writeValue","controlValue","setDisabledState","disable","localeDecimalMarker","registerOnChange","fn","registerOnTouched","Math","min","max","isDisabled","rowMaskLen","requiredMask","_areAllCharactersInEachStringSame","expression","check","character","indexMask","charAt","ch","size","Directive","isStandalone","selector","inputs","outputs","host","listeners","providers","NG_VALUE_ACCESSOR","useExisting","NG_VALIDATORS","exportAs","usesOnChanges","args","standalone","propDecorators","Input","Output","HostListener","NgxMaskPipe","defaultOptions","transform","config","currentConfig","entries","maskParts","Pipe","pure","window"],"sourceRoot":""}