primeng 16.9.8-lts → 16.9.9-lts

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,38 +1,67 @@
1
1
  import { DomHandler } from 'primeng/dom';
2
2
  import { LicenseManager } from 'primeng/api';
3
- import { CommonModule } from '@angular/common';
3
+ import { DOCUMENT, isPlatformBrowser, CommonModule } from '@angular/common';
4
4
  import * as i0 from '@angular/core';
5
- import { Directive, Input, HostListener, NgModule } from '@angular/core';
5
+ import { inject, PLATFORM_ID, ElementRef, booleanAttribute, Directive, Input, NgModule } from '@angular/core';
6
6
 
7
7
  /**
8
8
  * Focus Trap keeps focus within a certain DOM element while tabbing.
9
9
  * @group Components
10
10
  */
11
11
  class FocusTrap {
12
- el;
13
12
  /**
14
13
  * When set as true, focus wouldn't be managed.
15
14
  * @group Props
16
15
  */
17
16
  pFocusTrapDisabled = false;
18
- constructor(el) {
19
- this.el = el;
20
- }
21
- onkeydown(e) {
22
- if (this.pFocusTrapDisabled !== true) {
23
- e.preventDefault();
24
- const focusableElement = DomHandler.getNextFocusableElement(this.el.nativeElement, e.shiftKey);
25
- if (focusableElement) {
26
- focusableElement.focus();
27
- focusableElement.select?.();
28
- }
17
+ platformId = inject(PLATFORM_ID);
18
+ host = inject(ElementRef);
19
+ document = inject(DOCUMENT);
20
+ firstHiddenFocusableElement;
21
+ lastHiddenFocusableElement;
22
+ ngOnInit() {
23
+ if (isPlatformBrowser(this.platformId) && !this.pFocusTrapDisabled) {
24
+ this.createHiddenFocusableElements();
29
25
  }
30
26
  }
27
+ getComputedSelector(selector) {
28
+ return `:not(.p-hidden-focusable):not([data-p-hidden-focusable="true"])${selector ?? ''}`;
29
+ }
30
+ createHiddenFocusableElements() {
31
+ const tabindex = '0';
32
+ const createFocusableElement = (onFocus) => {
33
+ return DomHandler.createElement('span', {
34
+ class: 'p-hidden-accessible p-hidden-focusable',
35
+ tabindex,
36
+ role: 'presentation',
37
+ 'aria-hidden': true,
38
+ 'data-p-hidden-accessible': true,
39
+ 'data-p-hidden-focusable': true,
40
+ onFocus: onFocus?.bind(this)
41
+ });
42
+ };
43
+ this.firstHiddenFocusableElement = createFocusableElement(this.onFirstHiddenElementFocus);
44
+ this.lastHiddenFocusableElement = createFocusableElement(this.onLastHiddenElementFocus);
45
+ this.firstHiddenFocusableElement.setAttribute('data-pc-section', 'firstfocusableelement');
46
+ this.lastHiddenFocusableElement.setAttribute('data-pc-section', 'lastfocusableelement');
47
+ this.host.nativeElement.prepend(this.firstHiddenFocusableElement);
48
+ this.host.nativeElement.append(this.lastHiddenFocusableElement);
49
+ }
50
+ onFirstHiddenElementFocus(event) {
51
+ const { currentTarget, relatedTarget } = event;
52
+ const focusableElement = relatedTarget === this.lastHiddenFocusableElement || !this.host.nativeElement?.contains(relatedTarget) ? DomHandler.getFirstFocusableElement(currentTarget.parentElement, ':not(.p-hidden-focusable)') : this.lastHiddenFocusableElement;
53
+ DomHandler.focus(focusableElement);
54
+ }
55
+ onLastHiddenElementFocus(event) {
56
+ const { currentTarget, relatedTarget } = event;
57
+ const focusableElement = relatedTarget === this.firstHiddenFocusableElement || !this.host.nativeElement?.contains(relatedTarget) ? DomHandler.getLastFocusableElement(currentTarget.parentElement, ':not(.p-hidden-focusable)') : this.firstHiddenFocusableElement;
58
+ DomHandler.focus(focusableElement);
59
+ }
31
60
  ngAfterViewInit() {
32
61
  LicenseManager.check();
33
62
  }
34
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: FocusTrap, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
35
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: FocusTrap, selector: "[pFocusTrap]", inputs: { pFocusTrapDisabled: "pFocusTrapDisabled" }, host: { listeners: { "keydown.tab": "onkeydown($event)", "keydown.shift.tab": "onkeydown($event)" }, classAttribute: "p-element" }, ngImport: i0 });
63
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: FocusTrap, deps: [], target: i0.ɵɵFactoryTarget.Directive });
64
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.0", type: FocusTrap, selector: "[pFocusTrap]", inputs: { pFocusTrapDisabled: ["pFocusTrapDisabled", "pFocusTrapDisabled", booleanAttribute] }, host: { classAttribute: "p-element" }, ngImport: i0 });
36
65
  }
