ecabs-components 0.0.47 → 0.0.49

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 (161) hide show
  1. package/esm2020/lib/base/directives/date-mask.directive.mjs +65 -0
  2. package/{esm2022 → esm2020}/lib/base/directives/date-mask.directive.module.mjs +5 -5
  3. package/esm2020/lib/base/directives/digits-only.directive.mjs +130 -0
  4. package/{esm2022 → esm2020}/lib/base/directives/digits-only.directive.module.mjs +5 -5
  5. package/esm2020/lib/base/directives/number-border.directive.mjs +54 -0
  6. package/{esm2022 → esm2020}/lib/base/directives/number-border.directive.module.mjs +5 -5
  7. package/esm2020/lib/base/element-base.mjs +100 -0
  8. package/esm2020/lib/base/element-wrapper/element-wrapper.component.mjs +53 -0
  9. package/{esm2022 → esm2020}/lib/base/element-wrapper/element-wrapper.module.mjs +21 -21
  10. package/esm2020/lib/base/hint/hint.component.mjs +21 -0
  11. package/{esm2022 → esm2020}/lib/base/hint/hint.module.mjs +5 -5
  12. package/esm2020/lib/base/validation/validation.component.mjs +70 -0
  13. package/{esm2022 → esm2020}/lib/base/validation/validation.module.mjs +5 -5
  14. package/esm2020/lib/ecabs-active-status-filter/active-status-filter.component.mjs +30 -0
  15. package/esm2020/lib/ecabs-active-status-filter/active-status-filter.module.mjs +20 -0
  16. package/esm2020/lib/ecabs-breadcrumb/ecabs-breadcrumb.component.mjs +16 -0
  17. package/{esm2022 → esm2020}/lib/ecabs-breadcrumb/ecabs-breadcrumb.module.mjs +5 -5
  18. package/esm2020/lib/ecabs-buttons/ecabs-buttons.component.mjs +65 -0
  19. package/{esm2022 → esm2020}/lib/ecabs-buttons/ecabs-buttons.module.mjs +5 -5
  20. package/esm2020/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.mjs +85 -0
  21. package/{esm2022 → esm2020}/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.module.mjs +13 -13
  22. package/esm2020/lib/ecabs-date-picker/components/ecabs-date-picker-header/ecabs-date-picker-header.component.mjs +17 -0
  23. package/esm2020/lib/ecabs-date-picker/ecabs-date-picker.component.mjs +85 -0
  24. package/{esm2022 → esm2020}/lib/ecabs-date-picker/ecabs-date-picker.module.mjs +19 -19
  25. package/esm2020/lib/ecabs-date-time-picker/components/ecabs-date-time-picker-header/ecabs-date-time-picker-header.component.mjs +17 -0
  26. package/esm2020/lib/ecabs-date-time-picker/ecabs-date-time-picker.component.mjs +179 -0
  27. package/{esm2022 → esm2020}/lib/ecabs-date-time-picker/ecabs-date-time-picker.module.mjs +27 -27
  28. package/esm2020/lib/ecabs-date-time-range-picker/components/ecabs-date-time-range-picker-header/ecabs-date-time-range-picker-header.component.mjs +17 -0
  29. package/esm2020/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.component.mjs +193 -0
  30. package/{esm2022 → esm2020}/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.module.mjs +27 -27
  31. package/esm2020/lib/ecabs-date-time-range-picker/time-range.directive.mjs +45 -0
  32. package/esm2020/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.component.mjs +28 -0
  33. package/{esm2022 → esm2020}/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.module.mjs +5 -5
  34. package/esm2020/lib/ecabs-dialog-message/ecabs-dialog-message.component.mjs +25 -0
  35. package/{esm2022 → esm2020}/lib/ecabs-dialog-message/ecabs-dialog-message.module.mjs +5 -5
  36. package/{esm2022 → esm2020}/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.component.mjs +4 -7
  37. package/{esm2022 → esm2020}/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.module.mjs +5 -5
  38. package/esm2020/lib/ecabs-expansion-panel/ecabs-expansion-panel.component.mjs +76 -0
  39. package/{esm2022 → esm2020}/lib/ecabs-expansion-panel/ecabs-expansion-panel.module.mjs +5 -5
  40. package/esm2020/lib/ecabs-increment/ecabs-increment.component.mjs +78 -0
  41. package/{esm2022 → esm2020}/lib/ecabs-increment/ecabs-increment.module.mjs +5 -5
  42. package/esm2020/lib/ecabs-input/ecabs-input.component.mjs +85 -0
  43. package/{esm2022 → esm2020}/lib/ecabs-input/ecabs-input.module.mjs +5 -5
  44. package/esm2020/lib/ecabs-language-selector/ecabs-language-selector.component.mjs +51 -0
  45. package/{esm2022 → esm2020}/lib/ecabs-language-selector/ecabs-language-selector.module.mjs +13 -13
  46. package/esm2020/lib/ecabs-loading/ecabs-loading.component.mjs +24 -0
  47. package/{esm2022 → esm2020}/lib/ecabs-loading/ecabs-loading.module.mjs +5 -5
  48. package/esm2020/lib/ecabs-loading/spinner/spinner.component.mjs +16 -0
  49. package/esm2020/lib/ecabs-note/ecabs-note.component.mjs +30 -0
  50. package/{esm2022 → esm2020}/lib/ecabs-note/ecabs-note.module.mjs +5 -5
  51. package/esm2020/lib/ecabs-phone/ecabs-phone.component.mjs +105 -0
  52. package/{esm2022 → esm2020}/lib/ecabs-phone/ecabs-phone.module.mjs +5 -5
  53. package/esm2020/lib/ecabs-picker-header/ecabs-picker-header.component.mjs +50 -0
  54. package/{esm2022 → esm2020}/lib/ecabs-picker-header/ecabs-picker-header.module.mjs +5 -5
  55. package/esm2020/lib/ecabs-radio-button-list/ecabs-radio-button-list.component.mjs +65 -0
  56. package/{esm2022 → esm2020}/lib/ecabs-radio-button-list/ecabs-radio-button-list.module.mjs +11 -11
  57. package/esm2020/lib/ecabs-select/ecabs-select.component.mjs +222 -0
  58. package/esm2020/lib/ecabs-select/ecabs-select.module.mjs +60 -0
  59. package/esm2020/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.component.mjs +17 -0
  60. package/{esm2022 → esm2020}/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.module.mjs +7 -7
  61. package/esm2020/lib/ecabs-table/ecabs-table.component.mjs +43 -0
  62. package/{esm2022 → esm2020}/lib/ecabs-table/ecabs-table.module.mjs +11 -11
  63. package/esm2020/lib/ecabs-textarea/ecabs-textarea.component.mjs +62 -0
  64. package/{esm2022 → esm2020}/lib/ecabs-textarea/ecabs-textarea.module.mjs +5 -5
  65. package/esm2020/lib/ecabs-timepicker/componets/ecabs-time-list-panel/ecabs-time-list-panel.component.mjs +137 -0
  66. package/esm2020/lib/ecabs-timepicker/ecabs-timepicker.component.mjs +312 -0
  67. package/{esm2022 → esm2020}/lib/ecabs-timepicker/ecabs-timepicker.module.mjs +5 -5
  68. package/esm2020/lib/ecabs-timepicker/ecabs-timepicker.service.mjs +31 -0
  69. package/esm2020/lib/services/ecabs-components.service.mjs +32 -0
  70. package/esm2020/public-api.mjs +57 -0
  71. package/fesm2015/ecabs-components.mjs +3283 -0
  72. package/fesm2015/ecabs-components.mjs.map +1 -0
  73. package/fesm2020/ecabs-components.mjs +3267 -0
  74. package/fesm2020/ecabs-components.mjs.map +1 -0
  75. package/lib/base/directives/date-mask.directive.d.ts +1 -1
  76. package/lib/base/directives/digits-only.directive.d.ts +1 -1
  77. package/lib/base/directives/number-border.directive.d.ts +1 -1
  78. package/lib/base/element-base.d.ts +1 -1
  79. package/lib/base/element-wrapper/element-wrapper.component.d.ts +1 -1
  80. package/lib/base/hint/hint.component.d.ts +1 -1
  81. package/lib/base/validation/validation.component.d.ts +1 -1
  82. package/lib/ecabs-active-status-filter/active-status-filter.component.d.ts +14 -0
  83. package/lib/ecabs-active-status-filter/active-status-filter.module.d.ts +10 -0
  84. package/lib/ecabs-breadcrumb/ecabs-breadcrumb.component.d.ts +1 -1
  85. package/lib/ecabs-buttons/ecabs-buttons.component.d.ts +1 -1
  86. package/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.d.ts +1 -1
  87. package/lib/ecabs-date-picker/components/ecabs-date-picker-header/ecabs-date-picker-header.component.d.ts +1 -1
  88. package/lib/ecabs-date-picker/ecabs-date-picker.component.d.ts +1 -1
  89. package/lib/ecabs-date-time-picker/components/ecabs-date-time-picker-header/ecabs-date-time-picker-header.component.d.ts +1 -1
  90. package/lib/ecabs-date-time-picker/ecabs-date-time-picker.component.d.ts +1 -1
  91. package/lib/ecabs-date-time-range-picker/components/ecabs-date-time-range-picker-header/ecabs-date-time-range-picker-header.component.d.ts +1 -1
  92. package/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.component.d.ts +1 -1
  93. package/lib/ecabs-date-time-range-picker/time-range.directive.d.ts +1 -1
  94. package/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.component.d.ts +1 -1
  95. package/lib/ecabs-dialog-message/ecabs-dialog-message.component.d.ts +1 -1
  96. package/lib/ecabs-empty-placeholder/ecabs-empty-placeholder.component.d.ts +1 -1
  97. package/lib/ecabs-expansion-panel/ecabs-expansion-panel.component.d.ts +1 -1
  98. package/lib/ecabs-increment/ecabs-increment.component.d.ts +1 -1
  99. package/lib/ecabs-input/ecabs-input.component.d.ts +1 -1
  100. package/lib/ecabs-language-selector/ecabs-language-selector.component.d.ts +1 -1
  101. package/lib/ecabs-loading/ecabs-loading.component.d.ts +1 -1
  102. package/lib/ecabs-loading/spinner/spinner.component.d.ts +1 -1
  103. package/lib/ecabs-note/ecabs-note.component.d.ts +1 -1
  104. package/lib/ecabs-phone/ecabs-phone.component.d.ts +1 -1
  105. package/lib/ecabs-picker-header/ecabs-picker-header.component.d.ts +1 -1
  106. package/lib/ecabs-radio-button-list/ecabs-radio-button-list.component.d.ts +1 -1
  107. package/lib/ecabs-select/ecabs-select.component.d.ts +1 -1
  108. package/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.component.d.ts +1 -1
  109. package/lib/ecabs-table/ecabs-table.component.d.ts +1 -1
  110. package/lib/ecabs-textarea/ecabs-textarea.component.d.ts +1 -1
  111. package/lib/ecabs-timepicker/componets/ecabs-time-list-panel/ecabs-time-list-panel.component.d.ts +1 -1
  112. package/lib/ecabs-timepicker/ecabs-timepicker.component.d.ts +1 -1
  113. package/lib/models/timepicker.models.d.ts +1 -1
  114. package/package.json +11 -5
  115. package/public-api.d.ts +2 -0
  116. package/esm2022/lib/base/directives/date-mask.directive.mjs +0 -67
  117. package/esm2022/lib/base/directives/digits-only.directive.mjs +0 -133
  118. package/esm2022/lib/base/directives/number-border.directive.mjs +0 -58
  119. package/esm2022/lib/base/element-base.mjs +0 -105
  120. package/esm2022/lib/base/element-wrapper/element-wrapper.component.mjs +0 -56
  121. package/esm2022/lib/base/hint/hint.component.mjs +0 -21
  122. package/esm2022/lib/base/validation/validation.component.mjs +0 -75
  123. package/esm2022/lib/ecabs-breadcrumb/ecabs-breadcrumb.component.mjs +0 -17
  124. package/esm2022/lib/ecabs-buttons/ecabs-buttons.component.mjs +0 -67
  125. package/esm2022/lib/ecabs-checkbox-toggle/ecabs-checkbox-toggle.component.mjs +0 -90
  126. package/esm2022/lib/ecabs-date-picker/components/ecabs-date-picker-header/ecabs-date-picker-header.component.mjs +0 -15
  127. package/esm2022/lib/ecabs-date-picker/ecabs-date-picker.component.mjs +0 -89
  128. package/esm2022/lib/ecabs-date-time-picker/components/ecabs-date-time-picker-header/ecabs-date-time-picker-header.component.mjs +0 -15
  129. package/esm2022/lib/ecabs-date-time-picker/ecabs-date-time-picker.component.mjs +0 -186
  130. package/esm2022/lib/ecabs-date-time-range-picker/components/ecabs-date-time-range-picker-header/ecabs-date-time-range-picker-header.component.mjs +0 -15
  131. package/esm2022/lib/ecabs-date-time-range-picker/ecabs-date-time-range-picker.component.mjs +0 -199
  132. package/esm2022/lib/ecabs-date-time-range-picker/time-range.directive.mjs +0 -48
  133. package/esm2022/lib/ecabs-dialog-confirm/ecabs-dialog-confirm.component.mjs +0 -31
  134. package/esm2022/lib/ecabs-dialog-message/ecabs-dialog-message.component.mjs +0 -28
  135. package/esm2022/lib/ecabs-expansion-panel/ecabs-expansion-panel.component.mjs +0 -85
  136. package/esm2022/lib/ecabs-increment/ecabs-increment.component.mjs +0 -83
  137. package/esm2022/lib/ecabs-input/ecabs-input.component.mjs +0 -93
  138. package/esm2022/lib/ecabs-language-selector/ecabs-language-selector.component.mjs +0 -51
  139. package/esm2022/lib/ecabs-loading/ecabs-loading.component.mjs +0 -22
  140. package/esm2022/lib/ecabs-loading/spinner/spinner.component.mjs +0 -14
  141. package/esm2022/lib/ecabs-note/ecabs-note.component.mjs +0 -28
  142. package/esm2022/lib/ecabs-phone/ecabs-phone.component.mjs +0 -111
  143. package/esm2022/lib/ecabs-picker-header/ecabs-picker-header.component.mjs +0 -53
  144. package/esm2022/lib/ecabs-radio-button-list/ecabs-radio-button-list.component.mjs +0 -68
  145. package/esm2022/lib/ecabs-select/ecabs-select.component.mjs +0 -227
  146. package/esm2022/lib/ecabs-select/ecabs-select.module.mjs +0 -60
  147. package/esm2022/lib/ecabs-table/ecabs-table-filter-wrapper/ecabs-table-filter-wrapper.component.mjs +0 -19
  148. package/esm2022/lib/ecabs-table/ecabs-table.component.mjs +0 -48
  149. package/esm2022/lib/ecabs-textarea/ecabs-textarea.component.mjs +0 -65
  150. package/esm2022/lib/ecabs-timepicker/componets/ecabs-time-list-panel/ecabs-time-list-panel.component.mjs +0 -144
  151. package/esm2022/lib/ecabs-timepicker/ecabs-timepicker.component.mjs +0 -322
  152. package/esm2022/lib/ecabs-timepicker/ecabs-timepicker.service.mjs +0 -29
  153. package/esm2022/lib/services/ecabs-components.service.mjs +0 -31
  154. package/esm2022/public-api.mjs +0 -55
  155. package/fesm2022/ecabs-components.mjs +0 -3338
  156. package/fesm2022/ecabs-components.mjs.map +0 -1
  157. /package/{esm2022 → esm2020}/ecabs-components.mjs +0 -0
  158. /package/{esm2022 → esm2020}/lib/base/consts/date-mask.consts.mjs +0 -0
  159. /package/{esm2022 → esm2020}/lib/ecabs-timepicker/config.model.mjs +0 -0
  160. /package/{esm2022 → esm2020}/lib/models/bread-crumb.mjs +0 -0
  161. /package/{esm2022 → esm2020}/lib/models/timepicker.models.mjs +0 -0
