{"version":3,"file":"ngx-mask.mjs","sources":["../../../projects/ngx-mask-lib/src/lib/ngx-mask.config.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask-applier.service.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.service.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.providers.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.directive.ts","../../../projects/ngx-mask-lib/src/lib/ngx-mask.pipe.ts","../../../projects/ngx-mask-lib/src/ngx-mask.ts"],"sourcesContent":["import { EventEmitter, InjectionToken } from '@angular/core';\nimport { MaskExpression } from './ngx-mask-expression.enum';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface InputTransformFn {\n    (value: unknown): string | number;\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport interface OutputTransformFn {\n    (value: string | number | undefined | null): unknown;\n}\n\nexport interface IConfig {\n    suffix: string;\n    prefix: string;\n    thousandSeparator: string;\n    decimalMarker: '.' | ',' | ['.', ','];\n    clearIfNotMatch: boolean;\n    showTemplate: boolean;\n    showMaskTyped: boolean;\n    placeHolderCharacter: string;\n    shownMaskExpression: string;\n    specialCharacters: string[] | readonly string[];\n    dropSpecialCharacters: boolean | string[] | readonly string[];\n    hiddenInput: boolean | undefined;\n    validation: boolean;\n    separatorLimit: string;\n    apm: boolean;\n    allowNegativeNumbers: boolean;\n    leadZeroDateTime: boolean;\n    leadZero: boolean;\n    triggerOnMaskChange: boolean;\n    keepCharacterPositions: boolean;\n    inputTransformFn: InputTransformFn;\n    outputTransformFn: OutputTransformFn;\n    maskFilled: EventEmitter<void>;\n    patterns: {\n        [character: string]: {\n            pattern: RegExp;\n            optional?: boolean;\n            symbol?: string;\n        };\n    };\n}\n\nexport type optionsConfig = Partial<IConfig>;\nexport const NGX_MASK_CONFIG: InjectionToken<IConfig> = new InjectionToken('ngx-mask config');\nexport const NEW_CONFIG: InjectionToken<IConfig> = new InjectionToken('new ngx-mask config');\nexport const INITIAL_CONFIG: InjectionToken<IConfig> = new InjectionToken(\n    'initial ngx-mask config'\n);\n\nexport const initialConfig: IConfig = {\n    suffix: '',\n    prefix: '',\n    thousandSeparator: ' ',\n    decimalMarker: ['.', ','],\n    clearIfNotMatch: false,\n    showTemplate: false,\n    showMaskTyped: false,\n    placeHolderCharacter: '_',\n    dropSpecialCharacters: true,\n    hiddenInput: undefined,\n    shownMaskExpression: '',\n    separatorLimit: '',\n    allowNegativeNumbers: false,\n    validation: true,\n    // eslint-disable-next-line @typescript-eslint/quotes\n    specialCharacters: ['-', '/', '(', ')', '.', ':', ' ', '+', ',', '@', '[', ']', '\"', \"'\"],\n    leadZeroDateTime: false,\n    apm: false,\n    leadZero: false,\n    keepCharacterPositions: false,\n    triggerOnMaskChange: false,\n    inputTransformFn: (value: unknown) => value as string | number,\n    outputTransformFn: (value: string | number | undefined | null) => value,\n    maskFilled: new EventEmitter<void>(),\n    patterns: {\n        '0': {\n            pattern: new RegExp('\\\\d'),\n        },\n        '9': {\n            pattern: new RegExp('\\\\d'),\n            optional: true,\n        },\n        X: {\n            pattern: new RegExp('\\\\d'),\n            symbol: '*',\n        },\n        A: {\n            pattern: new RegExp('[a-zA-Z0-9]'),\n        },\n        S: {\n            pattern: new RegExp('[a-zA-Z]'),\n        },\n        U: {\n            pattern: new RegExp('[A-Z]'),\n        },\n        L: {\n            pattern: new RegExp('[a-z]'),\n        },\n        d: {\n            pattern: new RegExp('\\\\d'),\n        },\n        m: {\n            pattern: new RegExp('\\\\d'),\n        },\n        M: {\n            pattern: new RegExp('\\\\d'),\n        },\n        H: {\n            pattern: new RegExp('\\\\d'),\n        },\n        h: {\n            pattern: new RegExp('\\\\d'),\n        },\n        s: {\n            pattern: new RegExp('\\\\d'),\n        },\n    },\n};\n\nexport const timeMasks: string[] = [\n    MaskExpression.HOURS_MINUTES_SECONDS,\n    MaskExpression.HOURS_MINUTES,\n    MaskExpression.MINUTES_SECONDS,\n];\n\nexport const withoutValidation: string[] = [\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","import { inject, Injectable } from '@angular/core';\nimport { NGX_MASK_CONFIG, IConfig } from './ngx-mask.config';\nimport { MaskExpression } from './ngx-mask-expression.enum';\n\n@Injectable()\nexport class NgxMaskApplierService {\n    protected _config = inject<IConfig>(NGX_MASK_CONFIG);\n\n    public dropSpecialCharacters: IConfig['dropSpecialCharacters'] =\n        this._config.dropSpecialCharacters;\n\n    public hiddenInput: IConfig['hiddenInput'] = this._config.hiddenInput;\n\n    public showTemplate!: IConfig['showTemplate'];\n\n    public clearIfNotMatch: IConfig['clearIfNotMatch'] = this._config.clearIfNotMatch;\n\n    public specialCharacters: IConfig['specialCharacters'] = this._config.specialCharacters;\n\n    public patterns: IConfig['patterns'] = this._config.patterns;\n\n    public prefix: IConfig['prefix'] = this._config.prefix;\n\n    public suffix: IConfig['suffix'] = this._config.suffix;\n\n    public thousandSeparator: IConfig['thousandSeparator'] = this._config.thousandSeparator;\n\n    public decimalMarker: IConfig['decimalMarker'] = this._config.decimalMarker;\n\n    public customPattern!: IConfig['patterns'];\n\n    public showMaskTyped: IConfig['showMaskTyped'] = this._config.showMaskTyped;\n\n    public placeHolderCharacter: IConfig['placeHolderCharacter'] =\n        this._config.placeHolderCharacter;\n\n    public validation: IConfig['validation'] = this._config.validation;\n\n    public separatorLimit: IConfig['separatorLimit'] = this._config.separatorLimit;\n\n    public allowNegativeNumbers: IConfig['allowNegativeNumbers'] =\n        this._config.allowNegativeNumbers;\n\n    public leadZeroDateTime: IConfig['leadZeroDateTime'] = this._config.leadZeroDateTime;\n\n    public leadZero: IConfig['leadZero'] = this._config.leadZero;\n\n    public apm: IConfig['apm'] = this._config.apm;\n\n    public inputTransformFn: IConfig['inputTransformFn'] = this._config.inputTransformFn;\n\n    public outputTransformFn: IConfig['outputTransformFn'] = this._config.outputTransformFn;\n\n    public keepCharacterPositions: IConfig['keepCharacterPositions'] =\n        this._config.keepCharacterPositions;\n\n    private _shift: Set<number> = new Set();\n\n    public plusOnePosition: boolean = false;\n\n    public maskExpression = '';\n\n    public actualValue = '';\n\n    public showKeepCharacterExp = '';\n\n    public shownMaskExpression = '';\n\n    public deletedSpecialCharacter = false;\n\n    public ipError?: boolean;\n\n    public cpfCnpjError?: boolean;\n\n    public applyMaskWithPattern(\n        inputValue: string,\n        maskAndPattern: [string, IConfig['patterns']]\n    ): string {\n        const [mask, customPattern] = maskAndPattern;\n        this.customPattern = customPattern;\n        return this.applyMask(inputValue, mask);\n    }\n\n    public applyMask(\n        inputValue: string | object | boolean | null | undefined,\n        maskExpression: string,\n        position = 0,\n        justPasted = false,\n        backspaced = false,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        cb: (...args: any[]) => any = () => {}\n    ): string {\n        if (!maskExpression || typeof inputValue !== 'string') {\n            return MaskExpression.EMPTY_STRING;\n        }\n        let cursor = 0;\n        let result = '';\n        let multi = false;\n        let backspaceShift = false;\n        let shift = 1;\n        let stepBack = false;\n        if (inputValue.slice(0, this.prefix.length) === this.prefix) {\n            // eslint-disable-next-line no-param-reassign\n            inputValue = inputValue.slice(this.prefix.length, inputValue.length);\n        }\n        if (!!this.suffix && inputValue?.length > 0) {\n            // eslint-disable-next-line no-param-reassign\n            inputValue = this.checkAndRemoveSuffix(inputValue);\n        }\n        if (inputValue === '(' && this.prefix) {\n            // eslint-disable-next-line no-param-reassign\n            inputValue = '';\n        }\n        const inputArray: string[] = inputValue.toString().split(MaskExpression.EMPTY_STRING);\n        if (\n            this.allowNegativeNumbers &&\n            inputValue.slice(cursor, cursor + 1) === MaskExpression.MINUS\n        ) {\n            result += inputValue.slice(cursor, cursor + 1);\n        }\n        if (maskExpression === MaskExpression.IP) {\n            const valuesIP = inputValue.split(MaskExpression.DOT);\n            this.ipError = this._validIP(valuesIP);\n            // eslint-disable-next-line no-param-reassign\n            maskExpression = '099.099.099.099';\n        }\n        const arr: string[] = [];\n        for (let i = 0; i < inputValue.length; i++) {\n            if (inputValue[i]?.match('\\\\d')) {\n                arr.push(inputValue[i] ?? MaskExpression.EMPTY_STRING);\n            }\n        }\n        if (maskExpression === MaskExpression.CPF_CNPJ) {\n            this.cpfCnpjError = arr.length !== 11 && arr.length !== 14;\n            if (arr.length > 11) {\n                // eslint-disable-next-line no-param-reassign\n                maskExpression = '00.000.000/0000-00';\n            } else {\n                // eslint-disable-next-line no-param-reassign\n                maskExpression = '000.000.000-00';\n            }\n        }\n        if (maskExpression.startsWith(MaskExpression.PERCENT)) {\n            if (\n                inputValue.match('[a-z]|[A-Z]') ||\n                // eslint-disable-next-line no-useless-escape\n                (inputValue.match(/[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,\\/.]/) && !backspaced)\n            ) {\n                // eslint-disable-next-line no-param-reassign\n                inputValue = this._stripToDecimal(inputValue);\n                const precision: number = this.getPrecision(maskExpression);\n                // eslint-disable-next-line no-param-reassign\n                inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n            }\n            const decimalMarker =\n                typeof this.decimalMarker === 'string' ? this.decimalMarker : MaskExpression.DOT;\n            if (\n                inputValue.indexOf(decimalMarker) > 0 &&\n                !this.percentage(inputValue.substring(0, inputValue.indexOf(decimalMarker)))\n            ) {\n                let base: string = inputValue.substring(0, inputValue.indexOf(decimalMarker) - 1);\n                if (\n                    this.allowNegativeNumbers &&\n                    inputValue.slice(cursor, cursor + 1) === MaskExpression.MINUS &&\n                    !backspaced\n                ) {\n                    base = inputValue.substring(0, inputValue.indexOf(decimalMarker));\n                }\n                // eslint-disable-next-line no-param-reassign\n                inputValue = `${base}${inputValue.substring(\n                    inputValue.indexOf(decimalMarker),\n                    inputValue.length\n                )}`;\n            }\n            let value = '';\n            this.allowNegativeNumbers &&\n            inputValue.slice(cursor, cursor + 1) === MaskExpression.MINUS\n                ? (value = `${MaskExpression.MINUS}${inputValue.slice(cursor + 1, cursor + inputValue.length)}`)\n                : (value = inputValue);\n            if (this.percentage(value)) {\n                result = this._splitPercentZero(inputValue);\n            } else {\n                result = this._splitPercentZero(inputValue.substring(0, inputValue.length - 1));\n            }\n        } else if (maskExpression.startsWith(MaskExpression.SEPARATOR)) {\n            if (\n                inputValue.match('[wа-яА-Я]') ||\n                inputValue.match('[ЁёА-я]') ||\n                inputValue.match('[a-z]|[A-Z]') ||\n                inputValue.match(/[-@#!$%\\\\^&*()_£¬'+|~=`{}\\]:\";<>.?/]/) ||\n                inputValue.match('[^A-Za-z0-9,]')\n            ) {\n                // eslint-disable-next-line no-param-reassign\n                inputValue = this._stripToDecimal(inputValue);\n            }\n            const precision: number = this.getPrecision(maskExpression);\n            const decimalMarker = Array.isArray(this.decimalMarker)\n                ? MaskExpression.DOT\n                : this.decimalMarker;\n            if (precision === 0) {\n                // eslint-disable-next-line no-param-reassign\n                inputValue = this.allowNegativeNumbers\n                    ? inputValue.length > 2 &&\n                      inputValue[0] === MaskExpression.MINUS &&\n                      inputValue[1] === MaskExpression.NUMBER_ZERO &&\n                      inputValue[2] !== this.thousandSeparator &&\n                      inputValue[2] !== MaskExpression.COMMA &&\n                      inputValue[2] !== MaskExpression.DOT\n                        ? '-' + inputValue.slice(2, inputValue.length)\n                        : inputValue[0] === MaskExpression.NUMBER_ZERO &&\n                            inputValue.length > 1 &&\n                            inputValue[1] !== this.thousandSeparator &&\n                            inputValue[1] !== MaskExpression.COMMA &&\n                            inputValue[1] !== MaskExpression.DOT\n                          ? inputValue.slice(1, inputValue.length)\n                          : inputValue\n                    : inputValue.length > 1 &&\n                        inputValue[0] === MaskExpression.NUMBER_ZERO &&\n                        inputValue[1] !== this.thousandSeparator &&\n                        inputValue[1] !== MaskExpression.COMMA &&\n                        inputValue[1] !== MaskExpression.DOT\n                      ? inputValue.slice(1, inputValue.length)\n                      : inputValue;\n            } else {\n                if (inputValue[0] === decimalMarker && inputValue.length > 1) {\n                    // eslint-disable-next-line no-param-reassign\n                    inputValue =\n                        MaskExpression.NUMBER_ZERO + inputValue.slice(0, inputValue.length + 1);\n                    this.plusOnePosition = true;\n                }\n                if (\n                    inputValue[0] === MaskExpression.NUMBER_ZERO &&\n                    inputValue[1] !== decimalMarker &&\n                    inputValue[1] !== this.thousandSeparator\n                ) {\n                    // eslint-disable-next-line no-param-reassign\n                    inputValue =\n                        inputValue.length > 1\n                            ? inputValue.slice(0, 1) +\n                              decimalMarker +\n                              inputValue.slice(1, inputValue.length + 1)\n                            : inputValue;\n                    this.plusOnePosition = true;\n                }\n                if (\n                    this.allowNegativeNumbers &&\n                    inputValue[0] === MaskExpression.MINUS &&\n                    (inputValue[1] === decimalMarker ||\n                        inputValue[1] === MaskExpression.NUMBER_ZERO)\n                ) {\n                    // eslint-disable-next-line no-param-reassign\n                    inputValue =\n                        inputValue[1] === decimalMarker && inputValue.length > 2\n                            ? inputValue.slice(0, 1) +\n                              MaskExpression.NUMBER_ZERO +\n                              inputValue.slice(1, inputValue.length)\n                            : inputValue[1] === MaskExpression.NUMBER_ZERO &&\n                                inputValue.length > 2 &&\n                                inputValue[2] !== decimalMarker\n                              ? inputValue.slice(0, 2) +\n                                decimalMarker +\n                                inputValue.slice(2, inputValue.length)\n                              : inputValue;\n                    this.plusOnePosition = true;\n                }\n            }\n\n            if (backspaced) {\n                const inputValueAfterZero = inputValue.slice(\n                    this._findFirstNonZeroDigitIndex(inputValue),\n                    inputValue.length\n                );\n                const positionOfZeroOrDecimalMarker =\n                    inputValue[position] === MaskExpression.NUMBER_ZERO ||\n                    inputValue[position] === decimalMarker;\n                const zeroIndexNumberZero = inputValue[0] === MaskExpression.NUMBER_ZERO;\n                const zeroIndexMinus = inputValue[0] === MaskExpression.MINUS;\n                const zeroIndexThousand = inputValue[0] === this.thousandSeparator;\n                const firstIndexDecimalMarker = inputValue[1] === decimalMarker;\n                const firstIndexNumberZero = inputValue[1] === MaskExpression.NUMBER_ZERO;\n                const secondIndexDecimalMarker = inputValue[2] === decimalMarker;\n\n                if (\n                    zeroIndexNumberZero &&\n                    firstIndexDecimalMarker &&\n                    positionOfZeroOrDecimalMarker &&\n                    position < 2\n                ) {\n                    // eslint-disable-next-line no-param-reassign\n                    inputValue = inputValueAfterZero;\n                }\n                if (\n                    zeroIndexMinus &&\n                    firstIndexNumberZero &&\n                    secondIndexDecimalMarker &&\n                    positionOfZeroOrDecimalMarker &&\n                    position < 3\n                ) {\n                    // eslint-disable-next-line no-param-reassign\n                    inputValue = MaskExpression.MINUS + inputValueAfterZero;\n                }\n\n                if (\n                    inputValueAfterZero !== MaskExpression.MINUS &&\n                    ((position === 0 && (zeroIndexNumberZero || zeroIndexThousand)) ||\n                        (this.allowNegativeNumbers &&\n                            position === 1 &&\n                            zeroIndexMinus &&\n                            !firstIndexNumberZero))\n                ) {\n                    // eslint-disable-next-line no-param-reassign\n                    inputValue = zeroIndexMinus\n                        ? MaskExpression.MINUS + inputValueAfterZero\n                        : inputValueAfterZero;\n                }\n            }\n            // TODO: we had different rexexps here for the different cases... but tests dont seam to bother - check this\n            //  separator: no COMMA, dot-sep: no SPACE, COMMA OK, comma-sep: no SPACE, COMMA OK\n\n            const thousandSeparatorCharEscaped: string = this._charToRegExpExpression(\n                this.thousandSeparator\n            );\n            let invalidChars: string = '@#!$%^&*()_+|~=`{}\\\\[\\\\]:\\\\s,\\\\.\";<>?\\\\/'.replace(\n                thousandSeparatorCharEscaped,\n                ''\n            );\n            //.replace(decimalMarkerEscaped, '');\n            if (Array.isArray(this.decimalMarker)) {\n                for (const marker of this.decimalMarker) {\n                    invalidChars = invalidChars.replace(\n                        this._charToRegExpExpression(marker),\n                        MaskExpression.EMPTY_STRING\n                    );\n                }\n            } else {\n                invalidChars = invalidChars.replace(\n                    this._charToRegExpExpression(this.decimalMarker),\n                    ''\n                );\n            }\n\n            const invalidCharRegexp = new RegExp('[' + invalidChars + ']');\n            if (inputValue.match(invalidCharRegexp)) {\n                // eslint-disable-next-line no-param-reassign\n                inputValue = inputValue.substring(0, inputValue.length - 1);\n            }\n\n            // eslint-disable-next-line no-param-reassign\n            inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n            const strForSep: string = inputValue.replace(\n                new RegExp(thousandSeparatorCharEscaped, 'g'),\n                ''\n            );\n\n            result = this._formatWithSeparators(\n                strForSep,\n                this.thousandSeparator,\n                this.decimalMarker,\n                precision\n            );\n\n            const commaShift: number =\n                result.indexOf(MaskExpression.COMMA) - inputValue.indexOf(MaskExpression.COMMA);\n            const shiftStep: number = result.length - inputValue.length;\n\n            if (result[position - 1] === this.thousandSeparator && this.prefix && backspaced) {\n                // eslint-disable-next-line no-param-reassign\n                position = position - 1;\n            } else if (shiftStep > 0 && result[position] !== this.thousandSeparator) {\n                backspaceShift = true;\n                let _shift = 0;\n                do {\n                    this._shift.add(position + _shift);\n                    _shift++;\n                } while (_shift < shiftStep);\n            } else if (\n                result[position - 1] === this.decimalMarker ||\n                shiftStep === -4 ||\n                shiftStep === -3 ||\n                result[position] === this.thousandSeparator\n            ) {\n                this._shift.clear();\n                this._shift.add(position - 1);\n            } else if (\n                (commaShift !== 0 &&\n                    position > 0 &&\n                    !(result.indexOf(MaskExpression.COMMA) >= position && position > 3)) ||\n                (!(result.indexOf(MaskExpression.DOT) >= position && position > 3) &&\n                    shiftStep <= 0)\n            ) {\n                this._shift.clear();\n                backspaceShift = true;\n                shift = shiftStep;\n                // eslint-disable-next-line no-param-reassign\n                position += shiftStep;\n                this._shift.add(position);\n            } else {\n                this._shift.clear();\n            }\n        } else {\n            for (\n                let i: number = 0, inputSymbol: string = inputArray[0]!;\n                i < inputArray.length;\n                i++, inputSymbol = inputArray[i] ?? MaskExpression.EMPTY_STRING\n            ) {\n                if (cursor === maskExpression.length) {\n                    break;\n                }\n\n                const symbolStarInPattern: boolean = MaskExpression.SYMBOL_STAR in this.patterns;\n                if (\n                    this._checkSymbolMask(\n                        inputSymbol,\n                        maskExpression[cursor] ?? MaskExpression.EMPTY_STRING\n                    ) &&\n                    maskExpression[cursor + 1] === MaskExpression.SYMBOL_QUESTION\n                ) {\n                    result += inputSymbol;\n                    cursor += 2;\n                } else if (\n                    maskExpression[cursor + 1] === MaskExpression.SYMBOL_STAR &&\n                    multi &&\n                    this._checkSymbolMask(\n                        inputSymbol,\n                        maskExpression[cursor + 2] ?? MaskExpression.EMPTY_STRING\n                    )\n                ) {\n                    result += inputSymbol;\n                    cursor += 3;\n                    multi = false;\n                } else if (\n                    this._checkSymbolMask(\n                        inputSymbol,\n                        maskExpression[cursor] ?? MaskExpression.EMPTY_STRING\n                    ) &&\n                    maskExpression[cursor + 1] === MaskExpression.SYMBOL_STAR &&\n                    !symbolStarInPattern\n                ) {\n                    result += inputSymbol;\n                    multi = true;\n                } else if (\n                    maskExpression[cursor + 1] === MaskExpression.SYMBOL_QUESTION &&\n                    this._checkSymbolMask(\n                        inputSymbol,\n                        maskExpression[cursor + 2] ?? MaskExpression.EMPTY_STRING\n                    )\n                ) {\n                    result += inputSymbol;\n                    cursor += 3;\n                } else if (\n                    this._checkSymbolMask(\n                        inputSymbol,\n                        maskExpression[cursor] ?? MaskExpression.EMPTY_STRING\n                    )\n                ) {\n                    if (maskExpression[cursor] === MaskExpression.HOURS) {\n                        if (this.apm ? Number(inputSymbol) > 9 : Number(inputSymbol) > 2) {\n                            // eslint-disable-next-line no-param-reassign\n                            position = !this.leadZeroDateTime ? position + 1 : position;\n                            cursor += 1;\n                            this._shiftStep(maskExpression, cursor, inputArray.length);\n                            i--;\n                            if (this.leadZeroDateTime) {\n                                result += '0';\n                            }\n                            continue;\n                        }\n                    }\n                    if (maskExpression[cursor] === MaskExpression.HOUR) {\n                        if (\n                            this.apm\n                                ? (result.length === 1 && Number(result) > 1) ||\n                                  (result === '1' && Number(inputSymbol) > 2) ||\n                                  (inputValue.slice(cursor - 1, cursor).length === 1 &&\n                                      Number(inputValue.slice(cursor - 1, cursor)) > 2) ||\n                                  (inputValue.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                        ) {\n                            // eslint-disable-next-line no-param-reassign\n                            position = position + 1;\n                            cursor += 1;\n                            i--;\n                            continue;\n                        }\n                    }\n                    if (\n                        maskExpression[cursor] === MaskExpression.MINUTE ||\n                        maskExpression[cursor] === MaskExpression.SECOND\n                    ) {\n                        if (Number(inputSymbol) > 5) {\n                            // eslint-disable-next-line no-param-reassign\n                            position = !this.leadZeroDateTime ? position + 1 : position;\n                            cursor += 1;\n                            this._shiftStep(maskExpression, cursor, inputArray.length);\n                            i--;\n                            if (this.leadZeroDateTime) {\n                                result += '0';\n                            }\n                            continue;\n                        }\n                    }\n                    const daysCount = 31;\n                    const inputValueCursor = inputValue[cursor] as string;\n                    const inputValueCursorPlusOne = inputValue[cursor + 1] as string;\n                    const inputValueCursorPlusTwo = inputValue[cursor + 2] as string;\n                    const inputValueCursorMinusOne = inputValue[cursor - 1] as string;\n                    const inputValueCursorMinusTwo = inputValue[cursor - 2] as string;\n                    const inputValueSliceMinusThreeMinusOne = inputValue.slice(\n                        cursor - 3,\n                        cursor - 1\n                    );\n                    const inputValueSliceMinusOnePlusOne = inputValue.slice(cursor - 1, cursor + 1);\n                    const inputValueSliceCursorPlusTwo = inputValue.slice(cursor, cursor + 2);\n                    const inputValueSliceMinusTwoCursor = inputValue.slice(cursor - 2, cursor);\n                    if (maskExpression[cursor] === MaskExpression.DAY) {\n                        const maskStartWithMonth =\n                            maskExpression.slice(0, 2) === MaskExpression.MONTHS;\n                        const startWithMonthInput: boolean =\n                            maskExpression.slice(0, 2) === MaskExpression.MONTHS &&\n                            this.specialCharacters.includes(inputValueCursorMinusTwo);\n                        if (\n                            (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                        ) {\n                            // eslint-disable-next-line no-param-reassign\n                            position = !this.leadZeroDateTime ? position + 1 : position;\n                            cursor += 1;\n                            this._shiftStep(maskExpression, cursor, inputArray.length);\n                            i--;\n                            if (this.leadZeroDateTime) {\n                                result += '0';\n                            }\n                            continue;\n                        }\n                    }\n                    if (maskExpression[cursor] === MaskExpression.MONTH) {\n                        const monthsCount = 12;\n                        // mask without day\n                        const withoutDays: boolean =\n                            cursor === 0 &&\n                            (Number(inputSymbol) > 2 ||\n                                Number(inputValueSliceCursorPlusTwo) > monthsCount ||\n                                (this.specialCharacters.includes(inputValueCursorPlusOne) &&\n                                    !backspaced));\n                        // day<10 && month<12 for input\n                        const specialChart = maskExpression.slice(cursor + 2, cursor + 3);\n                        const day1monthInput: boolean =\n                            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                        //  month<12 && day<10 for input\n                        const day2monthInput: boolean =\n                            Number(inputValueSliceMinusThreeMinusOne) <= daysCount &&\n                            !this.specialCharacters.includes(\n                                inputValueSliceMinusThreeMinusOne as string\n                            ) &&\n                            this.specialCharacters.includes(inputValueCursorMinusOne) &&\n                            (Number(inputValueSliceCursorPlusTwo) > monthsCount ||\n                                this.specialCharacters.includes(inputValueCursorPlusOne));\n                        // cursor === 5 && without days\n                        const day2monthInputDot: boolean =\n                            (Number(inputValueSliceCursorPlusTwo) > monthsCount && cursor === 5) ||\n                            (this.specialCharacters.includes(inputValueCursorPlusOne) &&\n                                cursor === 5);\n                        // // day<10 && month<12 for paste whole data\n                        const day1monthPaste: boolean =\n                            Number(inputValueSliceMinusThreeMinusOne) > daysCount &&\n                            !this.specialCharacters.includes(\n                                inputValueSliceMinusThreeMinusOne as string\n                            ) &&\n                            !this.specialCharacters.includes(\n                                inputValueSliceMinusTwoCursor as string\n                            ) &&\n                            Number(inputValueSliceMinusTwoCursor) > monthsCount &&\n                            maskExpression.includes('d0');\n                        // 10<day<31 && month<12 for paste whole data\n                        const day2monthPaste: boolean =\n                            Number(inputValueSliceMinusThreeMinusOne) <= daysCount &&\n                            !this.specialCharacters.includes(\n                                inputValueSliceMinusThreeMinusOne as string\n                            ) &&\n                            !this.specialCharacters.includes(inputValueCursorMinusOne) &&\n                            Number(inputValueSliceMinusOnePlusOne) > monthsCount;\n                        if (\n                            (Number(inputSymbol) > 1 && this.leadZeroDateTime) ||\n                            withoutDays ||\n                            day1monthInput ||\n                            day2monthPaste ||\n                            day1monthPaste ||\n                            day2monthInput ||\n                            (day2monthInputDot && !this.leadZeroDateTime)\n                        ) {\n                            // eslint-disable-next-line no-param-reassign\n                            position = !this.leadZeroDateTime ? position + 1 : position;\n                            cursor += 1;\n                            this._shiftStep(maskExpression, cursor, inputArray.length);\n                            i--;\n                            if (this.leadZeroDateTime) {\n                                result += '0';\n                            }\n                            continue;\n                        }\n                    }\n                    result += inputSymbol;\n                    cursor++;\n                } else if (\n                    this.specialCharacters.includes(inputSymbol) &&\n                    maskExpression[cursor] === inputSymbol\n                ) {\n                    result += inputSymbol;\n                    cursor++;\n                } else if (\n                    this.specialCharacters.indexOf(\n                        maskExpression[cursor] ?? MaskExpression.EMPTY_STRING\n                    ) !== -1\n                ) {\n                    result += maskExpression[cursor];\n                    cursor++;\n                    this._shiftStep(maskExpression, cursor, inputArray.length);\n                    i--;\n                } else if (\n                    maskExpression[cursor] === MaskExpression.NUMBER_NINE &&\n                    this.showMaskTyped\n                ) {\n                    this._shiftStep(maskExpression, cursor, inputArray.length);\n                } else if (\n                    this.patterns[maskExpression[cursor] ?? MaskExpression.EMPTY_STRING] &&\n                    this.patterns[maskExpression[cursor] ?? MaskExpression.EMPTY_STRING]?.optional\n                ) {\n                    if (\n                        !!inputArray[cursor] &&\n                        maskExpression !== '099.099.099.099' &&\n                        maskExpression !== '000.000.000-00' &&\n                        maskExpression !== '00.000.000/0000-00' &&\n                        !maskExpression.match(/^9+\\.0+$/) &&\n                        !this.patterns[maskExpression[cursor] ?? MaskExpression.EMPTY_STRING]\n                            ?.optional\n                    ) {\n                        result += inputArray[cursor];\n                    }\n                    if (\n                        maskExpression.includes(\n                            MaskExpression.NUMBER_NINE + MaskExpression.SYMBOL_STAR\n                        ) &&\n                        maskExpression.includes(\n                            MaskExpression.NUMBER_ZERO + MaskExpression.SYMBOL_STAR\n                        )\n                    ) {\n                        cursor++;\n                    }\n\n                    cursor++;\n                    i--;\n                } else if (\n                    this.maskExpression[cursor + 1] === MaskExpression.SYMBOL_STAR &&\n                    this._findSpecialChar(\n                        this.maskExpression[cursor + 2] ?? MaskExpression.EMPTY_STRING\n                    ) &&\n                    this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n                    multi\n                ) {\n                    cursor += 3;\n                    result += inputSymbol;\n                } else if (\n                    this.maskExpression[cursor + 1] === MaskExpression.SYMBOL_QUESTION &&\n                    this._findSpecialChar(\n                        this.maskExpression[cursor + 2] ?? MaskExpression.EMPTY_STRING\n                    ) &&\n                    this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n                    multi\n                ) {\n                    cursor += 3;\n                    result += inputSymbol;\n                } else if (\n                    this.showMaskTyped &&\n                    this.specialCharacters.indexOf(inputSymbol) < 0 &&\n                    inputSymbol !== this.placeHolderCharacter &&\n                    this.placeHolderCharacter.length === 1\n                ) {\n                    stepBack = true;\n                }\n            }\n        }\n        if (\n            result.length + 1 === maskExpression.length &&\n            this.specialCharacters.indexOf(\n                maskExpression[maskExpression.length - 1] ?? MaskExpression.EMPTY_STRING\n            ) !== -1\n        ) {\n            result += maskExpression[maskExpression.length - 1];\n        }\n        let newPosition: number = position + 1;\n\n        while (this._shift.has(newPosition)) {\n            shift++;\n            newPosition++;\n        }\n\n        let actualShift: number =\n            justPasted && !maskExpression.startsWith(MaskExpression.SEPARATOR)\n                ? cursor\n                : this._shift.has(position)\n                  ? shift\n                  : 0;\n        if (stepBack) {\n            actualShift--;\n        }\n\n        cb(actualShift, backspaceShift);\n        if (shift < 0) {\n            this._shift.clear();\n        }\n        let onlySpecial = false;\n        if (backspaced) {\n            onlySpecial = inputArray.every((char) => this.specialCharacters.includes(char));\n        }\n\n        let res = `${this.prefix}${onlySpecial ? MaskExpression.EMPTY_STRING : result}${\n            this.showMaskTyped ? '' : this.suffix\n        }`;\n\n        if (result.length === 0) {\n            res = !this.dropSpecialCharacters ? `${this.prefix}${result}` : `${result}`;\n        }\n\n        const isSpecialCharacterMaskFirstSymbol =\n            inputValue.length === 1 &&\n            this.specialCharacters.includes(maskExpression[0] as string) &&\n            inputValue !== maskExpression[0];\n\n        if (\n            !this._checkSymbolMask(inputValue, maskExpression[1] as string) &&\n            isSpecialCharacterMaskFirstSymbol\n        ) {\n            return '';\n        }\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\n    public _findDropSpecialChar(inputSymbol: string): undefined | string {\n        if (Array.isArray(this.dropSpecialCharacters)) {\n            return this.dropSpecialCharacters.find((val: string) => val === inputSymbol);\n        }\n        return this._findSpecialChar(inputSymbol);\n    }\n\n    public _findSpecialChar(inputSymbol: string): undefined | string {\n        return this.specialCharacters.find((val: string) => val === inputSymbol);\n    }\n\n    public _checkSymbolMask(inputSymbol: string, maskSymbol: string): boolean {\n        this.patterns = this.customPattern ? this.customPattern : this.patterns;\n        return (\n            (this.patterns[maskSymbol]?.pattern &&\n                this.patterns[maskSymbol]?.pattern.test(inputSymbol)) ??\n            false\n        );\n    }\n\n    private _formatWithSeparators = (\n        str: string,\n        thousandSeparatorChar: string,\n        decimalChars: string | string[],\n        precision: number\n    ) => {\n        let x: string[] = [];\n        let decimalChar = '';\n        if (Array.isArray(decimalChars)) {\n            const regExp = new RegExp(\n                decimalChars.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|')\n            );\n            x = str.split(regExp);\n            decimalChar = str.match(regExp)?.[0] ?? MaskExpression.EMPTY_STRING;\n        } else {\n            x = str.split(decimalChars);\n            decimalChar = decimalChars;\n        }\n        const decimals: string =\n            x.length > 1 ? `${decimalChar}${x[1]}` : MaskExpression.EMPTY_STRING;\n        let res: string = x[0] ?? MaskExpression.EMPTY_STRING;\n        const separatorLimit: string = this.separatorLimit.replace(\n            /\\s/g,\n            MaskExpression.EMPTY_STRING\n        );\n        if (separatorLimit && +separatorLimit) {\n            if (res[0] === MaskExpression.MINUS) {\n                res = `-${res.slice(1, res.length).slice(0, separatorLimit.length)}`;\n            } else {\n                res = res.slice(0, separatorLimit.length);\n            }\n        }\n        const rgx = /(\\d+)(\\d{3})/;\n\n        while (thousandSeparatorChar && rgx.test(res)) {\n            res = res.replace(rgx, '$1' + thousandSeparatorChar + '$2');\n        }\n\n        if (precision === undefined) {\n            return res + decimals;\n        } else if (precision === 0) {\n            return res;\n        }\n        return res + decimals.substring(0, precision + 1);\n    };\n\n    private percentage = (str: string): boolean => {\n        const sanitizedStr = str.replace(',', '.');\n        const value = Number(\n            this.allowNegativeNumbers && str.includes(MaskExpression.MINUS)\n                ? sanitizedStr.slice(1, str.length)\n                : sanitizedStr\n        );\n\n        return !isNaN(value) && value >= 0 && value <= 100;\n    };\n\n    private getPrecision = (maskExpression: string): number => {\n        const x: string[] = maskExpression.split(MaskExpression.DOT);\n        if (x.length > 1) {\n            return Number(x[x.length - 1]);\n        }\n\n        return Infinity;\n    };\n\n    private checkAndRemoveSuffix = (inputValue: string): string => {\n        for (let i = this.suffix?.length - 1; i >= 0; i--) {\n            const substr = this.suffix.substring(i, this.suffix?.length);\n            if (\n                inputValue.includes(substr) &&\n                i !== this.suffix?.length - 1 &&\n                (i - 1 < 0 ||\n                    !inputValue.includes(this.suffix.substring(i - 1, this.suffix?.length)))\n            ) {\n                return inputValue.replace(substr, MaskExpression.EMPTY_STRING);\n            }\n        }\n        return inputValue;\n    };\n\n    private checkInputPrecision = (\n        inputValue: string,\n        precision: number,\n        decimalMarker: IConfig['decimalMarker']\n    ): string => {\n        if (precision < Infinity) {\n            // TODO need think about decimalMarker\n            if (Array.isArray(decimalMarker)) {\n                const marker = decimalMarker.find((dm) => dm !== this.thousandSeparator);\n                // eslint-disable-next-line no-param-reassign\n                decimalMarker = marker ? marker : decimalMarker[0];\n            }\n            const precisionRegEx = new RegExp(\n                this._charToRegExpExpression(decimalMarker) + `\\\\d{${precision}}.*$`\n            );\n            const precisionMatch: RegExpMatchArray | null = inputValue.match(precisionRegEx);\n            const precisionMatchLength: number = (precisionMatch && precisionMatch[0]?.length) ?? 0;\n            if (precisionMatchLength - 1 > precision) {\n                const diff = precisionMatchLength - 1 - precision;\n                // eslint-disable-next-line no-param-reassign\n                inputValue = inputValue.substring(0, inputValue.length - diff);\n            }\n            if (\n                precision === 0 &&\n                this._compareOrIncludes(\n                    inputValue[inputValue.length - 1],\n                    decimalMarker,\n                    this.thousandSeparator\n                )\n            ) {\n                // eslint-disable-next-line no-param-reassign\n                inputValue = inputValue.substring(0, inputValue.length - 1);\n            }\n        }\n        return inputValue;\n    };\n\n    private _stripToDecimal(str: string): string {\n        return str\n            .split(MaskExpression.EMPTY_STRING)\n            .filter((i: string, idx: number) => {\n                const isDecimalMarker =\n                    typeof this.decimalMarker === 'string'\n                        ? i === this.decimalMarker\n                        : // TODO (inepipenko) use utility type\n                          this.decimalMarker.includes(\n                              i as MaskExpression.COMMA | MaskExpression.DOT\n                          );\n                return (\n                    i.match('^-?\\\\d') ||\n                    i === this.thousandSeparator ||\n                    isDecimalMarker ||\n                    (i === MaskExpression.MINUS && idx === 0 && this.allowNegativeNumbers)\n                );\n            })\n            .join(MaskExpression.EMPTY_STRING);\n    }\n\n    private _charToRegExpExpression(char: string): string {\n        // if (Array.isArray(char)) {\n        // \treturn char.map((v) => ('[\\\\^$.|?*+()'.indexOf(v) >= 0 ? `\\\\${v}` : v)).join('|');\n        // }\n        if (char) {\n            const charsToEscape = '[\\\\^$.|?*+()';\n            return char === ' ' ? '\\\\s' : charsToEscape.indexOf(char) >= 0 ? `\\\\${char}` : char;\n        }\n        return char;\n    }\n\n    private _shiftStep(maskExpression: string, cursor: number, inputLength: number) {\n        const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor))\n            ? inputLength\n            : cursor;\n        this._shift.add(shiftStep + this.prefix.length || 0);\n    }\n\n    protected _compareOrIncludes<T>(value: T, comparedValue: T | T[], excludedValue: T): boolean {\n        return Array.isArray(comparedValue)\n            ? comparedValue.filter((v) => v !== excludedValue).includes(value)\n            : value === comparedValue;\n    }\n\n    private _validIP(valuesIP: string[]): boolean {\n        return !(\n            valuesIP.length === 4 &&\n            !valuesIP.some((value: string, index: number) => {\n                if (valuesIP.length !== index + 1) {\n                    return value === MaskExpression.EMPTY_STRING || Number(value) > 255;\n                }\n                return value === MaskExpression.EMPTY_STRING || Number(value.substring(0, 3)) > 255;\n            })\n        );\n    }\n\n    private _splitPercentZero(value: string): string {\n        if (value === MaskExpression.MINUS && this.allowNegativeNumbers) {\n            return value;\n        }\n        const decimalIndex =\n            typeof this.decimalMarker === 'string'\n                ? value.indexOf(this.decimalMarker)\n                : value.indexOf(MaskExpression.DOT);\n        const emptyOrMinus =\n            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        } 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\n            const decimal =\n                typeof this.decimalMarker === 'string' ? this.decimalMarker : MaskExpression.DOT;\n\n            return integerString === MaskExpression.EMPTY_STRING\n                ? MaskExpression.EMPTY_STRING\n                : `${emptyOrMinus}${integerString}${decimal}${decimalPart}`;\n        }\n    }\n\n    private _findFirstNonZeroDigitIndex(inputString: string): number {\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}\n","import { ElementRef, inject, Injectable, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { NGX_MASK_CONFIG, IConfig } from './ngx-mask.config';\nimport { NgxMaskApplierService } from './ngx-mask-applier.service';\nimport { MaskExpression } from './ngx-mask-expression.enum';\n\n@Injectable()\nexport class NgxMaskService extends NgxMaskApplierService {\n    public isNumberValue = false;\n\n    public maskIsShown = '';\n\n    public selStart: number | null = null;\n\n    public selEnd: number | null = null;\n\n    /**\n     * Whether we are currently in writeValue function, in this case when applying the mask we don't want to trigger onChange function,\n     * since writeValue should be a one way only process of writing the DOM value based on the Angular model value.\n     */\n    public writingValue = false;\n\n    public maskChanged = false;\n    public _maskExpressionArray: string[] = [];\n\n    public triggerOnMaskChange = false;\n\n    public _previousValue = '';\n\n    public _currentValue = '';\n\n    private _emitValue = false;\n\n    private _start!: number;\n\n    private _end!: number;\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public onChange = (_: any) => {};\n\n    public readonly _elementRef = inject(ElementRef, { optional: true });\n\n    private readonly document = inject(DOCUMENT);\n\n    protected override _config = inject<IConfig>(NGX_MASK_CONFIG);\n\n    private readonly _renderer = inject(Renderer2, { optional: true });\n\n    public override applyMask(\n        inputValue: string,\n        maskExpression: string,\n        position = 0,\n        justPasted = false,\n        backspaced = false,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        cb: (...args: any[]) => any = () => {}\n    ): string {\n        if (!maskExpression) {\n            return inputValue !== this.actualValue ? this.actualValue : inputValue;\n        }\n        this.maskIsShown = this.showMaskTyped\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\n        const getSymbol: string =\n            !!inputValue && typeof this.selStart === 'number'\n                ? inputValue[this.selStart] ?? MaskExpression.EMPTY_STRING\n                : MaskExpression.EMPTY_STRING;\n        let newInputValue = '';\n        if (this.hiddenInput !== undefined && !this.writingValue) {\n            let actualResult: string[] =\n                inputValue && inputValue.length === 1\n                    ? inputValue.split(MaskExpression.EMPTY_STRING)\n                    : this.actualValue.split(MaskExpression.EMPTY_STRING);\n            // eslint-disable  @typescript-eslint/no-unused-expressions\n\n            if (typeof this.selStart === 'object' && typeof this.selEnd === 'object') {\n                this.selStart = Number(this.selStart);\n                this.selEnd = Number(this.selEnd);\n            } else {\n                inputValue !== MaskExpression.EMPTY_STRING && actualResult.length\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) {\n                if (!this.hiddenInput) {\n                    // eslint-disable-next-line no-param-reassign\n                    inputValue = this.removeMask(inputValue);\n                }\n            }\n            // eslint-enable  @typescript-eslint/no-unused-expressions\n            newInputValue =\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 (\n            backspaced &&\n            this.specialCharacters.indexOf(\n                this.maskExpression[position] ?? MaskExpression.EMPTY_STRING\n            ) !== -1 &&\n            this.showMaskTyped &&\n            !this.prefix\n        ) {\n            newInputValue = this._currentValue;\n        }\n        if (this.deletedSpecialCharacter && position) {\n            if (this.specialCharacters.includes(this.actualValue.slice(position, position + 1))) {\n                // eslint-disable-next-line no-param-reassign\n                position = position + 1;\n            } else if (maskExpression.slice(position - 1, position + 1) !== MaskExpression.MONTHS) {\n                // eslint-disable-next-line no-param-reassign\n                position = position - 2;\n            }\n\n            this.deletedSpecialCharacter = false;\n        }\n        if (\n            this.showMaskTyped &&\n            this.placeHolderCharacter.length === 1 &&\n            !this.leadZeroDateTime\n        ) {\n            // eslint-disable-next-line no-param-reassign\n            inputValue = this.removeMask(inputValue);\n        }\n\n        if (this.maskChanged) {\n            newInputValue = inputValue;\n        } else {\n            newInputValue =\n                Boolean(newInputValue) && newInputValue.length ? newInputValue : inputValue;\n        }\n\n        if (\n            this.showMaskTyped &&\n            this.keepCharacterPositions &&\n            this.actualValue &&\n            !justPasted &&\n            !this.writingValue\n        ) {\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\n        const result: string = super.applyMask(\n            newInputValue,\n            maskExpression,\n            position,\n            justPasted,\n            backspaced,\n            cb\n        );\n\n        this.actualValue = this.getActualValue(result);\n        // handle some separator implications:\n        // a.) adjust decimalMarker default (. -> ,) if thousandSeparator is a dot\n        if (\n            this.thousandSeparator === MaskExpression.DOT &&\n            this.decimalMarker === MaskExpression.DOT\n        ) {\n            this.decimalMarker = MaskExpression.COMMA;\n        }\n        // b) remove decimal marker from list of special characters to mask\n        if (\n            this.maskExpression.startsWith(MaskExpression.SEPARATOR) &&\n            this.dropSpecialCharacters === true\n        ) {\n            this.specialCharacters = this.specialCharacters.filter(\n                (item: string) =>\n                    !this._compareOrIncludes(item, this.decimalMarker, this.thousandSeparator) //item !== this.decimalMarker, // !\n            );\n        }\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._previousValue === this._currentValue && justPasted);\n        }\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: number = result.length;\n        const prefNmask: string = `${this.prefix}${this.maskIsShown}${this.suffix}`;\n\n        if (this.maskExpression.includes(MaskExpression.HOURS)) {\n            const countSkipedSymbol = this._numberSkipedSymbols(result);\n            return `${result}${prefNmask.slice(resLen + countSkipedSymbol)}`;\n        } else if (\n            this.maskExpression === MaskExpression.IP ||\n            this.maskExpression === MaskExpression.CPF_CNPJ\n        ) {\n            return `${result}${prefNmask}`;\n        }\n        return `${result}${prefNmask.slice(resLen)}`;\n    }\n\n    // get the number of characters that were shifted\n    private _numberSkipedSymbols(value: string): number {\n        const regex = /(^|\\D)(\\d\\D)/g;\n        let match = regex.exec(value);\n        let countSkipedSymbol = 0;\n        while (match != null) {\n            countSkipedSymbol += 1;\n            match = regex.exec(value);\n        }\n        return countSkipedSymbol;\n    }\n\n    public applyValueChanges(\n        position: number,\n        justPasted: boolean,\n        backspaced: boolean,\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        cb: (...args: any[]) => any = () => {}\n    ): void {\n        const formElement = this._elementRef?.nativeElement;\n        if (!formElement) {\n            return;\n        }\n\n        formElement.value = this.applyMask(\n            formElement.value,\n            this.maskExpression,\n            position,\n            justPasted,\n            backspaced,\n            cb\n        );\n        if (formElement === this._getActiveElement()) {\n            return;\n        }\n        this.clearIfNotMatchFn();\n    }\n\n    public hideInput(inputValue: string, maskExpression: string): string {\n        return inputValue\n            .split(MaskExpression.EMPTY_STRING)\n            .map((curr: string, index: number) => {\n                if (\n                    this.patterns &&\n                    this.patterns[maskExpression[index] ?? MaskExpression.EMPTY_STRING] &&\n                    this.patterns[maskExpression[index] ?? MaskExpression.EMPTY_STRING]?.symbol\n                ) {\n                    return this.patterns[maskExpression[index] ?? MaskExpression.EMPTY_STRING]\n                        ?.symbol;\n                }\n                return curr;\n            })\n            .join(MaskExpression.EMPTY_STRING);\n    }\n\n    // this function is not necessary, it checks result against maskExpression\n    public getActualValue(res: string): string {\n        const compare: string[] = res\n            .split(MaskExpression.EMPTY_STRING)\n            .filter((symbol: string, i: number) => {\n                const maskChar = this.maskExpression[i] ?? MaskExpression.EMPTY_STRING;\n                return (\n                    this._checkSymbolMask(symbol, maskChar) ||\n                    (this.specialCharacters.includes(maskChar) && symbol === maskChar)\n                );\n            });\n        if (compare.join(MaskExpression.EMPTY_STRING) === res) {\n            return compare.join(MaskExpression.EMPTY_STRING);\n        }\n        return res;\n    }\n\n    public shiftTypedSymbols(inputValue: string): string {\n        let symbolToReplace = '';\n        const newInputValue: (string | undefined)[] =\n            (inputValue &&\n                inputValue\n                    .split(MaskExpression.EMPTY_STRING)\n                    .map((currSymbol: string, index: number) => {\n                        if (\n                            this.specialCharacters.includes(\n                                inputValue[index + 1] ?? MaskExpression.EMPTY_STRING\n                            ) &&\n                            inputValue[index + 1] !== this.maskExpression[index + 1]\n                        ) {\n                            symbolToReplace = currSymbol;\n                            return inputValue[index + 1];\n                        }\n                        if (symbolToReplace.length) {\n                            const replaceSymbol: string = symbolToReplace;\n                            symbolToReplace = MaskExpression.EMPTY_STRING;\n                            return replaceSymbol;\n                        }\n                        return currSymbol;\n                    })) ||\n            [];\n        return newInputValue.join(MaskExpression.EMPTY_STRING);\n    }\n\n    /**\n     * Convert number value to string\n     * 3.1415 -> '3.1415'\n     * 1e-7 -> '0.0000001'\n     */\n    public numberToString(value: number | string): string {\n        if (\n            (!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        ) {\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\n    public showMaskInInput(inputVal?: string): string {\n        if (this.showMaskTyped && !!this.shownMaskExpression) {\n            if (this.maskExpression.length !== this.shownMaskExpression.length) {\n                throw new Error('Mask expression must match mask placeholder length');\n            } else {\n                return this.shownMaskExpression;\n            }\n        } else if (this.showMaskTyped) {\n            if (inputVal) {\n                if (this.maskExpression === 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\n    public clearIfNotMatchFn(): void {\n        const formElement = this._elementRef?.nativeElement;\n        if (!formElement) {\n            return;\n        }\n        if (\n            this.clearIfNotMatch &&\n            this.prefix.length + this.maskExpression.length + this.suffix.length !==\n                formElement.value.replace(this.placeHolderCharacter, MaskExpression.EMPTY_STRING)\n                    .length\n        ) {\n            this.formElementProperty = ['value', MaskExpression.EMPTY_STRING];\n            this.applyMask('', this.maskExpression);\n        }\n    }\n\n    public set formElementProperty([name, value]: [string, string | boolean]) {\n        if (!this._renderer || !this._elementRef) {\n            return;\n        }\n        //[TODO]: andriikamaldinov1 find better solution\n        Promise.resolve().then(() =>\n            this._renderer?.setProperty(this._elementRef?.nativeElement, name, value)\n        );\n    }\n\n    public checkDropSpecialCharAmount(mask: string): number {\n        const chars: string[] = mask\n            .split(MaskExpression.EMPTY_STRING)\n            .filter((item: string) => this._findDropSpecialChar(item));\n        return chars.length;\n    }\n\n    public removeMask(inputValue: string): string {\n        return this._removeMask(\n            this._removeSuffix(this._removePrefix(inputValue)),\n            this.specialCharacters.concat('_').concat(this.placeHolderCharacter)\n        );\n    }\n\n    private _checkForIp(inputVal: string): string {\n        if (inputVal === MaskExpression.HASH) {\n            return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n        }\n        const arr: string[] = [];\n        for (let i = 0; i < inputVal.length; i++) {\n            const value = inputVal[i] ?? 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\n    private _checkForCpfCnpj(inputVal: string): string {\n        const cpf =\n            `${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n            `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n            `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n            `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n        const cnpj =\n            `${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n            `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n            `.${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n            `/${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}${this.placeHolderCharacter}` +\n            `-${this.placeHolderCharacter}${this.placeHolderCharacter}`;\n\n        if (inputVal === MaskExpression.HASH) {\n            return cpf;\n        }\n        const arr: string[] = [];\n        for (let i = 0; i < inputVal.length; i++) {\n            const value = inputVal[i] ?? MaskExpression.EMPTY_STRING;\n            if (!value) {\n                continue;\n            }\n            if (value.match('\\\\d')) {\n                arr.push(value);\n            }\n        }\n        if (arr.length <= 3) {\n            return cpf.slice(arr.length, cpf.length);\n        }\n        if (arr.length > 3 && arr.length <= 6) {\n            return cpf.slice(arr.length + 1, cpf.length);\n        }\n        if (arr.length > 6 && arr.length <= 9) {\n            return cpf.slice(arr.length + 2, cpf.length);\n        }\n        if (arr.length > 9 && arr.length < 11) {\n            return cpf.slice(arr.length + 3, cpf.length);\n        }\n        if (arr.length === 11) {\n            return '';\n        }\n        if (arr.length === 12) {\n            if (inputVal.length === 17) {\n                return cnpj.slice(16, cnpj.length);\n            }\n            return cnpj.slice(15, cnpj.length);\n        }\n        if (arr.length > 12 && arr.length <= 14) {\n            return cnpj.slice(arr.length + 4, cnpj.length);\n        }\n        return '';\n    }\n\n    /**\n     * Recursively determine the current active element by navigating the Shadow DOM until the Active Element is found.\n     */\n    private _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n        const shadowRootEl = document?.activeElement?.shadowRoot;\n        if (!shadowRootEl?.activeElement) {\n            return document.activeElement;\n        } else {\n            return this._getActiveElement(shadowRootEl);\n        }\n    }\n\n    /**\n     * Propogates the input value back to the Angular model by triggering the onChange function. It won't do this if writingValue\n     * is true. If that is true it means we are currently in the writeValue function, which is supposed to only update the actual\n     * DOM element based on the Angular model value. It should be a one way process, i.e. writeValue should not be modifying the Angular\n     * model value too. Therefore, we don't trigger onChange in this scenario.\n     * @param inputValue the current form input value\n     */\n    private formControlResult(inputValue: string): void {\n        if (this.writingValue || (!this.triggerOnMaskChange && this.maskChanged)) {\n            this.triggerOnMaskChange && this.maskChanged\n                ? this.onChange(\n                      this.outputTransformFn(\n                          this._toNumber(\n                              this._checkSymbols(this._removeSuffix(this._removePrefix(inputValue)))\n                          )\n                      )\n                  )\n                : '';\n            this.maskChanged = false;\n            return;\n        }\n        if (Array.isArray(this.dropSpecialCharacters)) {\n            this.onChange(\n                this.outputTransformFn(\n                    this._toNumber(\n                        this._checkSymbols(\n                            this._removeMask(\n                                this._removeSuffix(this._removePrefix(inputValue)),\n                                this.dropSpecialCharacters\n                            )\n                        )\n                    )\n                )\n            );\n        } else if (\n            this.dropSpecialCharacters ||\n            (!this.dropSpecialCharacters && this.prefix === inputValue)\n        ) {\n            this.onChange(\n                this.outputTransformFn(\n                    this._toNumber(\n                        this._checkSymbols(this._removeSuffix(this._removePrefix(inputValue)))\n                    )\n                )\n            );\n        } else {\n            this.onChange(this.outputTransformFn(this._toNumber(inputValue)));\n        }\n    }\n\n    private _toNumber(value: string | number | undefined | null) {\n        if (!this.isNumberValue || value === MaskExpression.EMPTY_STRING) {\n            return value;\n        }\n        if (\n            this.maskExpression.startsWith(MaskExpression.SEPARATOR) &&\n            (this.leadZero || !this.dropSpecialCharacters)\n        ) {\n            return value;\n        }\n        if (String(value).length > 16 && this.separatorLimit.length > 14) {\n            return String(value);\n        }\n        const num = Number(value);\n        if (this.maskExpression.startsWith(MaskExpression.SEPARATOR) && Number.isNaN(num)) {\n            const val = String(value).replace(',', '.');\n            return Number(val);\n        }\n\n        return Number.isNaN(num) ? value : num;\n    }\n\n    private _removeMask(value: string, specialCharactersForRemove: string[]): string {\n        if (\n            this.maskExpression.startsWith(MaskExpression.PERCENT) &&\n            value.includes(MaskExpression.DOT)\n        ) {\n            return value;\n        }\n\n        return value\n            ? value.replace(\n                  this._regExpForRemove(specialCharactersForRemove),\n                  MaskExpression.EMPTY_STRING\n              )\n            : value;\n    }\n\n    private _removePrefix(value: string): string {\n        if (!this.prefix) {\n            return value;\n        }\n        return value ? value.replace(this.prefix, MaskExpression.EMPTY_STRING) : value;\n    }\n\n    private _removeSuffix(value: string): string {\n        if (!this.suffix) {\n            return value;\n        }\n        return value ? value.replace(this.suffix, MaskExpression.EMPTY_STRING) : value;\n    }\n\n    private _retrieveSeparatorValue(result: string): string {\n        let specialCharacters = Array.isArray(this.dropSpecialCharacters)\n            ? this.specialCharacters.filter((v) => {\n                  return (this.dropSpecialCharacters as string[]).includes(v);\n              })\n            : this.specialCharacters;\n        if (\n            !this.deletedSpecialCharacter &&\n            this._checkPatternForSpace() &&\n            result.includes(MaskExpression.WHITE_SPACE) &&\n            this.maskExpression.includes(MaskExpression.SYMBOL_STAR)\n        ) {\n            specialCharacters = specialCharacters.filter(\n                (char) => char !== MaskExpression.WHITE_SPACE\n            );\n        }\n        return this._removeMask(result, specialCharacters as string[]);\n    }\n\n    private _regExpForRemove(specialCharactersForRemove: string[]): RegExp {\n        return new RegExp(\n            specialCharactersForRemove.map((item: string) => `\\\\${item}`).join('|'),\n            'gi'\n        );\n    }\n\n    private _replaceDecimalMarkerToDot(value: string): string {\n        const markers = Array.isArray(this.decimalMarker)\n            ? this.decimalMarker\n            : [this.decimalMarker];\n\n        return value.replace(this._regExpForRemove(markers), MaskExpression.DOT);\n    }\n\n    public _checkSymbols(result: string): string | number | undefined | null {\n        if (result === MaskExpression.EMPTY_STRING) {\n            return result;\n        }\n\n        if (\n            this.maskExpression.startsWith(MaskExpression.PERCENT) &&\n            this.decimalMarker === MaskExpression.COMMA\n        ) {\n            // eslint-disable-next-line no-param-reassign\n            result = result.replace(MaskExpression.COMMA, MaskExpression.DOT);\n        }\n        const separatorPrecision: number | null = this._retrieveSeparatorPrecision(\n            this.maskExpression\n        );\n        const separatorValue: string = this._replaceDecimalMarkerToDot(\n            this._retrieveSeparatorValue(result)\n        );\n\n        if (!this.isNumberValue) {\n            return separatorValue;\n        }\n        if (separatorPrecision) {\n            if (result === this.decimalMarker) {\n                return null;\n            }\n            if (this.separatorLimit.length > 14) {\n                return String(separatorValue);\n            }\n            return this._checkPrecision(this.maskExpression, separatorValue);\n        } else {\n            return separatorValue;\n        }\n    }\n\n    private _checkPatternForSpace(): boolean {\n        for (const key in this.patterns) {\n            // eslint-disable-next-line no-prototype-builtins\n            if (this.patterns[key] && this.patterns[key]?.hasOwnProperty('pattern')) {\n                const patternString = this.patterns[key]?.pattern.toString();\n                const pattern = this.patterns[key]?.pattern;\n                if (\n                    (patternString?.includes(MaskExpression.WHITE_SPACE) as boolean) &&\n                    pattern?.test(this.maskExpression)\n                ) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n    // TODO should think about helpers or separting decimal precision to own property\n    private _retrieveSeparatorPrecision(maskExpretion: string): number | null {\n        const matcher: RegExpMatchArray | null = maskExpretion.match(\n            new RegExp(`^separator\\\\.([^d]*)`)\n        );\n        return matcher ? Number(matcher[1]) : null;\n    }\n\n    public _checkPrecision(separatorExpression: string, separatorValue: string): number | string {\n        const separatorPrecision = separatorExpression.slice(10, 11);\n        if (\n            separatorExpression.indexOf('2') > 0 ||\n            (this.leadZero && Number(separatorPrecision) > 0)\n        ) {\n            if (this.decimalMarker === MaskExpression.COMMA && this.leadZero) {\n                // eslint-disable-next-line no-param-reassign\n                separatorValue = separatorValue.replace(',', '.');\n            }\n            return this.leadZero\n                ? Number(separatorValue).toFixed(Number(separatorPrecision))\n                : Number(separatorValue).toFixed(2);\n        }\n        return this.numberToString(separatorValue);\n    }\n\n    public _repeatPatternSymbols(maskExp: string): string {\n        return (\n            (maskExp.match(/{[0-9]+}/) &&\n                maskExp\n                    .split(MaskExpression.EMPTY_STRING)\n                    .reduce((accum: string, currVal: string, index: number): string => {\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: string = new Array(repeatNumber + 1).join(\n                            maskExp[this._start - 1]\n                        );\n                        if (\n                            maskExp.slice(0, this._start).length > 1 &&\n                            maskExp.includes(MaskExpression.LETTER_S)\n                        ) {\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                        } else {\n                            return accum + replaceWith;\n                        }\n                    }, '')) ||\n            maskExp\n        );\n    }\n\n    public currentLocaleDecimalMarker(): string {\n        return (1.1).toLocaleString().substring(1, 2);\n    }\n}\n","import { EnvironmentProviders, inject, makeEnvironmentProviders, Provider } from '@angular/core';\n\nimport {\n    NGX_MASK_CONFIG,\n    INITIAL_CONFIG,\n    initialConfig,\n    NEW_CONFIG,\n    optionsConfig,\n} from './ngx-mask.config';\nimport { NgxMaskService } from './ngx-mask.service';\n\n/**\n * @internal\n */\nfunction _configFactory(): optionsConfig {\n    const initConfig = inject<optionsConfig>(INITIAL_CONFIG);\n    const configValue = inject<optionsConfig | (() => optionsConfig)>(NEW_CONFIG);\n\n    return configValue instanceof Function\n        ? { ...initConfig, ...configValue() }\n        : { ...initConfig, ...configValue };\n}\n\nexport function provideNgxMask(configValue?: optionsConfig | (() => optionsConfig)): Provider[] {\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}\n\nexport function provideEnvironmentNgxMask(\n    configValue?: optionsConfig | (() => optionsConfig)\n): EnvironmentProviders {\n    return makeEnvironmentProviders(provideNgxMask(configValue));\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n    Directive,\n    EventEmitter,\n    HostListener,\n    Input,\n    OnChanges,\n    Output,\n    SimpleChanges,\n    inject,\n} from '@angular/core';\nimport {\n    ControlValueAccessor,\n    FormControl,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    ValidationErrors,\n    Validator,\n} from '@angular/forms';\n\nimport { CustomKeyboardEvent } from './custom-keyboard-event';\nimport { IConfig, NGX_MASK_CONFIG, timeMasks, withoutValidation } from './ngx-mask.config';\nimport { NgxMaskService } from './ngx-mask.service';\nimport { MaskExpression } from './ngx-mask-expression.enum';\n\n@Directive({\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})\nexport class NgxMaskDirective implements ControlValueAccessor, OnChanges, Validator {\n    @Input('mask') public maskExpression: string | undefined | null = '';\n\n    @Input() public specialCharacters: IConfig['specialCharacters'] = [];\n\n    @Input() public patterns: IConfig['patterns'] = {};\n\n    @Input() public prefix: IConfig['prefix'] = '';\n\n    @Input() public suffix: IConfig['suffix'] = '';\n\n    @Input() public thousandSeparator: IConfig['thousandSeparator'] = ' ';\n\n    @Input() public decimalMarker: IConfig['decimalMarker'] = '.';\n\n    @Input() public dropSpecialCharacters: IConfig['dropSpecialCharacters'] | null = null;\n\n    @Input() public hiddenInput: IConfig['hiddenInput'] | null = null;\n\n    @Input() public showMaskTyped: IConfig['showMaskTyped'] | null = null;\n\n    @Input() public placeHolderCharacter: IConfig['placeHolderCharacter'] | null = null;\n\n    @Input() public shownMaskExpression: IConfig['shownMaskExpression'] | null = null;\n\n    @Input() public showTemplate: IConfig['showTemplate'] | null = null;\n\n    @Input() public clearIfNotMatch: IConfig['clearIfNotMatch'] | null = null;\n\n    @Input() public validation: IConfig['validation'] | null = null;\n\n    @Input() public separatorLimit: IConfig['separatorLimit'] | null = null;\n\n    @Input() public allowNegativeNumbers: IConfig['allowNegativeNumbers'] | null = null;\n\n    @Input() public leadZeroDateTime: IConfig['leadZeroDateTime'] | null = null;\n\n    @Input() public leadZero: IConfig['leadZero'] | null = null;\n\n    @Input() public triggerOnMaskChange: IConfig['triggerOnMaskChange'] | null = null;\n\n    @Input() public apm: IConfig['apm'] | null = null;\n\n    @Input() public inputTransformFn: IConfig['inputTransformFn'] | null = null;\n\n    @Input() public outputTransformFn: IConfig['outputTransformFn'] | null = null;\n\n    @Input() public keepCharacterPositions: IConfig['keepCharacterPositions'] | null = null;\n\n    @Output() public maskFilled: IConfig['maskFilled'] = new EventEmitter<void>();\n\n    private _maskValue = '';\n\n    private _inputValue!: string;\n\n    private _position: number | null = null;\n\n    private _code!: string;\n\n    private _maskExpressionArray: string[] = [];\n\n    private _allowFewMaskChangeMask: boolean = false;\n\n    private _justPasted = false;\n\n    private _isFocused = false;\n\n    /**For IME composition event */\n    private _isComposing = false;\n\n    private readonly document = inject(DOCUMENT);\n\n    public _maskService = inject(NgxMaskService, { self: true });\n\n    protected _config = inject<IConfig>(NGX_MASK_CONFIG);\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    public onChange = (_: any) => {};\n\n    public onTouch = () => {};\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        const {\n            maskExpression,\n            specialCharacters,\n            patterns,\n            prefix,\n            suffix,\n            thousandSeparator,\n            decimalMarker,\n            dropSpecialCharacters,\n            hiddenInput,\n            showMaskTyped,\n            placeHolderCharacter,\n            shownMaskExpression,\n            showTemplate,\n            clearIfNotMatch,\n            validation,\n            separatorLimit,\n            allowNegativeNumbers,\n            leadZeroDateTime,\n            leadZero,\n            triggerOnMaskChange,\n            apm,\n            inputTransformFn,\n            outputTransformFn,\n            keepCharacterPositions,\n        } = changes;\n        if (maskExpression) {\n            if (\n                maskExpression.currentValue !== maskExpression.previousValue &&\n                !maskExpression.firstChange\n            ) {\n                this._maskService.maskChanged = true;\n            }\n            if (\n                maskExpression.currentValue &&\n                maskExpression.currentValue.split(MaskExpression.OR).length > 1\n            ) {\n                this._maskExpressionArray = maskExpression.currentValue\n                    .split(MaskExpression.OR)\n                    .sort((a: string, b: string) => {\n                        return a.length - b.length;\n                    });\n                this._setMask();\n            } else {\n                this._maskExpressionArray = [];\n                this._maskValue = maskExpression.currentValue || MaskExpression.EMPTY_STRING;\n                this._maskService.maskExpression = this._maskValue;\n            }\n        }\n        if (specialCharacters) {\n            if (!specialCharacters.currentValue || !Array.isArray(specialCharacters.currentValue)) {\n                return;\n            } else {\n                this._maskService.specialCharacters = specialCharacters.currentValue || [];\n            }\n        }\n        if (allowNegativeNumbers) {\n            this._maskService.allowNegativeNumbers = allowNegativeNumbers.currentValue;\n            if (this._maskService.allowNegativeNumbers) {\n                this._maskService.specialCharacters = this._maskService.specialCharacters.filter(\n                    (c: string) => c !== MaskExpression.MINUS\n                );\n            }\n        }\n        // Only overwrite the mask available patterns if a pattern has actually been passed in\n        if (patterns && patterns.currentValue) {\n            this._maskService.patterns = patterns.currentValue;\n        }\n        if (apm && apm.currentValue) {\n            this._maskService.apm = apm.currentValue;\n        }\n        if (prefix) {\n            this._maskService.prefix = prefix.currentValue;\n        }\n        if (suffix) {\n            this._maskService.suffix = suffix.currentValue;\n        }\n        if (thousandSeparator) {\n            this._maskService.thousandSeparator = thousandSeparator.currentValue;\n        }\n        if (decimalMarker) {\n            this._maskService.decimalMarker = decimalMarker.currentValue;\n        }\n        if (dropSpecialCharacters) {\n            this._maskService.dropSpecialCharacters = dropSpecialCharacters.currentValue;\n        }\n        if (hiddenInput) {\n            this._maskService.hiddenInput = hiddenInput.currentValue;\n        }\n        if (showMaskTyped) {\n            this._maskService.showMaskTyped = showMaskTyped.currentValue;\n            if (\n                showMaskTyped.previousValue === false &&\n                showMaskTyped.currentValue === true &&\n                this._isFocused\n            ) {\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\n    public validate({ value }: FormControl): ValidationErrors | null {\n        if (!this._maskService.validation || !this._maskValue) {\n            return null;\n        }\n        if (this._maskService.ipError) {\n            return this._createValidationError(value);\n        }\n        if (this._maskService.cpfCnpjError) {\n            return this._createValidationError(value);\n        }\n        if (this._maskValue.startsWith(MaskExpression.SEPARATOR)) {\n            return null;\n        }\n        if (withoutValidation.includes(this._maskValue)) {\n            return null;\n        }\n        if (this._maskService.clearIfNotMatch) {\n            return null;\n        }\n        if (timeMasks.includes(this._maskValue)) {\n            return this._validateTime(value);\n        }\n\n        if (value && value.toString().length >= 1) {\n            let counterOfOpt = 0;\n\n            if (\n                this._maskValue.includes(MaskExpression.CURLY_BRACKETS_LEFT) &&\n                this._maskValue.includes(MaskExpression.CURLY_BRACKETS_RIGHT)\n            ) {\n                const lengthInsideCurlyBrackets = this._maskValue.slice(\n                    this._maskValue.indexOf(MaskExpression.CURLY_BRACKETS_LEFT) + 1,\n                    this._maskValue.indexOf(MaskExpression.CURLY_BRACKETS_RIGHT)\n                );\n\n                return lengthInsideCurlyBrackets === String(value.length)\n                    ? null\n                    : this._createValidationError(value);\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: string = this._maskValue\n                            .split(MaskExpression.EMPTY_STRING)\n                            .filter((i: string) => i === key)\n                            .join(MaskExpression.EMPTY_STRING);\n                        counterOfOpt += opt.length;\n                    } else if (this._maskValue.indexOf(key) !== -1) {\n                        counterOfOpt++;\n                    }\n                    if (\n                        this._maskValue.indexOf(key) !== -1 &&\n                        value.toString().length >= this._maskValue.indexOf(key)\n                    ) {\n                        return null;\n                    }\n                    if (counterOfOpt === this._maskValue.length) {\n                        return null;\n                    }\n                }\n            }\n            if (\n                (this._maskValue.indexOf(MaskExpression.SYMBOL_STAR) > 1 &&\n                    value.toString().length <\n                        this._maskValue.indexOf(MaskExpression.SYMBOL_STAR)) ||\n                (this._maskValue.indexOf(MaskExpression.SYMBOL_QUESTION) > 1 &&\n                    value.toString().length <\n                        this._maskValue.indexOf(MaskExpression.SYMBOL_QUESTION))\n            ) {\n                return this._createValidationError(value);\n            }\n            if (\n                this._maskValue.indexOf(MaskExpression.SYMBOL_STAR) === -1 ||\n                this._maskValue.indexOf(MaskExpression.SYMBOL_QUESTION) === -1\n            ) {\n                // eslint-disable-next-line no-param-reassign\n                value = typeof value === 'number' ? String(value) : value;\n                const array = this._maskValue.split('*');\n                const length: number = 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\n                if (array.length === 1) {\n                    if (value.toString().length < length) {\n                        return this._createValidationError(value);\n                    }\n                }\n                if (array.length > 1) {\n                    const lastIndexArray = array[array.length - 1];\n                    if (\n                        lastIndexArray &&\n                        this._maskService.specialCharacters.includes(lastIndexArray[0] as string) &&\n                        String(value).includes(lastIndexArray[0] ?? '') &&\n                        !this.dropSpecialCharacters\n                    ) {\n                        const special = value.split(lastIndexArray[0]);\n                        return special[special.length - 1].length === lastIndexArray.length - 1\n                            ? null\n                            : this._createValidationError(value);\n                    } else if (\n                        ((lastIndexArray &&\n                            !this._maskService.specialCharacters.includes(\n                                lastIndexArray[0] as string\n                            )) ||\n                            !lastIndexArray ||\n                            this._maskService.dropSpecialCharacters) &&\n                        value.length >= length - 1\n                    ) {\n                        return null;\n                    } else {\n                        return this._createValidationError(value);\n                    }\n                }\n            }\n            if (\n                this._maskValue.indexOf(MaskExpression.SYMBOL_STAR) === 1 ||\n                this._maskValue.indexOf(MaskExpression.SYMBOL_QUESTION) === 1\n            ) {\n                return null;\n            }\n        }\n        if (value) {\n            this.maskFilled.emit();\n            return null;\n        }\n        return null;\n    }\n\n    @HostListener('paste')\n    public onPaste() {\n        this._justPasted = true;\n    }\n\n    @HostListener('focus', ['$event']) public onFocus() {\n        this._isFocused = true;\n    }\n\n    @HostListener('ngModelChange', ['$event'])\n    public onModelChange(value: string | undefined | null | number): void {\n        // on form reset we need to update the actualValue\n        if (\n            (value === MaskExpression.EMPTY_STRING || value === null || value === undefined) &&\n            this._maskService.actualValue\n        ) {\n            this._maskService.actualValue = this._maskService.getActualValue(\n                MaskExpression.EMPTY_STRING\n            );\n        }\n    }\n\n    @HostListener('input', ['$event'])\n    public onInput(e: CustomKeyboardEvent): void {\n        // If IME is composing text, we wait for the composed text.\n        if (this._isComposing) return;\n        const el: HTMLInputElement = e.target as HTMLInputElement;\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\n                this._inputValue = el.value;\n                this._setMask();\n\n                if (!this._maskValue) {\n                    this.onChange(el.value);\n                    return;\n                }\n\n                let position: number =\n                    el.selectionStart === 1\n                        ? (el.selectionStart as number) + this._maskService.prefix.length\n                        : (el.selectionStart as number);\n\n                if (\n                    this.showMaskTyped &&\n                    this.keepCharacterPositions &&\n                    this._maskService.placeHolderCharacter.length === 1\n                ) {\n                    const inputSymbol = el.value.slice(position - 1, position);\n                    const prefixLength = this.prefix.length;\n                    const checkSymbols: boolean = this._maskService._checkSymbolMask(\n                        inputSymbol,\n                        this._maskService.maskExpression[position - 1 - prefixLength] ??\n                            MaskExpression.EMPTY_STRING\n                    );\n\n                    const checkSpecialCharacter: boolean = this._maskService._checkSymbolMask(\n                        inputSymbol,\n                        this._maskService.maskExpression[position + 1 - prefixLength] ??\n                            MaskExpression.EMPTY_STRING\n                    );\n                    const selectRangeBackspace: boolean =\n                        this._maskService.selStart === this._maskService.selEnd;\n                    const selStart = Number(this._maskService.selStart) - prefixLength;\n                    const selEnd = Number(this._maskService.selEnd) - prefixLength;\n\n                    if (this._code === MaskExpression.BACKSPACE) {\n                        if (!selectRangeBackspace) {\n                            if (this._maskService.selStart === prefixLength) {\n                                this._maskService.actualValue = `${this.prefix}${this._maskService.maskIsShown.slice(0, selEnd)}${this._inputValue.split(this.prefix).join('')}`;\n                            } else if (\n                                this._maskService.selStart ===\n                                this._maskService.maskIsShown.length + prefixLength\n                            ) {\n                                this._maskService.actualValue = `${this._inputValue}${this._maskService.maskIsShown.slice(selStart, selEnd)}`;\n                            } else {\n                                this._maskService.actualValue = `${this.prefix}${this._inputValue\n                                    .split(this.prefix)\n                                    .join('')\n                                    .slice(\n                                        0,\n                                        selStart\n                                    )}${this._maskService.maskIsShown.slice(selStart, selEnd)}${this._maskService.actualValue.slice(\n                                    selEnd + prefixLength,\n                                    this._maskService.maskIsShown.length + prefixLength\n                                )}${this.suffix}`;\n                            }\n                        } else if (\n                            !this._maskService.specialCharacters.includes(\n                                this._maskService.maskExpression.slice(\n                                    position - this.prefix.length,\n                                    position + 1 - this.prefix.length\n                                )\n                            ) &&\n                            selectRangeBackspace\n                        ) {\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\n                                position = position - 1;\n                            } else {\n                                const part1 = el.value.substring(0, position);\n                                const part2 = el.value.substring(position);\n                                this._maskService.actualValue = `${part1}${this._maskService.placeHolderCharacter}${part2}`;\n                            }\n                        }\n                    }\n                    if (this._code !== MaskExpression.BACKSPACE) {\n                        if (!checkSymbols && !checkSpecialCharacter && selectRangeBackspace) {\n                            position = Number(el.selectionStart) - 1;\n                        } else if (\n                            this._maskService.specialCharacters.includes(\n                                el.value.slice(position, position + 1)\n                            ) &&\n                            checkSpecialCharacter &&\n                            !this._maskService.specialCharacters.includes(\n                                el.value.slice(position + 1, position + 2)\n                            )\n                        ) {\n                            this._maskService.actualValue = `${el.value.slice(0, position - 1)}${el.value.slice(position, position + 1)}${inputSymbol}${el.value.slice(position + 2)}`;\n                            position = position + 1;\n                        } else if (checkSymbols) {\n                            if (el.value.length === 1 && position === 1) {\n                                this._maskService.actualValue = `${this.prefix}${inputSymbol}${this._maskService.maskIsShown.slice(\n                                    1,\n                                    this._maskService.maskIsShown.length\n                                )}${this.suffix}`;\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                        } else if (\n                            this.prefix &&\n                            el.value.length === 1 &&\n                            position - prefixLength === 1 &&\n                            this._maskService._checkSymbolMask(\n                                el.value,\n                                this._maskService.maskExpression[position - 1 - prefixLength] ??\n                                    MaskExpression.EMPTY_STRING\n                            )\n                        ) {\n                            this._maskService.actualValue = `${this.prefix}${el.value}${this._maskService.maskIsShown.slice(\n                                1,\n                                this._maskService.maskIsShown.length\n                            )}${this.suffix}`;\n                        }\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 (\n                    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                ) {\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 (\n                    this._maskService.maskExpression === MaskExpression.DAYS_MONTHS_YEARS &&\n                    this.leadZeroDateTime\n                ) {\n                    if (\n                        (position < 3 && Number(el.value) > 31 && Number(el.value) < 40) ||\n                        (position === 5 && Number(el.value.slice(3, 5)) > 12)\n                    ) {\n                        position = position + 2;\n                    }\n                }\n                if (\n                    this._maskService.maskExpression === MaskExpression.HOURS_MINUTES_SECONDS &&\n                    this.apm\n                ) {\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\n                this._maskService.applyValueChanges(\n                    position,\n                    this._justPasted,\n                    this._code === MaskExpression.BACKSPACE || this._code === MaskExpression.DELETE,\n                    (shift: number, _backspaceShift: boolean) => {\n                        this._justPasted = false;\n                        caretShift = shift;\n                        backspaceShift = _backspaceShift;\n                    }\n                );\n                // only set the selection if the element is active\n                if (this._getActiveElement() !== el) {\n                    return;\n                }\n\n                if (this._maskService.plusOnePosition) {\n                    position = position + 1;\n                    this._maskService.plusOnePosition = false;\n                }\n                // update position after applyValueChanges to prevent cursor on wrong position when it has an array of maskExpression\n                if (this._maskExpressionArray.length) {\n                    if (this._code === MaskExpression.BACKSPACE) {\n                        const specialChartMinusOne = this.specialCharacters.includes(\n                            this._maskService.actualValue.slice(position - 1, position)\n                        );\n                        const specialChartPlusOne = this.specialCharacters.includes(\n                            this._maskService.actualValue.slice(position, position + 1)\n                        );\n                        if (this._allowFewMaskChangeMask && !specialChartPlusOne) {\n                            position = (el.selectionStart as number) + 1;\n                            this._allowFewMaskChangeMask = false;\n                        } else {\n                            position = specialChartMinusOne ? position - 1 : position;\n                        }\n                    } else {\n                        position =\n                            el.selectionStart === 1\n                                ? (el.selectionStart as number) + this._maskService.prefix.length\n                                : (el.selectionStart as number);\n                    }\n                }\n                this._position =\n                    this._position === 1 && this._inputValue.length === 1 ? null : this._position;\n                let positionToApply: number = this._position\n                    ? this._inputValue.length + position + caretShift\n                    : position +\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            } else {\n                console.warn(\n                    'Ngx-mask writeValue work with string | number, your current value:',\n                    typeof transformedValue\n                );\n            }\n        } else {\n            if (!this._maskValue) {\n                this.onChange(el.value);\n                return;\n            }\n            this._maskService.applyValueChanges(\n                el.value.length,\n                this._justPasted,\n                this._code === MaskExpression.BACKSPACE || this._code === MaskExpression.DELETE\n            );\n        }\n    }\n\n    // IME starts\n    @HostListener('compositionstart', ['$event'])\n    public onCompositionStart(): void {\n        this._isComposing = true;\n    }\n\n    // IME completes\n    @HostListener('compositionend', ['$event'])\n    public onCompositionEnd(e: CustomKeyboardEvent): void {\n        this._isComposing = false;\n        this._justPasted = true;\n        this.onInput(e);\n    }\n\n    @HostListener('blur', ['$event'])\n    public onBlur(e: CustomKeyboardEvent): void {\n        if (this._maskValue) {\n            const el: HTMLInputElement = e.target as HTMLInputElement;\n            if (this.leadZero && el.value.length > 0 && typeof this.decimalMarker === 'string') {\n                const maskExpression = this._maskService.maskExpression;\n                const precision = Number(\n                    this._maskService.maskExpression.slice(\n                        maskExpression.length - 1,\n                        maskExpression.length\n                    )\n                );\n                if (precision > 0) {\n                    el.value = this.suffix ? el.value.split(this.suffix).join('') : el.value;\n                    const decimalPart = el.value.split(this.decimalMarker)[1] as string;\n                    el.value = el.value.includes(this.decimalMarker)\n                        ? el.value +\n                          MaskExpression.NUMBER_ZERO.repeat(precision - decimalPart.length) +\n                          this.suffix\n                        : el.value +\n                          this.decimalMarker +\n                          MaskExpression.NUMBER_ZERO.repeat(precision) +\n                          this.suffix;\n                    this._maskService.actualValue = el.value;\n                }\n            }\n            this._maskService.clearIfNotMatchFn();\n        }\n        this._isFocused = false;\n        this.onTouch();\n    }\n\n    @HostListener('click', ['$event'])\n    public onClick(e: MouseEvent | CustomKeyboardEvent): void {\n        if (!this._maskValue) {\n            return;\n        }\n\n        const el: HTMLInputElement = e.target as HTMLInputElement;\n        const posStart = 0;\n        const posEnd = 0;\n\n        if (\n            el !== null &&\n            el.selectionStart !== null &&\n            el.selectionStart === el.selectionEnd &&\n            el.selectionStart > this._maskService.prefix.length &&\n            // eslint-disable-next-line\n            (e as any).keyCode !== 38\n        ) {\n            if (this._maskService.showMaskTyped && !this.keepCharacterPositions) {\n                // We are showing the mask in the input\n                this._maskService.maskIsShown = this._maskService.showMaskInInput();\n                if (\n                    el.setSelectionRange &&\n                    this._maskService.prefix + this._maskService.maskIsShown === el.value\n                ) {\n                    // the input ONLY contains the mask, so position the cursor at the start\n                    el.focus();\n                    el.setSelectionRange(posStart, posEnd);\n                } else {\n                    // the input contains some characters already\n                    if (el.selectionStart > this._maskService.actualValue.length) {\n                        // if the user clicked beyond our value's length, position the cursor at the end of our value\n                        el.setSelectionRange(\n                            this._maskService.actualValue.length,\n                            this._maskService.actualValue.length\n                        );\n                    }\n                }\n            }\n        }\n        const nextValue: string | null =\n            el &&\n            (el.value === this._maskService.prefix\n                ? this._maskService.prefix + this._maskService.maskIsShown\n                : el.value);\n\n        /** Fix of cursor position jumping to end in most browsers no matter where cursor is inserted onFocus */\n        if (el && el.value !== nextValue) {\n            el.value = nextValue;\n        }\n        /** fix of cursor position with prefix when mouse click occur */\n        if (\n            el &&\n            el.type !== 'number' &&\n            ((el.selectionStart as number) || (el.selectionEnd as number)) <=\n                this._maskService.prefix.length\n        ) {\n            el.selectionStart = this._maskService.prefix.length;\n            return;\n        }\n        /** select only inserted text */\n        if (el && (el.selectionEnd as number) > this._getActualInputLength()) {\n            el.selectionEnd = this._getActualInputLength();\n        }\n    }\n\n    @HostListener('keydown', ['$event'])\n    public onKeyDown(e: CustomKeyboardEvent): void {\n        if (!this._maskValue) {\n            return;\n        }\n\n        if (this._isComposing) {\n            // User finalize their choice from IME composition, so trigger onInput() for the composed text.\n            if (e.key === 'Enter') this.onCompositionEnd(e);\n            return;\n        }\n\n        this._code = e.code ? e.code : e.key;\n        const el: HTMLInputElement = e.target as HTMLInputElement;\n        this._inputValue = el.value;\n        this._setMask();\n\n        if (el.type !== 'number') {\n            if (e.key === MaskExpression.ARROW_UP) {\n                e.preventDefault();\n            }\n            if (\n                e.key === MaskExpression.ARROW_LEFT ||\n                e.key === MaskExpression.BACKSPACE ||\n                e.key === MaskExpression.DELETE\n            ) {\n                if (e.key === MaskExpression.BACKSPACE && el.value.length === 0) {\n                    el.selectionStart = el.selectionEnd;\n                }\n                if (e.key === MaskExpression.BACKSPACE && (el.selectionStart as number) !== 0) {\n                    // If specialChars is false, (shouldn't ever happen) then set to the defaults\n                    this.specialCharacters = this.specialCharacters?.length\n                        ? this.specialCharacters\n                        : this._config.specialCharacters;\n                    if (\n                        this.prefix.length > 1 &&\n                        (el.selectionStart as number) <= this.prefix.length\n                    ) {\n                        el.setSelectionRange(this.prefix.length, el.selectionEnd);\n                    } else {\n                        if (\n                            this._inputValue.length !== (el.selectionStart as number) &&\n                            (el.selectionStart as number) !== 1\n                        ) {\n                            while (\n                                this.specialCharacters.includes(\n                                    (\n                                        this._inputValue[(el.selectionStart as number) - 1] ??\n                                        MaskExpression.EMPTY_STRING\n                                    ).toString()\n                                ) &&\n                                ((this.prefix.length >= 1 &&\n                                    (el.selectionStart as number) > this.prefix.length) ||\n                                    this.prefix.length === 0)\n                            ) {\n                                el.setSelectionRange(\n                                    (el.selectionStart as number) - 1,\n                                    el.selectionEnd\n                                );\n                            }\n                        }\n                    }\n                }\n                this.checkSelectionOnDeletion(el);\n                if (\n                    this._maskService.prefix.length &&\n                    (el.selectionStart as number) <= this._maskService.prefix.length &&\n                    (el.selectionEnd as number) <= this._maskService.prefix.length\n                ) {\n                    e.preventDefault();\n                }\n                const cursorStart: number | null = el.selectionStart;\n                if (\n                    e.key === MaskExpression.BACKSPACE &&\n                    !el.readOnly &&\n                    cursorStart === 0 &&\n                    el.selectionEnd === el.value.length &&\n                    el.value.length !== 0\n                ) {\n                    this._position = this._maskService.prefix ? this._maskService.prefix.length : 0;\n                    this._maskService.applyMask(\n                        this._maskService.prefix,\n                        this._maskService.maskExpression,\n                        this._position\n                    );\n                }\n            }\n            if (\n                !!this.suffix &&\n                this.suffix.length > 1 &&\n                this._inputValue.length - this.suffix.length < (el.selectionStart as number)\n            ) {\n                el.setSelectionRange(\n                    this._inputValue.length - this.suffix.length,\n                    this._inputValue.length\n                );\n            } else if (\n                (e.code === 'KeyA' && e.ctrlKey) ||\n                (e.code === 'KeyA' && e.metaKey) // Cmd + A (Mac)\n            ) {\n                el.setSelectionRange(0, this._getActualInputLength());\n                e.preventDefault();\n            }\n            this._maskService.selStart = el.selectionStart;\n            this._maskService.selEnd = el.selectionEnd;\n        }\n    }\n\n    /** It writes the value in the input */\n    public async writeValue(controlValue: unknown): Promise<void> {\n        if (typeof controlValue === 'object' && controlValue !== null && 'value' in controlValue) {\n            if ('disable' in controlValue) {\n                this.setDisabledState(Boolean(controlValue.disable));\n            }\n            // eslint-disable-next-line no-param-reassign\n            controlValue = controlValue.value;\n        }\n        if (controlValue !== null) {\n            // eslint-disable-next-line no-param-reassign\n            controlValue = this.inputTransformFn\n                ? this.inputTransformFn(controlValue)\n                : controlValue;\n        }\n\n        if (\n            typeof controlValue === 'string' ||\n            typeof controlValue === 'number' ||\n            controlValue === null ||\n            controlValue === undefined\n        ) {\n            if (controlValue === null || controlValue === undefined || controlValue === '') {\n                this._maskService._currentValue = '';\n                this._maskService._previousValue = '';\n            }\n\n            let inputValue: string | number | null | undefined = controlValue;\n            if (\n                typeof inputValue === 'number' ||\n                this._maskValue.startsWith(MaskExpression.SEPARATOR)\n            ) {\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(\n                                  localeDecimalMarker,\n                                  this._maskService.decimalMarker\n                              )\n                            : inputValue;\n                }\n\n                if (\n                    this._maskService.leadZero &&\n                    inputValue &&\n                    this.maskExpression &&\n                    this.dropSpecialCharacters !== false\n                ) {\n                    inputValue = this._maskService._checkPrecision(\n                        this._maskService.maskExpression,\n                        inputValue as string\n                    );\n                }\n                if (\n                    this.decimalMarker === MaskExpression.COMMA ||\n                    (Array.isArray(this._maskService.decimalMarker) &&\n                        this.thousandSeparator === MaskExpression.DOT)\n                ) {\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(\n                            inputValue?.toString() ?? '',\n                            this._maskService.maskExpression\n                        );\n                    });\n                }\n                this._maskService.isNumberValue = true;\n            }\n\n            if (typeof inputValue !== 'string') {\n                inputValue = '';\n            }\n\n            this._inputValue = inputValue;\n            this._setMask();\n\n            if (\n                (inputValue && this._maskService.maskExpression) ||\n                (this._maskService.maskExpression &&\n                    (this._maskService.prefix || this._maskService.showMaskTyped))\n            ) {\n                // Let the service we know we are writing value so that triggering onChange function won't happen during applyMask\n                typeof this.inputTransformFn !== 'function'\n                    ? (this._maskService.writingValue = true)\n                    : '';\n\n                this._maskService.formElementProperty = [\n                    'value',\n                    this._maskService.applyMask(inputValue, this._maskService.maskExpression),\n                ];\n                // Let the service know we've finished writing value\n                typeof this.inputTransformFn !== 'function'\n                    ? (this._maskService.writingValue = false)\n                    : '';\n            } else {\n                this._maskService.formElementProperty = ['value', inputValue];\n            }\n            this._inputValue = inputValue;\n        } else {\n            console.warn(\n                'Ngx-mask writeValue work with string | number, your current value:',\n                typeof controlValue\n            );\n        }\n    }\n\n    public registerOnChange(fn: typeof this.onChange): void {\n        this._maskService.onChange = this.onChange = fn;\n    }\n\n    public registerOnTouched(fn: typeof this.onTouch): void {\n        this.onTouch = fn;\n    }\n\n    private _getActiveElement(document: DocumentOrShadowRoot = this.document): Element | null {\n        const shadowRootEl = document?.activeElement?.shadowRoot;\n        if (!shadowRootEl?.activeElement) {\n            return document.activeElement;\n        } else {\n            return this._getActiveElement(shadowRootEl);\n        }\n    }\n\n    public checkSelectionOnDeletion(el: HTMLInputElement): void {\n        el.selectionStart = Math.min(\n            Math.max(this.prefix.length, el.selectionStart as number),\n            this._inputValue.length - this.suffix.length\n        );\n        el.selectionEnd = Math.min(\n            Math.max(this.prefix.length, el.selectionEnd as number),\n            this._inputValue.length - this.suffix.length\n        );\n    }\n\n    /** It disables the input element */\n    public setDisabledState(isDisabled: boolean): void {\n        this._maskService.formElementProperty = ['disabled', isDisabled];\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    private _applyMask(): any {\n        this._maskService.maskExpression = this._maskService._repeatPatternSymbols(\n            this._maskValue || ''\n        );\n        this._maskService.formElementProperty = [\n            'value',\n            this._maskService.applyMask(this._inputValue, this._maskService.maskExpression),\n        ];\n    }\n\n    private _validateTime(value: string): ValidationErrors | null {\n        const rowMaskLen: number = this._maskValue\n            .split(MaskExpression.EMPTY_STRING)\n            .filter((s: string) => s !== ':').length;\n        if (!value) {\n            return null; // Don't validate empty values to allow for optional form control\n        }\n\n        if (\n            (+(value[value.length - 1] ?? -1) === 0 && value.length < rowMaskLen) ||\n            value.length <= rowMaskLen - 2\n        ) {\n            return this._createValidationError(value);\n        }\n\n        return null;\n    }\n\n    private _getActualInputLength() {\n        return (\n            this._maskService.actualValue.length ||\n            this._maskService.actualValue.length + this._maskService.prefix.length\n        );\n    }\n\n    private _createValidationError(actualValue: string): ValidationErrors {\n        return {\n            mask: {\n                requiredMask: this._maskValue,\n                actualValue,\n            },\n        };\n    }\n\n    private _setMask() {\n        this._maskExpressionArray.some((mask): boolean | void => {\n            const specialChart: boolean = mask\n                .split(MaskExpression.EMPTY_STRING)\n                .some((char) => this._maskService.specialCharacters.includes(char));\n\n            if (\n                (specialChart &&\n                    this._inputValue &&\n                    this._areAllCharactersInEachStringSame(this._maskExpressionArray)) ||\n                mask.includes(MaskExpression.CURLY_BRACKETS_LEFT)\n            ) {\n                const test =\n                    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                } else {\n                    if (this._code === MaskExpression.BACKSPACE) {\n                        this._allowFewMaskChangeMask = true;\n                    }\n\n                    const expression =\n                        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            } else {\n                const check: boolean = 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\n                if (check || this._justPasted) {\n                    this._maskValue = this.maskExpression = this._maskService.maskExpression = mask;\n                    return check;\n                }\n            }\n        });\n    }\n\n    private _areAllCharactersInEachStringSame(array: string[]): boolean {\n        const specialCharacters = this._maskService.specialCharacters;\n        function removeSpecialCharacters(str: string): string {\n            const regex = new RegExp(`[${specialCharacters.map((ch) => `\\\\${ch}`).join('')}]`, 'g');\n            return str.replace(regex, '');\n        }\n\n        const processedArr = array.map(removeSpecialCharacters);\n\n        return processedArr.every((str) => {\n            const uniqueCharacters = new Set(str);\n            return uniqueCharacters.size === 1;\n        });\n    }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\n\nimport { IConfig, NGX_MASK_CONFIG } from './ngx-mask.config';\nimport { NgxMaskService } from './ngx-mask.service';\nimport { MaskExpression } from './ngx-mask-expression.enum';\n\n@Pipe({\n    name: 'mask',\n    pure: true,\n    standalone: true,\n})\nexport class NgxMaskPipe implements PipeTransform {\n    private readonly defaultOptions = inject<IConfig>(NGX_MASK_CONFIG);\n\n    private readonly _maskService = inject(NgxMaskService);\n\n    private _maskExpressionArray: string[] = [];\n\n    private mask = '';\n\n    public transform(\n        value: string | number,\n        mask: string,\n        { patterns, ...config }: Partial<IConfig> = {} as Partial<IConfig>\n    ): string {\n        const currentConfig = {\n            maskExpression: mask,\n            ...this.defaultOptions,\n            ...config,\n            patterns: {\n                ...this._maskService.patterns,\n                ...patterns,\n            },\n        };\n        Object.entries(currentConfig).forEach(([key, value]) => {\n            //eslint-disable-next-line  @typescript-eslint/no-explicit-any\n            (this._maskService as any)[key] = value;\n        });\n        if (mask.includes('||')) {\n            if (mask.split('||').length > 1) {\n                this._maskExpressionArray = mask.split('||').sort((a: string, b: string) => {\n                    return a.length - b.length;\n                });\n                this._setMask(value as string);\n                return this._maskService.applyMask(`${value}`, this.mask);\n            } else {\n                this._maskExpressionArray = [];\n                return this._maskService.applyMask(`${value}`, this.mask);\n            }\n        }\n        if (mask.includes(MaskExpression.CURLY_BRACKETS_LEFT)) {\n            return this._maskService.applyMask(\n                `${value}`,\n                this._maskService._repeatPatternSymbols(mask)\n            );\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                // eslint-disable-next-line no-param-reassign\n                this._maskService.leadZero = config.leadZero;\n            }\n            // eslint-disable-next-line no-param-reassign\n            value = String(value);\n            const localeDecimalMarker = this._maskService.currentLocaleDecimalMarker();\n            if (!Array.isArray(this._maskService.decimalMarker)) {\n                // eslint-disable-next-line no-param-reassign\n                value =\n                    this._maskService.decimalMarker !== localeDecimalMarker\n                        ? value.replace(localeDecimalMarker, this._maskService.decimalMarker)\n                        : value;\n            }\n            if (\n                this._maskService.leadZero &&\n                value &&\n                this._maskService.dropSpecialCharacters !== false\n            ) {\n                // eslint-disable-next-line no-param-reassign\n                value = this._maskService._checkPrecision(mask, value as string);\n            }\n            if (this._maskService.decimalMarker === MaskExpression.COMMA) {\n                // eslint-disable-next-line no-param-reassign\n                value = value.toString().replace(MaskExpression.DOT, MaskExpression.COMMA);\n            }\n            this._maskService.isNumberValue = true;\n        }\n        if (value === null || value === undefined) {\n            return this._maskService.applyMask('', mask);\n        }\n        return this._maskService.applyMask(`${value}`, mask);\n    }\n\n    private _setMask(value: string) {\n        if (this._maskExpressionArray.length > 0) {\n            this._maskExpressionArray.some((mask): boolean | void => {\n                const test =\n                    this._maskService.removeMask(value)?.length <=\n                    this._maskService.removeMask(mask)?.length;\n                if (value && test) {\n                    this.mask = mask;\n                    return test;\n                } else {\n                    const expression =\n                        this._maskExpressionArray[this._maskExpressionArray.length - 1] ??\n                        MaskExpression.EMPTY_STRING;\n                    this.mask = expression;\n                }\n            });\n        }\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}