@porscheinformatik/material-addons 15.0.3 → 16.0.0

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.
Files changed (82) hide show
  1. package/lib/button/danger-button/danger-button.component.d.ts +1 -1
  2. package/lib/button/flat-button/link-button.component.d.ts +1 -1
  3. package/lib/button/icon-button/icon-button.component.d.ts +1 -1
  4. package/lib/button/outline-button/outline-button.component.d.ts +1 -1
  5. package/lib/button/primary-button/primary-button.component.d.ts +1 -1
  6. package/lib/card/card.component.d.ts +1 -1
  7. package/lib/data-table/data-table.component.d.ts +1 -1
  8. package/lib/flowbar/flowbar.component.d.ts +1 -1
  9. package/lib/material-action-button/material-action-button.component.d.ts +1 -1
  10. package/lib/numeric-field/numeric-field.directive.d.ts +1 -1
  11. package/lib/quick-list/base-quick-list.component.d.ts +1 -1
  12. package/lib/readonly/readonly-form-field/readonly-form-field.component.d.ts +1 -1
  13. package/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.d.ts +1 -1
  14. package/lib/stepper/step-header/step-header.component.d.ts +1 -1
  15. package/lib/stepper/stepper.component.d.ts +1 -1
  16. package/lib/table/table.component.d.ts +1 -1
  17. package/lib/throttle-click/throttle-click.directive.d.ts +1 -1
  18. package/package.json +9 -11
  19. package/esm2020/lib/button/button.mjs +0 -7
  20. package/esm2020/lib/button/button.module.mjs +0 -26
  21. package/esm2020/lib/button/danger-button/danger-button.component.mjs +0 -28
  22. package/esm2020/lib/button/flat-button/link-button.component.mjs +0 -28
  23. package/esm2020/lib/button/icon-button/icon-button.component.mjs +0 -28
  24. package/esm2020/lib/button/mad-basic-button.mjs +0 -39
  25. package/esm2020/lib/button/outline-button/outline-button.component.mjs +0 -28
  26. package/esm2020/lib/button/primary-button/primary-button.component.mjs +0 -28
  27. package/esm2020/lib/card/card.component.mjs +0 -129
  28. package/esm2020/lib/card/card.mjs +0 -2
  29. package/esm2020/lib/card/card.module.mjs +0 -23
  30. package/esm2020/lib/content-panel/content-header/content-header.component.mjs +0 -11
  31. package/esm2020/lib/content-panel/content-panel-container/content-panel-container.component.mjs +0 -11
  32. package/esm2020/lib/content-panel/content-panel-container-content/content-panel-container-content.component.mjs +0 -11
  33. package/esm2020/lib/content-panel/content-panel-container-footer/content-panel-container-footer.component.mjs +0 -11
  34. package/esm2020/lib/content-panel/content-panel.module.mjs +0 -42
  35. package/esm2020/lib/content-panel/main-container/main-container.component.mjs +0 -11
  36. package/esm2020/lib/data-table/data-table-action-type.mjs +0 -6
  37. package/esm2020/lib/data-table/data-table-action.mjs +0 -2
  38. package/esm2020/lib/data-table/data-table-column-definition.mjs +0 -2
  39. package/esm2020/lib/data-table/data-table-column.mjs +0 -2
  40. package/esm2020/lib/data-table/data-table-columns-modal/data-table-columns-modal.component.mjs +0 -103
  41. package/esm2020/lib/data-table/data-table-row.mjs +0 -2
  42. package/esm2020/lib/data-table/data-table.component.mjs +0 -527
  43. package/esm2020/lib/data-table/data-table.mjs +0 -3
  44. package/esm2020/lib/data-table/data-table.module.mjs +0 -81
  45. package/esm2020/lib/flowbar/flowbar.component.mjs +0 -190
  46. package/esm2020/lib/flowbar/flowbar.module.mjs +0 -19
  47. package/esm2020/lib/material-action-button/material-action-button.component.mjs +0 -34
  48. package/esm2020/lib/material-action-button/material-action-button.module.mjs +0 -22
  49. package/esm2020/lib/material-addons.module.mjs +0 -45
  50. package/esm2020/lib/numeric-field/number-format.service.mjs +0 -139
  51. package/esm2020/lib/numeric-field/numeric-field.directive.mjs +0 -295
  52. package/esm2020/lib/numeric-field/numeric-field.mjs +0 -2
  53. package/esm2020/lib/numeric-field/numeric-field.module.mjs +0 -24
  54. package/esm2020/lib/quick-list/base-quick-list.component.mjs +0 -101
  55. package/esm2020/lib/quick-list/quick-list-compact/quick-list-compact.component.mjs +0 -20
  56. package/esm2020/lib/quick-list/quick-list.component.mjs +0 -21
  57. package/esm2020/lib/quick-list/quick-list.mjs +0 -4
  58. package/esm2020/lib/quick-list/quick-list.module.mjs +0 -23
  59. package/esm2020/lib/readonly/readonly-form-field/readonly-form-field.component.mjs +0 -155
  60. package/esm2020/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.mjs +0 -185
  61. package/esm2020/lib/readonly/readonly-form-field.module.mjs +0 -24
  62. package/esm2020/lib/stepper/mad-stepper-animation.mjs +0 -13
  63. package/esm2020/lib/stepper/step-header/step-header.component.mjs +0 -77
  64. package/esm2020/lib/stepper/stepper.component.mjs +0 -159
  65. package/esm2020/lib/stepper/stepper.module.mjs +0 -23
  66. package/esm2020/lib/table/column-header.mjs +0 -2
  67. package/esm2020/lib/table/table-action.mjs +0 -2
  68. package/esm2020/lib/table/table.component.mjs +0 -130
  69. package/esm2020/lib/table/table.mjs +0 -2
  70. package/esm2020/lib/table/table.module.mjs +0 -56
  71. package/esm2020/lib/throttle-click/throttle-click.directive.mjs +0 -38
  72. package/esm2020/lib/throttle-click/throttle-click.module.mjs +0 -18
  73. package/esm2020/lib/toolbar/toolbar-action.interface.mjs +0 -2
  74. package/esm2020/lib/toolbar/toolbar.component.mjs +0 -78
  75. package/esm2020/lib/toolbar/toolbar.module.mjs +0 -56
  76. package/esm2020/lib/toolbar/toolbar.service.mjs +0 -124
  77. package/esm2020/porscheinformatik-material-addons.mjs +0 -5
  78. package/esm2020/public_api.mjs +0 -41
  79. package/fesm2015/porscheinformatik-material-addons.mjs +0 -3007
  80. package/fesm2015/porscheinformatik-material-addons.mjs.map +0 -1
  81. package/fesm2020/porscheinformatik-material-addons.mjs +0 -2983
  82. package/fesm2020/porscheinformatik-material-addons.mjs.map +0 -1
