{"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 as inputnumber_style } from '@primeuix/styles/inputnumber';\nimport { BaseStyle } from 'primeng/base';\n\nconst style = /*css*/ `\n    ${inputnumber_style}\n\n    /* For PrimeNG */\n    p-inputNumber.ng-invalid.ng-dirty > .p-inputtext,\n    p-input-number.ng-invalid.ng-dirty > .p-inputtext,\n    p-inputnumber.ng-invalid.ng-dirty > .p-inputtext {\n        border-color: dt('inputtext.invalid.border.color');\n    }\n\n    p-inputNumber.ng-invalid.ng-dirty > .p-inputtext:enabled:focus,\n    p-input-number.ng-invalid.ng-dirty > .p-inputtext:enabled:focus,\n    p-inputnumber.ng-invalid.ng-dirty > .p-inputtext:enabled:focus {\n        border-color: dt('inputtext.focus.border.color');\n    }\n\n    p-inputNumber.ng-invalid.ng-dirty > .p-inputtext::placeholder,\n    p-input-number.ng-invalid.ng-dirty > .p-inputtext::placeholder,\n    p-inputnumber.ng-invalid.ng-dirty > .p-inputtext::placeholder {\n        color: dt('inputtext.invalid.placeholder.color');\n    }\n`;\n\nconst classes = {\n    root: ({ instance }) => [\n        'p-inputnumber p-component p-inputwrapper',\n        {\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            'p-invalid': instance.invalid()\n        }\n    ],\n    pcInputText: 'p-inputnumber-input',\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    clearIcon: 'p-inputnumber-clear-icon'\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 { CommonModule } from '@angular/common';\nimport {\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChild,\n    ContentChildren,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    inject,\n    InjectionToken,\n    Injector,\n    Input,\n    NgModule,\n    numberAttribute,\n    Output,\n    QueryList,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';\nimport { getSelection } from '@primeuix/utils';\nimport { PrimeTemplate, 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 { AngleDownIcon, AngleUpIcon, TimesIcon } from 'primeng/icons';\nimport { InputText } from 'primeng/inputtext';\nimport { Nullable } from 'primeng/ts-helpers';\nimport type { InputNumberInputEvent, InputNumberPassThrough } from 'primeng/types/inputnumber';\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-inputnumber, p-input-number',\n    standalone: true,\n    imports: [CommonModule, 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            [ngStyle]=\"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]=\"required() ? '' : undefined\"\n            [attr.readonly]=\"readonly ? '' : undefined\"\n            [attr.disabled]=\"$disabled() ? '' : undefined\"\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        <ng-container *ngIf=\"buttonLayout != 'vertical' && showClear && value\">\n            <svg data-p-icon=\"times\" *ngIf=\"!clearIconTemplate && !_clearIconTemplate\" [pBind]=\"ptm('clearIcon')\" [class]=\"cx('clearIcon')\" (click)=\"clear()\" />\n            <span *ngIf=\"clearIconTemplate || _clearIconTemplate\" [pBind]=\"ptm('clearIcon')\" (click)=\"clear()\" [class]=\"cx('clearIcon')\">\n                <ng-template *ngTemplateOutlet=\"clearIconTemplate || _clearIconTemplate\"></ng-template>\n            </span>\n        </ng-container>\n        <span [pBind]=\"ptm('buttonGroup')\" [class]=\"cx('buttonGroup')\" *ngIf=\"showButtons && buttonLayout === 'stacked'\" [attr.data-p]=\"dataP\">\n            <button\n                type=\"button\"\n                [pBind]=\"ptm('incrementButton')\"\n                [class]=\"cn(cx('incrementButton'), incrementButtonClass)\"\n                [attr.disabled]=\"$disabled() ? '' : undefined\"\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                <span *ngIf=\"incrementButtonIcon\" [pBind]=\"ptm('incrementButtonIcon')\" [ngClass]=\"incrementButtonIcon\"></span>\n                <ng-container *ngIf=\"!incrementButtonIcon\">\n                    <svg data-p-icon=\"angle-up\" [pBind]=\"ptm('incrementButtonIcon')\" *ngIf=\"!incrementButtonIconTemplate && !_incrementButtonIconTemplate\" />\n                    <ng-template *ngTemplateOutlet=\"incrementButtonIconTemplate || _incrementButtonIconTemplate\"></ng-template>\n                </ng-container>\n            </button>\n\n            <button\n                type=\"button\"\n                [pBind]=\"ptm('decrementButton')\"\n                [class]=\"cn(cx('decrementButton'), decrementButtonClass)\"\n                [attr.disabled]=\"$disabled() ? '' : undefined\"\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                <span *ngIf=\"decrementButtonIcon\" [pBind]=\"ptm('decrementButtonIcon')\" [ngClass]=\"decrementButtonIcon\"></span>\n                <ng-container *ngIf=\"!decrementButtonIcon\">\n                    <svg data-p-icon=\"angle-down\" [pBind]=\"ptm('decrementButtonIcon')\" *ngIf=\"!decrementButtonIconTemplate && !_decrementButtonIconTemplate\" />\n                    <ng-template *ngTemplateOutlet=\"decrementButtonIconTemplate || _decrementButtonIconTemplate\"></ng-template>\n                </ng-container>\n            </button>\n        </span>\n        <button\n            *ngIf=\"showButtons && buttonLayout !== 'stacked'\"\n            type=\"button\"\n            [pBind]=\"ptm('incrementButton')\"\n            [class]=\"cn(cx('incrementButton'), incrementButtonClass)\"\n            [attr.disabled]=\"$disabled() ? '' : undefined\"\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            <span *ngIf=\"incrementButtonIcon\" [pBind]=\"ptm('incrementButtonIcon')\" [ngClass]=\"incrementButtonIcon\"></span>\n            <ng-container *ngIf=\"!incrementButtonIcon\">\n                <svg data-p-icon=\"angle-up\" [pBind]=\"ptm('incrementButtonIcon')\" *ngIf=\"!incrementButtonIconTemplate && !_incrementButtonIconTemplate\" />\n                <ng-template *ngTemplateOutlet=\"incrementButtonIconTemplate || _incrementButtonIconTemplate\"></ng-template>\n            </ng-container>\n        </button>\n        <button\n            *ngIf=\"showButtons && buttonLayout !== 'stacked'\"\n            type=\"button\"\n            [pBind]=\"ptm('decrementButton')\"\n            [class]=\"cn(cx('decrementButton'), decrementButtonClass)\"\n            [attr.disabled]=\"$disabled() ? '' : undefined\"\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            <span *ngIf=\"decrementButtonIcon\" [pBind]=\"ptm('decrementButtonIcon')\" [ngClass]=\"decrementButtonIcon\"></span>\n            <ng-container *ngIf=\"!decrementButtonIcon\">\n                <svg data-p-icon=\"angle-down\" [pBind]=\"ptm('decrementButtonIcon')\" *ngIf=\"!decrementButtonIconTemplate && !_decrementButtonIconTemplate\" />\n                <ng-template *ngTemplateOutlet=\"decrementButtonIconTemplate || _decrementButtonIconTemplate\"></ng-template>\n            </ng-container>\n        </button>\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]': \"cn(cx('root'), styleClass)\",\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    @Input({ transform: booleanAttribute }) showButtons: boolean = false;\n    /**\n     * Whether to format the value.\n     * @group Props\n     */\n    @Input({ transform: booleanAttribute }) format: boolean = true;\n    /**\n     * Layout of the buttons, valid values are \"stacked\" (default), \"horizontal\" and \"vertical\".\n     * @group Props\n     */\n    @Input() buttonLayout: string = 'stacked';\n    /**\n     * Identifier of the focus input to match a label defined for the component.\n     * @group Props\n     */\n    @Input() inputId: string | undefined;\n    /**\n     * Style class of the component.\n     * @deprecated since v20.0.0, use `class` instead.\n     * @group Props\n     */\n    @Input() styleClass: string | undefined;\n    /**\n     * Advisory information to display on input.\n     * @group Props\n     */\n    @Input() placeholder: string | undefined;\n    /**\n     * Specifies tab order of the element.\n     * @group Props\n     */\n    @Input({ transform: numberAttribute }) tabindex: number | undefined;\n    /**\n     * Title text of the input text.\n     * @group Props\n     */\n    @Input() title: string | undefined;\n    /**\n     * Specifies one or more IDs in the DOM that labels the input field.\n     * @group Props\n     */\n    @Input() ariaLabelledBy: string | undefined;\n    /**\n     * Specifies one or more IDs in the DOM that describes the input field.\n     * @group Props\n     */\n    @Input() ariaDescribedBy: string | undefined;\n    /**\n     * Used to define a string that labels the input element.\n     * @group Props\n     */\n    @Input() ariaLabel: string | undefined;\n    /**\n     * Used to indicate that user input is required on an element before a form can be submitted.\n     * @group Props\n     */\n    @Input({ transform: booleanAttribute }) ariaRequired: boolean | undefined;\n    /**\n     * Used to define a string that autocomplete attribute the current element.\n     * @group Props\n     */\n    @Input() autocomplete: string | undefined;\n    /**\n     * Style class of the increment button.\n     * @group Props\n     */\n    @Input() incrementButtonClass: string | undefined;\n    /**\n     * Style class of the decrement button.\n     * @group Props\n     */\n    @Input() decrementButtonClass: string | undefined;\n    /**\n     * Style class of the increment button.\n     * @group Props\n     */\n    @Input() incrementButtonIcon: string | undefined;\n    /**\n     * Style class of the decrement button.\n     * @group Props\n     */\n    @Input() decrementButtonIcon: string | undefined;\n    /**\n     * When present, it specifies that an input field is read-only.\n     * @group Props\n     */\n    @Input({ transform: booleanAttribute }) readonly: boolean | undefined;\n    /**\n     * Determines whether the input field is empty.\n     * @group Props\n     */\n    @Input({ transform: booleanAttribute }) allowEmpty: boolean = true;\n    /**\n     * Locale to be used in formatting.\n     * @group Props\n     */\n    @Input() locale: string | undefined;\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    @Input() localeMatcher: any;\n    /**\n     * Defines the behavior of the component, valid values are \"decimal\" and \"currency\".\n     * @group Props\n     */\n    @Input() mode: string | any = '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    @Input() currency: string | undefined;\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    @Input() currencyDisplay: string | undefined | any;\n    /**\n     * Whether to use grouping separators, such as thousands separators or thousand/lakh/crore separators.\n     * @group Props\n     */\n    @Input({ transform: booleanAttribute }) useGrouping: boolean = true;\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    @Input({ transform: (value: unknown) => numberAttribute(value, undefined) }) minFractionDigits: number | 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    @Input({ transform: (value: unknown) => numberAttribute(value, undefined) }) maxFractionDigits: number | undefined;\n    /**\n     * Text to display before the value.\n     * @group Props\n     */\n    @Input() prefix: string | undefined;\n    /**\n     * Text to display after the value.\n     * @group Props\n     */\n    @Input() suffix: string | undefined;\n    /**\n     * Inline style of the input field.\n     * @group Props\n     */\n    @Input() inputStyle: any;\n    /**\n     * Style class of the input field.\n     * @group Props\n     */\n    @Input() inputStyleClass: string | undefined;\n    /**\n     * When enabled, a clear icon is displayed to clear the value.\n     * @group Props\n     */\n    @Input({ transform: booleanAttribute }) showClear: boolean = false;\n    /**\n     * When present, it specifies that the component should automatically get focus on load.\n     * @group Props\n     */\n    @Input({ transform: booleanAttribute }) autofocus: boolean | undefined;\n    /**\n     * Callback to invoke on input.\n     * @param {InputNumberInputEvent} event - Custom input event.\n     * @group Emits\n     */\n    @Output() onInput: EventEmitter<InputNumberInputEvent> = new EventEmitter<InputNumberInputEvent>();\n    /**\n     * Callback to invoke when the component receives focus.\n     * @param {Event} event - Browser event.\n     * @group Emits\n     */\n    @Output() onFocus: EventEmitter<Event> = new EventEmitter<Event>();\n    /**\n     * Callback to invoke when the component loses focus.\n     * @param {Event} event - Browser event.\n     * @group Emits\n     */\n    @Output() onBlur: EventEmitter<Event> = new EventEmitter<Event>();\n    /**\n     * Callback to invoke on input key press.\n     * @param {KeyboardEvent} event - Keyboard event.\n     * @group Emits\n     */\n    @Output() onKeyDown: EventEmitter<KeyboardEvent> = new EventEmitter<KeyboardEvent>();\n    /**\n     * Callback to invoke when clear token is clicked.\n     * @group Emits\n     */\n    @Output() onClear: EventEmitter<void> = new EventEmitter<void>();\n\n    /**\n     * Custom clear icon template.\n     * @group Templates\n     */\n    @ContentChild('clearicon', { descendants: false }) clearIconTemplate: Nullable<TemplateRef<void>>;\n    /**\n     * Custom increment button icon template.\n     * @group Templates\n     */\n    @ContentChild('incrementbuttonicon', { descendants: false }) incrementButtonIconTemplate: Nullable<TemplateRef<void>>;\n\n    /**\n     * Custom decrement button icon template.\n     * @group Templates\n     */\n    @ContentChild('decrementbuttonicon', { descendants: false }) decrementButtonIconTemplate: Nullable<TemplateRef<void>>;\n\n    @ContentChildren(PrimeTemplate) templates!: QueryList<PrimeTemplate>;\n\n    @ViewChild('input') input!: ElementRef<HTMLInputElement>;\n\n    _clearIconTemplate: TemplateRef<void> | undefined;\n\n    _incrementButtonIconTemplate: TemplateRef<void> | undefined;\n\n    _decrementButtonIconTemplate: TemplateRef<void> | undefined;\n\n    value: Nullable<number>;\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: any;\n\n    lastValue: Nullable<string>;\n\n    _numeral: any;\n\n    numberFormat: any;\n\n    _decimal: any;\n\n    _decimalChar: string = '';\n\n    _group: any;\n\n    _minusSign: any;\n\n    _currency: Nullable<RegExp | string>;\n\n    _prefix: Nullable<RegExp>;\n\n    _suffix: Nullable<RegExp>;\n\n    _index: number | any;\n\n    private ngControl: NgControl | null = null;\n\n    constructor(public readonly injector: Injector) {\n        super();\n    }\n\n    onChanges(simpleChange: SimpleChanges) {\n        const props = ['locale', 'localeMatcher', 'mode', 'currency', 'currencyDisplay', 'useGrouping', 'minFractionDigits', 'maxFractionDigits', 'prefix', 'suffix'];\n        if (props.some((p) => !!simpleChange[p])) {\n            this.updateConstructParser();\n        }\n    }\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    onAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'clearicon':\n                    this._clearIconTemplate = item.template;\n                    break;\n\n                case 'incrementbuttonicon':\n                    this._incrementButtonIconTemplate = item.template;\n                    break;\n\n                case 'decrementbuttonicon':\n                    this._decrementButtonIconTemplate = item.template;\n                    break;\n            }\n        });\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: any) => 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, { useGrouping: true });\n        this.groupChar = formatter.format(1000000).trim().replace(this._numeral, '').charAt(0);\n        return new RegExp(`[${this.groupChar}]`, 'g');\n    }\n\n    getMinusSignExpression(): 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        if (this.prefix) {\n            this.prefixChar = this.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        if (this.suffix) {\n            this.suffixChar = this.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            if (this.format) {\n                let formatter = new Intl.NumberFormat(this.locale, this.getOptions());\n                let formattedValue = formatter.format(value);\n\n                if (this.prefix && value != this.prefix) {\n                    formattedValue = this.prefix + formattedValue;\n                }\n\n                if (this.suffix && value != this.suffix) {\n                    formattedValue = formattedValue + this.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 = 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: any = this.input?.nativeElement.selectionStart;\n        let selectionEnd: any = this.input?.nativeElement.selectionEnd;\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;\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: any = this.input?.nativeElement.selectionStart;\n        let selectionEnd: any = this.input?.nativeElement.selectionEnd;\n        let inputValue = this.input?.nativeElement.value;\n        let valueLength = inputValue.length;\n        let index: any = 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 as ElementRef).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: any = this.input.nativeElement.selectionStart;\n            let selectionEnd: any = this.input.nativeElement.selectionEnd;\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: any = newValueNumber?.toString();\n        this.input.nativeElement.value = this.formatValue(newValueString);\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() {\n        const val = !this.value && !this.allowEmpty ? 0 : this.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 = 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 = value ? Number(value) : value;\n        setModelValue(value);\n        this.cd.markForCheck();\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":["inputnumber_style"],"mappings":"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"}