ecabs-components 1.0.28 → 1.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/esm2022/ecabs-components.mjs +4 -4
  2. package/esm2022/lib/base/consts/date-mask.consts.mjs +56 -56
  3. package/esm2022/lib/base/directives/date-mask.directive.mjs +64 -64
  4. package/esm2022/lib/base/directives/date-mask.directive.module.mjs +21 -21
  5. package/esm2022/lib/base/directives/digits-only.directive.mjs +129 -129
  6. package/esm2022/lib/base/directives/digits-only.directive.module.mjs +21 -21
  7. package/esm2022/lib/base/directives/number-border.directive.mjs +53 -53
  8. package/esm2022/lib/base/directives/number-border.directive.module.mjs +21 -21
  9. package/esm2022/lib/base/directives/tooltip-if-truncated.directive.mjs +29 -0
  10. package/esm2022/lib/base/directives/tooltip-if-truncated.directive.module.mjs +22 -0
  11. package/esm2022/lib/base/element-base.mjs +99 -99
  12. package/esm2022/lib/base/element-wrapper/element-wrapper.component.mjs +52 -52
  13. package/esm2022/lib/base/element-wrapper/element-wrapper.module.mjs +51 -51
  14. package/esm2022/lib/base/hint/hint.component.mjs +20 -20
  15. package/esm2022/lib/base/hint/hint.module.mjs +19 -19
  16. package/esm2022/lib/base/validation/validation.component.mjs +69 -69
  17. package/esm2022/lib/base/validation/validation.module.mjs +19 -19
  18. package/esm2022/lib/ecabs-active-status-filter/ecabs-active-status-filter.component.mjs +30 -30
  19. package/esm2022/lib/ecabs-active-status-filter/ecabs-active-status-filter.module.mjs +19 -19
  20. package/esm2022/lib/ecabs-breadcrumb/ecabs-breadcrumb.component.mjs +15 -15
  21. package/esm2022/lib/ecabs-breadcrumb/ecabs-breadcrumb.module.mjs +19 -19
  22. package/esm2022/lib/ecabs-buttons/ecabs-buttons.component.mjs +62 -62
  23. package/esm2022/lib/ecabs-buttons/ecabs-buttons.module.mjs +20 -20
  24. package/esm2022/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.mjs +100 -100
  25. package/esm2022/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.module.mjs +35 -35
  26. package/esm2022/lib/ecabs-date-picker/components/ecabs-date-picker-header/ecabs-date-picker-header.component.mjs +16 -16
  27. package/esm2022/lib/ecabs-date-picker/ecabs-date-picker.component.mjs +84 -84
  28. package/esm2022/lib/ecabs-date-picker/ecabs-date-picker.module.mjs +47 -47
  29. package/esm2022/lib/ecabs-date-time-picker/components/ecabs-date-time-picker-header/ecabs-date-time-picker-header.component.mjs +16 -16
  30. package/esm2022/lib/ecabs-date-time-picker/ecabs-date-time-picker.component.mjs +178 -178
  31. package/esm2022/lib/ecabs-date-time-picker/ecabs-date-time-picker.module.mjs +63 -63
  32. 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
  33. package/esm2022/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.component.mjs +192 -192
  34. package/esm2022/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.module.mjs +64 -64
  35. package/esm2022/lib/ecabs-date-time-range-picker/time-range.directive.mjs +44 -44
  36. package/esm2022/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.component.mjs +46 -46
  37. package/esm2022/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.module.mjs +19 -19
  38. package/esm2022/lib/ecabs-dialog-message/ecabs-dialog-message.component.mjs +43 -43
  39. package/esm2022/lib/ecabs-dialog-message/ecabs-dialog-message.module.mjs +19 -19
  40. package/esm2022/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.component.mjs +18 -18
  41. package/esm2022/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.module.mjs +18 -18
  42. package/esm2022/lib/ecabs-expansion-panel/ecabs-expansion-panel.component.mjs +75 -75
  43. package/esm2022/lib/ecabs-expansion-panel/ecabs-expansion-panel.module.mjs +23 -23
  44. package/esm2022/lib/ecabs-increment/ecabs-increment.component.mjs +77 -77
  45. package/esm2022/lib/ecabs-increment/ecabs-increment.module.mjs +22 -22
  46. package/esm2022/lib/ecabs-input/ecabs-input.component.mjs +82 -82
  47. package/esm2022/lib/ecabs-input/ecabs-input.module.mjs +21 -21
  48. package/esm2022/lib/ecabs-language-selector/ecabs-language-selector.component.mjs +61 -61
  49. package/esm2022/lib/ecabs-language-selector/ecabs-language-selector.module.mjs +38 -38
  50. package/esm2022/lib/ecabs-loading/ecabs-loading.component.mjs +23 -23
  51. package/esm2022/lib/ecabs-loading/ecabs-loading.module.mjs +18 -18
  52. package/esm2022/lib/ecabs-loading/spinner/spinner.component.mjs +15 -15
  53. package/esm2022/lib/ecabs-note/ecabs-note.component.mjs +29 -29
  54. package/esm2022/lib/ecabs-note/ecabs-note.module.mjs +18 -18
  55. package/esm2022/lib/ecabs-phone/ecabs-phone.component.mjs +103 -103
  56. package/esm2022/lib/ecabs-phone/ecabs-phone.module.mjs +21 -21
  57. package/esm2022/lib/ecabs-picker-header/ecabs-picker-header.component.mjs +49 -49
  58. package/esm2022/lib/ecabs-picker-header/ecabs-picker-header.module.mjs +21 -21
  59. package/esm2022/lib/ecabs-radio-button-list/ecabs-radio-button-list.component.mjs +64 -64
  60. package/esm2022/lib/ecabs-radio-button-list/ecabs-radio-button-list.module.mjs +31 -31
  61. package/esm2022/lib/ecabs-select/ecabs-select.component.mjs +322 -310
  62. package/esm2022/lib/ecabs-select/ecabs-select.module.mjs +68 -60
  63. package/esm2022/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.component.mjs +16 -16
  64. package/esm2022/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.module.mjs +23 -23
  65. package/esm2022/lib/ecabs-table/ecabs-table.component.mjs +42 -42
  66. package/esm2022/lib/ecabs-table/ecabs-table.module.mjs +32 -32
  67. package/esm2022/lib/ecabs-textarea/ecabs-textarea.component.mjs +61 -61
  68. package/esm2022/lib/ecabs-textarea/ecabs-textarea.module.mjs +19 -19
  69. package/esm2022/lib/ecabs-timepicker/componets/ecabs-time-list-panel/ecabs-time-list-panel.component.mjs +136 -136
  70. package/esm2022/lib/ecabs-timepicker/config.model.mjs +1 -1
  71. package/esm2022/lib/ecabs-timepicker/ecabs-timepicker.component.mjs +311 -311
  72. package/esm2022/lib/ecabs-timepicker/ecabs-timepicker.module.mjs +19 -19
  73. package/esm2022/lib/ecabs-timepicker/ecabs-timepicker.service.mjs +30 -30
  74. package/esm2022/lib/ecabs-validation/ecabs-validation.component.mjs +18 -18
  75. package/esm2022/lib/ecabs-validation/ecabs-validation.module.mjs +18 -18
  76. package/esm2022/lib/models/bread-crumb.mjs +1 -1
  77. package/esm2022/lib/models/timepicker.models.mjs +1 -1
  78. package/esm2022/lib/models/validation.models.mjs +1 -1
  79. package/esm2022/lib/services/ecabs-components.service.mjs +31 -31
  80. package/esm2022/public-api.mjs +61 -59
  81. package/fesm2022/ecabs-components.mjs +3318 -3256
  82. package/fesm2022/ecabs-components.mjs.map +1 -1
  83. package/index.d.ts +5 -5
  84. package/lib/base/consts/date-mask.consts.d.ts +7 -7
  85. package/lib/base/directives/date-mask.directive.d.ts +16 -16
  86. package/lib/base/directives/date-mask.directive.module.d.ts +8 -8
  87. package/lib/base/directives/digits-only.directive.d.ts +26 -26
  88. package/lib/base/directives/digits-only.directive.module.d.ts +8 -8
  89. package/lib/base/directives/number-border.directive.d.ts +13 -13
  90. package/lib/base/directives/number-border.directive.module.d.ts +8 -8
  91. package/lib/base/directives/tooltip-if-truncated.directive.d.ts +12 -0
  92. package/lib/base/directives/tooltip-if-truncated.directive.module.d.ts +8 -0
  93. package/lib/base/element-base.d.ts +28 -28
  94. package/lib/base/element-wrapper/element-wrapper.component.d.ts +19 -19
  95. package/lib/base/element-wrapper/element-wrapper.module.d.ts +16 -16
  96. package/lib/base/hint/hint.component.d.ts +8 -8
  97. package/lib/base/hint/hint.module.d.ts +10 -10
  98. package/lib/base/validation/validation.component.d.ts +24 -24
  99. package/lib/base/validation/validation.module.d.ts +10 -10
  100. package/lib/ecabs-active-status-filter/ecabs-active-status-filter.component.d.ts +14 -14
  101. package/lib/ecabs-active-status-filter/ecabs-active-status-filter.module.d.ts +10 -10
  102. package/lib/ecabs-breadcrumb/ecabs-breadcrumb.component.d.ts +7 -7
  103. package/lib/ecabs-breadcrumb/ecabs-breadcrumb.module.d.ts +10 -10
  104. package/lib/ecabs-buttons/ecabs-buttons.component.d.ts +20 -20
  105. package/lib/ecabs-buttons/ecabs-buttons.module.d.ts +11 -11
  106. package/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.d.ts +31 -31
  107. package/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.module.d.ts +12 -12
  108. package/lib/ecabs-date-picker/components/ecabs-date-picker-header/ecabs-date-picker-header.component.d.ts +6 -6
  109. package/lib/ecabs-date-picker/ecabs-date-picker.component.d.ts +29 -29
  110. package/lib/ecabs-date-picker/ecabs-date-picker.module.d.ts +15 -15
  111. package/lib/ecabs-date-time-picker/components/ecabs-date-time-picker-header/ecabs-date-time-picker-header.component.d.ts +6 -6
  112. package/lib/ecabs-date-time-picker/ecabs-date-time-picker.component.d.ts +51 -51
  113. package/lib/ecabs-date-time-picker/ecabs-date-time-picker.module.d.ts +19 -19
  114. 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
  115. package/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.component.d.ts +58 -58
  116. package/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.module.d.ts +20 -20
  117. package/lib/ecabs-date-time-range-picker/time-range.directive.d.ts +15 -15
  118. package/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.component.d.ts +31 -31
  119. package/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.module.d.ts +11 -11
  120. package/lib/ecabs-dialog-message/ecabs-dialog-message.component.d.ts +28 -28
  121. package/lib/ecabs-dialog-message/ecabs-dialog-message.module.d.ts +11 -11
  122. package/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.component.d.ts +12 -12
  123. package/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.module.d.ts +9 -9
  124. package/lib/ecabs-expansion-panel/ecabs-expansion-panel.component.d.ts +28 -28
  125. package/lib/ecabs-expansion-panel/ecabs-expansion-panel.module.d.ts +14 -14
  126. package/lib/ecabs-increment/ecabs-increment.component.d.ts +26 -26
  127. package/lib/ecabs-increment/ecabs-increment.module.d.ts +13 -13
  128. package/lib/ecabs-input/ecabs-input.component.d.ts +27 -27
  129. package/lib/ecabs-input/ecabs-input.module.d.ts +12 -12
  130. package/lib/ecabs-language-selector/ecabs-language-selector.component.d.ts +20 -20
  131. package/lib/ecabs-language-selector/ecabs-language-selector.module.d.ts +12 -12
  132. package/lib/ecabs-loading/ecabs-loading.component.d.ts +8 -8
  133. package/lib/ecabs-loading/ecabs-loading.module.d.ts +9 -9
  134. package/lib/ecabs-loading/spinner/spinner.component.d.ts +6 -6
  135. package/lib/ecabs-note/ecabs-note.component.d.ts +7 -7
  136. package/lib/ecabs-note/ecabs-note.module.d.ts +9 -9
  137. package/lib/ecabs-phone/ecabs-phone.component.d.ts +33 -33
  138. package/lib/ecabs-phone/ecabs-phone.module.d.ts +12 -12
  139. package/lib/ecabs-picker-header/ecabs-picker-header.component.d.ts +19 -19
  140. package/lib/ecabs-picker-header/ecabs-picker-header.module.d.ts +12 -12
  141. package/lib/ecabs-radio-button-list/ecabs-radio-button-list.component.d.ts +24 -24
  142. package/lib/ecabs-radio-button-list/ecabs-radio-button-list.module.d.ts +11 -11
  143. package/lib/ecabs-select/ecabs-select.component.d.ts +72 -71
  144. package/lib/ecabs-select/ecabs-select.module.d.ts +17 -15
  145. package/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.component.d.ts +8 -8
  146. package/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.module.d.ts +9 -9
  147. package/lib/ecabs-table/ecabs-table.component.d.ts +18 -18
  148. package/lib/ecabs-table/ecabs-table.module.d.ts +12 -12
  149. package/lib/ecabs-textarea/ecabs-textarea.component.d.ts +20 -20
  150. package/lib/ecabs-textarea/ecabs-textarea.module.d.ts +10 -10
  151. package/lib/ecabs-timepicker/componets/ecabs-time-list-panel/ecabs-time-list-panel.component.d.ts +40 -40
  152. package/lib/ecabs-timepicker/config.model.d.ts +5 -5
  153. package/lib/ecabs-timepicker/ecabs-timepicker.component.d.ts +53 -53
  154. package/lib/ecabs-timepicker/ecabs-timepicker.module.d.ts +10 -10
  155. package/lib/ecabs-timepicker/ecabs-timepicker.service.d.ts +12 -12
  156. package/lib/ecabs-validation/ecabs-validation.component.d.ts +10 -10
  157. package/lib/ecabs-validation/ecabs-validation.module.d.ts +9 -9
  158. package/lib/models/bread-crumb.d.ts +5 -5
  159. package/lib/models/timepicker.models.d.ts +6 -6
  160. package/lib/models/validation.models.d.ts +7 -7
  161. package/lib/services/ecabs-components.service.d.ts +16 -16
  162. package/package.json +1 -1
  163. package/public-api.d.ts +60 -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==