@@ -1,139 +0,0 @@
1
- import { Inject, LOCALE_ID, Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class NumberFormatService {
4
- constructor(locale) {
5
- this.allowedKeys = [];
6
- // try to get the current formatting
7
- const localeDecimalSeparator = (1.1).toLocaleString(locale).charAt(1);
8
- this.decimalSeparator = localeDecimalSeparator === ',' ? ',' : '.';
9
- this.groupingSeparator = localeDecimalSeparator === ',' ? '.' : ',';
10
- this.allowedKeys = [...NumberFormatService.NUMBERS, NumberFormatService.NEGATIVE, this.decimalSeparator];
11
- }
12
- static valueIsSet(value) {
13
- return typeof value !== 'undefined' && value !== null && (typeof value !== 'string' || value.length !== 0);
14
- }
15
- format(value, options) {
16
- return NumberFormatService.valueIsSet(value)
17
- ? this.formatNumber(value.toString().replace(new RegExp('[.]', 'g'), this.decimalSeparator), options)
18
- : '';
19
- }
20
- formatNumber(value, options) {
21
- const autofillDecimals = this.valueOrDefault(options?.autofillDecimals, NumberFormatService.DEFAULT_AUTOFILL_DECIMALS);
22
- const decimalPlaces = this.valueOrDefault(options?.decimalPlaces, NumberFormatService.DEFAULT_DECIMAL_PLACES);
23
- const finalFormatting = this.valueOrDefault(options?.finalFormatting, NumberFormatService.DEFAULT_FINAL_FORMATTING);
24
- let result = this.strip(value, { decimalPlaces, removeLeadingZeros: finalFormatting });
25
- /* add grouping separator */
26
- const decimalIndex = result.indexOf(this.decimalSeparator);
27
- const isNegative = result.startsWith(NumberFormatService.NEGATIVE);
28
- let i = decimalIndex > -1 ? decimalIndex : result.length;
29
- while (i > (isNegative ? 4 : 3)) {
30
- i -= 3;
31
- result = result.substring(0, i) + this.groupingSeparator + result.substring(i, result.length);
32
- }
33
- if (finalFormatting) {
34
- if (decimalPlaces > 0 && !!result) {
35
- /* autofill decimal places */
36
- let actualDecimalIndex = result.indexOf(this.decimalSeparator);
37
- if (autofillDecimals) {
38
- if (actualDecimalIndex === -1) {
39
- actualDecimalIndex = result.length;
40
- result += this.decimalSeparator;
41
- }
42
- result = this.addMissingLeadingZero(result, actualDecimalIndex);
43
- actualDecimalIndex = result.indexOf(this.decimalSeparator);
44
- const actualDecimalPlaces = result.length - actualDecimalIndex - 1;
45
- for (let j = 0; j < decimalPlaces - actualDecimalPlaces; j++) {
46
- result += '0';
47
- }
48
- }
49
- else {
50
- result = this.addMissingLeadingZero(result, actualDecimalIndex);
51
- }
52
- }
53
- }
54
- return result;
55
- }
56
- strip(value, options) {
57
- const decimalPlaces = this.valueOrDefault(options?.decimalPlaces, NumberFormatService.DEFAULT_DECIMAL_PLACES);
58
- const removeLeadingZeros = this.valueOrDefault(options?.removeLeadingZeros, NumberFormatService.DEFAULT_REMOVE_LEADING_ZEROS);
59
- let result = '';
60
- let indexDecimalSep = -1;
61
- let j = -1;
62
- let ignoredChars = 0;
63
- for (const char of value) {
64
- j++;
65
- if (this.allowedKeys.includes(char)) {
66
- if (char === this.decimalSeparator) {
67
- if (decimalPlaces === 0) {
68
- /* dismiss content after a decimal separator, when no places allowed */
69
- break;
70
- }
71
- else if (indexDecimalSep > -1) {
72
- /* ignore subsequent decimal separators */
73
- continue;
74
- }
75
- indexDecimalSep = j;
76
- }
77
- if (char === '0' && removeLeadingZeros) {
78
- /* remove leading zero only if it's not the only zero in the 'value' string */
79
- if ((result.length === 0 && j + 1 !== value.length) || result === NumberFormatService.NEGATIVE) {
80
- ignoredChars++;
81
- continue;
82
- }
83
- }
84
- if (char === NumberFormatService.NEGATIVE && j > 0) {
85
- /* dismiss content after a negative sign not on first position */
86
- break;
87
- }
88
- if (indexDecimalSep > -1 && result.length + ignoredChars > indexDecimalSep + decimalPlaces) {
89
- /* dismiss content after maximum decimal places reached */
90
- break;
91
- }
92
- result += char;
93
- }
94
- else if (char === this.groupingSeparator) {
95
- if (indexDecimalSep === -1) {
96
- ignoredChars++;
97
- }
98
- }
99
- else {
100
- /* dismiss content after a invalid character */
101
- break;
102
- }
103
- }
104
- return result;
105
- }
106
- addMissingLeadingZero(result, actualDecimalIndex) {
107
- const isNegative = result.startsWith(NumberFormatService.NEGATIVE);
108
- /* autoadd a zero before decimal separator, when it's missing */
109
- if (actualDecimalIndex === 0) {
110
- result = '0' + result;
111
- }
112
- /* autoadd a zero before decimal separator, when it's missing, for negative values */
113
- if (actualDecimalIndex === 1 && isNegative) {
114
- result = result[0] + '0' + result.substring(1, result.length);
115
- }
116
- return result;
117
- }
118
- valueOrDefault(value, defaultValue) {
119
- return NumberFormatService.valueIsSet(value) ? value : defaultValue;
120
- }
121
- }
122
- NumberFormatService.NEGATIVE = '-';
123
- NumberFormatService.NUMBERS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
124
- NumberFormatService.DEFAULT_FINAL_FORMATTING = true;
125
- NumberFormatService.DEFAULT_DECIMAL_PLACES = 2;
126
- NumberFormatService.DEFAULT_AUTOFILL_DECIMALS = false;
127
- NumberFormatService.DEFAULT_REMOVE_LEADING_ZEROS = false;
128
- NumberFormatService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NumberFormatService, deps: [{ token: LOCALE_ID }], target: i0.ɵɵFactoryTarget.Injectable });
129
- NumberFormatService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NumberFormatService, providedIn: 'any' });
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NumberFormatService, decorators: [{
131
- type: Injectable,
132
- args: [{
133
- providedIn: 'any',
134
- }]
135
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
136
- type: Inject,
137
- args: [LOCALE_ID]
138
- }] }]; } });
139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWZvcm1hdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWF0ZXJpYWwtYWRkb25zL3NyYy9saWIvbnVtZXJpYy1maWVsZC9udW1iZXItZm9ybWF0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQW1COUQsTUFBTSxPQUFPLG1CQUFtQjtJQWE5QixZQUErQixNQUFjO1FBRjdDLGdCQUFXLEdBQWEsRUFBRSxDQUFDO1FBR3pCLG9DQUFvQztRQUNwQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsc0JBQXNCLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNuRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsc0JBQXNCLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUVwRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNHLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQVU7UUFDMUIsT0FBTyxPQUFPLEtBQUssS0FBSyxXQUFXLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBYSxFQUFFLE9BQWdDO1FBQ3BELE9BQU8sbUJBQW1CLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxPQUFPLENBQUM7WUFDckcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYSxFQUFFLE9BQWdDO1FBQzFELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN2SCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUM5RyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUVwSCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO1FBRXZGLDRCQUE0QjtRQUM1QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzNELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDekQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDL0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNQLE1BQU0sR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQy9GO1FBRUQsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pDLDZCQUE2QjtnQkFDN0IsSUFBSSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUMvRCxJQUFJLGdCQUFnQixFQUFFO29CQUNwQixJQUFJLGtCQUFrQixLQUFLLENBQUMsQ0FBQyxFQUFFO3dCQUM3QixrQkFBa0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO3dCQUNuQyxNQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDO3FCQUNqQztvQkFFRCxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO29CQUNoRSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUUzRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO29CQUNuRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxHQUFHLG1CQUFtQixFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUM1RCxNQUFNLElBQUksR0FBRyxDQUFDO3FCQUNmO2lCQUNGO3FCQUFNO29CQUNMLE1BQU0sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7aUJBQ2pFO2FBQ0Y7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBYSxFQUFFLE9BQXNCO1FBQ3pDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzlHLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUMsNEJBQTRCLENBQUMsQ0FBQztRQUU5SCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDWCxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFDckIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEIsQ0FBQyxFQUFFLENBQUM7WUFDSixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNuQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ2xDLElBQUksYUFBYSxLQUFLLENBQUMsRUFBRTt3QkFDdkIsdUVBQXVFO3dCQUN2RSxNQUFNO3FCQUNQO3lCQUFNLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUMvQiwwQ0FBMEM7d0JBQzFDLFNBQVM7cUJBQ1Y7b0JBQ0QsZUFBZSxHQUFHLENBQUMsQ0FBQztpQkFDckI7Z0JBQ0QsSUFBSSxJQUFJLEtBQUssR0FBRyxJQUFJLGtCQUFrQixFQUFFO29CQUN0Qyw4RUFBOEU7b0JBQzlFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEtBQUssbUJBQW1CLENBQUMsUUFBUSxFQUFFO3dCQUM5RixZQUFZLEVBQUUsQ0FBQzt3QkFDZixTQUFTO3FCQUNWO2lCQUNGO2dCQUNELElBQUksSUFBSSxLQUFLLG1CQUFtQixDQUFDLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNsRCxpRUFBaUU7b0JBQ2pFLE1BQU07aUJBQ1A7Z0JBQ0QsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxZQUFZLEdBQUcsZUFBZSxHQUFHLGFBQWEsRUFBRTtvQkFDMUYsMERBQTBEO29CQUMxRCxNQUFNO2lCQUNQO2dCQUNELE1BQU0sSUFBSSxJQUFJLENBQUM7YUFDaEI7aUJBQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUMxQyxJQUFJLGVBQWUsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDMUIsWUFBWSxFQUFFLENBQUM7aUJBQ2hCO2FBQ0Y7aUJBQU07Z0JBQ0wsK0NBQStDO2dCQUMvQyxNQUFNO2FBQ1A7U0FDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUFjLEVBQUUsa0JBQTBCO1FBQ3RFLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbkUsZ0VBQWdFO1FBQ2hFLElBQUksa0JBQWtCLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO1NBQ3ZCO1FBQ0QscUZBQXFGO1FBQ3JGLElBQUksa0JBQWtCLEtBQUssQ0FBQyxJQUFJLFVBQVUsRUFBRTtZQUMxQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0Q7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQVUsRUFBRSxZQUFpQjtRQUNsRCxPQUFPLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFDdEUsQ0FBQzs7QUF4SWUsNEJBQVEsR0FBRyxHQUFHLENBQUM7QUFDZiwyQkFBTyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0QsNENBQXdCLEdBQUcsSUFBSSxDQUFDO0FBQ2hDLDBDQUFzQixHQUFHLENBQUMsQ0FBQztBQUMzQiw2Q0FBeUIsR0FBRyxLQUFLLENBQUM7QUFDbEMsZ0RBQTRCLEdBQUcsS0FBSyxDQUFDO2dIQU4xQyxtQkFBbUIsa0JBYVYsU0FBUztvSEFibEIsbUJBQW1CLGNBRmxCLEtBQUs7MkZBRU4sbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjs7MEJBY2MsTUFBTTsyQkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBMT0NBTEVfSUQsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEZvcm1hdE9wdGlvbnMge1xuICBkZWNpbWFsUGxhY2VzPzogbnVtYmVyO1xuXG4gIGZpbmFsRm9ybWF0dGluZz86IGJvb2xlYW47XG5cbiAgYXV0b2ZpbGxEZWNpbWFscz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBTdHJpcE9wdGlvbnMge1xuICBkZWNpbWFsUGxhY2VzPzogbnVtYmVyO1xuXG4gIHJlbW92ZUxlYWRpbmdaZXJvcz86IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ2FueScsXG59KVxuZXhwb3J0IGNsYXNzIE51bWJlckZvcm1hdFNlcnZpY2Uge1xuICBzdGF0aWMgcmVhZG9ubHkgTkVHQVRJVkUgPSAnLSc7XG4gIHN0YXRpYyByZWFkb25seSBOVU1CRVJTID0gWycwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5J107XG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0ZJTkFMX0ZPUk1BVFRJTkcgPSB0cnVlO1xuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9ERUNJTUFMX1BMQUNFUyA9IDI7XG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0FVVE9GSUxMX0RFQ0lNQUxTID0gZmFsc2U7XG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX1JFTU9WRV9MRUFESU5HX1pFUk9TID0gZmFsc2U7XG5cbiAgZGVjaW1hbFNlcGFyYXRvcjogJywnIHwgJy4nO1xuICBncm91cGluZ1NlcGFyYXRvcjogJywnIHwgJy4nO1xuXG4gIGFsbG93ZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoTE9DQUxFX0lEKSBsb2NhbGU6IHN0cmluZykge1xuICAgIC8vIHRyeSB0byBnZXQgdGhlIGN1cnJlbnQgZm9ybWF0dGluZ1xuICAgIGNvbnN0IGxvY2FsZURlY2ltYWxTZXBhcmF0b3IgPSAoMS4xKS50b0xvY2FsZVN0cmluZyhsb2NhbGUpLmNoYXJBdCgxKTtcbiAgICB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgPSBsb2NhbGVEZWNpbWFsU2VwYXJhdG9yID09PSAnLCcgPyAnLCcgOiAnLic7XG4gICAgdGhpcy5ncm91cGluZ1NlcGFyYXRvciA9IGxvY2FsZURlY2ltYWxTZXBhcmF0b3IgPT09ICcsJyA/ICcuJyA6ICcsJztcblxuICAgIHRoaXMuYWxsb3dlZEtleXMgPSBbLi4uTnVtYmVyRm9ybWF0U2VydmljZS5OVU1CRVJTLCBOdW1iZXJGb3JtYXRTZXJ2aWNlLk5FR0FUSVZFLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3JdO1xuICB9XG5cbiAgc3RhdGljIHZhbHVlSXNTZXQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlICE9PSBudWxsICYmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8IHZhbHVlLmxlbmd0aCAhPT0gMCk7XG4gIH1cblxuICBmb3JtYXQodmFsdWU6IG51bWJlciwgb3B0aW9ucz86IFBhcnRpYWw8Rm9ybWF0T3B0aW9ucz4pOiBzdHJpbmcge1xuICAgIHJldHVybiBOdW1iZXJGb3JtYXRTZXJ2aWNlLnZhbHVlSXNTZXQodmFsdWUpXG4gICAgICA/IHRoaXMuZm9ybWF0TnVtYmVyKHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZShuZXcgUmVnRXhwKCdbLl0nLCAnZycpLCB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpLCBvcHRpb25zKVxuICAgICAgOiAnJztcbiAgfVxuXG4gIGZvcm1hdE51bWJlcih2YWx1ZTogc3RyaW5nLCBvcHRpb25zPzogUGFydGlhbDxGb3JtYXRPcHRpb25zPik6IHN0cmluZyB7XG4gICAgY29uc3QgYXV0b2ZpbGxEZWNpbWFscyA9IHRoaXMudmFsdWVPckRlZmF1bHQob3B0aW9ucz8uYXV0b2ZpbGxEZWNpbWFscywgTnVtYmVyRm9ybWF0U2VydmljZS5ERUZBVUxUX0FVVE9GSUxMX0RFQ0lNQUxTKTtcbiAgICBjb25zdCBkZWNpbWFsUGxhY2VzID0gdGhpcy52YWx1ZU9yRGVmYXVsdChvcHRpb25zPy5kZWNpbWFsUGxhY2VzLCBOdW1iZXJGb3JtYXRTZXJ2aWNlLkRFRkFVTFRfREVDSU1BTF9QTEFDRVMpO1xuICAgIGNvbnN0IGZpbmFsRm9ybWF0dGluZyA9IHRoaXMudmFsdWVPckRlZmF1bHQob3B0aW9ucz8uZmluYWxGb3JtYXR0aW5nLCBOdW1iZXJGb3JtYXRTZXJ2aWNlLkRFRkFVTFRfRklOQUxfRk9STUFUVElORyk7XG5cbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5zdHJpcCh2YWx1ZSwgeyBkZWNpbWFsUGxhY2VzLCByZW1vdmVMZWFkaW5nWmVyb3M6IGZpbmFsRm9ybWF0dGluZyB9KTtcblxuICAgIC8qIGFkZCBncm91cGluZyBzZXBhcmF0b3IgKi9cbiAgICBjb25zdCBkZWNpbWFsSW5kZXggPSByZXN1bHQuaW5kZXhPZih0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSByZXN1bHQuc3RhcnRzV2l0aChOdW1iZXJGb3JtYXRTZXJ2aWNlLk5FR0FUSVZFKTtcbiAgICBsZXQgaSA9IGRlY2ltYWxJbmRleCA+IC0xID8gZGVjaW1hbEluZGV4IDogcmVzdWx0Lmxlbmd0aDtcbiAgICB3aGlsZSAoaSA+IChpc05lZ2F0aXZlID8gNCA6IDMpKSB7XG4gICAgICBpIC09IDM7XG4gICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKDAsIGkpICsgdGhpcy5ncm91cGluZ1NlcGFyYXRvciArIHJlc3VsdC5zdWJzdHJpbmcoaSwgcmVzdWx0Lmxlbmd0aCk7XG4gICAgfVxuXG4gICAgaWYgKGZpbmFsRm9ybWF0dGluZykge1xuICAgICAgaWYgKGRlY2ltYWxQbGFjZXMgPiAwICYmICEhcmVzdWx0KSB7XG4gICAgICAgIC8qIGF1dG9maWxsIGRlY2ltYWwgcGxhY2VzICovXG4gICAgICAgIGxldCBhY3R1YWxEZWNpbWFsSW5kZXggPSByZXN1bHQuaW5kZXhPZih0aGlzLmRlY2ltYWxTZXBhcmF0b3IpO1xuICAgICAgICBpZiAoYXV0b2ZpbGxEZWNpbWFscykge1xuICAgICAgICAgIGlmIChhY3R1YWxEZWNpbWFsSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICBhY3R1YWxEZWNpbWFsSW5kZXggPSByZXN1bHQubGVuZ3RoO1xuICAgICAgICAgICAgcmVzdWx0ICs9IHRoaXMuZGVjaW1hbFNlcGFyYXRvcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXN1bHQgPSB0aGlzLmFkZE1pc3NpbmdMZWFkaW5nWmVybyhyZXN1bHQsIGFjdHVhbERlY2ltYWxJbmRleCk7XG4gICAgICAgICAgYWN0dWFsRGVjaW1hbEluZGV4ID0gcmVzdWx0LmluZGV4T2YodGhpcy5kZWNpbWFsU2VwYXJhdG9yKTtcblxuICAgICAgICAgIGNvbnN0IGFjdHVhbERlY2ltYWxQbGFjZXMgPSByZXN1bHQubGVuZ3RoIC0gYWN0dWFsRGVjaW1hbEluZGV4IC0gMTtcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRlY2ltYWxQbGFjZXMgLSBhY3R1YWxEZWNpbWFsUGxhY2VzOyBqKyspIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnMCc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9IHRoaXMuYWRkTWlzc2luZ0xlYWRpbmdaZXJvKHJlc3VsdCwgYWN0dWFsRGVjaW1hbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RyaXAodmFsdWU6IHN0cmluZywgb3B0aW9ucz86IFN0cmlwT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IHRoaXMudmFsdWVPckRlZmF1bHQob3B0aW9ucz8uZGVjaW1hbFBsYWNlcywgTnVtYmVyRm9ybWF0U2VydmljZS5ERUZBVUxUX0RFQ0lNQUxfUExBQ0VTKTtcbiAgICBjb25zdCByZW1vdmVMZWFkaW5nWmVyb3MgPSB0aGlzLnZhbHVlT3JEZWZhdWx0KG9wdGlvbnM/LnJlbW92ZUxlYWRpbmdaZXJvcywgTnVtYmVyRm9ybWF0U2VydmljZS5ERUZBVUxUX1JFTU9WRV9MRUFESU5HX1pFUk9TKTtcblxuICAgIGxldCByZXN1bHQgPSAnJztcbiAgICBsZXQgaW5kZXhEZWNpbWFsU2VwID0gLTE7XG4gICAgbGV0IGogPSAtMTtcbiAgICBsZXQgaWdub3JlZENoYXJzID0gMDtcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2YgdmFsdWUpIHtcbiAgICAgIGorKztcbiAgICAgIGlmICh0aGlzLmFsbG93ZWRLZXlzLmluY2x1ZGVzKGNoYXIpKSB7XG4gICAgICAgIGlmIChjaGFyID09PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3IpIHtcbiAgICAgICAgICBpZiAoZGVjaW1hbFBsYWNlcyA9PT0gMCkge1xuICAgICAgICAgICAgLyogZGlzbWlzcyBjb250ZW50IGFmdGVyIGEgZGVjaW1hbCBzZXBhcmF0b3IsIHdoZW4gbm8gcGxhY2VzIGFsbG93ZWQgKi9cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaW5kZXhEZWNpbWFsU2VwID4gLTEpIHtcbiAgICAgICAgICAgIC8qIGlnbm9yZSBzdWJzZXF1ZW50IGRlY2ltYWwgc2VwYXJhdG9ycyAqL1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGluZGV4RGVjaW1hbFNlcCA9IGo7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYXIgPT09ICcwJyAmJiByZW1vdmVMZWFkaW5nWmVyb3MpIHtcbiAgICAgICAgICAvKiByZW1vdmUgbGVhZGluZyB6ZXJvIG9ubHkgaWYgaXQncyBub3QgdGhlIG9ubHkgemVybyBpbiB0aGUgJ3ZhbHVlJyBzdHJpbmcgKi9cbiAgICAgICAgICBpZiAoKHJlc3VsdC5sZW5ndGggPT09IDAgJiYgaiArIDEgIT09IHZhbHVlLmxlbmd0aCkgfHwgcmVzdWx0ID09PSBOdW1iZXJGb3JtYXRTZXJ2aWNlLk5FR0FUSVZFKSB7XG4gICAgICAgICAgICBpZ25vcmVkQ2hhcnMrKztcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhciA9PT0gTnVtYmVyRm9ybWF0U2VydmljZS5ORUdBVElWRSAmJiBqID4gMCkge1xuICAgICAgICAgIC8qIGRpc21pc3MgY29udGVudCBhZnRlciBhIG5lZ2F0aXZlIHNpZ24gbm90IG9uIGZpcnN0IHBvc2l0aW9uICovXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4RGVjaW1hbFNlcCA+IC0xICYmIHJlc3VsdC5sZW5ndGggKyBpZ25vcmVkQ2hhcnMgPiBpbmRleERlY2ltYWxTZXAgKyBkZWNpbWFsUGxhY2VzKSB7XG4gICAgICAgICAgLyogZGlzbWlzcyBjb250ZW50IGFmdGVyIG1heGltdW0gZGVjaW1hbCBwbGFjZXMgcmVhY2hlZCAqL1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCArPSBjaGFyO1xuICAgICAgfSBlbHNlIGlmIChjaGFyID09PSB0aGlzLmdyb3VwaW5nU2VwYXJhdG9yKSB7XG4gICAgICAgIGlmIChpbmRleERlY2ltYWxTZXAgPT09IC0xKSB7XG4gICAgICAgICAgaWdub3JlZENoYXJzKys7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGRpc21pc3MgY29udGVudCBhZnRlciBhIGludmFsaWQgY2hhcmFjdGVyICovXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNaXNzaW5nTGVhZGluZ1plcm8ocmVzdWx0OiBzdHJpbmcsIGFjdHVhbERlY2ltYWxJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBpc05lZ2F0aXZlID0gcmVzdWx0LnN0YXJ0c1dpdGgoTnVtYmVyRm9ybWF0U2VydmljZS5ORUdBVElWRSk7XG4gICAgLyogYXV0b2FkZCBhIHplcm8gYmVmb3JlIGRlY2ltYWwgc2VwYXJhdG9yLCB3aGVuIGl0J3MgbWlzc2luZyAqL1xuICAgIGlmIChhY3R1YWxEZWNpbWFsSW5kZXggPT09IDApIHtcbiAgICAgIHJlc3VsdCA9ICcwJyArIHJlc3VsdDtcbiAgICB9XG4gICAgLyogYXV0b2FkZCBhIHplcm8gYmVmb3JlIGRlY2ltYWwgc2VwYXJhdG9yLCB3aGVuIGl0J3MgbWlzc2luZywgZm9yIG5lZ2F0aXZlIHZhbHVlcyAqL1xuICAgIGlmIChhY3R1YWxEZWNpbWFsSW5kZXggPT09IDEgJiYgaXNOZWdhdGl2ZSkge1xuICAgICAgcmVzdWx0ID0gcmVzdWx0WzBdICsgJzAnICsgcmVzdWx0LnN1YnN0cmluZygxLCByZXN1bHQubGVuZ3RoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgdmFsdWVPckRlZmF1bHQodmFsdWU6IGFueSwgZGVmYXVsdFZhbHVlOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBOdW1iZXJGb3JtYXRTZXJ2aWNlLnZhbHVlSXNTZXQodmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cbiJdfQ==
@@ -1,295 +0,0 @@
1
- /*
2
- * Copyright (c) 2018-2020 Porsche Informatik. All Rights Reserved.
3
- * This software is released under MIT license.
4
- * The full license information can be found in LICENSE in the root directory of this project.
5
- */
6
- import { Directive, EventEmitter, forwardRef, Input, Output, } from '@angular/core';
7
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
8
- import { NumberFormatService } from './number-format.service';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "./number-format.service";
11
- const BACK_KEYCODE = 8;
12
- const SPACE_KEYCODE = 32;
13
- const DEL_KEYCODE = 46;
14
- const CONTROL_KEYCODES_UPPER_BORDER = 46;
15
- const OTHER_CONTROL_KEYS = new Set([224, 91, 93]);
16
- export class NumericFieldDirective {
17
- set numericValue(value) {
18
- if (this._numericValue !== value && !(isNaN(this._numericValue) && (isNaN(value) || value === null))) {
19
- this.originalValue = value;
20
- // Don't roundOrTruncate if value was set to empty otherwise input value will be set to 0 instead of empty
21
- // which happens when an input is being reset
22
- this._numericValue = value === null || value === undefined ? value : this.roundOrTruncate(value); // eslint-disable-line
23
- this.handleInputChanged();
24
- }
25
- }
26
- constructor(renderer, inputEl, numberFormatService) {
27
- this.renderer = renderer;
28
- this.inputEl = inputEl;
29
- this.numberFormatService = numberFormatService;
30
- this.textAlign = 'right';
31
- this.decimalPlaces = 2;
32
- this.roundValue = false;
33
- this.autofillDecimals = false;
34
- this.unit = null;
35
- this.unitPosition = 'right';
36
- this.numericValueChanged = new EventEmitter();
37
- this.displayValue = '';
38
- this.originalValue = NaN;
39
- /* Control Values Accessor Stuff below */
40
- // eslint-disable-next-line
41
- this.onChange = () => { };
42
- // eslint-disable-next-line
43
- this.onTouched = () => { };
44
- }
45
- registerOnChange(fn) {
46
- this.onChange = fn;
47
- }
48
- registerOnTouched(fn) {
49
- this.onTouched = fn;
50
- }
51
- setDisabledState() {
52
- // Dont need to implement since its just a directive
53
- }
54
- writeValue(value) {
55
- this.numericValue = value;
56
- }
57
- ngOnInit() {
58
- /* needs to be parsed as number explicitly as it comes as string from user input */
59
- this.decimalPlaces = parseInt(this.decimalPlaces.toString(), 10);
60
- this.inputChangeListener = this.renderer.listen(this.inputEl.nativeElement, 'blur', event => {
61
- this.formatInput(event.target, true);
62
- });
63
- this.keyupListener = this.renderer.listen(this.inputEl.nativeElement, 'keyup', event => {
64
- if (event.keyCode === BACK_KEYCODE || (event.keyCode >= CONTROL_KEYCODES_UPPER_BORDER && !OTHER_CONTROL_KEYS.has(event.keyCode))) {
65
- this.formatInput(event.target, false);
66
- }
67
- });
68
- this.keydownListener = this.renderer.listen(this.inputEl.nativeElement, 'keydown', event => {
69
- const value = event.target.value;
70
- if (this.numberFormatService.allowedKeys.includes(event.key) ||
71
- (event.keyCode <= CONTROL_KEYCODES_UPPER_BORDER && event.keyCode > 0 && event.keyCode !== SPACE_KEYCODE) ||
72
- event.metaKey ||
73
- event.ctrlKey ||
74
- event.altKey) {
75
- /* allow negative sign only as first character and none exists outside of text selection */
76
- const indexNegativeSign = value.indexOf(NumberFormatService.NEGATIVE);
77
- if (event.key === NumberFormatService.NEGATIVE &&
78
- (event.target.selectionStart > 0 || indexNegativeSign > -1) &&
79
- (event.target.selectionStart === event.target.selectionEnd ||
80
- !(indexNegativeSign >= event.target.selectionStart && indexNegativeSign <= event.target.selectionEnd))) {
81
- return false;
82
- }
83
- /* no duplicate decimal separators */
84
- const indexDecimalSep = value.indexOf(this.numberFormatService.decimalSeparator);
85
- if (event.key === this.numberFormatService.decimalSeparator &&
86
- (indexDecimalSep > -1 || this.decimalPlaces === 0) &&
87
- (event.target.selectionStart === event.target.selectionEnd ||
88
- !(indexDecimalSep >= event.target.selectionStart && indexDecimalSep <= event.target.selectionEnd))) {
89
- return false;
90
- }
91
- /* prevent too many decimal places */
92
- if (NumberFormatService.NUMBERS.includes(event.key) &&
93
- indexDecimalSep > -1 &&
94
- indexDecimalSep < event.target.selectionStart &&
95
- event.target.selectionStart === event.target.selectionEnd &&
96
- value.length > indexDecimalSep + this.decimalPlaces) {
97
- return false;
98
- }
99
- /* when deleting thousand separator, remove the digit before or after it */
100
- const cursorStart = event.target.selectionStart;
101
- if (cursorStart === event.target.selectionEnd) {
102
- if (event.keyCode === BACK_KEYCODE && value.substr(cursorStart - 1, 1) === this.numberFormatService.groupingSeparator) {
103
- event.target.value = value.substring(0, cursorStart - 2) + value.substring(cursorStart - 1, value.length);
104
- event.target.selectionStart = event.target.selectionEnd = cursorStart - 1;
105
- return false;
106
- }
107
- else if (event.keyCode === DEL_KEYCODE && value.substr(cursorStart, 1) === this.numberFormatService.groupingSeparator) {
108
- event.target.value = value.substring(0, cursorStart + 1) + value.substring(cursorStart + 2, value.length);
109
- event.target.selectionStart = event.target.selectionEnd = cursorStart + 1;
110
- return false;
111
- }
112
- }
113
- this.originalValue = NaN;
114
- }
115
- else {
116
- return false;
117
- }
118
- return true;
119
- });
120
- }
121
- ngOnDestroy() {
122
- this.detachListener();
123
- }
124
- ngAfterViewChecked() {
125
- this.injectUnitSymbol();
126
- }
127
- handleInputChanged() {
128
- // Call in set timeout to avoid Expression has changed after it has been checked error.
129
- // Sometimes the value changes because we cut off decimal places
130
- setTimeout(() => {
131
- this.updateInput(this.numberFormatService.format(this._numericValue, {
132
- decimalPlaces: this.decimalPlaces,
133
- finalFormatting: false,
134
- autofillDecimals: this.autofillDecimals,
135
- }));
136
- }, 1);
137
- }
138
- formatInput(element, finalFormatting) {
139
- const cursorPos = element.selectionStart;
140
- const length = element.value.length;
141
- const setCursor = this.displayValue !== element.value;
142
- const textFormatted = this.numberFormatService.formatNumber(element.value, {
143
- decimalPlaces: this.decimalPlaces,
144
- finalFormatting,
145
- autofillDecimals: this.autofillDecimals,
146
- });
147
- // special handling to move unit symbol along with display value
148
- if (this.textAlign === 'left' && this.unitPosition === 'right') {
149
- const inputStyles = window.getComputedStyle(this.inputEl.nativeElement.parentElement, null);
150
- this.unitSpan.style.position = 'absolute';
151
- this.unitSpan.style.marginTop = inputStyles.getPropertyValue('border-top-width');
152
- this.unitSpan.style.paddingTop = inputStyles.getPropertyValue('padding-top');
153
- this.unitSpan.style.paddingBottom = inputStyles.getPropertyValue('padding-bottom');
154
- if (!this.textSpan) {
155
- this.textSpan = document.createElement('span');
156
- document.body.appendChild(this.textSpan);
157
- this.textSpan.style.font = inputStyles.getPropertyValue('font');
158
- this.textSpan.style.fontSize = inputStyles.getPropertyValue('font-size');
159
- this.textSpan.style.height = 'auto';
160
- this.textSpan.style.width = 'auto';
161
- this.textSpan.style.position = 'absolute';
162
- this.textSpan.style.top = '0';
163
- this.textSpan.style.whiteSpace = 'no-wrap';
164
- this.textSpan.style.visibility = 'hidden';
165
- }
166
- this.textSpan.innerHTML = textFormatted;
167
- const width = Math.min(this.inputEl.nativeElement.clientWidth - this.unitSpan.clientWidth, Math.ceil(this.textSpan.clientWidth));
168
- this.unitSpan.style.left = width + 'px';
169
- }
170
- this.updateInput(textFormatted);
171
- if (setCursor) {
172
- element.selectionStart = element.selectionEnd = Math.max(cursorPos + element.value.length - length, 0);
173
- }
174
- }
175
- updateInput(value) {
176
- this.displayValue = value;
177
- this.inputEl.nativeElement.value = value;
178
- this._numericValue = parseFloat(this.numberFormatService.strip(value, { decimalPlaces: this.decimalPlaces }).replace(this.numberFormatService.decimalSeparator, '.'));
179
- if (this._numericValue !== this.roundOrTruncate(this.originalValue)) {
180
- this.originalValue = this._numericValue;
181
- this.numericValueChanged.emit(this._numericValue);
182
- }
183
- }
184
- getValueForFormControl() {
185
- this.formatInput(this.inputEl.nativeElement, false);
186
- if (isNaN(this._numericValue)) {
187
- // Return undefined instead of NaN to support the default required validator.
188
- return undefined; // eslint-disable-line
189
- }
190
- return this._numericValue;
191
- }
192
- injectUnitSymbol() {
193
- // Need to inject the unit symbol when the input element width is set to its actual value,
194
- // otherwise the icon wont show in the correct position
195
- if (!!this.unit && !this.unitSpan && this.inputEl.nativeElement.offsetWidth !== 0) {
196
- // Get the input wrapper and apply necessary styles
197
- const inputWrapper = this.inputEl.nativeElement.parentNode.parentNode;
198
- // Create the span with unit symbol and apply necessary styles
199
- this.unitSpan = this.renderer.createElement('span');
200
- if (this.unitPosition === 'left') {
201
- this.renderer.setAttribute(this.unitSpan, 'matPrefix', '');
202
- this.renderer.setStyle(this.unitSpan, 'padding-right', '5px');
203
- this.renderer.insertBefore(inputWrapper, this.unitSpan, inputWrapper.children[0]);
204
- }
205
- else {
206
- this.renderer.setAttribute(this.unitSpan, 'matSuffix', '');
207
- this.renderer.setStyle(this.unitSpan, 'padding-left', '5px');
208
- this.renderer.appendChild(inputWrapper, this.unitSpan);
209
- }
210
- }
211
- // do not display unit symbol if the unit should move along display value
212
- if (!!this.unitSpan && this.textAlign === 'left' && this.unitPosition === 'right') {
213
- if (NumberFormatService.valueIsSet(this.displayValue)) {
214
- this.unitSpan.style.display = 'unset';
215
- }
216
- else {
217
- this.unitSpan.style.display = 'none';
218
- }
219
- }
220
- // always reset unit symbol
221
- if (!!this.unitSpan) {
222
- this.unitSpan.textContent = this.unit;
223
- }
224
- }
225
- detachListener() {
226
- if (this.inputChangeListener) {
227
- this.inputChangeListener();
228
- delete this.inputChangeListener;
229
- }
230
- if (this.keydownListener) {
231
- this.keydownListener();
232
- delete this.keydownListener;
233
- }
234
- if (this.keyupListener) {
235
- this.keyupListener();
236
- delete this.keyupListener;
237
- }
238
- }
239
- roundOrTruncate(value) {
240
- const method = this.roundValue ? 'round' : value < 0 ? 'ceil' : 'floor';
241
- return Math[method](value * Math.pow(10, this.decimalPlaces)) / Math.pow(10, this.decimalPlaces);
242
- }
243
- }
244
- NumericFieldDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NumericFieldDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i1.NumberFormatService }], target: i0.ɵɵFactoryTarget.Directive });
245
- NumericFieldDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.2", type: NumericFieldDirective, selector: "[madNumericField]", inputs: { textAlign: "textAlign", decimalPlaces: "decimalPlaces", roundValue: ["roundDisplayValue", "roundValue"], autofillDecimals: "autofillDecimals", unit: "unit", unitPosition: "unitPosition", numericValue: "numericValue" }, outputs: { numericValueChanged: "numericValueChange" }, host: { listeners: { "change": "onChange(getValueForFormControl())", "input": "onChange(getValueForFormControl())", "blur": "onTouched()" }, properties: { "class.text-right": "textAlign === \"right\"" } }, providers: [
246
- {
247
- provide: NG_VALUE_ACCESSOR,
248
- useExisting: forwardRef(() => NumericFieldDirective),
249
- multi: true,
250
- },
251
- ], ngImport: i0 });
252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NumericFieldDirective, decorators: [{
253
- type: Directive,
254
- args: [{
255
- selector: '[madNumericField]',
256
- host: {
257
- '[class.text-right]': 'textAlign === "right"',
258
- '(change)': 'onChange(getValueForFormControl())',
259
- '(input)': 'onChange(getValueForFormControl())',
260
- '(blur)': 'onTouched()',
261
- },
262
- providers: [
263
- {
264
- provide: NG_VALUE_ACCESSOR,
265
- useExisting: forwardRef(() => NumericFieldDirective),
266
- multi: true,
267
- },
268
- ],
269
- }]
270
- }], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i1.NumberFormatService }]; }, propDecorators: { textAlign: [{
271
- type: Input,
272
- args: ['textAlign']
273
- }], decimalPlaces: [{
274
- type: Input,
275
- args: ['decimalPlaces']
276
- }], roundValue: [{
277
- type: Input,
278
- args: ['roundDisplayValue']
279
- }], autofillDecimals: [{
280
- type: Input,
281
- args: ['autofillDecimals']
282
- }], unit: [{
283
- type: Input,
284
- args: ['unit']
285
- }], unitPosition: [{
286
- type: Input,
287
- args: ['unitPosition']
288
- }], numericValueChanged: [{
289
- type: Output,
290
- args: ['numericValueChange']
291
- }], numericValue: [{
292
- type: Input,
293
- args: ['numericValue']
294
- }] } });
295
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy1maWVsZC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9udW1lcmljLWZpZWxkL251bWVyaWMtZmllbGQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFFSCxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUdMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUU5RCxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN2QixNQUFNLDZCQUE2QixHQUFHLEVBQUUsQ0FBQztBQUN6QyxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBa0JsRCxNQUFNLE9BQU8scUJBQXFCO0lBZ0JoQyxJQUNJLFlBQVksQ0FBQyxLQUFhO1FBQzVCLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDcEcsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDM0IsMEdBQTBHO1lBQzFHLDZDQUE2QztZQUM3QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFL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O3VCQUFDLG9CQUFvQjtnQkFVeEIsWUFBWTtzQkFEZixLQUFLO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4LTIwMjAgUG9yc2NoZSBJbmZvcm1hdGlrLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZS5cbiAqIFRoZSBmdWxsIGxpY2Vuc2UgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIExJQ0VOU0UgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgcHJvamVjdC5cbiAqL1xuXG5pbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOdW1iZXJGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnLi9udW1iZXItZm9ybWF0LnNlcnZpY2UnO1xuXG5jb25zdCBCQUNLX0tFWUNPREUgPSA4O1xuY29uc3QgU1BBQ0VfS0VZQ09ERSA9IDMyO1xuY29uc3QgREVMX0tFWUNPREUgPSA0NjtcbmNvbnN0IENPTlRST0xfS0VZQ09ERVNfVVBQRVJfQk9SREVSID0gNDY7XG5jb25zdCBPVEhFUl9DT05UUk9MX0tFWVMgPSBuZXcgU2V0KFsyMjQsIDkxLCA5M10pO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbbWFkTnVtZXJpY0ZpZWxkXScsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLnRleHQtcmlnaHRdJzogJ3RleHRBbGlnbiA9PT0gXCJyaWdodFwiJyxcbiAgICAnKGNoYW5nZSknOiAnb25DaGFuZ2UoZ2V0VmFsdWVGb3JGb3JtQ29udHJvbCgpKScsXG4gICAgJyhpbnB1dCknOiAnb25DaGFuZ2UoZ2V0VmFsdWVGb3JGb3JtQ29udHJvbCgpKScsXG4gICAgJyhibHVyKSc6ICdvblRvdWNoZWQoKScsXG4gIH0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTnVtZXJpY0ZpZWxkRGlyZWN0aXZlKSwgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTnVtZXJpY0ZpZWxkRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCd0ZXh0QWxpZ24nKSB0ZXh0QWxpZ246ICdyaWdodCcgfCAnbGVmdCcgPSAncmlnaHQnO1xuICBASW5wdXQoJ2RlY2ltYWxQbGFjZXMnKSBkZWNpbWFsUGxhY2VzID0gMjtcbiAgQElucHV0KCdyb3VuZERpc3BsYXlWYWx1ZScpIHJvdW5kVmFsdWUgPSBmYWxzZTtcbiAgQElucHV0KCdhdXRvZmlsbERlY2ltYWxzJykgYXV0b2ZpbGxEZWNpbWFscyA9IGZhbHNlO1xuICBASW5wdXQoJ3VuaXQnKSB1bml0OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCd1bml0UG9zaXRpb24nKSB1bml0UG9zaXRpb246ICdyaWdodCcgfCAnbGVmdCcgPSAncmlnaHQnO1xuICBAT3V0cHV0KCdudW1lcmljVmFsdWVDaGFuZ2UnKSBudW1lcmljVmFsdWVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgcHJpdmF0ZSBkaXNwbGF5VmFsdWUgPSAnJztcbiAgcHJpdmF0ZSBvcmlnaW5hbFZhbHVlID0gTmFOO1xuICBwcml2YXRlIF9udW1lcmljVmFsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBpbnB1dENoYW5nZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGtleXVwTGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUga2V5ZG93bkxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgnbnVtZXJpY1ZhbHVlJylcbiAgc2V0IG51bWVyaWNWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuX251bWVyaWNWYWx1ZSAhPT0gdmFsdWUgJiYgIShpc05hTih0aGlzLl9udW1lcmljVmFsdWUpICYmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IG51bGwpKSkge1xuICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlID0gdmFsdWU7XG4gICAgICAvLyBEb24ndCByb3VuZE9yVHJ1bmNhdGUgaWYgdmFsdWUgd2FzIHNldCB0byBlbXB0eSBvdGhlcndpc2UgaW5wdXQgdmFsdWUgd2lsbCBiZSBzZXQgdG8gMCBpbnN0ZWFkIG9mIGVtcHR5XG4gICAgICAvLyB3aGljaCBoYXBwZW5zIHdoZW4gYW4gaW5wdXQgaXMgYmVpbmcgcmVzZXRcbiAgICAgIHRoaXMuX251bWVyaWNWYWx1ZSA9IHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHRoaXMucm91bmRPclRydW5jYXRlKHZhbHVlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZWQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVuaXRTcGFuOiBIVE1MU3BhbkVsZW1lbnQ7XG4gIHByaXZhdGUgdGV4dFNwYW46IEhUTUxTcGFuRWxlbWVudDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgaW5wdXRFbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBudW1iZXJGb3JtYXRTZXJ2aWNlOiBOdW1iZXJGb3JtYXRTZXJ2aWNlKSB7fVxuXG4gIC8qIENvbnRyb2wgVmFsdWVzIEFjY2Vzc29yIFN0dWZmIGJlbG93ICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZSgpOiB2b2lkIHtcbiAgICAvLyBEb250IG5lZWQgdG8gaW1wbGVtZW50IHNpbmNlIGl0cyBqdXN0IGEgZGlyZWN0aXZlXG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm51bWVyaWNWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLyogbmVlZHMgdG8gYmUgcGFyc2VkIGFzIG51bWJlciBleHBsaWNpdGx5IGFzIGl0IGNvbWVzIGFzIHN0cmluZyBmcm9tIHVzZXIgaW5wdXQgKi9cbiAgICB0aGlzLmRlY2ltYWxQbGFjZXMgPSBwYXJzZUludCh0aGlzLmRlY2ltYWxQbGFjZXMudG9TdHJpbmcoKSwgMTApO1xuXG4gICAgdGhpcy5pbnB1dENoYW5nZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQsICdibHVyJywgZXZlbnQgPT4ge1xuICAgICAgdGhpcy5mb3JtYXRJbnB1dChldmVudC50YXJnZXQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5rZXl1cExpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQsICdrZXl1cCcsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBCQUNLX0tFWUNPREUgfHwgKGV2ZW50LmtleUNvZGUgPj0gQ09OVFJPTF9LRVlDT0RFU19VUFBFUl9CT1JERVIgJiYgIU9USEVSX0NPTlRST0xfS0VZUy5oYXMoZXZlbnQua2V5Q29kZSkpKSB7XG4gICAgICAgIHRoaXMuZm9ybWF0SW5wdXQoZXZlbnQudGFyZ2V0LCBmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmtleWRvd25MaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicsIGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubnVtYmVyRm9ybWF0U2VydmljZS5hbGxvd2VkS2V5cy5pbmNsdWRlcyhldmVudC5rZXkpIHx8XG4gICAgICAgIChldmVudC5rZXlDb2RlIDw9IENPTlRST0xfS0VZQ09ERVNfVVBQRVJfQk9SREVSICYmIGV2ZW50LmtleUNvZGUgPiAwICYmIGV2ZW50LmtleUNvZGUgIT09IFNQQUNFX0tFWUNPREUpIHx8XG4gICAgICAgIGV2ZW50Lm1ldGFLZXkgfHxcbiAgICAgICAgZXZlbnQuY3RybEtleSB8fFxuICAgICAgICBldmVudC5hbHRLZXlcbiAgICAgICkge1xuICAgICAgICAvKiBhbGxvdyBuZWdhdGl2ZSBzaWduIG9ubHkgYXMgZmlyc3QgY2hhcmFjdGVyIGFuZCBub25lIGV4aXN0cyBvdXRzaWRlIG9mIHRleHQgc2VsZWN0aW9uICovXG4gICAgICAgIGNvbnN0IGluZGV4TmVnYXRpdmVTaWduID0gdmFsdWUuaW5kZXhPZihOdW1iZXJGb3JtYXRTZXJ2aWNlLk5FR0FUSVZFKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV2ZW50LmtleSA9PT0gTnVtYmVyRm9ybWF0U2VydmljZS5ORUdBVElWRSAmJlxuICAgICAgICAgIChldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQgPiAwIHx8IGluZGV4TmVnYXRpdmVTaWduID4gLTEpICYmXG4gICAgICAgICAgKGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCA9PT0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZCB8fFxuICAgICAgICAgICAgIShpbmRleE5lZ2F0aXZlU2lnbiA+PSBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQgJiYgaW5kZXhOZWdhdGl2ZVNpZ24gPD0gZXZlbnQudGFyZ2V0LnNlbGVjdGlvbkVuZCkpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIG5vIGR1cGxpY2F0ZSBkZWNpbWFsIHNlcGFyYXRvcnMgKi9cbiAgICAgICAgY29uc3QgaW5kZXhEZWNpbWFsU2VwID0gdmFsdWUuaW5kZXhPZih0aGlzLm51bWJlckZvcm1hdFNlcnZpY2UuZGVjaW1hbFNlcGFyYXRvcik7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBldmVudC5rZXkgPT09IHRoaXMubnVtYmVyRm9ybWF0U2VydmljZS5kZWNpbWFsU2VwYXJhdG9yICYmXG4gICAgICAgICAgKGluZGV4RGVjaW1hbFNlcCA+IC0xIHx8IHRoaXMuZGVjaW1hbFBsYWNlcyA9PT0gMCkgJiZcbiAgICAgICAgICAoZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID09PSBldmVudC50YXJnZXQuc2VsZWN0aW9uRW5kIHx8XG4gICAgICAgICAgICAhKGluZGV4RGVjaW1hbFNlcCA+PSBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQgJiYgaW5kZXhEZWNpbWFsU2VwIDw9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQpKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBwcmV2ZW50IHRvbyBtYW55IGRlY2ltYWwgcGxhY2VzICovXG4gICAgICAgIGlmIChcbiAgICAgICAgICBOdW1iZXJGb3JtYXRTZXJ2aWNlLk5VTUJFUlMuaW5jbHVkZXMoZXZlbnQua2V5KSAmJlxuICAgICAgICAgIGluZGV4RGVjaW1hbFNlcCA+IC0xICYmXG4gICAgICAgICAgaW5kZXhEZWNpbWFsU2VwIDwgZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ICYmXG4gICAgICAgICAgZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID09PSBldmVudC50YXJnZXQuc2VsZWN0aW9uRW5kICYmXG4gICAgICAgICAgdmFsdWUubGVuZ3RoID4gaW5kZXhEZWNpbWFsU2VwICsgdGhpcy5kZWNpbWFsUGxhY2VzXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qIHdoZW4gZGVsZXRpbmcgdGhvdXNhbmQgc2VwYXJhdG9yLCByZW1vdmUgdGhlIGRpZ2l0IGJlZm9yZSBvciBhZnRlciBpdCAqL1xuICAgICAgICBjb25zdCBjdXJzb3JTdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydDtcblxuICAgICAgICBpZiAoY3Vyc29yU3RhcnQgPT09IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQpIHtcbiAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gQkFDS19LRVlDT0RFICYmIHZhbHVlLnN1YnN0cihjdXJzb3JTdGFydCAtIDEsIDEpID09PSB0aGlzLm51bWJlckZvcm1hdFNlcnZpY2UuZ3JvdXBpbmdTZXBhcmF0b3IpIHtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBjdXJzb3JTdGFydCAtIDIpICsgdmFsdWUuc3Vic3RyaW5nKGN1cnNvclN0YXJ0IC0gMSwgdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQgPSBjdXJzb3JTdGFydCAtIDE7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXlDb2RlID09PSBERUxfS0VZQ09ERSAmJiB2YWx1ZS5zdWJzdHIoY3Vyc29yU3RhcnQsIDEpID09PSB0aGlzLm51bWJlckZvcm1hdFNlcnZpY2UuZ3JvdXBpbmdTZXBhcmF0b3IpIHtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBjdXJzb3JTdGFydCArIDEpICsgdmFsdWUuc3Vic3RyaW5nKGN1cnNvclN0YXJ0ICsgMiwgdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCA9IGV2ZW50LnRhcmdldC5zZWxlY3Rpb25FbmQgPSBjdXJzb3JTdGFydCArIDE7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub3JpZ2luYWxWYWx1ZSA9IE5hTjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXRhY2hMaXN0ZW5lcigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuaW5qZWN0VW5pdFN5bWJvbCgpO1xuICB9XG5cbiAgaGFuZGxlSW5wdXRDaGFuZ2VkKCk6IHZvaWQge1xuICAgIC8vIENhbGwgaW4gc2V0IHRpbWVvdXQgdG8gYXZvaWQgRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCBoYXMgYmVlbiBjaGVja2VkIGVycm9yLlxuICAgIC8vIFNvbWV0aW1lcyB0aGUgdmFsdWUgY2hhbmdlcyBiZWNhdXNlIHdlIGN1dCBvZmYgZGVjaW1hbCBwbGFjZXNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlSW5wdXQoXG4gICAgICAgIHRoaXMubnVtYmVyRm9ybWF0U2VydmljZS5mb3JtYXQodGhpcy5fbnVtZXJpY1ZhbHVlLCB7XG4gICAgICAgICAgZGVjaW1hbFBsYWNlczogdGhpcy5kZWNpbWFsUGxhY2VzLFxuICAgICAgICAgIGZpbmFsRm9ybWF0dGluZzogZmFsc2UsXG4gICAgICAgICAgYXV0b2ZpbGxEZWNpbWFsczogdGhpcy5hdXRvZmlsbERlY2ltYWxzLFxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfSwgMSk7XG4gIH1cblxuICBmb3JtYXRJbnB1dChlbGVtZW50OiBIVE1MSW5wdXRFbGVtZW50LCBmaW5hbEZvcm1hdHRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBjdXJzb3JQb3MgPSBlbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuICAgIGNvbnN0IGxlbmd0aCA9IGVsZW1lbnQudmFsdWUubGVuZ3RoO1xuICAgIGNvbnN0IHNldEN1cnNvciA9IHRoaXMuZGlzcGxheVZhbHVlICE9PSBlbGVtZW50LnZhbHVlO1xuICAgIGNvbnN0IHRleHRGb3JtYXR0ZWQgPSB0aGlzLm51bWJlckZvcm1hdFNlcnZpY2UuZm9ybWF0TnVtYmVyKGVsZW1lbnQudmFsdWUsIHtcbiAgICAgIGRlY2ltYWxQbGFjZXM6IHRoaXMuZGVjaW1hbFBsYWNlcyxcbiAgICAgIGZpbmFsRm9ybWF0dGluZyxcbiAgICAgIGF1dG9maWxsRGVjaW1hbHM6IHRoaXMuYXV0b2ZpbGxEZWNpbWFscyxcbiAgICB9KTtcblxuICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgdG8gbW92ZSB1bml0IHN5bWJvbCBhbG9uZyB3aXRoIGRpc3BsYXkgdmFsdWVcbiAgICBpZiAodGhpcy50ZXh0QWxpZ24gPT09ICdsZWZ0JyAmJiB0aGlzLnVuaXRQb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgY29uc3QgaW5wdXRTdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LCBudWxsKTtcbiAgICAgIHRoaXMudW5pdFNwYW4uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgdGhpcy51bml0U3Bhbi5zdHlsZS5tYXJnaW5Ub3AgPSBpbnB1dFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdib3JkZXItdG9wLXdpZHRoJyk7XG4gICAgICB0aGlzLnVuaXRTcGFuLnN0eWxlLnBhZGRpbmdUb3AgPSBpbnB1dFN0eWxlcy5nZXRQcm9wZXJ0eVZhbHVlKCdwYWRkaW5nLXRvcCcpO1xuICAgICAgdGhpcy51bml0U3Bhbi5zdHlsZS5wYWRkaW5nQm90dG9tID0gaW5wdXRTdHlsZXMuZ2V0UHJvcGVydHlWYWx1ZSgncGFkZGluZy1ib3R0b20nKTtcblxuICAgICAgaWYgKCF0aGlzLnRleHRTcGFuKSB7XG4gICAgICAgIHRoaXMudGV4dFNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy50ZXh0U3Bhbik7XG4gICAgICAgIHRoaXMudGV4dFNwYW4uc3R5bGUuZm9udCA9IGlucHV0U3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQnKTtcbiAgICAgICAgdGhpcy50ZXh0U3Bhbi5zdHlsZS5mb250U2l6ZSA9IGlucHV0U3R5bGVzLmdldFByb3BlcnR5VmFsdWUoJ2ZvbnQtc2l6ZScpO1xuICAgICAgICB0aGlzLnRleHRTcGFuLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgICAgdGhpcy50ZXh0U3Bhbi5zdHlsZS53aWR0aCA9ICdhdXRvJztcbiAgICAgICAgdGhpcy50ZXh0U3Bhbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgICAgIHRoaXMudGV4dFNwYW4uc3R5bGUudG9wID0gJzAnO1xuICAgICAgICB0aGlzLnRleHRTcGFuLnN0eWxlLndoaXRlU3BhY2UgPSAnbm8td3JhcCc7XG4gICAgICAgIHRoaXMudGV4dFNwYW4uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgfVxuICAgICAgdGhpcy50ZXh0U3Bhbi5pbm5lckhUTUwgPSB0ZXh0Rm9ybWF0dGVkO1xuICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbih0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCAtIHRoaXMudW5pdFNwYW4uY2xpZW50V2lkdGgsIE1hdGguY2VpbCh0aGlzLnRleHRTcGFuLmNsaWVudFdpZHRoKSk7XG4gICAgICB0aGlzLnVuaXRTcGFuLnN0eWxlLmxlZnQgPSB3aWR0aCArICdweCc7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVJbnB1dCh0ZXh0Rm9ybWF0dGVkKTtcbiAgICBpZiAoc2V0Q3Vyc29yKSB7XG4gICAgICBlbGVtZW50LnNlbGVjdGlvblN0YXJ0ID0gZWxlbWVudC5zZWxlY3Rpb25FbmQgPSBNYXRoLm1heChjdXJzb3JQb3MgKyBlbGVtZW50LnZhbHVlLmxlbmd0aCAtIGxlbmd0aCwgMCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlSW5wdXQodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl9udW1lcmljVmFsdWUgPSBwYXJzZUZsb2F0KFxuICAgICAgdGhpcy5udW1iZXJGb3JtYXRTZXJ2aWNlLnN0cmlwKHZhbHVlLCB7IGRlY2ltYWxQbGFjZXM6IHRoaXMuZGVjaW1hbFBsYWNlcyB9KS5yZXBsYWNlKHRoaXMubnVtYmVyRm9ybWF0U2VydmljZS5kZWNpbWFsU2VwYXJhdG9yLCAnLicpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX251bWVyaWNWYWx1ZSAhPT0gdGhpcy5yb3VuZE9yVHJ1bmNhdGUodGhpcy5vcmlnaW5hbFZhbHVlKSkge1xuICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlID0gdGhpcy5fbnVtZXJpY1ZhbHVlO1xuICAgICAgdGhpcy5udW1lcmljVmFsdWVDaGFuZ2VkLmVtaXQodGhpcy5fbnVtZXJpY1ZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBnZXRWYWx1ZUZvckZvcm1Db250cm9sKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgdGhpcy5mb3JtYXRJbnB1dCh0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudCwgZmFsc2UpO1xuICAgIGlmIChpc05hTih0aGlzLl9udW1lcmljVmFsdWUpKSB7XG4gICAgICAvLyBSZXR1cm4gdW5kZWZpbmVkIGluc3RlYWQgb2YgTmFOIHRvIHN1cHBvcnQgdGhlIGRlZmF1bHQgcmVxdWlyZWQgdmFsaWRhdG9yLlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbnVtZXJpY1ZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBpbmplY3RVbml0U3ltYm9sKCk6IHZvaWQge1xuICAgIC8vIE5lZWQgdG8gaW5qZWN0IHRoZSB1bml0IHN5bWJvbCB3aGVuIHRoZSBpbnB1dCBlbGVtZW50IHdpZHRoIGlzIHNldCB0byBpdHMgYWN0dWFsIHZhbHVlLFxuICAgIC8vIG90aGVyd2lzZSB0aGUgaWNvbiB3b250IHNob3cgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb25cbiAgICBpZiAoISF0aGlzLnVuaXQgJiYgIXRoaXMudW5pdFNwYW4gJiYgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggIT09IDApIHtcbiAgICAgIC8vIEdldCB0aGUgaW5wdXQgd3JhcHBlciBhbmQgYXBwbHkgbmVjZXNzYXJ5IHN0eWxlc1xuICAgICAgY29uc3QgaW5wdXRXcmFwcGVyID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xuXG4gICAgICAvLyBDcmVhdGUgdGhlIHNwYW4gd2l0aCB1bml0IHN5bWJvbCBhbmQgYXBwbHkgbmVjZXNzYXJ5IHN0eWxlc1xuICAgICAgdGhpcy51bml0U3BhbiA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gICAgICBpZiAodGhpcy51bml0UG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLnVuaXRTcGFuLCAnbWF0UHJlZml4JywgJycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudW5pdFNwYW4sICdwYWRkaW5nLXJpZ2h0JywgJzVweCcpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmluc2VydEJlZm9yZShpbnB1dFdyYXBwZXIsIHRoaXMudW5pdFNwYW4sIGlucHV0V3JhcHBlci5jaGlsZHJlblswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLnVuaXRTcGFuLCAnbWF0U3VmZml4JywgJycpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudW5pdFNwYW4sICdwYWRkaW5nLWxlZnQnLCAnNXB4Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoaW5wdXRXcmFwcGVyLCB0aGlzLnVuaXRTcGFuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkbyBub3QgZGlzcGxheSB1bml0IHN5bWJvbCBpZiB0aGUgdW5pdCBzaG91bGQgbW92ZSBhbG9uZyBkaXNwbGF5IHZhbHVlXG4gICAgaWYgKCEhdGhpcy51bml0U3BhbiAmJiB0aGlzLnRleHRBbGlnbiA9PT0gJ2xlZnQnICYmIHRoaXMudW5pdFBvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICBpZiAoTnVtYmVyRm9ybWF0U2VydmljZS52YWx1ZUlzU2V0KHRoaXMuZGlzcGxheVZhbHVlKSkge1xuICAgICAgICB0aGlzLnVuaXRTcGFuLnN0eWxlLmRpc3BsYXkgPSAndW5zZXQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51bml0U3Bhbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhbHdheXMgcmVzZXQgdW5pdCBzeW1ib2xcbiAgICBpZiAoISF0aGlzLnVuaXRTcGFuKSB7XG4gICAgICB0aGlzLnVuaXRTcGFuLnRleHRDb250ZW50ID0gdGhpcy51bml0O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGV0YWNoTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5wdXRDaGFuZ2VMaXN0ZW5lcikge1xuICAgICAgdGhpcy5pbnB1dENoYW5nZUxpc3RlbmVyKCk7XG4gICAgICBkZWxldGUgdGhpcy5pbnB1dENoYW5nZUxpc3RlbmVyO1xuICAgIH1cbiAgICBpZiAodGhpcy5rZXlkb3duTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMua2V5ZG93bkxpc3RlbmVyKCk7XG4gICAgICBkZWxldGUgdGhpcy5rZXlkb3duTGlzdGVuZXI7XG4gICAgfVxuICAgIGlmICh0aGlzLmtleXVwTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMua2V5dXBMaXN0ZW5lcigpO1xuICAgICAgZGVsZXRlIHRoaXMua2V5dXBMaXN0ZW5lcjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJvdW5kT3JUcnVuY2F0ZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBtZXRob2QgPSB0aGlzLnJvdW5kVmFsdWUgPyAncm91bmQnIDogdmFsdWUgPCAwID8gJ2NlaWwnIDogJ2Zsb29yJztcbiAgICByZXR1cm4gTWF0aFttZXRob2RdKHZhbHVlICogTWF0aC5wb3coMTAsIHRoaXMuZGVjaW1hbFBsYWNlcykpIC8gTWF0aC5wb3coMTAsIHRoaXMuZGVjaW1hbFBsYWNlcyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export { NumericFieldDirective } from './numeric-field.directive';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21hdGVyaWFsLWFkZG9ucy9zcmMvbGliL251bWVyaWMtZmllbGQvbnVtZXJpYy1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7TnVtZXJpY0ZpZWxkRGlyZWN0aXZlfSBmcm9tICcuL251bWVyaWMtZmllbGQuZGlyZWN0aXZlJztcbiJdfQ==
@@ -1,24 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { NumericFieldDirective } from './numeric-field.directive';
3
- import { NumberFormatService } from './number-format.service';
4
- import * as i0 from "@angular/core";
5
- export class NumericFieldModule {
6
- static forRoot() {
7
- return {
8
- ngModule: NumericFieldModule,
9
- providers: [NumberFormatService],
10
- };
11
- }
12
- }
13
- NumericFieldModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NumericFieldModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
- NumericFieldModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.2", ngImport: i0, type: NumericFieldModule, declarations: [NumericFieldDirective], exports: [NumericFieldDirective] });
15
- NumericFieldModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NumericFieldModule, providers: [NumberFormatService] });
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: NumericFieldModule, decorators: [{
17
- type: NgModule,
18
- args: [{
19
- providers: [NumberFormatService],
20
- declarations: [NumericFieldDirective],
21
- exports: [NumericFieldDirective],
22
- }]
23
- }] });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtZXJpYy1maWVsZC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tYXRlcmlhbC1hZGRvbnMvc3JjL2xpYi9udW1lcmljLWZpZWxkL251bWVyaWMtZmllbGQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQU85RCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLE1BQU0sQ0FBQyxPQUFPO1FBQ1osT0FBTztZQUNMLFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUM7U0FDakMsQ0FBQztJQUNKLENBQUM7OytHQU5VLGtCQUFrQjtnSEFBbEIsa0JBQWtCLGlCQUhkLHFCQUFxQixhQUMxQixxQkFBcUI7Z0hBRXBCLGtCQUFrQixhQUpsQixDQUFDLG1CQUFtQixDQUFDOzJGQUlyQixrQkFBa0I7a0JBTDlCLFFBQVE7bUJBQUM7b0JBQ1IsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ2hDLFlBQVksRUFBRSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTnVtZXJpY0ZpZWxkRGlyZWN0aXZlIH0gZnJvbSAnLi9udW1lcmljLWZpZWxkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOdW1iZXJGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnLi9udW1iZXItZm9ybWF0LnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICBwcm92aWRlcnM6IFtOdW1iZXJGb3JtYXRTZXJ2aWNlXSxcbiAgZGVjbGFyYXRpb25zOiBbTnVtZXJpY0ZpZWxkRGlyZWN0aXZlXSxcbiAgZXhwb3J0czogW051bWVyaWNGaWVsZERpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIE51bWVyaWNGaWVsZE1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8TnVtZXJpY0ZpZWxkTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBOdW1lcmljRmllbGRNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtOdW1iZXJGb3JtYXRTZXJ2aWNlXSxcbiAgICB9O1xuICB9XG59XG4iXX0=