@unifylib/ui-lib 1.1.29 → 1.1.30

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.
@@ -5,6 +5,10 @@ export class DecimalOnlyDirective {
5
5
  this.el = el;
6
6
  }
7
7
  onKeyDown(event) {
8
+ const input = this.el.nativeElement;
9
+ const value = input.value;
10
+ const start = input.selectionStart ?? 0;
11
+ const end = input.selectionEnd ?? 0;
8
12
  if (event.ctrlKey ||
9
13
  event.metaKey ||
10
14
  event.altKey ||
@@ -12,7 +16,7 @@ export class DecimalOnlyDirective {
12
16
  return;
13
17
  }
14
18
  if (event.key === '.') {
15
- if (this.el.nativeElement.value.includes('.')) {
19
+ if (value.includes('.') || start === 0 || start === value.length) {
16
20
  event.preventDefault();
17
21
  }
18
22
  return;
@@ -21,14 +25,20 @@ export class DecimalOnlyDirective {
21
25
  event.preventDefault();
22
26
  }
23
27
  }
28
+ onBlur() {
29
+ const input = this.el.nativeElement;
30
+ if (input.value.endsWith('.')) {
31
+ input.value = input.value.slice(0, -1);
32
+ }
33
+ }
24
34
  onPaste(event) {
25
35
  const pasted = event.clipboardData?.getData('text') ?? '';
26
- if (!/^\d*\.?\d*$/.test(pasted)) {
36
+ if (!/^\d+(\.\d+)?$/.test(pasted)) {
27
37
  event.preventDefault();
28
38
  }
29
39
  }
30
40
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecimalOnlyDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
31
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: DecimalOnlyDirective, isStandalone: true, selector: "[numbersOnly]", host: { listeners: { "keydown": "onKeyDown($event)", "paste": "onPaste($event)" } }, ngImport: i0 }); }
41
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: DecimalOnlyDirective, isStandalone: true, selector: "[numbersOnly]", host: { listeners: { "keydown": "onKeyDown($event)", "blur": "onBlur()", "paste": "onPaste($event)" } }, ngImport: i0 }); }
32
42
  }
