UNPKG

58.1 kBSource Map (JSON)View Raw
1{"version":3,"file":"primeng-inputnumber.js","sources":["../../src/app/components/inputnumber/inputnumber.ts","../../src/app/components/inputnumber/primeng-inputnumber.ts"],"sourcesContent":["\nimport {NgModule,Component,ChangeDetectionStrategy, Input, ElementRef, ViewChild, OnInit, EventEmitter, Output, forwardRef, ViewEncapsulation, ChangeDetectorRef} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {InputTextModule} from 'primeng/inputtext';\nimport { ButtonModule } from 'primeng/button';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\n\nexport const INPUTNUMBER_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => InputNumber),\n multi: true\n};\n@Component({\n selector: 'p-inputNumber',\n template: `\n <span [ngClass]=\"{'p-inputnumber p-component': true,'p-inputnumber-buttons-stacked': this.showButtons && this.buttonLayout === 'stacked',\n 'p-inputnumber-buttons-horizontal': this.showButtons && this.buttonLayout === 'horizontal', 'p-inputnumber-buttons-vertical': this.showButtons && this.buttonLayout === 'vertical'}\"\n [ngStyle]=\"style\" [class]=\"styleClass\">\n <input #input [ngClass]=\"'p-inputnumber-input'\" [ngStyle]=\"inputStyle\" [class]=\"inputStyleClass\" pInputText [value]=\"formattedValue()\" [attr.placeholder]=\"placeholder\" [attr.title]=\"title\" [attr.id]=\"inputId\"\n [attr.size]=\"size\" [attr.name]=\"name\" [attr.autocomplete]=\"autocomplete\" [attr.maxlength]=\"maxlength\" [attr.tabindex]=\"tabindex\" [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"ariaRequired\" [disabled]=\"disabled\" [attr.required]=\"required\" [attr.aria-valumin]=\"min\" [attr.aria-valuemax]=\"max\"\n (input)=\"onUserInput($event)\" (keydown)=\"onInputKeyDown($event)\" (keypress)=\"onInputKeyPress($event)\" (paste)=\"onPaste($event)\" (click)=\"onInputClick()\"\n (focus)=\"onInputFocus($event)\" (blur)=\"onInputBlur($event)\">\n <span class=\"p-inputnumber-button-group\" *ngIf=\"showButtons && buttonLayout === 'stacked'\">\n <button type=\"button\" pButton [ngClass]=\"{'p-inputnumber-button p-inputnumber-button-up': true}\" [class]=\"incrementButtonClass\" [icon]=\"incrementButtonIcon\" [disabled]=\"disabled\"\n (mousedown)=\"this.onUpButtonMouseDown($event)\" (mouseup)=\"onUpButtonMouseUp()\" (mouseleave)=\"onUpButtonMouseLeave()\" (keydown)=\"onUpButtonKeyDown($event)\" (keyup)=\"onUpButtonKeyUp()\"></button>\n <button type=\"button\" pButton [ngClass]=\"{'p-inputnumber-button p-inputnumber-button-down': true}\" [class]=\"decrementButtonClass\" [icon]=\"decrementButtonIcon\" [disabled]=\"disabled\"\n (mousedown)=\"this.onDownButtonMouseDown($event)\" (mouseup)=\"onDownButtonMouseUp()\" (mouseleave)=\"onDownButtonMouseLeave()\" (keydown)=\"onDownButtonKeyDown($event)\" (keyup)=\"onDownButtonKeyUp()\"></button>\n </span>\n <button type=\"button\" pButton [ngClass]=\"{'p-inputnumber-button p-inputnumber-button-up': true}\" [class]=\"incrementButtonClass\" [icon]=\"incrementButtonIcon\" *ngIf=\"showButtons && buttonLayout !== 'stacked'\" [disabled]=\"disabled\"\n (mousedown)=\"this.onUpButtonMouseDown($event)\" (mouseup)=\"onUpButtonMouseUp()\" (mouseleave)=\"onUpButtonMouseLeave()\" (keydown)=\"onUpButtonKeyDown($event)\" (keyup)=\"onUpButtonKeyUp()\"></button>\n <button type=\"button\" pButton [ngClass]=\"{'p-inputnumber-button p-inputnumber-button-down': true}\" [class]=\"decrementButtonClass\" [icon]=\"decrementButtonIcon\" *ngIf=\"showButtons && buttonLayout !== 'stacked'\" [disabled]=\"disabled\"\n (mousedown)=\"this.onDownButtonMouseDown($event)\" (mouseup)=\"onDownButtonMouseUp()\" (mouseleave)=\"onDownButtonMouseLeave()\" (keydown)=\"onDownButtonKeyDown($event)\" (keyup)=\"onDownButtonKeyUp()\"></button>\n </span>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [INPUTNUMBER_VALUE_ACCESSOR],\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./inputnumber.css'],\n host: {\n '[class.p-inputwrapper-filled]': 'filled',\n '[class.p-inputwrapper-focus]': 'focused'\n }\n})\nexport class InputNumber implements OnInit,ControlValueAccessor {\n\n @Input() showButtons: boolean = false;\n\n @Input() format: boolean = true;\n\n @Input() buttonLayout: string = \"stacked\";\n\n @Input() disabled: boolean;\n\n @Input() inputId: string;\n\n @Input() styleClass: string;\n\n @Input() style: any;\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() name: string;\n\n @Input() required: boolean;\n\n @Input() autocomplete: string;\n\n @Input() min: number;\n\n @Input() max: number;\n\n @Input() incrementButtonClass: string;\n\n @Input() decrementButtonClass: string;\n\n @Input() incrementButtonIcon: string = 'pi pi-angle-up';\n\n @Input() decrementButtonIcon: string = 'pi pi-angle-down';\n\n @Input() step: number = 1;\n\n @Input() inputStyle: any;\n\n @Input() inputStyleClass: string;\n\n @ViewChild('input') input: ElementRef;\n\n @Output() onInput: EventEmitter<any> = new EventEmitter();\n\n @Output() onFocus: EventEmitter<any> = new EventEmitter();\n\n @Output() onBlur: EventEmitter<any> = new EventEmitter();\n\n value: number;\n\n onModelChange: Function = () => {};\n\n onModelTouched: Function = () => {};\n\n focused: boolean;\n\n initialized: boolean;\n\n groupChar: string = '';\n\n isSpecialChar: boolean;\n\n timer: any;\n\n lastValue: string;\n\n _numeral: any;\n\n numberFormat: any;\n\n _decimal: any;\n\n _group: any;\n\n _minusSign: any;\n\n _currency: any;\n\n _prefix: any;\n\n _suffix: any;\n\n _index: any;\n\n _localeOption: string;\n\n _localeMatcherOption: string;\n\n _modeOption: string = \"decimal\";\n\n _currencyOption: string;\n\n _currencyDisplayOption: string;\n\n _useGroupingOption: boolean = true;\n\n _minFractionDigitsOption: number;\n\n _maxFractionDigitsOption: number;\n\n _prefixOption: string;\n\n _suffixOption: string;\n\n @Input() get locale(): string {\n return this._localeOption;\n }\n\n set locale(localeOption: string) {\n this._localeOption = localeOption;\n this.updateConstructParser();\n }\n\n @Input() get localeMatcher(): string {\n return this._localeMatcherOption;\n }\n\n set localeMatcher(localeMatcherOption: string) {\n this._localeMatcherOption = localeMatcherOption;\n this.updateConstructParser();\n }\n\n @Input() get mode(): string {\n return this._modeOption;\n }\n\n set mode(modeOption: string) {\n this._modeOption = modeOption;\n this.updateConstructParser();\n }\n\n @Input() get currency(): string {\n return this._currencyOption;\n }\n\n set currency(currencyOption: string) {\n this._currencyOption = currencyOption;\n this.updateConstructParser();\n }\n\n @Input() get currencyDisplay(): string {\n return this._currencyDisplayOption;\n }\n\n set currencyDisplay(currencyDisplayOption: string) {\n this._currencyDisplayOption = currencyDisplayOption;\n this.updateConstructParser();\n }\n\n @Input() get useGrouping(): boolean {\n return this._useGroupingOption;\n }\n\n set useGrouping(useGroupingOption: boolean) {\n this._useGroupingOption = useGroupingOption;\n this.updateConstructParser();\n }\n\n @Input() get minFractionDigits(): number {\n return this._minFractionDigitsOption;\n }\n\n set minFractionDigits(minFractionDigitsOption: number) {\n this._minFractionDigitsOption = minFractionDigitsOption;\n this.updateConstructParser();\n }\n\n @Input() get maxFractionDigits(): number {\n return this._maxFractionDigitsOption;\n }\n\n set maxFractionDigits(maxFractionDigitsOption: number) {\n this._maxFractionDigitsOption = maxFractionDigitsOption;\n this.updateConstructParser();\n }\n\n @Input() get prefix(): string {\n return this._prefixOption;\n }\n\n set prefix(prefixOption: string) {\n this._prefixOption = prefixOption;\n this.updateConstructParser();\n }\n\n @Input() get suffix(): string {\n return this._suffixOption;\n }\n\n set suffix(suffixOption: string) {\n this._suffixOption = suffixOption;\n this.updateConstructParser();\n }\n\n constructor(public el: ElementRef, private cd: ChangeDetectorRef) { }\n\n ngOnInit() {\n this.constructParser();\n\n this.initialized = true;\n }\n\n getOptions() {\n return {\n localeMatcher: this.localeMatcher,\n style: this.mode,\n currency: this.currency,\n currencyDisplay: this.currencyDisplay,\n useGrouping: this.useGrouping,\n minimumFractionDigits: this.minFractionDigits,\n maximumFractionDigits: this.maxFractionDigits\n };\n }\n\n constructParser() {\n this.numberFormat = new Intl.NumberFormat(this.locale, this.getOptions());\n const numerals = [...new Intl.NumberFormat(this.locale, {useGrouping: false}).format(9876543210)].reverse();\n const index = new Map(numerals.map((d, i) => [d, i]));\n this._numeral = new RegExp(`[${numerals.join('')}]`, 'g');\n this._decimal = this.getDecimalExpression();\n this._group = this.getGroupingExpression();\n this._minusSign = this.getMinusSignExpression();\n this._currency = this.getCurrencyExpression();\n this._suffix = new RegExp(`${this.escapeRegExp(this.suffix||'')}`, 'g');\n this._prefix = new RegExp(`${this.escapeRegExp(this.prefix||'')}`, 'g');\n this._index = d => index.get(d);\n }\n\n updateConstructParser() {\n if (this.initialized) {\n this.constructParser();\n }\n }\n\n escapeRegExp(text) {\n return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n }\n\n getDecimalExpression() {\n const formatter = new Intl.NumberFormat(this.locale, {useGrouping: false});\n return new RegExp(`[${formatter.format(1.1).trim().replace(this._numeral, '')}]`, 'g');\n }\n\n getGroupingExpression() {\n const formatter = new Intl.NumberFormat(this.locale, {useGrouping: true});\n this.groupChar = formatter.format(1000000).trim().replace(this._numeral, '').charAt(0);\n return new RegExp(`[${this.groupChar}]`, 'g');\n }\n\n getMinusSignExpression() {\n const formatter = new Intl.NumberFormat(this.locale, {useGrouping: false});\n return new RegExp(`[${formatter.format(-1).trim().replace(this._numeral, '')}]`, 'g');\n }\n\n getCurrencyExpression() {\n if (this.currency) {\n const formatter = new Intl.NumberFormat(this.locale, {style: 'currency', currency: this.currency, currencyDisplay: this.currencyDisplay});\n return new RegExp(`[${formatter.format(1).replace(/\\s/g, '').replace(this._numeral, '').replace(this._decimal, '').replace(this._group, '')}]`, 'g');\n }\n\n return new RegExp(`[]`,'g');\n }\n\n formatValue(value) {\n if (value != null) {\n if (value === '-') { // Minus sign\n return value;\n }\n\n if (this.format) {\n let formatter = new Intl.NumberFormat(this.locale, this.getOptions());\n let formattedValue = formatter.format(value);\n if (this.prefix) {\n formattedValue = this.prefix + formattedValue;\n }\n\n if (this.suffix) {\n formattedValue = formattedValue + this.suffix;\n }\n\n return formattedValue;\n }\n\n return value;\n }\n\n return '';\n }\n\n parseValue(text) {\n let filteredText = text\n .replace(this._suffix, '')\n .replace(this._prefix, '')\n .trim()\n .replace(/\\s/g, '')\n .replace(this._currency, '')\n .replace(this._group, '')\n .replace(this._minusSign, '-')\n .replace(this._decimal, '.')\n .replace(this._numeral, this._index);\n\n if (filteredText) {\n if (filteredText === '-') // Minus sign\n return filteredText;\n\n let parsedValue = +filteredText;\n return isNaN(parsedValue) ? null : parsedValue;\n }\n\n return null;\n }\n\n repeat(event, interval, dir) {\n let i = interval || 500;\n\n this.clearTimer();\n this.timer = setTimeout(() => {\n this.repeat(event, 40, dir);\n }, i);\n\n this.spin(event, dir);\n }\n\n spin(event, dir) {\n let step = this.step * dir;\n let currentValue = this.parseValue(this.input.nativeElement.value) || 0;\n let newValue = this.validateValue(currentValue + step);\n if (this.maxlength && this.maxlength < this.formatValue(newValue).length) {\n return;\n }\n\n this.updateInput(newValue, null, 'spin');\n this.updateModel(event, newValue);\n\n this.handleOnInput(event, currentValue, newValue);\n }\n\n onUpButtonMouseDown(event) {\n this.input.nativeElement.focus();\n this.repeat(event, null, 1);\n event.preventDefault();\n }\n\n onUpButtonMouseUp() {\n this.clearTimer();\n }\n\n onUpButtonMouseLeave() {\n this.clearTimer();\n }\n\n onUpButtonKeyDown(event) {\n if (event.keyCode === 32 || event.keyCode === 13) {\n this.repeat(event, null, 1);\n }\n }\n\n onUpButtonKeyUp() {\n this.clearTimer();\n }\n\n onDownButtonMouseDown(event) {\n this.input.nativeElement.focus();\n this.repeat(event, null, -1);\n event.preventDefault();\n }\n\n onDownButtonMouseUp() {\n this.clearTimer();\n }\n\n onDownButtonMouseLeave() {\n this.clearTimer();\n }\n\n onDownButtonKeyUp() {\n this.clearTimer();\n }\n\n onDownButtonKeyDown(event) {\n if (event.keyCode === 32 || event.keyCode === 13) {\n this.repeat(event, null, -1);\n }\n }\n\n onUserInput(event) {\n if (this.isSpecialChar) {\n event.target.value = this.lastValue;\n }\n this.isSpecialChar = false;\n }\n\n onInputKeyDown(event) {\n this.lastValue = event.target.value;\n if (event.shiftKey || event.altKey) {\n this.isSpecialChar = true;\n return;\n }\n\n let selectionStart = event.target.selectionStart;\n let selectionEnd = event.target.selectionEnd;\n let inputValue = event.target.value;\n let newValueStr = null;\n\n if (event.altKey) {\n event.preventDefault();\n }\n\n switch (event.which) {\n //up\n case 38:\n this.spin(event, 1);\n event.preventDefault();\n break;\n\n //down\n case 40:\n this.spin(event, -1);\n event.preventDefault();\n break;\n\n //left\n case 37:\n if (!this.isNumeralChar(inputValue.charAt(selectionStart - 1))) {\n event.preventDefault();\n }\n break;\n\n //right\n case 39:\n if (!this.isNumeralChar(inputValue.charAt(selectionStart))) {\n event.preventDefault();\n }\n break;\n\n //backspace\n case 8: {\n event.preventDefault();\n\n if (selectionStart === selectionEnd) {\n let deleteChar = inputValue.charAt(selectionStart - 1);\n let decimalCharIndex = inputValue.search(this._decimal);\n this._decimal.lastIndex = 0;\n\n if (this.isNumeralChar(deleteChar)) {\n if (this._group.test(deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1);\n }\n else if (this._decimal.test(deleteChar)) {\n this._decimal.lastIndex = 0;\n this.input.nativeElement.setSelectionRange(selectionStart - 1, selectionStart - 1);\n }\n else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart);\n }\n else if (decimalCharIndex > 0 && decimalCharIndex === 1) {\n newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n }\n else {\n newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n }\n }\n\n this.updateValue(event, newValueStr, null, 'delete-single');\n }\n else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n\n break;\n }\n\n // del\n case 46:\n event.preventDefault();\n\n if (selectionStart === selectionEnd) {\n let deleteChar = inputValue.charAt(selectionStart);\n let decimalCharIndex = inputValue.search(this._decimal);\n this._decimal.lastIndex = 0;\n\n if (this.isNumeralChar(deleteChar)) {\n if (this._group.test(deleteChar)) {\n this._group.lastIndex = 0;\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2);\n }\n else if (this._decimal.test(deleteChar)) {\n this._decimal.lastIndex = 0;\n this.input.nativeElement.setSelectionRange(selectionStart + 1, selectionStart + 1);\n }\n else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1);\n }\n else if (decimalCharIndex > 0 && decimalCharIndex === 1) {\n newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1);\n newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n }\n else {\n newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n }\n }\n\n this.updateValue(event, newValueStr, null, 'delete-back-single');\n }\n else {\n newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, null, 'delete-range');\n }\n break;\n\n default:\n break;\n }\n }\n\n onInputKeyPress(event) {\n event.preventDefault();\n let code = event.which || event.keyCode;\n let char = String.fromCharCode(code);\n const isDecimalSign = this.isDecimalSign(char);\n const isMinusSign = this.isMinusSign(char);\n\n if ((48 <= code && code <= 57) || isMinusSign || isDecimalSign) {\n this.insert(event, char, { isDecimalSign, isMinusSign });\n }\n }\n\n onPaste(event) {\n event.preventDefault();\n let data = (event.clipboardData || window['clipboardData']).getData('Text');\n if (data) {\n let filteredData = this.parseValue(data);\n if (filteredData != null) {\n this.insert(event, filteredData.toString());\n }\n }\n }\n\n isMinusSign(char) {\n if (this._minusSign.test(char)) {\n this._minusSign.lastIndex = 0;\n return true;\n }\n\n return false;\n }\n\n isDecimalSign(char) {\n if (this._decimal.test(char)) {\n this._decimal.lastIndex = 0;\n return true;\n }\n\n return false;\n }\n\n insert(event, text, sign = { isDecimalSign: false, isMinusSign: false }) {\n let selectionStart = this.input.nativeElement.selectionStart;\n let selectionEnd = this.input.nativeElement.selectionEnd;\n let inputValue = this.input.nativeElement.value.trim();\n const decimalCharIndex = inputValue.search(this._decimal);\n this._decimal.lastIndex = 0;\n const minusCharIndex = inputValue.search(this._minusSign);\n this._minusSign.lastIndex = 0;\n let newValueStr;\n\n if (sign.isMinusSign) {\n if (selectionStart === 0) {\n newValueStr = inputValue;\n if (minusCharIndex === -1 || selectionEnd !== 0) {\n newValueStr = this.insertText(inputValue, text, 0, selectionEnd);\n }\n\n this.updateValue(event, newValueStr, text, 'insert');\n }\n }\n else if (sign.isDecimalSign) {\n if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) {\n this.updateValue(event, inputValue, text, 'insert');\n }\n else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n this.updateValue(event, newValueStr, text, 'insert');\n }\n }\n else {\n const maxFractionDigits = this.numberFormat.resolvedOptions().maximumFractionDigits;\n\n if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n if ((selectionStart + text.length - (decimalCharIndex + 1)) <= maxFractionDigits) {\n newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length);\n this.updateValue(event, newValueStr, text, 'insert');\n }\n }\n else {\n newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n const operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert';\n this.updateValue(event, newValueStr, text, operation);\n }\n }\n }\n\n insertText(value, text, start, end) {\n let textSplit = text.split('.');\n\n if (textSplit.length == 2) {\n const decimalCharIndex = value.slice(start, end).search(this._decimal);\n this._decimal.lastIndex = 0;\n return (decimalCharIndex > 0) ? value.slice(0, start) + this.formatValue(text) + value.slice(end) : value;\n }\n else if ((end - start) === value.length) {\n return this.formatValue(text);\n }\n else if (start === 0) {\n return text + value.slice(end);\n }\n else if (end === value.length) {\n return value.slice(0, start) + text;\n }\n else {\n return value.slice(0, start) + text + value.slice(end);\n }\n }\n\n deleteRange(value, start, end) {\n let newValueStr;\n\n if ((end - start) === value.length)\n newValueStr = '';\n else if (start === 0)\n newValueStr = value.slice(end);\n else if (end === value.length)\n newValueStr = value.slice(0, start);\n else\n newValueStr = value.slice(0, start) + value.slice(end);\n\n return newValueStr;\n }\n\n initCursor() {\n let selectionStart = this.input.nativeElement.selectionStart;\n let inputValue = this.input.nativeElement.value;\n let valueLength = inputValue.length;\n let index = null;\n\n let char = inputValue.charAt(selectionStart);\n if (this.isNumeralChar(char)) {\n return;\n }\n\n //left\n let i = selectionStart - 1;\n while (i >= 0) {\n char = inputValue.charAt(i);\n if (this.isNumeralChar(char)) {\n index = i;\n break;\n }\n else {\n i--;\n }\n }\n\n if (index !== null) {\n this.input.nativeElement.setSelectionRange(index + 1, index + 1);\n }\n else {\n i = selectionStart + 1;\n while (i < valueLength) {\n char = inputValue.charAt(i);\n if (this.isNumeralChar(char)) {\n index = i;\n break;\n }\n else {\n i++;\n }\n }\n\n if (index !== null) {\n this.input.nativeElement.setSelectionRange(index, index);\n }\n }\n }\n\n onInputClick() {\n this.initCursor();\n }\n\n isNumeralChar(char) {\n if (char.length === 1 && (this._numeral.test(char) || this._decimal.test(char) || this._group.test(char) || this._minusSign.test(char))) {\n this.resetRegex();\n return true;\n }\n\n return false;\n }\n\n resetRegex() {\n this._numeral.lastIndex = 0;\n this._decimal.lastIndex = 0;\n this._group.lastIndex = 0;\n this._minusSign.lastIndex = 0;\n }\n\n updateValue(event, valueStr, insertedValueStr, operation) {\n let currentValue = this.input.nativeElement.value;\n let newValue = null;\n\n if (valueStr != null) {\n newValue = this.parseValue(valueStr);\n this.updateInput(newValue, insertedValueStr, operation);\n }\n\n this.handleOnInput(event, currentValue, newValue);\n }\n\n handleOnInput(event, currentValue, newValue) {\n if (this.isValueChanged(currentValue, newValue)) {\n this.onInput.emit({ originalEvent: event, value: newValue });\n }\n }\n\n isValueChanged(currentValue, newValue) {\n if (newValue === null && currentValue !== null) {\n return true;\n }\n\n if (newValue != null) {\n let parsedCurrentValue = (typeof currentValue === 'string') ? this.parseValue(currentValue) : currentValue;\n return newValue !== parsedCurrentValue;\n }\n\n return false;\n }\n\n validateValue(value) {\n if (this.min !== null && value < this.min) {\n return this.min;\n }\n\n if (this.max !== null && value > this.max) {\n return this.max;\n }\n\n if (value === '-') { // Minus sign\n return null;\n }\n\n return value;\n }\n\n updateInput(value, insertedValueStr, operation) {\n let inputValue = this.input.nativeElement.value;\n let newValue = this.formatValue(value);\n let currentLength = inputValue.length;\n\n if (currentLength === 0) {\n this.input.nativeElement.value = newValue;\n this.input.nativeElement.setSelectionRange(0, 0);\n this.initCursor();\n const prefixLength = (this.prefix || '').length;\n const selectionEnd = prefixLength + insertedValueStr.length;\n this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n }\n else {\n let selectionStart = this.input.nativeElement.selectionStart;\n let selectionEnd = this.input.nativeElement.selectionEnd;\n if (this.maxlength && this.maxlength < newValue.length) {\n return;\n }\n\n this.input.nativeElement.value = newValue;\n let newLength = newValue.length;\n\n if (operation === 'range-insert') {\n const startValue = this.parseValue((inputValue || '').slice(0, selectionStart));\n const startValueStr = startValue !== null ? startValue.toString() : '';\n const startExpr = startValueStr.split('').join(`(${this.groupChar})?`);\n const sRegex = new RegExp(startExpr, 'g');\n sRegex.test(newValue);\n\n const tExpr = insertedValueStr.split('').join(`(${this.groupChar})?`);\n const tRegex = new RegExp(tExpr, 'g');\n tRegex.test(newValue.slice(sRegex.lastIndex));\n\n selectionEnd = sRegex.lastIndex + tRegex.lastIndex;\n this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n }\n else if (newLength === currentLength) {\n if (operation === 'insert' || operation === 'delete-back-single')\n this.input.nativeElement.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n else if (operation === 'delete-single')\n this.input.nativeElement.setSelectionRange(selectionEnd - 1, selectionEnd - 1);\n else if (operation === 'delete-range' || operation === 'spin')\n this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n }\n else if (operation === 'delete-back-single') {\n let prevChar = inputValue.charAt(selectionEnd - 1);\n let nextChar = inputValue.charAt(selectionEnd);\n let diff = currentLength - newLength;\n let isGroupChar = this._group.test(nextChar);\n\n if (isGroupChar && diff === 1) {\n selectionEnd += 1;\n }\n else if (!isGroupChar && this.isNumeralChar(prevChar)) {\n selectionEnd += (-1 * diff) + 1;\n }\n\n this._group.lastIndex = 0;\n this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n }\n else {\n selectionEnd = selectionEnd + (newLength - currentLength);\n this.input.nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n }\n }\n\n this.input.nativeElement.setAttribute('aria-valuenow', value);\n }\n\n onInputFocus(event) {\n this.focused = true;\n this.onFocus.emit(event);\n }\n\n onInputBlur(event) {\n this.focused = false;\n\n let newValue = this.validateValue(this.parseValue(this.input.nativeElement.value));\n this.input.nativeElement.value = this.formatValue(newValue);\n this.input.nativeElement.setAttribute('aria-valuenow', newValue);\n this.updateModel(event, newValue);\n\n this.onBlur.emit(event);\n }\n\n formattedValue() {\n return this.formatValue(this.value);\n }\n\n updateModel(event, value) {\n if (this.value !== value) {\n this.value = value;\n this.onModelChange(value);\n }\n\n this.onModelTouched();\n }\n\n writeValue(value: any) : void {\n this.value = value;\n this.cd.markForCheck();\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 get filled() {\n return (this.value != null && this.value.toString().length > 0)\n }\n\n clearTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n }\n}\n\n@NgModule({\n imports: [CommonModule,InputTextModule, ButtonModule],\n exports: [InputNumber],\n declarations: [InputNumber]\n})\nexport class InputNumberModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
\No newline at end of file