ngx-mask 8.1.4 → 8.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +83 -52
- package/bundles/ngx-mask.umd.js +137 -28
- package/bundles/ngx-mask.umd.js.map +1 -1
- package/bundles/ngx-mask.umd.min.js +1 -1
- package/bundles/ngx-mask.umd.min.js.map +1 -1
- package/esm2015/index.js +3 -1
- package/esm2015/lib/config.js +4 -1
- package/esm2015/lib/mask-applier.service.js +14 -3
- package/esm2015/lib/mask.directive.js +60 -16
- package/esm2015/lib/mask.pipe.js +6 -2
- package/esm2015/lib/mask.service.js +1 -8
- package/esm2015/ngx-mask.js +2 -3
- package/esm5/index.js +3 -1
- package/esm5/lib/config.js +4 -1
- package/esm5/lib/mask-applier.service.js +14 -3
- package/esm5/lib/mask.directive.js +68 -15
- package/esm5/lib/mask.pipe.js +8 -2
- package/esm5/lib/mask.service.js +1 -8
- package/esm5/ngx-mask.js +2 -3
- package/fesm2015/ngx-mask.js +122 -26
- package/fesm2015/ngx-mask.js.map +1 -1
- package/fesm5/ngx-mask.js +132 -25
- package/fesm5/ngx-mask.js.map +1 -1
- package/index.d.ts +2 -0
- package/lib/config.d.ts +1 -0
- package/lib/mask-applier.service.d.ts +1 -0
- package/lib/mask.directive.d.ts +3 -0
- package/lib/mask.pipe.d.ts +1 -1
- package/lib/mask.service.d.ts +0 -2
- package/ngx-mask.d.ts +0 -1
- package/ngx-mask.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://ngx-mask/lib/config.ts","ng://ngx-mask/lib/mask-applier.service.ts","ng://ngx-mask/lib/mask.service.ts","ng://ngx-mask/lib/mask.directive.ts","ng://ngx-mask/lib/mask.pipe.ts","ng://ngx-mask/lib/ngx-mask.module.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__assign","assign","t","s","i","n","arguments","length","prototype","call","apply","this","__generator","thisArg","body","f","y","g","_","label","sent","trys","ops","next","verb","throw","return","Symbol","iterator","v","op","TypeError","done","value","pop","push","e","step","__read","o","m","r","ar","error","config","InjectionToken","NEW_CONFIG","INITIAL_CONFIG","initialConfig","suffix","prefix","thousandSeparator","decimalMarker","clearIfNotMatch","showTemplate","showMaskTyped","placeHolderCharacter","dropSpecialCharacters","hiddenInput","undefined","shownMaskExpression","separatorLimit","validation","specialCharacters","patterns","0","pattern","RegExp","9","optional","X","symbol","A","S","M","H","h","timeMasks","withoutValidation","MaskApplierService","_config","_this","maskExpression","actualValue","_formatWithSeparators","str","thousandSeparatorChar","decimalChar","precision","x","split","decimals","res","replace","slice","rgx","test","substr","percentage","Number","getPrecision","Infinity","checkInputPrecision","inputValue","precisionRegEx","_charToRegExpExpression","precisionMatch","match","substring","endsWith","_shift","Set","maskSpecialCharacters","maskAvailablePatterns","applyMaskWithPattern","maskAndPattern","_a","mask","customPattern","applyMask","position","cb","cursor","result","multi","backspaceShift","shift","stepBack","inputArray","toString","ipError","filter","startsWith","_stripToDecimal","indexOf","base","thousandSeperatorCharEscaped","decimalMarkerEscaped","invalidChars","invalidCharRegexp","strForSep","commaShift","shiftStep","add","clear","inputSymbol","_checkSymbolMask","withoutDays","day1monthInput","includes","day2monthInput","day1monthPaste","day2monthPaste","_findSpecialChar","newPosition","has","actualShift","find","val","maskSymbol","join","char","Injectable","Inject","args","MaskService","document","_elementRef","_renderer","_super","isNumberValue","maskIsShown","selStart","selEnd","onChange","_formElement","nativeElement","__","constructor","create","tslib_1.__extends","showMaskInInput","formControlResult","getSymbol","newInputValue","actualResult","splice","shiftTypedSymbols","Boolean","getActualValue","item","hideInput","resLen","prefNmask","applyValueChanges","activeElement","clearIfNotMatchFn","map","curr","index","compare","symbolToReplace","currSymbol","replaceSymbol","inputVal","Error","_checkForIp","formElementProperty","defineProperty","_b","name","setProperty","checkSpecialCharAmount","arr","isArray","_removeMask","_removeSuffix","_removePrefix","_checkSymbols","specialCharactersForRemove","_regExpForRemove","_retrieveSeparatorValue","separatorPrecision","_retrieveSeparatorPrecision","separatorValue","_checkPrecision","maskExpretion","matcher","separatorExpression","toFixed","DOCUMENT","ElementRef","Renderer2","MaskDirective","_maskService","_maskValue","_position","onTouch","ngOnChanges","changes","currentValue","_applyMask","validate","Mask error","_validateTime","counterOfOpt","key","this_1","lastIndexOf","opt","length_1","onInput","el","_inputValue","selectionStart","caretShift","_backspaceShift","positionToApply","_code","setSelectionRange","onBlur","onFocus","selectionEnd","keyCode","focus","nextValue","onKeyDown","code","preventDefault","suffixCheckOnPressDelete","cursorStart","readOnly","writeValue","_arguments","generator","String","P","Promise","resolve","reject","fulfilled","rejected","then","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","onModelChange","_repeatPatternSymbols","maskExp","reduce","accum","currval","_start","_end","repeatNumber","rowMaskLen","Directive","selector","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","NG_VALIDATORS","Input","HostListener","MaskPipe","transform","Pipe","pure","NgxMaskModule","forRoot","configValue","ngModule","useValue","useFactory","_configFactory","deps","forChild","_configValue","NgModule","exports","declarations","initConfig","Function"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { InjectionToken } from '@angular/core';\n\nexport interface IConfig {\n suffix: string;\n prefix: string;\n thousandSeparator: string;\n decimalMarker: '.' | ',';\n clearIfNotMatch: boolean;\n showTemplate: boolean;\n showMaskTyped: boolean;\n placeHolderCharacter: string;\n shownMaskExpression: string;\n dropSpecialCharacters: boolean | string[];\n specialCharacters: string[];\n hiddenInput: boolean | undefined;\n validation: boolean;\n separatorLimit: string;\n patterns: {\n [character: string]: {\n pattern: RegExp;\n optional?: boolean;\n symbol?: string;\n };\n };\n}\n\nexport type optionsConfig = Partial<IConfig>;\nexport const config: InjectionToken<IConfig> = new InjectionToken('config');\nexport const NEW_CONFIG: InjectionToken<IConfig> = new InjectionToken('NEW_CONFIG');\nexport const INITIAL_CONFIG: InjectionToken<IConfig> = new InjectionToken('INITIAL_CONFIG');\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 validation: true,\n // tslint:disable-next-line: quotemark\n specialCharacters: ['-', '/', '(', ')', '.', ':', ' ', '+', ',', '@', '[', ']', '\"', \"'\"],\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 d: {\n pattern: new RegExp('\\\\d'),\n },\n m: {\n pattern: new RegExp('\\\\d'),\n },\n M: {\n pattern: new RegExp('\\\\d'),\n },\n H: {\n pattern: new RegExp('\\\\d'),\n },\n h: {\n pattern: new RegExp('\\\\d'),\n },\n s: {\n pattern: new RegExp('\\\\d'),\n },\n },\n};\n\nexport const timeMasks: string[] = ['Hh:m0:s0', 'Hh:m0', 'm0:s0'];\n\nexport const withoutValidation: string[] = [\n 'percent',\n 'Hh',\n 's0',\n 'm0',\n 'separator',\n 'd0/M0/0000',\n 'd0/M0',\n 'd0',\n 'M0',\n];\n","import { Inject, Injectable } from '@angular/core';\n\nimport { config, IConfig } from './config';\n\n@Injectable()\nexport class MaskApplierService {\n public dropSpecialCharacters: IConfig['dropSpecialCharacters'];\n public hiddenInput: IConfig['hiddenInput'];\n public showTemplate!: IConfig['showTemplate'];\n public clearIfNotMatch!: IConfig['clearIfNotMatch'];\n public maskExpression: string = '';\n public actualValue: string = '';\n public shownMaskExpression: string = '';\n public maskSpecialCharacters!: IConfig['specialCharacters'];\n public maskAvailablePatterns!: IConfig['patterns'];\n public prefix!: IConfig['prefix'];\n public suffix!: IConfig['suffix'];\n public thousandSeparator!: IConfig['thousandSeparator'];\n public decimalMarker!: IConfig['decimalMarker'];\n public customPattern!: IConfig['patterns'];\n public ipError?: boolean;\n public showMaskTyped!: IConfig['showMaskTyped'];\n public placeHolderCharacter!: IConfig['placeHolderCharacter'];\n public validation: IConfig['validation'];\n public separatorLimit: IConfig['separatorLimit'];\n\n private _shift!: Set<number>;\n\n public constructor(@Inject(config) protected _config: IConfig) {\n this._shift = new Set();\n this.clearIfNotMatch = this._config.clearIfNotMatch;\n this.dropSpecialCharacters = this._config.dropSpecialCharacters;\n this.maskSpecialCharacters = this._config.specialCharacters;\n this.maskAvailablePatterns = this._config.patterns;\n this.prefix = this._config.prefix;\n this.suffix = this._config.suffix;\n this.thousandSeparator = this._config.thousandSeparator;\n this.decimalMarker = this._config.decimalMarker;\n this.hiddenInput = this._config.hiddenInput;\n this.showMaskTyped = this._config.showMaskTyped;\n this.placeHolderCharacter = this._config.placeHolderCharacter;\n this.validation = this._config.validation;\n this.separatorLimit = this._config.separatorLimit;\n }\n\n public applyMaskWithPattern(inputValue: string, maskAndPattern: [string, IConfig['patterns']]): string {\n const [mask, customPattern] = maskAndPattern;\n this.customPattern = customPattern;\n return this.applyMask(inputValue, mask);\n }\n public applyMask(inputValue: string, maskExpression: string, position: number = 0, cb: Function = () => { }): string {\n if (inputValue === undefined || inputValue === null || maskExpression === undefined) {\n return '';\n }\n let cursor = 0;\n let result = '';\n let multi = false;\n let backspaceShift = false;\n let shift = 1;\n let stepBack = false;\n if (inputValue.slice(0, this.prefix.length) === this.prefix) {\n inputValue = inputValue.slice(this.prefix.length, inputValue.length);\n }\n if (!!this.suffix && inputValue.endsWith(this.suffix)) {\n inputValue = inputValue.slice(0, inputValue.length - this.suffix.length);\n }\n const inputArray: string[] = inputValue.toString().split('');\n if (maskExpression === 'IP') {\n this.ipError = !!(inputArray.filter((i: string) => i === '.').length < 3 && inputArray.length < 7);\n maskExpression = '099.099.099.099';\n }\n if (maskExpression.startsWith('percent')) {\n if (inputValue.match('[a-z]|[A-Z]') || inputValue.match(/[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,\\/]/)) {\n inputValue = this._stripToDecimal(inputValue);\n const precision: number = this.getPrecision(maskExpression);\n inputValue = this.checkInputPrecision(inputValue, precision, '.');\n }\n if (inputValue.indexOf('.') > 0 && !this.percentage(inputValue.substring(0, inputValue.indexOf('.')))) {\n const base: string = inputValue.substring(0, inputValue.indexOf('.') - 1);\n inputValue = `${base}${inputValue.substring(inputValue.indexOf('.'), inputValue.length)}`;\n }\n if (this.percentage(inputValue)) {\n result = inputValue;\n } else {\n result = inputValue.substring(0, inputValue.length - 1);\n }\n } else if (maskExpression.startsWith('separator')) {\n if (\n inputValue.match('[wа-ÑÐ-Я]') ||\n inputValue.match('[ÐÑÐ-Ñ]') ||\n inputValue.match('[a-z]|[A-Z]') ||\n inputValue.match(/[-@#!$%\\\\^&*()_£¬'+|~=`{}\\[\\]:\";<>.?\\/]/) ||\n inputValue.match('[^A-Za-z0-9,]')\n ) {\n inputValue = this._stripToDecimal(inputValue);\n }\n\n inputValue =\n inputValue.length > 1 && inputValue[0] === '0' && inputValue[1] !== this.decimalMarker\n ? inputValue.slice(1, inputValue.length)\n : inputValue;\n\n // TODO: we had different rexexps here for the different cases... but tests dont seam to bother - check this\n // separator: no COMMA, dot-sep: no SPACE, COMMA OK, comma-sep: no SPACE, COMMA OK\n\n const thousandSeperatorCharEscaped: string = this._charToRegExpExpression(this.thousandSeparator);\n const decimalMarkerEscaped: string = this._charToRegExpExpression(this.decimalMarker);\n const invalidChars: string = '@#!$%^&*()_+|~=`{}\\\\[\\\\]:\\\\s,\";<>?\\\\/'\n .replace(thousandSeperatorCharEscaped, '')\n .replace(decimalMarkerEscaped, '');\n\n const invalidCharRegexp: RegExp = new RegExp('[' + invalidChars + ']');\n\n if (inputValue.match(invalidCharRegexp)) {\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n\n const precision: number = this.getPrecision(maskExpression);\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n const strForSep: string = inputValue.replace(new RegExp(thousandSeperatorCharEscaped, 'g'), '');\n result = this._formatWithSeparators(strForSep, this.thousandSeparator, this.decimalMarker, precision);\n\n const commaShift: number = result.indexOf(',') - inputValue.indexOf(',');\n const shiftStep: number = result.length - inputValue.length;\n\n if (shiftStep > 0 && result[position] !== ',') {\n backspaceShift = true;\n let _shift = 0;\n do {\n this._shift.add(position + _shift);\n _shift++;\n } while (_shift < shiftStep);\n } else if (\n (commaShift !== 0 && position > 0 && !(result.indexOf(',') >= position && position > 3)) ||\n (!(result.indexOf('.') >= position && position > 3) && shiftStep <= 0)\n ) {\n this._shift.clear();\n backspaceShift = true;\n shift = shiftStep;\n position += shiftStep;\n this._shift.add(position);\n } else {\n this._shift.clear();\n }\n } else {\n for (\n // tslint:disable-next-line\n let i: number = 0, inputSymbol: string = inputArray[0];\n i < inputArray.length;\n i++ , inputSymbol = inputArray[i]\n ) {\n if (cursor === maskExpression.length) {\n break;\n }\n if (this._checkSymbolMask(inputSymbol, maskExpression[cursor]) && maskExpression[cursor + 1] === '?') {\n result += inputSymbol;\n cursor += 2;\n } else if (\n maskExpression[cursor + 1] === '*' &&\n multi &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2])\n ) {\n result += inputSymbol;\n cursor += 3;\n multi = false;\n } else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor]) && maskExpression[cursor + 1] === '*') {\n result += inputSymbol;\n multi = true;\n } else if (\n maskExpression[cursor + 1] === '?' &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2])\n ) {\n result += inputSymbol;\n cursor += 3;\n } else if (\n this._checkSymbolMask(inputSymbol, maskExpression[cursor]) ||\n (this.hiddenInput &&\n this.maskAvailablePatterns[maskExpression[cursor]] &&\n this.maskAvailablePatterns[maskExpression[cursor]].symbol === inputSymbol)\n ) {\n if (maskExpression[cursor] === 'H') {\n if (Number(inputSymbol) > 2) {\n cursor += 1;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === 'h') {\n if (result === '2' && Number(inputSymbol) > 3) {\n cursor += 1;\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === 'm') {\n if (Number(inputSymbol) > 5) {\n cursor += 1;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === 's') {\n if (Number(inputSymbol) > 5) {\n cursor += 1;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n continue;\n }\n }\n const daysCount = 31;\n if (maskExpression[cursor] === 'd') {\n if (Number(inputValue.slice(cursor, cursor + 2)) > daysCount || inputValue[cursor + 1] === '/') {\n cursor += 1;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === 'M') {\n const monthsCount = 12;\n // mask without day\n const withoutDays: boolean =\n cursor === 0 &&\n (Number(inputSymbol) > 2 ||\n Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n inputValue[cursor + 1] === '/');\n // day<10 && month<12 for input\n const day1monthInput: boolean =\n inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n ((inputValue[cursor - 2] === '/' &&\n (Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount && inputValue[cursor] !== '/')) ||\n inputValue[cursor] === '/' ||\n ((inputValue[cursor - 3] === '/' &&\n (Number(inputValue.slice(cursor - 2, cursor)) > monthsCount && inputValue[cursor - 1] !== '/')) ||\n inputValue[cursor - 1] === '/'));\n // 10<day<31 && month<12 for input\n const day2monthInput: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n inputValue[cursor - 1] === '/' &&\n (Number(inputValue.slice(cursor, cursor + 2)) > monthsCount || inputValue[cursor + 1] === '/');\n // day<10 && month<12 for paste whole data\n const day1monthPaste: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) > daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n (!inputValue.slice(cursor - 2, cursor).includes('/') &&\n Number(inputValue.slice(cursor - 2, cursor)) > monthsCount);\n // 10<day<31 && month<12 for paste whole data\n const day2monthPaste: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n inputValue[cursor - 1] !== '/' &&\n Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount;\n\n if (withoutDays || day1monthInput || day2monthInput || day1monthPaste || day2monthPaste) {\n cursor += 1;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n continue;\n }\n }\n result += inputSymbol;\n cursor++;\n } else if (this.maskSpecialCharacters.indexOf(maskExpression[cursor]) !== -1) {\n result += maskExpression[cursor];\n cursor++;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n } else if (\n this.maskSpecialCharacters.indexOf(inputSymbol) > -1 &&\n this.maskAvailablePatterns[maskExpression[cursor]] &&\n this.maskAvailablePatterns[maskExpression[cursor]].optional\n ) {\n if (!!inputArray[cursor] && maskExpression !== '099.099.099.099') {\n result += inputArray[cursor];\n }\n cursor++;\n i--;\n } else if (\n this.maskExpression[cursor + 1] === '*' &&\n this._findSpecialChar(this.maskExpression[cursor + 2]) &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi\n ) {\n cursor += 3;\n result += inputSymbol;\n } else if (\n this.maskExpression[cursor + 1] === '?' &&\n this._findSpecialChar(this.maskExpression[cursor + 2]) &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi\n ) {\n cursor += 3;\n result += inputSymbol;\n } else if (this.showMaskTyped && this.maskSpecialCharacters.indexOf(inputSymbol) < 0 && inputSymbol !== this.placeHolderCharacter) {\n stepBack = true;\n }\n }\n }\n if (\n result.length + 1 === maskExpression.length &&\n this.maskSpecialCharacters.indexOf(maskExpression[maskExpression.length - 1]) !== -1\n ) {\n result += maskExpression[maskExpression.length - 1];\n }\n\n let newPosition: number = position + 1;\n\n while (this._shift.has(newPosition)) {\n shift++;\n newPosition++;\n }\n\n let actualShift: number = this._shift.has(position) ? shift : 0;\n if (stepBack) {\n actualShift--;\n }\n\n cb(actualShift, backspaceShift);\n if (shift < 0) {\n this._shift.clear();\n }\n let res = `${this.prefix}${result}${this.suffix}`;\n if (result.length === 0) {\n res = `${this.prefix}${result}`;\n }\n return res;\n }\n public _findSpecialChar(inputSymbol: string): undefined | string {\n return this.maskSpecialCharacters.find((val: string) => val === inputSymbol);\n }\n\n protected _checkSymbolMask(inputSymbol: string, maskSymbol: string): boolean {\n this.maskAvailablePatterns = this.customPattern ? this.customPattern : this.maskAvailablePatterns;\n return (\n this.maskAvailablePatterns[maskSymbol] &&\n this.maskAvailablePatterns[maskSymbol].pattern &&\n this.maskAvailablePatterns[maskSymbol].pattern.test(inputSymbol)\n );\n }\n\n private _formatWithSeparators = (\n str: string,\n thousandSeparatorChar: string,\n decimalChar: string,\n precision: number\n ) => {\n const x: string[] = str.split(decimalChar);\n const decimals: string = x.length > 1 ? `${decimalChar}${x[1]}` : '';\n let res: string = x[0];\n const separatorLimit: string = this.separatorLimit.replace(/\\s/g, '');\n if (separatorLimit && +separatorLimit) {\n res = res.slice(0, separatorLimit.length);\n }\n const rgx: RegExp = /(\\d+)(\\d{3})/;\n while (rgx.test(res)) {\n res = res.replace(rgx, '$1' + thousandSeparatorChar + '$2');\n }\n if (precision === undefined) {\n return res + decimals;\n } else if (precision === 0) {\n return res;\n }\n return res + decimals.substr(0, precision + 1);\n };\n\n private percentage = (str: string): boolean => {\n return Number(str) >= 0 && Number(str) <= 100;\n };\n\n private getPrecision = (maskExpression: string): number => {\n const x: string[] = maskExpression.split('.');\n if (x.length > 1) {\n return Number(x[x.length - 1]);\n }\n\n return Infinity;\n };\n\n private checkInputPrecision = (\n inputValue: string,\n precision: number,\n decimalMarker: IConfig['decimalMarker']\n ): string => {\n if (precision < Infinity) {\n const precisionRegEx: RegExp = new RegExp(this._charToRegExpExpression(decimalMarker) + `\\\\d{${precision}}.*$`);\n\n const precisionMatch: RegExpMatchArray | null = inputValue.match(precisionRegEx);\n if (precisionMatch && precisionMatch[0].length - 1 > precision) {\n inputValue = inputValue.substring(0, inputValue.length - 1);\n } else if (precision === 0 && inputValue.endsWith(decimalMarker)) {\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n }\n return inputValue;\n };\n\n private _stripToDecimal(str: string): string {\n return str\n .split('')\n .filter((i: string) => i.match('\\\\d') || i === '.' || i === ',')\n .join('');\n }\n\n private _charToRegExpExpression(char: string): string {\n const charsToEscape = '[\\\\^$.|?*+()';\n return char === ' ' ? '\\\\s' : charsToEscape.indexOf(char) >= 0 ? '\\\\' + char : char;\n }\n // tslint:disable-next-line:max-file-line-count\n}\n","import { ElementRef, Inject, Injectable, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { config, IConfig } from './config';\nimport { MaskApplierService } from './mask-applier.service';\n\n@Injectable()\nexport class MaskService extends MaskApplierService {\n public validation: boolean = true;\n public maskExpression: string = '';\n public isNumberValue: boolean = false;\n public showMaskTyped: boolean = false;\n public placeHolderCharacter: string = '_';\n public maskIsShown: string = '';\n public selStart: number | null = null;\n public selEnd: number | null = null;\n protected _formElement: HTMLInputElement;\n // tslint:disable-next-line\n public onChange = (_: any) => { };\n\n public constructor(\n // tslint:disable-next-line\n @Inject(DOCUMENT) private document: any,\n @Inject(config) protected _config: IConfig,\n private _elementRef: ElementRef,\n private _renderer: Renderer2\n ) {\n super(_config);\n this._formElement = this._elementRef.nativeElement;\n }\n\n // tslint:disable-next-line:cyclomatic-complexity\n public applyMask(inputValue: string, maskExpression: string, position: number = 0, cb: Function = () => { }): string {\n if (!maskExpression) {\n return inputValue;\n }\n this.maskIsShown = this.showMaskTyped ? this.showMaskInInput() : '';\n if (this.maskExpression === 'IP' && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || '#');\n }\n if (!inputValue && this.showMaskTyped) {\n this.formControlResult(this.prefix);\n return this.prefix + this.maskIsShown;\n }\n const getSymbol: string = !!inputValue && typeof this.selStart === 'number' ? inputValue[this.selStart] : '';\n let newInputValue = '';\n if (this.hiddenInput !== undefined) {\n let actualResult: string[] = this.actualValue.split('');\n // tslint:disable no-unused-expression\n inputValue !== '' && actualResult.length\n ? typeof this.selStart === 'number' && typeof this.selEnd === 'number'\n ? inputValue.length > actualResult.length\n ? actualResult.splice(this.selStart, 0, getSymbol)\n : inputValue.length < actualResult.length\n ? actualResult.length - inputValue.length === 1\n ? actualResult.splice(this.selStart - 1, 1)\n : actualResult.splice(this.selStart, this.selEnd - this.selStart)\n : null\n : null\n : (actualResult = []);\n // tslint:enable no-unused-expression\n newInputValue = this.actualValue.length ? this.shiftTypedSymbols(actualResult.join('')) : inputValue;\n }\n newInputValue = Boolean(newInputValue) && newInputValue.length ? newInputValue : inputValue;\n const result: string = super.applyMask(newInputValue, maskExpression, position, cb);\n this.actualValue = this.getActualValue(result);\n\n // handle some separator implications:\n // a.) adjust decimalMarker default (. -> ,) if thousandSeparator is a dot\n if (this.thousandSeparator === '.' && this.decimalMarker === '.') {\n this.decimalMarker = ',';\n }\n\n // b) remove decimal marker from list of special characters to mask\n if (this.maskExpression.startsWith('separator') && this.dropSpecialCharacters === true) {\n this.maskSpecialCharacters = this.maskSpecialCharacters.filter((item: string) => item !== this.decimalMarker);\n }\n\n this.formControlResult(result);\n\n if (!this.showMaskTyped) {\n if (this.hiddenInput) {\n return result && result.length ? this.hideInput(result, this.maskExpression) : result;\n }\n return result;\n }\n const resLen: number = result.length;\n const prefNmask: string = this.prefix + this.maskIsShown;\n return result + (this.maskExpression === 'IP' ? prefNmask : prefNmask.slice(resLen));\n }\n\n public applyValueChanges(position: number = 0, cb: Function = () => { }): void {\n this._formElement.value = this.applyMask(this._formElement.value, this.maskExpression, position, cb);\n if (this._formElement === this.document.activeElement) {\n return;\n }\n this.clearIfNotMatchFn();\n }\n\n public hideInput(inputValue: string, maskExpression: string): string {\n return inputValue\n .split('')\n .map((curr: string, index: number) => {\n if (\n this.maskAvailablePatterns &&\n this.maskAvailablePatterns[maskExpression[index]] &&\n this.maskAvailablePatterns[maskExpression[index]].symbol\n ) {\n return this.maskAvailablePatterns[maskExpression[index]].symbol;\n }\n return curr;\n })\n .join('');\n }\n\n // this function is not necessary, it checks result against maskExpression\n public getActualValue(res: string): string {\n const compare: string[] = res\n .split('')\n .filter(\n (symbol: string, i: number) =>\n this._checkSymbolMask(symbol, this.maskExpression[i]) ||\n (this.maskSpecialCharacters.includes(this.maskExpression[i]) && symbol === this.maskExpression[i])\n );\n if (compare.join('') === res) {\n return compare.join('');\n }\n return res;\n }\n\n public shiftTypedSymbols(inputValue: string): string {\n let symbolToReplace = '';\n const newInputValue: string[] =\n (inputValue &&\n inputValue.split('').map((currSymbol: string, index: number) => {\n if (\n this.maskSpecialCharacters.includes(inputValue[index + 1]) &&\n inputValue[index + 1] !== this.maskExpression[index + 1]\n ) {\n symbolToReplace = currSymbol;\n return inputValue[index + 1];\n }\n if (symbolToReplace.length) {\n const replaceSymbol: string = symbolToReplace;\n symbolToReplace = '';\n return replaceSymbol;\n }\n return currSymbol;\n })) ||\n [];\n return newInputValue.join('');\n }\n\n 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 return this._checkForIp(inputVal);\n }\n return this.maskExpression.replace(/\\w/g, this.placeHolderCharacter);\n }\n return '';\n }\n\n public clearIfNotMatchFn(): void {\n if (\n this.clearIfNotMatch &&\n this.prefix.length + this.maskExpression.length + this.suffix.length !==\n this._formElement.value.replace(/_/g, '').length\n ) {\n this.formElementProperty = ['value', ''];\n this.applyMask(this._formElement.value, this.maskExpression);\n }\n }\n\n public set formElementProperty([name, value]: [string, string | boolean]) {\n this._renderer.setProperty(this._formElement, name, value);\n }\n\n public checkSpecialCharAmount(mask: string): number {\n const chars: string[] = mask.split('').filter((item: string) => this._findSpecialChar(item));\n return chars.length;\n }\n\n private _checkForIp(inputVal: string): string {\n if (inputVal === '#') {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n const arr: string[] = [];\n for (let i = 0; i < inputVal.length; i++) {\n if (inputVal[i].match('\\\\d')) {\n arr.push(inputVal[i]);\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 formControlResult(inputValue: string): void {\n if (Array.isArray(this.dropSpecialCharacters)) {\n this.onChange(this._removeMask(this._removeSuffix(this._removePrefix(inputValue)), this.dropSpecialCharacters));\n } else if (this.dropSpecialCharacters) {\n this.onChange(this._checkSymbols(inputValue));\n } else {\n this.onChange(this._removeSuffix(this._removePrefix(inputValue)));\n }\n }\n\n private _removeMask(value: string, specialCharactersForRemove: string[]): string {\n return value ? value.replace(this._regExpForRemove(specialCharactersForRemove), '') : value;\n }\n\n private _removePrefix(value: string): string {\n if (!this.prefix) {\n return value;\n }\n return value ? value.replace(this.prefix, '') : value;\n }\n\n private _removeSuffix(value: string): string {\n if (!this.suffix) {\n return value;\n }\n return value ? value.replace(this.suffix, '') : value;\n }\n\n private _retrieveSeparatorValue(result: string): string {\n return this._removeMask(this._removeSuffix(this._removePrefix(result)), this.maskSpecialCharacters);\n }\n\n private _regExpForRemove(specialCharactersForRemove: string[]): RegExp {\n return new RegExp(specialCharactersForRemove.map((item: string) => `\\\\${item}`).join('|'), 'gi');\n }\n\n private _checkSymbols(result: string): string | number | undefined | null {\n if (result === '') {\n return result;\n }\n\n const separatorPrecision: number | null = this._retrieveSeparatorPrecision(this.maskExpression);\n let separatorValue: string = this._retrieveSeparatorValue(result);\n if (this.decimalMarker !== '.') {\n separatorValue = separatorValue.replace(this.decimalMarker, '.');\n }\n\n if (this.isNumberValue) {\n if (separatorPrecision) {\n if (result === this.decimalMarker) {\n return null;\n }\n return this._checkPrecision(this.maskExpression, separatorValue);\n } else {\n return Number(separatorValue);\n }\n } else {\n return separatorValue;\n }\n }\n\n // TODO should think about helpers or separting decimal precision to own property\n private _retrieveSeparatorPrecision(maskExpretion: string): number | null {\n const matcher: RegExpMatchArray | null = maskExpretion.match(new RegExp(`^separator\\\\.([^d]*)`));\n return matcher ? Number(matcher[1]) : null;\n }\n\n private _checkPrecision(separatorExpression: string, separatorValue: string): number | string {\n if (separatorExpression.indexOf('2') > 0) {\n return Number(separatorValue).toFixed(2);\n }\n return Number(separatorValue);\n }\n}\n","import { ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\nimport { Directive, forwardRef, HostListener, Inject, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { CustomKeyboardEvent } from './custom-keyboard-event';\nimport { config, IConfig, timeMasks, withoutValidation } from './config';\nimport { MaskService } from './mask.service';\n\n// tslint:disable deprecation\n@Directive({\n selector: '[mask]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaskDirective),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaskDirective),\n multi: true,\n },\n MaskService,\n ],\n})\nexport class MaskDirective implements ControlValueAccessor, OnChanges {\n @Input('mask') public maskExpression: string = '';\n @Input() public specialCharacters: IConfig['specialCharacters'] = [];\n @Input() public patterns: IConfig['patterns'] = {};\n @Input() public prefix: IConfig['prefix'] = '';\n @Input() public suffix: IConfig['suffix'] = '';\n @Input() public thousandSeparator: IConfig['thousandSeparator'] = ' ';\n @Input() public decimalMarker: IConfig['decimalMarker'] = '.';\n @Input() public dropSpecialCharacters: IConfig['dropSpecialCharacters'] | null = null;\n @Input() public hiddenInput: IConfig['hiddenInput'] | null = null;\n @Input() public showMaskTyped: IConfig['showMaskTyped'] | null = null;\n @Input() public placeHolderCharacter: IConfig['placeHolderCharacter'] | null = null;\n @Input() public shownMaskExpression: IConfig['shownMaskExpression'] | null = null;\n @Input() public showTemplate: IConfig['showTemplate'] | null = null;\n @Input() public clearIfNotMatch: IConfig['clearIfNotMatch'] | null = null;\n @Input() public validation: IConfig['validation'] | null = null;\n @Input() public separatorLimit: IConfig['separatorLimit'] | null = null;\n private _maskValue: string = '';\n private _inputValue!: string;\n private _position: number | null = null;\n // tslint:disable-next-line\n private _start!: number;\n private _end!: number;\n private _code!: string;\n\n public constructor(\n @Inject(DOCUMENT) private document: any,\n private _maskService: MaskService,\n @Inject(config) protected _config: IConfig\n ) { }\n\n public onChange = (_: any) => { };\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 } = changes;\n if (maskExpression) {\n this._maskValue = changes.maskExpression.currentValue || '';\n }\n if (specialCharacters) {\n if (!specialCharacters.currentValue || !Array.isArray(specialCharacters.currentValue)) {\n return;\n } else {\n this._maskService.maskSpecialCharacters = changes.specialCharacters.currentValue || [];\n }\n }\n if (patterns) {\n this._maskService.maskAvailablePatterns = patterns.currentValue;\n }\n if (prefix) {\n this._maskService.prefix = prefix.currentValue;\n }\n if (suffix) {\n this._maskService.suffix = suffix.currentValue;\n }\n if (thousandSeparator) {\n this._maskService.thousandSeparator = thousandSeparator.currentValue;\n }\n if (decimalMarker) {\n this._maskService.decimalMarker = decimalMarker.currentValue;\n }\n if (dropSpecialCharacters) {\n this._maskService.dropSpecialCharacters = dropSpecialCharacters.currentValue;\n }\n if (hiddenInput) {\n this._maskService.hiddenInput = hiddenInput.currentValue;\n }\n if (showMaskTyped) {\n this._maskService.showMaskTyped = showMaskTyped.currentValue;\n }\n if (placeHolderCharacter) {\n this._maskService.placeHolderCharacter = placeHolderCharacter.currentValue;\n }\n if (shownMaskExpression) {\n this._maskService.shownMaskExpression = shownMaskExpression.currentValue;\n }\n if (showTemplate) {\n this._maskService.showTemplate = showTemplate.currentValue;\n }\n if (clearIfNotMatch) {\n this._maskService.clearIfNotMatch = clearIfNotMatch.currentValue;\n }\n if (validation) {\n this._maskService.validation = validation.currentValue;\n }\n if (separatorLimit) {\n this._maskService.separatorLimit = separatorLimit.currentValue;\n }\n this._applyMask();\n }\n\n // tslint:disable-next-line: cyclomatic-complexity\n public validate({ value }: FormControl): ValidationErrors | null {\n if (!this._maskService.validation) {\n return null;\n }\n if (this._maskService.ipError) {\n return { 'Mask error': true };\n }\n if (this._maskValue.startsWith('separator')) {\n return null;\n }\n if (withoutValidation.includes(this._maskValue)) {\n return null;\n }\n if (this._maskService.clearIfNotMatch) {\n return null;\n }\n if (timeMasks.includes(this._maskValue)) {\n return this._validateTime(value);\n }\n if (value && value.toString().length >= 1) {\n let counterOfOpt = 0;\n for (const key in this._maskService.maskAvailablePatterns) {\n if (\n this._maskService.maskAvailablePatterns[key].optional &&\n this._maskService.maskAvailablePatterns[key].optional === true\n ) {\n if (this._maskValue.indexOf(key) !== this._maskValue.lastIndexOf(key)) {\n const opt: string = this._maskValue\n .split('')\n .filter((i: string) => i === key)\n .join('');\n counterOfOpt += opt.length;\n } else if (this._maskValue.indexOf(key) !== -1) {\n counterOfOpt++;\n }\n if (this._maskValue.indexOf(key) !== -1 && value.toString().length >= this._maskValue.indexOf(key)) {\n return null;\n }\n if (counterOfOpt === this._maskValue.length) {\n return null;\n }\n }\n }\n if (\n this._maskValue.indexOf('{') === 1 &&\n value.toString().length === this._maskValue.length + Number(this._maskValue.split('{')[1].split('}')[0]) - 4\n ) {\n return null;\n }\n if (this._maskValue.indexOf('*') === 1 || this._maskValue.indexOf('?') === 1) {\n return null;\n } else if (\n (this._maskValue.indexOf('*') > 1 && value.toString().length < this._maskValue.indexOf('*')) ||\n (this._maskValue.indexOf('?') > 1 && value.toString().length < this._maskValue.indexOf('?')) ||\n this._maskValue.indexOf('{') === 1\n ) {\n return { 'Mask error': true };\n }\n if (this._maskValue.indexOf('*') === -1 || this._maskValue.indexOf('?') === -1) {\n const length: number = this._maskService.dropSpecialCharacters\n ? this._maskValue.length - this._maskService.checkSpecialCharAmount(this._maskValue) - counterOfOpt\n : this._maskValue.length - counterOfOpt;\n if (value.toString().length < length) {\n return { 'Mask error': true };\n }\n }\n }\n return null;\n }\n\n @HostListener('input', ['$event'])\n public onInput(e: CustomKeyboardEvent): void {\n const el: HTMLInputElement = e.target as HTMLInputElement;\n this._inputValue = el.value;\n if (!this._maskValue) {\n this.onChange(el.value);\n return;\n }\n const position: number =\n el.selectionStart === 1\n ? (el.selectionStart as number) + this._maskService.prefix.length\n : (el.selectionStart as number);\n let caretShift = 0;\n let backspaceShift = false;\n this._maskService.applyValueChanges(position, (shift: number, _backspaceShift: boolean) => {\n caretShift = shift;\n backspaceShift = _backspaceShift;\n });\n // only set the selection if the element is active\n if (this.document.activeElement !== el) {\n return;\n }\n this._position = this._position === 1 && this._inputValue.length === 1 ? null : this._position;\n const positionToApply: number = this._position\n ? this._inputValue.length + position + caretShift\n : position + (this._code === 'Backspace' && !backspaceShift ? 0 : caretShift);\n el.setSelectionRange(positionToApply, positionToApply);\n if ((this.maskExpression.includes('H') || this.maskExpression.includes('M')) && caretShift === 0) {\n el.setSelectionRange((el.selectionStart as number) + 1, (el.selectionStart as number) + 1);\n }\n this._position = null;\n }\n\n @HostListener('blur')\n public onBlur(): void {\n this._maskService.clearIfNotMatchFn();\n this.onTouch();\n }\n\n @HostListener('click', ['$event'])\n public onFocus(e: MouseEvent | CustomKeyboardEvent): void {\n const el: HTMLInputElement = e.target as HTMLInputElement;\n const posStart = 0;\n const posEnd = 0;\n if (\n el !== null &&\n el.selectionStart !== null &&\n el.selectionStart === el.selectionEnd &&\n el.selectionStart > this._maskService.prefix.length &&\n // tslint:disable-next-line\n (e as any).keyCode !== 38\n )\n if (this._maskService.showMaskTyped) {\n // We are showing the mask in the input\n this._maskService.maskIsShown = this._maskService.showMaskInInput();\n if (el.setSelectionRange && this._maskService.prefix + this._maskService.maskIsShown === el.value) {\n // the input ONLY contains the mask, so position the cursor at the start\n el.focus();\n el.setSelectionRange(posStart, posEnd);\n } else {\n // the input contains some characters already\n if (el.selectionStart > this._maskService.actualValue.length) {\n // if the user clicked beyond our value's length, position the cursor at the end of our value\n el.setSelectionRange(this._maskService.actualValue.length, this._maskService.actualValue.length);\n }\n }\n }\n const nextValue: string | null =\n !el.value || 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.value !== nextValue) {\n el.value = nextValue;\n }\n\n /** fix of cursor position with prefix when mouse click occur */\n if (((el.selectionStart as number) || (el.selectionEnd as number)) <= this._maskService.prefix.length) {\n el.selectionStart = this._maskService.prefix.length;\n return;\n }\n }\n\n // tslint:disable-next-line: cyclomatic-complexity\n @HostListener('keydown', ['$event'])\n public onKeyDown(e: CustomKeyboardEvent): void {\n this._code = e.code ? e.code : e.key;\n const el: HTMLInputElement = e.target as HTMLInputElement;\n this._inputValue = el.value;\n if (e.keyCode === 38) {\n e.preventDefault();\n }\n if (e.keyCode === 37 || e.keyCode === 8 || e.keyCode === 46) {\n if (e.keyCode === 8 && el.value.length === 0) {\n el.selectionStart = el.selectionEnd;\n }\n if (e.keyCode === 8 && (el.selectionStart as number) !== 0) {\n // If specialChars is false, (shouldn't ever happen) then set to the defaults\n this.specialCharacters = this.specialCharacters || this._config.specialCharacters;\n if (this.prefix.length > 1 && (el.selectionStart as number) <= this.prefix.length) {\n el.setSelectionRange(this.prefix.length, this.prefix.length);\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 this._inputValue[(el.selectionStart as number) - 1].toString()\n ) &&\n ((this.prefix.length >= 1 && (el.selectionStart as number) > this.prefix.length) ||\n this.prefix.length === 0)\n ) {\n el.setSelectionRange((el.selectionStart as number) - 1, (el.selectionStart as number) - 1);\n }\n }\n this.suffixCheckOnPressDelete(e.keyCode, el);\n }\n }\n this.suffixCheckOnPressDelete(e.keyCode, el);\n if (\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 // this.onFocus(e);\n if (\n e.keyCode === 8 &&\n !el.readOnly &&\n cursorStart === 0 &&\n el.selectionEnd === el.value.length &&\n el.value.length !== 0\n ) {\n this._position = this._maskService.prefix ? this._maskService.prefix.length : 0;\n this._maskService.applyMask(this._maskService.prefix, this._maskService.maskExpression, this._position);\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(this._inputValue.length - this.suffix.length, this._inputValue.length);\n }\n this._maskService.selStart = el.selectionStart;\n this._maskService.selEnd = el.selectionEnd;\n }\n\n /** It writes the value in the input */\n public async writeValue(inputValue: string | number): Promise<void> {\n if (inputValue === undefined) {\n inputValue = '';\n }\n if (typeof inputValue === 'number') {\n inputValue = String(inputValue);\n inputValue = this.decimalMarker !== '.' ? inputValue.replace('.', this.decimalMarker) : inputValue;\n this._maskService.isNumberValue = true;\n }\n (inputValue && this._maskService.maskExpression) ||\n (this._maskService.maskExpression && (this._maskService.prefix || this._maskService.showMaskTyped))\n ? (this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(inputValue, this._maskService.maskExpression),\n ])\n : (this._maskService.formElementProperty = ['value', inputValue]);\n this._inputValue = inputValue;\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n this._maskService.onChange = this.onChange;\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n public suffixCheckOnPressDelete(keyCode: number, el: HTMLInputElement): void {\n if (keyCode === 46 && this.suffix.length > 0) {\n if (this._inputValue.length - this.suffix.length <= (el.selectionStart as number)) {\n el.setSelectionRange(this._inputValue.length - this.suffix.length, this._inputValue.length);\n }\n }\n if (keyCode === 8) {\n if (\n this.suffix.length > 1 &&\n this._inputValue.length - this.suffix.length < (el.selectionStart as number)\n ) {\n el.setSelectionRange(this._inputValue.length - this.suffix.length, this._inputValue.length);\n }\n if (this.suffix.length === 1 && this._inputValue.length === (el.selectionStart as number)) {\n el.setSelectionRange((el.selectionStart as number) - 1, (el.selectionStart as number) - 1);\n }\n }\n }\n\n /** It disables the input element */\n public setDisabledState(isDisabled: boolean): void {\n this._maskService.formElementProperty = ['disabled', isDisabled];\n }\n\n @HostListener('ngModelChange', ['$event'])\n // tslint:disable-next-line: no-any\n public onModelChange(e: any): void {\n if (!e) {\n this._maskService.actualValue = '';\n }\n }\n\n private _repeatPatternSymbols(maskExp: string): string {\n return (\n (maskExp.match(/{[0-9]+}/) &&\n maskExp.split('').reduce((accum: string, currval: string, index: number): string => {\n this._start = currval === '{' ? index : this._start;\n\n if (currval !== '}') {\n return this._maskService._findSpecialChar(currval) ? accum + currval : accum;\n }\n this._end = index;\n const repeatNumber: number = Number(maskExp.slice(this._start + 1, this._end));\n const repaceWith: string = new Array(repeatNumber + 1).join(maskExp[this._start - 1]);\n return accum + repaceWith;\n }, '')) ||\n maskExp\n );\n }\n // tslint:disable-next-line:no-any\n private _applyMask(): any {\n this._maskService.maskExpression = this._repeatPatternSymbols(this._maskValue || '');\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(this._inputValue, this._maskService.maskExpression),\n ];\n }\n\n private _validateTime(value: string): ValidationErrors | null {\n const rowMaskLen: number = this._maskValue.split('').filter((s: string) => s !== ':').length;\n if (+value[value.length - 1] === 0 && value.length < rowMaskLen) {\n return { 'Mask error': true };\n }\n if (value.length <= rowMaskLen - 2) {\n return { 'Mask error': true };\n }\n return null;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { MaskApplierService } from './mask-applier.service';\nimport { IConfig } from './config';\n\n@Pipe({\n name: 'mask',\n pure: true,\n})\nexport class MaskPipe implements PipeTransform {\n public constructor(private _maskService: MaskApplierService) {}\n\n public transform(value: string | number, mask: string | [string, IConfig['patterns']]): string {\n if (!value && typeof value !== 'number') {\n return '';\n }\n if (typeof mask === 'string') {\n return this._maskService.applyMask(`${value}`, mask);\n }\n return this._maskService.applyMaskWithPattern(`${value}`, mask);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { config, INITIAL_CONFIG, initialConfig, NEW_CONFIG, optionsConfig } from './config';\nimport { MaskApplierService } from './mask-applier.service';\nimport { MaskDirective } from './mask.directive';\nimport { MaskPipe } from './mask.pipe';\n\n@NgModule({\n exports: [MaskDirective, MaskPipe],\n declarations: [MaskDirective, MaskPipe],\n})\nexport class NgxMaskModule {\n public static forRoot(configValue?: optionsConfig | (() => optionsConfig)): ModuleWithProviders {\n return {\n ngModule: NgxMaskModule,\n providers: [\n {\n provide: NEW_CONFIG,\n useValue: configValue,\n },\n {\n provide: INITIAL_CONFIG,\n useValue: initialConfig,\n },\n {\n provide: config,\n useFactory: _configFactory,\n deps: [INITIAL_CONFIG, NEW_CONFIG],\n },\n MaskApplierService,\n ],\n };\n }\n public static forChild(_configValue?: optionsConfig): ModuleWithProviders {\n return {\n ngModule: NgxMaskModule,\n };\n }\n}\n\n/**\n * @internal\n */\nexport function _configFactory(\n initConfig: optionsConfig,\n configValue: optionsConfig | (() => optionsConfig)\n): optionsConfig {\n return configValue instanceof Function ? { ...initConfig, ...configValue() } : { ...initConfig, ...configValue };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/tslib/tslib.es6.js","ng://ngx-mask/lib/config.ts","ng://ngx-mask/lib/mask-applier.service.ts","ng://ngx-mask/lib/mask.service.ts","ng://ngx-mask/lib/mask.directive.ts","ng://ngx-mask/lib/mask.pipe.ts","ng://ngx-mask/lib/ngx-mask.module.ts","ng://ngx-mask/lib/custom-keyboard-event.ts"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__assign","assign","t","s","i","n","arguments","length","prototype","call","apply","this","__generator","thisArg","body","f","y","g","_","label","sent","trys","ops","next","verb","throw","return","Symbol","iterator","v","op","TypeError","done","value","pop","push","e","step","__read","o","m","r","ar","error","config","InjectionToken","NEW_CONFIG","INITIAL_CONFIG","initialConfig","suffix","prefix","thousandSeparator","decimalMarker","clearIfNotMatch","showTemplate","showMaskTyped","placeHolderCharacter","dropSpecialCharacters","hiddenInput","undefined","shownMaskExpression","separatorLimit","allowNegativeNumbers","validation","specialCharacters","patterns","0","pattern","RegExp","9","optional","X","symbol","A","S","M","H","h","timeMasks","withoutValidation","MaskApplierService","_config","_this","maskExpression","actualValue","_formatWithSeparators","str","thousandSeparatorChar","decimalChar","precision","x","split","decimals","res","replace","slice","rgx","test","substr","percentage","Number","getPrecision","Infinity","checkInputPrecision","inputValue","precisionRegEx","_charToRegExpExpression","precisionMatch","match","substring","endsWith","_shift","Set","maskSpecialCharacters","maskAvailablePatterns","applyMaskWithPattern","maskAndPattern","_a","mask","customPattern","applyMask","position","cb","cursor","result","multi","backspaceShift","shift","stepBack","inputArray","toString","ipError","filter","startsWith","_stripToDecimal","indexOf","base","thousandSeperatorCharEscaped","decimalMarkerEscaped","invalidChars","invalidCharRegexp","strForSep","commaShift","shiftStep","add","clear","inputSymbol","_checkSymbolMask","withoutDays","day1monthInput","includes","day2monthInput","day1monthPaste","day2monthPaste","_findSpecialChar","newPosition","has","actualShift","find","val","maskSymbol","idx","join","char","Injectable","Inject","args","MaskService","document","_elementRef","_renderer","_super","isNumberValue","maskIsShown","selStart","selEnd","onChange","_formElement","nativeElement","__","constructor","create","tslib_1.__extends","showMaskInInput","formControlResult","getSymbol","newInputValue","actualResult","splice","shiftTypedSymbols","Boolean","getActualValue","item","hideInput","resLen","prefNmask","applyValueChanges","activeElement","clearIfNotMatchFn","map","curr","index","compare","symbolToReplace","currSymbol","replaceSymbol","inputVal","Error","_checkForIp","formElementProperty","defineProperty","_b","name","setProperty","checkSpecialCharAmount","arr","isArray","_removeMask","_removeSuffix","_removePrefix","_checkSymbols","specialCharactersForRemove","_regExpForRemove","_retrieveSeparatorValue","separatorPrecision","_retrieveSeparatorPrecision","separatorValue","_checkPrecision","maskExpretion","matcher","separatorExpression","toFixed","DOCUMENT","ElementRef","Renderer2","MaskDirective","_maskService","_maskValue","_position","onTouch","ngOnChanges","changes","currentValue","c","_applyMask","validate","_createValidationError","_validateTime","counterOfOpt","key","this_1","lastIndexOf","opt","length_1","onInput","el","_inputValue","selectionStart","caretShift","_backspaceShift","positionToApply","_code","_getActualInputLength","setSelectionRange","onBlur","onFocus","selectionEnd","keyCode","focus","nextValue","onKeyDown","code","preventDefault","suffixCheckOnPressDelete","cursorStart","readOnly","ctrlKey","metaKey","writeValue","_arguments","generator","String","P","Promise","resolve","reject","fulfilled","rejected","then","registerOnChange","fn","registerOnTouched","setDisabledState","isDisabled","onModelChange","_repeatPatternSymbols","maskExp","reduce","accum","currval","_start","_end","repeatNumber","rowMaskLen","requiredMask","Directive","selector","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","NG_VALIDATORS","Input","HostListener","MaskPipe","transform","Pipe","pure","NgxMaskModule","forRoot","configValue","ngModule","useValue","useFactory","_configFactory","deps","forChild","_configValue","NgModule","exports","declarations","initConfig","Function","global","KeyboardEvent","_eventType","_init"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { InjectionToken } from '@angular/core';\n\nexport interface IConfig {\n suffix: string;\n prefix: string;\n thousandSeparator: string;\n decimalMarker: '.' | ',';\n clearIfNotMatch: boolean;\n showTemplate: boolean;\n showMaskTyped: boolean;\n placeHolderCharacter: string;\n shownMaskExpression: string;\n dropSpecialCharacters: boolean | string[];\n specialCharacters: string[];\n hiddenInput: boolean | undefined;\n validation: boolean;\n separatorLimit: string;\n allowNegativeNumbers: boolean;\n patterns: {\n [character: string]: {\n pattern: RegExp;\n optional?: boolean;\n symbol?: string;\n };\n };\n}\n\nexport type optionsConfig = Partial<IConfig>;\nexport const config: InjectionToken<IConfig> = new InjectionToken('config');\nexport const NEW_CONFIG: InjectionToken<IConfig> = new InjectionToken('NEW_CONFIG');\nexport const INITIAL_CONFIG: InjectionToken<IConfig> = new InjectionToken('INITIAL_CONFIG');\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 // tslint:disable-next-line: quotemark\n specialCharacters: ['-', '/', '(', ')', '.', ':', ' ', '+', ',', '@', '[', ']', '\"', \"'\"],\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 d: {\n pattern: new RegExp('\\\\d'),\n },\n m: {\n pattern: new RegExp('\\\\d'),\n },\n M: {\n pattern: new RegExp('\\\\d'),\n },\n H: {\n pattern: new RegExp('\\\\d'),\n },\n h: {\n pattern: new RegExp('\\\\d'),\n },\n s: {\n pattern: new RegExp('\\\\d'),\n },\n },\n};\n\nexport const timeMasks: string[] = ['Hh:m0:s0', 'Hh:m0', 'm0:s0'];\n\nexport const withoutValidation: string[] = [\n 'percent',\n 'Hh',\n 's0',\n 'm0',\n 'separator',\n 'd0/M0/0000',\n 'd0/M0',\n 'd0',\n 'M0',\n];\n","import { Inject, Injectable } from '@angular/core';\n\nimport { config, IConfig } from './config';\n\n@Injectable()\nexport class MaskApplierService {\n public dropSpecialCharacters: IConfig['dropSpecialCharacters'];\n public hiddenInput: IConfig['hiddenInput'];\n public showTemplate!: IConfig['showTemplate'];\n public clearIfNotMatch!: IConfig['clearIfNotMatch'];\n public maskExpression: string = '';\n public actualValue: string = '';\n public shownMaskExpression: string = '';\n public maskSpecialCharacters!: IConfig['specialCharacters'];\n public maskAvailablePatterns!: IConfig['patterns'];\n public prefix!: IConfig['prefix'];\n public suffix!: IConfig['suffix'];\n public thousandSeparator!: IConfig['thousandSeparator'];\n public decimalMarker!: IConfig['decimalMarker'];\n public customPattern!: IConfig['patterns'];\n public ipError?: boolean;\n public showMaskTyped!: IConfig['showMaskTyped'];\n public placeHolderCharacter!: IConfig['placeHolderCharacter'];\n public validation: IConfig['validation'];\n public separatorLimit: IConfig['separatorLimit'];\n public allowNegativeNumbers: IConfig['allowNegativeNumbers'];\n\n private _shift!: Set<number>;\n\n public constructor(@Inject(config) protected _config: IConfig) {\n this._shift = new Set();\n this.clearIfNotMatch = this._config.clearIfNotMatch;\n this.dropSpecialCharacters = this._config.dropSpecialCharacters;\n this.maskSpecialCharacters = this._config.specialCharacters;\n this.maskAvailablePatterns = this._config.patterns;\n this.prefix = this._config.prefix;\n this.suffix = this._config.suffix;\n this.thousandSeparator = this._config.thousandSeparator;\n this.decimalMarker = this._config.decimalMarker;\n this.hiddenInput = this._config.hiddenInput;\n this.showMaskTyped = this._config.showMaskTyped;\n this.placeHolderCharacter = this._config.placeHolderCharacter;\n this.validation = this._config.validation;\n this.separatorLimit = this._config.separatorLimit;\n this.allowNegativeNumbers = this._config.allowNegativeNumbers;\n }\n\n public applyMaskWithPattern(inputValue: string, maskAndPattern: [string, IConfig['patterns']]): string {\n const [mask, customPattern] = maskAndPattern;\n this.customPattern = customPattern;\n return this.applyMask(inputValue, mask);\n }\n public applyMask(inputValue: string, maskExpression: string, position: number = 0, cb: Function = () => { }): string {\n if (inputValue === undefined || inputValue === null || maskExpression === undefined) {\n return '';\n }\n let cursor = 0;\n let result = '';\n let multi = false;\n let backspaceShift = false;\n let shift = 1;\n let stepBack = false;\n if (inputValue.slice(0, this.prefix.length) === this.prefix) {\n inputValue = inputValue.slice(this.prefix.length, inputValue.length);\n }\n if (!!this.suffix && inputValue.endsWith(this.suffix)) {\n inputValue = inputValue.slice(0, inputValue.length - this.suffix.length);\n }\n const inputArray: string[] = inputValue.toString().split('');\n if (maskExpression === 'IP') {\n this.ipError = !!(inputArray.filter((i: string) => i === '.').length < 3 && inputArray.length < 7);\n maskExpression = '099.099.099.099';\n }\n if (maskExpression.startsWith('percent')) {\n if (inputValue.match('[a-z]|[A-Z]') || inputValue.match(/[-!$%^&*()_+|~=`{}\\[\\]:\";'<>?,\\/]/)) {\n inputValue = this._stripToDecimal(inputValue);\n const precision: number = this.getPrecision(maskExpression);\n inputValue = this.checkInputPrecision(inputValue, precision, '.');\n }\n if (inputValue.indexOf('.') > 0 && !this.percentage(inputValue.substring(0, inputValue.indexOf('.')))) {\n const base: string = inputValue.substring(0, inputValue.indexOf('.') - 1);\n inputValue = `${base}${inputValue.substring(inputValue.indexOf('.'), inputValue.length)}`;\n }\n if (this.percentage(inputValue)) {\n result = inputValue;\n } else {\n result = inputValue.substring(0, inputValue.length - 1);\n }\n } else if (maskExpression.startsWith('separator')) {\n if (\n inputValue.match('[wа-ÑÐ-Я]') ||\n inputValue.match('[ÐÑÐ-Ñ]') ||\n inputValue.match('[a-z]|[A-Z]') ||\n inputValue.match(/[-@#!$%\\\\^&*()_£¬'+|~=`{}\\[\\]:\";<>.?\\/]/) ||\n inputValue.match('[^A-Za-z0-9,]')\n ) {\n inputValue = this._stripToDecimal(inputValue);\n }\n\n inputValue =\n inputValue.length > 1 && inputValue[0] === '0' && inputValue[1] !== this.decimalMarker\n ? inputValue.slice(1, inputValue.length)\n : inputValue;\n\n // TODO: we had different rexexps here for the different cases... but tests dont seam to bother - check this\n // separator: no COMMA, dot-sep: no SPACE, COMMA OK, comma-sep: no SPACE, COMMA OK\n\n const thousandSeperatorCharEscaped: string = this._charToRegExpExpression(this.thousandSeparator);\n const decimalMarkerEscaped: string = this._charToRegExpExpression(this.decimalMarker);\n const invalidChars: string = '@#!$%^&*()_+|~=`{}\\\\[\\\\]:\\\\s,\";<>?\\\\/'\n .replace(thousandSeperatorCharEscaped, '')\n .replace(decimalMarkerEscaped, '');\n\n const invalidCharRegexp: RegExp = new RegExp('[' + invalidChars + ']');\n\n if (inputValue.match(invalidCharRegexp)) {\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n\n const precision: number = this.getPrecision(maskExpression);\n inputValue = this.checkInputPrecision(inputValue, precision, this.decimalMarker);\n const strForSep: string = inputValue.replace(new RegExp(thousandSeperatorCharEscaped, 'g'), '');\n result = this._formatWithSeparators(strForSep, this.thousandSeparator, this.decimalMarker, precision);\n\n const commaShift: number = result.indexOf(',') - inputValue.indexOf(',');\n const shiftStep: number = result.length - inputValue.length;\n\n if (shiftStep > 0 && result[position] !== ',') {\n backspaceShift = true;\n let _shift = 0;\n do {\n this._shift.add(position + _shift);\n _shift++;\n } while (_shift < shiftStep);\n } else if (\n (commaShift !== 0 && position > 0 && !(result.indexOf(',') >= position && position > 3)) ||\n (!(result.indexOf('.') >= position && position > 3) && shiftStep <= 0)\n ) {\n this._shift.clear();\n backspaceShift = true;\n shift = shiftStep;\n position += shiftStep;\n this._shift.add(position);\n } else {\n this._shift.clear();\n }\n } else {\n for (\n // tslint:disable-next-line\n let i: number = 0, inputSymbol: string = inputArray[0];\n i < inputArray.length;\n i++ , inputSymbol = inputArray[i]\n ) {\n if (cursor === maskExpression.length) {\n break;\n }\n if (this._checkSymbolMask(inputSymbol, maskExpression[cursor]) && maskExpression[cursor + 1] === '?') {\n result += inputSymbol;\n cursor += 2;\n } else if (\n maskExpression[cursor + 1] === '*' &&\n multi &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2])\n ) {\n result += inputSymbol;\n cursor += 3;\n multi = false;\n } else if (this._checkSymbolMask(inputSymbol, maskExpression[cursor]) && maskExpression[cursor + 1] === '*') {\n result += inputSymbol;\n multi = true;\n } else if (\n maskExpression[cursor + 1] === '?' &&\n this._checkSymbolMask(inputSymbol, maskExpression[cursor + 2])\n ) {\n result += inputSymbol;\n cursor += 3;\n } else if (\n this._checkSymbolMask(inputSymbol, maskExpression[cursor]) ||\n (this.hiddenInput &&\n this.maskAvailablePatterns[maskExpression[cursor]] &&\n this.maskAvailablePatterns[maskExpression[cursor]].symbol === inputSymbol)\n ) {\n if (maskExpression[cursor] === 'H') {\n if (Number(inputSymbol) > 2) {\n cursor += 1;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === 'h') {\n if (result === '2' && Number(inputSymbol) > 3) {\n cursor += 1;\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === 'm') {\n if (Number(inputSymbol) > 5) {\n cursor += 1;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === 's') {\n if (Number(inputSymbol) > 5) {\n cursor += 1;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n continue;\n }\n }\n const daysCount = 31;\n if (maskExpression[cursor] === 'd') {\n if (Number(inputValue.slice(cursor, cursor + 2)) > daysCount || inputValue[cursor + 1] === '/') {\n cursor += 1;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n continue;\n }\n }\n if (maskExpression[cursor] === 'M') {\n const monthsCount = 12;\n // mask without day\n const withoutDays: boolean =\n cursor === 0 &&\n (Number(inputSymbol) > 2 ||\n Number(inputValue.slice(cursor, cursor + 2)) > monthsCount ||\n inputValue[cursor + 1] === '/');\n // day<10 && month<12 for input\n const day1monthInput: boolean =\n inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n ((inputValue[cursor - 2] === '/' &&\n (Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount && inputValue[cursor] !== '/')) ||\n inputValue[cursor] === '/' ||\n ((inputValue[cursor - 3] === '/' &&\n (Number(inputValue.slice(cursor - 2, cursor)) > monthsCount && inputValue[cursor - 1] !== '/')) ||\n inputValue[cursor - 1] === '/'));\n // 10<day<31 && month<12 for input\n const day2monthInput: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n inputValue[cursor - 1] === '/' &&\n (Number(inputValue.slice(cursor, cursor + 2)) > monthsCount || inputValue[cursor + 1] === '/');\n // day<10 && month<12 for paste whole data\n const day1monthPaste: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) > daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n (!inputValue.slice(cursor - 2, cursor).includes('/') &&\n Number(inputValue.slice(cursor - 2, cursor)) > monthsCount);\n // 10<day<31 && month<12 for paste whole data\n const day2monthPaste: boolean =\n Number(inputValue.slice(cursor - 3, cursor - 1)) <= daysCount &&\n !inputValue.slice(cursor - 3, cursor - 1).includes('/') &&\n inputValue[cursor - 1] !== '/' &&\n Number(inputValue.slice(cursor - 1, cursor + 1)) > monthsCount;\n\n if (withoutDays || day1monthInput || day2monthInput || day1monthPaste || day2monthPaste) {\n cursor += 1;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n continue;\n }\n }\n result += inputSymbol;\n cursor++;\n } else if (this.maskSpecialCharacters.indexOf(maskExpression[cursor]) !== -1) {\n result += maskExpression[cursor];\n cursor++;\n const shiftStep: number = /[*?]/g.test(maskExpression.slice(0, cursor)) ? inputArray.length : cursor;\n this._shift.add(shiftStep + this.prefix.length || 0);\n i--;\n } else if (\n this.maskSpecialCharacters.indexOf(inputSymbol) > -1 &&\n this.maskAvailablePatterns[maskExpression[cursor]] &&\n this.maskAvailablePatterns[maskExpression[cursor]].optional\n ) {\n if (!!inputArray[cursor] && maskExpression !== '099.099.099.099') {\n result += inputArray[cursor];\n }\n cursor++;\n i--;\n } else if (\n this.maskExpression[cursor + 1] === '*' &&\n this._findSpecialChar(this.maskExpression[cursor + 2]) &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi\n ) {\n cursor += 3;\n result += inputSymbol;\n } else if (\n this.maskExpression[cursor + 1] === '?' &&\n this._findSpecialChar(this.maskExpression[cursor + 2]) &&\n this._findSpecialChar(inputSymbol) === this.maskExpression[cursor + 2] &&\n multi\n ) {\n cursor += 3;\n result += inputSymbol;\n } else if (this.showMaskTyped && this.maskSpecialCharacters.indexOf(inputSymbol) < 0 && inputSymbol !== this.placeHolderCharacter) {\n stepBack = true;\n }\n }\n }\n if (\n result.length + 1 === maskExpression.length &&\n this.maskSpecialCharacters.indexOf(maskExpression[maskExpression.length - 1]) !== -1\n ) {\n result += maskExpression[maskExpression.length - 1];\n }\n\n let newPosition: number = position + 1;\n\n while (this._shift.has(newPosition)) {\n shift++;\n newPosition++;\n }\n\n let actualShift: number = this._shift.has(position) ? shift : 0;\n if (stepBack) {\n actualShift--;\n }\n\n cb(actualShift, backspaceShift);\n if (shift < 0) {\n this._shift.clear();\n }\n let res = `${this.prefix}${result}${this.suffix}`;\n if (result.length === 0) {\n res = `${this.prefix}${result}`;\n }\n return res;\n }\n public _findSpecialChar(inputSymbol: string): undefined | string {\n return this.maskSpecialCharacters.find((val: string) => val === inputSymbol);\n }\n\n protected _checkSymbolMask(inputSymbol: string, maskSymbol: string): boolean {\n this.maskAvailablePatterns = this.customPattern ? this.customPattern : this.maskAvailablePatterns;\n return (\n this.maskAvailablePatterns[maskSymbol] &&\n this.maskAvailablePatterns[maskSymbol].pattern &&\n this.maskAvailablePatterns[maskSymbol].pattern.test(inputSymbol)\n );\n }\n\n private _formatWithSeparators = (\n str: string,\n thousandSeparatorChar: string,\n decimalChar: string,\n precision: number\n ) => {\n const x: string[] = str.split(decimalChar);\n const decimals: string = x.length > 1 ? `${decimalChar}${x[1]}` : '';\n let res: string = x[0];\n const separatorLimit: string = this.separatorLimit.replace(/\\s/g, '');\n if (separatorLimit && +separatorLimit) {\n if (res[0] === '-') {\n res = `-${res.slice(1, res.length).slice(0, separatorLimit.length)}`;\n } else {\n res = res.slice(0, separatorLimit.length);\n }\n }\n const rgx: RegExp = /(\\d+)(\\d{3})/;\n while (rgx.test(res)) {\n res = res.replace(rgx, '$1' + thousandSeparatorChar + '$2');\n }\n if (precision === undefined) {\n return res + decimals;\n } else if (precision === 0) {\n return res;\n }\n return res + decimals.substr(0, precision + 1);\n };\n\n private percentage = (str: string): boolean => {\n return Number(str) >= 0 && Number(str) <= 100;\n };\n\n private getPrecision = (maskExpression: string): number => {\n const x: string[] = maskExpression.split('.');\n if (x.length > 1) {\n return Number(x[x.length - 1]);\n }\n\n return Infinity;\n };\n\n private checkInputPrecision = (\n inputValue: string,\n precision: number,\n decimalMarker: IConfig['decimalMarker']\n ): string => {\n if (precision < Infinity) {\n const precisionRegEx: RegExp = new RegExp(this._charToRegExpExpression(decimalMarker) + `\\\\d{${precision}}.*$`);\n\n const precisionMatch: RegExpMatchArray | null = inputValue.match(precisionRegEx);\n if (precisionMatch && precisionMatch[0].length - 1 > precision) {\n inputValue = inputValue.substring(0, inputValue.length - 1);\n } else if (precision === 0 && inputValue.endsWith(decimalMarker)) {\n inputValue = inputValue.substring(0, inputValue.length - 1);\n }\n }\n return inputValue;\n };\n\n private _stripToDecimal(str: string): string {\n return str\n .split('')\n .filter((i: string, idx: number) => {\n return i.match('^-?\\\\d') || i === '.' || i === ',' || (i === '-' && idx === 0);\n })\n .join('');\n }\n\n private _charToRegExpExpression(char: string): string {\n const charsToEscape = '[\\\\^$.|?*+()';\n return char === ' ' ? '\\\\s' : charsToEscape.indexOf(char) >= 0 ? '\\\\' + char : char;\n }\n // tslint:disable-next-line:max-file-line-count\n}\n","import { ElementRef, Inject, Injectable, Renderer2 } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { config, IConfig } from './config';\nimport { MaskApplierService } from './mask-applier.service';\n\n@Injectable()\nexport class MaskService extends MaskApplierService {\n public maskExpression: string = '';\n public isNumberValue: boolean = false;\n public placeHolderCharacter: string = '_';\n public maskIsShown: string = '';\n public selStart: number | null = null;\n public selEnd: number | null = null;\n protected _formElement: HTMLInputElement;\n\n public onChange = (_: any) => {};\n\n public constructor(\n @Inject(DOCUMENT) private document: any,\n @Inject(config) protected _config: IConfig,\n private _elementRef: ElementRef,\n private _renderer: Renderer2\n ) {\n super(_config);\n this._formElement = this._elementRef.nativeElement;\n }\n\n // tslint:disable-next-line:cyclomatic-complexity\n public applyMask(inputValue: string, maskExpression: string, position: number = 0, cb: Function = () => {}): string {\n if (!maskExpression) {\n return inputValue;\n }\n this.maskIsShown = this.showMaskTyped ? this.showMaskInInput() : '';\n if (this.maskExpression === 'IP' && this.showMaskTyped) {\n this.maskIsShown = this.showMaskInInput(inputValue || '#');\n }\n if (!inputValue && this.showMaskTyped) {\n this.formControlResult(this.prefix);\n return this.prefix + this.maskIsShown;\n }\n const getSymbol: string = !!inputValue && typeof this.selStart === 'number' ? inputValue[this.selStart] : '';\n let newInputValue = '';\n if (this.hiddenInput !== undefined) {\n let actualResult: string[] = this.actualValue.split('');\n // tslint:disable no-unused-expression\n inputValue !== '' && actualResult.length\n ? typeof this.selStart === 'number' && typeof this.selEnd === 'number'\n ? inputValue.length > actualResult.length\n ? actualResult.splice(this.selStart, 0, getSymbol)\n : inputValue.length < actualResult.length\n ? actualResult.length - inputValue.length === 1\n ? actualResult.splice(this.selStart - 1, 1)\n : actualResult.splice(this.selStart, this.selEnd - this.selStart)\n : null\n : null\n : (actualResult = []);\n // tslint:enable no-unused-expression\n newInputValue = this.actualValue.length ? this.shiftTypedSymbols(actualResult.join('')) : inputValue;\n }\n newInputValue = Boolean(newInputValue) && newInputValue.length ? newInputValue : inputValue;\n const result: string = super.applyMask(newInputValue, maskExpression, position, cb);\n this.actualValue = this.getActualValue(result);\n\n // handle some separator implications:\n // a.) adjust decimalMarker default (. -> ,) if thousandSeparator is a dot\n if (this.thousandSeparator === '.' && this.decimalMarker === '.') {\n this.decimalMarker = ',';\n }\n\n // b) remove decimal marker from list of special characters to mask\n if (this.maskExpression.startsWith('separator') && this.dropSpecialCharacters === true) {\n this.maskSpecialCharacters = this.maskSpecialCharacters.filter((item: string) => item !== this.decimalMarker);\n }\n\n this.formControlResult(result);\n\n if (!this.showMaskTyped) {\n if (this.hiddenInput) {\n return result && result.length ? this.hideInput(result, this.maskExpression) : result;\n }\n return result;\n }\n const resLen: number = result.length;\n const prefNmask: string = this.prefix + this.maskIsShown;\n return result + (this.maskExpression === 'IP' ? prefNmask : prefNmask.slice(resLen));\n }\n\n public applyValueChanges(position: number = 0, cb: Function = () => {}): void {\n this._formElement.value = this.applyMask(this._formElement.value, this.maskExpression, position, cb);\n if (this._formElement === this.document.activeElement) {\n return;\n }\n this.clearIfNotMatchFn();\n }\n\n public hideInput(inputValue: string, maskExpression: string): string {\n return inputValue\n .split('')\n .map((curr: string, index: number) => {\n if (\n this.maskAvailablePatterns &&\n this.maskAvailablePatterns[maskExpression[index]] &&\n this.maskAvailablePatterns[maskExpression[index]].symbol\n ) {\n return this.maskAvailablePatterns[maskExpression[index]].symbol;\n }\n return curr;\n })\n .join('');\n }\n\n // this function is not necessary, it checks result against maskExpression\n public getActualValue(res: string): string {\n const compare: string[] = res\n .split('')\n .filter(\n (symbol: string, i: number) =>\n this._checkSymbolMask(symbol, this.maskExpression[i]) ||\n (this.maskSpecialCharacters.includes(this.maskExpression[i]) && symbol === this.maskExpression[i])\n );\n if (compare.join('') === res) {\n return compare.join('');\n }\n return res;\n }\n\n public shiftTypedSymbols(inputValue: string): string {\n let symbolToReplace = '';\n const newInputValue: string[] =\n (inputValue &&\n inputValue.split('').map((currSymbol: string, index: number) => {\n if (\n this.maskSpecialCharacters.includes(inputValue[index + 1]) &&\n inputValue[index + 1] !== this.maskExpression[index + 1]\n ) {\n symbolToReplace = currSymbol;\n return inputValue[index + 1];\n }\n if (symbolToReplace.length) {\n const replaceSymbol: string = symbolToReplace;\n symbolToReplace = '';\n return replaceSymbol;\n }\n return currSymbol;\n })) ||\n [];\n return newInputValue.join('');\n }\n\n 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 return this._checkForIp(inputVal);\n }\n return this.maskExpression.replace(/\\w/g, this.placeHolderCharacter);\n }\n return '';\n }\n\n public clearIfNotMatchFn(): void {\n if (\n this.clearIfNotMatch &&\n this.prefix.length + this.maskExpression.length + this.suffix.length !==\n this._formElement.value.replace(/_/g, '').length\n ) {\n this.formElementProperty = ['value', ''];\n this.applyMask(this._formElement.value, this.maskExpression);\n }\n }\n\n public set formElementProperty([name, value]: [string, string | boolean]) {\n this._renderer.setProperty(this._formElement, name, value);\n }\n\n public checkSpecialCharAmount(mask: string): number {\n const chars: string[] = mask.split('').filter((item: string) => this._findSpecialChar(item));\n return chars.length;\n }\n\n private _checkForIp(inputVal: string): string {\n if (inputVal === '#') {\n return `${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}.${this.placeHolderCharacter}`;\n }\n const arr: string[] = [];\n for (let i = 0; i < inputVal.length; i++) {\n if (inputVal[i].match('\\\\d')) {\n arr.push(inputVal[i]);\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 formControlResult(inputValue: string): void {\n if (Array.isArray(this.dropSpecialCharacters)) {\n this.onChange(this._removeMask(this._removeSuffix(this._removePrefix(inputValue)), this.dropSpecialCharacters));\n } else if (this.dropSpecialCharacters) {\n this.onChange(this._checkSymbols(inputValue));\n } else {\n this.onChange(this._removeSuffix(this._removePrefix(inputValue)));\n }\n }\n\n private _removeMask(value: string, specialCharactersForRemove: string[]): string {\n return value ? value.replace(this._regExpForRemove(specialCharactersForRemove), '') : value;\n }\n\n private _removePrefix(value: string): string {\n if (!this.prefix) {\n return value;\n }\n return value ? value.replace(this.prefix, '') : value;\n }\n\n private _removeSuffix(value: string): string {\n if (!this.suffix) {\n return value;\n }\n return value ? value.replace(this.suffix, '') : value;\n }\n\n private _retrieveSeparatorValue(result: string): string {\n return this._removeMask(this._removeSuffix(this._removePrefix(result)), this.maskSpecialCharacters);\n }\n\n private _regExpForRemove(specialCharactersForRemove: string[]): RegExp {\n return new RegExp(specialCharactersForRemove.map((item: string) => `\\\\${item}`).join('|'), 'gi');\n }\n\n private _checkSymbols(result: string): string | number | undefined | null {\n if (result === '') {\n return result;\n }\n\n const separatorPrecision: number | null = this._retrieveSeparatorPrecision(this.maskExpression);\n let separatorValue: string = this._retrieveSeparatorValue(result);\n if (this.decimalMarker !== '.') {\n separatorValue = separatorValue.replace(this.decimalMarker, '.');\n }\n\n if (this.isNumberValue) {\n if (separatorPrecision) {\n if (result === this.decimalMarker) {\n return null;\n }\n return this._checkPrecision(this.maskExpression, separatorValue);\n } else {\n return Number(separatorValue);\n }\n } else {\n return separatorValue;\n }\n }\n\n // TODO should think about helpers or separting decimal precision to own property\n private _retrieveSeparatorPrecision(maskExpretion: string): number | null {\n const matcher: RegExpMatchArray | null = maskExpretion.match(new RegExp(`^separator\\\\.([^d]*)`));\n return matcher ? Number(matcher[1]) : null;\n }\n\n private _checkPrecision(separatorExpression: string, separatorValue: string): number | string {\n if (separatorExpression.indexOf('2') > 0) {\n return Number(separatorValue).toFixed(2);\n }\n return Number(separatorValue);\n }\n}\n","import { ControlValueAccessor, FormControl, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\nimport { Directive, forwardRef, HostListener, Inject, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\n\nimport { CustomKeyboardEvent } from './custom-keyboard-event';\nimport { config, IConfig, timeMasks, withoutValidation } from './config';\nimport { MaskService } from './mask.service';\n\n// tslint:disable deprecation\n@Directive({\n selector: '[mask]',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MaskDirective),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MaskDirective),\n multi: true,\n },\n MaskService,\n ],\n})\nexport class MaskDirective implements ControlValueAccessor, OnChanges {\n @Input('mask') public maskExpression: string = '';\n @Input() public specialCharacters: IConfig['specialCharacters'] = [];\n @Input() public patterns: IConfig['patterns'] = {};\n @Input() public prefix: IConfig['prefix'] = '';\n @Input() public suffix: IConfig['suffix'] = '';\n @Input() public thousandSeparator: IConfig['thousandSeparator'] = ' ';\n @Input() public decimalMarker: IConfig['decimalMarker'] = '.';\n @Input() public dropSpecialCharacters: IConfig['dropSpecialCharacters'] | null = null;\n @Input() public hiddenInput: IConfig['hiddenInput'] | null = null;\n @Input() public showMaskTyped: IConfig['showMaskTyped'] | null = null;\n @Input() public placeHolderCharacter: IConfig['placeHolderCharacter'] | null = null;\n @Input() public shownMaskExpression: IConfig['shownMaskExpression'] | null = null;\n @Input() public showTemplate: IConfig['showTemplate'] | null = null;\n @Input() public clearIfNotMatch: IConfig['clearIfNotMatch'] | null = null;\n @Input() public validation: IConfig['validation'] | null = null;\n @Input() public separatorLimit: IConfig['separatorLimit'] | null = null;\n @Input() public allowNegativeNumbers: IConfig['allowNegativeNumbers'] | null = null;\n private _maskValue: string = '';\n private _inputValue!: string;\n private _position: number | null = null;\n private _start!: number;\n private _end!: number;\n private _code!: string;\n\n public constructor(\n @Inject(DOCUMENT) private document: any,\n private _maskService: MaskService,\n @Inject(config) protected _config: IConfig\n ) {}\n\n public onChange = (_: any) => {};\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 } = changes;\n if (maskExpression) {\n this._maskValue = changes.maskExpression.currentValue || '';\n }\n if (specialCharacters) {\n if (!specialCharacters.currentValue || !Array.isArray(specialCharacters.currentValue)) {\n return;\n } else {\n this._maskService.maskSpecialCharacters = changes.specialCharacters.currentValue || [];\n }\n }\n // Only overwrite the mask available patterns if a pattern has actually been passed in\n if (patterns && patterns.currentValue) {\n this._maskService.maskAvailablePatterns = patterns.currentValue;\n }\n if (prefix) {\n this._maskService.prefix = prefix.currentValue;\n }\n if (suffix) {\n this._maskService.suffix = suffix.currentValue;\n }\n if (thousandSeparator) {\n this._maskService.thousandSeparator = thousandSeparator.currentValue;\n }\n if (decimalMarker) {\n this._maskService.decimalMarker = decimalMarker.currentValue;\n }\n if (dropSpecialCharacters) {\n this._maskService.dropSpecialCharacters = dropSpecialCharacters.currentValue;\n }\n if (hiddenInput) {\n this._maskService.hiddenInput = hiddenInput.currentValue;\n }\n if (showMaskTyped) {\n this._maskService.showMaskTyped = showMaskTyped.currentValue;\n }\n if (placeHolderCharacter) {\n this._maskService.placeHolderCharacter = placeHolderCharacter.currentValue;\n }\n if (shownMaskExpression) {\n this._maskService.shownMaskExpression = shownMaskExpression.currentValue;\n }\n if (showTemplate) {\n this._maskService.showTemplate = showTemplate.currentValue;\n }\n if (clearIfNotMatch) {\n this._maskService.clearIfNotMatch = clearIfNotMatch.currentValue;\n }\n if (validation) {\n this._maskService.validation = validation.currentValue;\n }\n if (separatorLimit) {\n this._maskService.separatorLimit = separatorLimit.currentValue;\n }\n if (allowNegativeNumbers) {\n this._maskService.maskSpecialCharacters = this._maskService.maskSpecialCharacters.filter((c: string) => c !== '-');\n }\n this._applyMask();\n }\n\n // tslint:disable-next-line: cyclomatic-complexity\n public validate({ value }: FormControl): ValidationErrors | null {\n if (!this._maskService.validation) {\n return null;\n }\n if (this._maskService.ipError) {\n return this._createValidationError(value);\n }\n if (this._maskValue.startsWith('separator')) {\n return null;\n }\n if (withoutValidation.includes(this._maskValue)) {\n return null;\n }\n if (this._maskService.clearIfNotMatch) {\n return null;\n }\n if (timeMasks.includes(this._maskValue)) {\n return this._validateTime(value);\n }\n if (value && value.toString().length >= 1) {\n let counterOfOpt = 0;\n for (const key in this._maskService.maskAvailablePatterns) {\n if (\n this._maskService.maskAvailablePatterns[key].optional &&\n this._maskService.maskAvailablePatterns[key].optional === true\n ) {\n if (this._maskValue.indexOf(key) !== this._maskValue.lastIndexOf(key)) {\n const opt: string = this._maskValue\n .split('')\n .filter((i: string) => i === key)\n .join('');\n counterOfOpt += opt.length;\n } else if (this._maskValue.indexOf(key) !== -1) {\n counterOfOpt++;\n }\n if (this._maskValue.indexOf(key) !== -1 && value.toString().length >= this._maskValue.indexOf(key)) {\n return null;\n }\n if (counterOfOpt === this._maskValue.length) {\n return null;\n }\n }\n }\n if (\n this._maskValue.indexOf('{') === 1 &&\n value.toString().length === this._maskValue.length + Number(this._maskValue.split('{')[1].split('}')[0]) - 4\n ) {\n return null;\n }\n if (this._maskValue.indexOf('*') === 1 || this._maskValue.indexOf('?') === 1) {\n return null;\n } else if (\n (this._maskValue.indexOf('*') > 1 && value.toString().length < this._maskValue.indexOf('*')) ||\n (this._maskValue.indexOf('?') > 1 && value.toString().length < this._maskValue.indexOf('?')) ||\n this._maskValue.indexOf('{') === 1\n ) {\n return this._createValidationError(value);\n }\n if (this._maskValue.indexOf('*') === -1 || this._maskValue.indexOf('?') === -1) {\n const length: number = this._maskService.dropSpecialCharacters\n ? this._maskValue.length - this._maskService.checkSpecialCharAmount(this._maskValue) - counterOfOpt\n : this._maskValue.length - counterOfOpt;\n if (value.toString().length < length) {\n return this._createValidationError(value);\n }\n }\n }\n return null;\n }\n\n @HostListener('input', ['$event'])\n public onInput(e: CustomKeyboardEvent): void {\n const el: HTMLInputElement = e.target as HTMLInputElement;\n this._inputValue = el.value;\n if (!this._maskValue) {\n this.onChange(el.value);\n return;\n }\n const position: number =\n el.selectionStart === 1\n ? (el.selectionStart as number) + this._maskService.prefix.length\n : (el.selectionStart as number);\n let caretShift = 0;\n let backspaceShift = false;\n this._maskService.applyValueChanges(position, (shift: number, _backspaceShift: boolean) => {\n caretShift = shift;\n backspaceShift = _backspaceShift;\n });\n // only set the selection if the element is active\n if (this.document.activeElement !== el) {\n return;\n }\n this._position = this._position === 1 && this._inputValue.length === 1 ? null : this._position;\n let positionToApply: number = this._position\n ? this._inputValue.length + position + caretShift\n : position + (this._code === 'Backspace' && !backspaceShift ? 0 : caretShift);\n if (positionToApply > this._getActualInputLength()) {\n positionToApply = this._getActualInputLength();\n }\n el.setSelectionRange(positionToApply, positionToApply);\n if ((this.maskExpression.includes('H') || this.maskExpression.includes('M')) && caretShift === 0) {\n el.setSelectionRange((el.selectionStart as number) + 1, (el.selectionStart as number) + 1);\n }\n this._position = null;\n }\n\n @HostListener('blur')\n public onBlur(): void {\n this._maskService.clearIfNotMatchFn();\n this.onTouch();\n }\n\n @HostListener('click', ['$event'])\n public onFocus(e: MouseEvent | CustomKeyboardEvent): void {\n const el: HTMLInputElement = e.target as HTMLInputElement;\n const posStart = 0;\n const posEnd = 0;\n if (\n el !== null &&\n el.selectionStart !== null &&\n el.selectionStart === el.selectionEnd &&\n el.selectionStart > this._maskService.prefix.length &&\n // tslint:disable-next-line\n (e as any).keyCode !== 38\n )\n if (this._maskService.showMaskTyped) {\n // We are showing the mask in the input\n this._maskService.maskIsShown = this._maskService.showMaskInInput();\n if (el.setSelectionRange && this._maskService.prefix + this._maskService.maskIsShown === el.value) {\n // the input ONLY contains the mask, so position the cursor at the start\n el.focus();\n el.setSelectionRange(posStart, posEnd);\n } else {\n // the input contains some characters already\n if (el.selectionStart > this._maskService.actualValue.length) {\n // if the user clicked beyond our value's length, position the cursor at the end of our value\n el.setSelectionRange(this._maskService.actualValue.length, this._maskService.actualValue.length);\n }\n }\n }\n const nextValue: string | null =\n !el.value || 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.value !== nextValue) {\n el.value = nextValue;\n }\n\n /** fix of cursor position with prefix when mouse click occur */\n if (((el.selectionStart as number) || (el.selectionEnd as number)) <= this._maskService.prefix.length) {\n el.selectionStart = this._maskService.prefix.length;\n return;\n }\n\n /** select only inserted text */\n if ((el.selectionEnd as number) > this._getActualInputLength()) {\n el.selectionEnd = this._getActualInputLength();\n }\n }\n\n // tslint:disable-next-line: cyclomatic-complexity\n @HostListener('keydown', ['$event'])\n public onKeyDown(e: CustomKeyboardEvent): void {\n this._code = e.code ? e.code : e.key;\n const el: HTMLInputElement = e.target as HTMLInputElement;\n this._inputValue = el.value;\n if (e.keyCode === 38) {\n e.preventDefault();\n }\n if (e.keyCode === 37 || e.keyCode === 8 || e.keyCode === 46) {\n if (e.keyCode === 8 && el.value.length === 0) {\n el.selectionStart = el.selectionEnd;\n }\n if (e.keyCode === 8 && (el.selectionStart as number) !== 0) {\n // If specialChars is false, (shouldn't ever happen) then set to the defaults\n this.specialCharacters = this.specialCharacters || this._config.specialCharacters;\n if (this.prefix.length > 1 && (el.selectionStart as number) <= this.prefix.length) {\n el.setSelectionRange(this.prefix.length, this.prefix.length);\n } else {\n if (this._inputValue.length !== (el.selectionStart as number) && (el.selectionStart as number) !== 1) {\n while (\n this.specialCharacters.includes(this._inputValue[(el.selectionStart as number) - 1].toString()) &&\n ((this.prefix.length >= 1 && (el.selectionStart as number) > this.prefix.length) ||\n this.prefix.length === 0)\n ) {\n el.setSelectionRange((el.selectionStart as number) - 1, (el.selectionStart as number) - 1);\n }\n }\n this.suffixCheckOnPressDelete(e.keyCode, el);\n }\n }\n this.suffixCheckOnPressDelete(e.keyCode, 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 // this.onFocus(e);\n if (\n e.keyCode === 8 &&\n !el.readOnly &&\n cursorStart === 0 &&\n el.selectionEnd === el.value.length &&\n el.value.length !== 0\n ) {\n this._position = this._maskService.prefix ? this._maskService.prefix.length : 0;\n this._maskService.applyMask(this._maskService.prefix, this._maskService.maskExpression, this._position);\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(this._inputValue.length - this.suffix.length, this._inputValue.length);\n } else if (\n (e.keyCode === 65 && e.ctrlKey === true) || // Ctrl+ A\n (e.keyCode === 65 && e.metaKey === true) // Cmd + A (Mac)\n ) {\n el.setSelectionRange(0, this._getActualInputLength());\n e.preventDefault();\n }\n this._maskService.selStart = el.selectionStart;\n this._maskService.selEnd = el.selectionEnd;\n }\n\n /** It writes the value in the input */\n public async writeValue(inputValue: string | number): Promise<void> {\n if (inputValue === undefined) {\n inputValue = '';\n }\n if (typeof inputValue === 'number') {\n inputValue = String(inputValue);\n inputValue = this.decimalMarker !== '.' ? inputValue.replace('.', this.decimalMarker) : inputValue;\n this._maskService.isNumberValue = true;\n }\n (inputValue && this._maskService.maskExpression) ||\n (this._maskService.maskExpression && (this._maskService.prefix || this._maskService.showMaskTyped))\n ? (this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(inputValue, this._maskService.maskExpression),\n ])\n : (this._maskService.formElementProperty = ['value', inputValue]);\n this._inputValue = inputValue;\n }\n\n public registerOnChange(fn: any): void {\n this.onChange = fn;\n this._maskService.onChange = this.onChange;\n }\n\n public registerOnTouched(fn: any): void {\n this.onTouch = fn;\n }\n\n public suffixCheckOnPressDelete(keyCode: number, el: HTMLInputElement): void {\n if (keyCode === 46 && this.suffix.length > 0) {\n if (this._inputValue.length - this.suffix.length <= (el.selectionStart as number)) {\n el.setSelectionRange(this._inputValue.length - this.suffix.length, this._inputValue.length);\n }\n }\n if (keyCode === 8) {\n if (this.suffix.length > 1 && this._inputValue.length - this.suffix.length < (el.selectionStart as number)) {\n el.setSelectionRange(this._inputValue.length - this.suffix.length, this._inputValue.length);\n }\n if (this.suffix.length === 1 && this._inputValue.length === (el.selectionStart as number)) {\n el.setSelectionRange((el.selectionStart as number) - 1, (el.selectionStart as number) - 1);\n }\n }\n }\n\n /** It disables the input element */\n public setDisabledState(isDisabled: boolean): void {\n this._maskService.formElementProperty = ['disabled', isDisabled];\n }\n\n @HostListener('ngModelChange', ['$event'])\n // tslint:disable-next-line: no-any\n public onModelChange(e: any): void {\n if (!e) {\n this._maskService.actualValue = '';\n }\n }\n\n private _repeatPatternSymbols(maskExp: string): string {\n return (\n (maskExp.match(/{[0-9]+}/) &&\n maskExp.split('').reduce((accum: string, currval: string, index: number): string => {\n this._start = currval === '{' ? index : this._start;\n\n if (currval !== '}') {\n return this._maskService._findSpecialChar(currval) ? accum + currval : accum;\n }\n this._end = index;\n const repeatNumber: number = Number(maskExp.slice(this._start + 1, this._end));\n const repaceWith: string = new Array(repeatNumber + 1).join(maskExp[this._start - 1]);\n return accum + repaceWith;\n }, '')) ||\n maskExp\n );\n }\n // tslint:disable-next-line:no-any\n private _applyMask(): any {\n this._maskService.maskExpression = this._repeatPatternSymbols(this._maskValue || '');\n this._maskService.formElementProperty = [\n 'value',\n this._maskService.applyMask(this._inputValue, this._maskService.maskExpression),\n ];\n }\n\n private _validateTime(value: string): ValidationErrors | null {\n const rowMaskLen: number = this._maskValue.split('').filter((s: string) => s !== ':').length;\n if (value === null || value.length === 0) {\n return null; // Don't validate empty values to allow for optional form control\n }\n\n if ((+value[value.length - 1] === 0 && value.length < rowMaskLen) || value.length <= rowMaskLen - 2) {\n return this._createValidationError(value);\n }\n\n return null;\n }\n\n private _getActualInputLength() {\n return (\n this._maskService.actualValue.length || 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","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { MaskApplierService } from './mask-applier.service';\nimport { IConfig } from './config';\n\n@Pipe({\n name: 'mask',\n pure: true,\n})\nexport class MaskPipe implements PipeTransform {\n public constructor(private _maskService: MaskApplierService) {}\n\n public transform(\n value: string | number,\n mask: string | [string, IConfig['patterns']],\n thousandSeparator: string | null = null\n ): string {\n if (!value && typeof value !== 'number') {\n return '';\n }\n if (thousandSeparator) {\n this._maskService.thousandSeparator = thousandSeparator;\n }\n if (typeof mask === 'string') {\n return this._maskService.applyMask(`${value}`, mask);\n }\n return this._maskService.applyMaskWithPattern(`${value}`, mask);\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { config, INITIAL_CONFIG, initialConfig, NEW_CONFIG, optionsConfig } from './config';\nimport { MaskApplierService } from './mask-applier.service';\nimport { MaskDirective } from './mask.directive';\nimport { MaskPipe } from './mask.pipe';\n\n@NgModule({\n exports: [MaskDirective, MaskPipe],\n declarations: [MaskDirective, MaskPipe],\n})\nexport class NgxMaskModule {\n public static forRoot(configValue?: optionsConfig | (() => optionsConfig)): ModuleWithProviders {\n return {\n ngModule: NgxMaskModule,\n providers: [\n {\n provide: NEW_CONFIG,\n useValue: configValue,\n },\n {\n provide: INITIAL_CONFIG,\n useValue: initialConfig,\n },\n {\n provide: config,\n useFactory: _configFactory,\n deps: [INITIAL_CONFIG, NEW_CONFIG],\n },\n MaskApplierService,\n ],\n };\n }\n public static forChild(_configValue?: optionsConfig): ModuleWithProviders {\n return {\n ngModule: NgxMaskModule,\n };\n }\n}\n\n/**\n * @internal\n */\nexport function _configFactory(\n initConfig: optionsConfig,\n configValue: optionsConfig | (() => optionsConfig)\n): optionsConfig {\n return configValue instanceof Function ? { ...initConfig, ...configValue() } : { ...initConfig, ...configValue };\n}\n","// tslint:disable: no-any typedef\ndeclare var global: any;\n\n(function() {\n if (!global.KeyboardEvent) {\n global.KeyboardEvent = function(_eventType: any, _init: any) {};\n }\n})();\n\nexport type CustomKeyboardEvent = KeyboardEvent;\n"]}
|
package/esm2015/index.js
CHANGED
|
@@ -7,4 +7,6 @@ export { MaskDirective } from './lib/mask.directive';
|
|
|
7
7
|
export { MaskPipe } from './lib/mask.pipe';
|
|
8
8
|
export { MaskService } from './lib/mask.service';
|
|
9
9
|
export { MaskApplierService } from './lib/mask-applier.service';
|
|
10
|
-
|
|
10
|
+
export { config, NEW_CONFIG, INITIAL_CONFIG, initialConfig, timeMasks, withoutValidation } from './lib/config';
|
|
11
|
+
export {} from './lib/custom-keyboard-event';
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtbWFzay8iLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw4Q0FBYyx1QkFBdUIsQ0FBQztBQUN0Qyw4QkFBYyxzQkFBc0IsQ0FBQztBQUNyQyx5QkFBYyxpQkFBaUIsQ0FBQztBQUNoQyw0QkFBYyxvQkFBb0IsQ0FBQztBQUNuQyxtQ0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxnR0FBYyxjQUFjLENBQUM7QUFDN0IsZUFBYyw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL25neC1tYXNrLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXNrLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tYXNrLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWFzay5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21hc2stYXBwbGllci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jdXN0b20ta2V5Ym9hcmQtZXZlbnQnO1xuIl19
|
package/esm2015/lib/config.js
CHANGED
|
@@ -37,6 +37,8 @@ if (false) {
|
|
|
37
37
|
/** @type {?} */
|
|
38
38
|
IConfig.prototype.separatorLimit;
|
|
39
39
|
/** @type {?} */
|
|
40
|
+
IConfig.prototype.allowNegativeNumbers;
|
|
41
|
+
/** @type {?} */
|
|
40
42
|
IConfig.prototype.patterns;
|
|
41
43
|
}
|
|
42
44
|
/** @type {?} */
|
|
@@ -59,6 +61,7 @@ export const initialConfig = {
|
|
|
59
61
|
hiddenInput: undefined,
|
|
60
62
|
shownMaskExpression: '',
|
|
61
63
|
separatorLimit: '',
|
|
64
|
+
allowNegativeNumbers: false,
|
|
62
65
|
validation: true,
|
|
63
66
|
// tslint:disable-next-line: quotemark
|
|
64
67
|
specialCharacters: ['-', '/', '(', ')', '.', ':', ' ', '+', ',', '@', '[', ']', '"', "'"],
|
|
@@ -114,4 +117,4 @@ export const withoutValidation = [
|
|
|
114
117
|
'd0',
|
|
115
118
|
'M0',
|
|
116
119
|
];
|
|
117
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hc2svIiwic291cmNlcyI6WyJsaWIvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBRS9DLDZCQXVCQzs7O0lBdEJDLHlCQUFlOztJQUNmLHlCQUFlOztJQUNmLG9DQUEwQjs7SUFDMUIsZ0NBQXlCOztJQUN6QixrQ0FBeUI7O0lBQ3pCLCtCQUFzQjs7SUFDdEIsZ0NBQXVCOztJQUN2Qix1Q0FBNkI7O0lBQzdCLHNDQUE0Qjs7SUFDNUIsd0NBQTBDOztJQUMxQyxvQ0FBNEI7O0lBQzVCLDhCQUFpQzs7SUFDakMsNkJBQW9COztJQUNwQixpQ0FBdUI7O0lBQ3ZCLHVDQUE4Qjs7SUFDOUIsMkJBTUU7OztBQUlKLE1BQU0sT0FBTyxNQUFNLEdBQTRCLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQzs7QUFDM0UsTUFBTSxPQUFPLFVBQVUsR0FBNEIsSUFBSSxjQUFjLENBQUMsWUFBWSxDQUFDOztBQUNuRixNQUFNLE9BQU8sY0FBYyxHQUE0QixJQUFJLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQzs7QUFFM0YsTUFBTSxPQUFPLGFBQWEsR0FBWTtJQUNwQyxNQUFNLEVBQUUsRUFBRTtJQUNWLE1BQU0sRUFBRSxFQUFFO0lBQ1YsaUJBQWlCLEVBQUUsR0FBRztJQUN0QixhQUFhLEVBQUUsR0FBRztJQUNsQixlQUFlLEVBQUUsS0FBSztJQUN0QixZQUFZLEVBQUUsS0FBSztJQUNuQixhQUFhLEVBQUUsS0FBSztJQUNwQixvQkFBb0IsRUFBRSxHQUFHO0lBQ3pCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsV0FBVyxFQUFFLFNBQVM7SUFDdEIsbUJBQW1CLEVBQUUsRUFBRTtJQUN2QixjQUFjLEVBQUUsRUFBRTtJQUNsQixvQkFBb0IsRUFBRSxLQUFLO0lBQzNCLFVBQVUsRUFBRSxJQUFJOztJQUVoQixpQkFBaUIsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFDekYsUUFBUSxFQUFFO1FBQ1IsR0FBRyxFQUFFO1lBQ0gsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztTQUMzQjtRQUNELEdBQUcsRUFBRTtZQUNILE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDMUIsUUFBUSxFQUFFLElBQUk7U0FDZjtRQUNELENBQUMsRUFBRTtZQUNELE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDMUIsTUFBTSxFQUFFLEdBQUc7U0FDWjtRQUNELENBQUMsRUFBRTtZQUNELE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUM7U0FDbkM7UUFDRCxDQUFDLEVBQUU7WUFDRCxPQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDO1NBQ2hDO1FBQ0QsQ0FBQyxFQUFFO1lBQ0QsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztTQUMzQjtRQUNELENBQUMsRUFBRTtZQUNELE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDM0I7UUFDRCxDQUFDLEVBQUU7WUFDRCxPQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQzNCO1FBQ0QsQ0FBQyxFQUFFO1lBQ0QsT0FBTyxFQUFFLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQztTQUMzQjtRQUNELENBQUMsRUFBRTtZQUNELE9BQU8sRUFBRSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDM0I7UUFDRCxDQUFDLEVBQUU7WUFDRCxPQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQzNCO0tBQ0Y7Q0FDRjs7QUFFRCxNQUFNLE9BQU8sU0FBUyxHQUFhLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7O0FBRWpFLE1BQU0sT0FBTyxpQkFBaUIsR0FBYTtJQUN6QyxTQUFTO0lBQ1QsSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osV0FBVztJQUNYLFlBQVk7SUFDWixPQUFPO0lBQ1AsSUFBSTtJQUNKLElBQUk7Q0FDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmZpZyB7XG4gIHN1ZmZpeDogc3RyaW5nO1xuICBwcmVmaXg6IHN0cmluZztcbiAgdGhvdXNhbmRTZXBhcmF0b3I6IHN0cmluZztcbiAgZGVjaW1hbE1hcmtlcjogJy4nIHwgJywnO1xuICBjbGVhcklmTm90TWF0Y2g6IGJvb2xlYW47XG4gIHNob3dUZW1wbGF0ZTogYm9vbGVhbjtcbiAgc2hvd01hc2tUeXBlZDogYm9vbGVhbjtcbiAgcGxhY2VIb2xkZXJDaGFyYWN0ZXI6IHN0cmluZztcbiAgc2hvd25NYXNrRXhwcmVzc2lvbjogc3RyaW5nO1xuICBkcm9wU3BlY2lhbENoYXJhY3RlcnM6IGJvb2xlYW4gfCBzdHJpbmdbXTtcbiAgc3BlY2lhbENoYXJhY3RlcnM6IHN0cmluZ1tdO1xuICBoaWRkZW5JbnB1dDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgdmFsaWRhdGlvbjogYm9vbGVhbjtcbiAgc2VwYXJhdG9yTGltaXQ6IHN0cmluZztcbiAgYWxsb3dOZWdhdGl2ZU51bWJlcnM6IGJvb2xlYW47XG4gIHBhdHRlcm5zOiB7XG4gICAgW2NoYXJhY3Rlcjogc3RyaW5nXToge1xuICAgICAgcGF0dGVybjogUmVnRXhwO1xuICAgICAgb3B0aW9uYWw/OiBib29sZWFuO1xuICAgICAgc3ltYm9sPzogc3RyaW5nO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIG9wdGlvbnNDb25maWcgPSBQYXJ0aWFsPElDb25maWc+O1xuZXhwb3J0IGNvbnN0IGNvbmZpZzogSW5qZWN0aW9uVG9rZW48SUNvbmZpZz4gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2NvbmZpZycpO1xuZXhwb3J0IGNvbnN0IE5FV19DT05GSUc6IEluamVjdGlvblRva2VuPElDb25maWc+ID0gbmV3IEluamVjdGlvblRva2VuKCdORVdfQ09ORklHJyk7XG5leHBvcnQgY29uc3QgSU5JVElBTF9DT05GSUc6IEluamVjdGlvblRva2VuPElDb25maWc+ID0gbmV3IEluamVjdGlvblRva2VuKCdJTklUSUFMX0NPTkZJRycpO1xuXG5leHBvcnQgY29uc3QgaW5pdGlhbENvbmZpZzogSUNvbmZpZyA9IHtcbiAgc3VmZml4OiAnJyxcbiAgcHJlZml4OiAnJyxcbiAgdGhvdXNhbmRTZXBhcmF0b3I6ICcgJyxcbiAgZGVjaW1hbE1hcmtlcjogJy4nLFxuICBjbGVhcklmTm90TWF0Y2g6IGZhbHNlLFxuICBzaG93VGVtcGxhdGU6IGZhbHNlLFxuICBzaG93TWFza1R5cGVkOiBmYWxzZSxcbiAgcGxhY2VIb2xkZXJDaGFyYWN0ZXI6ICdfJyxcbiAgZHJvcFNwZWNpYWxDaGFyYWN0ZXJzOiB0cnVlLFxuICBoaWRkZW5JbnB1dDogdW5kZWZpbmVkLFxuICBzaG93bk1hc2tFeHByZXNzaW9uOiAnJyxcbiAgc2VwYXJhdG9yTGltaXQ6ICcnLFxuICBhbGxvd05lZ2F0aXZlTnVtYmVyczogZmFsc2UsXG4gIHZhbGlkYXRpb246IHRydWUsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogcXVvdGVtYXJrXG4gIHNwZWNpYWxDaGFyYWN0ZXJzOiBbJy0nLCAnLycsICcoJywgJyknLCAnLicsICc6JywgJyAnLCAnKycsICcsJywgJ0AnLCAnWycsICddJywgJ1wiJywgXCInXCJdLFxuICBwYXR0ZXJuczoge1xuICAgICcwJzoge1xuICAgICAgcGF0dGVybjogbmV3IFJlZ0V4cCgnXFxcXGQnKSxcbiAgICB9LFxuICAgICc5Jzoge1xuICAgICAgcGF0dGVybjogbmV3IFJlZ0V4cCgnXFxcXGQnKSxcbiAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgIH0sXG4gICAgWDoge1xuICAgICAgcGF0dGVybjogbmV3IFJlZ0V4cCgnXFxcXGQnKSxcbiAgICAgIHN5bWJvbDogJyonLFxuICAgIH0sXG4gICAgQToge1xuICAgICAgcGF0dGVybjogbmV3IFJlZ0V4cCgnW2EtekEtWjAtOV0nKSxcbiAgICB9LFxuICAgIFM6IHtcbiAgICAgIHBhdHRlcm46IG5ldyBSZWdFeHAoJ1thLXpBLVpdJyksXG4gICAgfSxcbiAgICBkOiB7XG4gICAgICBwYXR0ZXJuOiBuZXcgUmVnRXhwKCdcXFxcZCcpLFxuICAgIH0sXG4gICAgbToge1xuICAgICAgcGF0dGVybjogbmV3IFJlZ0V4cCgnXFxcXGQnKSxcbiAgICB9LFxuICAgIE06IHtcbiAgICAgIHBhdHRlcm46IG5ldyBSZWdFeHAoJ1xcXFxkJyksXG4gICAgfSxcbiAgICBIOiB7XG4gICAgICBwYXR0ZXJuOiBuZXcgUmVnRXhwKCdcXFxcZCcpLFxuICAgIH0sXG4gICAgaDoge1xuICAgICAgcGF0dGVybjogbmV3IFJlZ0V4cCgnXFxcXGQnKSxcbiAgICB9LFxuICAgIHM6IHtcbiAgICAgIHBhdHRlcm46IG5ldyBSZWdFeHAoJ1xcXFxkJyksXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCB0aW1lTWFza3M6IHN0cmluZ1tdID0gWydIaDptMDpzMCcsICdIaDptMCcsICdtMDpzMCddO1xuXG5leHBvcnQgY29uc3Qgd2l0aG91dFZhbGlkYXRpb246IHN0cmluZ1tdID0gW1xuICAncGVyY2VudCcsXG4gICdIaCcsXG4gICdzMCcsXG4gICdtMCcsXG4gICdzZXBhcmF0b3InLFxuICAnZDAvTTAvMDAwMCcsXG4gICdkMC9NMCcsXG4gICdkMCcsXG4gICdNMCcsXG5dO1xuIl19
|