33
43
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecimalOnlyDirective, decorators: [{
34
44
  type: Directive,
@@ -39,8 +49,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
39
49
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { onKeyDown: [{
40
50
  type: HostListener,
41
51
  args: ['keydown', ['$event']]
52
+ }], onBlur: [{
53
+ type: HostListener,
54
+ args: ['blur']
42
55
  }], onPaste: [{
43
56
  type: HostListener,
44
57
  args: ['paste', ['$event']]
45
58
  }] } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVtYmVyc09ubHlEaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtZm9ybS1jYW52YXMvTnVtYmVyc09ubHlEaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTXBFLE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFBb0IsRUFBZ0M7UUFBaEMsT0FBRSxHQUFGLEVBQUUsQ0FBOEI7SUFBRyxDQUFDO0lBR3hELFNBQVMsQ0FBQyxLQUFvQjtRQUM1QixJQUNFLEtBQUssQ0FBQyxPQUFPO1lBQ2IsS0FBSyxDQUFDLE9BQU87WUFDYixLQUFLLENBQUMsTUFBTTtZQUNaLENBQUMsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFDNUYsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM5QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDekIsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUdELE9BQU8sQ0FBQyxLQUFxQjtRQUMzQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNoQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7K0dBakNVLG9CQUFvQjttR0FBcEIsb0JBQW9COzs0RkFBcEIsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixVQUFVLEVBQUUsSUFBSTtpQkFDakI7K0VBTUMsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF3Qm5DLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbbnVtYmVyc09ubHldJyxcclxuICBzdGFuZGFsb25lOiB0cnVlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEZWNpbWFsT25seURpcmVjdGl2ZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4pIHt9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKFxyXG4gICAgICBldmVudC5jdHJsS2V5IHx8XHJcbiAgICAgIGV2ZW50Lm1ldGFLZXkgfHxcclxuICAgICAgZXZlbnQuYWx0S2V5IHx8XHJcbiAgICAgIFsnQmFja3NwYWNlJywgJ1RhYicsICdBcnJvd0xlZnQnLCAnQXJyb3dSaWdodCcsICdEZWxldGUnLCAnSG9tZScsICdFbmQnXS5pbmNsdWRlcyhldmVudC5rZXkpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChldmVudC5rZXkgPT09ICcuJykge1xyXG4gICAgICBpZiAodGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlLmluY2x1ZGVzKCcuJykpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQua2V5IDwgJzAnIHx8IGV2ZW50LmtleSA+ICc5Jykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBwYXN0ZWQgPSBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgPz8gJyc7XHJcbiAgICBpZiAoIS9eXFxkKlxcLj9cXGQqJC8udGVzdChwYXN0ZWQpKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTnVtYmVyc09ubHlEaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnZvaWNlcS91aS1saWIvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UtZm9ybS1jYW52YXMvTnVtYmVyc09ubHlEaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTXBFLE1BQU0sT0FBTyxvQkFBb0I7SUFFL0IsWUFBb0IsRUFBZ0M7UUFBaEMsT0FBRSxHQUFGLEVBQUUsQ0FBOEI7SUFBRyxDQUFDO0lBR3hELFNBQVMsQ0FBQyxLQUFvQjtRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzFCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDO1FBRXBDLElBQ0UsS0FBSyxDQUFDLE9BQU87WUFDYixLQUFLLENBQUMsT0FBTztZQUNiLEtBQUssQ0FBQyxNQUFNO1lBQ1osQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUM1RixDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDdEIsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUN2QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFHRCxNQUFNO1FBQ0osTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDcEMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFHRCxPQUFPLENBQUMsS0FBcUI7UUFDM0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDOytHQTlDVSxvQkFBb0I7bUdBQXBCLG9CQUFvQjs7NEZBQXBCLG9CQUFvQjtrQkFKaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOytFQU1DLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBNkJuQyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsTUFBTTtnQkFTcEIsT0FBTztzQkFETixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tudW1iZXJzT25seV0nLFxyXG4gIHN0YW5kYWxvbmU6IHRydWVcclxufSlcclxuZXhwb3J0IGNsYXNzIERlY2ltYWxPbmx5RGlyZWN0aXZlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50Pikge31cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IHZhbHVlID0gaW5wdXQudmFsdWU7XHJcbiAgICBjb25zdCBzdGFydCA9IGlucHV0LnNlbGVjdGlvblN0YXJ0ID8/IDA7XHJcbiAgICBjb25zdCBlbmQgPSBpbnB1dC5zZWxlY3Rpb25FbmQgPz8gMDtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGV2ZW50LmN0cmxLZXkgfHxcclxuICAgICAgZXZlbnQubWV0YUtleSB8fFxyXG4gICAgICBldmVudC5hbHRLZXkgfHxcclxuICAgICAgWydCYWNrc3BhY2UnLCAnVGFiJywgJ0Fycm93TGVmdCcsICdBcnJvd1JpZ2h0JywgJ0RlbGV0ZScsICdIb21lJywgJ0VuZCddLmluY2x1ZGVzKGV2ZW50LmtleSlcclxuICAgICkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJy4nKSB7XHJcbiAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnLicpIHx8IHN0YXJ0ID09PSAwIHx8IHN0YXJ0ID09PSB2YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXZlbnQua2V5IDwgJzAnIHx8IGV2ZW50LmtleSA+ICc5Jykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignYmx1cicpXHJcbiAgb25CbHVyKCkge1xyXG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZiAoaW5wdXQudmFsdWUuZW5kc1dpdGgoJy4nKSkge1xyXG4gICAgICBpbnB1dC52YWx1ZSA9IGlucHV0LnZhbHVlLnNsaWNlKDAsIC0xKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3Bhc3RlJywgWyckZXZlbnQnXSlcclxuICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xyXG4gICAgY29uc3QgcGFzdGVkID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpID8/ICcnO1xyXG4gICAgaWYgKCEvXlxcZCsoXFwuXFxkKyk/JC8udGVzdChwYXN0ZWQpKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1805,6 +1805,10 @@ class DecimalOnlyDirective {
1805
1805
  this.el = el;
1806
1806
  }
1807
1807
  onKeyDown(event) {
1808
+ const input = this.el.nativeElement;
1809
+ const value = input.value;
1810
+ const start = input.selectionStart ?? 0;
1811
+ const end = input.selectionEnd ?? 0;
1808
1812
  if (event.ctrlKey ||
1809
1813
  event.metaKey ||
1810
1814
  event.altKey ||
@@ -1812,7 +1816,7 @@ class DecimalOnlyDirective {
1812
1816
  return;
1813
1817
  }
1814
1818
  if (event.key === '.') {
1815
- if (this.el.nativeElement.value.includes('.')) {
1819
+ if (value.includes('.') || start === 0 || start === value.length) {
1816
1820
  event.preventDefault();
1817
1821
  }
1818
1822
  return;
@@ -1821,14 +1825,20 @@ class DecimalOnlyDirective {
1821
1825
  event.preventDefault();
1822
1826
  }
1823
1827
  }
1828
+ onBlur() {
1829
+ const input = this.el.nativeElement;
1830
+ if (input.value.endsWith('.')) {
1831
+ input.value = input.value.slice(0, -1);
1832
+ }
1833
+ }
1824
1834
  onPaste(event) {
1825
1835
  const pasted = event.clipboardData?.getData('text') ?? '';
1826
- if (!/^\d*\.?\d*$/.test(pasted)) {
1836
+ if (!/^\d+(\.\d+)?$/.test(pasted)) {
1827
1837
  event.preventDefault();
1828
1838
  }
1829
1839
  }
1830
1840
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecimalOnlyDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1831
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: DecimalOnlyDirective, isStandalone: true, selector: "[numbersOnly]", host: { listeners: { "keydown": "onKeyDown($event)", "paste": "onPaste($event)" } }, ngImport: i0 }); }
1841
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: DecimalOnlyDirective, isStandalone: true, selector: "[numbersOnly]", host: { listeners: { "keydown": "onKeyDown($event)", "blur": "onBlur()", "paste": "onPaste($event)" } }, ngImport: i0 }); }
1832
1842
  }
1833
1843
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DecimalOnlyDirective, decorators: [{
1834
1844
  type: Directive,
@@ -1839,6 +1849,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1839
1849
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { onKeyDown: [{
1840
1850
  type: HostListener,
1841
1851
  args: ['keydown', ['$event']]
1852
+ }], onBlur: [{
1853
+ type: HostListener,
1854
+ args: ['blur']
1842
1855
  }], onPaste: [{
1843
1856
  type: HostListener,
1844
1857
  args: ['paste', ['$event']]