@@ -1,144 +0,0 @@
1
- import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../ecabs-timepicker.service";
4
- import * as i2 from "@angular/common";
5
- export class EcabsTimeListPanelComponent {
6
- elementRef;
7
- timepickerService;
8
- typedValue;
9
- listPlacement = 'auto';
10
- listPosition = {};
11
- appendTo;
12
- min;
13
- max;
14
- showDayStart = true;
15
- showDayEnd = false;
16
- position = {};
17
- onscroll = new EventEmitter();
18
- closeMe = new EventEmitter();
19
- hoveredItemIndex = 0;
20
- timeList = [];
21
- listItemHeight;
22
- constructor(elementRef, timepickerService) {
23
- this.elementRef = elementRef;
24
- this.timepickerService = timepickerService;
25
- }
26
- handleKeydown($event) {
27
- if ($event.key === 'ArrowUp') {
28
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
29
- this.hoveredItemIndex ? this.hoveredItemIndex-- : null;
30
- this.scrollTo(this.hoveredItemIndex);
31
- }
32
- if ($event.key === 'ArrowDown') {
33
- // eslint-disable-next-line @typescript-eslint/no-unused-expressions
34
- this.hoveredItemIndex + 1 < this.timeList.length ? this.hoveredItemIndex++ : null;
35
- this.scrollTo(this.hoveredItemIndex);
36
- }
37
- if ($event.key === 'Enter') {
38
- this.setTime(this.timeList[this.hoveredItemIndex].value);
39
- }
40
- }
41
- ngOnInit() {
42
- this.calcListItems();
43
- if (this.appendTo) {
44
- this.appendListTo();
45
- }
46
- setTimeout(() => {
47
- this.listItemHeight = this.elementRef.nativeElement.querySelector('li').getBoundingClientRect().height;
48
- this.selectTypedValue(this.typedValue);
49
- });
50
- }
51
- appendListTo() {
52
- const parent = document.querySelector(this.appendTo);
53
- if (!parent) {
54
- throw new Error(`appendTo selector ${this.appendTo} did not found any parent element`);
55
- }
56
- parent.appendChild(this.elementRef.nativeElement);
57
- }
58
- calcListItems() {
59
- if (this.showDayStart) {
60
- this.timeList.push({
61
- value: '00:00',
62
- title: this.timepickerService.getConfig().dayStart,
63
- });
64
- }
65
- for (let index = 0; index < 24; index++) {
66
- for (const minute of ['00', '30']) {
67
- if (index === 0 && minute === '00') {
68
- continue;
69
- }
70
- this.timeList.push({
71
- value: (index > 9 ? index + '' : '0' + index) + ':' + minute,
72
- title: (index > 9 ? index + '' : '0' + index) + ':' + minute,
73
- });
74
- }
75
- }
76
- if (this.showDayEnd) {
77
- this.timeList.push({
78
- value: '23:59',
79
- title: this.timepickerService.getConfig().dayEnd,
80
- });
81
- }
82
- }
83
- ngOnChanges() {
84
- this.selectTypedValue(this.typedValue);
85
- if (this.elementRef.nativeElement) {
86
- this.elementRef.nativeElement.style.top = this.listPosition.top + 'px';
87
- this.elementRef.nativeElement.style.left = this.listPosition.left + 'px';
88
- this.elementRef.nativeElement.style.width = this.listPosition.width + 'px';
89
- if (this.appendTo) {
90
- this.elementRef.nativeElement.style.position = 'fixed';
91
- }
92
- }
93
- }
94
- selectTypedValue(value) {
95
- if (value) {
96
- const hour = parseInt(value.split(':')[0], 10);
97
- if (hour || hour === 0) {
98
- this.hoveredItemIndex = hour * 2;
99
- this.scrollTo(this.hoveredItemIndex);
100
- }
101
- }
102
- }
103
- scrollTo(index) {
104
- this.elementRef.nativeElement.querySelector('.inner-scroll').scrollTop = index * this.listItemHeight;
105
- }
106
- close() {
107
- this.closeMe.emit(null);
108
- }
109
- setTime(value) {
110
- this.closeMe.emit(value);
111
- }
112
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EcabsTimeListPanelComponent, deps: [{ token: i0.ElementRef }, { token: i1.FormTimePickerService }], target: i0.ɵɵFactoryTarget.Component });
113
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: EcabsTimeListPanelComponent, selector: "ecabs-time-list-panel", inputs: { typedValue: "typedValue", listPlacement: "listPlacement", listPosition: "listPosition", appendTo: "appendTo", min: "min", max: "max", showDayStart: "showDayStart", showDayEnd: "showDayEnd", position: "position" }, outputs: { onscroll: "onscroll", closeMe: "closeMe" }, host: { listeners: { "document:keydown": "handleKeydown($event)" } }, usesOnChanges: true, ngImport: i0, template: "<div class=\"list\">\r\n <div class=\"inner-scroll\">\r\n <div class=\"inner\">\r\n <ul>\r\n <li\r\n *ngFor=\"let i of timeList; let counter = index\"\r\n (click)=\"setTime(i.value)\"\r\n (mouseenter)=\"hoveredItemIndex = counter\"\r\n [ngClass]=\"{ active: typedValue === i.value, hovered: counter === hoveredItemIndex }\"\r\n >\r\n {{ i.title }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
114
- }
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EcabsTimeListPanelComponent, decorators: [{
116
- type: Component,
117
- args: [{ selector: 'ecabs-time-list-panel', template: "<div class=\"list\">\r\n <div class=\"inner-scroll\">\r\n <div class=\"inner\">\r\n <ul>\r\n <li\r\n *ngFor=\"let i of timeList; let counter = index\"\r\n (click)=\"setTime(i.value)\"\r\n (mouseenter)=\"hoveredItemIndex = counter\"\r\n [ngClass]=\"{ active: typedValue === i.value, hovered: counter === hoveredItemIndex }\"\r\n >\r\n {{ i.title }}\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
118
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FormTimePickerService }]; }, propDecorators: { typedValue: [{
119
- type: Input
120
- }], listPlacement: [{
121
- type: Input
122
- }], listPosition: [{
123
- type: Input
124
- }], appendTo: [{
125
- type: Input
126
- }], min: [{
127
- type: Input
128
- }], max: [{
129
- type: Input
130
- }], showDayStart: [{
131
- type: Input
132
- }], showDayEnd: [{
133
- type: Input
134
- }], position: [{
135
- type: Input
136
- }], onscroll: [{
137
- type: Output
138
- }], closeMe: [{
139
- type: Output
140
- }], handleKeydown: [{
141
- type: HostListener,
142
- args: ['document:keydown', ['$event']]
143
- }] } });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtdGltZS1saXN0LXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy10aW1lcGlja2VyL2NvbXBvbmV0cy9lY2Ficy10aW1lLWxpc3QtcGFuZWwvZWNhYnMtdGltZS1saXN0LXBhbmVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy10aW1lcGlja2VyL2NvbXBvbmV0cy9lY2Ficy10aW1lLWxpc3QtcGFuZWwvZWNhYnMtdGltZS1saXN0LXBhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUF5QixNQUFNLGVBQWUsQ0FBQzs7OztBQU9wSCxNQUFNLE9BQU8sMkJBQTJCO0lBb0JqQjtJQUFnQztJQW5CNUMsVUFBVSxDQUFNO0lBQ2hCLGFBQWEsR0FBa0IsTUFBTSxDQUFDO0lBQ3RDLFlBQVksR0FBaUIsRUFBRSxDQUFDO0lBRWhDLFFBQVEsQ0FBVTtJQUNsQixHQUFHLENBQVU7SUFDYixHQUFHLENBQVU7SUFDYixZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDbkIsUUFBUSxHQUFpQixFQUFFLENBQUM7SUFFM0IsUUFBUSxHQUFHLElBQUksWUFBWSxFQUFrQyxDQUFDO0lBQzlELE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO0lBRTVDLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUNyQixRQUFRLEdBQW9DLEVBQUUsQ0FBQztJQUV2QyxjQUFjLENBQU87SUFFN0IsWUFBcUIsVUFBc0IsRUFBVSxpQkFBd0M7UUFBeEUsZUFBVSxHQUFWLFVB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bkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTGlzdFBsYWNlbWVudCwgTGlzdFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3RpbWVwaWNrZXIubW9kZWxzJztcclxuaW1wb3J0IHsgRm9ybVRpbWVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZWNhYnMtdGltZXBpY2tlci5zZXJ2aWNlJztcclxuQENvbXBvbmVudCgge1xyXG4gIHNlbGVjdG9yOiAnZWNhYnMtdGltZS1saXN0LXBhbmVsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWNhYnMtdGltZS1saXN0LXBhbmVsLmNvbXBvbmVudC5odG1sJyxcclxufSApXHJcbmV4cG9ydCBjbGFzcyBFY2Fic1RpbWVMaXN0UGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgdHlwZWRWYWx1ZTogYW55O1xyXG4gIEBJbnB1dCgpIGxpc3RQbGFjZW1lbnQ6IExpc3RQbGFjZW1lbnQgPSAnYXV0byc7XHJcbiAgQElucHV0KCkgbGlzdFBvc2l0aW9uOiBMaXN0UG9zaXRpb24gPSB7fTtcclxuXHJcbiAgQElucHV0KCkgYXBwZW5kVG8hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWluITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1heCE6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93RGF5U3RhcnQgPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dEYXlFbmQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBwb3NpdGlvbjogTGlzdFBvc2l0aW9uID0ge307XHJcblxyXG4gIEBPdXRwdXQoKSBvbnNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGFydDogbnVtYmVyOyBlbmQ6IG51bWJlciB9PigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZU1lID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIGhvdmVyZWRJdGVtSW5kZXggPSAwO1xyXG4gIHRpbWVMaXN0OiB7IHZhbHVlOiBhbnk7IHRpdGxlOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgbGlzdEl0ZW1IZWlnaHQhOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgdGltZXBpY2tlclNlcnZpY2U6IEZvcm1UaW1lUGlja2VyU2VydmljZSApIHsgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCAnZG9jdW1lbnQ6a2V5ZG93bicsIFsgJyRldmVudCcgXSApXHJcbiAgaGFuZGxlS2V5ZG93biggJGV2ZW50OiBLZXlib2FyZEV2ZW50ICk6IHZvaWQge1xyXG4gICAgaWYgKCAkZXZlbnQua2V5ID09PSAnQXJyb3dVcCcgKSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLWV4cHJlc3Npb25zXHJcbiAgICAgIHRoaXMuaG92ZXJlZEl0ZW1JbmRleCA/IHRoaXMuaG92ZXJlZEl0ZW1JbmRleC0tIDogbnVsbDtcclxuICAgICAgdGhpcy5zY3JvbGxUbyggdGhpcy5ob3ZlcmVkSXRlbUluZGV4ICk7XHJcbiAgICB9XHJcbiAgICBpZiAoICRldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nICkge1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC1leHByZXNzaW9uc1xyXG4gICAgICB0aGlzLmhvdmVyZWRJdGVtSW5kZXggKyAxIDwgdGhpcy50aW1lTGlzdC5sZW5ndGggPyB0aGlzLmhvdmVyZWRJdGVtSW5kZXgrKyA6IG51bGw7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG8oIHRoaXMuaG92ZXJlZEl0ZW1JbmRleCApO1xyXG4gICAgfVxyXG4gICAgaWYgKCAkZXZlbnQua2V5ID09PSAnRW50ZXInICkge1xyXG4gICAgICB0aGlzLnNldFRpbWUoIHRoaXMudGltZUxpc3RbIHRoaXMuaG92ZXJlZEl0ZW1JbmRleCBdLnZhbHVlICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FsY0xpc3RJdGVtcygpO1xyXG4gICAgaWYgKCB0aGlzLmFwcGVuZFRvICkge1xyXG4gICAgICB0aGlzLmFwcGVuZExpc3RUbygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRpbWVvdXQoICgpID0+IHtcclxuICAgICAgdGhpcy5saXN0SXRlbUhlaWdodCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoICdsaScgKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgICAgIHRoaXMuc2VsZWN0VHlwZWRWYWx1ZSggdGhpcy50eXBlZFZhbHVlICk7XHJcbiAgICB9ICk7XHJcbiAgfVxyXG5cclxuICBhcHBlbmRMaXN0VG8oKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXJlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCB0aGlzLmFwcGVuZFRvICk7XHJcbiAgICBpZiAoICFwYXJlbnQgKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvciggYGFwcGVuZFRvIHNlbGVjdG9yICR7IHRoaXMuYXBwZW5kVG8gfSBkaWQgbm90IGZvdW5kIGFueSBwYXJlbnQgZWxlbWVudGAgKTtcclxuICAgIH1cclxuICAgIHBhcmVudC5hcHBlbmRDaGlsZCggdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgKTtcclxuICB9XHJcblxyXG4gIGNhbGNMaXN0SXRlbXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIHRoaXMuc2hvd0RheVN0YXJ0ICkge1xyXG4gICAgICB0aGlzLnRpbWVMaXN0LnB1c2goIHtcclxuICAgICAgICB2YWx1ZTogJzAwOjAwJyxcclxuICAgICAgICB0aXRsZTogdGhpcy50aW1lcGlja2VyU2VydmljZS5nZXRDb25maWcoKS5kYXlTdGFydCxcclxuICAgICAgfSApO1xyXG4gICAgfVxyXG4gICAgZm9yICggbGV0IGluZGV4ID0gMDsgaW5kZXggPCAyNDsgaW5kZXgrKyApIHtcclxuICAgICAgZm9yICggY29uc3QgbWludXRlIG9mIFsgJzAwJywgJzMwJyBdICkge1xyXG4gICAgICAgIGlmICggaW5kZXggPT09IDAgJiYgbWludXRlID09PSAnMDAnICkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGltZUxpc3QucHVzaCgge1xyXG4gICAgICAgICAgdmFsdWU6ICggaW5kZXggPiA5ID8gaW5kZXggKyAnJyA6ICcwJyArIGluZGV4ICkgKyAnOicgKyBtaW51dGUsXHJcbiAgICAgICAgICB0aXRsZTogKCBpbmRleCA+IDkgPyBpbmRleCArICcnIDogJzAnICsgaW5kZXggKSArICc6JyArIG1pbnV0ZSxcclxuICAgICAgICB9ICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICggdGhpcy5zaG93RGF5RW5kICkge1xyXG4gICAgICB0aGlzLnRpbWVMaXN0LnB1c2goIHtcclxuICAgICAgICB2YWx1ZTogJzIzOjU5JyxcclxuICAgICAgICB0aXRsZTogdGhpcy50aW1lcGlja2VyU2VydmljZS5nZXRDb25maWcoKS5kYXlFbmQsXHJcbiAgICAgIH0gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RUeXBlZFZhbHVlKCB0aGlzLnR5cGVkVmFsdWUgKTtcclxuICAgIGlmICggdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgKSB7XHJcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCA9IHRoaXMubGlzdFBvc2l0aW9uLnRvcCArICdweCc7XHJcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSB0aGlzLmxpc3RQb3NpdGlvbi5sZWZ0ICsgJ3B4JztcclxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLmxpc3RQb3NpdGlvbi53aWR0aCArICdweCc7XHJcbiAgICAgIGlmICggdGhpcy5hcHBlbmRUbyApIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdFR5cGVkVmFsdWUoIHZhbHVlOiBhbnkgKTogdm9pZCB7XHJcbiAgICBpZiAoIHZhbHVlICkge1xyXG4gICAgICBjb25zdCBob3VyID0gcGFyc2VJbnQoIHZhbHVlLnNwbGl0KCAnOicgKVsgMCBdLCAxMCApO1xyXG4gICAgICBpZiAoIGhvdXIgfHwgaG91ciA9PT0gMCApIHtcclxuICAgICAgICB0aGlzLmhvdmVyZWRJdGVtSW5kZXggPSBob3VyICogMjtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvKCB0aGlzLmhvdmVyZWRJdGVtSW5kZXggKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG8oIGluZGV4OiBudW1iZXIgKTogdm9pZCB7XHJcbiAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCAnLmlubmVyLXNjcm9sbCcgKS5zY3JvbGxUb3AgPSBpbmRleCAqIHRoaXMubGlzdEl0ZW1IZWlnaHQ7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xvc2VNZS5lbWl0KCBudWxsICk7XHJcbiAgfVxyXG5cclxuICBzZXRUaW1lKCB2YWx1ZTogYW55ICk6IHZvaWQge1xyXG4gICAgdGhpcy5jbG9zZU1lLmVtaXQoIHZhbHVlICk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJsaXN0XCI+XHJcbiAgPGRpdiBjbGFzcz1cImlubmVyLXNjcm9sbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImlubmVyXCI+XHJcbiAgICAgIDx1bD5cclxuICAgICAgICA8bGlcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpIG9mIHRpbWVMaXN0OyBsZXQgY291bnRlciA9IGluZGV4XCJcclxuICAgICAgICAgIChjbGljayk9XCJzZXRUaW1lKGkudmFsdWUpXCJcclxuICAgICAgICAgIChtb3VzZWVudGVyKT1cImhvdmVyZWRJdGVtSW5kZXggPSBjb3VudGVyXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiB0eXBlZFZhbHVlID09PSBpLnZhbHVlLCBob3ZlcmVkOiBjb3VudGVyID09PSBob3ZlcmVkSXRlbUluZGV4IH1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGkudGl0bGUgfX1cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -1,322 +0,0 @@
1
- import { Component, Input, HostBinding, HostListener } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR, NgControl } from '@angular/forms';
3
- import ElementBaseComponent from '../base/element-base';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./ecabs-timepicker.service";
6
- import * as i2 from "@angular/common";
7
- import * as i3 from "../base/element-wrapper/element-wrapper.component";
8
- import * as i4 from "./componets/ecabs-time-list-panel/ecabs-time-list-panel.component";
9
- export class EcabsTimepickerComponent extends ElementBaseComponent {
10
- elementRef;
11
- timepickerService;
12
- injector;
13
- showCloseIcon = true;
14
- focusedFlag = false;
15
- listPlacement = 'auto';
16
- appendTo;
17
- min;
18
- max;
19
- showDayStart = true;
20
- showDayEnd = false;
21
- addSecond = true;
22
- position = {};
23
- _data = '';
24
- _timePicker;
25
- _input;
26
- listPosition = {};
27
- caretPositionStart;
28
- caretPositionEnd;
29
- get data() {
30
- return this._data;
31
- }
32
- set data(value) {
33
- this._data = value;
34
- if (this._data.length === 5) {
35
- if (this._data === '23:59') {
36
- this.onChangeFn(this._data + (this.addSecond ? ':59' : ''));
37
- }
38
- else {
39
- this.onChangeFn(this._data + (this.addSecond ? ':00' : ''));
40
- }
41
- }
42
- else if (this._data === '') {
43
- this.onChangeFn(this._data);
44
- }
45
- }
46
- constructor(elementRef, timepickerService, injector) {
47
- super();
48
- this.elementRef = elementRef;
49
- this.timepickerService = timepickerService;
50
- this.injector = injector;
51
- this.placeholder = '00:00';
52
- this._timePicker = this.elementRef.nativeElement;
53
- setTimeout(() => {
54
- this._input = this._timePicker.querySelector('input');
55
- });
56
- if (!this.iconClass) {
57
- this.iconClass = this.timepickerService.getConfig().iconClass;
58
- }
59
- }
60
- handleMousedown($event) {
61
- const target = $event.target;
62
- if (target.closest('.form-time-list') ||
63
- target.closest('.timeInputWrapper') === this._timePicker.querySelector('.timeInputWrapper')) {
64
- this._timePicker.querySelector('.timeInputWrapper').focus();
65
- return;
66
- }
67
- if (this.focusedFlag) {
68
- this.close();
69
- }
70
- }
71
- ngAfterViewInit() {
72
- const ngControl = this.injector.get(NgControl, null);
73
- if (ngControl) {
74
- this.control = ngControl.control;
75
- }
76
- }
77
- clearInput() {
78
- this.data = '';
79
- }
80
- calcListPosition() {
81
- const position = this._timePicker.querySelector('.timeInputFieldWrapper').getBoundingClientRect();
82
- if (this.appendTo) {
83
- this.listPosition = {
84
- left: position.x,
85
- top: position.top + position.height,
86
- width: position.width,
87
- };
88
- }
89
- else {
90
- this.listPosition = {
91
- left: 0,
92
- top: position.height,
93
- width: position.width,
94
- };
95
- }
96
- }
97
- inputKeyDown(event) {
98
- this.caretPositionStart = event.target.selectionStart;
99
- this.caretPositionEnd = event.target.selectionEnd;
100
- const key = event.key;
101
- this.setCaretPosition(this._input);
102
- switch (this.checkSpecialKeys(key, this.caretPositionStart, this.caretPositionEnd)) {
103
- case 'stop':
104
- return false;
105
- case 'tab':
106
- this.close();
107
- return false;
108
- case 'arrow':
109
- return false;
110
- }
111
- if (this.checkUnUsedKeys(key)) {
112
- return false;
113
- }
114
- const newData = this.data.slice(0, this.caretPositionStart) + key + this.data.slice(this.caretPositionStart, this.data.length);
115
- if (this.checkOutOfRangeNumber(newData)) {
116
- this.data = newData;
117
- this.caretPositionStart++;
118
- }
119
- if (this.caretPositionStart === this.data.length &&
120
- (this.data.length === 2 || (this.data.length === 1 && parseInt(this.data) > 2))) {
121
- this.makeHourFull();
122
- this.data += ':';
123
- this.caretPositionStart++;
124
- }
125
- return false;
126
- }
127
- checkSpecialKeys(key, selectionStart, selectionEnd) {
128
- if (selectionStart !== selectionEnd && key !== 'ArrowLeft' && key !== 'ArrowRight') {
129
- if (!(this.data.slice(selectionStart, selectionEnd).includes(':') && selectionEnd !== this.data.length)) {
130
- this.data = this.data.slice(0, selectionStart) + this.data.slice(selectionEnd, this.data.length);
131
- }
132
- }
133
- if (selectionStart === selectionEnd && key === 'Backspace') {
134
- if (this.data.length > 0) {
135
- if (this.data[selectionStart - 1] !== ':' ||
136
- (this.data[selectionStart - 1] === ':' && selectionStart === this.data.length)) {
137
- this.data = this.data.slice(0, selectionStart - 1) + this.data.slice(selectionEnd, this.data.length);
138
- this.caretPositionStart--;
139
- }
140
- }
141
- return 'stop';
142
- }
143
- if (key === 'Tab' || key === ' ' || key === ':') {
144
- if (!this.data.includes(':') && this.data.length > 0) {
145
- this.makeHourFull();
146
- this.data += ':';
147
- this.caretPositionStart++;
148
- return 'stop';
149
- }
150
- if (key === 'Tab') {
151
- return 'tab';
152
- }
153
- return 'stop';
154
- }
155
- if (key === 'ArrowRight') {
156
- if (this.caretPositionStart < this.data.length) {
157
- this.caretPositionStart++;
158
- }
159
- return 'arrow';
160
- }
161
- if (key === 'ArrowLeft') {
162
- if (this.caretPositionStart > 0) {
163
- this.caretPositionStart--;
164
- }
165
- return 'arrow';
166
- }
167
- if (key === 'ArrowDown' && !this.focusedFlag) {
168
- this.show();
169
- }
170
- return 'continue';
171
- }
172
- checkUnUsedKeys(key) {
173
- const r = new RegExp('[0-9]');
174
- return !r.test(key);
175
- }
176
- setCaretPosition(elem) {
177
- setTimeout(() => {
178
- if (elem !== null) {
179
- if (elem.createTextRange) {
180
- const range = elem.createTextRange();
181
- range.move('character', this.caretPositionStart);
182
- range.select();
183
- }
184
- else {
185
- if (elem.selectionStart) {
186
- elem.focus();
187
- elem.setSelectionRange(this.caretPositionStart, this.caretPositionStart);
188
- }
189
- else {
190
- elem.focus();
191
- }
192
- }
193
- }
194
- });
195
- }
196
- checkOutOfRangeNumber(time) {
197
- const hour = parseInt(time.split(':')[0], 10);
198
- let minute = -1;
199
- if (time.split(':').length > 1) {
200
- minute = parseInt(time.split(':')[1], 10);
201
- }
202
- if (hour < 24 && time.split(':')[0].length < 3 && minute < 60) {
203
- if (time.split(':').length > 1 && time.split(':')[1].length > 2) {
204
- return false;
205
- }
206
- return true;
207
- }
208
- return false;
209
- }
210
- makeHourFull() {
211
- const hourPart = this.data.split(':')[0];
212
- const minutePart = this.data.split(':').length > 1 ? this.data.split(':')[1] : '';
213
- if (hourPart.length === 1) {
214
- this.data = '0' + hourPart + (minutePart ? ':' + minutePart : minutePart);
215
- this.caretPositionStart++;
216
- }
217
- }
218
- makeMinuteFull() {
219
- const hourPart = this.data.split(':')[0];
220
- const minutePart = this.data.split(':').length > 1 ? this.data.split(':')[1] : '';
221
- if (minutePart.length === 0) {
222
- this.data = hourPart + ':00';
223
- this.caretPositionStart += 2;
224
- }
225
- if (minutePart.length === 1) {
226
- this.data = hourPart + ':' + minutePart + '0';
227
- this.caretPositionStart++;
228
- }
229
- }
230
- fixTimeToNearest() {
231
- if (this.data.length > 0) {
232
- this.makeHourFull();
233
- this.makeMinuteFull();
234
- }
235
- }
236
- //eslint-disable-next-line @typescript-eslint/no-unused-vars, no-unused-vars, @typescript-eslint/no-empty-function
237
- onChangeFn = (_) => { };
238
- // eslint-disable-next-line @typescript-eslint/no-empty-function
239
- onTouchedFn = () => { };
240
- registerOnChange(fn) {
241
- this.onChangeFn = fn;
242
- }
243
- registerOnTouched(fn) {
244
- this.onTouchedFn = fn;
245
- }
246
- setDisabledState(isDisabled) {
247
- this.disabled = isDisabled;
248
- }
249
- writeValue(obj) {
250
- if (obj) {
251
- obj = obj.toString();
252
- let temp = '';
253
- if (obj.split(':').length >= 2) {
254
- temp = obj.split(':')[0] + ':' + obj.split(':')[1];
255
- }
256
- this._data = temp;
257
- }
258
- else {
259
- this._data = '';
260
- }
261
- }
262
- onChange() {
263
- this.onChangeFn(this.data);
264
- }
265
- show() {
266
- this.calcListPosition();
267
- this.focusedFlag = true;
268
- }
269
- close(val = null) {
270
- if (val) {
271
- this.data = val;
272
- }
273
- else {
274
- this.fixTimeToNearest();
275
- }
276
- this.focusedFlag = false;
277
- this.control?.markAsTouched();
278
- }
279
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EcabsTimepickerComponent, deps: [{ token: i0.ElementRef }, { token: i1.FormTimePickerService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
280
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: EcabsTimepickerComponent, selector: "ecabs-timepicker", inputs: { showCloseIcon: "showCloseIcon", focusedFlag: "focusedFlag", listPlacement: "listPlacement", appendTo: "appendTo", min: "min", max: "max", showDayStart: "showDayStart", showDayEnd: "showDayEnd", addSecond: "addSecond" }, host: { listeners: { "document:mousedown": "handleMousedown($event)" }, properties: { "class.form-timepicker-focused": "this.focusedFlag" } }, providers: [
281
- {
282
- provide: NG_VALUE_ACCESSOR,
283
- useExisting: EcabsTimepickerComponent,
284
- multi: true,
285
- },
286
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"timeInputWrapper\" [ngClass]=\"{ disabled: disabled }\">\r\n <app-element-wrapper\r\n [data]=\"getData()\"\r\n [showCloseIcon]=\"showCloseIcon\"\r\n [focusedFlag]=\"focusedFlag\"\r\n (clear)=\"clearInput()\"\r\n >\r\n <div class=\"timeInputFieldWrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"form-field__input\"\r\n [value]=\"data\"\r\n [disabled]=\"disabled\"\r\n (focus)=\"show()\"\r\n (click)=\"show()\"\r\n (keydown)=\"inputKeyDown($event)\"\r\n [placeholder]=\"placeholder\"\r\n />\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n </div>\r\n <ecabs-time-list-panel\r\n [typedValue]=\"data\"\r\n *ngIf=\"focusedFlag\"\r\n [showDayStart]=\"showDayStart\"\r\n [showDayEnd]=\"showDayEnd\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n class=\"form-time-list\"\r\n [appendTo]=\"appendTo\"\r\n [listPosition]=\"listPosition\"\r\n (closeMe)=\"close($event)\"\r\n ></ecabs-time-list-panel>\r\n </div>\r\n </app-element-wrapper>\r\n</div>\r\n", styles: [":host::ng-deep .timeInputWrapper app-element-wrapper .form-field{margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ElementWrapperComponent, selector: "app-element-wrapper", inputs: ["data", "showCloseIcon", "focusedFlag", "showPassword", "control"], outputs: ["showHidePassword", "clear", "increase", "decrease"] }, { kind: "component", type: i4.EcabsTimeListPanelComponent, selector: "ecabs-time-list-panel", inputs: ["typedValue", "listPlacement", "listPosition", "appendTo", "min", "max", "showDayStart", "showDayEnd", "position"], outputs: ["onscroll", "closeMe"] }] });
287
- }
288
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EcabsTimepickerComponent, decorators: [{
289
- type: Component,
290
- args: [{ selector: 'ecabs-timepicker', providers: [
291
- {
292
- provide: NG_VALUE_ACCESSOR,
293
- useExisting: EcabsTimepickerComponent,
294
- multi: true,
295
- },
296
- ], template: "<div class=\"timeInputWrapper\" [ngClass]=\"{ disabled: disabled }\">\r\n <app-element-wrapper\r\n [data]=\"getData()\"\r\n [showCloseIcon]=\"showCloseIcon\"\r\n [focusedFlag]=\"focusedFlag\"\r\n (clear)=\"clearInput()\"\r\n >\r\n <div class=\"timeInputFieldWrapper\">\r\n <input\r\n type=\"text\"\r\n class=\"form-field__input\"\r\n [value]=\"data\"\r\n [disabled]=\"disabled\"\r\n (focus)=\"show()\"\r\n (click)=\"show()\"\r\n (keydown)=\"inputKeyDown($event)\"\r\n [placeholder]=\"placeholder\"\r\n />\r\n <div class=\"form-field__input--suffix\" *ngIf=\"type !== 'number'\">\r\n <ng-content select=\"mat-icon\"></ng-content>\r\n </div>\r\n <ecabs-time-list-panel\r\n [typedValue]=\"data\"\r\n *ngIf=\"focusedFlag\"\r\n [showDayStart]=\"showDayStart\"\r\n [showDayEnd]=\"showDayEnd\"\r\n [min]=\"min\"\r\n [max]=\"max\"\r\n class=\"form-time-list\"\r\n [appendTo]=\"appendTo\"\r\n [listPosition]=\"listPosition\"\r\n (closeMe)=\"close($event)\"\r\n ></ecabs-time-list-panel>\r\n </div>\r\n </app-element-wrapper>\r\n</div>\r\n", styles: [":host::ng-deep .timeInputWrapper app-element-wrapper .form-field{margin-bottom:0}\n"] }]
297
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FormTimePickerService }, { type: i0.Injector }]; }, propDecorators: { showCloseIcon: [{
298
- type: Input
299
- }], focusedFlag: [{
300
- type: Input
301
- }, {
302
- type: HostBinding,
303
- args: ['class.form-timepicker-focused']
304
- }], listPlacement: [{
305
- type: Input
306
- }], appendTo: [{
307
- type: Input
308
- }], min: [{
309
- type: Input
310
- }], max: [{
311
- type: Input
312
- }], showDayStart: [{
313
- type: Input
314
- }], showDayEnd: [{
315
- type: Input
316
- }], addSecond: [{
317
- type: Input
318
- }], handleMousedown: [{
319
- type: HostListener,
320
- args: ['document:mousedown', ['$event']]
321
- }] } });
322
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtdGltZXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lY2Ficy1jb21wb25lbnRzL3NyYy9saWIvZWNhYnMtdGltZXBpY2tlci9lY2Ficy10aW1lcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VjYWJzLWNvbXBvbmVudHMvc3JjL2xpYi9lY2Ficy10aW1lcGlja2VyL2VjYWJzLXRpbWVwaWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBdUMsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxTQUFTLEVBQXNCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEcsT0FBTyxvQkFBb0IsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7O0FBZXhELE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxvQkFBb0I7SUFxQ3REO0lBQ0E7SUFDQTtJQXRDRCxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzJCLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEUsYUFBYSxHQUFrQixNQUFNLENBQUM7SUFDdEMsUUFBUSxDQUFVO0lBQ2xCLEdBQUcsQ0FBVTtJQUNiLEdBQUcsQ0FBVTtJQUNiLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDcEIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixTQUFTLEdBQUcsSUFBSSxDQUFDO0lBRTFCLFFBQVEsR0FBaUIsRUFBRSxDQUFDO0lBQzVCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDWCxXQUFXLENBQUM7SUFDWixNQUFNLENBQU87SUFDYixZQUFZLEdBQWlCLEVBQUUsQ0FBQztJQUNoQyxrQkFBa0IsQ0FBTztJQUN6QixnQkFBZ0IsQ0FBTztJQUV2QixJQUFJLElBQUk7UUFDTixPQUFPLElBQUks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S0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQTRDTixlQUFlO3NCQURkLFlBQVk7dUJBQUUsb0JBQW9CLEVBQUUsQ0FBRSxRQUFRLENBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBJbmplY3RvciwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCwgVW50eXBlZEZvcm1Db250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3JtVGltZVBpY2tlclNlcnZpY2UgfSBmcm9tICcuL2VjYWJzLXRpbWVwaWNrZXIuc2VydmljZSc7XHJcbmltcG9ydCBFbGVtZW50QmFzZUNvbXBvbmVudCBmcm9tICcuLi9iYXNlL2VsZW1lbnQtYmFzZSc7XHJcbmltcG9ydCB7IExpc3RQbGFjZW1lbnQsIExpc3RQb3NpdGlvbiB9IGZyb20gJy4uL21vZGVscy90aW1lcGlja2VyLm1vZGVscyc7XHJcblxyXG5AQ29tcG9uZW50KCB7XHJcbiAgc2VsZWN0b3I6ICdlY2Ficy10aW1lcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZWNhYnMtdGltZXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbICdlY2Ficy10aW1lcGlja2VyLmNvbXBvbmVudC5zY3NzJyBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IEVjYWJzVGltZXBpY2tlckNvbXBvbmVudCxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0gKVxyXG5leHBvcnQgY2xhc3MgRWNhYnNUaW1lcGlja2VyQ29tcG9uZW50IGV4dGVuZHMgRWxlbWVudEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgc2hvd0Nsb3NlSWNvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCAnY2xhc3MuZm9ybS10aW1lcGlja2VyLWZvY3VzZWQnICkgZm9jdXNlZEZsYWcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBsaXN0UGxhY2VtZW50OiBMaXN0UGxhY2VtZW50ID0gJ2F1dG8nO1xyXG4gIEBJbnB1dCgpIGFwcGVuZFRvITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1pbiE6IHN0cmluZztcclxuICBASW5wdXQoKSBtYXghOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2hvd0RheVN0YXJ0ID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93RGF5RW5kID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYWRkU2Vjb25kID0gdHJ1ZTtcclxuXHJcbiAgcG9zaXRpb246IExpc3RQb3NpdGlvbiA9IHt9O1xyXG4gIF9kYXRhID0gJyc7XHJcbiAgX3RpbWVQaWNrZXI7XHJcbiAgX2lucHV0ITogYW55O1xyXG4gIGxpc3RQb3NpdGlvbjogTGlzdFBvc2l0aW9uID0ge307XHJcbiAgY2FyZXRQb3NpdGlvblN0YXJ0ITogYW55O1xyXG4gIGNhcmV0UG9zaXRpb25FbmQhOiBhbnk7XHJcblxyXG4gIGdldCBkYXRhKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcclxuICB9XHJcblxyXG4gIHNldCBkYXRhKCB2YWx1ZTogYW55ICkge1xyXG4gICAgdGhpcy5fZGF0YSA9IHZhbHVlO1xyXG4gICAgaWYgKCB0aGlzLl9kYXRhLmxlbmd0aCA9PT0gNSApIHtcclxuICAgICAgaWYgKCB0aGlzLl9kYXRhID09PSAnMjM6NTknICkge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VGbiggdGhpcy5fZGF0YSArICggdGhpcy5hZGRTZWNvbmQgPyAnOjU5JyA6ICcnICkgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4oIHRoaXMuX2RhdGEgKyAoIHRoaXMuYWRkU2Vjb25kID8gJzowMCcgOiAnJyApICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoIHRoaXMuX2RhdGEgPT09ICcnICkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlRm4oIHRoaXMuX2RhdGEgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSB0aW1lcGlja2VyU2VydmljZTogRm9ybVRpbWVQaWNrZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gJzAwOjAwJztcclxuICAgIHRoaXMuX3RpbWVQaWNrZXIgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIHNldFRpbWVvdXQoICgpID0+IHtcclxuICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl90aW1lUGlja2VyLnF1ZXJ5U2VsZWN0b3IoICdpbnB1dCcgKTtcclxuICAgIH0gKTtcclxuICAgIGlmICggIXRoaXMuaWNvbkNsYXNzICkge1xyXG4gICAgICB0aGlzLmljb25DbGFzcyA9IHRoaXMudGltZXBpY2tlclNlcnZpY2UuZ2V0Q29uZmlnKCkuaWNvbkNsYXNzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lciggJ2RvY3VtZW50Om1vdXNlZG93bicsIFsgJyRldmVudCcgXSApXHJcbiAgaGFuZGxlTW91c2Vkb3duKCAkZXZlbnQ6IE1vdXNlRXZlbnQgKTogdm9pZCB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSAkZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKFxyXG4gICAgICB0YXJnZXQuY2xvc2VzdCggJy5mb3JtLXRpbWUtbGlzdCcgKSB8fFxyXG4gICAgICB0YXJnZXQuY2xvc2VzdCggJy50aW1lSW5wdXRXcmFwcGVyJyApID09PSB0aGlzLl90aW1lUGlja2VyLnF1ZXJ5U2VsZWN0b3IoICcudGltZUlucHV0V3JhcHBlcicgKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuX3RpbWVQaWNrZXIucXVlcnlTZWxlY3RvciggJy50aW1lSW5wdXRXcmFwcGVyJyApLmZvY3VzKCk7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIHRoaXMuZm9jdXNlZEZsYWcgKSB7XHJcbiAgICAgIHRoaXMuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5nQ29udHJvbDogTmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoIE5nQ29udHJvbCwgbnVsbCApIGFzIE5nQ29udHJvbDtcclxuICAgIGlmICggbmdDb250cm9sICkge1xyXG4gICAgICB0aGlzLmNvbnRyb2wgPSBuZ0NvbnRyb2wuY29udHJvbCBhcyBVbnR5cGVkRm9ybUNvbnRyb2w7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhcklucHV0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhID0gJyc7XHJcbiAgfVxyXG5cclxuICBjYWxjTGlzdFBvc2l0aW9uKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLl90aW1lUGlja2VyLnF1ZXJ5U2VsZWN0b3IoICcudGltZUlucHV0RmllbGRXcmFwcGVyJyApLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgaWYgKCB0aGlzLmFwcGVuZFRvICkge1xyXG4gICAgICB0aGlzLmxpc3RQb3NpdGlvbiA9IHtcclxuICAgICAgICBsZWZ0OiBwb3NpdGlvbi54LFxyXG4gICAgICAgIHRvcDogcG9zaXRpb24udG9wICsgcG9zaXRpb24uaGVpZ2h0LFxyXG4gICAgICAgIHdpZHRoOiBwb3NpdGlvbi53aWR0aCxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubGlzdFBvc2l0aW9uID0ge1xyXG4gICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgdG9wOiBwb3NpdGlvbi5oZWlnaHQsXHJcbiAgICAgICAgd2lkdGg6IHBvc2l0aW9uLndpZHRoLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5wdXRLZXlEb3duKCBldmVudDogYW55ICk6IGJvb2xlYW4ge1xyXG4gICAgdGhpcy5jYXJldFBvc2l0aW9uU3RhcnQgPSBldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICB0aGlzLmNhcmV0UG9zaXRpb25FbmQgPSBldmVudC50YXJnZXQuc2VsZWN0aW9uRW5kO1xyXG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xyXG4gICAgdGhpcy5zZXRDYXJldFBvc2l0aW9uKCB0aGlzLl9pbnB1dCApO1xyXG4gICAgc3dpdGNoICggdGhpcy5jaGVja1NwZWNpYWxLZXlzKCBrZXksIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0LCB0aGlzLmNhcmV0UG9zaXRpb25FbmQgKSApIHtcclxuICAgICAgY2FzZSAnc3RvcCc6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgY2FzZSAndGFiJzpcclxuICAgICAgICB0aGlzLmNsb3NlKCk7XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgIGNhc2UgJ2Fycm93JzpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCB0aGlzLmNoZWNrVW5Vc2VkS2V5cygga2V5ICkgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdEYXRhID1cclxuICAgICAgdGhpcy5kYXRhLnNsaWNlKCAwLCB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCApICsga2V5ICsgdGhpcy5kYXRhLnNsaWNlKCB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCwgdGhpcy5kYXRhLmxlbmd0aCApO1xyXG5cclxuICAgIGlmICggdGhpcy5jaGVja091dE9mUmFuZ2VOdW1iZXIoIG5ld0RhdGEgKSApIHtcclxuICAgICAgdGhpcy5kYXRhID0gbmV3RGF0YTtcclxuICAgICAgdGhpcy5jYXJldFBvc2l0aW9uU3RhcnQrKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0ID09PSB0aGlzLmRhdGEubGVuZ3RoICYmXHJcbiAgICAgICggdGhpcy5kYXRhLmxlbmd0aCA9PT0gMiB8fCAoIHRoaXMuZGF0YS5sZW5ndGggPT09IDEgJiYgcGFyc2VJbnQoIHRoaXMuZGF0YSApID4gMiApIClcclxuICAgICkge1xyXG4gICAgICB0aGlzLm1ha2VIb3VyRnVsbCgpO1xyXG4gICAgICB0aGlzLmRhdGEgKz0gJzonO1xyXG4gICAgICB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCsrO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNoZWNrU3BlY2lhbEtleXMoIGtleTogYW55LCBzZWxlY3Rpb25TdGFydDogYW55LCBzZWxlY3Rpb25FbmQ6IGFueSApOiAnc3RvcCcgfCAnY29udGludWUnIHwgJ3RhYicgfCAnYXJyb3cnIHtcclxuICAgIGlmICggc2VsZWN0aW9uU3RhcnQgIT09IHNlbGVjdGlvbkVuZCAmJiBrZXkgIT09ICdBcnJvd0xlZnQnICYmIGtleSAhPT0gJ0Fycm93UmlnaHQnICkge1xyXG4gICAgICBpZiAoICEoIHRoaXMuZGF0YS5zbGljZSggc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCApLmluY2x1ZGVzKCAnOicgKSAmJiBzZWxlY3Rpb25FbmQgIT09IHRoaXMuZGF0YS5sZW5ndGggKSApIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UoIDAsIHNlbGVjdGlvblN0YXJ0ICkgKyB0aGlzLmRhdGEuc2xpY2UoIHNlbGVjdGlvbkVuZCwgdGhpcy5kYXRhLmxlbmd0aCApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIHNlbGVjdGlvblN0YXJ0ID09PSBzZWxlY3Rpb25FbmQgJiYga2V5ID09PSAnQmFja3NwYWNlJyApIHtcclxuICAgICAgaWYgKCB0aGlzLmRhdGEubGVuZ3RoID4gMCApIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmRhdGFbIHNlbGVjdGlvblN0YXJ0IC0gMSBdICE9PSAnOicgfHxcclxuICAgICAgICAgICggdGhpcy5kYXRhWyBzZWxlY3Rpb25TdGFydCAtIDEgXSA9PT0gJzonICYmIHNlbGVjdGlvblN0YXJ0ID09PSB0aGlzLmRhdGEubGVuZ3RoIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zbGljZSggMCwgc2VsZWN0aW9uU3RhcnQgLSAxICkgKyB0aGlzLmRhdGEuc2xpY2UoIHNlbGVjdGlvbkVuZCwgdGhpcy5kYXRhLmxlbmd0aCApO1xyXG4gICAgICAgICAgdGhpcy5jYXJldFBvc2l0aW9uU3RhcnQtLTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAnc3RvcCc7XHJcbiAgICB9XHJcbiAgICBpZiAoIGtleSA9PT0gJ1RhYicgfHwga2V5ID09PSAnICcgfHwga2V5ID09PSAnOicgKSB7XHJcbiAgICAgIGlmICggIXRoaXMuZGF0YS5pbmNsdWRlcyggJzonICkgJiYgdGhpcy5kYXRhLmxlbmd0aCA+IDAgKSB7XHJcbiAgICAgICAgdGhpcy5tYWtlSG91ckZ1bGwoKTtcclxuICAgICAgICB0aGlzLmRhdGEgKz0gJzonO1xyXG4gICAgICAgIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0Kys7XHJcblxyXG4gICAgICAgIHJldHVybiAnc3RvcCc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCBrZXkgPT09ICdUYWInICkge1xyXG4gICAgICAgIHJldHVybiAndGFiJztcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuICdzdG9wJztcclxuICAgIH1cclxuICAgIGlmICgga2V5ID09PSAnQXJyb3dSaWdodCcgKSB7XHJcbiAgICAgIGlmICggdGhpcy5jYXJldFBvc2l0aW9uU3RhcnQgPCB0aGlzLmRhdGEubGVuZ3RoICkge1xyXG4gICAgICAgIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0Kys7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiAnYXJyb3cnO1xyXG4gICAgfVxyXG4gICAgaWYgKCBrZXkgPT09ICdBcnJvd0xlZnQnICkge1xyXG4gICAgICBpZiAoIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0ID4gMCApIHtcclxuICAgICAgICB0aGlzLmNhcmV0UG9zaXRpb25TdGFydC0tO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gJ2Fycm93JztcclxuICAgIH1cclxuICAgIGlmICgga2V5ID09PSAnQXJyb3dEb3duJyAmJiAhdGhpcy5mb2N1c2VkRmxhZyApIHtcclxuICAgICAgdGhpcy5zaG93KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICdjb250aW51ZSc7XHJcbiAgfVxyXG5cclxuICBjaGVja1VuVXNlZEtleXMoIGtleTogc3RyaW5nICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgciA9IG5ldyBSZWdFeHAoICdbMC05XScgKTtcclxuXHJcbiAgICByZXR1cm4gIXIudGVzdCgga2V5ICk7XHJcbiAgfVxyXG5cclxuICBzZXRDYXJldFBvc2l0aW9uKCBlbGVtOiBhbnkgKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCAoKSA9PiB7XHJcbiAgICAgIGlmICggZWxlbSAhPT0gbnVsbCApIHtcclxuICAgICAgICBpZiAoIGVsZW0uY3JlYXRlVGV4dFJhbmdlICkge1xyXG4gICAgICAgICAgY29uc3QgcmFuZ2UgPSBlbGVtLmNyZWF0ZVRleHRSYW5nZSgpO1xyXG4gICAgICAgICAgcmFuZ2UubW92ZSggJ2NoYXJhY3RlcicsIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0ICk7XHJcbiAgICAgICAgICByYW5nZS5zZWxlY3QoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCBlbGVtLnNlbGVjdGlvblN0YXJ0ICkge1xyXG4gICAgICAgICAgICBlbGVtLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIGVsZW0uc2V0U2VsZWN0aW9uUmFuZ2UoIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0LCB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSApO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tPdXRPZlJhbmdlTnVtYmVyKCB0aW1lOiBhbnkgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBob3VyID0gcGFyc2VJbnQoIHRpbWUuc3BsaXQoICc6JyApWyAwIF0sIDEwICk7XHJcbiAgICBsZXQgbWludXRlID0gLTE7XHJcbiAgICBpZiAoIHRpbWUuc3BsaXQoICc6JyApLmxlbmd0aCA+IDEgKSB7XHJcbiAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KCB0aW1lLnNwbGl0KCAnOicgKVsgMSBdLCAxMCApO1xyXG4gICAgfVxyXG4gICAgaWYgKCBob3VyIDwgMjQgJiYgdGltZS5zcGxpdCggJzonIClbIDAgXS5sZW5ndGggPCAzICYmIG1pbnV0ZSA8IDYwICkge1xyXG4gICAgICBpZiAoIHRpbWUuc3BsaXQoICc6JyApLmxlbmd0aCA+IDEgJiYgdGltZS5zcGxpdCggJzonIClbIDEgXS5sZW5ndGggPiAyICkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbWFrZUhvdXJGdWxsKCk6IHZvaWQge1xyXG4gICAgY29uc3QgaG91clBhcnQgPSB0aGlzLmRhdGEuc3BsaXQoICc6JyApWyAwIF07XHJcbiAgICBjb25zdCBtaW51dGVQYXJ0ID0gdGhpcy5kYXRhLnNwbGl0KCAnOicgKS5sZW5ndGggPiAxID8gdGhpcy5kYXRhLnNwbGl0KCAnOicgKVsgMSBdIDogJyc7XHJcbiAgICBpZiAoIGhvdXJQYXJ0Lmxlbmd0aCA9PT0gMSApIHtcclxuICAgICAgdGhpcy5kYXRhID0gJzAnICsgaG91clBhcnQgKyAoIG1pbnV0ZVBhcnQgPyAnOicgKyBtaW51dGVQYXJ0IDogbWludXRlUGFydCApO1xyXG4gICAgICB0aGlzLmNhcmV0UG9zaXRpb25TdGFydCsrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWFrZU1pbnV0ZUZ1bGwoKTogdm9pZCB7XHJcbiAgICBjb25zdCBob3VyUGFydCA9IHRoaXMuZGF0YS5zcGxpdCggJzonIClbIDAgXTtcclxuICAgIGNvbnN0IG1pbnV0ZVBhcnQgPSB0aGlzLmRhdGEuc3BsaXQoICc6JyApLmxlbmd0aCA+IDEgPyB0aGlzLmRhdGEuc3BsaXQoICc6JyApWyAxIF0gOiAnJztcclxuICAgIGlmICggbWludXRlUGFydC5sZW5ndGggPT09IDAgKSB7XHJcbiAgICAgIHRoaXMuZGF0YSA9IGhvdXJQYXJ0ICsgJzowMCc7XHJcbiAgICAgIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0ICs9IDI7XHJcbiAgICB9XHJcbiAgICBpZiAoIG1pbnV0ZVBhcnQubGVuZ3RoID09PSAxICkge1xyXG4gICAgICB0aGlzLmRhdGEgPSBob3VyUGFydCArICc6JyArIG1pbnV0ZVBhcnQgKyAnMCc7XHJcbiAgICAgIHRoaXMuY2FyZXRQb3NpdGlvblN0YXJ0Kys7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaXhUaW1lVG9OZWFyZXN0KCk6IHZvaWQge1xyXG4gICAgaWYgKCB0aGlzLmRhdGEubGVuZ3RoID4gMCApIHtcclxuICAgICAgdGhpcy5tYWtlSG91ckZ1bGwoKTtcclxuICAgICAgdGhpcy5tYWtlTWludXRlRnVsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9lc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBuby11bnVzZWQtdmFycywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgcHVibGljIG9uQ2hhbmdlRm4gPSAoIF86IGFueSApOiB2b2lkID0+IHsgfTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgcHVibGljIG9uVG91Y2hlZEZuID0gKCk6IHZvaWQgPT4geyB9O1xyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZSggZm46IGFueSApOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKCBmbjogYW55ICk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWRGbiA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoIGlzRGlzYWJsZWQ6IGJvb2xlYW4gKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB3cml0ZVZhbHVlKCBvYmo6IGFueSApOiB2b2lkIHtcclxuICAgIGlmICggb2JqICkge1xyXG4gICAgICBvYmogPSBvYmoudG9TdHJpbmcoKTtcclxuICAgICAgbGV0IHRlbXAgPSAnJztcclxuICAgICAgaWYgKCBvYmouc3BsaXQoICc6JyApLmxlbmd0aCA+PSAyICkge1xyXG4gICAgICAgIHRlbXAgPSBvYmouc3BsaXQoICc6JyApWyAwIF0gKyAnOicgKyBvYmouc3BsaXQoICc6JyApWyAxIF07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fZGF0YSA9IHRlbXA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9kYXRhID0gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlRm4oIHRoaXMuZGF0YSApO1xyXG4gIH1cclxuXHJcbiAgc2hvdygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FsY0xpc3RQb3NpdGlvbigpO1xyXG4gICAgdGhpcy5mb2N1c2VkRmxhZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjbG9zZSggdmFsID0gbnVsbCApOiB2b2lkIHtcclxuICAgIGlmICggdmFsICkge1xyXG4gICAgICB0aGlzLmRhdGEgPSB2YWw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpeFRpbWVUb05lYXJlc3QoKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9jdXNlZEZsYWcgPSBmYWxzZTtcclxuICAgIHRoaXMuY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwidGltZUlucHV0V3JhcHBlclwiIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGRpc2FibGVkIH1cIj5cclxuICA8YXBwLWVsZW1lbnQtd3JhcHBlclxyXG4gICAgW2RhdGFdPVwiZ2V0RGF0YSgpXCJcclxuICAgIFtzaG93Q2xvc2VJY29uXT1cInNob3dDbG9zZUljb25cIlxyXG4gICAgW2ZvY3VzZWRGbGFnXT1cImZvY3VzZWRGbGFnXCJcclxuICAgIChjbGVhcik9XCJjbGVhcklucHV0KClcIlxyXG4gID5cclxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lSW5wdXRGaWVsZFdyYXBwZXJcIj5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgIGNsYXNzPVwiZm9ybS1maWVsZF9faW5wdXRcIlxyXG4gICAgICAgIFt2YWx1ZV09XCJkYXRhXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgIChmb2N1cyk9XCJzaG93KClcIlxyXG4gICAgICAgIChjbGljayk9XCJzaG93KClcIlxyXG4gICAgICAgIChrZXlkb3duKT1cImlucHV0S2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAvPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZF9faW5wdXQtLXN1ZmZpeFwiICpuZ0lmPVwidHlwZSAhPT0gJ251bWJlcidcIj5cclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaWNvblwiPjwvbmctY29udGVudD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxlY2Ficy10aW1lLWxpc3QtcGFuZWxcclxuICAgICAgICBbdHlwZWRWYWx1ZV09XCJkYXRhXCJcclxuICAgICAgICAqbmdJZj1cImZvY3VzZWRGbGFnXCJcclxuICAgICAgICBbc2hvd0RheVN0YXJ0XT1cInNob3dEYXlTdGFydFwiXHJcbiAgICAgICAgW3Nob3dEYXlFbmRdPVwic2hvd0RheUVuZFwiXHJcbiAgICAgICAgW21pbl09XCJtaW5cIlxyXG4gICAgICAgIFttYXhdPVwibWF4XCJcclxuICAgICAgICBjbGFzcz1cImZvcm0tdGltZS1saXN0XCJcclxuICAgICAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIlxyXG4gICAgICAgIFtsaXN0UG9zaXRpb25dPVwibGlzdFBvc2l0aW9uXCJcclxuICAgICAgICAoY2xvc2VNZSk9XCJjbG9zZSgkZXZlbnQpXCJcclxuICAgICAgPjwvZWNhYnMtdGltZS1saXN0LXBhbmVsPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9hcHAtZWxlbWVudC13cmFwcGVyPlxyXG48L2Rpdj5cclxuIl19
@@ -1,29 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- export class FormTimePickerService {
5
- config = {
6
- dayEnd: 'Day End',
7
- dayStart: 'Day Start',
8
- iconClass: '',
9
- };
10
- closeSub = new Subject();
11
- setConfig(c) {
12
- this.config = Object.assign(this.config, c);
13
- }
14
- getConfig() {
15
- return this.config;
16
- }
17
- close() {
18
- this.closeSub.next(true);
19
- }
20
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormTimePickerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
21
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormTimePickerService, providedIn: 'root' });
22
- }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FormTimePickerService, decorators: [{
24
- type: Injectable,
25
- args: [{
26
- providedIn: 'root',
27
- }]
28
- }] });
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtdGltZXBpY2tlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL2VjYWJzLXRpbWVwaWNrZXIvZWNhYnMtdGltZXBpY2tlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFNL0IsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxNQUFNLEdBQXlCO1FBQzdCLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLFNBQVMsRUFBRSxFQUFFO0tBQ2QsQ0FBQztJQUVLLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO0lBRXpDLFNBQVMsQ0FBQyxDQUF1QjtRQUMvQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7dUdBbkJVLHFCQUFxQjsyR0FBckIscUJBQXFCLGNBRnBCLE1BQU07OzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRm9ybVRpbWVQaWNrZXJDb25maWcgfSBmcm9tICcuL2NvbmZpZy5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9ybVRpbWVQaWNrZXJTZXJ2aWNlIHtcclxuICBjb25maWc6IEZvcm1UaW1lUGlja2VyQ29uZmlnID0ge1xyXG4gICAgZGF5RW5kOiAnRGF5IEVuZCcsXHJcbiAgICBkYXlTdGFydDogJ0RheSBTdGFydCcsXHJcbiAgICBpY29uQ2xhc3M6ICcnLFxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBjbG9zZVN1YiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gIHNldENvbmZpZyhjOiBGb3JtVGltZVBpY2tlckNvbmZpZyk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHRoaXMuY29uZmlnLCBjKTtcclxuICB9XHJcblxyXG4gIGdldENvbmZpZygpOiBGb3JtVGltZVBpY2tlckNvbmZpZyB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWc7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xvc2VTdWIubmV4dCh0cnVlKTtcclxuICB9XHJcbn1cclxuIl19
@@ -1,31 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class EcabsComponentsService {
4
- config = {
5
- errorMessages: [
6
- { type: 'required', message: '[label] is required' },
7
- { type: 'minlength', message: '[label] should be atleast [requiredLength] character' },
8
- { type: 'maxLength', message: '[label] should be maximum [requiredLength] character' },
9
- { type: 'min', message: '[label] should be minmum [min]' },
10
- { type: 'max', message: '[label] should be maximum [max]' },
11
- { type: 'minValue', message: '[label] should be minmum [requiredMin]' },
12
- { type: 'maxValue', message: '[label] should be maximum [requiredMax]' },
13
- ],
14
- };
15
- constructor() { }
16
- setConfig(c) {
17
- this.config.errorMessages = c.errorMessages;
18
- }
19
- getConfig() {
20
- return this.config;
21
- }
22
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EcabsComponentsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EcabsComponentsService, providedIn: 'root' });
24
- }
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EcabsComponentsService, decorators: [{
26
- type: Injectable,
27
- args: [{
28
- providedIn: 'root',
29
- }]
30
- }], ctorParameters: function () { return []; } });
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNhYnMtY29tcG9uZW50cy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWNhYnMtY29tcG9uZW50cy9zcmMvbGliL3NlcnZpY2VzL2VjYWJzLWNvbXBvbmVudHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUszQyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLE1BQU0sR0FBMEI7UUFDOUIsYUFBYSxFQUFFO1lBQ2IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRTtZQUNwRCxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLHNEQUFzRCxFQUFFO1lBQ3RGLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsc0RBQXNELEVBQUU7WUFDdEYsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRTtZQUMxRCxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFO1lBQzNELEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsd0NBQXdDLEVBQUU7WUFDdkUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSx5Q0FBeUMsRUFBRTtTQUN6RTtLQUNGLENBQUM7SUFDRixnQkFBZSxDQUFDO0lBQ2hCLFNBQVMsQ0FBQyxDQUF3QjtRQUNoQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsYUFBYSxDQUFDO0lBQzlDLENBQUM7SUFDRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7dUdBbEJVLHNCQUFzQjsyR0FBdEIsc0JBQXNCLGNBRnJCLE1BQU07OzJGQUVQLHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRWNhYnNDb21wb25lbnRzU2VydmljZSB7XHJcbiAgY29uZmlnOiBFY2Fic0NvbXBvbmVudHNDb25maWcgPSB7XHJcbiAgICBlcnJvck1lc3NhZ2VzOiBbXHJcbiAgICAgIHsgdHlwZTogJ3JlcXVpcmVkJywgbWVzc2FnZTogJ1tsYWJlbF0gaXMgcmVxdWlyZWQnIH0sXHJcbiAgICAgIHsgdHlwZTogJ21pbmxlbmd0aCcsIG1lc3NhZ2U6ICdbbGFiZWxdIHNob3VsZCBiZSBhdGxlYXN0IFtyZXF1aXJlZExlbmd0aF0gY2hhcmFjdGVyJyB9LFxyXG4gICAgICB7IHR5cGU6ICdtYXhMZW5ndGgnLCBtZXNzYWdlOiAnW2xhYmVsXSBzaG91bGQgYmUgbWF4aW11bSBbcmVxdWlyZWRMZW5ndGhdIGNoYXJhY3RlcicgfSxcclxuICAgICAgeyB0eXBlOiAnbWluJywgbWVzc2FnZTogJ1tsYWJlbF0gc2hvdWxkIGJlIG1pbm11bSBbbWluXScgfSxcclxuICAgICAgeyB0eXBlOiAnbWF4JywgbWVzc2FnZTogJ1tsYWJlbF0gc2hvdWxkIGJlIG1heGltdW0gW21heF0nIH0sXHJcbiAgICAgIHsgdHlwZTogJ21pblZhbHVlJywgbWVzc2FnZTogJ1tsYWJlbF0gc2hvdWxkIGJlIG1pbm11bSBbcmVxdWlyZWRNaW5dJyB9LFxyXG4gICAgICB7IHR5cGU6ICdtYXhWYWx1ZScsIG1lc3NhZ2U6ICdbbGFiZWxdIHNob3VsZCBiZSBtYXhpbXVtIFtyZXF1aXJlZE1heF0nIH0sXHJcbiAgICBdLFxyXG4gIH07XHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG4gIHNldENvbmZpZyhjOiBFY2Fic0NvbXBvbmVudHNDb25maWcpIHtcclxuICAgIHRoaXMuY29uZmlnLmVycm9yTWVzc2FnZXMgPSBjLmVycm9yTWVzc2FnZXM7XHJcbiAgfVxyXG4gIGdldENvbmZpZygpOiBFY2Fic0NvbXBvbmVudHNDb25maWcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFY2Fic0NvbXBvbmVudHNDb25maWcge1xyXG4gIGVycm9yTWVzc2FnZXM6IEVycm9yTWVzc2FnZVtdO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JNZXNzYWdlIHtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG59XHJcbiJdfQ==