{"version":3,"file":"ngx-number-format.mjs","sources":["../../../src/ngx-number-format/lib/ngx-number-format.service.ts","../../../src/ngx-number-format/lib/input.handler.ts","../../../src/ngx-number-format/lib/ngx-number-format.directive.ts","../../../src/ngx-number-format/lib/ngx-number-format.module.ts","../../../src/ngx-number-format/public-api.ts","../../../src/ngx-number-format/ngx-number-format.ts"],"sourcesContent":["export class NgxNumberFormatService {\n\n    private _specialKeys: Array<string> = ['Backspace', 'Tab', 'End', 'Home', 'ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Enter', 'Delete'];\n\n    checkSpecialKey(_event: KeyboardEvent): boolean {\n        return this._specialKeys.indexOf(_event.key) !== -1\n            || (_event.keyCode === 65 && (_event.ctrlKey || _event.metaKey)) // Allow: Ctrl + A\n            || (_event.keyCode === 67 && (_event.ctrlKey || _event.metaKey)) // Allow: Ctrl + C\n            || (_event.keyCode === 86 && (_event.ctrlKey || _event.metaKey)) // Allow: Ctrl + V\n            || (_event.keyCode === 88 && (_event.ctrlKey || _event.metaKey)); // Allow: Ctrl + X\n    }\n\n    checkCursorAtSamePlace(_formElement: HTMLInputElement): boolean {\n        return _formElement.selectionStart == _formElement.selectionEnd;\n    }\n\n    removeLeadingZero(_value: string): string {\n        return Number(_value).toString();\n    }\n\n    removeComma(_value: string): string {\n        return _value.replace(/,/g, '');\n    }\n\n    removeMinusSign(_value: string): string {\n        return _value.replace(/-/g, '');\n    }\n\n    applyCommaFormat(_value: string): string {\n        return _value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n    }\n\n    autoFillDecimal(_value: string, _decimal: number, _format: boolean): string {\n        _value = Number(this.removeComma(_value)).toFixed(_decimal).toString();\n        if (_format) _value = this.applyCommaFormat(_value);\n        if (_decimal > 0) _value = _value.split(\".\")[0] + '.' + this.removeComma(_value.split(\".\")[1]);\n        return _value;\n    }\n\n    getRawValue(_value: string): string {\n        let returnVal: string;\n        if (_value == null || _value.trim() === '') returnVal = '';\n        else returnVal = this.removeLeadingZero(this.removeComma(this.getNumericPart(_value))) + this.getDecimalPart(_value);\n        return returnVal;\n    }\n\n    getNumericPart(_value: string): string {\n        let returnVal: string = '';\n        let splitValue: string[] = _value.split('.');\n        returnVal = splitValue[0];\n        return returnVal;\n    }\n\n    getDecimalPart(_value: string): string {\n        let returnVal: string = '';\n        let splitValue: string[] = _value.split('.');\n        if (splitValue.length > 1) returnVal = `.${splitValue[1]}`\n        return returnVal;\n    }\n\n    getLastCharacterFromCursorAtFrontDirection(_formElement: HTMLInputElement): string {\n        return _formElement.value.substring(_formElement.selectionStart - 1,_formElement.selectionStart);\n    }\n\n    getLastCharacterFromCursorAtBackDirection(_formElement: HTMLInputElement): string {\n        return _formElement.value.substring(_formElement.selectionEnd, _formElement.selectionEnd + 1);\n    }\n\n    detectComma(_value: string): boolean {\n        return _value.indexOf(',') !== -1;\n    }\n\n    detectDecimalPoint(_value: string): boolean {\n        return _value.indexOf('.') !== -1;\n    }\n\n    detectMinusSignOnFirst(_value: string): boolean {\n        return _value.indexOf('-') == 0;\n    }\n\n}\n","import { NgxNumberFormatService } from './ngx-number-format.service';\nimport { Renderer2 } from '@angular/core';\n\nexport class InputHandler {\n\n    private _nfs: NgxNumberFormatService;\n    private _onModelChange: Function;\n    private _onModelTouched: Function;\n\n    private _formElement: HTMLInputElement;\n    private _renderer: Renderer2;\n    private _triggerBackspace: boolean;\n    private _triggerDelete: boolean;\n\n    private _pastSelectionStart: number;\n    private _pastValue: string;\n    private _pastValueDOM: string;\n\n    private _rawFormat: string;\n    private _formatComma: boolean;\n    private _maxDigit: number;\n    private _maxDecimal: number;\n    private _allowNegative: boolean = false;\n\n    private _regEx: RegExp;\n    private _regExNumber: RegExp = new RegExp(/^[0-9]*$/g);\n    private _regExNumberAndDecimal: RegExp = new RegExp(/^[0-9]+(\\.[0-9]*){0,1}$/g);\n    private _regExNumberForNegative: RegExp = new RegExp(/^-?[0-9]*$/g);\n    private _regExNumberAndDecimalForNegative: RegExp = new RegExp(/^-?[0-9]+(\\.[0-9]*){0,1}$/g);\n\n    constructor(_formElement: HTMLInputElement, _renderer: Renderer2) {\n        this._nfs = new NgxNumberFormatService();\n        this._formElement = _formElement;\n        this._renderer = _renderer;\n    }\n\n    setFormat(_value: string) {\n        this._rawFormat = _value;\n        this._formatComma = this._nfs.detectComma(_value);\n        this.setMaxDigitAndMaxDecimal(this._nfs.removeComma(_value));\n    }\n\n    setAllowNegative(_value: boolean) {\n        this._allowNegative = _value;\n        this.setMaxDigitAndMaxDecimal(this._nfs.removeComma(this._rawFormat));\n    }\n\n    handleKeyDown(_event: KeyboardEvent) {\n        if (_event.key != ',' && _event.key != '-') {\n            this._triggerBackspace = this.manageBackspaceKey(_event);\n            this._triggerDelete = this.manageDeleteKey(_event);\n            if (this._nfs.checkSpecialKey(_event)) return;\n            if (_event.key == '.' && this._nfs.getLastCharacterFromCursorAtBackDirection(this._formElement) == '.' && this._nfs.checkCursorAtSamePlace(this._formElement)) {\n                this.setCursorAt(this._formElement.selectionEnd + 1);\n                _event.preventDefault();\n                return;\n            }\n            if (this.validateByRegEx(_event.key)) {\n                this.setPastValue();\n                if (\n                    ((this._formElement.selectionStart == 0 && this._formElement.selectionEnd == 0) || (this._formElement.selectionStart == 1 && this._formElement.selectionEnd == 1)) && this._nfs.getNumericPart(this._nfs.getRawValue(this._formElement.value)) == '0') {\n                    _event.preventDefault();\n                    this.processFirstNumberWhenValueAtZero(_event);\n                } else if (this._nfs.checkCursorAtSamePlace(this._formElement) && this._nfs.detectDecimalPoint(this._formElement.value.substring(0, this._formElement.selectionStart)) && this._nfs.detectDecimalPoint(this._formElement.value) && this._formElement.selectionStart < this._formElement.value.length) {\n                    _event.preventDefault();\n                    this.processDecimalValue(_event);\n                }\n            } else {\n                _event.preventDefault();\n            }\n        } else if (_event.key == '-' && this._allowNegative) {\n            if (!this._formElement.value) {\n                this.setFormElementProperty(['value', '-']);\n            } else if (this._formElement.selectionStart == 0 && this._formElement.selectionEnd == this._formElement.value.length) {\n                this.setFormElementProperty(['value', '-']);\n                this._onModelChange('');\n            } else if (this._nfs.checkCursorAtSamePlace(this._formElement) && this._formElement.selectionStart == 0 && !this._nfs.detectMinusSignOnFirst(this._formElement.value)) {\n                let value = '-' + this._formElement.value;\n                this.applyMask(value);\n                this._onModelChange(this._nfs.getRawValue(value));\n                this.setCursorAt(1);\n            }\n            _event.preventDefault();\n        } else {\n            _event.preventDefault();\n        }\n    }\n\n    handleClick(_event: Event) {\n        this.setPastValue(_event);\n    }\n\n    handleInput(_event: Event) {\n        let value = (<HTMLInputElement>_event.target).value;\n        if ((value && !Number(this._nfs.removeComma(value)).toString().match(this._regEx)) || value.substr(0, 2) == '-0' || value.substr(0, 2) == '-.') {\n            this.setFormElementProperty(['value', '']);\n            this._onModelChange('');\n        } else {\n            if (this._triggerBackspace || this._triggerDelete) {\n                this._pastSelectionStart = this._formElement.selectionStart - 1;\n                this._pastValue = this._formElement.value;\n            }\n            this.processCursorPosition(this.applyMask(value));\n            this._onModelChange(this._nfs.getRawValue(value));\n        }\n    }\n\n    handleBlur(_event: Event) {\n        let value = (<HTMLInputElement>event.target).value;\n        if (value.length > 0 && value != '-') {\n            this.setFormElementProperty(['value', this._nfs.autoFillDecimal(value, this._maxDecimal, this._formatComma)]);\n        } else if (value == '-') {\n            this.setFormElementProperty(['value', '']);\n        }\n        this._onModelTouched();\n        if (value != this._pastValueDOM) this.fixBugOnMicrosoftEdgeAndIE(_event);\n    }\n\n    handleWriteValue(_value: string | number) {\n        if (_value != null && _value !== '') {\n            let valStr: string = '';\n            if (typeof (_value) === 'string') valStr = this._nfs.removeComma(_value);\n            else if (typeof (_value) === 'number') valStr = _value.toString();\n            this.applyMask(valStr);\n        } else if (typeof(_value) == 'object' || typeof(_value) == 'string') {\n            this.setFormElementProperty(['value', _value]);\n        }\n    }\n\n    applyMask(_value: string): string {\n        if (_value) {\n            _value = this._nfs.getRawValue(_value);\n            _value = this._nfs.autoFillDecimal(_value, this._maxDecimal, this._formatComma);\n        }\n        this.setFormElementProperty(['value', _value]);\n        return _value;\n    }\n\n    getOnModelChange(): Function {\n        return this._onModelChange;\n    }\n\n    setOnModelChange(callbackFunction: Function): void {\n        this._onModelChange = callbackFunction;\n    }\n\n    getOnModelTouched(): Function {\n        return this._onModelTouched;\n    }\n\n    setOnModelTouched(callbackFunction: Function) {\n        this._onModelTouched = callbackFunction;\n    }\n\n    private setCursorAt(_position: number) {\n        if (this._formElement.setSelectionRange) {\n            this._formElement.focus();\n            this._formElement.setSelectionRange(_position, _position);\n        }\n    }\n\n    private processCursorPosition(_value: string) {\n        let _pastValue = this._pastValue.substr(0, this._pastSelectionStart);\n        let _pastTotalComma = (_pastValue.match(/,/g) || []).length;\n        let _newValue = _value.substr(0, this._pastSelectionStart + 1);\n        let _newTotalComma = (_newValue.match(/,/g) || []).length;\n        this.setCursorAt(this._pastSelectionStart + 1 + (_newTotalComma - _pastTotalComma));\n    }\n\n    private setFormElementProperty([name, value]: [string, string | boolean]) {\n        this._renderer.setProperty(this._formElement, name, value);\n    }\n\n    private manageBackspaceKey(_event: KeyboardEvent): boolean {\n        if (_event.key == 'Backspace') {\n            let char: string = this._nfs.getLastCharacterFromCursorAtFrontDirection(this._formElement);\n            if (this._nfs.checkCursorAtSamePlace(this._formElement) && (char == ',' || char == '.')) {\n                this.setCursorAt(this._formElement.selectionStart - 1);\n                _event.preventDefault();\n            }\n            return true;\n        }\n        return false;\n    }\n\n    private manageDeleteKey(_event: KeyboardEvent): boolean {\n        if (_event.key == 'Delete') {\n            let char: string = this._nfs.getLastCharacterFromCursorAtBackDirection(this._formElement);\n            if (this._nfs.checkCursorAtSamePlace(this._formElement) && (char == ',' || char == '.')) {\n                this.setCursorAt(this._formElement.selectionEnd + 1);\n                _event.preventDefault();\n            }\n            return true;\n        }\n        return false;\n    }\n\n    private validateByRegEx(_key: string): boolean {\n        let current: string = this._formElement.value;\n        let firstPart: string = current.substring(0, this._formElement.selectionStart);\n        if (this._allowNegative && this._nfs.detectMinusSignOnFirst(firstPart)) firstPart = this._nfs.removeMinusSign(firstPart);\n        let positionForSecondPart: number = (this._nfs.detectDecimalPoint(current) && this._nfs.detectDecimalPoint(firstPart)) ? this._formElement.selectionEnd + 1 : this._formElement.selectionEnd;\n        let secondPart: string = current.substring(positionForSecondPart);\n        let next: string = this._nfs.removeComma(firstPart.concat(_key) + secondPart);\n\n        let value = next.split('.');\n        let minusSign: boolean = this._allowNegative && _key == '-' && this._formElement.selectionStart == 0 && this._formElement.selectionEnd == 0 && !this._nfs.detectMinusSignOnFirst(current);\n        if ((next && !String(next).match(this._regEx) || \n        (value[0].length > this._maxDigit && this._formElement.selectionStart == this._formElement.selectionEnd) || (this._maxDecimal > 0 && value.length == 2 && (value[1].length > this._maxDecimal && this._formElement.selectionStart == this._formElement.selectionEnd))) && !minusSign) {\n            return false\n        }\n        return true;\n    }\n\n    private setPastValue(_event?: Event) {\n        this._pastSelectionStart = this._formElement.selectionStart;\n        this._pastValue = this._formElement.value;\n        if (_event) this._pastValueDOM = (<HTMLInputElement>_event.target).value;\n    }\n\n    private setMaxDigitAndMaxDecimal(_value: string) {\n        if (this._nfs.detectDecimalPoint(_value)) {\n            let splitValue: string[] = _value.split('.');\n            this._maxDigit = splitValue[0].length;\n            this._maxDecimal = splitValue[1].length;\n            this._regEx = (!this._allowNegative) ? this._regExNumberAndDecimal : this._regExNumberAndDecimalForNegative;\n        } else {\n            this._maxDecimal = null;\n            this._maxDigit = _value.length;\n            this._regEx = (!this._allowNegative) ? this._regExNumber : this._regExNumberForNegative;\n        }\n    }\n\n    private fixBugOnMicrosoftEdgeAndIE(_event: Event) {\n        // Fix bug on Internet Explorer and Microsoft Edge not fire change event when set value to input element by javascript.\n        let isIEOrEdge = /msie\\s|trident\\/|edge\\//i.test(window.navigator.userAgent);\n        if (isIEOrEdge) {\n            var evt = document.createEvent(\"HTMLEvents\");\n            evt.initEvent(\"change\", false, true);\n            _event.target.dispatchEvent(evt);\n        }\n    }\n\n    private processFirstNumberWhenValueAtZero(_event: KeyboardEvent) {\n        let newValue: string = _event.key + this._nfs.getDecimalPart(this._formElement.value);\n        this.setFormElementProperty(['value', newValue]);\n        this._onModelChange(newValue);\n        this.setCursorAt(1);\n    }\n\n    private processDecimalValue(_event: KeyboardEvent) {\n        let selectionStart: number = this._formElement.selectionStart;\n        let newValue: string = this._formElement.value.substring(0, selectionStart) + _event.key + this._formElement.value.substring(selectionStart + 1);\n        this.setFormElementProperty(['value', newValue]);\n        this._onModelChange(this._nfs.getRawValue(newValue));\n        this.setCursorAt(selectionStart + 1);\n    }\n\n}","import { Directive, forwardRef, ElementRef, Input, HostListener, Renderer2, DoCheck } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { InputHandler } from './input.handler';\n\n@Directive({\n    selector: '[ngxNumberFormat]',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => NgxNumberFormatDirective),\n            multi: true\n        }\n    ]\n})\nexport class NgxNumberFormatDirective implements ControlValueAccessor {\n\n    private inputHandler: InputHandler;\n\n    constructor(private _el: ElementRef, private _renderer: Renderer2) {\n        this.inputHandler = new InputHandler(this._el.nativeElement, this._renderer);\n    }\n\n    @Input('ngxNumberFormat')\n    public set initialize(_format: string) {\n        this.inputHandler.setFormat(_format);\n    }\n\n    @Input('allowNegative')\n    public set allowNegative(_allow: boolean) {\n        this.inputHandler.setAllowNegative(_allow);\n    }\n\n    @HostListener('keydown', ['$event'])\n    onKeyDown(_event: KeyboardEvent) {\n        this.inputHandler.handleKeyDown(_event);\n    }\n\n    @HostListener('click', ['$event'])\n    onClick(_event: Event) {\n        this.inputHandler.handleClick(_event);\n    }\n\n    @HostListener('input', ['$event'])\n    onInput(_event: Event): void {\n        this.inputHandler.handleInput(_event);\n    }\n\n    @HostListener('blur', ['$event'])\n    onBlur(_event: Event): void {\n        this.inputHandler.handleBlur(_event);\n    }\n\n    writeValue(_value: string | number): void {\n        this.inputHandler.handleWriteValue(_value);\n    }\n\n    registerOnChange(_cb: Function): void {\n        this.inputHandler.setOnModelChange(_cb);\n    }\n\n    registerOnTouched(_cb: Function): void {\n        this.inputHandler.setOnModelTouched(_cb);\n    }\n\n    setDisabledState?(value: boolean): void {\n        this._el.nativeElement.disabled = value;\n    }\n\n}","import { NgModule } from '@angular/core';\nimport { NgxNumberFormatDirective } from './ngx-number-format.directive';\n\n\n\n@NgModule({\n  declarations: [NgxNumberFormatDirective],\n  exports: [NgxNumberFormatDirective]\n})\nexport class NgxNumberFormatModule { }\n","/*\n * Public API Surface of ngx-number-format\n */\n\nexport * from './lib/ngx-number-format.module';\nexport * from './lib/ngx-number-format.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}