ecabs-components 1.0.28 → 1.0.29
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.
- package/esm2022/ecabs-components.mjs +4 -4
- package/esm2022/lib/base/consts/date-mask.consts.mjs +56 -56
- package/esm2022/lib/base/directives/date-mask.directive.mjs +64 -64
- package/esm2022/lib/base/directives/date-mask.directive.module.mjs +21 -21
- package/esm2022/lib/base/directives/digits-only.directive.mjs +129 -129
- package/esm2022/lib/base/directives/digits-only.directive.module.mjs +21 -21
- package/esm2022/lib/base/directives/number-border.directive.mjs +53 -53
- package/esm2022/lib/base/directives/number-border.directive.module.mjs +21 -21
- package/esm2022/lib/base/element-base.mjs +99 -99
- package/esm2022/lib/base/element-wrapper/element-wrapper.component.mjs +52 -52
- package/esm2022/lib/base/element-wrapper/element-wrapper.module.mjs +51 -51
- package/esm2022/lib/base/hint/hint.component.mjs +20 -20
- package/esm2022/lib/base/hint/hint.module.mjs +19 -19
- package/esm2022/lib/base/validation/validation.component.mjs +69 -69
- package/esm2022/lib/base/validation/validation.module.mjs +19 -19
- package/esm2022/lib/ecabs-active-status-filter/ecabs-active-status-filter.component.mjs +30 -30
- package/esm2022/lib/ecabs-active-status-filter/ecabs-active-status-filter.module.mjs +19 -19
- package/esm2022/lib/ecabs-breadcrumb/ecabs-breadcrumb.component.mjs +15 -15
- package/esm2022/lib/ecabs-breadcrumb/ecabs-breadcrumb.module.mjs +19 -19
- package/esm2022/lib/ecabs-buttons/ecabs-buttons.component.mjs +62 -62
- package/esm2022/lib/ecabs-buttons/ecabs-buttons.module.mjs +20 -20
- package/esm2022/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.mjs +100 -100
- package/esm2022/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.module.mjs +35 -35
- package/esm2022/lib/ecabs-date-picker/components/ecabs-date-picker-header/ecabs-date-picker-header.component.mjs +16 -16
- package/esm2022/lib/ecabs-date-picker/ecabs-date-picker.component.mjs +84 -84
- package/esm2022/lib/ecabs-date-picker/ecabs-date-picker.module.mjs +47 -47
- package/esm2022/lib/ecabs-date-time-picker/components/ecabs-date-time-picker-header/ecabs-date-time-picker-header.component.mjs +16 -16
- package/esm2022/lib/ecabs-date-time-picker/ecabs-date-time-picker.component.mjs +203 -179
- package/esm2022/lib/ecabs-date-time-picker/ecabs-date-time-picker.module.mjs +63 -63
- package/esm2022/lib/ecabs-date-time-range-picker/components/ecabs-date-time-range-picker-header/ecabs-date-time-range-picker-header.component.mjs +16 -16
- package/esm2022/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.component.mjs +192 -192
- package/esm2022/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.module.mjs +64 -64
- package/esm2022/lib/ecabs-date-time-range-picker/time-range.directive.mjs +44 -44
- package/esm2022/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.component.mjs +46 -46
- package/esm2022/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.module.mjs +19 -19
- package/esm2022/lib/ecabs-dialog-message/ecabs-dialog-message.component.mjs +43 -43
- package/esm2022/lib/ecabs-dialog-message/ecabs-dialog-message.module.mjs +19 -19
- package/esm2022/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.component.mjs +18 -18
- package/esm2022/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.module.mjs +18 -18
- package/esm2022/lib/ecabs-expansion-panel/ecabs-expansion-panel.component.mjs +75 -75
- package/esm2022/lib/ecabs-expansion-panel/ecabs-expansion-panel.module.mjs +23 -23
- package/esm2022/lib/ecabs-increment/ecabs-increment.component.mjs +77 -77
- package/esm2022/lib/ecabs-increment/ecabs-increment.module.mjs +22 -22
- package/esm2022/lib/ecabs-input/ecabs-input.component.mjs +82 -82
- package/esm2022/lib/ecabs-input/ecabs-input.module.mjs +21 -21
- package/esm2022/lib/ecabs-language-selector/ecabs-language-selector.component.mjs +61 -61
- package/esm2022/lib/ecabs-language-selector/ecabs-language-selector.module.mjs +38 -38
- package/esm2022/lib/ecabs-loading/ecabs-loading.component.mjs +23 -23
- package/esm2022/lib/ecabs-loading/ecabs-loading.module.mjs +18 -18
- package/esm2022/lib/ecabs-loading/spinner/spinner.component.mjs +15 -15
- package/esm2022/lib/ecabs-note/ecabs-note.component.mjs +29 -29
- package/esm2022/lib/ecabs-note/ecabs-note.module.mjs +18 -18
- package/esm2022/lib/ecabs-phone/ecabs-phone.component.mjs +103 -103
- package/esm2022/lib/ecabs-phone/ecabs-phone.module.mjs +21 -21
- package/esm2022/lib/ecabs-picker-header/ecabs-picker-header.component.mjs +49 -49
- package/esm2022/lib/ecabs-picker-header/ecabs-picker-header.module.mjs +21 -21
- package/esm2022/lib/ecabs-radio-button-list/ecabs-radio-button-list.component.mjs +64 -64
- package/esm2022/lib/ecabs-radio-button-list/ecabs-radio-button-list.module.mjs +31 -31
- package/esm2022/lib/ecabs-select/ecabs-select.component.mjs +309 -309
- package/esm2022/lib/ecabs-select/ecabs-select.module.mjs +59 -59
- package/esm2022/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.component.mjs +16 -16
- package/esm2022/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.module.mjs +23 -23
- package/esm2022/lib/ecabs-table/ecabs-table.component.mjs +42 -42
- package/esm2022/lib/ecabs-table/ecabs-table.module.mjs +32 -32
- package/esm2022/lib/ecabs-textarea/ecabs-textarea.component.mjs +61 -61
- package/esm2022/lib/ecabs-textarea/ecabs-textarea.module.mjs +19 -19
- package/esm2022/lib/ecabs-timepicker/componets/ecabs-time-list-panel/ecabs-time-list-panel.component.mjs +136 -136
- package/esm2022/lib/ecabs-timepicker/config.model.mjs +1 -1
- package/esm2022/lib/ecabs-timepicker/ecabs-timepicker.component.mjs +311 -311
- package/esm2022/lib/ecabs-timepicker/ecabs-timepicker.module.mjs +19 -19
- package/esm2022/lib/ecabs-timepicker/ecabs-timepicker.service.mjs +30 -30
- package/esm2022/lib/ecabs-validation/ecabs-validation.component.mjs +18 -18
- package/esm2022/lib/ecabs-validation/ecabs-validation.module.mjs +18 -18
- package/esm2022/lib/models/bread-crumb.mjs +1 -1
- package/esm2022/lib/models/timepicker.models.mjs +1 -1
- package/esm2022/lib/models/validation.models.mjs +1 -1
- package/esm2022/lib/services/ecabs-components.service.mjs +31 -31
- package/esm2022/public-api.mjs +58 -58
- package/fesm2022/ecabs-components.mjs +3277 -3253
- package/fesm2022/ecabs-components.mjs.map +1 -1
- package/index.d.ts +5 -5
- package/lib/base/consts/date-mask.consts.d.ts +7 -7
- package/lib/base/directives/date-mask.directive.d.ts +16 -16
- package/lib/base/directives/date-mask.directive.module.d.ts +8 -8
- package/lib/base/directives/digits-only.directive.d.ts +26 -26
- package/lib/base/directives/digits-only.directive.module.d.ts +8 -8
- package/lib/base/directives/number-border.directive.d.ts +13 -13
- package/lib/base/directives/number-border.directive.module.d.ts +8 -8
- package/lib/base/element-base.d.ts +28 -28
- package/lib/base/element-wrapper/element-wrapper.component.d.ts +19 -19
- package/lib/base/element-wrapper/element-wrapper.module.d.ts +16 -16
- package/lib/base/hint/hint.component.d.ts +8 -8
- package/lib/base/hint/hint.module.d.ts +10 -10
- package/lib/base/validation/validation.component.d.ts +24 -24
- package/lib/base/validation/validation.module.d.ts +10 -10
- package/lib/ecabs-active-status-filter/ecabs-active-status-filter.component.d.ts +14 -14
- package/lib/ecabs-active-status-filter/ecabs-active-status-filter.module.d.ts +10 -10
- package/lib/ecabs-breadcrumb/ecabs-breadcrumb.component.d.ts +7 -7
- package/lib/ecabs-breadcrumb/ecabs-breadcrumb.module.d.ts +10 -10
- package/lib/ecabs-buttons/ecabs-buttons.component.d.ts +20 -20
- package/lib/ecabs-buttons/ecabs-buttons.module.d.ts +11 -11
- package/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.d.ts +31 -31
- package/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.module.d.ts +12 -12
- package/lib/ecabs-date-picker/components/ecabs-date-picker-header/ecabs-date-picker-header.component.d.ts +6 -6
- package/lib/ecabs-date-picker/ecabs-date-picker.component.d.ts +29 -29
- package/lib/ecabs-date-picker/ecabs-date-picker.module.d.ts +15 -15
- package/lib/ecabs-date-time-picker/components/ecabs-date-time-picker-header/ecabs-date-time-picker-header.component.d.ts +6 -6
- package/lib/ecabs-date-time-picker/ecabs-date-time-picker.component.d.ts +55 -51
- package/lib/ecabs-date-time-picker/ecabs-date-time-picker.module.d.ts +19 -19
- package/lib/ecabs-date-time-range-picker/components/ecabs-date-time-range-picker-header/ecabs-date-time-range-picker-header.component.d.ts +6 -6
- package/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.component.d.ts +58 -58
- package/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.module.d.ts +20 -20
- package/lib/ecabs-date-time-range-picker/time-range.directive.d.ts +15 -15
- package/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.component.d.ts +31 -31
- package/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.module.d.ts +11 -11
- package/lib/ecabs-dialog-message/ecabs-dialog-message.component.d.ts +28 -28
- package/lib/ecabs-dialog-message/ecabs-dialog-message.module.d.ts +11 -11
- package/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.component.d.ts +12 -12
- package/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.module.d.ts +9 -9
- package/lib/ecabs-expansion-panel/ecabs-expansion-panel.component.d.ts +28 -28
- package/lib/ecabs-expansion-panel/ecabs-expansion-panel.module.d.ts +14 -14
- package/lib/ecabs-increment/ecabs-increment.component.d.ts +26 -26
- package/lib/ecabs-increment/ecabs-increment.module.d.ts +13 -13
- package/lib/ecabs-input/ecabs-input.component.d.ts +27 -27
- package/lib/ecabs-input/ecabs-input.module.d.ts +12 -12
- package/lib/ecabs-language-selector/ecabs-language-selector.component.d.ts +20 -20
- package/lib/ecabs-language-selector/ecabs-language-selector.module.d.ts +12 -12
- package/lib/ecabs-loading/ecabs-loading.component.d.ts +8 -8
- package/lib/ecabs-loading/ecabs-loading.module.d.ts +9 -9
- package/lib/ecabs-loading/spinner/spinner.component.d.ts +6 -6
- package/lib/ecabs-note/ecabs-note.component.d.ts +7 -7
- package/lib/ecabs-note/ecabs-note.module.d.ts +9 -9
- package/lib/ecabs-phone/ecabs-phone.component.d.ts +33 -33
- package/lib/ecabs-phone/ecabs-phone.module.d.ts +12 -12
- package/lib/ecabs-picker-header/ecabs-picker-header.component.d.ts +19 -19
- package/lib/ecabs-picker-header/ecabs-picker-header.module.d.ts +12 -12
- package/lib/ecabs-radio-button-list/ecabs-radio-button-list.component.d.ts +24 -24
- package/lib/ecabs-radio-button-list/ecabs-radio-button-list.module.d.ts +11 -11
- package/lib/ecabs-select/ecabs-select.component.d.ts +71 -71
- package/lib/ecabs-select/ecabs-select.module.d.ts +15 -15
- package/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.component.d.ts +8 -8
- package/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.module.d.ts +9 -9
- package/lib/ecabs-table/ecabs-table.component.d.ts +18 -18
- package/lib/ecabs-table/ecabs-table.module.d.ts +12 -12
- package/lib/ecabs-textarea/ecabs-textarea.component.d.ts +20 -20
- package/lib/ecabs-textarea/ecabs-textarea.module.d.ts +10 -10
- package/lib/ecabs-timepicker/componets/ecabs-time-list-panel/ecabs-time-list-panel.component.d.ts +40 -40
- package/lib/ecabs-timepicker/config.model.d.ts +5 -5
- package/lib/ecabs-timepicker/ecabs-timepicker.component.d.ts +53 -53
- package/lib/ecabs-timepicker/ecabs-timepicker.module.d.ts +10 -10
- package/lib/ecabs-timepicker/ecabs-timepicker.service.d.ts +12 -12
- package/lib/ecabs-validation/ecabs-validation.component.d.ts +10 -10
- package/lib/ecabs-validation/ecabs-validation.module.d.ts +9 -9
- package/lib/models/bread-crumb.d.ts +5 -5
- package/lib/models/timepicker.models.d.ts +6 -6
- package/lib/models/validation.models.d.ts +7 -7
- package/lib/services/ecabs-components.service.d.ts +16 -16
- package/package.json +1 -1
- package/public-api.d.ts +58 -58
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
5
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtY29tcG9uZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2VjYWJzLWNvbXBvbmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
const maxValueMonth = [31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
2
|
-
const formatOrder = ['yyyy', 'yy', 'mm', 'dd', 'HH', 'MM', 'SS'];
|
|
3
|
-
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
4
|
-
export function createAutoCorrectedDatePipe(dateFormat = 'dd mm yyyy', { minYear = 1, maxYear = 9999 } = {}) {
|
|
5
|
-
const dateFormatArray = dateFormat
|
|
6
|
-
.split(/[^dmyHMS]+/)
|
|
7
|
-
.sort((a, b) => formatOrder.indexOf(a) - formatOrder.indexOf(b));
|
|
8
|
-
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
9
|
-
return function (conformedValue) {
|
|
10
|
-
const indexesOfPipedChars = [];
|
|
11
|
-
const maxValue = { dd: 31, mm: 12, yy: 99, yyyy: maxYear, HH: 23, MM: 59, SS: 59 };
|
|
12
|
-
const minValue = { dd: 1, mm: 1, yy: 0, yyyy: minYear, HH: 0, MM: 0, SS: 0 };
|
|
13
|
-
const conformedValueArr = conformedValue.split('');
|
|
14
|
-
// Check first digit
|
|
15
|
-
dateFormatArray.forEach((format) => {
|
|
16
|
-
const position = dateFormat.indexOf(format);
|
|
17
|
-
const maxFirstDigit = parseInt(maxValue[format].toString().substr(0, 1), 10);
|
|
18
|
-
if (parseInt(conformedValueArr[position], 10) > maxFirstDigit) {
|
|
19
|
-
conformedValueArr[position + 1] = conformedValueArr[position];
|
|
20
|
-
conformedValueArr[position] = 0;
|
|
21
|
-
indexesOfPipedChars.push(position);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
// Check for invalid date
|
|
25
|
-
let month = 0;
|
|
26
|
-
const isInvalid = dateFormatArray.some((format) => {
|
|
27
|
-
const position = dateFormat.indexOf(format);
|
|
28
|
-
const length = format.length;
|
|
29
|
-
const textValue = conformedValue.substr(position, length).replace(/\D/g, '');
|
|
30
|
-
const value = parseInt(textValue, 10);
|
|
31
|
-
if (format === 'mm') {
|
|
32
|
-
// tslint:disable-next-line: strict-boolean-expressions
|
|
33
|
-
month = value || 0;
|
|
34
|
-
}
|
|
35
|
-
const maxValueForFormat = format === 'dd' ? maxValueMonth[month] : maxValue[format];
|
|
36
|
-
if (format === 'yyyy' && (minYear !== 1 || maxYear !== 9999)) {
|
|
37
|
-
const scopedMaxValue = parseInt(maxValue[format].toString().substring(0, textValue.length), 10);
|
|
38
|
-
const scopedMinValue = parseInt(minValue[format].toString().substring(0, textValue.length), 10);
|
|
39
|
-
return value < scopedMinValue || value > scopedMaxValue;
|
|
40
|
-
}
|
|
41
|
-
if (format === 'HH' || format === 'MM') {
|
|
42
|
-
const scopedMaxValue = parseInt(maxValue[format].toString().substring(0, textValue.length), 10);
|
|
43
|
-
const scopedMinValue = parseInt(minValue[format].toString().substring(0, textValue.length), 10);
|
|
44
|
-
return value < scopedMinValue || value > scopedMaxValue;
|
|
45
|
-
}
|
|
46
|
-
return value > maxValueForFormat || (textValue.length === length && value < minValue[format]);
|
|
47
|
-
});
|
|
48
|
-
if (isInvalid) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
return {
|
|
52
|
-
value: conformedValueArr.join(''),
|
|
53
|
-
indexesOfPipedChars,
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
}
|
|
1
|
+
const maxValueMonth = [31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
2
|
+
const formatOrder = ['yyyy', 'yy', 'mm', 'dd', 'HH', 'MM', 'SS'];
|
|
3
|
+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
4
|
+
export function createAutoCorrectedDatePipe(dateFormat = 'dd mm yyyy', { minYear = 1, maxYear = 9999 } = {}) {
|
|
5
|
+
const dateFormatArray = dateFormat
|
|
6
|
+
.split(/[^dmyHMS]+/)
|
|
7
|
+
.sort((a, b) => formatOrder.indexOf(a) - formatOrder.indexOf(b));
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
9
|
+
return function (conformedValue) {
|
|
10
|
+
const indexesOfPipedChars = [];
|
|
11
|
+
const maxValue = { dd: 31, mm: 12, yy: 99, yyyy: maxYear, HH: 23, MM: 59, SS: 59 };
|
|
12
|
+
const minValue = { dd: 1, mm: 1, yy: 0, yyyy: minYear, HH: 0, MM: 0, SS: 0 };
|
|
13
|
+
const conformedValueArr = conformedValue.split('');
|
|
14
|
+
// Check first digit
|
|
15
|
+
dateFormatArray.forEach((format) => {
|
|
16
|
+
const position = dateFormat.indexOf(format);
|
|
17
|
+
const maxFirstDigit = parseInt(maxValue[format].toString().substr(0, 1), 10);
|
|
18
|
+
if (parseInt(conformedValueArr[position], 10) > maxFirstDigit) {
|
|
19
|
+
conformedValueArr[position + 1] = conformedValueArr[position];
|
|
20
|
+
conformedValueArr[position] = 0;
|
|
21
|
+
indexesOfPipedChars.push(position);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
// Check for invalid date
|
|
25
|
+
let month = 0;
|
|
26
|
+
const isInvalid = dateFormatArray.some((format) => {
|
|
27
|
+
const position = dateFormat.indexOf(format);
|
|
28
|
+
const length = format.length;
|
|
29
|
+
const textValue = conformedValue.substr(position, length).replace(/\D/g, '');
|
|
30
|
+
const value = parseInt(textValue, 10);
|
|
31
|
+
if (format === 'mm') {
|
|
32
|
+
// tslint:disable-next-line: strict-boolean-expressions
|
|
33
|
+
month = value || 0;
|
|
34
|
+
}
|
|
35
|
+
const maxValueForFormat = format === 'dd' ? maxValueMonth[month] : maxValue[format];
|
|
36
|
+
if (format === 'yyyy' && (minYear !== 1 || maxYear !== 9999)) {
|
|
37
|
+
const scopedMaxValue = parseInt(maxValue[format].toString().substring(0, textValue.length), 10);
|
|
38
|
+
const scopedMinValue = parseInt(minValue[format].toString().substring(0, textValue.length), 10);
|
|
39
|
+
return value < scopedMinValue || value > scopedMaxValue;
|
|
40
|
+
}
|
|
41
|
+
if (format === 'HH' || format === 'MM') {
|
|
42
|
+
const scopedMaxValue = parseInt(maxValue[format].toString().substring(0, textValue.length), 10);
|
|
43
|
+
const scopedMinValue = parseInt(minValue[format].toString().substring(0, textValue.length), 10);
|
|
44
|
+
return value < scopedMinValue || value > scopedMaxValue;
|
|
45
|
+
}
|
|
46
|
+
return value > maxValueForFormat || (textValue.length === length && value < minValue[format]);
|
|
47
|
+
});
|
|
48
|
+
if (isInvalid) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
value: conformedValueArr.join(''),
|
|
53
|
+
indexesOfPipedChars,
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
57
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1tYXNrLmNvbnN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9iYXNlL2NvbnN0cy9kYXRlLW1hc2suY29uc3RzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sYUFBYSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDM0UsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVqRSw0RUFBNEU7QUFDNUUsTUFBTSxVQUFVLDJCQUEyQixDQUFDLFVBQVUsR0FBRyxZQUFZLEVBQUUsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFO0lBQ3pHLE1BQU0sZUFBZSxHQUFHLFVBQVU7U0FDL0IsS0FBSyxDQUFDLFlBQVksQ0FBQztTQUNuQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVuRSw0RUFBNEU7SUFDNUUsT0FBTyxVQUFVLGNBQWM7UUFDN0IsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSxRQUFRLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FB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RUFBRTtnQkFDdEMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDaEcsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFFaEcsT0FBTyxLQUFLLEdBQUcsY0FBYyxJQUFJLEtBQUssR0FBRyxjQUFjLENBQUM7YUFDekQ7WUFFRCxPQUFPLEtBQUssR0FBRyxpQkFBaUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNoRyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksU0FBUyxFQUFFO1lBQ2IsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE9BQU87WUFDTCxLQUFLLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxtQkFBbUI7U0FDcEIsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBtYXhWYWx1ZU1vbnRoID0gWzMxLCAzMSwgMjksIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTtcclxuY29uc3QgZm9ybWF0T3JkZXIgPSBbJ3l5eXknLCAneXknLCAnbW0nLCAnZGQnLCAnSEgnLCAnTU0nLCAnU1MnXTtcclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGVcclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF1dG9Db3JyZWN0ZWREYXRlUGlwZShkYXRlRm9ybWF0ID0gJ2RkIG1tIHl5eXknLCB7IG1pblllYXIgPSAxLCBtYXhZZWFyID0gOTk5OSB9ID0ge30pIHtcclxuICBjb25zdCBkYXRlRm9ybWF0QXJyYXkgPSBkYXRlRm9ybWF0XHJcbiAgICAuc3BsaXQoL1teZG15SE1TXSsvKVxyXG4gICAgLnNvcnQoKGEsIGIpID0+IGZvcm1hdE9yZGVyLmluZGV4T2YoYSkgLSBmb3JtYXRPcmRlci5pbmRleE9mKGIpKTtcclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZVxyXG4gIHJldHVybiBmdW5jdGlvbiAoY29uZm9ybWVkVmFsdWUpIHtcclxuICAgIGNvbnN0IGluZGV4ZXNPZlBpcGVkQ2hhcnMgPSBbXTtcclxuICAgIGNvbnN0IG1heFZhbHVlID0geyBkZDogMzEsIG1tOiAxMiwgeXk6IDk5LCB5eXl5OiBtYXhZZWFyLCBISDogMjMsIE1NOiA1OSwgU1M6IDU5IH07XHJcbiAgICBjb25zdCBtaW5WYWx1ZSA9IHsgZGQ6IDEsIG1tOiAxLCB5eTogMCwgeXl5eTogbWluWWVhciwgSEg6IDAsIE1NOiAwLCBTUzogMCB9O1xyXG4gICAgY29uc3QgY29uZm9ybWVkVmFsdWVBcnIgPSBjb25mb3JtZWRWYWx1ZS5zcGxpdCgnJyk7XHJcblxyXG4gICAgLy8gQ2hlY2sgZmlyc3QgZGlnaXRcclxuICAgIGRhdGVGb3JtYXRBcnJheS5mb3JFYWNoKChmb3JtYXQpID0+IHtcclxuICAgICAgY29uc3QgcG9zaXRpb24gPSBkYXRlRm9ybWF0LmluZGV4T2YoZm9ybWF0KTtcclxuICAgICAgY29uc3QgbWF4Rmlyc3REaWdpdCA9IHBhcnNlSW50KG1heFZhbHVlW2Zvcm1hdF0udG9TdHJpbmcoKS5zdWJzdHIoMCwgMSksIDEwKTtcclxuXHJcbiAgICAgIGlmIChwYXJzZUludChjb25mb3JtZWRWYWx1ZUFycltwb3NpdGlvbl0sIDEwKSA+IG1heEZpcnN0RGlnaXQpIHtcclxuICAgICAgICBjb25mb3JtZWRWYWx1ZUFycltwb3NpdGlvbiArIDFdID0gY29uZm9ybWVkVmFsdWVBcnJbcG9zaXRpb25dO1xyXG4gICAgICAgIGNvbmZvcm1lZFZhbHVlQXJyW3Bvc2l0aW9uXSA9IDA7XHJcbiAgICAgICAgaW5kZXhlc09mUGlwZWRDaGFycy5wdXNoKHBvc2l0aW9uKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2hlY2sgZm9yIGludmFsaWQgZGF0ZVxyXG4gICAgbGV0IG1vbnRoID0gMDtcclxuICAgIGNvbnN0IGlzSW52YWxpZCA9IGRhdGVGb3JtYXRBcnJheS5zb21lKChmb3JtYXQpID0+IHtcclxuICAgICAgY29uc3QgcG9zaXRpb24gPSBkYXRlRm9ybWF0LmluZGV4T2YoZm9ybWF0KTtcclxuICAgICAgY29uc3QgbGVuZ3RoID0gZm9ybWF0Lmxlbmd0aDtcclxuICAgICAgY29uc3QgdGV4dFZhbHVlID0gY29uZm9ybWVkVmFsdWUuc3Vic3RyKHBvc2l0aW9uLCBsZW5ndGgpLnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQodGV4dFZhbHVlLCAxMCk7XHJcblxyXG4gICAgICBpZiAoZm9ybWF0ID09PSAnbW0nKSB7XHJcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzdHJpY3QtYm9vbGVhbi1leHByZXNzaW9uc1xyXG4gICAgICAgIG1vbnRoID0gdmFsdWUgfHwgMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbWF4VmFsdWVGb3JGb3JtYXQgPSBmb3JtYXQgPT09ICdkZCcgPyBtYXhWYWx1ZU1vbnRoW21vbnRoXSA6IG1heFZhbHVlW2Zvcm1hdF07XHJcblxyXG4gICAgICBpZiAoZm9ybWF0ID09PSAneXl5eScgJiYgKG1pblllYXIgIT09IDEgfHwgbWF4WWVhciAhPT0gOTk5OSkpIHtcclxuICAgICAgICBjb25zdCBzY29wZWRNYXhWYWx1ZSA9IHBhcnNlSW50KG1heFZhbHVlW2Zvcm1hdF0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgdGV4dFZhbHVlLmxlbmd0aCksIDEwKTtcclxuICAgICAgICBjb25zdCBzY29wZWRNaW5WYWx1ZSA9IHBhcnNlSW50KG1pblZhbHVlW2Zvcm1hdF0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgdGV4dFZhbHVlLmxlbmd0aCksIDEwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgc2NvcGVkTWluVmFsdWUgfHwgdmFsdWUgPiBzY29wZWRNYXhWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ0hIJyB8fCBmb3JtYXQgPT09ICdNTScpIHtcclxuICAgICAgICBjb25zdCBzY29wZWRNYXhWYWx1ZSA9IHBhcnNlSW50KG1heFZhbHVlW2Zvcm1hdF0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgdGV4dFZhbHVlLmxlbmd0aCksIDEwKTtcclxuICAgICAgICBjb25zdCBzY29wZWRNaW5WYWx1ZSA9IHBhcnNlSW50KG1pblZhbHVlW2Zvcm1hdF0udG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgdGV4dFZhbHVlLmxlbmd0aCksIDEwKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlIDwgc2NvcGVkTWluVmFsdWUgfHwgdmFsdWUgPiBzY29wZWRNYXhWYWx1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHZhbHVlID4gbWF4VmFsdWVGb3JGb3JtYXQgfHwgKHRleHRWYWx1ZS5sZW5ndGggPT09IGxlbmd0aCAmJiB2YWx1ZSA8IG1pblZhbHVlW2Zvcm1hdF0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGlzSW52YWxpZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgdmFsdWU6IGNvbmZvcm1lZFZhbHVlQXJyLmpvaW4oJycpLFxyXG4gICAgICBpbmRleGVzT2ZQaXBlZENoYXJzLFxyXG4gICAgfTtcclxuICB9O1xyXG59XHJcbiJdfQ==
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
import { Directive, Input } from '@angular/core';
|
|
2
|
-
import * as textMask from 'vanilla-text-mask/dist/vanillaTextMask';
|
|
3
|
-
import { createAutoCorrectedDatePipe } from '../consts/date-mask.consts';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class MaskDateDirective {
|
|
6
|
-
constructor(element) {
|
|
7
|
-
this.element = element;
|
|
8
|
-
this.isDateTimeMask = false;
|
|
9
|
-
this.considerSeconds = false;
|
|
10
|
-
this.mask = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/]; // dd/mm/yyyy
|
|
11
|
-
this.maskDateTime = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/, ',', ' ', /\d/, /\d/, ':', /\d/, /\d/]; // dd/mm/yyyy, hh:mm
|
|
12
|
-
this.maskDateTimeWithSeconds = [
|
|
13
|
-
/\d/,
|
|
14
|
-
/\d/,
|
|
15
|
-
'/',
|
|
16
|
-
/\d/,
|
|
17
|
-
/\d/,
|
|
18
|
-
'/',
|
|
19
|
-
/\d/,
|
|
20
|
-
/\d/,
|
|
21
|
-
/\d/,
|
|
22
|
-
/\d/,
|
|
23
|
-
',',
|
|
24
|
-
' ',
|
|
25
|
-
/\d/,
|
|
26
|
-
/\d/,
|
|
27
|
-
':',
|
|
28
|
-
/\d/,
|
|
29
|
-
/\d/,
|
|
30
|
-
':',
|
|
31
|
-
/\d/,
|
|
32
|
-
/\d/,
|
|
33
|
-
]; // dd/mm/yyyy, hh:mm:ss
|
|
34
|
-
}
|
|
35
|
-
ngOnInit() {
|
|
36
|
-
this.maskedInputController = textMask.maskInput({
|
|
37
|
-
inputElement: this.element.nativeElement,
|
|
38
|
-
guide: true,
|
|
39
|
-
showMask: false,
|
|
40
|
-
pipe: this.isDateTimeMask
|
|
41
|
-
? this.considerSeconds
|
|
42
|
-
? createAutoCorrectedDatePipe('dd/mm/yyyy, HH:MM:SS')
|
|
43
|
-
: createAutoCorrectedDatePipe('dd/mm/yyyy, HH:MM')
|
|
44
|
-
: createAutoCorrectedDatePipe('dd/mm/yyyy'),
|
|
45
|
-
keepCharPositions: true,
|
|
46
|
-
mask: this.isDateTimeMask ? (this.considerSeconds ? this.maskDateTimeWithSeconds : this.maskDateTime) : this.mask,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
ngOnDestroy() {
|
|
50
|
-
this.maskedInputController?.destroy();
|
|
51
|
-
}
|
|
52
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
53
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: MaskDateDirective, selector: "[appMaskDate]", inputs: { isDateTimeMask: "isDateTimeMask", considerSeconds: "considerSeconds" }, ngImport: i0 }); }
|
|
54
|
-
}
|
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirective, decorators: [{
|
|
56
|
-
type: Directive,
|
|
57
|
-
args: [{
|
|
58
|
-
selector: '[appMaskDate]',
|
|
59
|
-
}]
|
|
60
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { isDateTimeMask: [{
|
|
61
|
-
type: Input
|
|
62
|
-
}], considerSeconds: [{
|
|
63
|
-
type: Input
|
|
64
|
-
}] } });
|
|
1
|
+
import { Directive, Input } from '@angular/core';
|
|
2
|
+
import * as textMask from 'vanilla-text-mask/dist/vanillaTextMask';
|
|
3
|
+
import { createAutoCorrectedDatePipe } from '../consts/date-mask.consts';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class MaskDateDirective {
|
|
6
|
+
constructor(element) {
|
|
7
|
+
this.element = element;
|
|
8
|
+
this.isDateTimeMask = false;
|
|
9
|
+
this.considerSeconds = false;
|
|
10
|
+
this.mask = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/]; // dd/mm/yyyy
|
|
11
|
+
this.maskDateTime = [/\d/, /\d/, '/', /\d/, /\d/, '/', /\d/, /\d/, /\d/, /\d/, ',', ' ', /\d/, /\d/, ':', /\d/, /\d/]; // dd/mm/yyyy, hh:mm
|
|
12
|
+
this.maskDateTimeWithSeconds = [
|
|
13
|
+
/\d/,
|
|
14
|
+
/\d/,
|
|
15
|
+
'/',
|
|
16
|
+
/\d/,
|
|
17
|
+
/\d/,
|
|
18
|
+
'/',
|
|
19
|
+
/\d/,
|
|
20
|
+
/\d/,
|
|
21
|
+
/\d/,
|
|
22
|
+
/\d/,
|
|
23
|
+
',',
|
|
24
|
+
' ',
|
|
25
|
+
/\d/,
|
|
26
|
+
/\d/,
|
|
27
|
+
':',
|
|
28
|
+
/\d/,
|
|
29
|
+
/\d/,
|
|
30
|
+
':',
|
|
31
|
+
/\d/,
|
|
32
|
+
/\d/,
|
|
33
|
+
]; // dd/mm/yyyy, hh:mm:ss
|
|
34
|
+
}
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
this.maskedInputController = textMask.maskInput({
|
|
37
|
+
inputElement: this.element.nativeElement,
|
|
38
|
+
guide: true,
|
|
39
|
+
showMask: false,
|
|
40
|
+
pipe: this.isDateTimeMask
|
|
41
|
+
? this.considerSeconds
|
|
42
|
+
? createAutoCorrectedDatePipe('dd/mm/yyyy, HH:MM:SS')
|
|
43
|
+
: createAutoCorrectedDatePipe('dd/mm/yyyy, HH:MM')
|
|
44
|
+
: createAutoCorrectedDatePipe('dd/mm/yyyy'),
|
|
45
|
+
keepCharPositions: true,
|
|
46
|
+
mask: this.isDateTimeMask ? (this.considerSeconds ? this.maskDateTimeWithSeconds : this.maskDateTime) : this.mask,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
ngOnDestroy() {
|
|
50
|
+
this.maskedInputController?.destroy();
|
|
51
|
+
}
|
|
52
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
53
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: MaskDateDirective, selector: "[appMaskDate]", inputs: { isDateTimeMask: "isDateTimeMask", considerSeconds: "considerSeconds" }, ngImport: i0 }); }
|
|
54
|
+
}
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirective, decorators: [{
|
|
56
|
+
type: Directive,
|
|
57
|
+
args: [{
|
|
58
|
+
selector: '[appMaskDate]',
|
|
59
|
+
}]
|
|
60
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { isDateTimeMask: [{
|
|
61
|
+
type: Input
|
|
62
|
+
}], considerSeconds: [{
|
|
63
|
+
type: Input
|
|
64
|
+
}] } });
|
|
65
65
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1tYXNrLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9iYXNlL2RpcmVjdGl2ZXMvZGF0ZS1tYXNrLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxLQUFLLFFBQVEsTUFBTSx3Q0FBd0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFLekUsTUFBTSxPQUFPLGlCQUFpQjtJQThCNUIsWUFBOEIsT0FBbUI7UUFBbkIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQTdCeEMsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFHakMsU0FBSSxHQUFHLENBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFFLENBQUMsQ0FBQyxhQUFhO1FBQ2xGLGlCQUFZLEdBQUcsQ0FBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFFLENBQUMsQ0FBQyxvQkFBb0I7UUFDeEksNEJBQXVCLEdBQUc7WUFDeEIsSUFBSTtZQUNKLElBQUk7WUFDSixHQUFHO1lBQ0gsSUFBSTtZQUNKLElBQUk7WUFDSixHQUFHO1lBQ0gsSUFBSTtZQUNKLElBQUk7WUFDSixJQUFJO1lBQ0osSUFBSTtZQUNKLEdBQUc7WUFDSCxHQUFHO1lBQ0gsSUFBSTtZQUNKLElBQUk7WUFDSixHQUFHO1lBQ0gsSUFBSTtZQUNKLElBQUk7WUFDSixHQUFHO1lBQ0gsSUFBSTtZQUNKLElBQUk7U0FDTCxDQUFDLENBQUMsdUJBQXVCO0lBRTRCLENBQUM7SUFFdkQsUUFBUTtRQUNOLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFFO1lBQy9DLFlBQVksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWE7WUFDeEMsS0FBSyxFQUFFLElBQUk7WUFDWCxRQUFRLEVBQUUsS0FBSztZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDdkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlO29CQUNwQixDQUFDLENBQUMsMkJBQTJCLENBQUUsc0JBQXNCLENBQUU7b0JBQ3ZELENBQUMsQ0FBQywyQkFBMkIsQ0FBRSxtQkFBbUIsQ0FBRTtnQkFDdEQsQ0FBQyxDQUFDLDJCQUEyQixDQUFFLFlBQVksQ0FBRTtZQUMvQyxpQkFBaUIsRUFBRSxJQUFJO1lBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSTtTQUNwSCxDQUFFLENBQUM7SUFDTixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUN4QyxDQUFDOytHQWpEVSxpQkFBaUI7bUdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFIN0IsU0FBUzttQkFBRTtvQkFDVixRQUFRLEVBQUUsZUFBZTtpQkFDMUI7aUdBRVUsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgdGV4dE1hc2sgZnJvbSAndmFuaWxsYS10ZXh0LW1hc2svZGlzdC92YW5pbGxhVGV4dE1hc2snO1xyXG5pbXBvcnQgeyBjcmVhdGVBdXRvQ29ycmVjdGVkRGF0ZVBpcGUgfSBmcm9tICcuLi9jb25zdHMvZGF0ZS1tYXNrLmNvbnN0cyc7XHJcblxyXG5ARGlyZWN0aXZlKCB7XHJcbiAgc2VsZWN0b3I6ICdbYXBwTWFza0RhdGVdJyxcclxufSApXHJcbmV4cG9ydCBjbGFzcyBNYXNrRGF0ZURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBpc0RhdGVUaW1lTWFzayA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGNvbnNpZGVyU2Vjb25kcyA9IGZhbHNlO1xyXG5cclxuICBtYXNrZWRJbnB1dENvbnRyb2xsZXI7XHJcbiAgbWFzayA9IFsgL1xcZC8sIC9cXGQvLCAnLycsIC9cXGQvLCAvXFxkLywgJy8nLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAvXFxkLyBdOyAvLyBkZC9tbS95eXl5XHJcbiAgbWFza0RhdGVUaW1lID0gWyAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAnLycsIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvLCAnLCcsICcgJywgL1xcZC8sIC9cXGQvLCAnOicsIC9cXGQvLCAvXFxkLyBdOyAvLyBkZC9tbS95eXl5LCBoaDptbVxyXG4gIG1hc2tEYXRlVGltZVdpdGhTZWNvbmRzID0gW1xyXG4gICAgL1xcZC8sXHJcbiAgICAvXFxkLyxcclxuICAgICcvJyxcclxuICAgIC9cXGQvLFxyXG4gICAgL1xcZC8sXHJcbiAgICAnLycsXHJcbiAgICAvXFxkLyxcclxuICAgIC9cXGQvLFxyXG4gICAgL1xcZC8sXHJcbiAgICAvXFxkLyxcclxuICAgICcsJyxcclxuICAgICcgJyxcclxuICAgIC9cXGQvLFxyXG4gICAgL1xcZC8sXHJcbiAgICAnOicsXHJcbiAgICAvXFxkLyxcclxuICAgIC9cXGQvLFxyXG4gICAgJzonLFxyXG4gICAgL1xcZC8sXHJcbiAgICAvXFxkLyxcclxuICBdOyAvLyBkZC9tbS95eXl5LCBoaDptbTpzc1xyXG5cclxuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSByZWFkb25seSBlbGVtZW50OiBFbGVtZW50UmVmICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5tYXNrZWRJbnB1dENvbnRyb2xsZXIgPSB0ZXh0TWFzay5tYXNrSW5wdXQoIHtcclxuICAgICAgaW5wdXRFbGVtZW50OiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcclxuICAgICAgZ3VpZGU6IHRydWUsXHJcbiAgICAgIHNob3dNYXNrOiBmYWxzZSxcclxuICAgICAgcGlwZTogdGhpcy5pc0RhdGVUaW1lTWFza1xyXG4gICAgICAgID8gdGhpcy5jb25zaWRlclNlY29uZHNcclxuICAgICAgICAgID8gY3JlYXRlQXV0b0NvcnJlY3RlZERhdGVQaXBlKCAnZGQvbW0veXl5eSwgSEg6TU06U1MnIClcclxuICAgICAgICAgIDogY3JlYXRlQXV0b0NvcnJlY3RlZERhdGVQaXBlKCAnZGQvbW0veXl5eSwgSEg6TU0nIClcclxuICAgICAgICA6IGNyZWF0ZUF1dG9Db3JyZWN0ZWREYXRlUGlwZSggJ2RkL21tL3l5eXknICksXHJcbiAgICAgIGtlZXBDaGFyUG9zaXRpb25zOiB0cnVlLFxyXG4gICAgICBtYXNrOiB0aGlzLmlzRGF0ZVRpbWVNYXNrID8gKCB0aGlzLmNvbnNpZGVyU2Vjb25kcyA/IHRoaXMubWFza0RhdGVUaW1lV2l0aFNlY29uZHMgOiB0aGlzLm1hc2tEYXRlVGltZSApIDogdGhpcy5tYXNrLFxyXG4gICAgfSApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm1hc2tlZElucHV0Q29udHJvbGxlcj8uZGVzdHJveSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { NgModule } from '@angular/core';
|
|
3
|
-
import { MaskDateDirective } from './date-mask.directive';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class MaskDateDirectiveModule {
|
|
6
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirectiveModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirectiveModule, declarations: [MaskDateDirective], imports: [CommonModule], exports: [MaskDateDirective] }); }
|
|
8
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirectiveModule, imports: [CommonModule] }); }
|
|
9
|
-
}
|
|
10
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirectiveModule, decorators: [{
|
|
11
|
-
type: NgModule,
|
|
12
|
-
args: [{
|
|
13
|
-
imports: [CommonModule],
|
|
14
|
-
declarations: [
|
|
15
|
-
MaskDateDirective,
|
|
16
|
-
],
|
|
17
|
-
exports: [
|
|
18
|
-
MaskDateDirective,
|
|
19
|
-
],
|
|
20
|
-
}]
|
|
21
|
-
}] });
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { NgModule } from '@angular/core';
|
|
3
|
+
import { MaskDateDirective } from './date-mask.directive';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class MaskDateDirectiveModule {
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirectiveModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirectiveModule, declarations: [MaskDateDirective], imports: [CommonModule], exports: [MaskDateDirective] }); }
|
|
8
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirectiveModule, imports: [CommonModule] }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MaskDateDirectiveModule, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
imports: [CommonModule],
|
|
14
|
+
declarations: [
|
|
15
|
+
MaskDateDirective,
|
|
16
|
+
],
|
|
17
|
+
exports: [
|
|
18
|
+
MaskDateDirective,
|
|
19
|
+
],
|
|
20
|
+
}]
|
|
21
|
+
}] });
|
|
22
22
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1tYXNrLmRpcmVjdGl2ZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvYmFzZS9kaXJlY3RpdmVzL2RhdGUtbWFzay5kaXJlY3RpdmUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQVd4RCxNQUFNLE9BQU8sdUJBQXVCOytHQUF2Qix1QkFBdUI7Z0hBQXZCLHVCQUF1QixpQkFOaEMsaUJBQWlCLGFBRlIsWUFBWSxhQUtyQixpQkFBaUI7Z0hBR1IsdUJBQXVCLFlBUnZCLFlBQVk7OzRGQVFaLHVCQUF1QjtrQkFUbkMsUUFBUTttQkFBRTtvQkFDVCxPQUFPLEVBQUUsQ0FBRSxZQUFZLENBQUU7b0JBQ3pCLFlBQVksRUFBRTt3QkFDWixpQkFBaUI7cUJBQ2xCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxpQkFBaUI7cUJBQ2xCO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge01hc2tEYXRlRGlyZWN0aXZlfSBmcm9tICcuL2RhdGUtbWFzay5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKCB7XHJcbiAgaW1wb3J0czogWyBDb21tb25Nb2R1bGUgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIE1hc2tEYXRlRGlyZWN0aXZlLFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgTWFza0RhdGVEaXJlY3RpdmUsXHJcbiAgXSxcclxufSApXHJcbmV4cG9ydCBjbGFzcyBNYXNrRGF0ZURpcmVjdGl2ZU1vZHVsZSB7IH1cclxuIl19
|
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
import { Directive, HostListener, Input } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class DigitsOnlyDirective {
|
|
4
|
-
constructor(el) {
|
|
5
|
-
this.el = el;
|
|
6
|
-
this.digitsOnly = false;
|
|
7
|
-
this.allowHyphen = false;
|
|
8
|
-
this.decimal = false;
|
|
9
|
-
this.decimalSeparator = '.';
|
|
10
|
-
this.unit = 0;
|
|
11
|
-
this.minus = '-';
|
|
12
|
-
this.minusCounter = 0;
|
|
13
|
-
this.decimalCounter = 0;
|
|
14
|
-
this.navigationKeys = [
|
|
15
|
-
'Backspace',
|
|
16
|
-
'Delete',
|
|
17
|
-
'Tab',
|
|
18
|
-
'Escape',
|
|
19
|
-
'Enter',
|
|
20
|
-
'Home',
|
|
21
|
-
'End',
|
|
22
|
-
'ArrowLeft',
|
|
23
|
-
'ArrowRight',
|
|
24
|
-
'Clear',
|
|
25
|
-
'Copy',
|
|
26
|
-
'Paste',
|
|
27
|
-
];
|
|
28
|
-
this.inputElement = el.nativeElement;
|
|
29
|
-
}
|
|
30
|
-
onKeyDown(e) {
|
|
31
|
-
if (this.digitsOnly) {
|
|
32
|
-
if (this.navigationKeys.indexOf(e.key) > -1 || // Allow: navigation keys: backspace, delete, arrows etc.
|
|
33
|
-
(e.key === 'a' && e.ctrlKey) || // Allow: Ctrl+A
|
|
34
|
-
(e.key === 'c' && e.ctrlKey) || // Allow: Ctrl+C
|
|
35
|
-
(e.key === 'v' && e.ctrlKey) || // Allow: Ctrl+V
|
|
36
|
-
(e.key === 'x' && e.ctrlKey) || // Allow: Ctrl+X
|
|
37
|
-
(e.key === 'a' && e.metaKey) || // Allow: Cmd+A (Mac)
|
|
38
|
-
(e.key === 'c' && e.metaKey) || // Allow: Cmd+C (Mac)
|
|
39
|
-
(e.key === 'v' && e.metaKey) || // Allow: Cmd+V (Mac)
|
|
40
|
-
(e.key === 'x' && e.metaKey) || // Allow: Cmd+X (Mac)
|
|
41
|
-
(this.decimal && e.key === this.decimalSeparator && this.decimalCounter <= 1) || // Allow: only one decimal point
|
|
42
|
-
(this.decimal && e.key === this.minus && this.minusCounter < 1) // Allow: only one minus
|
|
43
|
-
) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
// Ensure that it is a number and stop the keypress
|
|
47
|
-
if (e.key === ' ' || !this.regex.test(e.key)) {
|
|
48
|
-
e.preventDefault();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
onKeyUp() {
|
|
53
|
-
if (this.digitsOnly) {
|
|
54
|
-
if (!this.decimal) {
|
|
55
|
-
return;
|
|
56
|
-
}
|
|
57
|
-
this.decimalCounter = this.el.nativeElement.value.split(this.decimalSeparator).length - 1;
|
|
58
|
-
this.minusCounter = this.el.nativeElement.value.split(this.minus).length - 1;
|
|
59
|
-
if (isNaN(+this.inputElement.value)) {
|
|
60
|
-
this.inputElement.value = this.sanitizeInput(this.inputElement.value);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
onPaste(event) {
|
|
65
|
-
if (this.digitsOnly) {
|
|
66
|
-
const pastedInput = event.clipboardData?.getData('text/plain');
|
|
67
|
-
this.pasteData(pastedInput);
|
|
68
|
-
event.preventDefault();
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
ngOnInit() {
|
|
72
|
-
this.regex = new RegExp(this.allowHyphen ? '^[\\d -]+$' : '\\d');
|
|
73
|
-
}
|
|
74
|
-
pasteData(pastedContent) {
|
|
75
|
-
const sanitizedContent = isNaN(+pastedContent) ? this.sanitizeInput(pastedContent) : pastedContent;
|
|
76
|
-
const pasted = document.execCommand('insertText', false, sanitizedContent);
|
|
77
|
-
if (!pasted) {
|
|
78
|
-
const { selectionStart: start, selectionEnd: end } = this.inputElement;
|
|
79
|
-
this.inputElement.setRangeText(sanitizedContent, start, end, 'end');
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
sanitizeInput(input) {
|
|
83
|
-
let result = '';
|
|
84
|
-
if (this.decimal && this.isValidDecimal(input)) {
|
|
85
|
-
const regex = new RegExp(`^[\d -${this.decimalSeparator}]+$`, 'g');
|
|
86
|
-
result = input.replace(regex, '');
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
result = input.replace(`/${this.regex}/g`, '');
|
|
90
|
-
}
|
|
91
|
-
const maxLength = this.inputElement.maxLength;
|
|
92
|
-
if (maxLength > 0) {
|
|
93
|
-
// the input element has maxLength limit
|
|
94
|
-
const allowedLength = maxLength - this.inputElement.value.length;
|
|
95
|
-
result = allowedLength > 0 ? result.substring(0, allowedLength) : '';
|
|
96
|
-
}
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
|
-
isValidDecimal(inputString) {
|
|
100
|
-
return inputString.split(this.decimalSeparator).length <= 2;
|
|
101
|
-
}
|
|
102
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DigitsOnlyDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
103
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DigitsOnlyDirective, selector: "[appDigitsOnly]", inputs: { digitsOnly: "digitsOnly", allowHyphen: "allowHyphen", decimal: "decimal", decimalSeparator: "decimalSeparator", unit: "unit" }, host: { listeners: { "keydown": "onKeyDown($event)", "keyup": "onKeyUp($event)", "paste": "onPaste($event)" } }, ngImport: i0 }); }
|
|
104
|
-
}
|
|
105
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DigitsOnlyDirective, decorators: [{
|
|
106
|
-
type: Directive,
|
|
107
|
-
args: [{
|
|
108
|
-
selector: '[appDigitsOnly]',
|
|
109
|
-
}]
|
|
110
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { digitsOnly: [{
|
|
111
|
-
type: Input
|
|
112
|
-
}], allowHyphen: [{
|
|
113
|
-
type: Input
|
|
114
|
-
}], decimal: [{
|
|
115
|
-
type: Input
|
|
116
|
-
}], decimalSeparator: [{
|
|
117
|
-
type: Input
|
|
118
|
-
}], unit: [{
|
|
119
|
-
type: Input
|
|
120
|
-
}], onKeyDown: [{
|
|
121
|
-
type: HostListener,
|
|
122
|
-
args: ['keydown', ['$event']]
|
|
123
|
-
}], onKeyUp: [{
|
|
124
|
-
type: HostListener,
|
|
125
|
-
args: ['keyup', ['$event']]
|
|
126
|
-
}], onPaste: [{
|
|
127
|
-
type: HostListener,
|
|
128
|
-
args: ['paste', ['$event']]
|
|
129
|
-
}] } });
|
|
1
|
+
import { Directive, HostListener, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class DigitsOnlyDirective {
|
|
4
|
+
constructor(el) {
|
|
5
|
+
this.el = el;
|
|
6
|
+
this.digitsOnly = false;
|
|
7
|
+
this.allowHyphen = false;
|
|
8
|
+
this.decimal = false;
|
|
9
|
+
this.decimalSeparator = '.';
|
|
10
|
+
this.unit = 0;
|
|
11
|
+
this.minus = '-';
|
|
12
|
+
this.minusCounter = 0;
|
|
13
|
+
this.decimalCounter = 0;
|
|
14
|
+
this.navigationKeys = [
|
|
15
|
+
'Backspace',
|
|
16
|
+
'Delete',
|
|
17
|
+
'Tab',
|
|
18
|
+
'Escape',
|
|
19
|
+
'Enter',
|
|
20
|
+
'Home',
|
|
21
|
+
'End',
|
|
22
|
+
'ArrowLeft',
|
|
23
|
+
'ArrowRight',
|
|
24
|
+
'Clear',
|
|
25
|
+
'Copy',
|
|
26
|
+
'Paste',
|
|
27
|
+
];
|
|
28
|
+
this.inputElement = el.nativeElement;
|
|
29
|
+
}
|
|
30
|
+
onKeyDown(e) {
|
|
31
|
+
if (this.digitsOnly) {
|
|
32
|
+
if (this.navigationKeys.indexOf(e.key) > -1 || // Allow: navigation keys: backspace, delete, arrows etc.
|
|
33
|
+
(e.key === 'a' && e.ctrlKey) || // Allow: Ctrl+A
|
|
34
|
+
(e.key === 'c' && e.ctrlKey) || // Allow: Ctrl+C
|
|
35
|
+
(e.key === 'v' && e.ctrlKey) || // Allow: Ctrl+V
|
|
36
|
+
(e.key === 'x' && e.ctrlKey) || // Allow: Ctrl+X
|
|
37
|
+
(e.key === 'a' && e.metaKey) || // Allow: Cmd+A (Mac)
|
|
38
|
+
(e.key === 'c' && e.metaKey) || // Allow: Cmd+C (Mac)
|
|
39
|
+
(e.key === 'v' && e.metaKey) || // Allow: Cmd+V (Mac)
|
|
40
|
+
(e.key === 'x' && e.metaKey) || // Allow: Cmd+X (Mac)
|
|
41
|
+
(this.decimal && e.key === this.decimalSeparator && this.decimalCounter <= 1) || // Allow: only one decimal point
|
|
42
|
+
(this.decimal && e.key === this.minus && this.minusCounter < 1) // Allow: only one minus
|
|
43
|
+
) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
// Ensure that it is a number and stop the keypress
|
|
47
|
+
if (e.key === ' ' || !this.regex.test(e.key)) {
|
|
48
|
+
e.preventDefault();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
onKeyUp() {
|
|
53
|
+
if (this.digitsOnly) {
|
|
54
|
+
if (!this.decimal) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
this.decimalCounter = this.el.nativeElement.value.split(this.decimalSeparator).length - 1;
|
|
58
|
+
this.minusCounter = this.el.nativeElement.value.split(this.minus).length - 1;
|
|
59
|
+
if (isNaN(+this.inputElement.value)) {
|
|
60
|
+
this.inputElement.value = this.sanitizeInput(this.inputElement.value);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
onPaste(event) {
|
|
65
|
+
if (this.digitsOnly) {
|
|
66
|
+
const pastedInput = event.clipboardData?.getData('text/plain');
|
|
67
|
+
this.pasteData(pastedInput);
|
|
68
|
+
event.preventDefault();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
ngOnInit() {
|
|
72
|
+
this.regex = new RegExp(this.allowHyphen ? '^[\\d -]+$' : '\\d');
|
|
73
|
+
}
|
|
74
|
+
pasteData(pastedContent) {
|
|
75
|
+
const sanitizedContent = isNaN(+pastedContent) ? this.sanitizeInput(pastedContent) : pastedContent;
|
|
76
|
+
const pasted = document.execCommand('insertText', false, sanitizedContent);
|
|
77
|
+
if (!pasted) {
|
|
78
|
+
const { selectionStart: start, selectionEnd: end } = this.inputElement;
|
|
79
|
+
this.inputElement.setRangeText(sanitizedContent, start, end, 'end');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
sanitizeInput(input) {
|
|
83
|
+
let result = '';
|
|
84
|
+
if (this.decimal && this.isValidDecimal(input)) {
|
|
85
|
+
const regex = new RegExp(`^[\d -${this.decimalSeparator}]+$`, 'g');
|
|
86
|
+
result = input.replace(regex, '');
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
result = input.replace(`/${this.regex}/g`, '');
|
|
90
|
+
}
|
|
91
|
+
const maxLength = this.inputElement.maxLength;
|
|
92
|
+
if (maxLength > 0) {
|
|
93
|
+
// the input element has maxLength limit
|
|
94
|
+
const allowedLength = maxLength - this.inputElement.value.length;
|
|
95
|
+
result = allowedLength > 0 ? result.substring(0, allowedLength) : '';
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
99
|
+
isValidDecimal(inputString) {
|
|
100
|
+
return inputString.split(this.decimalSeparator).length <= 2;
|
|
101
|
+
}
|
|
102
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DigitsOnlyDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
103
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DigitsOnlyDirective, selector: "[appDigitsOnly]", inputs: { digitsOnly: "digitsOnly", allowHyphen: "allowHyphen", decimal: "decimal", decimalSeparator: "decimalSeparator", unit: "unit" }, host: { listeners: { "keydown": "onKeyDown($event)", "keyup": "onKeyUp($event)", "paste": "onPaste($event)" } }, ngImport: i0 }); }
|
|
104
|
+
}
|
|
105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DigitsOnlyDirective, decorators: [{
|
|
106
|
+
type: Directive,
|
|
107
|
+
args: [{
|
|
108
|
+
selector: '[appDigitsOnly]',
|
|
109
|
+
}]
|
|
110
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { digitsOnly: [{
|
|
111
|
+
type: Input
|
|
112
|
+
}], allowHyphen: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}], decimal: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], decimalSeparator: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}], unit: [{
|
|
119
|
+
type: Input
|
|
120
|
+
}], onKeyDown: [{
|
|
121
|
+
type: HostListener,
|
|
122
|
+
args: ['keydown', ['$event']]
|
|
123
|
+
}], onKeyUp: [{
|
|
124
|
+
type: HostListener,
|
|
125
|
+
args: ['keyup', ['$event']]
|
|
126
|
+
}], onPaste: [{
|
|
127
|
+
type: HostListener,
|
|
128
|
+
args: ['paste', ['$event']]
|
|
129
|
+
}] } });
|
|
130
130
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlnaXRzLW9ubHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2Jhc2UvZGlyZWN0aXZlcy9kaWdpdHMtb25seS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOztBQUtuRixNQUFNLE9BQU8sbUJBQW1CO0lBZ0M5QixZQUFtQixFQUFjO1FBQWQsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQTlCakMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUduQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVYLFlBQU8sR0FBSSxLQUFLLENBQUM7UUFDakIscUJBQWdCLEdBQUksR0FBRyxDQUFDO1FBQ3hCLFNBQUksR0FBSSxDQUFDLENBQUM7UUFHbkIsVUFBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBR1QsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDVixtQkFBYyxHQUFHO1lBQ2hDLFdBQVc7WUFDWCxRQUFRO1lBQ1IsS0FBSztZQUNMLFFBQVE7WUFDUixPQUFPO1lBQ1AsTUFBTTtZQUNOLEtBQUs7WUFDTCxXQUFXO1lBQ1gsWUFBWTtZQUNaLE9BQU87WUFDUCxNQUFNO1lBQ04sT0FBTztTQUNSLENBQUM7UUFHQSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUM7SUFDdkMsQ0FBQztJQUdELFNBQVMsQ0FBQyxDQUFnQjtRQUN4QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFDRSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUkseURBQXlEO2dCQUNwRyxDQUFDLENBQUMsQ0FBQyxHQUFH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WUFDeEMsTUFBTSxhQUFhLEdBQUcsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNqRSxNQUFNLEdBQUcsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUN0RTtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxjQUFjLENBQUMsV0FBbUI7UUFDeEMsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBMEIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDeEUsQ0FBQzsrR0ExSFUsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBSC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGlCQUFpQjtpQkFDNUI7aUdBR0MsVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFdBQVc7c0JBRFYsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkE0Qk4sU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkEyQm5DLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBaUJqQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2FwcERpZ2l0c09ubHldJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIERpZ2l0c09ubHlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpXHJcbiAgZGlnaXRzT25seSA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGFsbG93SHlwaGVuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGRlY2ltYWw/ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGVjaW1hbFNlcGFyYXRvcj8gPSAnLic7XHJcbiAgQElucHV0KCkgdW5pdD8gPSAwO1xyXG5cclxuICBpbnB1dEVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgbWludXMgPSAnLSc7XHJcbiAgbWludXNDb3VudGVyID0gMDtcclxuICByZWdleCE6IFJlZ0V4cDtcclxuXHJcbiAgcHJpdmF0ZSBkZWNpbWFsQ291bnRlciA9IDA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBuYXZpZ2F0aW9uS2V5cyA9IFtcclxuICAgICdCYWNrc3BhY2UnLFxyXG4gICAgJ0RlbGV0ZScsXHJcbiAgICAnVGFiJyxcclxuICAgICdFc2NhcGUnLFxyXG4gICAgJ0VudGVyJyxcclxuICAgICdIb21lJyxcclxuICAgICdFbmQnLFxyXG4gICAgJ0Fycm93TGVmdCcsXHJcbiAgICAnQXJyb3dSaWdodCcsXHJcbiAgICAnQ2xlYXInLFxyXG4gICAgJ0NvcHknLFxyXG4gICAgJ1Bhc3RlJyxcclxuICBdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZWw6IEVsZW1lbnRSZWYpIHtcclxuICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gZWwubmF0aXZlRWxlbWVudDtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5RG93bihlOiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaWdpdHNPbmx5KSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLm5hdmlnYXRpb25LZXlzLmluZGV4T2YoZS5rZXkpID4gLTEgfHwgLy8gQWxsb3c6IG5hdmlnYXRpb24ga2V5czogYmFja3NwYWNlLCBkZWxldGUsIGFycm93cyBldGMuXHJcbiAgICAgICAgKGUua2V5ID09PSAnYScgJiYgZS5jdHJsS2V5KSB8fCAvLyBBbGxvdzogQ3RybCtBXHJcbiAgICAgICAgKGUua2V5ID09PSAnYycgJiYgZS5jdHJsS2V5KSB8fCAvLyBBbGxvdzogQ3RybCtDXHJcbiAgICAgICAgKGUua2V5ID09PSAndicgJiYgZS5jdHJsS2V5KSB8fCAvLyBBbGxvdzogQ3RybCtWXHJcbiAgICAgICAgKGUua2V5ID09PSAneCcgJiYgZS5jdHJsS2V5KSB8fCAvLyBBbGxvdzogQ3RybCtYXHJcbiAgICAgICAgKGUua2V5ID09PSAnYScgJiYgZS5tZXRhS2V5KSB8fCAvLyBBbGxvdzogQ21kK0EgKE1hYylcclxuICAgICAgICAoZS5rZXkgPT09ICdjJyAmJiBlLm1ldGFLZXkpIHx8IC8vIEFsbG93OiBDbWQrQyAoTWFjKVxyXG4gICAgICAgIChlLmtleSA9PT0gJ3YnICYmIGUubWV0YUtleSkgfHwgLy8gQWxsb3c6IENtZCtWIChNYWMpXHJcbiAgICAgICAgKGUua2V5ID09PSAneCcgJiYgZS5tZXRhS2V5KSB8fCAvLyBBbGxvdzogQ21kK1ggKE1hYylcclxuICAgICAgICAodGhpcy5kZWNpbWFsICYmIGUua2V5ID09PSB0aGlzLmRlY2ltYWxTZXBhcmF0b3IgJiYgdGhpcy5kZWNpbWFsQ291bnRlciA8PSAxKSB8fCAvLyBBbGxvdzogb25seSBvbmUgZGVjaW1hbCBwb2ludFxyXG4gICAgICAgICh0aGlzLmRlY2ltYWwgJiYgZS5rZXkgPT09IHRoaXMubWludXMgJiYgdGhpcy5taW51c0NvdW50ZXIgPCAxKSAvLyBBbGxvdzogb25seSBvbmUgbWludXNcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBFbnN1cmUgdGhhdCBpdCBpcyBhIG51bWJlciBhbmQgc3RvcCB0aGUga2V5cHJlc3NcclxuICAgICAgaWYgKGUua2V5ID09PSAnICcgfHwgIXRoaXMucmVnZXgudGVzdChlLmtleSkpIHtcclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2tleXVwJywgWyckZXZlbnQnXSlcclxuICBvbktleVVwKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGlnaXRzT25seSkge1xyXG4gICAgICBpZiAoIXRoaXMuZGVjaW1hbCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kZWNpbWFsQ291bnRlciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC52YWx1ZS5zcGxpdCh0aGlzLmRlY2ltYWxTZXBhcmF0b3IpLmxlbmd0aCAtIDE7XHJcbiAgICAgIHRoaXMubWludXNDb3VudGVyID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnZhbHVlLnNwbGl0KHRoaXMubWludXMpLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgICBpZiAoaXNOYU4oK3RoaXMuaW5wdXRFbGVtZW50LnZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID0gdGhpcy5zYW5pdGl6ZUlucHV0KHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcigncGFzdGUnLCBbJyRldmVudCddKVxyXG4gIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaWdpdHNPbmx5KSB7XHJcbiAgICAgIGNvbnN0IHBhc3RlZElucHV0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dC9wbGFpbicpIGFzIHN0cmluZztcclxuICAgICAgdGhpcy5wYXN0ZURhdGEocGFzdGVkSW5wdXQpO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZ2V4ID0gbmV3IFJlZ0V4cCh0aGlzLmFsbG93SHlwaGVuID8gJ15bXFxcXGQgLV0rJCcgOiAnXFxcXGQnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcGFzdGVEYXRhKHBhc3RlZENvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2FuaXRpemVkQ29udGVudCA9IGlzTmFOKCtwYXN0ZWRDb250ZW50KSA/IHRoaXMuc2FuaXRpemVJbnB1dChwYXN0ZWRDb250ZW50KSA6IHBhc3RlZENvbnRlbnQ7XHJcbiAgICBjb25zdCBwYXN0ZWQgPSBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcsIGZhbHNlLCBzYW5pdGl6ZWRDb250ZW50KTtcclxuICAgIGlmICghcGFzdGVkKSB7XHJcbiAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQ6IHN0YXJ0LCBzZWxlY3Rpb25FbmQ6IGVuZCB9ID0gdGhpcy5pbnB1dEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnNldFJhbmdlVGV4dChzYW5pdGl6ZWRDb250ZW50LCBzdGFydCBhcyBudW1iZXIsIGVuZCBhcyBudW1iZXIsICdlbmQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2FuaXRpemVJbnB1dChpbnB1dDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGxldCByZXN1bHQgPSAnJztcclxuICAgIGlmICh0aGlzLmRlY2ltYWwgJiYgdGhpcy5pc1ZhbGlkRGVjaW1hbChpbnB1dCkpIHtcclxuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGBeW1xcZCAtJHt0aGlzLmRlY2ltYWxTZXBhcmF0b3J9XSskYCwgJ2cnKTtcclxuICAgICAgcmVzdWx0ID0gaW5wdXQucmVwbGFjZShyZWdleCwgJycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gaW5wdXQucmVwbGFjZShgLyR7dGhpcy5yZWdleH0vZ2AsICcnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXhMZW5ndGggPSB0aGlzLmlucHV0RWxlbWVudC5tYXhMZW5ndGg7XHJcblxyXG4gICAgaWYgKG1heExlbmd0aCA+IDApIHtcclxuICAgICAgLy8gdGhlIGlucHV0IGVsZW1lbnQgaGFzIG1heExlbmd0aCBsaW1pdFxyXG4gICAgICBjb25zdCBhbGxvd2VkTGVuZ3RoID0gbWF4TGVuZ3RoIC0gdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUubGVuZ3RoO1xyXG4gICAgICByZXN1bHQgPSBhbGxvd2VkTGVuZ3RoID4gMCA/IHJlc3VsdC5zdWJzdHJpbmcoMCwgYWxsb3dlZExlbmd0aCkgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1ZhbGlkRGVjaW1hbChpbnB1dFN0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gaW5wdXRTdHJpbmcuc3BsaXQodGhpcy5kZWNpbWFsU2VwYXJhdG9yIGFzIHN0cmluZykubGVuZ3RoIDw9IDI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|