{"version":3,"file":"index.mjs","sources":["../../src/inputnumber/BaseInputNumber.vue","../../src/inputnumber/InputNumber.vue","../../src/inputnumber/InputNumber.vue?vue&type=template&id=097629d4&lang.js"],"sourcesContent":["<script>\nimport BaseInput from '@primevue/core/baseinput';\nimport InputNumberStyle from 'primevue/inputnumber/style';\n\nexport default {\n    name: 'BaseInputNumber',\n    extends: BaseInput,\n    props: {\n        format: {\n            type: Boolean,\n            default: true\n        },\n        showButtons: {\n            type: Boolean,\n            default: false\n        },\n        buttonLayout: {\n            type: String,\n            default: 'stacked'\n        },\n        incrementButtonClass: {\n            type: String,\n            default: null\n        },\n        decrementButtonClass: {\n            type: String,\n            default: null\n        },\n        incrementButtonIcon: {\n            type: String,\n            default: undefined\n        },\n        incrementIcon: {\n            type: String,\n            default: undefined\n        },\n        decrementButtonIcon: {\n            type: String,\n            default: undefined\n        },\n        decrementIcon: {\n            type: String,\n            default: undefined\n        },\n        locale: {\n            type: String,\n            default: undefined\n        },\n        localeMatcher: {\n            type: String,\n            default: undefined\n        },\n        mode: {\n            type: String,\n            default: 'decimal'\n        },\n        prefix: {\n            type: String,\n            default: null\n        },\n        suffix: {\n            type: String,\n            default: null\n        },\n        currency: {\n            type: String,\n            default: undefined\n        },\n        currencyDisplay: {\n            type: String,\n            default: undefined\n        },\n        useGrouping: {\n            type: Boolean,\n            default: true\n        },\n        minFractionDigits: {\n            type: Number,\n            default: undefined\n        },\n        maxFractionDigits: {\n            type: Number,\n            default: undefined\n        },\n        roundingMode: {\n            type: String,\n            default: 'halfExpand',\n            validator(value) {\n                return ['ceil', 'floor', 'expand', 'trunc', 'halfCeil', 'halfFloor', 'halfExpand', 'halfTrunc', 'halfEven'].includes(value);\n            }\n        },\n        min: {\n            type: Number,\n            default: null\n        },\n        max: {\n            type: Number,\n            default: null\n        },\n        step: {\n            type: Number,\n            default: 1\n        },\n        allowEmpty: {\n            type: Boolean,\n            default: true\n        },\n        highlightOnFocus: {\n            type: Boolean,\n            default: false\n        },\n        showClear: {\n            type: Boolean,\n            default: false\n        },\n        readonly: {\n            type: Boolean,\n            default: false\n        },\n        placeholder: {\n            type: String,\n            default: null\n        },\n        inputId: {\n            type: String,\n            default: null\n        },\n        inputClass: {\n            type: [String, Object],\n            default: null\n        },\n        inputStyle: {\n            type: Object,\n            default: null\n        },\n        ariaLabelledby: {\n            type: String,\n            default: null\n        },\n        ariaLabel: {\n            type: String,\n            default: null\n        },\n        required: {\n            type: Boolean,\n            default: false\n        }\n    },\n    style: InputNumberStyle,\n    provide() {\n        return {\n            $pcInputNumber: this,\n            $parentInstance: this\n        };\n    }\n};\n</script>\n","<template>\n    <span :class=\"cx('root')\" v-bind=\"ptmi('root')\" :data-p=\"dataP\">\n        <InputText\n            ref=\"input\"\n            :id=\"inputId\"\n            :name=\"$formName\"\n            role=\"spinbutton\"\n            :class=\"[cx('pcInputText'), inputClass]\"\n            :style=\"inputStyle\"\n            :defaultValue=\"formattedValue\"\n            :aria-valuemin=\"min\"\n            :aria-valuemax=\"max\"\n            :aria-valuenow=\"d_value\"\n            :inputmode=\"mode === 'decimal' && !minFractionDigits ? 'numeric' : 'decimal'\"\n            :disabled=\"disabled\"\n            :readonly=\"readonly\"\n            :placeholder=\"placeholder\"\n            :aria-labelledby=\"ariaLabelledby\"\n            :aria-label=\"ariaLabel\"\n            :required=\"required\"\n            :size=\"size\"\n            :invalid=\"invalid\"\n            :variant=\"variant\"\n            @input=\"onUserInput\"\n            @keydown=\"onInputKeyDown\"\n            @keypress=\"onInputKeyPress\"\n            @paste=\"onPaste\"\n            @click=\"onInputClick\"\n            @focus=\"onInputFocus\"\n            @blur=\"onInputBlur\"\n            :pt=\"ptm('pcInputText')\"\n            :unstyled=\"unstyled\"\n            :data-p=\"dataP\"\n        />\n        <slot v-if=\"showClear && buttonLayout !== 'vertical'\" name=\"clearicon\" :class=\"cx('clearIcon')\" :clearCallback=\"onClearClick\">\n            <TimesIcon ref=\"clearIcon\" :class=\"[cx('clearIcon')]\" @click=\"onClearClick\" v-bind=\"ptm('clearIcon')\" />\n        </slot>\n        <span v-if=\"showButtons && buttonLayout === 'stacked'\" :class=\"cx('buttonGroup')\" v-bind=\"ptm('buttonGroup')\" :data-p=\"dataP\">\n            <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n                <button :class=\"[cx('incrementButton'), incrementButtonClass]\" v-on=\"upButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('incrementButton')\" :data-p=\"dataP\">\n                    <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n                        <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n                    </slot>\n                </button>\n            </slot>\n            <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n                <button :class=\"[cx('decrementButton'), decrementButtonClass]\" v-on=\"downButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('decrementButton')\" :data-p=\"dataP\">\n                    <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n                        <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n                    </slot>\n                </button>\n            </slot>\n        </span>\n        <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n            <button\n                v-if=\"showButtons && buttonLayout !== 'stacked'\"\n                :class=\"[cx('incrementButton'), incrementButtonClass]\"\n                v-on=\"upButtonListeners\"\n                :disabled=\"disabled\"\n                :tabindex=\"-1\"\n                aria-hidden=\"true\"\n                type=\"button\"\n                v-bind=\"ptm('incrementButton')\"\n                :data-p=\"dataP\"\n            >\n                <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n                    <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n                </slot>\n            </button>\n        </slot>\n        <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n            <button\n                v-if=\"showButtons && buttonLayout !== 'stacked'\"\n                :class=\"[cx('decrementButton'), decrementButtonClass]\"\n                v-on=\"downButtonListeners\"\n                :disabled=\"disabled\"\n                :tabindex=\"-1\"\n                aria-hidden=\"true\"\n                type=\"button\"\n                v-bind=\"ptm('decrementButton')\"\n                :data-p=\"dataP\"\n            >\n                <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n                    <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n                </slot>\n            </button>\n        </slot>\n        <!-- TODO: decrementButton* and incrementButton* are deprecated since v4.0-->\n    </span>\n</template>\n\n<script>\nimport { cn } from '@primeuix/utils';\nimport { clearSelection, getSelection } from '@primeuix/utils/dom';\nimport { isEmpty, isNotEmpty } from '@primeuix/utils/object';\nimport AngleDownIcon from '@primevue/icons/angledown';\nimport AngleUpIcon from '@primevue/icons/angleup';\nimport TimesIcon from '@primevue/icons/times';\nimport InputText from 'primevue/inputtext';\nimport BaseInputNumber from './BaseInputNumber.vue';\n\nexport default {\n    name: 'InputNumber',\n    extends: BaseInputNumber,\n    inheritAttrs: false,\n    emits: ['input', 'focus', 'blur'],\n    inject: {\n        $pcFluid: { default: null }\n    },\n    numberFormat: null,\n    _numeral: null,\n    _decimal: null,\n    _group: null,\n    _minusSign: null,\n    _currency: null,\n    _suffix: null,\n    _prefix: null,\n    _index: null,\n    groupChar: '',\n    isSpecialChar: null,\n    prefixChar: null,\n    suffixChar: null,\n    timer: null,\n    data() {\n        return {\n            // @deprecated\n            d_modelValue: this.d_value,\n            focused: false\n        };\n    },\n    watch: {\n        d_value: {\n            immediate: true,\n            handler(newValue) {\n                // @deprecated since v4.2.0\n                this.d_modelValue = newValue;\n\n                if (this.$refs.clearIcon?.$el?.style) {\n                    this.$refs.clearIcon.$el.style.display = isEmpty(newValue) ? 'none' : 'block';\n                }\n            }\n        },\n        locale(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        localeMatcher(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        mode(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        currency(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        currencyDisplay(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        useGrouping(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        minFractionDigits(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        maxFractionDigits(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        suffix(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        prefix(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        }\n    },\n    created() {\n        this.constructParser();\n    },\n    mounted() {\n        if (this.$refs.clearIcon?.$el?.style) {\n            this.$refs.clearIcon.$el.style.display = !this.$filled ? 'none' : 'block';\n        }\n    },\n    methods: {\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                roundingMode: this.roundingMode\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\n            this._numeral = new RegExp(`[${numerals.join('')}]`, 'g');\n            this._group = this.getGroupingExpression();\n            this._minusSign = this.getMinusSignExpression();\n            this._currency = this.getCurrencyExpression();\n            this._decimal = this.getDecimalExpression();\n            this._suffix = this.getSuffixExpression();\n            this._prefix = this.getPrefixExpression();\n            this._index = (d) => index.get(d);\n        },\n        updateConstructParser(newValue, oldValue) {\n            if (newValue !== oldValue) {\n                this.constructParser();\n            }\n        },\n        escapeRegExp(text) {\n            return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n        },\n        getDecimalExpression() {\n            const formatter = new Intl.NumberFormat(this.locale, { ...this.getOptions(), useGrouping: false });\n            const formatted = formatter.format(1.1);\n\n            if (formatted === formatter.format(1)) {\n                return new RegExp(`[]`, 'g');\n            }\n\n            return new RegExp(`[${formatted.replace(this._currency, '').trim().replace(this._numeral, '')}]`, 'g');\n        },\n        getGroupingExpression() {\n            const formatter = new Intl.NumberFormat(this.locale, { useGrouping: true });\n\n            this.groupChar = formatter.format(1000000).trim().replace(this._numeral, '').charAt(0);\n\n            return new RegExp(`[${this.groupChar}]`, 'g');\n        },\n        getMinusSignExpression() {\n            const formatter = new Intl.NumberFormat(this.locale, { useGrouping: false });\n\n            return new RegExp(`[${formatter.format(-1).trim().replace(this._numeral, '')}]`, 'g');\n        },\n        getCurrencyExpression() {\n            if (this.currency) {\n                const formatter = new Intl.NumberFormat(this.locale, { style: 'currency', currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n                return new RegExp(`[${formatter.format(1).replace(/\\s/g, '').replace(this._numeral, '').replace(this._group, '')}]`, 'g');\n            }\n\n            return new RegExp(`[]`, 'g');\n        },\n        getPrefixExpression() {\n            if (this.prefix) {\n                this.prefixChar = this.prefix;\n            } else {\n                const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay });\n\n                this.prefixChar = formatter.format(1).split('1')[0];\n            }\n\n            return new RegExp(`${this.escapeRegExp(this.prefixChar || '')}`, 'g');\n        },\n        getSuffixExpression() {\n            if (this.suffix) {\n                this.suffixChar = this.suffix;\n            } else {\n                const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n                this.suffixChar = formatter.format(1).split('1')[1];\n            }\n\n            return new RegExp(`${this.escapeRegExp(this.suffixChar || '')}`, 'g');\n        },\n        formatValue(value) {\n            if (value != null) {\n                if (value === '-') {\n                    // 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\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.toString();\n            }\n\n            return '';\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 === '-')\n                    // Minus sign\n                    return filteredText;\n\n                let parsedValue = +filteredText;\n\n                return isNaN(parsedValue) ? null : parsedValue;\n            }\n\n            return null;\n        },\n        repeat(event, interval, dir) {\n            if (this.readonly) {\n                return;\n            }\n\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        addWithPrecision(base, increment) {\n            const baseStr = base.toString();\n            const stepStr = increment.toString();\n\n            const baseDecimalPlaces = baseStr.includes('.') ? baseStr.split('.')[1].length : 0;\n            const stepDecimalPlaces = stepStr.includes('.') ? stepStr.split('.')[1].length : 0;\n\n            const maxDecimalPlaces = Math.max(baseDecimalPlaces, stepDecimalPlaces);\n            const precision = Math.pow(10, maxDecimalPlaces);\n\n            return Math.round((base + increment) * precision) / precision;\n        },\n        spin(event, dir) {\n            if (this.$refs.input) {\n                let step = this.step * dir;\n                let currentValue = this.parseValue(this.$refs.input.$el.value) || 0;\n                let newValue = this.validateValue(this.addWithPrecision(currentValue, step));\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            if (!this.disabled) {\n                this.$refs.input.$el.focus();\n                this.repeat(event, null, 1);\n                event.preventDefault();\n            }\n        },\n        onUpButtonMouseUp() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onUpButtonMouseLeave() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onUpButtonKeyUp() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onUpButtonKeyDown(event) {\n            if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n                this.repeat(event, null, 1);\n            }\n        },\n        onDownButtonMouseDown(event) {\n            if (!this.disabled) {\n                this.$refs.input.$el.focus();\n                this.repeat(event, null, -1);\n                event.preventDefault();\n            }\n        },\n        onDownButtonMouseUp() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onDownButtonMouseLeave() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onDownButtonKeyUp() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onDownButtonKeyDown(event) {\n            if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n                this.repeat(event, null, -1);\n            }\n        },\n        onUserInput() {\n            if (this.isSpecialChar) {\n                this.$refs.input.$el.value = this.lastValue;\n            }\n\n            this.isSpecialChar = false;\n        },\n        onInputKeyDown(event) {\n            if (this.readonly) {\n                return;\n            }\n\n            // block composition input\n            if (event.isComposing) {\n                return;\n            }\n\n            if (event.altKey || event.ctrlKey || event.metaKey) {\n                this.isSpecialChar = true;\n                this.lastValue = this.$refs.input.$el.value;\n\n                return;\n            }\n\n            this.lastValue = event.target.value;\n\n            let selectionStart = event.target.selectionStart;\n            let selectionEnd = event.target.selectionEnd;\n            let selectionRange = selectionEnd - selectionStart;\n            let inputValue = event.target.value;\n            let newValueStr = null;\n            const code = event.code || event.key;\n\n            switch (code) {\n                case 'ArrowUp':\n                    this.spin(event, 1);\n                    event.preventDefault();\n                    break;\n\n                case 'ArrowDown':\n                    this.spin(event, -1);\n                    event.preventDefault();\n                    break;\n\n                case 'ArrowLeft':\n                    if (selectionRange > 1) {\n                        const cursorPosition = this.isNumeralChar(inputValue.charAt(selectionStart)) ? selectionStart + 1 : selectionStart + 2;\n\n                        this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n                    } else if (!this.isNumeralChar(inputValue.charAt(selectionStart - 1))) {\n                        event.preventDefault();\n                    }\n\n                    break;\n\n                case 'ArrowRight':\n                    if (selectionRange > 1) {\n                        const cursorPosition = selectionEnd - 1;\n\n                        this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n                    } else if (!this.isNumeralChar(inputValue.charAt(selectionStart))) {\n                        event.preventDefault();\n                    }\n\n                    break;\n\n                case 'Tab':\n                case 'Enter':\n                case 'NumpadEnter':\n                    newValueStr = this.validateValue(this.parseValue(inputValue));\n                    this.$refs.input.$el.value = this.formatValue(newValueStr);\n                    this.$refs.input.$el.setAttribute('aria-valuenow', newValueStr);\n                    this.updateModel(event, newValueStr);\n                    break;\n\n                case 'Backspace': {\n                    event.preventDefault();\n\n                    if (selectionStart === selectionEnd) {\n                        if (selectionStart >= inputValue.length && this.suffixChar !== null) {\n                            selectionStart = inputValue.length - this.suffixChar.length;\n                            this.$refs.input.$el.setSelectionRange(selectionStart, selectionStart);\n                        }\n\n                        const deleteChar = inputValue.charAt(selectionStart - 1);\n                        const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n                        if (this.isNumeralChar(deleteChar)) {\n                            const decimalLength = this.getDecimalLength(inputValue);\n\n                            if (this._group.test(deleteChar)) {\n                                this._group.lastIndex = 0;\n                                newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1);\n                            } else if (this._decimal.test(deleteChar)) {\n                                this._decimal.lastIndex = 0;\n\n                                if (decimalLength) {\n                                    this.$refs.input.$el.setSelectionRange(selectionStart - 1, selectionStart - 1);\n                                } else {\n                                    newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n                                }\n                            } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n                                const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n                                newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart);\n                            } else if (decimalCharIndexWithoutPrefix === 1) {\n                                newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart);\n                                newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n                            } else {\n                                newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n                            }\n                        }\n\n                        this.updateValue(event, newValueStr, null, 'delete-single');\n                    } else {\n                        newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n                        this.updateValue(event, newValueStr, null, 'delete-range');\n                    }\n\n                    break;\n                }\n\n                case 'Delete':\n                    event.preventDefault();\n\n                    if (selectionStart === selectionEnd) {\n                        const deleteChar = inputValue.charAt(selectionStart);\n                        const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n                        if (this.isNumeralChar(deleteChar)) {\n                            const decimalLength = this.getDecimalLength(inputValue);\n\n                            if (this._group.test(deleteChar)) {\n                                this._group.lastIndex = 0;\n                                newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2);\n                            } else if (this._decimal.test(deleteChar)) {\n                                this._decimal.lastIndex = 0;\n\n                                if (decimalLength) {\n                                    this.$refs.input.$el.setSelectionRange(selectionStart + 1, selectionStart + 1);\n                                } else {\n                                    newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n                                }\n                            } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n                                const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n                                newValueStr = inputValue.slice(0, selectionStart) + insertedText + inputValue.slice(selectionStart + 1);\n                            } else if (decimalCharIndexWithoutPrefix === 1) {\n                                newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1);\n                                newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\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                    } else {\n                        newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n                        this.updateValue(event, newValueStr, null, 'delete-range');\n                    }\n\n                    break;\n\n                case 'Home':\n                    event.preventDefault();\n\n                    if (isNotEmpty(this.min)) {\n                        this.updateModel(event, this.min);\n                    }\n\n                    break;\n\n                case 'End':\n                    event.preventDefault();\n\n                    if (isNotEmpty(this.max)) {\n                        this.updateModel(event, this.max);\n                    }\n\n                    break;\n\n                default:\n                    break;\n            }\n        },\n        onInputKeyPress(event) {\n            if (this.readonly) {\n                return;\n            }\n\n            let char = event.key;\n            let isDecimalSign = this.isDecimalSign(char);\n            const isMinusSign = this.isMinusSign(char);\n\n            if (event.code !== 'Enter') {\n                event.preventDefault();\n            }\n\n            if ((Number(char) >= 0 && Number(char) <= 9) || isMinusSign || isDecimalSign) {\n                this.insert(event, char, { isDecimalSign, isMinusSign });\n            }\n        },\n        onPaste(event) {\n            if (this.readonly || this.disabled) {\n                return;\n            }\n\n            event.preventDefault();\n            let data = (event.clipboardData || window['clipboardData']).getData('Text');\n            if (this.inputId === 'integeronly' && /[^\\d-]/.test(data)) {\n                return;\n            }\n\n            if (data) {\n                let filteredData = this.parseValue(data);\n\n                if (filteredData != null) {\n                    this.insert(event, filteredData.toString());\n                }\n            }\n        },\n        onClearClick(event) {\n            this.updateModel(event, null);\n            this.$refs.input.$el.focus();\n        },\n        allowMinusSign() {\n            return this.min === null || this.min < 0;\n        },\n        isMinusSign(char) {\n            if (this._minusSign.test(char) || char === '-') {\n                this._minusSign.lastIndex = 0;\n\n                return true;\n            }\n\n            return false;\n        },\n        isDecimalSign(char) {\n            if ((this.locale?.includes('fr') && ['.', ','].includes(char)) || this._decimal.test(char)) {\n                this._decimal.lastIndex = 0;\n\n                return true;\n            }\n\n            return false;\n        },\n        isDecimalMode() {\n            return this.mode === 'decimal';\n        },\n        getDecimalCharIndexes(val) {\n            let decimalCharIndex = val.search(this._decimal);\n\n            this._decimal.lastIndex = 0;\n\n            const filteredVal = val.replace(this._prefix, '').trim().replace(/\\s/g, '').replace(this._currency, '');\n            const decimalCharIndexWithoutPrefix = filteredVal.search(this._decimal);\n\n            this._decimal.lastIndex = 0;\n\n            return { decimalCharIndex, decimalCharIndexWithoutPrefix };\n        },\n        getCharIndexes(val) {\n            const decimalCharIndex = val.search(this._decimal);\n\n            this._decimal.lastIndex = 0;\n            const minusCharIndex = val.search(this._minusSign);\n\n            this._minusSign.lastIndex = 0;\n            const suffixCharIndex = val.search(this._suffix);\n\n            this._suffix.lastIndex = 0;\n            const currencyCharIndex = val.search(this._currency);\n\n            this._currency.lastIndex = 0;\n\n            return { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex };\n        },\n        insert(event, text, sign = { isDecimalSign: false, isMinusSign: false }) {\n            const minusCharIndexOnText = text.search(this._minusSign);\n\n            this._minusSign.lastIndex = 0;\n\n            if (!this.allowMinusSign() && minusCharIndexOnText !== -1) {\n                return;\n            }\n\n            const selectionStart = this.$refs.input.$el.selectionStart;\n            const selectionEnd = this.$refs.input.$el.selectionEnd;\n            let inputValue = this.$refs.input.$el.value.trim();\n            const { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex } = this.getCharIndexes(inputValue);\n            let newValueStr;\n\n            if (sign.isMinusSign) {\n                const isNewMinusSign = minusCharIndex === -1;\n\n                if (selectionStart === 0 || selectionStart === currencyCharIndex + 1) {\n                    newValueStr = inputValue;\n\n                    if (isNewMinusSign || selectionEnd !== 0) {\n                        newValueStr = this.insertText(inputValue, text, 0, selectionEnd);\n                    }\n\n                    this.updateValue(event, newValueStr, text, 'insert');\n                }\n            } else if (sign.isDecimalSign) {\n                if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) {\n                    this.updateValue(event, inputValue, text, 'insert');\n                } else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) {\n                    newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n                    this.updateValue(event, newValueStr, text, 'insert');\n                } else if (decimalCharIndex === -1 && this.maxFractionDigits) {\n                    newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n                    this.updateValue(event, newValueStr, text, 'insert');\n                }\n            } else {\n                const maxFractionDigits = this.numberFormat.resolvedOptions().maximumFractionDigits;\n                const operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert';\n\n                if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n                    if (selectionStart + text.length - (decimalCharIndex + 1) <= maxFractionDigits) {\n                        const charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length;\n\n                        newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex);\n                        this.updateValue(event, newValueStr, text, operation);\n                    }\n                } else {\n                    newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n                    this.updateValue(event, newValueStr, text, operation);\n                }\n            }\n        },\n        insertText(value, text, start, end) {\n            let textSplit = text === '.' ? text : text.split('.');\n\n            if (textSplit.length === 2) {\n                const decimalCharIndex = value.slice(start, end).search(this._decimal);\n\n                this._decimal.lastIndex = 0;\n\n                return decimalCharIndex > 0 ? value.slice(0, start) + this.formatValue(text) + value.slice(end) : this.formatValue(text) || value;\n            } else if (end - start === value.length) {\n                return this.formatValue(text);\n            } else if (start === 0) {\n                return text + value.slice(end);\n            } else if (end === value.length) {\n                return value.slice(0, start) + text;\n            } else {\n                return value.slice(0, start) + text + value.slice(end);\n            }\n        },\n        deleteRange(value, start, end) {\n            let newValueStr;\n\n            if (end - start === value.length) newValueStr = '';\n            else if (start === 0) newValueStr = value.slice(end);\n            else if (end === value.length) newValueStr = value.slice(0, start);\n            else newValueStr = value.slice(0, start) + value.slice(end);\n\n            return newValueStr;\n        },\n        initCursor() {\n            let selectionStart = this.$refs.input.$el.selectionStart;\n            let inputValue = this.$refs.input.$el.value;\n            let valueLength = inputValue.length;\n            let index = null;\n\n            // remove prefix\n            let prefixLength = (this.prefixChar || '').length;\n\n            inputValue = inputValue.replace(this._prefix, '');\n            selectionStart = selectionStart - prefixLength;\n\n            let char = inputValue.charAt(selectionStart);\n\n            if (this.isNumeralChar(char)) {\n                return selectionStart + prefixLength;\n            }\n\n            //left\n            let i = selectionStart - 1;\n\n            while (i >= 0) {\n                char = inputValue.charAt(i);\n\n                if (this.isNumeralChar(char)) {\n                    index = i + prefixLength;\n                    break;\n                } else {\n                    i--;\n                }\n            }\n\n            if (index !== null) {\n                this.$refs.input.$el.setSelectionRange(index + 1, index + 1);\n            } else {\n                i = selectionStart;\n\n                while (i < valueLength) {\n                    char = inputValue.charAt(i);\n\n                    if (this.isNumeralChar(char)) {\n                        index = i + prefixLength;\n                        break;\n                    } else {\n                        i++;\n                    }\n                }\n\n                if (index !== null) {\n                    this.$refs.input.$el.setSelectionRange(index, index);\n                }\n            }\n\n            return index || 0;\n        },\n        onInputClick() {\n            const currentValue = this.$refs.input.$el.value;\n\n            if (!this.readonly && currentValue !== getSelection()) {\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\n                return true;\n            }\n\n            return false;\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        updateValue(event, valueStr, insertedValueStr, operation) {\n            let currentValue = this.$refs.input.$el.value;\n            let newValue = null;\n\n            if (valueStr != null) {\n                newValue = this.parseValue(valueStr);\n                newValue = !newValue && !this.allowEmpty ? 0 : newValue;\n                this.updateInput(newValue, insertedValueStr, operation, valueStr);\n\n                this.handleOnInput(event, currentValue, newValue);\n            }\n        },\n        handleOnInput(event, currentValue, newValue) {\n            if (this.isValueChanged(currentValue, newValue)) {\n                this.$emit('input', { originalEvent: event, value: newValue, formattedValue: currentValue });\n                this.formField.onInput?.({ originalEvent: event, value: newValue });\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\n                return newValue !== parsedCurrentValue;\n            }\n\n            return false;\n        },\n        validateValue(value) {\n            if (value === '-' || value == null) {\n                return null;\n            }\n\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            return value;\n        },\n        updateInput(value, insertedValueStr, operation, valueStr) {\n            insertedValueStr = insertedValueStr || '';\n\n            let inputValue = this.$refs.input.$el.value;\n            let newValue = this.formatValue(value);\n            let currentLength = inputValue.length;\n\n            if (newValue !== valueStr) {\n                newValue = this.concatValues(newValue, valueStr);\n            }\n\n            if (currentLength === 0) {\n                this.$refs.input.$el.value = newValue;\n                this.$refs.input.$el.setSelectionRange(0, 0);\n                const index = this.initCursor();\n                const selectionEnd = index + insertedValueStr.length;\n\n                this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n            } else {\n                let selectionStart = this.$refs.input.$el.selectionStart;\n                let selectionEnd = this.$refs.input.$el.selectionEnd;\n\n                this.$refs.input.$el.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\n                    sRegex.test(newValue);\n\n                    const tExpr = insertedValueStr.split('').join(`(${this.groupChar})?`);\n                    const tRegex = new RegExp(tExpr, 'g');\n\n                    tRegex.test(newValue.slice(sRegex.lastIndex));\n\n                    selectionEnd = sRegex.lastIndex + tRegex.lastIndex;\n                    this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n                } else if (newLength === currentLength) {\n                    if (operation === 'insert' || operation === 'delete-back-single') {\n                        this.$refs.input.$el.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n                    } else if (operation === 'delete-single') {\n                        this.$refs.input.$el.setSelectionRange(selectionEnd - 1, selectionEnd - 1);\n                    } else if (operation === 'delete-range' || operation === 'spin') {\n                        this.$refs.input.$el.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                    } else if (!isGroupChar && this.isNumeralChar(prevChar)) {\n                        selectionEnd += -1 * diff + 1;\n                    }\n\n                    this._group.lastIndex = 0;\n                    this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n                } else if (inputValue === '-' && operation === 'insert') {\n                    this.$refs.input.$el.setSelectionRange(0, 0);\n                    const index = this.initCursor();\n                    const selectionEnd = index + insertedValueStr.length + 1;\n\n                    this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n                } else {\n                    selectionEnd = selectionEnd + (newLength - currentLength);\n                    this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n                }\n            }\n\n            this.$refs.input.$el.setAttribute('aria-valuenow', value);\n\n            if (this.$refs.clearIcon?.$el?.style) {\n                this.$refs.clearIcon.$el.style.display = isEmpty(newValue) ? 'none' : 'block';\n            }\n        },\n        concatValues(val1, val2) {\n            if (val1 && val2) {\n                let decimalCharIndex = val2.search(this._decimal);\n\n                this._decimal.lastIndex = 0;\n\n                if (this.suffixChar) {\n                    return decimalCharIndex !== -1 ? val1.replace(this.suffixChar, '').split(this._decimal)[0] + val2.replace(this.suffixChar, '').slice(decimalCharIndex) + this.suffixChar : val1;\n                } else {\n                    return decimalCharIndex !== -1 ? val1.split(this._decimal)[0] + val2.slice(decimalCharIndex) : val1;\n                }\n            }\n\n            return val1;\n        },\n        getDecimalLength(value) {\n            if (value) {\n                const valueSplit = value.split(this._decimal);\n\n                if (valueSplit.length === 2) {\n                    return valueSplit[1].replace(this._suffix, '').trim().replace(/\\s/g, '').replace(this._currency, '').length;\n                }\n            }\n\n            return 0;\n        },\n        updateModel(event, value) {\n            this.writeValue(value, event);\n        },\n        onInputFocus(event) {\n            this.focused = true;\n\n            if (!this.disabled && !this.readonly && this.$refs.input.$el.value !== getSelection() && this.highlightOnFocus) {\n                event.target.select();\n            }\n\n            this.$emit('focus', event);\n        },\n        onInputBlur(event) {\n            this.focused = false;\n\n            let input = event.target;\n            let newValue = this.validateValue(this.parseValue(input.value));\n\n            this.$emit('blur', { originalEvent: event, value: input.value });\n            this.formField.onBlur?.(event);\n\n            input.value = this.formatValue(newValue);\n            input.setAttribute('aria-valuenow', newValue);\n            this.updateModel(event, newValue);\n\n            if (!this.disabled && !this.readonly && this.highlightOnFocus) {\n                clearSelection();\n            }\n        },\n        clearTimer() {\n            if (this.timer) {\n                clearTimeout(this.timer);\n            }\n        },\n        maxBoundry() {\n            return this.d_value >= this.max;\n        },\n        minBoundry() {\n            return this.d_value <= this.min;\n        }\n    },\n    computed: {\n        upButtonListeners() {\n            return {\n                mousedown: (event) => this.onUpButtonMouseDown(event),\n                mouseup: (event) => this.onUpButtonMouseUp(event),\n                mouseleave: (event) => this.onUpButtonMouseLeave(event),\n                keydown: (event) => this.onUpButtonKeyDown(event),\n                keyup: (event) => this.onUpButtonKeyUp(event)\n            };\n        },\n        downButtonListeners() {\n            return {\n                mousedown: (event) => this.onDownButtonMouseDown(event),\n                mouseup: (event) => this.onDownButtonMouseUp(event),\n                mouseleave: (event) => this.onDownButtonMouseLeave(event),\n                keydown: (event) => this.onDownButtonKeyDown(event),\n                keyup: (event) => this.onDownButtonKeyUp(event)\n            };\n        },\n        formattedValue() {\n            const val = !this.d_value && !this.allowEmpty ? 0 : this.d_value;\n\n            return this.formatValue(val);\n        },\n        getFormatter() {\n            return this.numberFormat;\n        },\n        dataP() {\n            return cn({\n                invalid: this.$invalid,\n                fluid: this.$fluid,\n                filled: this.$variant === 'filled',\n                [this.size]: this.size,\n                [this.buttonLayout]: this.showButtons && this.buttonLayout\n            });\n        }\n    },\n    components: {\n        InputText,\n        AngleUpIcon,\n        AngleDownIcon,\n        TimesIcon\n    }\n};\n</script>\n","<template>\n    <span :class=\"cx('root')\" v-bind=\"ptmi('root')\" :data-p=\"dataP\">\n        <InputText\n            ref=\"input\"\n            :id=\"inputId\"\n            :name=\"$formName\"\n            role=\"spinbutton\"\n            :class=\"[cx('pcInputText'), inputClass]\"\n            :style=\"inputStyle\"\n            :defaultValue=\"formattedValue\"\n            :aria-valuemin=\"min\"\n            :aria-valuemax=\"max\"\n            :aria-valuenow=\"d_value\"\n            :inputmode=\"mode === 'decimal' && !minFractionDigits ? 'numeric' : 'decimal'\"\n            :disabled=\"disabled\"\n            :readonly=\"readonly\"\n            :placeholder=\"placeholder\"\n            :aria-labelledby=\"ariaLabelledby\"\n            :aria-label=\"ariaLabel\"\n            :required=\"required\"\n            :size=\"size\"\n            :invalid=\"invalid\"\n            :variant=\"variant\"\n            @input=\"onUserInput\"\n            @keydown=\"onInputKeyDown\"\n            @keypress=\"onInputKeyPress\"\n            @paste=\"onPaste\"\n            @click=\"onInputClick\"\n            @focus=\"onInputFocus\"\n            @blur=\"onInputBlur\"\n            :pt=\"ptm('pcInputText')\"\n            :unstyled=\"unstyled\"\n            :data-p=\"dataP\"\n        />\n        <slot v-if=\"showClear && buttonLayout !== 'vertical'\" name=\"clearicon\" :class=\"cx('clearIcon')\" :clearCallback=\"onClearClick\">\n            <TimesIcon ref=\"clearIcon\" :class=\"[cx('clearIcon')]\" @click=\"onClearClick\" v-bind=\"ptm('clearIcon')\" />\n        </slot>\n        <span v-if=\"showButtons && buttonLayout === 'stacked'\" :class=\"cx('buttonGroup')\" v-bind=\"ptm('buttonGroup')\" :data-p=\"dataP\">\n            <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n                <button :class=\"[cx('incrementButton'), incrementButtonClass]\" v-on=\"upButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('incrementButton')\" :data-p=\"dataP\">\n                    <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n                        <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n                    </slot>\n                </button>\n            </slot>\n            <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n                <button :class=\"[cx('decrementButton'), decrementButtonClass]\" v-on=\"downButtonListeners\" :disabled=\"disabled\" :tabindex=\"-1\" aria-hidden=\"true\" type=\"button\" v-bind=\"ptm('decrementButton')\" :data-p=\"dataP\">\n                    <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n                        <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n                    </slot>\n                </button>\n            </slot>\n        </span>\n        <slot name=\"incrementbutton\" :listeners=\"upButtonListeners\">\n            <button\n                v-if=\"showButtons && buttonLayout !== 'stacked'\"\n                :class=\"[cx('incrementButton'), incrementButtonClass]\"\n                v-on=\"upButtonListeners\"\n                :disabled=\"disabled\"\n                :tabindex=\"-1\"\n                aria-hidden=\"true\"\n                type=\"button\"\n                v-bind=\"ptm('incrementButton')\"\n                :data-p=\"dataP\"\n            >\n                <slot :name=\"$slots.incrementicon ? 'incrementicon' : 'incrementbuttonicon'\">\n                    <component :is=\"incrementIcon || incrementButtonIcon ? 'span' : 'AngleUpIcon'\" :class=\"[incrementIcon, incrementButtonIcon]\" v-bind=\"ptm('incrementIcon')\" data-pc-section=\"incrementicon\" />\n                </slot>\n            </button>\n        </slot>\n        <slot name=\"decrementbutton\" :listeners=\"downButtonListeners\">\n            <button\n                v-if=\"showButtons && buttonLayout !== 'stacked'\"\n                :class=\"[cx('decrementButton'), decrementButtonClass]\"\n                v-on=\"downButtonListeners\"\n                :disabled=\"disabled\"\n                :tabindex=\"-1\"\n                aria-hidden=\"true\"\n                type=\"button\"\n                v-bind=\"ptm('decrementButton')\"\n                :data-p=\"dataP\"\n            >\n                <slot :name=\"$slots.decrementicon ? 'decrementicon' : 'decrementbuttonicon'\">\n                    <component :is=\"decrementIcon || decrementButtonIcon ? 'span' : 'AngleDownIcon'\" :class=\"[decrementIcon, decrementButtonIcon]\" v-bind=\"ptm('decrementIcon')\" data-pc-section=\"decrementicon\" />\n                </slot>\n            </button>\n        </slot>\n        <!-- TODO: decrementButton* and incrementButton* are deprecated since v4.0-->\n    </span>\n</template>\n\n<script>\nimport { cn } from '@primeuix/utils';\nimport { clearSelection, getSelection } from '@primeuix/utils/dom';\nimport { isEmpty, isNotEmpty } from '@primeuix/utils/object';\nimport AngleDownIcon from '@primevue/icons/angledown';\nimport AngleUpIcon from '@primevue/icons/angleup';\nimport TimesIcon from '@primevue/icons/times';\nimport InputText from 'primevue/inputtext';\nimport BaseInputNumber from './BaseInputNumber.vue';\n\nexport default {\n    name: 'InputNumber',\n    extends: BaseInputNumber,\n    inheritAttrs: false,\n    emits: ['input', 'focus', 'blur'],\n    inject: {\n        $pcFluid: { default: null }\n    },\n    numberFormat: null,\n    _numeral: null,\n    _decimal: null,\n    _group: null,\n    _minusSign: null,\n    _currency: null,\n    _suffix: null,\n    _prefix: null,\n    _index: null,\n    groupChar: '',\n    isSpecialChar: null,\n    prefixChar: null,\n    suffixChar: null,\n    timer: null,\n    data() {\n        return {\n            // @deprecated\n            d_modelValue: this.d_value,\n            focused: false\n        };\n    },\n    watch: {\n        d_value: {\n            immediate: true,\n            handler(newValue) {\n                // @deprecated since v4.2.0\n                this.d_modelValue = newValue;\n\n                if (this.$refs.clearIcon?.$el?.style) {\n                    this.$refs.clearIcon.$el.style.display = isEmpty(newValue) ? 'none' : 'block';\n                }\n            }\n        },\n        locale(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        localeMatcher(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        mode(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        currency(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        currencyDisplay(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        useGrouping(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        minFractionDigits(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        maxFractionDigits(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        suffix(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        },\n        prefix(newValue, oldValue) {\n            this.updateConstructParser(newValue, oldValue);\n        }\n    },\n    created() {\n        this.constructParser();\n    },\n    mounted() {\n        if (this.$refs.clearIcon?.$el?.style) {\n            this.$refs.clearIcon.$el.style.display = !this.$filled ? 'none' : 'block';\n        }\n    },\n    methods: {\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                roundingMode: this.roundingMode\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\n            this._numeral = new RegExp(`[${numerals.join('')}]`, 'g');\n            this._group = this.getGroupingExpression();\n            this._minusSign = this.getMinusSignExpression();\n            this._currency = this.getCurrencyExpression();\n            this._decimal = this.getDecimalExpression();\n            this._suffix = this.getSuffixExpression();\n            this._prefix = this.getPrefixExpression();\n            this._index = (d) => index.get(d);\n        },\n        updateConstructParser(newValue, oldValue) {\n            if (newValue !== oldValue) {\n                this.constructParser();\n            }\n        },\n        escapeRegExp(text) {\n            return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n        },\n        getDecimalExpression() {\n            const formatter = new Intl.NumberFormat(this.locale, { ...this.getOptions(), useGrouping: false });\n            const formatted = formatter.format(1.1);\n\n            if (formatted === formatter.format(1)) {\n                return new RegExp(`[]`, 'g');\n            }\n\n            return new RegExp(`[${formatted.replace(this._currency, '').trim().replace(this._numeral, '')}]`, 'g');\n        },\n        getGroupingExpression() {\n            const formatter = new Intl.NumberFormat(this.locale, { useGrouping: true });\n\n            this.groupChar = formatter.format(1000000).trim().replace(this._numeral, '').charAt(0);\n\n            return new RegExp(`[${this.groupChar}]`, 'g');\n        },\n        getMinusSignExpression() {\n            const formatter = new Intl.NumberFormat(this.locale, { useGrouping: false });\n\n            return new RegExp(`[${formatter.format(-1).trim().replace(this._numeral, '')}]`, 'g');\n        },\n        getCurrencyExpression() {\n            if (this.currency) {\n                const formatter = new Intl.NumberFormat(this.locale, { style: 'currency', currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n                return new RegExp(`[${formatter.format(1).replace(/\\s/g, '').replace(this._numeral, '').replace(this._group, '')}]`, 'g');\n            }\n\n            return new RegExp(`[]`, 'g');\n        },\n        getPrefixExpression() {\n            if (this.prefix) {\n                this.prefixChar = this.prefix;\n            } else {\n                const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay });\n\n                this.prefixChar = formatter.format(1).split('1')[0];\n            }\n\n            return new RegExp(`${this.escapeRegExp(this.prefixChar || '')}`, 'g');\n        },\n        getSuffixExpression() {\n            if (this.suffix) {\n                this.suffixChar = this.suffix;\n            } else {\n                const formatter = new Intl.NumberFormat(this.locale, { style: this.mode, currency: this.currency, currencyDisplay: this.currencyDisplay, minimumFractionDigits: 0, maximumFractionDigits: 0, roundingMode: this.roundingMode });\n\n                this.suffixChar = formatter.format(1).split('1')[1];\n            }\n\n            return new RegExp(`${this.escapeRegExp(this.suffixChar || '')}`, 'g');\n        },\n        formatValue(value) {\n            if (value != null) {\n                if (value === '-') {\n                    // 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\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.toString();\n            }\n\n            return '';\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 === '-')\n                    // Minus sign\n                    return filteredText;\n\n                let parsedValue = +filteredText;\n\n                return isNaN(parsedValue) ? null : parsedValue;\n            }\n\n            return null;\n        },\n        repeat(event, interval, dir) {\n            if (this.readonly) {\n                return;\n            }\n\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        addWithPrecision(base, increment) {\n            const baseStr = base.toString();\n            const stepStr = increment.toString();\n\n            const baseDecimalPlaces = baseStr.includes('.') ? baseStr.split('.')[1].length : 0;\n            const stepDecimalPlaces = stepStr.includes('.') ? stepStr.split('.')[1].length : 0;\n\n            const maxDecimalPlaces = Math.max(baseDecimalPlaces, stepDecimalPlaces);\n            const precision = Math.pow(10, maxDecimalPlaces);\n\n            return Math.round((base + increment) * precision) / precision;\n        },\n        spin(event, dir) {\n            if (this.$refs.input) {\n                let step = this.step * dir;\n                let currentValue = this.parseValue(this.$refs.input.$el.value) || 0;\n                let newValue = this.validateValue(this.addWithPrecision(currentValue, step));\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            if (!this.disabled) {\n                this.$refs.input.$el.focus();\n                this.repeat(event, null, 1);\n                event.preventDefault();\n            }\n        },\n        onUpButtonMouseUp() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onUpButtonMouseLeave() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onUpButtonKeyUp() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onUpButtonKeyDown(event) {\n            if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n                this.repeat(event, null, 1);\n            }\n        },\n        onDownButtonMouseDown(event) {\n            if (!this.disabled) {\n                this.$refs.input.$el.focus();\n                this.repeat(event, null, -1);\n                event.preventDefault();\n            }\n        },\n        onDownButtonMouseUp() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onDownButtonMouseLeave() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onDownButtonKeyUp() {\n            if (!this.disabled) {\n                this.clearTimer();\n            }\n        },\n        onDownButtonKeyDown(event) {\n            if (event.code === 'Space' || event.code === 'Enter' || event.code === 'NumpadEnter') {\n                this.repeat(event, null, -1);\n            }\n        },\n        onUserInput() {\n            if (this.isSpecialChar) {\n                this.$refs.input.$el.value = this.lastValue;\n            }\n\n            this.isSpecialChar = false;\n        },\n        onInputKeyDown(event) {\n            if (this.readonly) {\n                return;\n            }\n\n            // block composition input\n            if (event.isComposing) {\n                return;\n            }\n\n            if (event.altKey || event.ctrlKey || event.metaKey) {\n                this.isSpecialChar = true;\n                this.lastValue = this.$refs.input.$el.value;\n\n                return;\n            }\n\n            this.lastValue = event.target.value;\n\n            let selectionStart = event.target.selectionStart;\n            let selectionEnd = event.target.selectionEnd;\n            let selectionRange = selectionEnd - selectionStart;\n            let inputValue = event.target.value;\n            let newValueStr = null;\n            const code = event.code || event.key;\n\n            switch (code) {\n                case 'ArrowUp':\n                    this.spin(event, 1);\n                    event.preventDefault();\n                    break;\n\n                case 'ArrowDown':\n                    this.spin(event, -1);\n                    event.preventDefault();\n                    break;\n\n                case 'ArrowLeft':\n                    if (selectionRange > 1) {\n                        const cursorPosition = this.isNumeralChar(inputValue.charAt(selectionStart)) ? selectionStart + 1 : selectionStart + 2;\n\n                        this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n                    } else if (!this.isNumeralChar(inputValue.charAt(selectionStart - 1))) {\n                        event.preventDefault();\n                    }\n\n                    break;\n\n                case 'ArrowRight':\n                    if (selectionRange > 1) {\n                        const cursorPosition = selectionEnd - 1;\n\n                        this.$refs.input.$el.setSelectionRange(cursorPosition, cursorPosition);\n                    } else if (!this.isNumeralChar(inputValue.charAt(selectionStart))) {\n                        event.preventDefault();\n                    }\n\n                    break;\n\n                case 'Tab':\n                case 'Enter':\n                case 'NumpadEnter':\n                    newValueStr = this.validateValue(this.parseValue(inputValue));\n                    this.$refs.input.$el.value = this.formatValue(newValueStr);\n                    this.$refs.input.$el.setAttribute('aria-valuenow', newValueStr);\n                    this.updateModel(event, newValueStr);\n                    break;\n\n                case 'Backspace': {\n                    event.preventDefault();\n\n                    if (selectionStart === selectionEnd) {\n                        if (selectionStart >= inputValue.length && this.suffixChar !== null) {\n                            selectionStart = inputValue.length - this.suffixChar.length;\n                            this.$refs.input.$el.setSelectionRange(selectionStart, selectionStart);\n                        }\n\n                        const deleteChar = inputValue.charAt(selectionStart - 1);\n                        const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n                        if (this.isNumeralChar(deleteChar)) {\n                            const decimalLength = this.getDecimalLength(inputValue);\n\n                            if (this._group.test(deleteChar)) {\n                                this._group.lastIndex = 0;\n                                newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1);\n                            } else if (this._decimal.test(deleteChar)) {\n                                this._decimal.lastIndex = 0;\n\n                                if (decimalLength) {\n                                    this.$refs.input.$el.setSelectionRange(selectionStart - 1, selectionStart - 1);\n                                } else {\n                                    newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n                                }\n                            } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n                                const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n                                newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart);\n                            } else if (decimalCharIndexWithoutPrefix === 1) {\n                                newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart);\n                                newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\n                            } else {\n                                newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n                            }\n                        }\n\n                        this.updateValue(event, newValueStr, null, 'delete-single');\n                    } else {\n                        newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n                        this.updateValue(event, newValueStr, null, 'delete-range');\n                    }\n\n                    break;\n                }\n\n                case 'Delete':\n                    event.preventDefault();\n\n                    if (selectionStart === selectionEnd) {\n                        const deleteChar = inputValue.charAt(selectionStart);\n                        const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);\n\n                        if (this.isNumeralChar(deleteChar)) {\n                            const decimalLength = this.getDecimalLength(inputValue);\n\n                            if (this._group.test(deleteChar)) {\n                                this._group.lastIndex = 0;\n                                newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2);\n                            } else if (this._decimal.test(deleteChar)) {\n                                this._decimal.lastIndex = 0;\n\n                                if (decimalLength) {\n                                    this.$refs.input.$el.setSelectionRange(selectionStart + 1, selectionStart + 1);\n                                } else {\n                                    newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n                                }\n                            } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n                                const insertedText = this.isDecimalMode() && (this.minFractionDigits || 0) < decimalLength ? '' : '0';\n\n                                newValueStr = inputValue.slice(0, selectionStart) + insertedText + inputValue.slice(selectionStart + 1);\n                            } else if (decimalCharIndexWithoutPrefix === 1) {\n                                newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1);\n                                newValueStr = this.parseValue(newValueStr) > 0 ? newValueStr : '';\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                    } else {\n                        newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n                        this.updateValue(event, newValueStr, null, 'delete-range');\n                    }\n\n                    break;\n\n                case 'Home':\n                    event.preventDefault();\n\n                    if (isNotEmpty(this.min)) {\n                        this.updateModel(event, this.min);\n                    }\n\n                    break;\n\n                case 'End':\n                    event.preventDefault();\n\n                    if (isNotEmpty(this.max)) {\n                        this.updateModel(event, this.max);\n                    }\n\n                    break;\n\n                default:\n                    break;\n            }\n        },\n        onInputKeyPress(event) {\n            if (this.readonly) {\n                return;\n            }\n\n            let char = event.key;\n            let isDecimalSign = this.isDecimalSign(char);\n            const isMinusSign = this.isMinusSign(char);\n\n            if (event.code !== 'Enter') {\n                event.preventDefault();\n            }\n\n            if ((Number(char) >= 0 && Number(char) <= 9) || isMinusSign || isDecimalSign) {\n                this.insert(event, char, { isDecimalSign, isMinusSign });\n            }\n        },\n        onPaste(event) {\n            if (this.readonly || this.disabled) {\n                return;\n            }\n\n            event.preventDefault();\n            let data = (event.clipboardData || window['clipboardData']).getData('Text');\n            if (this.inputId === 'integeronly' && /[^\\d-]/.test(data)) {\n                return;\n            }\n\n            if (data) {\n                let filteredData = this.parseValue(data);\n\n                if (filteredData != null) {\n                    this.insert(event, filteredData.toString());\n                }\n            }\n        },\n        onClearClick(event) {\n            this.updateModel(event, null);\n            this.$refs.input.$el.focus();\n        },\n        allowMinusSign() {\n            return this.min === null || this.min < 0;\n        },\n        isMinusSign(char) {\n            if (this._minusSign.test(char) || char === '-') {\n                this._minusSign.lastIndex = 0;\n\n                return true;\n            }\n\n            return false;\n        },\n        isDecimalSign(char) {\n            if ((this.locale?.includes('fr') && ['.', ','].includes(char)) || this._decimal.test(char)) {\n                this._decimal.lastIndex = 0;\n\n                return true;\n            }\n\n            return false;\n        },\n        isDecimalMode() {\n            return this.mode === 'decimal';\n        },\n        getDecimalCharIndexes(val) {\n            let decimalCharIndex = val.search(this._decimal);\n\n            this._decimal.lastIndex = 0;\n\n            const filteredVal = val.replace(this._prefix, '').trim().replace(/\\s/g, '').replace(this._currency, '');\n            const decimalCharIndexWithoutPrefix = filteredVal.search(this._decimal);\n\n            this._decimal.lastIndex = 0;\n\n            return { decimalCharIndex, decimalCharIndexWithoutPrefix };\n        },\n        getCharIndexes(val) {\n            const decimalCharIndex = val.search(this._decimal);\n\n            this._decimal.lastIndex = 0;\n            const minusCharIndex = val.search(this._minusSign);\n\n            this._minusSign.lastIndex = 0;\n            const suffixCharIndex = val.search(this._suffix);\n\n            this._suffix.lastIndex = 0;\n            const currencyCharIndex = val.search(this._currency);\n\n            this._currency.lastIndex = 0;\n\n            return { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex };\n        },\n        insert(event, text, sign = { isDecimalSign: false, isMinusSign: false }) {\n            const minusCharIndexOnText = text.search(this._minusSign);\n\n            this._minusSign.lastIndex = 0;\n\n            if (!this.allowMinusSign() && minusCharIndexOnText !== -1) {\n                return;\n            }\n\n            const selectionStart = this.$refs.input.$el.selectionStart;\n            const selectionEnd = this.$refs.input.$el.selectionEnd;\n            let inputValue = this.$refs.input.$el.value.trim();\n            const { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex } = this.getCharIndexes(inputValue);\n            let newValueStr;\n\n            if (sign.isMinusSign) {\n                const isNewMinusSign = minusCharIndex === -1;\n\n                if (selectionStart === 0 || selectionStart === currencyCharIndex + 1) {\n                    newValueStr = inputValue;\n\n                    if (isNewMinusSign || selectionEnd !== 0) {\n                        newValueStr = this.insertText(inputValue, text, 0, selectionEnd);\n                    }\n\n                    this.updateValue(event, newValueStr, text, 'insert');\n                }\n            } else if (sign.isDecimalSign) {\n                if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) {\n                    this.updateValue(event, inputValue, text, 'insert');\n                } else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) {\n                    newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n                    this.updateValue(event, newValueStr, text, 'insert');\n                } else if (decimalCharIndex === -1 && this.maxFractionDigits) {\n                    newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n                    this.updateValue(event, newValueStr, text, 'insert');\n                }\n            } else {\n                const maxFractionDigits = this.numberFormat.resolvedOptions().maximumFractionDigits;\n                const operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert';\n\n                if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) {\n                    if (selectionStart + text.length - (decimalCharIndex + 1) <= maxFractionDigits) {\n                        const charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length;\n\n                        newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex);\n                        this.updateValue(event, newValueStr, text, operation);\n                    }\n                } else {\n                    newValueStr = this.insertText(inputValue, text, selectionStart, selectionEnd);\n                    this.updateValue(event, newValueStr, text, operation);\n                }\n            }\n        },\n        insertText(value, text, start, end) {\n            let textSplit = text === '.' ? text : text.split('.');\n\n            if (textSplit.length === 2) {\n                const decimalCharIndex = value.slice(start, end).search(this._decimal);\n\n                this._decimal.lastIndex = 0;\n\n                return decimalCharIndex > 0 ? value.slice(0, start) + this.formatValue(text) + value.slice(end) : this.formatValue(text) || value;\n            } else if (end - start === value.length) {\n                return this.formatValue(text);\n            } else if (start === 0) {\n                return text + value.slice(end);\n            } else if (end === value.length) {\n                return value.slice(0, start) + text;\n            } else {\n                return value.slice(0, start) + text + value.slice(end);\n            }\n        },\n        deleteRange(value, start, end) {\n            let newValueStr;\n\n            if (end - start === value.length) newValueStr = '';\n            else if (start === 0) newValueStr = value.slice(end);\n            else if (end === value.length) newValueStr = value.slice(0, start);\n            else newValueStr = value.slice(0, start) + value.slice(end);\n\n            return newValueStr;\n        },\n        initCursor() {\n            let selectionStart = this.$refs.input.$el.selectionStart;\n            let inputValue = this.$refs.input.$el.value;\n            let valueLength = inputValue.length;\n            let index = null;\n\n            // remove prefix\n            let prefixLength = (this.prefixChar || '').length;\n\n            inputValue = inputValue.replace(this._prefix, '');\n            selectionStart = selectionStart - prefixLength;\n\n            let char = inputValue.charAt(selectionStart);\n\n            if (this.isNumeralChar(char)) {\n                return selectionStart + prefixLength;\n            }\n\n            //left\n            let i = selectionStart - 1;\n\n            while (i >= 0) {\n                char = inputValue.charAt(i);\n\n                if (this.isNumeralChar(char)) {\n                    index = i + prefixLength;\n                    break;\n                } else {\n                    i--;\n                }\n            }\n\n            if (index !== null) {\n                this.$refs.input.$el.setSelectionRange(index + 1, index + 1);\n            } else {\n                i = selectionStart;\n\n                while (i < valueLength) {\n                    char = inputValue.charAt(i);\n\n                    if (this.isNumeralChar(char)) {\n                        index = i + prefixLength;\n                        break;\n                    } else {\n                        i++;\n                    }\n                }\n\n                if (index !== null) {\n                    this.$refs.input.$el.setSelectionRange(index, index);\n                }\n            }\n\n            return index || 0;\n        },\n        onInputClick() {\n            const currentValue = this.$refs.input.$el.value;\n\n            if (!this.readonly && currentValue !== getSelection()) {\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\n                return true;\n            }\n\n            return false;\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        updateValue(event, valueStr, insertedValueStr, operation) {\n            let currentValue = this.$refs.input.$el.value;\n            let newValue = null;\n\n            if (valueStr != null) {\n                newValue = this.parseValue(valueStr);\n                newValue = !newValue && !this.allowEmpty ? 0 : newValue;\n                this.updateInput(newValue, insertedValueStr, operation, valueStr);\n\n                this.handleOnInput(event, currentValue, newValue);\n            }\n        },\n        handleOnInput(event, currentValue, newValue) {\n            if (this.isValueChanged(currentValue, newValue)) {\n                this.$emit('input', { originalEvent: event, value: newValue, formattedValue: currentValue });\n                this.formField.onInput?.({ originalEvent: event, value: newValue });\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\n                return newValue !== parsedCurrentValue;\n            }\n\n            return false;\n        },\n        validateValue(value) {\n            if (value === '-' || value == null) {\n                return null;\n            }\n\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            return value;\n        },\n        updateInput(value, insertedValueStr, operation, valueStr) {\n            insertedValueStr = insertedValueStr || '';\n\n            let inputValue = this.$refs.input.$el.value;\n            let newValue = this.formatValue(value);\n            let currentLength = inputValue.length;\n\n            if (newValue !== valueStr) {\n                newValue = this.concatValues(newValue, valueStr);\n            }\n\n            if (currentLength === 0) {\n                this.$refs.input.$el.value = newValue;\n                this.$refs.input.$el.setSelectionRange(0, 0);\n                const index = this.initCursor();\n                const selectionEnd = index + insertedValueStr.length;\n\n                this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n            } else {\n                let selectionStart = this.$refs.input.$el.selectionStart;\n                let selectionEnd = this.$refs.input.$el.selectionEnd;\n\n                this.$refs.input.$el.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\n                    sRegex.test(newValue);\n\n                    const tExpr = insertedValueStr.split('').join(`(${this.groupChar})?`);\n                    const tRegex = new RegExp(tExpr, 'g');\n\n                    tRegex.test(newValue.slice(sRegex.lastIndex));\n\n                    selectionEnd = sRegex.lastIndex + tRegex.lastIndex;\n                    this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n                } else if (newLength === currentLength) {\n                    if (operation === 'insert' || operation === 'delete-back-single') {\n                        this.$refs.input.$el.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n                    } else if (operation === 'delete-single') {\n                        this.$refs.input.$el.setSelectionRange(selectionEnd - 1, selectionEnd - 1);\n                    } else if (operation === 'delete-range' || operation === 'spin') {\n                        this.$refs.input.$el.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                    } else if (!isGroupChar && this.isNumeralChar(prevChar)) {\n                        selectionEnd += -1 * diff + 1;\n                    }\n\n                    this._group.lastIndex = 0;\n                    this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n                } else if (inputValue === '-' && operation === 'insert') {\n                    this.$refs.input.$el.setSelectionRange(0, 0);\n                    const index = this.initCursor();\n                    const selectionEnd = index + insertedValueStr.length + 1;\n\n                    this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n                } else {\n                    selectionEnd = selectionEnd + (newLength - currentLength);\n                    this.$refs.input.$el.setSelectionRange(selectionEnd, selectionEnd);\n                }\n            }\n\n            this.$refs.input.$el.setAttribute('aria-valuenow', value);\n\n            if (this.$refs.clearIcon?.$el?.style) {\n                this.$refs.clearIcon.$el.style.display = isEmpty(newValue) ? 'none' : 'block';\n            }\n        },\n        concatValues(val1, val2) {\n            if (val1 && val2) {\n                let decimalCharIndex = val2.search(this._decimal);\n\n                this._decimal.lastIndex = 0;\n\n                if (this.suffixChar) {\n                    return decimalCharIndex !== -1 ? val1.replace(this.suffixChar, '').split(this._decimal)[0] + val2.replace(this.suffixChar, '').slice(decimalCharIndex) + this.suffixChar : val1;\n                } else {\n                    return decimalCharIndex !== -1 ? val1.split(this._decimal)[0] + val2.slice(decimalCharIndex) : val1;\n                }\n            }\n\n            return val1;\n        },\n        getDecimalLength(value) {\n            if (value) {\n                const valueSplit = value.split(this._decimal);\n\n                if (valueSplit.length === 2) {\n                    return valueSplit[1].replace(this._suffix, '').trim().replace(/\\s/g, '').replace(this._currency, '').length;\n                }\n            }\n\n            return 0;\n        },\n        updateModel(event, value) {\n            this.writeValue(value, event);\n        },\n        onInputFocus(event) {\n            this.focused = true;\n\n            if (!this.disabled && !this.readonly && this.$refs.input.$el.value !== getSelection() && this.highlightOnFocus) {\n                event.target.select();\n            }\n\n            this.$emit('focus', event);\n        },\n        onInputBlur(event) {\n            this.focused = false;\n\n            let input = event.target;\n            let newValue = this.validateValue(this.parseValue(input.value));\n\n            this.$emit('blur', { originalEvent: event, value: input.value });\n            this.formField.onBlur?.(event);\n\n            input.value = this.formatValue(newValue);\n            input.setAttribute('aria-valuenow', newValue);\n            this.updateModel(event, newValue);\n\n            if (!this.disabled && !this.readonly && this.highlightOnFocus) {\n                clearSelection();\n            }\n        },\n        clearTimer() {\n            if (this.timer) {\n                clearTimeout(this.timer);\n            }\n        },\n        maxBoundry() {\n            return this.d_value >= this.max;\n        },\n        minBoundry() {\n            return this.d_value <= this.min;\n        }\n    },\n    computed: {\n        upButtonListeners() {\n            return {\n                mousedown: (event) => this.onUpButtonMouseDown(event),\n                mouseup: (event) => this.onUpButtonMouseUp(event),\n                mouseleave: (event) => this.onUpButtonMouseLeave(event),\n                keydown: (event) => this.onUpButtonKeyDown(event),\n                keyup: (event) => this.onUpButtonKeyUp(event)\n            };\n        },\n        downButtonListeners() {\n            return {\n                mousedown: (event) => this.onDownButtonMouseDown(event),\n                mouseup: (event) => this.onDownButtonMouseUp(event),\n                mouseleave: (event) => this.onDownButtonMouseLeave(event),\n                keydown: (event) => this.onDownButtonKeyDown(event),\n                keyup: (event) => this.onDownButtonKeyUp(event)\n            };\n        },\n        formattedValue() {\n            const val = !this.d_value && !this.allowEmpty ? 0 : this.d_value;\n\n            return this.formatValue(val);\n        },\n        getFormatter() {\n            return this.numberFormat;\n        },\n        dataP() {\n            return cn({\n                invalid: this.$invalid,\n                fluid: this.$fluid,\n                filled: this.$variant === 'filled',\n                [this.size]: this.size,\n                [this.buttonLayout]: this.showButtons && this.buttonLayout\n            });\n        }\n    },\n    components: {\n        InputText,\n        AngleUpIcon,\n        AngleDownIcon,\n        TimesIcon\n    }\n};\n</script>\n"],"names":["name","BaseInput","props","format","type","Boolean","showButtons","buttonLayout","String","incrementButtonClass","decrementButtonClass","incrementButtonIcon","undefined","incrementIcon","decrementButtonIcon","decrementIcon","locale","localeMatcher","mode","prefix","suffix","currency","currencyDisplay","useGrouping","minFractionDigits","Number","maxFractionDigits","roundingMode","validator","value","includes","min","max","step","allowEmpty","highlightOnFocus","showClear","readonly","placeholder","inputId","inputClass","Object","inputStyle","ariaLabelledby","ariaLabel","required","style","InputNumberStyle","provide","$pcInputNumber","$parentInstance","BaseInputNumber","inheritAttrs","emits","inject","$pcFluid","numberFormat","_numeral","_decimal","_group","_minusSign","_currency","_suffix","_prefix","_index","groupChar","isSpecialChar","prefixChar","suffixChar","timer","data","d_modelValue","d_value","focused","watch","immediate","handler","newValue","_this$$refs$clearIcon","$refs","clearIcon","$el","display","isEmpty","oldValue","updateConstructParser","created","constructParser","mounted","_this$$refs$clearIcon2","$filled","methods","getOptions","minimumFractionDigits","maximumFractionDigits","Intl","NumberFormat","numerals","_toConsumableArray","reverse","index","Map","map","d","i","RegExp","concat","join","getGroupingExpression","getMinusSignExpression","getCurrencyExpression","getDecimalExpression","getSuffixExpression","getPrefixExpression","get","escapeRegExp","text","replace","formatter","_objectSpread","formatted","trim","charAt","split","formatValue","formattedValue","toString","parseValue","filteredText","parsedValue","isNaN","repeat","event","interval","dir","_this","clearTimer","setTimeout","spin","addWithPrecision","base","increment","baseStr","stepStr","baseDecimalPlaces","length","stepDecimalPlaces","maxDecimalPlaces","Math","precision","pow","round","input","currentValue","validateValue","updateInput","updateModel","handleOnInput","onUpButtonMouseDown","disabled","focus","preventDefault","onUpButtonMouseUp","onUpButtonMouseLeave","onUpButtonKeyUp","onUpButtonKeyDown","code","onDownButtonMouseDown","onDownButtonMouseUp","onDownButtonMouseLeave","onDownButtonKeyUp","onDownButtonKeyDown","onUserInput","lastValue","onInputKeyDown","isComposing","altKey","ctrlKey","metaKey","target","selectionStart","selectionEnd","selectionRange","inputValue","newValueStr","key","cursorPosition","isNumeralChar","setSelectionRange","setAttribute","deleteChar","_this$getDecimalCharI","getDecimalCharIndexes","decimalCharIndex","decimalCharIndexWithoutPrefix","decimalLength","getDecimalLength","test","lastIndex","slice","insertedText","isDecimalMode","updateValue","deleteRange","_this$getDecimalCharI2","isNotEmpty","onInputKeyPress","char","isDecimalSign","isMinusSign","insert","onPaste","clipboardData","window","getData","filteredData","onClearClick","allowMinusSign","_this$locale","val","search","filteredVal","getCharIndexes","minusCharIndex","suffixCharIndex","currencyCharIndex","sign","arguments","minusCharIndexOnText","_this$getCharIndexes","isNewMinusSign","insertText","resolvedOptions","operation","charIndex","start","end","textSplit","initCursor","valueLength","prefixLength","onInputClick","getSelection","resetRegex","valueStr","insertedValueStr","isValueChanged","_this$formField$onInp","_this$formField","$emit","originalEvent","formField","onInput","call","parsedCurrentValue","_this$$refs$clearIcon3","currentLength","concatValues","newLength","startValue","startValueStr","startExpr","sRegex","tExpr","tRegex","prevChar","nextChar","diff","isGroupChar","val1","val2","valueSplit","writeValue","onInputFocus","select","onInputBlur","_this$formField$onBlu","_this$formField2","onBlur","clearSelection","clearTimeout","maxBoundry","minBoundry","computed","upButtonListeners","_this2","mousedown","mouseup","mouseleave","keydown","keyup","downButtonListeners","_this3","getFormatter","dataP","cn","_defineProperty","invalid","$invalid","fluid","$fluid","filled","$variant","size","components","InputText","AngleUpIcon","AngleDownIcon","TimesIcon","_openBlock","_createElementBlock","_mergeProps","_ctx","cx","ptmi","$options","_createVNode","_component_InputText","ref","id","$formName","role","_normalizeClass","defaultValue","inputmode","variant","onKeydown","onKeypress","onClick","onFocus","pt","ptm","unstyled","_renderSlot","$slots","clearCallback","_component_TimesIcon","listeners","_createElementVNode","_toHandlers","tabindex","incrementicon","_createBlock","_resolveDynamicComponent","decrementicon"],"mappings":"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"}