37
66
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: FocusTrap, decorators: [{
38
67
  type: Directive,
@@ -42,14 +71,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.0", ngImpor
42
71
  class: 'p-element'
43
72
  }
44
73
  }]
45
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { pFocusTrapDisabled: [{
46
- type: Input
47
- }], onkeydown: [{
48
- type: HostListener,
49
- args: ['keydown.tab', ['$event']]
50
- }, {
51
- type: HostListener,
52
- args: ['keydown.shift.tab', ['$event']]
74
+ }], propDecorators: { pFocusTrapDisabled: [{
75
+ type: Input,
76
+ args: [{ transform: booleanAttribute }]
53
77
  }] } });
54
78
  class FocusTrapModule {
55
79
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.0", ngImport: i0, type: FocusTrapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
@@ -1 +1 @@
1
- {"version":3,"file":"primeng-focustrap.mjs","sources":["../../src/app/components/focustrap/focustrap.ts","../../src/app/components/focustrap/primeng-focustrap.ts"],"sourcesContent":["import { DomHandler } from 'primeng/dom';\nimport { LicenseManager } from 'primeng/api';\nimport { CommonModule } from '@angular/common';\nimport { Directive, ElementRef, HostListener, Input, NgModule } from '@angular/core';\n/**\n * Focus Trap keeps focus within a certain DOM element while tabbing.\n * @group Components\n */\n@Directive({\n selector: '[pFocusTrap]',\n host: {\n class: 'p-element'\n }\n})\nexport class FocusTrap {\n /**\n * When set as true, focus wouldn't be managed.\n * @group Props\n */\n @Input() pFocusTrapDisabled: boolean = false;\n\n constructor(public el: ElementRef) {}\n\n @HostListener('keydown.tab', ['$event'])\n @HostListener('keydown.shift.tab', ['$event'])\n onkeydown(e: KeyboardEvent) {\n if (this.pFocusTrapDisabled !== true) {\n e.preventDefault();\n const focusableElement = DomHandler.getNextFocusableElement(this.el.nativeElement, e.shiftKey);\n\n if (focusableElement) {\n focusableElement.focus();\n focusableElement.select?.();\n }\n }\n }\n\n ngAfterViewInit() {\n LicenseManager.check();\n }\n}\n\n@NgModule({\n imports: [CommonModule],\n exports: [FocusTrap],\n declarations: [FocusTrap]\n})\nexport class FocusTrapModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;AAIA;;;AAGG;AACH,MAMa,SAAS,CAAA;AAOC,IAAA,EAAA,CAAA;AANnB;;;AAGG;IACM,kBAAkB,GAAY,KAAK,CAAC;AAE7C,IAAA,WAAA,CAAmB,EAAc,EAAA;QAAd,IAAE,CAAA,EAAA,GAAF,EAAE,CAAY;KAAI;AAIrC,IAAA,SAAS,CAAC,CAAgB,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE;YAClC,CAAC,CAAC,cAAc,EAAE,CAAC;AACnB,YAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AAE/F,YAAA,IAAI,gBAAgB,EAAE;gBAClB,gBAAgB,CAAC,KAAK,EAAE,CAAC;AACzB,gBAAA,gBAAgB,CAAC,MAAM,IAAI,CAAC;AAC/B,aAAA;AACJ,SAAA;KACJ;IAED,eAAe,GAAA;QACX,cAAc,CAAC,KAAK,EAAE,CAAC;KAC1B;uGAzBQ,SAAS,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAAT,SAAS,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,mBAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAT,SAAS,EAAA,UAAA,EAAA,CAAA;kBANrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,WAAW;AACrB,qBAAA;AACJ,iBAAA,CAAA;iGAMY,kBAAkB,EAAA,CAAA;sBAA1B,KAAK;gBAMN,SAAS,EAAA,CAAA;sBAFR,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,CAAA;;sBACtC,YAAY;uBAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,CAAA;;AAkBjD,MAKa,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EAjCf,YAAA,EAAA,CAAA,SAAS,CA6BR,EAAA,OAAA,EAAA,CAAA,YAAY,aA7Bb,SAAS,CAAA,EAAA,CAAA,CAAA;AAiCT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAJd,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAIb,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,YAAY,EAAE,CAAC,SAAS,CAAC;AAC5B,iBAAA,CAAA;;;AC9CD;;AAEG;;;;"}
1
+ {"version":3,"file":"primeng-focustrap.mjs","sources":["../../src/app/components/focustrap/focustrap.ts","../../src/app/components/focustrap/primeng-focustrap.ts"],"sourcesContent":["import { DomHandler } from 'primeng/dom';\nimport { LicenseManager } from 'primeng/api';\nimport { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { Directive, ElementRef, Input, NgModule, inject, booleanAttribute, PLATFORM_ID } from '@angular/core';\n/**\n * Focus Trap keeps focus within a certain DOM element while tabbing.\n * @group Components\n */\n@Directive({\n selector: '[pFocusTrap]',\n host: {\n class: 'p-element'\n }\n})\nexport class FocusTrap {\n /**\n * When set as true, focus wouldn't be managed.\n * @group Props\n */\n @Input({ transform: booleanAttribute }) pFocusTrapDisabled: boolean = false;\n\n platformId = inject(PLATFORM_ID);\n\n host: ElementRef = inject(ElementRef);\n\n document: Document = inject(DOCUMENT);\n\n firstHiddenFocusableElement!: HTMLElement;\n\n lastHiddenFocusableElement!: HTMLElement;\n\n ngOnInit() {\n if (isPlatformBrowser(this.platformId) && !this.pFocusTrapDisabled) {\n this.createHiddenFocusableElements();\n }\n }\n\n getComputedSelector(selector) {\n return `:not(.p-hidden-focusable):not([data-p-hidden-focusable=\"true\"])${selector ?? ''}`;\n }\n\n createHiddenFocusableElements() {\n const tabindex = '0';\n\n const createFocusableElement = (onFocus) => {\n return DomHandler.createElement('span', {\n class: 'p-hidden-accessible p-hidden-focusable',\n tabindex,\n role: 'presentation',\n 'aria-hidden': true,\n 'data-p-hidden-accessible': true,\n 'data-p-hidden-focusable': true,\n onFocus: onFocus?.bind(this)\n });\n };\n\n this.firstHiddenFocusableElement = createFocusableElement(this.onFirstHiddenElementFocus);\n this.lastHiddenFocusableElement = createFocusableElement(this.onLastHiddenElementFocus);\n\n this.firstHiddenFocusableElement.setAttribute('data-pc-section', 'firstfocusableelement');\n this.lastHiddenFocusableElement.setAttribute('data-pc-section', 'lastfocusableelement');\n\n this.host.nativeElement.prepend(this.firstHiddenFocusableElement);\n this.host.nativeElement.append(this.lastHiddenFocusableElement);\n }\n\n onFirstHiddenElementFocus(event) {\n const { currentTarget, relatedTarget } = event;\n const focusableElement =\n relatedTarget === this.lastHiddenFocusableElement || !this.host.nativeElement?.contains(relatedTarget) ? DomHandler.getFirstFocusableElement(currentTarget.parentElement, ':not(.p-hidden-focusable)') : this.lastHiddenFocusableElement;\n\n DomHandler.focus(focusableElement);\n }\n\n onLastHiddenElementFocus(event) {\n const { currentTarget, relatedTarget } = event;\n const focusableElement =\n relatedTarget === this.firstHiddenFocusableElement || !this.host.nativeElement?.contains(relatedTarget) ? DomHandler.getLastFocusableElement(currentTarget.parentElement, ':not(.p-hidden-focusable)') : this.firstHiddenFocusableElement;\n\n DomHandler.focus(focusableElement);\n }\n ngAfterViewInit() {\n LicenseManager.check();\n }\n}\n\n@NgModule({\n imports: [CommonModule],\n exports: [FocusTrap],\n declarations: [FocusTrap]\n})\nexport class FocusTrapModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;AAIA;;;AAGG;AACH,MAMa,SAAS,CAAA;AAClB;;;AAGG;IACqC,kBAAkB,GAAY,KAAK,CAAC;AAE5E,IAAA,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAEjC,IAAA,IAAI,GAAe,MAAM,CAAC,UAAU,CAAC,CAAC;AAEtC,IAAA,QAAQ,GAAa,MAAM,CAAC,QAAQ,CAAC,CAAC;AAEtC,IAAA,2BAA2B,CAAe;AAE1C,IAAA,0BAA0B,CAAe;IAEzC,QAAQ,GAAA;QACJ,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YAChE,IAAI,CAAC,6BAA6B,EAAE,CAAC;AACxC,SAAA;KACJ;AAED,IAAA,mBAAmB,CAAC,QAAQ,EAAA;AACxB,QAAA,OAAO,CAAkE,+DAAA,EAAA,QAAQ,IAAI,EAAE,EAAE,CAAC;KAC7F;IAED,6BAA6B,GAAA;QACzB,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB,QAAA,MAAM,sBAAsB,GAAG,CAAC,OAAO,KAAI;AACvC,YAAA,OAAO,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE;AACpC,gBAAA,KAAK,EAAE,wCAAwC;gBAC/C,QAAQ;AACR,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,0BAA0B,EAAE,IAAI;AAChC,gBAAA,yBAAyB,EAAE,IAAI;AAC/B,gBAAA,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC;AAC/B,aAAA,CAAC,CAAC;AACP,SAAC,CAAC;QAEF,IAAI,CAAC,2BAA2B,GAAG,sBAAsB,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC1F,IAAI,CAAC,0BAA0B,GAAG,sBAAsB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAExF,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,iBAAiB,EAAE,uBAAuB,CAAC,CAAC;QAC1F,IAAI,CAAC,0BAA0B,CAAC,YAAY,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;QAExF,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;KACnE;AAED,IAAA,yBAAyB,CAAC,KAAK,EAAA;AAC3B,QAAA,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;AAC/C,QAAA,MAAM,gBAAgB,GAClB,aAAa,KAAK,IAAI,CAAC,0BAA0B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,wBAAwB,CAAC,aAAa,CAAC,aAAa,EAAE,2BAA2B,CAAC,GAAG,IAAI,CAAC,0BAA0B,CAAC;AAE7O,QAAA,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;KACtC;AAED,IAAA,wBAAwB,CAAC,KAAK,EAAA;AAC1B,QAAA,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;AAC/C,QAAA,MAAM,gBAAgB,GAClB,aAAa,KAAK,IAAI,CAAC,2BAA2B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,uBAAuB,CAAC,aAAa,CAAC,aAAa,EAAE,2BAA2B,CAAC,GAAG,IAAI,CAAC,2BAA2B,CAAC;AAE9O,QAAA,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;KACtC;IACD,eAAe,GAAA;QACX,cAAc,CAAC,KAAK,EAAE,CAAC;KAC1B;uGArEQ,SAAS,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAT,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,SAAS,uGAKE,gBAAgB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAL3B,SAAS,EAAA,UAAA,EAAA,CAAA;kBANrB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,cAAc;AACxB,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,WAAW;AACrB,qBAAA;AACJ,iBAAA,CAAA;8BAM2C,kBAAkB,EAAA,CAAA;sBAAzD,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;;AAmE1C,MAKa,eAAe,CAAA;uGAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,EA7Ef,YAAA,EAAA,CAAA,SAAS,CAyER,EAAA,OAAA,EAAA,CAAA,YAAY,aAzEb,SAAS,CAAA,EAAA,CAAA,CAAA;AA6ET,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAJd,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAIb,eAAe,EAAA,UAAA,EAAA,CAAA;kBAL3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,SAAS,CAAC;oBACpB,YAAY,EAAE,CAAC,SAAS,CAAC;AAC5B,iBAAA,CAAA;;;AC1FD;;AAEG;;;;"}
@@ -409,10 +409,10 @@ class InputNumber {
409
409
  if (this.format) {
410
410
  let formatter = new Intl.NumberFormat(this.locale, this.getOptions());
411
411
  let formattedValue = formatter.format(value);
412
- if (this.prefix) {
412
+ if (this.prefix && value != this.prefix) {
413
413
  formattedValue = this.prefix + formattedValue;
414
414
  }
415
- if (this.suffix) {
415
+ if (this.suffix && value != this.suffix) {
416
416
  formattedValue = formattedValue + this.suffix;
417
417
  }
418
418
  return formattedValue;
@@ -422,12 +422,15 @@ class InputNumber {
422
422
  return '';
423
423
  }
424
424
  parseValue(text) {
425
+ const suffixRegex = new RegExp(this._suffix, '');
426
+ const prefixRegex = new RegExp(this._prefix, '');
427
+ const currencyRegex = new RegExp(this._currency, '');
425
428
  let filteredText = text
426
- .replace(this._suffix, '')
427
- .replace(this._prefix, '')
429
+ .replace(suffixRegex, '')
430
+ .replace(prefixRegex, '')
428
431
  .trim()
429
432
  .replace(/\s/g, '')
430
- .replace(this._currency, '')
433
+ .replace(currencyRegex, '')
431
434
  .replace(this._group, '')
432
435
  .replace(this._minusSign, '-')
433
436
  .replace(this._decimal, '.')
@@ -584,6 +587,9 @@ class InputNumber {
584
587
  case 'Backspace': {
585
588
  event.preventDefault();
586
589
  if (selectionStart === selectionEnd) {
590
+ if ((selectionStart == 1 && this.prefix) || (selectionStart == inputValue.length && this.suffix)) {
591
+ break;
592
+ }
587
593
  const deleteChar = inputValue.charAt(selectionStart - 1);
588
594
  const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);
589
595
  if (this.isNumeralChar(deleteChar)) {
@@ -624,6 +630,9 @@ class InputNumber {
624
630
  case 'Delete':
625
631
  event.preventDefault();
626
632
  if (selectionStart === selectionEnd) {
633
+ if ((selectionStart == 0 && this.prefix) || (selectionStart == inputValue.length - 1 && this.suffix)) {
634
+ break;
635
+ }
627
636
  const deleteChar = inputValue.charAt(selectionStart);
628
637
  const { decimalCharIndex, decimalCharIndexWithoutPrefix } = this.getDecimalCharIndexes(inputValue);
629
638
  if (this.isNumeralChar(deleteChar)) {