{"version":3,"file":"primeng-inputmask.mjs","sources":["../../src/app/components/inputmask/inputmask.ts","../../src/app/components/inputmask/primeng-inputmask.ts"],"sourcesContent":["/*\n    Port of jQuery MaskedInput by DigitalBush as a Native Angular2 Component in Typescript without jQuery\n    https://github.com/digitalBush/jquery.maskedinput/\n\n    Copyright (c) 2007-2014 Josh Bush (digitalbush.com)\n\n    Permission is hereby granted, free of charge, to any person\n    obtaining a copy of this software and associated documentation\n    files (the \"Software\"), to deal in the Software without\n    restriction, including without limitation the rights to use,\n    copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the\n    Software is furnished to do so, subject to the following\n    conditions:\n\n    The above copyright notice and this permission notice shall be\n    included in all copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n    OTHER DEALINGS IN THE SOFTWARE.\n*/\nimport {NgModule,Component,ElementRef,OnInit,Input,forwardRef,Output,EventEmitter,ViewChild,ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {DomHandler} from 'primeng/dom';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {NG_VALUE_ACCESSOR, ControlValueAccessor} from '@angular/forms';\n\nexport const INPUTMASK_VALUE_ACCESSOR: any = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => InputMask),\n  multi: true\n};\n\n@Component({\n    selector: 'p-inputMask',\n    template: `<input #input pInputText class=\"p-inputmask\" [attr.id]=\"inputId\" [attr.type]=\"type\" [attr.name]=\"name\" [ngStyle]=\"style\" [ngClass]=\"styleClass\" [attr.placeholder]=\"placeholder\" [attr.title]=\"title\"\n        [attr.size]=\"size\" [attr.autocomplete]=\"autocomplete\" [attr.maxlength]=\"maxlength\" [attr.tabindex]=\"tabindex\" [attr.aria-label]=\"ariaLabel\" [attr.aria-required]=\"ariaRequired\" [disabled]=\"disabled\" [readonly]=\"readonly\" [attr.required]=\"required\"\n        (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\" (keydown)=\"onInputKeydown($event)\" (keypress)=\"onKeyPress($event)\" [attr.autofocus]=\"autoFocus\"\n        (input)=\"onInputChange($event)\" (paste)=\"handleInputChange($event)\">`,\n    host: {\n        'class': 'p-element',\n        '[class.p-inputwrapper-filled]': 'filled',\n        '[class.p-inputwrapper-focus]': 'focused'\n    },\n    providers: [INPUTMASK_VALUE_ACCESSOR],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None\n})\nexport class InputMask implements OnInit,ControlValueAccessor {\n\n    @Input() type: string = 'text';\n\n    @Input() slotChar: string = '_';\n\n    @Input() autoClear: boolean = true;\n\n    @Input() style: any;\n\n    @Input() inputId: string;\n\n    @Input() styleClass: string;\n\n    @Input() placeholder: string;\n\n    @Input() size: number;\n\n    @Input() maxlength: number;\n\n    @Input() tabindex: string;\n\n    @Input() title: string;\n\n    @Input() ariaLabel: string;\n\n    @Input() ariaRequired: boolean;\n\n    @Input() disabled: boolean;\n\n    @Input() readonly: boolean;\n\n    @Input() unmask: boolean;\n\n    @Input() name: string;\n\n    @Input() required: boolean;\n\n    @Input() characterPattern: string = '[A-Za-z]';\n\n    @Input() autoFocus: boolean;\n\n    @Input() autocomplete: string;\n\n    @ViewChild('input', { static: true }) inputViewChild: ElementRef;\n\n    @Output() onComplete: EventEmitter<any> = new EventEmitter();\n\n    @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n    @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n    @Output() onInput: EventEmitter<any> = new EventEmitter();\n\n    @Output() onKeydown: EventEmitter<any> = new EventEmitter();\n\n    value: any;\n\n    _mask: string;\n\n    onModelChange: Function = () => {};\n\n    onModelTouched: Function = () => {};\n\n    input: HTMLInputElement;\n\n    filled: boolean;\n\n    defs: any;\n\n    tests: any[];\n\n    partialPosition: any;\n\n    firstNonMaskPos: number;\n\n    lastRequiredNonMaskPos: any;\n\n    len: number;\n\n    oldVal: string;\n\n    buffer: any;\n\n    defaultBuffer: string;\n\n    focusText: string;\n\n    caretTimeoutId: any;\n\n    androidChrome: boolean;\n\n    focused: boolean;\n\n    constructor(public el: ElementRef, private cd: ChangeDetectorRef) {}\n\n    ngOnInit() {\n        let ua = DomHandler.getUserAgent();\n        this.androidChrome = /chrome/i.test(ua) && /android/i.test(ua);\n\n        this.initMask();\n    }\n\n    @Input() get mask(): string {\n        return this._mask;\n    }\n\n    set mask(val:string) {\n        this._mask = val;\n\n        this.initMask();\n        this.writeValue('');\n        this.onModelChange(this.value);\n    }\n\n    initMask() {\n        this.tests = [];\n        this.partialPosition = this.mask.length;\n        this.len = this.mask.length;\n        this.firstNonMaskPos = null;\n        this.defs = {\n            '9': '[0-9]',\n            'a': this.characterPattern,\n            '*': `${this.characterPattern}|[0-9]`\n        };\n\n        let maskTokens = this.mask.split('');\n        for(let i = 0; i < maskTokens.length; i++) {\n            let c = maskTokens[i];\n            if (c == '?') {\n\t\t\t\tthis.len--;\n\t\t\t\tthis.partialPosition = i;\n\t\t\t}\n            else if (this.defs[c]) {\n\t\t\t\tthis.tests.push(new RegExp(this.defs[c]));\n\t\t\t\tif (this.firstNonMaskPos === null) {\n\t                this.firstNonMaskPos = this.tests.length - 1;\n\t\t\t\t}\n                if (i < this.partialPosition){\n                    this.lastRequiredNonMaskPos = this.tests.length - 1;\n                }\n\t\t\t}\n            else {\n\t\t\t\tthis.tests.push(null);\n\t\t\t}\n        }\n\n        this.buffer = [];\n        for(let i = 0; i < maskTokens.length; i++) {\n            let c = maskTokens[i];\n            if (c != '?') {\n                if (this.defs[c])\n                    this.buffer.push(this.getPlaceholder(i));\n                else\n                    this.buffer.push(c);\n            }\n        }\n        this.defaultBuffer = this.buffer.join('');\n    }\n\n    writeValue(value: any) : void {\n        this.value = value;\n\n        if (this.inputViewChild && this.inputViewChild.nativeElement) {\n            if (this.value == undefined || this.value == null)\n                this.inputViewChild.nativeElement.value = '';\n            else\n                this.inputViewChild.nativeElement.value = this.value;\n\n            this.checkVal();\n            this.focusText = this.inputViewChild.nativeElement.value;\n            this.updateFilledState();\n        }\n    }\n\n    registerOnChange(fn: Function): void {\n        this.onModelChange = fn;\n    }\n\n    registerOnTouched(fn: Function): void {\n        this.onModelTouched = fn;\n    }\n\n    setDisabledState(val: boolean): void {\n        this.disabled = val;\n        this.cd.markForCheck();\n    }\n\n    caret(first?: number, last?: number) {\n        let range, begin, end;\n\n        if (!this.inputViewChild.nativeElement.offsetParent||this.inputViewChild.nativeElement !== this.inputViewChild.nativeElement.ownerDocument.activeElement) {\n            return;\n        }\n\n        if (typeof first == 'number') {\n            begin = first;\n            end = (typeof last === 'number') ? last : begin;\n            if (this.inputViewChild.nativeElement.setSelectionRange) {\n                this.inputViewChild.nativeElement.setSelectionRange(begin, end);\n            }\n            else if (this.inputViewChild.nativeElement['createTextRange']) {\n                range = this.inputViewChild.nativeElement['createTextRange']();\n                range.collapse(true);\n                range.moveEnd('character', end);\n                range.moveStart('character', begin);\n                range.select();\n            }\n        }\n        else {\n            if (this.inputViewChild.nativeElement.setSelectionRange) {\n    \t\t\tbegin = this.inputViewChild.nativeElement.selectionStart;\n    \t\t\tend = this.inputViewChild.nativeElement.selectionEnd;\n    \t\t}\n            else if (document['selection'] && document['selection'].createRange) {\n    \t\t\trange = document['selection'].createRange();\n    \t\t\tbegin = 0 - range.duplicate().moveStart('character', -100000);\n    \t\t\tend = begin + range.text.length;\n    \t\t}\n\n    \t\treturn {begin: begin, end: end};\n        }\n    }\n\n    isCompleted(): boolean {\n        let completed: boolean;\n        for (let i = this.firstNonMaskPos; i <= this.lastRequiredNonMaskPos; i++) {\n            if (this.tests[i] && this.buffer[i] === this.getPlaceholder(i)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    getPlaceholder(i: number) {\n        if (i < this.slotChar.length) {\n            return this.slotChar.charAt(i);\n        }\n        return this.slotChar.charAt(0);\n    }\n\n    seekNext(pos) {\n        while (++pos < this.len && !this.tests[pos]);\n        return pos;\n    }\n\n    seekPrev(pos) {\n        while (--pos >= 0 && !this.tests[pos]);\n        return pos;\n    }\n\n    shiftL(begin:number,end:number) {\n        let i, j;\n\n        if (begin<0) {\n            return;\n        }\n\n        for (i = begin, j = this.seekNext(end); i < this.len; i++) {\n            if (this.tests[i]) {\n                if (j < this.len && this.tests[i].test(this.buffer[j])) {\n                    this.buffer[i] = this.buffer[j];\n                    this.buffer[j] = this.getPlaceholder(j);\n                } else {\n                    break;\n                }\n\n                j = this.seekNext(j);\n            }\n        }\n        this.writeBuffer();\n        this.caret(Math.max(this.firstNonMaskPos, begin));\n    }\n\n    shiftR(pos) {\n        let i, c, j, t;\n\n        for (i = pos, c = this.getPlaceholder(pos); i < this.len; i++) {\n            if (this.tests[i]) {\n                j = this.seekNext(i);\n                t = this.buffer[i];\n                this.buffer[i] = c;\n                if (j < this.len && this.tests[j].test(t)) {\n                    c = t;\n                } else {\n                    break;\n                }\n            }\n        }\n    }\n\n    handleAndroidInput(e) {\n        var curVal = this.inputViewChild.nativeElement.value;\n        var pos = this.caret();\n        if (this.oldVal && this.oldVal.length && this.oldVal.length > curVal.length ) {\n            // a deletion or backspace happened\n            this.checkVal(true);\n            while (pos.begin > 0 && !this.tests[pos.begin-1])\n                  pos.begin--;\n            if (pos.begin === 0)\n            {\n               while (pos.begin < this.firstNonMaskPos && !this.tests[pos.begin])\n                  pos.begin++;\n            }\n\n            setTimeout(() => {\n                this.caret(pos.begin, pos.begin);\n                this.updateModel(e);\n                if (this.isCompleted()) {\n                    this.onComplete.emit();\n                }\n            }, 0);\n        }\n        else {\n            this.checkVal(true);\n            while (pos.begin < this.len && !this.tests[pos.begin])\n                pos.begin++;\n\n            setTimeout(() => {\n                this.caret(pos.begin, pos.begin);\n                this.updateModel(e);\n                if (this.isCompleted()) {\n                    this.onComplete.emit();\n                }\n            }, 0);\n        }\n    }\n\n    onInputBlur(e) {\n        this.focused = false;\n        this.onModelTouched();\n        this.checkVal();\n        this.updateFilledState();\n        this.onBlur.emit(e);\n\n        if (this.inputViewChild.nativeElement.value != this.focusText || this.inputViewChild.nativeElement.value != this.value) {\n            this.updateModel(e);\n            let event = document.createEvent('HTMLEvents');\n            event.initEvent('change', true, false);\n            this.inputViewChild.nativeElement.dispatchEvent(event);\n        }\n    }\n\n    onInputKeydown(e) {\n        if (this.readonly) {\n            return;\n        }\n\n        let k = e.which||e.keyCode,\n            pos,\n            begin,\n            end;\n        let iPhone = /iphone/i.test(DomHandler.getUserAgent());\n        this.oldVal = this.inputViewChild.nativeElement.value;\n\n        this.onKeydown.emit(e);\n\n        //backspace, delete, and escape get special treatment\n        if (k === 8 || k === 46 || (iPhone && k === 127)) {\n            pos = this.caret();\n            begin = pos.begin;\n            end = pos.end;\n\n            if (end - begin === 0) {\n                begin=k!==46?this.seekPrev(begin):(end=this.seekNext(begin-1));\n                end=k===46?this.seekNext(end):end;\n            }\n\n            this.clearBuffer(begin, end);\n\t\t\tthis.shiftL(begin, end - 1);\n            this.updateModel(e);\n            this.onInput.emit(e);\n\n            e.preventDefault();\n        }\n        else if ( k === 13 ) { // enter\n            this.onInputBlur(e);\n            this.updateModel(e);\n        }\n        else if (k === 27) { // escape\n            this.inputViewChild.nativeElement.value = this.focusText;\n            this.caret(0, this.checkVal());\n            this.updateModel(e);\n\n            e.preventDefault();\n        }\n    }\n\n    onKeyPress(e) {\n        if (this.readonly){\n            return;\n        }\n\n        var k = e.which || e.keyCode,\n            pos = this.caret(),\n            p,\n            c,\n            next,\n            completed;\n\n        if (e.ctrlKey || e.altKey || e.metaKey || k < 32  || (k > 34 && k < 41)) {//Ignore\n            return;\n        } else if ( k && k !== 13 ) {\n            if (pos.end - pos.begin !== 0){\n                this.clearBuffer(pos.begin, pos.end);\n                this.shiftL(pos.begin, pos.end-1);\n            }\n\n            p = this.seekNext(pos.begin - 1);\n            if (p < this.len) {\n                c = String.fromCharCode(k);\n                if (this.tests[p].test(c)) {\n                    this.shiftR(p);\n\n                    this.buffer[p] = c;\n                    this.writeBuffer();\n                    next = this.seekNext(p);\n\n                    if (/android/i.test(DomHandler.getUserAgent())) {\n                        //Path for CSP Violation on FireFox OS 1.1\n                        let proxy = () => {\n                            this.caret(next);\n                        };\n\n                        setTimeout(proxy,0);\n                    }\n                    else {\n                        this.caret(next);\n                    }\n\n                    if (pos.begin <= this.lastRequiredNonMaskPos) {\n                        completed = this.isCompleted();\n                    }\n\n                    this.onInput.emit(e);\n                }\n            }\n            e.preventDefault();\n        }\n\n        this.updateModel(e);\n\n        this.updateFilledState();\n\n        if (completed) {\n            this.onComplete.emit();\n        }\n    }\n\n    clearBuffer(start, end) {\n        let i;\n        for (i = start; i < end && i < this.len; i++) {\n            if (this.tests[i]) {\n                this.buffer[i] = this.getPlaceholder(i);\n            }\n        }\n    }\n\n    writeBuffer() {\n        this.inputViewChild.nativeElement.value = this.buffer.join('');\n    }\n\n    checkVal(allow?: boolean) {\n        //try to place characters where they belong\n        let test = this.inputViewChild.nativeElement.value,\n            lastMatch = -1,\n            i,\n            c,\n            pos;\n\n        for (i = 0, pos = 0; i < this.len; i++) {\n            if (this.tests[i]) {\n                this.buffer[i] = this.getPlaceholder(i);\n                while (pos++ < test.length) {\n                    c = test.charAt(pos - 1);\n                    if (this.tests[i].test(c)) {\n                        this.buffer[i] = c;\n                        lastMatch = i;\n                        break;\n                    }\n                }\n                if (pos > test.length) {\n                    this.clearBuffer(i + 1, this.len);\n                    break;\n                }\n            } else {\n                if (this.buffer[i] === test.charAt(pos)) {\n                    pos++;\n                }\n                if ( i < this.partialPosition){\n                    lastMatch = i;\n                }\n            }\n        }\n        if (allow) {\n            this.writeBuffer();\n        } else if (lastMatch + 1 < this.partialPosition) {\n            if (this.autoClear || this.buffer.join('') === this.defaultBuffer) {\n                // Invalid value. Remove it and replace it with the\n                // mask, which is the default behavior.\n                if (this.inputViewChild.nativeElement.value) this.inputViewChild.nativeElement.value = '';\n                this.clearBuffer(0, this.len);\n            } else {\n                // Invalid value, but we opt to show the value to the\n                // user and allow them to correct their mistake.\n                this.writeBuffer();\n            }\n        } else {\n            this.writeBuffer();\n            this.inputViewChild.nativeElement.value = this.inputViewChild.nativeElement.value.substring(0, lastMatch + 1);\n        }\n        return (this.partialPosition ? i : this.firstNonMaskPos);\n    }\n\n    onInputFocus(event) {\n        if (this.readonly){\n            return;\n        }\n\n        this.focused = true;\n\n        clearTimeout(this.caretTimeoutId);\n        let pos;\n\n        this.focusText = this.inputViewChild.nativeElement.value;\n\n        pos = this.checkVal();\n\n        this.caretTimeoutId = setTimeout(() => {\n            if (this.inputViewChild.nativeElement !== this.inputViewChild.nativeElement.ownerDocument.activeElement){\n                return;\n            }\n            this.writeBuffer();\n            if (pos == this.mask.replace(\"?\",\"\").length) {\n                this.caret(0, pos);\n            } else {\n                this.caret(pos);\n            }\n        }, 10);\n\n        this.onFocus.emit(event);\n    }\n\n    onInputChange(event) {\n        if (this.androidChrome)\n            this.handleAndroidInput(event);\n        else\n            this.handleInputChange(event);\n\n        this.onInput.emit(event);\n    }\n\n    handleInputChange(event) {\n        if (this.readonly){\n            return;\n        }\n\n        setTimeout(() => {\n            var pos = this.checkVal(true);\n            this.caret(pos);\n            this.updateModel(event);\n            if (this.isCompleted()) {\n                this.onComplete.emit();\n            }\n        }, 0);\n    }\n\n    getUnmaskedValue() {\n        let unmaskedBuffer = [];\n        for(let i = 0; i < this.buffer.length; i++) {\n            let c = this.buffer[i];\n            if (this.tests[i] && c != this.getPlaceholder(i)) {\n                unmaskedBuffer.push(c);\n            }\n        }\n\n        return unmaskedBuffer.join('');\n    }\n\n    updateModel(e) {\n        const updatedValue = this.unmask ? this.getUnmaskedValue() : e.target.value;\n        if (updatedValue !== null || updatedValue !== undefined) {\n            this.value = updatedValue;\n            this.onModelChange(this.value);\n        }\n    }\n\n    updateFilledState() {\n        this.filled = this.inputViewChild.nativeElement && this.inputViewChild.nativeElement.value != '';\n    }\n\n    focus() {\n        this.inputViewChild.nativeElement.focus();\n    }\n}\n\n@NgModule({\n    imports: [CommonModule,InputTextModule],\n    exports: [InputMask],\n    declarations: [InputMask]\n})\nexport class InputMaskModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}