{"version":3,"file":"primeng-inputnumber.mjs","sources":["../../src/inputnumber/style/inputnumberstyle.ts","../../src/inputnumber/inputnumber.ts","../../src/inputnumber/primeng-inputnumber.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { style } from '@primeuix/styles/inputnumber';\nimport { BaseStyle } from 'primeng/base';\n\nconst classes = {\n    root: ({ instance }) => [\n        'p-inputnumber p-component p-inputwrapper',\n        {\n            'p-invalid': instance.invalid(),\n            'p-inputwrapper-filled': instance.$filled() || instance.allowEmpty() === false,\n            'p-inputwrapper-focus': instance.focused,\n            'p-inputnumber-stacked': instance.showButtons() && instance.buttonLayout() === 'stacked',\n            'p-inputnumber-horizontal': instance.showButtons() && instance.buttonLayout() === 'horizontal',\n            'p-inputnumber-vertical': instance.showButtons() && instance.buttonLayout() === 'vertical',\n            'p-inputnumber-fluid': instance.hasFluid\n        }\n    ],\n    pcInputText: 'p-inputnumber-input',\n    clearIcon: 'p-inputnumber-clear-icon',\n    buttonGroup: 'p-inputnumber-button-group',\n    incrementButton: ({ instance }) => [\n        'p-inputnumber-button p-inputnumber-increment-button',\n        {\n            'p-disabled': instance.showButtons() && instance.max() != null && instance.maxlength()\n        }\n    ],\n    decrementButton: ({ instance }) => [\n        'p-inputnumber-button p-inputnumber-decrement-button',\n        {\n            'p-disabled': instance.showButtons() && instance.min() != null && instance.minlength()\n        }\n    ]\n};\n\n@Injectable()\nexport class InputNumberStyle extends BaseStyle {\n    name = 'inputnumber';\n\n    style = style;\n\n    classes = classes;\n}\n\n/**\n *\n * InputNumber is an input component to provide numerical input.\n *\n * [Live Demo](https://www.primeng.org/inputnumber/)\n *\n * @module inputnumberstyle\n *\n */\n\nexport enum InputNumberClasses {\n    /**\n     * Class name of the root element\n     */\n    root = 'p-inputnumber',\n    /**\n     * Class name of the input element\n     */\n    pcInputText = 'p-inputnumber-input',\n    /**\n     * Class name of the button group element\n     */\n    buttonGroup = 'p-inputnumber-button-group',\n    /**\n     * Class name of the increment button element\n     */\n    incrementButton = 'p-inputnumber-increment-button',\n    /**\n     * Class name of the decrement button element\n     */\n    decrementButton = 'p-inputnumber-decrement-button',\n    /**\n     * Class name of the clear icon\n     */\n    clearIcon = 'p-autocomplete-clear-icon'\n}\n\nexport interface InputNumberStyle extends BaseStyle {}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    contentChild,\n    effect,\n    ElementRef,\n    forwardRef,\n    inject,\n    InjectionToken,\n    Injector,\n    input,\n    NgModule,\n    numberAttribute,\n    output,\n    signal,\n    TemplateRef,\n    viewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { AngleDown as AngleDownIcon } from '@primeicons/angular/angle-down';\nimport { AngleUp as AngleUpIcon } from '@primeicons/angular/angle-up';\nimport { Times as TimesIcon } from '@primeicons/angular/times';\nimport { getSelection } from '@primeuix/utils';\nimport { SharedModule } from 'primeng/api';\nimport { AutoFocus } from 'primeng/autofocus';\nimport { PARENT_INSTANCE } from 'primeng/basecomponent';\nimport { BaseInput } from 'primeng/baseinput';\nimport { Bind, BindModule } from 'primeng/bind';\nimport { InputText } from 'primeng/inputtext';\nimport { Nullable } from 'primeng/ts-helpers';\nimport type { InputNumberButtonLayout, InputNumberCurrencyDisplay, InputNumberInputEvent, InputNumberLocaleMatcher, InputNumberMode, InputNumberPassThrough } from 'primeng/types/inputnumber';\nimport type { CSSProperties } from 'primeng/types/shared';\nimport { InputNumberStyle } from './style/inputnumberstyle';\n\nconst INPUTNUMBER_INSTANCE = new InjectionToken<InputNumber>('INPUTNUMBER_INSTANCE');\n\nexport const INPUTNUMBER_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => InputNumber),\n    multi: true\n};\n/**\n * InputNumber is an input component to provide numerical input.\n * @group Components\n */\n@Component({\n    selector: 'p-inputnumber, p-input-number',\n    standalone: true,\n    imports: [NgTemplateOutlet, InputText, AutoFocus, TimesIcon, AngleUpIcon, AngleDownIcon, SharedModule, BindModule],\n    template: `\n        <input\n            pInputText\n            #input\n            [attr.id]=\"inputId()\"\n            role=\"spinbutton\"\n            [class]=\"cn(cx('pcInputText'), inputStyleClass())\"\n            [value]=\"formattedValue()\"\n            [style]=\"inputStyle()\"\n            [variant]=\"$variant()\"\n            [invalid]=\"invalid()\"\n            [attr.aria-valuemin]=\"min()\"\n            [attr.aria-valuemax]=\"max()\"\n            [attr.aria-valuenow]=\"value\"\n            [attr.placeholder]=\"placeholder()\"\n            [attr.aria-label]=\"ariaLabel()\"\n            [attr.aria-labelledby]=\"ariaLabelledBy()\"\n            [attr.aria-describedby]=\"ariaDescribedBy()\"\n            [attr.title]=\"title()\"\n            [pSize]=\"size()\"\n            [attr.size]=\"inputSize()\"\n            [attr.name]=\"name()\"\n            [attr.autocomplete]=\"autocomplete()\"\n            [attr.maxlength]=\"maxlength()\"\n            [attr.minlength]=\"minlength()\"\n            [attr.tabindex]=\"tabindex()\"\n            [attr.aria-required]=\"ariaRequired()\"\n            [attr.min]=\"min()\"\n            [attr.max]=\"max()\"\n            [attr.step]=\"step() ?? 1\"\n            [attr.required]=\"requiredAttr()\"\n            [attr.readonly]=\"readonlyAttr()\"\n            [attr.disabled]=\"disabledAttr()\"\n            inputmode=\"decimal\"\n            (input)=\"onUserInput($event)\"\n            (keydown)=\"onInputKeyDown($event)\"\n            (keypress)=\"onInputKeyPress($event)\"\n            (paste)=\"onPaste($event)\"\n            (click)=\"onInputClick()\"\n            (focus)=\"onInputFocus($event)\"\n            (blur)=\"onInputBlur($event)\"\n            [pt]=\"ptm('pcInputText')\"\n            [unstyled]=\"unstyled()\"\n            [pAutoFocus]=\"autofocus()\"\n            [fluid]=\"hasFluid\"\n            [attr.data-p]=\"dataP\"\n        />\n        @if (showClearIcon) {\n            @if (!clearIconTemplate()) {\n                <svg data-p-icon=\"times\" [pBind]=\"ptm('clearIcon')\" [class]=\"cx('clearIcon')\" (click)=\"clear()\" />\n            } @else {\n                <span [pBind]=\"ptm('clearIcon')\" (click)=\"clear()\" [class]=\"cx('clearIcon')\">\n                    <ng-container *ngTemplateOutlet=\"clearIconTemplate()\"></ng-container>\n                </span>\n            }\n        }\n        @if (showStackedButtons()) {\n            <span [pBind]=\"ptm('buttonGroup')\" [class]=\"cx('buttonGroup')\" [attr.data-p]=\"dataP\">\n                <button\n                    type=\"button\"\n                    [pBind]=\"ptm('incrementButton')\"\n                    [class]=\"cn(cx('incrementButton'), incrementButtonClass())\"\n                    [attr.disabled]=\"disabledAttr()\"\n                    tabindex=\"-1\"\n                    (mousedown)=\"onUpButtonMouseDown($event)\"\n                    (mouseup)=\"onUpButtonMouseUp()\"\n                    (mouseleave)=\"onUpButtonMouseLeave()\"\n                    (keydown)=\"onUpButtonKeyDown($event)\"\n                    (keyup)=\"onUpButtonKeyUp()\"\n                    [attr.aria-hidden]=\"true\"\n                    [attr.data-p]=\"dataP\"\n                >\n                    @if (hasIncrementButtonIcon()) {\n                        <span [pBind]=\"ptm('incrementButtonIcon')\" [class]=\"incrementButtonIcon()\"></span>\n                    } @else {\n                        @if (!incrementButtonIconTemplate()) {\n                            <svg data-p-icon=\"angle-up\" [pBind]=\"ptm('incrementButtonIcon')\" />\n                        } @else {\n                            <ng-container *ngTemplateOutlet=\"incrementButtonIconTemplate()\"></ng-container>\n                        }\n                    }\n                </button>\n\n                <button\n                    type=\"button\"\n                    [pBind]=\"ptm('decrementButton')\"\n                    [class]=\"cn(cx('decrementButton'), decrementButtonClass())\"\n                    [attr.disabled]=\"disabledAttr()\"\n                    tabindex=\"-1\"\n                    [attr.aria-hidden]=\"true\"\n                    (mousedown)=\"onDownButtonMouseDown($event)\"\n                    (mouseup)=\"onDownButtonMouseUp()\"\n                    (mouseleave)=\"onDownButtonMouseLeave()\"\n                    (keydown)=\"onDownButtonKeyDown($event)\"\n                    (keyup)=\"onDownButtonKeyUp()\"\n                    [attr.data-p]=\"dataP\"\n                >\n                    @if (hasDecrementButtonIcon()) {\n                        <span [pBind]=\"ptm('decrementButtonIcon')\" [class]=\"decrementButtonIcon()\"></span>\n                    } @else {\n                        @if (!decrementButtonIconTemplate()) {\n                            <svg data-p-icon=\"angle-down\" [pBind]=\"ptm('decrementButtonIcon')\" />\n                        } @else {\n                            <ng-container *ngTemplateOutlet=\"decrementButtonIconTemplate()\"></ng-container>\n                        }\n                    }\n                </button>\n            </span>\n        }\n        @if (showNonStackedButtons()) {\n            <button\n                type=\"button\"\n                [pBind]=\"ptm('incrementButton')\"\n                [class]=\"cn(cx('incrementButton'), incrementButtonClass())\"\n                [attr.disabled]=\"disabledAttr()\"\n                tabindex=\"-1\"\n                [attr.aria-hidden]=\"true\"\n                (mousedown)=\"onUpButtonMouseDown($event)\"\n                (mouseup)=\"onUpButtonMouseUp()\"\n                (mouseleave)=\"onUpButtonMouseLeave()\"\n                (keydown)=\"onUpButtonKeyDown($event)\"\n                (keyup)=\"onUpButtonKeyUp()\"\n                [attr.data-p]=\"dataP\"\n            >\n                @if (hasIncrementButtonIcon()) {\n                    <span [pBind]=\"ptm('incrementButtonIcon')\" [class]=\"incrementButtonIcon()\"></span>\n                } @else {\n                    @if (!incrementButtonIconTemplate()) {\n                        <svg data-p-icon=\"angle-up\" [pBind]=\"ptm('incrementButtonIcon')\" />\n                    } @else {\n                        <ng-container *ngTemplateOutlet=\"incrementButtonIconTemplate()\"></ng-container>\n                    }\n                }\n            </button>\n            <button\n                type=\"button\"\n                [pBind]=\"ptm('decrementButton')\"\n                [class]=\"cn(cx('decrementButton'), decrementButtonClass())\"\n                [attr.disabled]=\"disabledAttr()\"\n                tabindex=\"-1\"\n                [attr.aria-hidden]=\"true\"\n                (mousedown)=\"onDownButtonMouseDown($event)\"\n                (mouseup)=\"onDownButtonMouseUp()\"\n                (mouseleave)=\"onDownButtonMouseLeave()\"\n                (keydown)=\"onDownButtonKeyDown($event)\"\n                (keyup)=\"onDownButtonKeyUp()\"\n                [attr.data-p]=\"dataP\"\n            >\n                @if (hasDecrementButtonIcon()) {\n                    <span [pBind]=\"ptm('decrementButtonIcon')\" [class]=\"decrementButtonIcon()\"></span>\n                } @else {\n                    @if (!decrementButtonIconTemplate()) {\n                        <svg data-p-icon=\"angle-down\" [pBind]=\"ptm('decrementButtonIcon')\" />\n                    } @else {\n                        <ng-container *ngTemplateOutlet=\"decrementButtonIconTemplate()\"></ng-container>\n                    }\n                }\n            </button>\n        }\n    `,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [INPUTNUMBER_VALUE_ACCESSOR, InputNumberStyle, { provide: INPUTNUMBER_INSTANCE, useExisting: InputNumber }, { provide: PARENT_INSTANCE, useExisting: InputNumber }],\n    encapsulation: ViewEncapsulation.None,\n    host: {\n        '[class]': \"cx('root')\",\n        '[attr.data-p]': 'dataP'\n    },\n    hostDirectives: [Bind]\n})\nexport class InputNumber extends BaseInput<InputNumberPassThrough> {\n    componentName = 'InputNumber';\n\n    $pcInputNumber: InputNumber | undefined = inject(INPUTNUMBER_INSTANCE, { optional: true, skipSelf: true }) ?? undefined;\n\n    _componentStyle = inject(InputNumberStyle);\n\n    bindDirectiveInstance = inject(Bind, { self: true });\n\n    onAfterViewChecked(): void {\n        this.bindDirectiveInstance.setAttrs(this.ptms(['host', 'root']));\n    }\n\n    /**\n     * Displays spinner buttons.\n     * @group Props\n     */\n    showButtons = input(false, { transform: booleanAttribute });\n    /**\n     * Whether to format the value.\n     * @group Props\n     */\n    format = input(true, { transform: booleanAttribute });\n    /**\n     * Layout of the buttons, valid values are \"stacked\" (default), \"horizontal\" and \"vertical\".\n     * @group Props\n     */\n    buttonLayout = input<InputNumberButtonLayout>('stacked');\n    /**\n     * Identifier of the focus input to match a label defined for the component.\n     * @group Props\n     */\n    inputId = input<string>();\n    /**\n     * Advisory information to display on input.\n     * @group Props\n     */\n    placeholder = input<string>();\n    /**\n     * Specifies tab order of the element.\n     * @group Props\n     */\n    tabindex = input<number, unknown>(undefined, { transform: numberAttribute });\n    /**\n     * Title text of the input text.\n     * @group Props\n     */\n    title = input<string>();\n    /**\n     * Specifies one or more IDs in the DOM that labels the input field.\n     * @group Props\n     */\n    ariaLabelledBy = input<string>();\n    /**\n     * Specifies one or more IDs in the DOM that describes the input field.\n     * @group Props\n     */\n    ariaDescribedBy = input<string>();\n    /**\n     * Used to define a string that labels the input element.\n     * @group Props\n     */\n    ariaLabel = input<string>();\n    /**\n     * Used to indicate that user input is required on an element before a form can be submitted.\n     * @group Props\n     */\n    ariaRequired = input(undefined, { transform: booleanAttribute });\n    /**\n     * Used to define a string that autocomplete attribute the current element.\n     * @group Props\n     */\n    autocomplete = input<string>();\n    /**\n     * Style class of the increment button.\n     * @group Props\n     */\n    incrementButtonClass = input<string>();\n    /**\n     * Style class of the decrement button.\n     * @group Props\n     */\n    decrementButtonClass = input<string>();\n    /**\n     * Style class of the increment button.\n     * @group Props\n     */\n    incrementButtonIcon = input<string>();\n    /**\n     * Style class of the decrement button.\n     * @group Props\n     */\n    decrementButtonIcon = input<string>();\n    /**\n     * When present, it specifies that an input field is read-only.\n     * @group Props\n     */\n    readonly = input(undefined, { transform: booleanAttribute });\n    /**\n     * Determines whether the input field is empty.\n     * @group Props\n     */\n    allowEmpty = input(true, { transform: booleanAttribute });\n    /**\n     * Locale to be used in formatting.\n     * @group Props\n     */\n    locale = input<string>();\n    /**\n     * The locale matching algorithm to use. Possible values are \"lookup\" and \"best fit\"; the default is \"best fit\". See Locale Negotiation for details.\n     * @group Props\n     */\n    localeMatcher = input<InputNumberLocaleMatcher>();\n    /**\n     * Defines the behavior of the component, valid values are \"decimal\" and \"currency\".\n     * @group Props\n     */\n    mode = input<InputNumberMode>('decimal');\n    /**\n     * The currency to use in currency formatting. Possible values are the ISO 4217 currency codes, such as \"USD\" for the US dollar, \"EUR\" for the euro, or \"CNY\" for the Chinese RMB. There is no default value; if the style is \"currency\", the currency property must be provided.\n     * @group Props\n     */\n    currency = input<string>();\n    /**\n     * How to display the currency in currency formatting. Possible values are \"symbol\" to use a localized currency symbol such as €, ü\"code\" to use the ISO currency code, \"name\" to use a localized currency name such as \"dollar\"; the default is \"symbol\".\n     * @group Props\n     */\n    currencyDisplay = input<InputNumberCurrencyDisplay>();\n    /**\n     * Whether to use grouping separators, such as thousands separators or thousand/lakh/crore separators.\n     * @group Props\n     */\n    useGrouping = input(true, { transform: booleanAttribute });\n    /**\n     * The minimum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number and percent formatting is 0; the default for currency formatting is the number of minor unit digits provided by the ISO 4217 currency code list (2 if the list doesn't provide that information).\n     * @group Props\n     */\n    minFractionDigits = input<number, unknown>(undefined, { transform: (value: unknown) => numberAttribute(value, undefined) });\n    /**\n     * The maximum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number formatting is the larger of minimumFractionDigits and 3; the default for currency formatting is the larger of minimumFractionDigits and the number of minor unit digits provided by the ISO 4217 currency code list (2 if the list doesn't provide that information).\n     * @group Props\n     */\n    maxFractionDigits = input<number, unknown>(undefined, { transform: (value: unknown) => numberAttribute(value, undefined) });\n    /**\n     * Text to display before the value.\n     * @group Props\n     */\n    prefix = input<string>();\n    /**\n     * Text to display after the value.\n     * @group Props\n     */\n    suffix = input<string>();\n    /**\n     * Inline style of the input field.\n     * @group Props\n     */\n    inputStyle = input<CSSProperties>();\n    /**\n     * Style class of the input field.\n     * @group Props\n     */\n    inputStyleClass = input<string>();\n    /**\n     * When enabled, a clear icon is displayed to clear the value.\n     * @group Props\n     */\n    showClear = input(false, { transform: booleanAttribute });\n    /**\n     * When present, it specifies that the component should automatically get focus on load.\n     * @group Props\n     */\n    autofocus = input(undefined, { transform: booleanAttribute });\n    /**\n     * Callback to invoke on input.\n     * @param {InputNumberInputEvent} event - Custom input event.\n     * @group Emits\n     */\n    onInput = output<InputNumberInputEvent>();\n    /**\n     * Callback to invoke when the component receives focus.\n     * @param {Event} event - Browser event.\n     * @group Emits\n     */\n    onFocus = output<Event>();\n    /**\n     * Callback to invoke when the component loses focus.\n     * @param {Event} event - Browser event.\n     * @group Emits\n     */\n    onBlur = output<Event>();\n    /**\n     * Callback to invoke on input key press.\n     * @param {KeyboardEvent} event - Keyboard event.\n     * @group Emits\n     */\n    onKeyDown = output<KeyboardEvent>();\n    /**\n     * Callback to invoke when clear token is clicked.\n     * @group Emits\n     */\n    onClear = output<void>();\n\n    /**\n     * Custom clear icon template.\n     * @group Templates\n     */\n    clearIconTemplate = contentChild<TemplateRef<void>>('clearicon', { descendants: false });\n    /**\n     * Custom increment button icon template.\n     * @group Templates\n     */\n    incrementButtonIconTemplate = contentChild<TemplateRef<void>>('incrementbuttonicon', { descendants: false });\n\n    /**\n     * Custom decrement button icon template.\n     * @group Templates\n     */\n    decrementButtonIconTemplate = contentChild<TemplateRef<void>>('decrementbuttonicon', { descendants: false });\n\n    input = viewChild.required<ElementRef<HTMLInputElement>>('input');\n\n    requiredAttr = computed(() => (this.required() ? '' : undefined));\n\n    readonlyAttr = computed(() => (this.readonly() ? '' : undefined));\n\n    disabledAttr = computed(() => (this.$disabled() ? '' : undefined));\n\n    get showClearIcon() {\n        return this.buttonLayout() !== 'vertical' && this.showClear() && this.value() != null;\n    }\n\n    showStackedButtons = computed(() => this.showButtons() && this.buttonLayout() === 'stacked');\n\n    showNonStackedButtons = computed(() => this.showButtons() && this.buttonLayout() !== 'stacked');\n\n    hasIncrementButtonIcon = computed(() => !!this.incrementButtonIcon());\n\n    hasDecrementButtonIcon = computed(() => !!this.decrementButtonIcon());\n\n    private parserConfig = computed(() => ({\n        locale: this.locale(),\n        localeMatcher: this.localeMatcher(),\n        mode: this.mode(),\n        currency: this.currency(),\n        currencyDisplay: this.currencyDisplay(),\n        useGrouping: this.useGrouping(),\n        minFractionDigits: this.minFractionDigits(),\n        maxFractionDigits: this.maxFractionDigits(),\n        prefix: this.prefix(),\n        suffix: this.suffix()\n    }));\n\n    constructor() {\n        super();\n        effect(() => {\n            this.parserConfig();\n            this.updateConstructParser();\n        });\n    }\n\n    private _injector = inject(Injector);\n\n    value = signal<Nullable<number>>(undefined);\n\n    focused: Nullable<boolean>;\n\n    initialized: Nullable<boolean>;\n\n    groupChar: string = '';\n\n    prefixChar: string = '';\n\n    suffixChar: string = '';\n\n    isSpecialChar: Nullable<boolean>;\n\n    timer: ReturnType<typeof setTimeout> | null = null;\n\n    lastValue: Nullable<string>;\n\n    _numeral: RegExp = /./g;\n\n    numberFormat: Intl.NumberFormat | null = null;\n\n    _decimal: RegExp = /./g;\n\n    _decimalChar: string = '';\n\n    _group: RegExp = /./g;\n\n    _minusSign: RegExp = /./g;\n\n    _currency: Nullable<RegExp | string>;\n\n    _prefix: Nullable<RegExp>;\n\n    _suffix: Nullable<RegExp>;\n\n    _index: (d: string) => number | undefined = () => undefined;\n\n    private ngControl: NgControl | null = null;\n\n    onInit() {\n        this.ngControl = this._injector.get(NgControl, null, { optional: true });\n\n        this.constructParser();\n\n        this.initialized = true;\n    }\n\n    getOptions() {\n        // Validate fraction digits according to Intl.NumberFormat specifications\n        // Handle potential NaN, Infinity, or invalid values\n        const validateFractionDigits = (value: number | undefined, min: number, max: number) => {\n            if (value == null || isNaN(value) || !isFinite(value)) {\n                return undefined;\n            }\n            return Math.max(min, Math.min(max, Math.floor(value)));\n        };\n\n        const minFractionDigits = validateFractionDigits(this.minFractionDigits(), 0, 20);\n        const maxFractionDigits = validateFractionDigits(this.maxFractionDigits(), 0, 100);\n\n        // Ensure minFractionDigits <= maxFractionDigits\n        const validatedMinFractionDigits = minFractionDigits != null && maxFractionDigits != null && minFractionDigits > maxFractionDigits ? maxFractionDigits : minFractionDigits;\n\n        return {\n            localeMatcher: this.localeMatcher(),\n            style: this.mode(),\n            currency: this.currency(),\n            currencyDisplay: this.currencyDisplay(),\n            useGrouping: this.useGrouping(),\n            minimumFractionDigits: validatedMinFractionDigits,\n            maximumFractionDigits: maxFractionDigits\n        };\n    }\n\n    constructParser() {\n        const options = this.getOptions();\n        // Remove any properties with undefined or invalid values to let Intl.NumberFormat use defaults\n        const cleanOptions = Object.fromEntries(Object.entries(options).filter(([_key, value]) => value !== undefined));\n        this.numberFormat = new Intl.NumberFormat(this.locale(), cleanOptions);\n        const numerals = [...new Intl.NumberFormat(this.locale(), { useGrouping: false }).format(9876543210)].reverse();\n        const index = new Map(numerals.map((d, i) => [d, i]));\n        this._numeral = new RegExp(`[${numerals.join('')}]`, 'g');\n        this._group = this.getGroupingExpression();\n        this._minusSign = this.getMinusSignExpression();\n        this._currency = this.getCurrencyExpression();\n        this._decimal = this.getDecimalExpression();\n        this._decimalChar = this.getDecimalChar();\n        this._suffix = this.getSuffixExpression();\n        this._prefix = this.getPrefixExpression();\n        this._index = (d: string) => index.get(d);\n    }\n\n    updateConstructParser() {\n        if (this.initialized) {\n            this.constructParser();\n        }\n    }\n\n    escapeRegExp(text: string): string {\n        return text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n    }\n\n    getDecimalExpression(): RegExp {\n        const decimalChar = this.getDecimalChar();\n        return new RegExp(`[${decimalChar}]`, 'g');\n    }\n    getDecimalChar(): string {\n        const formatter = new Intl.NumberFormat(this.locale(), { ...this.getOptions(), useGrouping: false });\n        return formatter\n            .format(1.1)\n            .replace(this._currency as RegExp | string, '')\n            .trim()\n            .replace(this._numeral, '');\n    }\n\n    getGroupingExpression(): RegExp {\n        const formatter = new Intl.NumberFormat(this.locale(), { ...this.getOptions(), useGrouping: true });\n        const groupPart = formatter.formatToParts(1000000).find((part) => part.type === 'group');\n        this.groupChar = groupPart ? groupPart.value : '';\n        return new RegExp(`[${this.groupChar}]`, 'g');\n    }\n\n    getMinusSignExpression(): RegExp {\n        const formatter = new Intl.NumberFormat(this.locale(), { useGrouping: false });\n        return new RegExp(`[${formatter.format(-1).trim().replace(this._numeral, '')}]`, 'g');\n    }\n\n    getCurrencyExpression(): RegExp {\n        if (this.currency()) {\n            const formatter = new Intl.NumberFormat(this.locale(), {\n                style: 'currency',\n                currency: this.currency(),\n                currencyDisplay: this.currencyDisplay(),\n                minimumFractionDigits: 0,\n                maximumFractionDigits: 0\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\n    getPrefixExpression(): RegExp {\n        const prefix = this.prefix();\n        if (prefix) {\n            this.prefixChar = prefix;\n        } else {\n            const formatter = new Intl.NumberFormat(this.locale(), {\n                style: this.mode(),\n                currency: this.currency(),\n                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\n    getSuffixExpression(): RegExp {\n        const suffix = this.suffix();\n        if (suffix) {\n            this.suffixChar = suffix;\n        } else {\n            const formatter = new Intl.NumberFormat(this.locale(), {\n                style: this.mode(),\n                currency: this.currency(),\n                currencyDisplay: this.currencyDisplay(),\n                minimumFractionDigits: 0,\n                maximumFractionDigits: 0\n            });\n            this.suffixChar = formatter.format(1).split('1')[1];\n        }\n\n        return new RegExp(`${this.escapeRegExp(this.suffixChar || '')}`, 'g');\n    }\n\n    formatValue(value: any) {\n        if (value != null) {\n            if (value === '-') {\n                // Minus sign\n                return value;\n            }\n\n            const prefix = this.prefix();\n            const suffix = this.suffix();\n\n            if (this.format()) {\n                let formatter = new Intl.NumberFormat(this.locale(), this.getOptions());\n                let formattedValue = formatter.format(value);\n\n                if (prefix && value != prefix) {\n                    formattedValue = prefix + formattedValue;\n                }\n\n                if (suffix && value != suffix) {\n                    formattedValue = formattedValue + suffix;\n                }\n\n                return formattedValue;\n            }\n\n            return value.toString();\n        }\n\n        return '';\n    }\n\n    parseValue(text: any) {\n        const suffixRegex = this._suffix ? new RegExp(this._suffix, '') : /(?:)/;\n        const prefixRegex = this._prefix ? new RegExp(this._prefix, '') : /(?:)/;\n        const currencyRegex = this._currency ? new RegExp(this._currency as RegExp | string, '') : /(?:)/;\n\n        let filteredText = text\n            .replace(suffixRegex, '')\n            .replace(prefixRegex, '')\n            .trim()\n            .replace(/\\s/g, '')\n            .replace(currencyRegex, '')\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            return isNaN(parsedValue) ? null : parsedValue;\n        }\n\n        return null;\n    }\n\n    repeat(event: Event, interval: number | null, dir: number) {\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\n    spin(event: Event, dir: number) {\n        let step = (this.step() ?? 1) * dir;\n        let currentValue = this.parseValue(this.input()?.nativeElement.value) || 0;\n        let newValue = this.validateValue((currentValue as number) + step);\n        const max = this.maxlength();\n        if (max && max < this.formatValue(newValue).length) {\n            return;\n        }\n\n        this.updateInput(newValue, null, 'spin', null);\n        this.updateModel(event, newValue);\n\n        this.handleOnInput(event, currentValue, newValue);\n    }\n\n    clear() {\n        this.value.set(null);\n        this.onModelChange(this.value());\n        this.onClear.emit();\n    }\n\n    onUpButtonMouseDown(event: MouseEvent) {\n        if (event.button === 2) {\n            this.clearTimer();\n            return;\n        }\n\n        if (!this.$disabled()) {\n            this.input()?.nativeElement.focus();\n            this.repeat(event, null, 1);\n            event.preventDefault();\n        }\n    }\n\n    onUpButtonMouseUp() {\n        if (!this.$disabled()) {\n            this.clearTimer();\n        }\n    }\n\n    onUpButtonMouseLeave() {\n        if (!this.$disabled()) {\n            this.clearTimer();\n        }\n    }\n\n    onUpButtonKeyDown(event: KeyboardEvent) {\n        if (event.keyCode === 32 || event.keyCode === 13) {\n            this.repeat(event, null, 1);\n        }\n    }\n\n    onUpButtonKeyUp() {\n        if (!this.$disabled()) {\n            this.clearTimer();\n        }\n    }\n\n    onDownButtonMouseDown(event: MouseEvent) {\n        if (event.button === 2) {\n            this.clearTimer();\n            return;\n        }\n        if (!this.$disabled()) {\n            this.input()?.nativeElement.focus();\n            this.repeat(event, null, -1);\n            event.preventDefault();\n        }\n    }\n\n    onDownButtonMouseUp() {\n        if (!this.$disabled()) {\n            this.clearTimer();\n        }\n    }\n\n    onDownButtonMouseLeave() {\n        if (!this.$disabled()) {\n            this.clearTimer();\n        }\n    }\n\n    onDownButtonKeyUp() {\n        if (!this.$disabled()) {\n            this.clearTimer();\n        }\n    }\n\n    onDownButtonKeyDown(event: KeyboardEvent) {\n        if (event.keyCode === 32 || event.keyCode === 13) {\n            this.repeat(event, null, -1);\n        }\n    }\n\n    onUserInput(event: Event) {\n        if (this.readonly()) {\n            return;\n        }\n\n        if (this.isSpecialChar) {\n            (event.target as HTMLInputElement).value = this.lastValue as string;\n        }\n        this.isSpecialChar = false;\n    }\n\n    onInputKeyDown(event: KeyboardEvent) {\n        if (this.readonly()) {\n            return;\n        }\n\n        this.lastValue = (event.target as HTMLInputElement).value;\n        if ((event as KeyboardEvent).shiftKey || (event as KeyboardEvent).altKey) {\n            this.isSpecialChar = true;\n            return;\n        }\n\n        let selectionStart = (event.target as HTMLInputElement).selectionStart as number;\n        let selectionEnd = (event.target as HTMLInputElement).selectionEnd as number;\n        let inputValue = (event.target as HTMLInputElement).value as string;\n        let newValueStr: any = null;\n\n        if (event.altKey) {\n            event.preventDefault();\n        }\n\n        switch (event.key) {\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                for (let index = selectionStart; index <= inputValue.length; index++) {\n                    const previousCharIndex = index === 0 ? 0 : index - 1;\n                    if (this.isNumeralChar(inputValue.charAt(previousCharIndex))) {\n                        this.input().nativeElement.setSelectionRange(index, index);\n                        break;\n                    }\n                }\n                break;\n\n            case 'ArrowRight':\n                for (let index = selectionEnd; index >= 0; index--) {\n                    if (this.isNumeralChar(inputValue.charAt(index))) {\n                        this.input().nativeElement.setSelectionRange(index, index);\n                        break;\n                    }\n                }\n                break;\n\n            case 'Tab':\n            case 'Enter':\n                newValueStr = this.validateValue(this.parseValue(this.input().nativeElement.value));\n                this.input().nativeElement.value = this.formatValue(newValueStr);\n                this.input().nativeElement.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 == 1 && this.prefix()) || (selectionStart == inputValue.length && this.suffix())) {\n                        break;\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.input()?.nativeElement.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                            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) as number) > 0 ? newValueStr : '';\n                        } else {\n                            newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart);\n                        }\n                    } else if (this.mode() === 'currency' && this._currency && deleteChar.search(this._currency as RegExp) != -1) {\n                        newValueStr = inputValue.slice(1);\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                    if ((selectionStart == 0 && this.prefix()) || (selectionStart == inputValue.length - 1 && this.suffix())) {\n                        break;\n                    }\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.input()?.nativeElement.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                            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) as number) > 0 ? newValueStr : '';\n                        } else {\n                            newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1);\n                        }\n                    }\n\n                    this.updateValue(event, newValueStr as string, null, 'delete-back-single');\n                } else {\n                    newValueStr = this.deleteRange(inputValue, selectionStart, selectionEnd);\n                    this.updateValue(event, newValueStr, null, 'delete-range');\n                }\n                break;\n\n            case 'Home':\n                if (this.min()) {\n                    this.updateModel(event, this.min());\n                    event.preventDefault();\n                }\n                break;\n\n            case 'End':\n                if (this.max()) {\n                    this.updateModel(event, this.max());\n                    event.preventDefault();\n                }\n                break;\n\n            default:\n                break;\n        }\n\n        this.onKeyDown.emit(event);\n    }\n\n    onInputKeyPress(event: KeyboardEvent) {\n        if (this.readonly()) {\n            return;\n        }\n\n        let code = event.which || event.keyCode;\n        let char = String.fromCharCode(code);\n        let isDecimalSign = this.isDecimalSign(char);\n        const isMinusSign = this.isMinusSign(char);\n\n        if (code != 13) {\n            event.preventDefault();\n        }\n        if (!isDecimalSign && event.code === 'NumpadDecimal') {\n            isDecimalSign = true;\n            char = this._decimalChar;\n            code = char.charCodeAt(0);\n        }\n        const { value, selectionStart, selectionEnd } = this.input().nativeElement;\n        const newValue = this.parseValue(value + char);\n        const newValueStr = newValue != null ? newValue.toString() : '';\n        const selectedValue = value.substring(selectionStart as number, selectionEnd as number);\n        const selectedValueParsed = this.parseValue(selectedValue);\n        const selectedValueStr = selectedValueParsed != null ? selectedValueParsed.toString() : '';\n\n        if (selectionStart !== selectionEnd && selectedValueStr.length > 0) {\n            this.insert(event, char, { isDecimalSign, isMinusSign });\n            return;\n        }\n\n        const max = this.maxlength();\n\n        if (max && newValueStr.length > max) {\n            return;\n        }\n\n        if ((48 <= code && code <= 57) || isMinusSign || isDecimalSign) {\n            this.insert(event, char, { isDecimalSign, isMinusSign });\n        }\n    }\n\n    onPaste(event: ClipboardEvent) {\n        if (!this.$disabled() && !this.readonly()) {\n            event.preventDefault();\n            let data = (event.clipboardData || (this.document as any).defaultView['clipboardData']).getData('Text');\n            if (this.inputId() === 'integeronly' && /[^\\d-]/.test(data)) {\n                return;\n            }\n            if (data) {\n                if (this.maxlength()) {\n                    data = data.toString().substring(0, this.maxlength());\n                }\n\n                let filteredData = this.parseValue(data);\n                if (filteredData != null) {\n                    this.insert(event, filteredData.toString());\n                }\n            }\n        }\n    }\n\n    allowMinusSign() {\n        const min = this.min();\n\n        return min == null || min < 0;\n    }\n\n    isMinusSign(char: string) {\n        if (this._minusSign.test(char) || char === '-') {\n            this._minusSign.lastIndex = 0;\n            return true;\n        }\n\n        return false;\n    }\n\n    isDecimalSign(char: string) {\n        if (this._decimal.test(char)) {\n            this._decimal.lastIndex = 0;\n            return true;\n        }\n\n        return false;\n    }\n\n    isDecimalMode() {\n        return this.mode() === 'decimal';\n    }\n\n    getDecimalCharIndexes(val: string) {\n        let decimalCharIndex = val.search(this._decimal);\n        this._decimal.lastIndex = 0;\n\n        const filteredVal = val\n            .replace(this._prefix as RegExp, '')\n            .trim()\n            .replace(/\\s/g, '')\n            .replace(this._currency as RegExp, '');\n        const decimalCharIndexWithoutPrefix = filteredVal.search(this._decimal);\n        this._decimal.lastIndex = 0;\n\n        return { decimalCharIndex, decimalCharIndexWithoutPrefix };\n    }\n\n    getCharIndexes(val: string) {\n        const decimalCharIndex = val.search(this._decimal);\n        this._decimal.lastIndex = 0;\n        const minusCharIndex = val.search(this._minusSign);\n        this._minusSign.lastIndex = 0;\n        const suffixCharIndex = val.search(this._suffix as RegExp);\n        (this._suffix as RegExp).lastIndex = 0;\n        const currencyCharIndex = val.search(this._currency as RegExp);\n        (this._currency as RegExp).lastIndex = 0;\n\n        return { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex };\n    }\n\n    insert(event: Event, text: string, sign = { isDecimalSign: false, isMinusSign: false }) {\n        const minusCharIndexOnText = text.search(this._minusSign);\n        this._minusSign.lastIndex = 0;\n        if (!this.allowMinusSign() && minusCharIndexOnText !== -1) {\n            return;\n        }\n\n        let selectionStart = this.input()?.nativeElement.selectionStart ?? 0;\n        let selectionEnd = this.input()?.nativeElement.selectionEnd ?? 0;\n        let inputValue = this.input()?.nativeElement.value.trim();\n        const { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex } = this.getCharIndexes(inputValue);\n        let newValueStr;\n\n        if (sign.isMinusSign) {\n            if (selectionStart === 0) {\n                newValueStr = inputValue;\n                if (minusCharIndex === -1 || selectionEnd !== 0) {\n                    newValueStr = this.insertText(inputValue, text, 0, selectionEnd);\n                }\n\n                this.updateValue(event, newValueStr, text, 'insert');\n            }\n        } 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 ?? 0;\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\n    insertText(value: string, text: string, start: number, end: number) {\n        let textSplit = text === '.' ? text : text.split('.');\n\n        if (textSplit.length === 2) {\n            const decimalCharIndex = value.slice(start, end).search(this._decimal);\n            this._decimal.lastIndex = 0;\n            return decimalCharIndex > 0 ? value.slice(0, start) + this.formatValue(text) + value.slice(end) : value || this.formatValue(text);\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\n    deleteRange(value: string, start: number, end: number) {\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\n    initCursor() {\n        let selectionStart = this.input()?.nativeElement.selectionStart ?? 0;\n        let selectionEnd = this.input()?.nativeElement.selectionEnd ?? 0;\n        let inputValue = this.input()?.nativeElement.value;\n        let valueLength = inputValue.length;\n        let index: number | null = null;\n\n        // remove prefix\n        let prefixLength = (this.prefixChar || '').length;\n        inputValue = inputValue.replace(this._prefix as RegExp, '');\n\n        // Will allow selecting whole prefix. But not a part of it.\n        // Negative values will trigger clauses after this to fix the cursor position.\n        if (selectionStart === selectionEnd || selectionStart !== 0 || selectionEnd < prefixLength) {\n            selectionStart -= prefixLength;\n        }\n\n        let char = inputValue.charAt(selectionStart);\n        if (this.isNumeralChar(char)) {\n            return selectionStart + prefixLength;\n        }\n\n        //left\n        let i = selectionStart - 1;\n        while (i >= 0) {\n            char = inputValue.charAt(i);\n            if (this.isNumeralChar(char)) {\n                index = i + prefixLength;\n                break;\n            } else {\n                i--;\n            }\n        }\n\n        if (index !== null) {\n            this.input()?.nativeElement.setSelectionRange(index + 1, index + 1);\n        } else {\n            i = selectionStart;\n            while (i < valueLength) {\n                char = inputValue.charAt(i);\n                if (this.isNumeralChar(char)) {\n                    index = i + prefixLength;\n                    break;\n                } else {\n                    i++;\n                }\n            }\n\n            if (index !== null) {\n                this.input()?.nativeElement.setSelectionRange(index, index);\n            }\n        }\n\n        return index || 0;\n    }\n\n    onInputClick() {\n        const currentValue = this.input()?.nativeElement.value;\n\n        if (!this.readonly() && currentValue !== getSelection()) {\n            this.initCursor();\n        }\n    }\n\n    isNumeralChar(char: string) {\n        if (char.length === 1 && (this._numeral.test(char) || this._decimal.test(char) || this._group.test(char) || this._minusSign.test(char))) {\n            this.resetRegex();\n            return true;\n        }\n\n        return false;\n    }\n\n    resetRegex() {\n        this._numeral.lastIndex = 0;\n        this._decimal.lastIndex = 0;\n        this._group.lastIndex = 0;\n        this._minusSign.lastIndex = 0;\n    }\n\n    updateValue(event: Event, valueStr: Nullable<string>, insertedValueStr: Nullable<string>, operation: Nullable<string>) {\n        let currentValue = this.input()?.nativeElement.value;\n        let newValue: any = 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\n    handleOnInput(event: Event, currentValue: string, newValue: any) {\n        if (this.isValueChanged(currentValue, newValue)) {\n            this.input().nativeElement.value = this.formatValue(newValue);\n            this.input()?.nativeElement.setAttribute('aria-valuenow', newValue);\n            this.updateModel(event, newValue);\n            this.onInput.emit({ originalEvent: event, value: newValue, formattedValue: currentValue });\n        }\n    }\n\n    isValueChanged(currentValue: string, newValue: string) {\n        if (newValue === null && currentValue !== null) {\n            return true;\n        }\n\n        if (newValue != null) {\n            let parsedCurrentValue = typeof currentValue === 'string' ? this.parseValue(currentValue) : currentValue;\n            return newValue !== parsedCurrentValue;\n        }\n\n        return false;\n    }\n\n    validateValue(value: number | string) {\n        if (value === '-' || value == null) {\n            return null;\n        }\n        const min = this.min();\n        const max = this.max();\n\n        if (min != null && (value as number) < min) {\n            return this.min();\n        }\n\n        if (max != null && (value as number) > max) {\n            return max;\n        }\n\n        return value;\n    }\n\n    updateInput(value: any, insertedValueStr: Nullable<string>, operation: Nullable<string>, valueStr: Nullable<string>) {\n        insertedValueStr = insertedValueStr || '';\n\n        let inputValue = this.input()?.nativeElement.value;\n        let newValue = this.formatValue(value);\n        let currentLength = inputValue.length;\n\n        if (newValue !== valueStr) {\n            newValue = this.concatValues(newValue, valueStr as string);\n        }\n\n        if (currentLength === 0) {\n            this.input().nativeElement.value = newValue;\n            this.input().nativeElement.setSelectionRange(0, 0);\n            const index = this.initCursor();\n            const selectionEnd = index + insertedValueStr.length;\n            this.input().nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n        } else {\n            let selectionStart = this.input().nativeElement.selectionStart ?? 0;\n            let selectionEnd = this.input().nativeElement.selectionEnd ?? 0;\n            const maxlength = this.maxlength();\n            if (maxlength && newValue.length > maxlength) {\n                newValue = newValue.slice(0, maxlength);\n                selectionStart = Math.min(selectionStart, maxlength);\n                selectionEnd = Math.min(selectionEnd, maxlength);\n            }\n\n            if (maxlength && maxlength < newValue.length) {\n                return;\n            }\n\n            this.input().nativeElement.value = newValue;\n            let newLength = newValue.length;\n\n            if (operation === 'range-insert') {\n                const startValue = this.parseValue((inputValue || '').slice(0, selectionStart));\n                const startValueStr = startValue !== null ? startValue.toString() : '';\n                const startExpr = startValueStr.split('').join(`(${this.groupChar})?`);\n                const sRegex = new RegExp(startExpr, 'g');\n                sRegex.test(newValue);\n\n                const tExpr = insertedValueStr.split('').join(`(${this.groupChar})?`);\n                const tRegex = new RegExp(tExpr, 'g');\n                tRegex.test(newValue.slice(sRegex.lastIndex));\n\n                selectionEnd = sRegex.lastIndex + tRegex.lastIndex;\n                this.input().nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n            } else if (newLength === currentLength) {\n                if (operation === 'insert' || operation === 'delete-back-single') this.input().nativeElement.setSelectionRange(selectionEnd + 1, selectionEnd + 1);\n                else if (operation === 'delete-single') this.input().nativeElement.setSelectionRange(selectionEnd - 1, selectionEnd - 1);\n                else if (operation === 'delete-range' || operation === 'spin') this.input().nativeElement.setSelectionRange(selectionEnd, selectionEnd);\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.input().nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n            } else if (inputValue === '-' && operation === 'insert') {\n                this.input().nativeElement.setSelectionRange(0, 0);\n                const index = this.initCursor();\n                const selectionEnd = index + insertedValueStr.length + 1;\n                this.input().nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n            } else {\n                selectionEnd = selectionEnd + (newLength - currentLength);\n                this.input().nativeElement.setSelectionRange(selectionEnd, selectionEnd);\n            }\n        }\n\n        this.input().nativeElement.setAttribute('aria-valuenow', value);\n    }\n\n    concatValues(val1: string, val2: string) {\n        if (val1 && val2) {\n            let decimalCharIndex = val2.search(this._decimal);\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        return val1;\n    }\n\n    getDecimalLength(value: string) {\n        if (value) {\n            const valueSplit = value.split(this._decimal);\n\n            if (valueSplit.length === 2) {\n                return valueSplit[1]\n                    .replace(this._suffix as RegExp, '')\n                    .trim()\n                    .replace(/\\s/g, '')\n                    .replace(this._currency as RegExp, '').length;\n            }\n        }\n\n        return 0;\n    }\n\n    onInputFocus(event: Event) {\n        this.focused = true;\n        this.onFocus.emit(event);\n    }\n\n    onInputBlur(event: Event) {\n        this.focused = false;\n\n        const newValueNumber = this.validateValue(this.parseValue(this.input().nativeElement.value));\n        const newValueString = newValueNumber?.toString() ?? '';\n        this.input().nativeElement.value = this.formatValue(newValueNumber);\n        this.input().nativeElement.setAttribute('aria-valuenow', newValueString);\n        this.updateModel(event, newValueNumber);\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    }\n\n    formattedValue = computed(() => {\n        const value = this.value();\n        const val = !value && !this.allowEmpty() ? 0 : value;\n        return this.formatValue(val);\n    });\n\n    updateModel(event: Event, value: any) {\n        const isBlurUpdateOnMode = this.ngControl?.control?.updateOn === 'blur';\n\n        if (this.value() !== value) {\n            this.value.set(value);\n\n            if (!(isBlurUpdateOnMode && this.focused)) {\n                this.onModelChange(value);\n            }\n        } else if (isBlurUpdateOnMode) {\n            this.onModelChange(value);\n        }\n    }\n\n    /**\n     * @override\n     *\n     * @see {@link BaseEditableHolder.writeControlValue}\n     * Writes the value to the control.\n     */\n    writeControlValue(value: any, setModelValue: (value: any) => void): void {\n        this.value.set(value ? Number(value) : value);\n        setModelValue(value);\n    }\n\n    onDestroy() {\n        // Stop the spinner auto-repeat timer so it can't fire (and emit onInput) after destroy.\n        this.clearTimer();\n    }\n\n    clearTimer() {\n        if (this.timer) {\n            clearInterval(this.timer);\n        }\n    }\n\n    get dataP() {\n        return this.cn({\n            invalid: this.invalid(),\n            disabled: this.$disabled(),\n            focus: this.focused,\n            fluid: this.hasFluid,\n            filled: this.$variant() === 'filled',\n            empty: !this.$filled(),\n            [this.size() as string]: this.size(),\n            [this.buttonLayout()]: this.showButtons() && this.buttonLayout()\n        });\n    }\n}\n\n@NgModule({\n    imports: [InputNumber, SharedModule],\n    exports: [InputNumber, SharedModule]\n})\nexport class InputNumberModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["TimesIcon","AngleUpIcon","AngleDownIcon"],"mappings":"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"}