@annalib/anna-core 22.3.2 → 22.3.5

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 (107) hide show
  1. package/{esm2020 → esm2022}/annalib-anna-core.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +15 -15
  3. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.mjs +14 -14
  4. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.mjs +11 -11
  5. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +36 -36
  6. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +15 -15
  7. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +22 -22
  8. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +14 -14
  9. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +23 -23
  10. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +15 -15
  11. package/esm2022/lib/anna-core-shared-lib/constants/shared.constant.mjs +44 -0
  12. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.mjs +284 -284
  13. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.mjs +43 -43
  14. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.mjs +38 -38
  15. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +1 -1
  16. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +1 -1
  17. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +11 -11
  18. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-sort.model.mjs +6 -6
  19. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +29 -29
  20. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.mjs +38 -38
  21. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.mjs +26 -26
  22. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.mjs +22 -22
  23. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +53 -53
  24. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.mjs +25 -25
  25. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.mjs +16 -16
  26. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +208 -208
  27. package/esm2022/lib/anna-core-shared-lib/services/anna-filter.service.mjs +1170 -0
  28. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +151 -151
  29. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +132 -132
  30. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-number-format.service.mjs +53 -53
  31. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-persisting-filter.service.mjs +66 -66
  32. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-sort.service.mjs +176 -176
  33. package/esm2022/lib/anna-core.module.mjs +221 -0
  34. package/{esm2020 → esm2022}/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +151 -151
  35. package/esm2022/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +364 -0
  36. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.mjs +237 -237
  37. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.mjs +180 -180
  38. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.mjs +306 -306
  39. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +291 -291
  40. package/esm2022/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +806 -0
  41. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +64 -64
  42. package/esm2022/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +357 -0
  43. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +189 -189
  44. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +1 -1
  45. package/esm2022/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +178 -0
  46. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +1 -1
  47. package/{esm2020 → esm2022}/public-api.mjs +57 -57
  48. package/{fesm2020 → fesm2022}/annalib-anna-core.mjs +5752 -5721
  49. package/fesm2022/annalib-anna-core.mjs.map +1 -0
  50. package/index.d.ts +5 -5
  51. package/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +8 -8
  52. package/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.d.ts +8 -8
  53. package/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.d.ts +5 -5
  54. package/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.d.ts +17 -17
  55. package/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +8 -8
  56. package/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.d.ts +11 -11
  57. package/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +8 -8
  58. package/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +12 -12
  59. package/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +8 -8
  60. package/lib/anna-core-shared-lib/constants/shared.constant.d.ts +42 -42
  61. package/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.d.ts +34 -34
  62. package/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.d.ts +16 -16
  63. package/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.d.ts +10 -10
  64. package/lib/anna-core-shared-lib/models/anna-generic-data-type.model.d.ts +16 -16
  65. package/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.d.ts +97 -97
  66. package/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts +119 -118
  67. package/lib/anna-core-shared-lib/models/anna-sort.model.d.ts +11 -11
  68. package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +25 -25
  69. package/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.d.ts +9 -9
  70. package/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.d.ts +9 -9
  71. package/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.d.ts +8 -8
  72. package/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.d.ts +9 -9
  73. package/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.d.ts +9 -9
  74. package/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.d.ts +7 -7
  75. package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +28 -28
  76. package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +154 -154
  77. package/lib/anna-core-shared-lib/services/anna-generic-table.service.d.ts +27 -27
  78. package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +21 -21
  79. package/lib/anna-core-shared-lib/services/anna-number-format.service.d.ts +8 -8
  80. package/lib/anna-core-shared-lib/services/anna-persisting-filter.service.d.ts +9 -9
  81. package/lib/anna-core-shared-lib/services/anna-sort.service.d.ts +18 -18
  82. package/lib/anna-core.module.d.ts +45 -45
  83. package/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +45 -45
  84. package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +70 -70
  85. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.d.ts +60 -60
  86. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.d.ts +53 -53
  87. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.d.ts +65 -65
  88. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.d.ts +83 -83
  89. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +175 -174
  90. package/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +17 -17
  91. package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +141 -141
  92. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.d.ts +89 -89
  93. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts +1 -1
  94. package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +45 -45
  95. package/lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts +1 -1
  96. package/package.json +5 -11
  97. package/public-api.d.ts +42 -42
  98. package/esm2020/lib/anna-core-shared-lib/constants/shared.constant.mjs +0 -44
  99. package/esm2020/lib/anna-core-shared-lib/services/anna-filter.service.mjs +0 -1157
  100. package/esm2020/lib/anna-core.module.mjs +0 -221
  101. package/esm2020/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +0 -364
  102. package/esm2020/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +0 -788
  103. package/esm2020/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +0 -357
  104. package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +0 -178
  105. package/fesm2015/annalib-anna-core.mjs +0 -5857
  106. package/fesm2015/annalib-anna-core.mjs.map +0 -1
  107. package/fesm2020/annalib-anna-core.mjs.map +0 -1
@@ -1,364 +0,0 @@
1
- // Angular import statements
2
- import { DatePipe } from "@angular/common";
3
- import { Component, EventEmitter, Input, Output } from "@angular/core";
4
- // Third party import statements
5
- import { NgbCalendar, NgbDate, NgbDatepickerConfig } from "@ng-bootstrap/ng-bootstrap";
6
- import dayjs from "dayjs";
7
- import { AnnaDateTimeFormatService } from '../../../anna-core-shared-lib/services/anna-date-time-format.service';
8
- import { AnnaGlobalConfigService } from '../../../anna-core-shared-lib/services/anna-global-config.service';
9
- import * as i0 from "@angular/core";
10
- import * as i1 from "@ng-bootstrap/ng-bootstrap";
11
- import * as i2 from "../../../anna-core-shared-lib/services/anna-date-time-format.service";
12
- import * as i3 from "../../../anna-core-shared-lib/services/anna-global-config.service";
13
- import * as i4 from "@angular/common";
14
- import * as i5 from "@angular/forms";
15
- // User defined import statements
16
- export class AnnaWeekCalendarComponent {
17
- constructor(calendar, datePickerConfig, annaDateTimeFormatService, globalConfigService) {
18
- this.calendar = calendar;
19
- this.datePickerConfig = datePickerConfig;
20
- this.annaDateTimeFormatService = annaDateTimeFormatService;
21
- this.globalConfigService = globalConfigService;
22
- this.hoveredDate = null;
23
- this.toDate = null;
24
- this.weekNumbers = [];
25
- this.dateToDisplay = "";
26
- this.multiSelectDropdownOpen = false;
27
- this.calendarMap = new Map();
28
- this.disabledDates = [];
29
- this.applyWeekCalendarChanges = new EventEmitter();
30
- this.calendarToggled = new EventEmitter();
31
- }
32
- ngOnChanges(changes) {
33
- //if some values are not sent, setting the default values
34
- this._defaultValues = this.globalConfigService.defaultWeekCalendarConfig;
35
- this.config = { ...this._defaultValues, ...this.config };
36
- if (this.config.selectCurrentWeek) {
37
- this.initializeWeekData();
38
- this.fromDate && this.selectWeek(this.fromDate);
39
- }
40
- this.formatter = this.formattedDates();
41
- if (this.selectedFromDate && this.selectedEndDate && this.config) {
42
- // this.selectWeek(this.fromDate);
43
- this.fromDate = NgbDate.from(this.selectedFromDate);
44
- this.toDate = NgbDate.from(this.selectedEndDate);
45
- this.weekNumberGenerator();
46
- this.displayToUI();
47
- this.setCalendarMap();
48
- }
49
- if (this.disabledDates.length > 0) {
50
- this.disabledFunc = (date, current) => {
51
- return this.checkIfDateIsDisabled(date);
52
- };
53
- }
54
- }
55
- getWeekNumber(week, firstDayOfWeek) {
56
- const weekStartDate = dayjs(convertNgbDateToMoment(week[0]), "MM/DD/YYYY");
57
- const weekYear = weekStartDate.year();
58
- const yearStartDate = dayjs(`01/01/${weekYear}`, "MM/DD/YYYY");
59
- const weekDay = yearStartDate.day();
60
- const noOfDays = weekStartDate.diff(yearStartDate, "d") + 1;
61
- function convertNgbDateToMoment(ngbDate) {
62
- let formatType = "MM/DD/YYYY";
63
- let converted = null;
64
- if (ngbDate && ngbDate.month && ngbDate.day && ngbDate.year) {
65
- converted = ngbDate.month + "/" + ngbDate.day + "/" + ngbDate.year;
66
- converted = dayjs(converted).format(formatType);
67
- }
68
- return converted;
69
- }
70
- function checkIfYearIsBroadcastLeapYear() {
71
- let isLeapYear = (weekYear % 4 == 0 && weekYear % 100 != 0) || weekYear % 400 == 0;
72
- return (isLeapYear && (weekDay == 0 || weekDay == 6)) || (!isLeapYear && weekDay == 0);
73
- }
74
- const isLeapYear = checkIfYearIsBroadcastLeapYear();
75
- const divider = isLeapYear ? 53 : 52;
76
- const adder = isLeapYear ? 2 : 1;
77
- let broadcastNumberOfDays = weekDay + noOfDays;
78
- let broadcastWeekNumber = broadcastNumberOfDays % 7 > 0 ? broadcastNumberOfDays / 7 + adder : broadcastNumberOfDays / 7;
79
- if (Math.floor(broadcastWeekNumber % divider) === 0) {
80
- return divider;
81
- }
82
- return Math.floor(broadcastWeekNumber % divider);
83
- }
84
- ngAfterViewInit() {
85
- // CHANGES@ANNALIB Changed this.
86
- // this.calendar["__proto__"].getWeekNumber = this.getWeekNumber;
87
- Object.setPrototypeOf(this.calendar, { getWeekNumber: this.getWeekNumber });
88
- }
89
- ngOnInit() {
90
- // this.selectWeek(this.fromDate);
91
- this.setCalendarMap();
92
- }
93
- initializeWeekData() {
94
- this.weekObjects = [];
95
- this.fromDate = this.calendar.getToday();
96
- this.today = this.calendar.getToday();
97
- let backDatedPeriod = JSON.parse(localStorage.getItem("userDetails") || '{}').locking_period_days;
98
- if (backDatedPeriod < 0) {
99
- let date = this.calendar.getPrev(this.calendar.getToday(), "d", Math.abs(backDatedPeriod));
100
- this.today = NgbDate.from(date);
101
- this.fromDate = NgbDate.from(date);
102
- }
103
- // Disable months before numberOfMonthsToEnable
104
- this.datePickerConfig.markDisabled = (date) => {
105
- let previousMonth = this.calendar.getPrev(this.today, "m", this.config.numberOfMonthsToEnableInPast);
106
- let previousDay = this.calendar.getPrev(previousMonth, "d", 1);
107
- return !NgbDate.from(previousDay).before(date);
108
- };
109
- this.formatter = this.formattedDates();
110
- this.flag1 = false;
111
- this.flag2 = false;
112
- }
113
- selectWeek(date) {
114
- const dateObject = new Date(date.year, date.month - 1, date.day);
115
- let constructDate = this.buildDate(dateObject);
116
- if (!this.config.selectMultipleWeeks) {
117
- //Single week selection
118
- this.fromDate = this.constructStartDate(dateObject)(constructDate);
119
- this.toDate = this.constructEndDate(dateObject)(constructDate);
120
- this.weekNumberGenerator();
121
- }
122
- else {
123
- if (date.before(this.fromDate)) {
124
- this.fromDate = this.constructStartDate(dateObject)(constructDate);
125
- if (this.flag1) {
126
- this.toDate = this.constructEndDate(dateObject)(constructDate);
127
- }
128
- this.flag1 = !this.flag1;
129
- }
130
- else if (date.after(this.toDate)) {
131
- if (this.flag2) {
132
- this.fromDate = this.constructStartDate(dateObject)(constructDate);
133
- //this.toDate = this.constructEndDate(dateObject)(constructDate);
134
- }
135
- this.flag2 = !this.flag2;
136
- this.toDate = this.constructEndDate(dateObject)(constructDate);
137
- }
138
- else {
139
- this.fromDate = this.constructStartDate(dateObject)(constructDate);
140
- this.toDate = this.constructEndDate(dateObject)(constructDate);
141
- }
142
- if (this.disabledDates.length > 0) {
143
- let dayjsStartDate = dayjs(this.annaDateTimeFormatService.convertNgbDateToMoment(this.fromDate), "MM/DD/YYYY");
144
- let dayjsEndDate = dayjs(this.annaDateTimeFormatService.convertNgbDateToMoment(this.toDate), "MM/DD/YYYY");
145
- let ngbDate;
146
- while (!dayjsStartDate.isSame(dayjsEndDate)) {
147
- ngbDate = this.annaDateTimeFormatService.convertToNgbDate(dayjsStartDate, "MM/DD/YYYY");
148
- if (this.checkIfDateIsDisabled(ngbDate)) {
149
- break;
150
- }
151
- dayjsStartDate.add(1, "d");
152
- }
153
- let newDateObject = new Date(ngbDate.year, ngbDate.month - 1, ngbDate.day - 1);
154
- let constructDate = this.buildDate(newDateObject);
155
- this.toDate = this.constructEndDate(newDateObject)(constructDate);
156
- }
157
- this.weekNumberGenerator();
158
- }
159
- if (!this.config.showAsDropdown) {
160
- this.applyChanges();
161
- }
162
- }
163
- weekNumberGenerator() {
164
- let dates = [];
165
- let week = [];
166
- let startDate = NgbDate.from(this.fromDate);
167
- let endDate = NgbDate.from(this.toDate);
168
- week.push(startDate);
169
- while (endDate != null && !startDate.equals(endDate)) {
170
- let date = this.calendar.getNext(startDate, "d", 1);
171
- startDate = date;
172
- week.push(date);
173
- // Collect all days in week to calculate the week number
174
- if (week.length == 7) {
175
- dates.push(week);
176
- week = [];
177
- }
178
- }
179
- if (((this.config.maxWeeksToSelect ?? 0) > 0 && dates.length > (this.config.maxWeeksToSelect ?? 0))) {
180
- dates.splice((this.config.maxWeeksToSelect ?? 0), dates.length - (this.config.maxWeeksToSelect ?? 0));
181
- }
182
- this.selectedDates(dates);
183
- this.weekNumbers = [];
184
- this.weekObjects = [];
185
- if (dates.length > 0) {
186
- for (let date of dates) {
187
- this.weekNumbers.push(" Week " + this.calendar.getWeekNumber(date, this.config.firstDayOfWeek));
188
- let dates = this.formatter(date[0], date[6]);
189
- let dateObjects = { startDate: dates.formattedStartDate, endDate: dates.formattedEndDate };
190
- this.weekObjects.push(dateObjects);
191
- }
192
- }
193
- this.displayToUI();
194
- }
195
- selectedDates(dates) {
196
- this.fromDate = dates[0][0];
197
- this.toDate = dates[dates.length - 1][6];
198
- }
199
- formattedDates() {
200
- let pipe = new DatePipe("en-US");
201
- let thisObj = this;
202
- return function (fromDate, toDate) {
203
- let fromDateObject = new Date(fromDate.year, fromDate.month - 1, fromDate.day);
204
- let toDateObject = new Date(toDate.year, toDate.month - 1, toDate.day);
205
- thisObj.formattedStartDate = pipe.transform(fromDateObject, thisObj.config.dateFormatForRequest);
206
- thisObj.formattedEndDate = pipe.transform(toDateObject, thisObj.config.dateFormatForRequest);
207
- thisObj.dateToDisplay =
208
- pipe.transform(fromDateObject, thisObj.config.dateFormatToDisplay) +
209
- " to " +
210
- pipe.transform(toDateObject, thisObj.config.dateFormatToDisplay);
211
- return thisObj;
212
- };
213
- }
214
- displayToUI() {
215
- if (!this.config.selectMultipleWeeks && this.fromDate && this.toDate) {
216
- // Display for only Single Week
217
- this.formatter(this.fromDate, this.toDate);
218
- }
219
- else {
220
- // Display for Multiple Weeks
221
- if (this.weekNumbers.length > (this.config.maxWeeksToShowWithRemainingCount ?? 0)) {
222
- let weekDisplay = [];
223
- for (let i = 0; i < (this.config.maxWeeksToShowWithRemainingCount ?? 0); i++) {
224
- weekDisplay.push(this.weekNumbers.shift());
225
- }
226
- let remainingWeeks = this.weekNumbers.length;
227
- this.weekNumbers = [];
228
- this.weekNumbers.push(weekDisplay + " +" + remainingWeeks);
229
- }
230
- }
231
- }
232
- constructStartDate(date) {
233
- let firstDayOfWeek = this.config.firstDayOfWeek;
234
- return function (constructDate) {
235
- let startDay = date.getDay() != 0 ? (firstDayOfWeek ?? 0) - date.getDay() : -6;
236
- return constructDate(startDay);
237
- };
238
- }
239
- constructEndDate(date) {
240
- let firstDayOfWeek = this.config.firstDayOfWeek;
241
- return function (constructDate) {
242
- let endDay = date.getDay() != 0 ? (firstDayOfWeek ?? 0) + 6 - date.getDay() : 0;
243
- return constructDate(endDay);
244
- };
245
- }
246
- buildDate(date) {
247
- return function (number) {
248
- let day = date.getDate() + number;
249
- const dateObject = new Date(date.getFullYear(), date.getMonth(), day);
250
- let ngbDateObject = {};
251
- ngbDateObject.day = day;
252
- if (ngbDateObject.day > 31 || ngbDateObject.day < 1) {
253
- ngbDateObject.day = dateObject.getDate();
254
- }
255
- ngbDateObject.month = dateObject.getMonth() + 1;
256
- ngbDateObject.year = dateObject.getFullYear();
257
- return NgbDate.from(ngbDateObject);
258
- };
259
- }
260
- isHovered(date) {
261
- return this.fromDate && !this.toDate && this.hoveredDate && date.after(this.fromDate) && date.before(this.hoveredDate);
262
- }
263
- isInside(date) {
264
- return this.toDate && date.after(this.fromDate) && date.before(this.toDate);
265
- }
266
- isRange(date) {
267
- return (date.equals(this.fromDate) || (this.toDate && date.equals(this.toDate)) || this.isInside(date) || this.isHovered(date));
268
- }
269
- previousWeek() {
270
- if (this.fromDate) {
271
- this.toDate = this.calendar.getPrev(this.fromDate, "d", 1);
272
- this.fromDate = this.calendar.getPrev(this.fromDate, "d", this.calendar.getDaysPerWeek());
273
- }
274
- this.weekNumberGenerator();
275
- this.applyChanges();
276
- }
277
- nextWeek() {
278
- if (this.fromDate) {
279
- this.fromDate = this.calendar.getNext(this.fromDate, "d", this.calendar.getDaysPerWeek());
280
- this.toDate = this.calendar.getNext(this.fromDate, "d", this.calendar.getDaysPerWeek() - 1);
281
- }
282
- this.weekNumberGenerator();
283
- this.applyChanges();
284
- }
285
- setCalendarMap() {
286
- let dateObj = { fromDate: this.fromDate, toDate: this.toDate };
287
- this.calendarMap.set("oldDates", dateObj);
288
- }
289
- applyChanges() {
290
- this.multiSelectDropdownOpen = false;
291
- if (!this.config.emitMultipleWeekObjects) {
292
- let dates = {};
293
- let formattedDates = this.formatter(this.fromDate, this.toDate);
294
- dates.startDate = formattedDates.formattedStartDate;
295
- dates.endDate = formattedDates.formattedEndDate;
296
- this.applyWeekCalendarChanges.emit(dates);
297
- }
298
- else {
299
- this.applyWeekCalendarChanges.emit(this.weekObjects);
300
- }
301
- this.setCalendarMap();
302
- }
303
- isFocused(value) {
304
- this.calendarToggled.emit(value);
305
- }
306
- isDropdownOpenedForCalendar(datepicker) {
307
- this.datepicker = datepicker;
308
- if (this.datepicker.isOpen()) {
309
- this.revertDates();
310
- this.datepicker.close();
311
- this.multiSelectDropdownOpen = false;
312
- }
313
- else {
314
- this.datepicker.open();
315
- this.multiSelectDropdownOpen = true;
316
- }
317
- }
318
- revertDates() {
319
- this.multiSelectDropdownOpen = false;
320
- if (this.calendarMap.get("oldDates")) {
321
- let dateObj = this.calendarMap.get("oldDates");
322
- this.fromDate = dateObj.fromDate;
323
- this.toDate = dateObj.toDate;
324
- this.weekNumberGenerator();
325
- this.displayToUI();
326
- }
327
- }
328
- checkIfDateIsDisabled(date) {
329
- const validatorFunc = (ngbDate) => ngbDate.year === date.year && ngbDate.month === date.month && ngbDate.day === date.day;
330
- return this.disabledDates.some(validatorFunc);
331
- }
332
- closeDatepicker(datepickerRef) {
333
- datepickerRef.close();
334
- }
335
- }
336
- AnnaWeekCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AnnaWeekCalendarComponent, deps: [{ token: i1.NgbCalendar }, { token: i1.NgbDatepickerConfig }, { token: i2.AnnaDateTimeFormatService }, { token: i3.AnnaGlobalConfigService }], target: i0.ɵɵFactoryTarget.Component });
337
- AnnaWeekCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AnnaWeekCalendarComponent, selector: "anna-core-week-calendar-filter-lib", inputs: { selectedFromDate: ["from-date", "selectedFromDate"], selectedEndDate: ["to-date", "selectedEndDate"], disabledDates: ["disabled-dates", "disabledDates"], maxDate: "maxDate", minDate: "minDate", config: ["week-calendar-config", "config"] }, outputs: { applyWeekCalendarChanges: "apply", calendarToggled: "toggle-calendar" }, usesOnChanges: true, ngImport: i0, template: "<form class=\"form-inline\" *ngIf=\"config.showAsDropdown\">\r\n <div class=\"form-group hidden\">\r\n <div class=\"input-group\">\r\n <input\r\n name=\"datepicker\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n [autoClose]=\"false\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n (closed)=\"isFocused(false)\"\r\n [displayMonths]=\"1\"\r\n [dayTemplate]=\"t\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n tabindex=\"-1\"\r\n style=\"display: none\"\r\n [footerTemplate]=\"footerTemplate\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!--Single week select-->\r\n <div *ngIf=\"!config.selectMultipleWeeks\">\r\n <span style=\"position: relative; left: 30px; font-size: 12px\"> &nbsp;{{ weekNumbers }} </span>\r\n <div class=\"form-group\">\r\n <div class=\"input-group\">\r\n <div class=\"single-week\">\r\n <div class=\"left\">\r\n <span class=\"material-icons next-round-btn\" (click)=\"previousWeek()\"> navigate_next </span>\r\n </div>\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass == '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [value]=\"dateToDisplay\"\r\n [readonly]=\"true\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i class=\"mdi mdi-menu-down\" *ngIf='!datepicker.isOpen()' (click)=\"datepicker.open()\"></i>\r\n <i class='mdi mdi-menu-up' *ngIf=\"datepicker.isOpen()\" (click)=\"isDropdownOpenedForCalendar(datepicker)\"></i>\r\n <div class=\"right\">\r\n <span class=\"material-icons round-btn\" (click)=\"nextWeek()\"> navigate_next </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Multiple week select-->\r\n <div class=\"form-group\" *ngIf=\"config.selectMultipleWeeks\">\r\n <div class=\"input-group\">\r\n <div class=\"multiple-weeks\">\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass == '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [readonly]=\"true\"\r\n [value]=\"weekNumbers\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i *ngIf=\"!multiSelectDropdownOpen\" class=\"mdi mdi-menu-down multiselect-input-arrow\"></i>\r\n <i *ngIf=\"multiSelectDropdownOpen\" class=\"mdi mdi-menu-up multiselect-input-arrow\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<ngb-datepicker\r\n #weekPicker\r\n *ngIf=\"!config.showAsDropdown\"\r\n [displayMonths]=\"1\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n [dayTemplate]=\"t\"\r\n [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n [markDisabled]=\"disabledFunc\"\r\n>\r\n</ngb-datepicker>\r\n\r\n<ng-template #footerTemplate>\r\n <hr class=\"my-0\" />\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right\"\r\n (click)=\"applyChanges(); closeDatepicker(datepicker)\"\r\n style=\"background-color: #268bff; color: #ffffff\"\r\n >\r\n Apply\r\n </button>\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right\"\r\n (click)=\"revertDates(); closeDatepicker(datepicker)\"\r\n style=\"background-color: rgba(38, 139, 255, 0.12); color: #268bff\"\r\n >\r\n Cancel\r\n </button>\r\n</ng-template>\r\n\r\n<ng-template #t let-date let-focused=\"focused\" let-disabled=\"disabled\">\r\n <span\r\n class=\"custom-day\"\r\n [class.focused]=\"focused\"\r\n [class.range]=\"isRange(date)\"\r\n [class.faded]=\"isHovered(date) || isInside(date)\"\r\n [class.disabled]=\"disabled\"\r\n (mouseenter)=\"hoveredDate = date\"\r\n (mouseleave)=\"hoveredDate = null\"\r\n >\r\n {{ date.day }}\r\n </span>\r\n</ng-template>\r\n\r\n<!--\r\n\r\n<hr>\r\n\r\n<pre>From: {{ fromDate | json }} </pre>\r\n<pre>To: {{ toDate | json }} </pre>\r\n<pre>weekNumbers: {{ weekNumbers | json }} </pre>\r\n\r\n-->\r\n", styles: [":host ::ng-deep .ngb-dp-arrow button:disabled{color:#4a4a4a;background-color:#fff;opacity:.25;cursor:not-allowed}:host ::ng-deep .ngb-dp-arrow button:disabled .ngb-dp-navigation-chevron{color:#4a4a4a}:host ::ng-deep .ngb-dp-arrow button .ngb-dp-navigation-chevron{color:#000}:host::ng-deep .right{width:unset!important;background-color:#fff!important}:host::ng-deep .ngb-dp-day,:host::ng-deep .ngb-dp-weekday{width:3rem!important;font-style:unset!important;color:#8bac2a;outline:none}:host::ng-deep .ngb-dp-day:first-child{border:1px solid black}:host::ng-deep .ngb-dp-day.disabled{color:#d4d4d4;cursor:not-allowed}:host::ng-deep .ngb-dp-showweek:before{content:\"Weeks\";margin-right:5px}:host::ng-deep .ngb-dp-week-number{font-style:unset!important;width:4rem!important;margin-right:5px;font-weight:700;color:#000!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-week-number:before{font-style:unset!important;content:\"Week \"}:host::ng-deep .ngb-dp-weekday.ngb-dp-showweek{margin-right:5px;width:4rem!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .dropdown-menu{box-shadow:none}:host::ng-deep .dropdown-menu.show{top:15px!important}:host::ng-deep .bg-light{background-color:#fff!important}:host::ng-deep .ngb-dp-weekdays{border-top:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-arrow-btn:focus{box-shadow:none}.custom-day{text-align:center;padding:.185rem .25rem;display:inline-block;height:1.75rem;font-weight:700;color:#222b45;width:3rem!important}.custom-day.focused{background-color:#fff}.custom-day.faded{background-color:#0275d880!important}.custom-day.faded:focus{outline:none!important}.custom-day:hover{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day:focus{outline:none!important}.custom-day.range{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day.range:focus{outline:none!important}.custom-day.disabled{color:#d3d3d3}.input-group>.single-week,.input-group .multiple-weeks{display:inline-flex!important}.input-group>.single-week>.form-control,.input-group .multiple-weeks>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.input-group>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.form-control[readonly]{background-color:#fff!important}.next-round-btn{transform:rotate(180deg);margin-left:.125rem;line-height:1.3;border-radius:50%;cursor:pointer}.round-btn{line-height:1.3;border-radius:50%;cursor:pointer;margin-left:.25rem}:host::ng-deep select.custom-select{background:none;appearance:auto}.left,.right{width:1.875rem!important;height:1.875rem;background:#d8d8d8!important;border-radius:50%}.left{margin-right:.3125rem}.right{margin-left:.3125rem}:host::ng-deep .right .ngb-dp-navigation-chevron,:host::ng-deep .ngb-dp-navigation-chevron{color:#268bff}:host::ng-deep .ngb-dp-arrow-btn:focus{outline-width:0px}.custom-day.faded{background-color:#268bff33!important;color:#000!important;font-weight:600}.custom-day{text-align:center;padding:.185rem .25rem;color:#000;display:inline-block;line-height:1.9;height:2rem;width:2rem}.custom-day.focused{background-color:#e6e6e6}.custom-day.range{background-color:#268bff!important;color:#fff!important;font-weight:600}.custom-day:hover{background-color:#d9e1e6;border-radius:.25rem;color:#bdbdbd}:host::ng-deep div.ngb-dp-weekday{color:#8bac2a;font-family:Roboto;font-size:.8125rem;font-weight:700;font-stretch:normal;font-style:normal;line-height:2.6;letter-spacing:normal}.mdi-menu-up,.mdi-menu-down{position:absolute;right:2.438rem;top:1px;font-size:1.375rem;cursor:pointer}.multiselect-input-arrow{position:absolute;right:.75rem;top:3px;font-size:1.25rem;cursor:pointer;pointer-events:none}button:focus{outline:none;box-shadow:none;border-color:transparent}::ng-deep .ngb-dp-header,::ng-deep .ngb-dp-week{background:white!important}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.NgbDatepicker, selector: "ngb-datepicker", inputs: ["contentTemplate", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "maxDate", "minDate", "navigation", "outsideDays", "showWeekNumbers", "startDate", "weekdays"], outputs: ["navigate", "dateSelect"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: i1.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] });
338
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AnnaWeekCalendarComponent, decorators: [{
339
- type: Component,
340
- args: [{ selector: "anna-core-week-calendar-filter-lib", template: "<form class=\"form-inline\" *ngIf=\"config.showAsDropdown\">\r\n <div class=\"form-group hidden\">\r\n <div class=\"input-group\">\r\n <input\r\n name=\"datepicker\"\r\n class=\"form-control\"\r\n ngbDatepicker\r\n #datepicker=\"ngbDatepicker\"\r\n [autoClose]=\"false\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n (closed)=\"isFocused(false)\"\r\n [displayMonths]=\"1\"\r\n [dayTemplate]=\"t\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n tabindex=\"-1\"\r\n style=\"display: none\"\r\n [footerTemplate]=\"footerTemplate\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <!--Single week select-->\r\n <div *ngIf=\"!config.selectMultipleWeeks\">\r\n <span style=\"position: relative; left: 30px; font-size: 12px\"> &nbsp;{{ weekNumbers }} </span>\r\n <div class=\"form-group\">\r\n <div class=\"input-group\">\r\n <div class=\"single-week\">\r\n <div class=\"left\">\r\n <span class=\"material-icons next-round-btn\" (click)=\"previousWeek()\"> navigate_next </span>\r\n </div>\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass == '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [value]=\"dateToDisplay\"\r\n [readonly]=\"true\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i class=\"mdi mdi-menu-down\" *ngIf='!datepicker.isOpen()' (click)=\"datepicker.open()\"></i>\r\n <i class='mdi mdi-menu-up' *ngIf=\"datepicker.isOpen()\" (click)=\"isDropdownOpenedForCalendar(datepicker)\"></i>\r\n <div class=\"right\">\r\n <span class=\"material-icons round-btn\" (click)=\"nextWeek()\"> navigate_next </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Multiple week select-->\r\n <div class=\"form-group\" *ngIf=\"config.selectMultipleWeeks\">\r\n <div class=\"input-group\">\r\n <div class=\"multiple-weeks\">\r\n <input\r\n #dpFromDate\r\n class=\"form-control\"\r\n placeholder=\"Select Weeks\"\r\n [ngClass]=\"[config.customClass == '' ? '' : config.customClass]\"\r\n name=\"dpFromDate\"\r\n [readonly]=\"true\"\r\n [value]=\"weekNumbers\"\r\n (click)=\"isFocused(true); isDropdownOpenedForCalendar(datepicker)\"\r\n />\r\n <i *ngIf=\"!multiSelectDropdownOpen\" class=\"mdi mdi-menu-down multiselect-input-arrow\"></i>\r\n <i *ngIf=\"multiSelectDropdownOpen\" class=\"mdi mdi-menu-up multiselect-input-arrow\"></i>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n\r\n<ngb-datepicker\r\n #weekPicker\r\n *ngIf=\"!config.showAsDropdown\"\r\n [displayMonths]=\"1\"\r\n [startDate]=\"fromDate!\"\r\n [firstDayOfWeek]=\"config.firstDayOfWeek\"\r\n [showWeekNumbers]=\"config.showWeekNumbers\"\r\n [dayTemplate]=\"t\"\r\n [maxDate]=\"maxDate\"\r\n [minDate]=\"minDate\"\r\n (dateSelect)=\"selectWeek($event)\"\r\n [markDisabled]=\"disabledFunc\"\r\n>\r\n</ngb-datepicker>\r\n\r\n<ng-template #footerTemplate>\r\n <hr class=\"my-0\" />\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right\"\r\n (click)=\"applyChanges(); closeDatepicker(datepicker)\"\r\n style=\"background-color: #268bff; color: #ffffff\"\r\n >\r\n Apply\r\n </button>\r\n <button\r\n class=\"btn btn-primary btn-sm m-2 float-right\"\r\n (click)=\"revertDates(); closeDatepicker(datepicker)\"\r\n style=\"background-color: rgba(38, 139, 255, 0.12); color: #268bff\"\r\n >\r\n Cancel\r\n </button>\r\n</ng-template>\r\n\r\n<ng-template #t let-date let-focused=\"focused\" let-disabled=\"disabled\">\r\n <span\r\n class=\"custom-day\"\r\n [class.focused]=\"focused\"\r\n [class.range]=\"isRange(date)\"\r\n [class.faded]=\"isHovered(date) || isInside(date)\"\r\n [class.disabled]=\"disabled\"\r\n (mouseenter)=\"hoveredDate = date\"\r\n (mouseleave)=\"hoveredDate = null\"\r\n >\r\n {{ date.day }}\r\n </span>\r\n</ng-template>\r\n\r\n<!--\r\n\r\n<hr>\r\n\r\n<pre>From: {{ fromDate | json }} </pre>\r\n<pre>To: {{ toDate | json }} </pre>\r\n<pre>weekNumbers: {{ weekNumbers | json }} </pre>\r\n\r\n-->\r\n", styles: [":host ::ng-deep .ngb-dp-arrow button:disabled{color:#4a4a4a;background-color:#fff;opacity:.25;cursor:not-allowed}:host ::ng-deep .ngb-dp-arrow button:disabled .ngb-dp-navigation-chevron{color:#4a4a4a}:host ::ng-deep .ngb-dp-arrow button .ngb-dp-navigation-chevron{color:#000}:host::ng-deep .right{width:unset!important;background-color:#fff!important}:host::ng-deep .ngb-dp-day,:host::ng-deep .ngb-dp-weekday{width:3rem!important;font-style:unset!important;color:#8bac2a;outline:none}:host::ng-deep .ngb-dp-day:first-child{border:1px solid black}:host::ng-deep .ngb-dp-day.disabled{color:#d4d4d4;cursor:not-allowed}:host::ng-deep .ngb-dp-showweek:before{content:\"Weeks\";margin-right:5px}:host::ng-deep .ngb-dp-week-number{font-style:unset!important;width:4rem!important;margin-right:5px;font-weight:700;color:#000!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-week-number:before{font-style:unset!important;content:\"Week \"}:host::ng-deep .ngb-dp-weekday.ngb-dp-showweek{margin-right:5px;width:4rem!important;border-right:1px solid rgba(0,0,0,.125)}:host::ng-deep .dropdown-menu{box-shadow:none}:host::ng-deep .dropdown-menu.show{top:15px!important}:host::ng-deep .bg-light{background-color:#fff!important}:host::ng-deep .ngb-dp-weekdays{border-top:1px solid rgba(0,0,0,.125)}:host::ng-deep .ngb-dp-arrow-btn:focus{box-shadow:none}.custom-day{text-align:center;padding:.185rem .25rem;display:inline-block;height:1.75rem;font-weight:700;color:#222b45;width:3rem!important}.custom-day.focused{background-color:#fff}.custom-day.faded{background-color:#0275d880!important}.custom-day.faded:focus{outline:none!important}.custom-day:hover{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day:focus{outline:none!important}.custom-day.range{background-color:#268bff1f!important;color:#4a4a4a!important}.custom-day.range:focus{outline:none!important}.custom-day.disabled{color:#d3d3d3}.input-group>.single-week,.input-group .multiple-weeks{display:inline-flex!important}.input-group>.single-week>.form-control,.input-group .multiple-weeks>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.input-group>.form-control{width:212px;border-radius:2px;border:solid 1px #b3b3b3;height:1.875rem;cursor:pointer}.form-control[readonly]{background-color:#fff!important}.next-round-btn{transform:rotate(180deg);margin-left:.125rem;line-height:1.3;border-radius:50%;cursor:pointer}.round-btn{line-height:1.3;border-radius:50%;cursor:pointer;margin-left:.25rem}:host::ng-deep select.custom-select{background:none;appearance:auto}.left,.right{width:1.875rem!important;height:1.875rem;background:#d8d8d8!important;border-radius:50%}.left{margin-right:.3125rem}.right{margin-left:.3125rem}:host::ng-deep .right .ngb-dp-navigation-chevron,:host::ng-deep .ngb-dp-navigation-chevron{color:#268bff}:host::ng-deep .ngb-dp-arrow-btn:focus{outline-width:0px}.custom-day.faded{background-color:#268bff33!important;color:#000!important;font-weight:600}.custom-day{text-align:center;padding:.185rem .25rem;color:#000;display:inline-block;line-height:1.9;height:2rem;width:2rem}.custom-day.focused{background-color:#e6e6e6}.custom-day.range{background-color:#268bff!important;color:#fff!important;font-weight:600}.custom-day:hover{background-color:#d9e1e6;border-radius:.25rem;color:#bdbdbd}:host::ng-deep div.ngb-dp-weekday{color:#8bac2a;font-family:Roboto;font-size:.8125rem;font-weight:700;font-stretch:normal;font-style:normal;line-height:2.6;letter-spacing:normal}.mdi-menu-up,.mdi-menu-down{position:absolute;right:2.438rem;top:1px;font-size:1.375rem;cursor:pointer}.multiselect-input-arrow{position:absolute;right:.75rem;top:3px;font-size:1.25rem;cursor:pointer;pointer-events:none}button:focus{outline:none;box-shadow:none;border-color:transparent}::ng-deep .ngb-dp-header,::ng-deep .ngb-dp-week{background:white!important}\n"] }]
341
- }], ctorParameters: function () { return [{ type: i1.NgbCalendar }, { type: i1.NgbDatepickerConfig }, { type: i2.AnnaDateTimeFormatService }, { type: i3.AnnaGlobalConfigService }]; }, propDecorators: { selectedFromDate: [{
342
- type: Input,
343
- args: ["from-date"]
344
- }], selectedEndDate: [{
345
- type: Input,
346
- args: ["to-date"]
347
- }], disabledDates: [{
348
- type: Input,
349
- args: ["disabled-dates"]
350
- }], maxDate: [{
351
- type: Input
352
- }], minDate: [{
353
- type: Input
354
- }], config: [{
355
- type: Input,
356
- args: ["week-calendar-config"]
357
- }], applyWeekCalendarChanges: [{
358
- type: Output,
359
- args: ["apply"]
360
- }], calendarToggled: [{
361
- type: Output,
362
- args: ["toggle-calendar"]
363
- }] } });
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWRyb3Bkb3duLWxpYi9jb21wb25lbnRzL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIvYW5uYS13ZWVrLWNhbGVuZGFyLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFeEgsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFxQyxNQUFNLDRCQUE0QixDQUFDO0FBQzFILE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUcxQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQzs7Ozs7OztBQUU1RyxpQ0FBaUM7QUFTakMsTUFBTSxPQUFPLHlCQUF5QjtJQWdFcEMsWUFDVSxRQUFxQixFQUNyQixnQkFBcUMsRUFDckMseUJBQW9ELEVBQ3BELG1CQUE0QztRQUg1QyxhQUFRLEdBQVIsUUFBUSxDQUFhO1FBQ3JCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBcUI7UUFDckMsOEJBQXlC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LENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGVBQWUsQ0FBQyxhQUFrQjtRQUNoQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs7dUhBdllVLHlCQUF5QjsyR0FBekIseUJBQXlCLDZhQ3JCdEMsd2lLQWlJQTs0RkQ1R2EseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLG9DQUFvQztrTkF3QjFCLGdCQUFnQjtzQkFBbkMsS0FBSzt1QkFBQyxXQUFXO2dCQUNBLGVBQWU7c0JBQWhDLEtBQUs7dUJBQUMsU0FBUztnQkFDUyxhQUFhO3NCQUFyQyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFDZCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQVF5QixNQUFNO3NCQUFwQyxLQUFLO3VCQUFDLHNCQUFzQjtnQkFDWix3QkFBd0I7c0JBQXhDLE1BQU07dUJBQUMsT0FBTztnQkFDWSxlQUFlO3NCQUF6QyxNQUFNO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vLyBUaGlyZCBwYXJ0eSBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBOZ2JDYWxlbmRhciwgTmdiRGF0ZSwgTmdiRGF0ZXBpY2tlckNvbmZpZywgTmdiRGF0ZVN0cnVjdCwgTmdiSW5wdXREYXRlcGlja2VyIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuaW1wb3J0IHsgV2Vla09iamVjdCB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdlbmVyaWMtZGF0YS10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgSVdlZWtDYWxlbmRhciB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdsb2JhbC1kcm9wZG93bi1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1kYXRlLXRpbWUtZm9ybWF0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbm5hR2xvYmFsQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZ2xvYmFsLWNvbmZpZy5zZXJ2aWNlJztcclxuXHJcbi8vIFVzZXIgZGVmaW5lZCBpbXBvcnQgc3RhdGVtZW50c1xyXG5cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhbm5hLWNvcmUtd2Vlay1jYWxlbmRhci1maWx0ZXItbGliXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9hbm5hLXdlZWstY2FsZW5kYXItZmlsdGVyLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2FubmEtd2Vlay1jYWxlbmRhci1maWx0ZXIuY29tcG9uZW50LnNjc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hV2Vla0NhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gIGZyb21EYXRlOiBOZ2JEYXRlIHwgbnVsbDtcclxuICBob3ZlcmVkRGF0ZTogTmdiRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gIHRvRGF0ZTogTmdiRGF0ZSB8IG51bGwgPSBudWxsO1xyXG4gIHRvZGF5OiBOZ2JEYXRlO1xyXG5cclxuICBtb2RlbDogTmdiRGF0ZVN0cnVjdDtcclxuXHJcbiAgd2Vla051bWJlcnM6IHN0cmluZ1tdID0gW107XHJcbiAgcGlwZTogRGF0ZVBpcGU7XHJcbiAgZGF0ZVRvRGlzcGxheTogc3RyaW5nID0gXCJcIjtcclxuICB3ZWVrT2JqZWN0czogV2Vla09iamVjdFtdO1xyXG4gIG11bHRpU2VsZWN0RHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGF0ZXBpY2tlcjogTmdiSW5wdXREYXRlcGlja2VyO1xyXG4gIHByaXZhdGUgZm9ybWF0dGVyOiBhbnk7XHJcbiAgcHVibGljIGZvcm1hdHRlZFN0YXJ0RGF0ZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBmb3JtYXR0ZWRFbmREYXRlOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBjYWxlbmRhck1hcCA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGZsYWcxOiBib29sZWFuO1xyXG4gIHByaXZhdGUgZmxhZzI6IGJvb2xlYW47XHJcbiAgQElucHV0KFwiZnJvbS1kYXRlXCIpIHNlbGVjdGVkRnJvbURhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgQElucHV0KFwidG8tZGF0ZVwiKSBzZWxlY3RlZEVuZERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgQElucHV0KFwiZGlzYWJsZWQtZGF0ZXNcIikgZGlzYWJsZWREYXRlczogTmdiRGF0ZVtdID0gW107XHJcbiAgQElucHV0KCkgbWF4RGF0ZTogYW55O1xyXG4gIEBJbnB1dCgpIG1pbkRhdGU6IGFueTtcclxuXHJcbiAgZGlzYWJsZWRGdW5jOiBhbnk7XHJcbiAgc3RhdGU6IGFueTtcclxuXHJcbiAgLy9TZXR0aW5nIHRoZSBkZWZhdWx0IHZhbHVlcztcclxuICBwcml2YXRlIF9kZWZhdWx0VmFsdWVzOiBJV2Vla0NhbGVuZGFyO1xyXG5cclxuICBASW5wdXQoXCJ3ZWVrLWNhbGVuZGFyLWNvbmZpZ1wiKSBjb25maWc6IElXZWVrQ2FsZW5kYXI7XHJcbiAgQE91dHB1dChcImFwcGx5XCIpIGFwcGx5V2Vla0NhbGVuZGFyQ2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KFwidG9nZ2xlLWNhbGVuZGFyXCIpIGNhbGVuZGFyVG9nZ2xlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgLy9pZiBzb21lIHZhbHVlcyBhcmUgbm90IHNlbnQsIHNldHRpbmcgdGhlIGRlZmF1bHQgdmFsdWVzXHJcbiAgICB0aGlzLl9kZWZhdWx0VmFsdWVzID0gdGhpcy5nbG9iYWxDb25maWdTZXJ2aWNlLmRlZmF1bHRXZWVrQ2FsZW5kYXJDb25maWc7XHJcbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5fZGVmYXVsdFZhbHVlcywgLi4udGhpcy5jb25maWcgfTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuc2VsZWN0Q3VycmVudFdlZWspIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplV2Vla0RhdGEoKTtcclxuICAgICAgdGhpcy5mcm9tRGF0ZSAmJiB0aGlzLnNlbGVjdFdlZWsodGhpcy5mcm9tRGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mb3JtYXR0ZXIgPSB0aGlzLmZvcm1hdHRlZERhdGVzKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGcm9tRGF0ZSAmJiB0aGlzLnNlbGVjdGVkRW5kRGF0ZSAmJiB0aGlzLmNvbmZpZykge1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdFdlZWsodGhpcy5mcm9tRGF0ZSk7XHJcbiAgICAgIHRoaXMuZnJvbURhdGUgPSBOZ2JEYXRlLmZyb20odGhpcy5zZWxlY3RlZEZyb21EYXRlKTtcclxuICAgICAgdGhpcy50b0RhdGUgPSBOZ2JEYXRlLmZyb20odGhpcy5zZWxlY3RlZEVuZERhdGUpO1xyXG4gICAgICB0aGlzLndlZWtOdW1iZXJHZW5lcmF0b3IoKTtcclxuICAgICAgdGhpcy5kaXNwbGF5VG9VSSgpO1xyXG4gICAgICB0aGlzLnNldENhbGVuZGFyTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWREYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWRGdW5jID0gKGRhdGU6IE5nYkRhdGUsIGN1cnJlbnQ6IHsgbW9udGg6IG51bWJlciB9KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tJZkRhdGVJc0Rpc2FibGVkKGRhdGUpO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNhbGVuZGFyOiBOZ2JDYWxlbmRhcixcclxuICAgIHByaXZhdGUgZGF0ZVBpY2tlckNvbmZpZzogTmdiRGF0ZXBpY2tlckNvbmZpZyxcclxuICAgIHByaXZhdGUgYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZTogQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSxcclxuICAgIHByaXZhdGUgZ2xvYmFsQ29uZmlnU2VydmljZTogQW5uYUdsb2JhbENvbmZpZ1NlcnZpY2VcclxuICApIHsgfVxyXG5cclxuXHJcbiAgZ2V0V2Vla051bWJlcih3ZWVrOiBhbnksIGZpcnN0RGF5T2ZXZWVrOiBhbnkpIHtcclxuICAgIGNvbnN0IHdlZWtTdGFydERhdGUgPSBkYXlqcyhjb252ZXJ0TmdiRGF0ZVRvTW9tZW50KHdlZWtbMF0pLCBcIk1NL0REL1lZWVlcIik7XHJcbiAgICBjb25zdCB3ZWVrWWVhciA9IHdlZWtTdGFydERhdGUueWVhcigpO1xyXG4gICAgY29uc3QgeWVhclN0YXJ0RGF0ZSA9IGRheWpzKGAwMS8wMS8ke3dlZWtZZWFyfWAsIFwiTU0vREQvWVlZWVwiKTtcclxuICAgIGNvbnN0IHdlZWtEYXkgPSB5ZWFyU3RhcnREYXRlLmRheSgpO1xyXG5cclxuICAgIGNvbnN0IG5vT2ZEYXlzID0gd2Vla1N0YXJ0RGF0ZS5kaWZmKHllYXJTdGFydERhdGUsIFwiZFwiKSArIDE7XHJcblxyXG4gICAgZnVuY3Rpb24gY29udmVydE5nYkRhdGVUb01vbWVudChuZ2JEYXRlOiBOZ2JEYXRlKTogc3RyaW5nIHtcclxuICAgICAgbGV0IGZvcm1hdFR5cGUgPSBcIk1NL0REL1lZWVlcIjtcclxuICAgICAgbGV0IGNvbnZlcnRlZCA9IG51bGw7XHJcbiAgICAgIGlmKG5nYkRhdGUgJiYgbmdiRGF0ZS5tb250aCAmJiBuZ2JEYXRlLmRheSAmJiBuZ2JEYXRlLnllYXIpe1xyXG4gICAgICAgIGNvbnZlcnRlZCA9IG5nYkRhdGUubW9udGgrIFwiL1wiICsgIG5nYkRhdGUuZGF5ICsgXCIvXCIgKyBuZ2JEYXRlLnllYXI7XHJcbiAgICAgICAgY29udmVydGVkID0gZGF5anMoY29udmVydGVkKS5mb3JtYXQoZm9ybWF0VHlwZSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbnZlcnRlZDtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBjaGVja0lmWWVhcklzQnJvYWRjYXN0TGVhcFllYXIoKSB7XHJcbiAgICAgIGxldCBpc0xlYXBZZWFyID0gKHdlZWtZZWFyICUgNCA9PSAwICYmIHdlZWtZZWFyICUgMTAwICE9IDApIHx8IHdlZWtZZWFyICUgNDAwID09IDA7XHJcbiAgICAgIHJldHVybiAoaXNMZWFwWWVhciAmJiAod2Vla0RheSA9PSAwIHx8IHdlZWtEYXkgPT0gNikpIHx8ICghaXNMZWFwWWVhciAmJiB3ZWVrRGF5ID09IDApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGlzTGVhcFllYXIgPSBjaGVja0lmWWVhcklzQnJvYWRjYXN0TGVhcFllYXIoKTtcclxuICAgIGNvbnN0IGRpdmlkZXIgPSBpc0xlYXBZZWFyID8gNTMgOiA1MjtcclxuICAgIGNvbnN0IGFkZGVyID0gaXNMZWFwWWVhciA/IDIgOiAxO1xyXG5cclxuICAgIGxldCBicm9hZGNhc3ROdW1iZXJPZkRheXMgPSB3ZWVrRGF5ICsgbm9PZkRheXM7XHJcbiAgICBsZXQgYnJvYWRjYXN0V2Vla051bWJlciA9IGJyb2FkY2FzdE51bWJlck9mRGF5cyAlIDcgPiAwID8gYnJvYWRjYXN0TnVtYmVyT2ZEYXlzIC8gNyArIGFkZGVyIDogYnJvYWRjYXN0TnVtYmVyT2ZEYXlzIC8gNztcclxuXHJcbiAgICBpZiAoTWF0aC5mbG9vcihicm9hZGNhc3RXZWVrTnVtYmVyICUgZGl2aWRlcikgPT09IDApIHtcclxuICAgICAgcmV0dXJuIGRpdmlkZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gTWF0aC5mbG9vcihicm9hZGNhc3RXZWVrTnVtYmVyICUgZGl2aWRlcik7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvLyBDSEFOR0VTQEFOTkFMSUIgQ2hhbmdlZCB0aGlzLlxyXG4gICAgLy8gdGhpcy5jYWxlbmRhcltcIl9fcHJvdG9fX1wiXS5nZXRXZWVrTnVtYmVyID0gdGhpcy5nZXRXZWVrTnVtYmVyO1xyXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMuY2FsZW5kYXIsIHtnZXRXZWVrTnVtYmVyOiB0aGlzLmdldFdlZWtOdW1iZXJ9KVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyB0aGlzLnNlbGVjdFdlZWsodGhpcy5mcm9tRGF0ZSk7XHJcbiAgICB0aGlzLnNldENhbGVuZGFyTWFwKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplV2Vla0RhdGEoKSB7XHJcbiAgICB0aGlzLndlZWtPYmplY3RzID0gW107XHJcblxyXG4gICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0VG9kYXkoKTtcclxuICAgIHRoaXMudG9kYXkgPSB0aGlzLmNhbGVuZGFyLmdldFRvZGF5KCk7XHJcblxyXG4gICAgbGV0IGJhY2tEYXRlZFBlcmlvZCA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyRGV0YWlsc1wiKSB8fCAne30nKS5sb2NraW5nX3BlcmlvZF9kYXlzO1xyXG4gICAgaWYgKGJhY2tEYXRlZFBlcmlvZCA8IDApIHtcclxuICAgICAgbGV0IGRhdGU6IE5nYkRhdGUgPSB0aGlzLmNhbGVuZGFyLmdldFByZXYodGhpcy5jYWxlbmRhci5nZXRUb2RheSgpLCBcImRcIiwgTWF0aC5hYnMoYmFja0RhdGVkUGVyaW9kKSk7XHJcbiAgICAgIHRoaXMudG9kYXkgPSBOZ2JEYXRlLmZyb20oZGF0ZSk7XHJcbiAgICAgIHRoaXMuZnJvbURhdGUgPSBOZ2JEYXRlLmZyb20oZGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGlzYWJsZSBtb250aHMgYmVmb3JlIG51bWJlck9mTW9udGhzVG9FbmFibGVcclxuICAgIHRoaXMuZGF0ZVBpY2tlckNvbmZpZy5tYXJrRGlzYWJsZWQgPSAoZGF0ZTogTmdiRGF0ZVN0cnVjdCkgPT4ge1xyXG4gICAgICBsZXQgcHJldmlvdXNNb250aCA9IHRoaXMuY2FsZW5kYXIuZ2V0UHJldih0aGlzLnRvZGF5LCBcIm1cIiwgdGhpcy5jb25maWcubnVtYmVyT2ZNb250aHNUb0VuYWJsZUluUGFzdCk7XHJcbiAgICAgIGxldCBwcmV2aW91c0RheSA9IHRoaXMuY2FsZW5kYXIuZ2V0UHJldihwcmV2aW91c01vbnRoLCBcImRcIiwgMSk7XHJcbiAgICAgIHJldHVybiAhTmdiRGF0ZS5mcm9tKHByZXZpb3VzRGF5KS5iZWZvcmUoZGF0ZSk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5mb3JtYXR0ZXIgPSB0aGlzLmZvcm1hdHRlZERhdGVzKCk7XHJcbiAgICB0aGlzLmZsYWcxID0gZmFsc2U7XHJcbiAgICB0aGlzLmZsYWcyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RXZWVrKGRhdGU6IE5nYkRhdGUpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRhdGVPYmplY3QgPSBuZXcgRGF0ZShkYXRlLnllYXIsIGRhdGUubW9udGggLSAxLCBkYXRlLmRheSk7XHJcbiAgICBsZXQgY29uc3RydWN0RGF0ZSA9IHRoaXMuYnVpbGREYXRlKGRhdGVPYmplY3QpO1xyXG5cclxuICAgIGlmICghdGhpcy5jb25maWcuc2VsZWN0TXVsdGlwbGVXZWVrcykge1xyXG4gICAgICAvL1NpbmdsZSB3ZWVrIHNlbGVjdGlvblxyXG4gICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5jb25zdHJ1Y3RTdGFydERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICB0aGlzLndlZWtOdW1iZXJHZW5lcmF0b3IoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChkYXRlLmJlZm9yZSh0aGlzLmZyb21EYXRlKSkge1xyXG4gICAgICAgIHRoaXMuZnJvbURhdGUgPSB0aGlzLmNvbnN0cnVjdFN0YXJ0RGF0ZShkYXRlT2JqZWN0KShjb25zdHJ1Y3REYXRlKTtcclxuICAgICAgICBpZiAodGhpcy5mbGFnMSkge1xyXG4gICAgICAgICAgdGhpcy50b0RhdGUgPSB0aGlzLmNvbnN0cnVjdEVuZERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmxhZzEgPSAhdGhpcy5mbGFnMTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRlLmFmdGVyKHRoaXMudG9EYXRlKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZsYWcyKSB7XHJcbiAgICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5jb25zdHJ1Y3RTdGFydERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgICAgICAvL3RoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZsYWcyID0gIXRoaXMuZmxhZzI7XHJcbiAgICAgICAgdGhpcy50b0RhdGUgPSB0aGlzLmNvbnN0cnVjdEVuZERhdGUoZGF0ZU9iamVjdCkoY29uc3RydWN0RGF0ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY29uc3RydWN0U3RhcnREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKGRhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5kaXNhYmxlZERhdGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgZGF5anNTdGFydERhdGUgPSBkYXlqcyh0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudCh0aGlzLmZyb21EYXRlKSwgXCJNTS9ERC9ZWVlZXCIpO1xyXG4gICAgICAgIGxldCBkYXlqc0VuZERhdGUgPSBkYXlqcyh0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudCh0aGlzLnRvRGF0ZSksIFwiTU0vREQvWVlZWVwiKTtcclxuICAgICAgICBsZXQgbmdiRGF0ZTtcclxuICAgICAgICB3aGlsZSAoIWRheWpzU3RhcnREYXRlLmlzU2FtZShkYXlqc0VuZERhdGUpKSB7XHJcbiAgICAgICAgICBuZ2JEYXRlID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUoZGF5anNTdGFydERhdGUsIFwiTU0vREQvWVlZWVwiKTtcclxuICAgICAgICAgIGlmICh0aGlzLmNoZWNrSWZEYXRlSXNEaXNhYmxlZChuZ2JEYXRlKSkge1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRheWpzU3RhcnREYXRlLmFkZCgxLCBcImRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBuZXdEYXRlT2JqZWN0ID0gbmV3IERhdGUobmdiRGF0ZS55ZWFyLCBuZ2JEYXRlLm1vbnRoIC0gMSwgbmdiRGF0ZS5kYXkgLSAxKTtcclxuICAgICAgICBsZXQgY29uc3RydWN0RGF0ZSA9IHRoaXMuYnVpbGREYXRlKG5ld0RhdGVPYmplY3QpO1xyXG4gICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jb25zdHJ1Y3RFbmREYXRlKG5ld0RhdGVPYmplY3QpKGNvbnN0cnVjdERhdGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLndlZWtOdW1iZXJHZW5lcmF0b3IoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLnNob3dBc0Ryb3Bkb3duKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB3ZWVrTnVtYmVyR2VuZXJhdG9yKCk6IHZvaWQge1xyXG4gICAgbGV0IGRhdGVzID0gW107XHJcbiAgICBsZXQgd2VlayA9IFtdO1xyXG5cclxuICAgIGxldCBzdGFydERhdGUgPSBOZ2JEYXRlLmZyb20odGhpcy5mcm9tRGF0ZSk7XHJcbiAgICBsZXQgZW5kRGF0ZSA9IE5nYkRhdGUuZnJvbSh0aGlzLnRvRGF0ZSk7XHJcblxyXG4gICAgd2Vlay5wdXNoKHN0YXJ0RGF0ZSk7XHJcbiAgICB3aGlsZSAoZW5kRGF0ZSAhPSBudWxsICYmICFzdGFydERhdGUuZXF1YWxzKGVuZERhdGUpKSB7XHJcbiAgICAgIGxldCBkYXRlID0gdGhpcy5jYWxlbmRhci5nZXROZXh0KHN0YXJ0RGF0ZSwgXCJkXCIsIDEpO1xyXG4gICAgICBzdGFydERhdGUgPSBkYXRlO1xyXG4gICAgICB3ZWVrLnB1c2goZGF0ZSk7XHJcblxyXG4gICAgICAvLyBDb2xsZWN0IGFsbCBkYXlzIGluIHdlZWsgdG8gY2FsY3VsYXRlIHRoZSB3ZWVrIG51bWJlclxyXG4gICAgICBpZiAod2Vlay5sZW5ndGggPT0gNykge1xyXG4gICAgICAgIGRhdGVzLnB1c2god2Vlayk7XHJcbiAgICAgICAgd2VlayA9IFtdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoKCh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2VsZWN0ID8/IDApID4gMCAmJiBkYXRlcy5sZW5ndGggPiAodGhpcy5jb25maWcubWF4V2Vla3NUb1NlbGVjdCA/PyAwKSkpIHtcclxuICAgICAgZGF0ZXMuc3BsaWNlKCh0aGlzLmNvbmZpZy5tYXhXZWVrc1RvU2VsZWN0ID8/IDApLCBkYXRlcy5sZW5ndGggLSAodGhpcy5jb25maWcubWF4V2Vla3NUb1NlbGVjdCA/PyAwKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0ZXMoZGF0ZXMpO1xyXG5cclxuICAgIHRoaXMud2Vla051bWJlcnMgPSBbXTtcclxuICAgIHRoaXMud2Vla09iamVjdHMgPSBbXTtcclxuICAgIGlmIChkYXRlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvciAobGV0IGRhdGUgb2YgZGF0ZXMpIHtcclxuICAgICAgICB0aGlzLndlZWtOdW1iZXJzLnB1c2goXCIgV2VlayBcIiArIHRoaXMuY2FsZW5kYXIuZ2V0V2Vla051bWJlcihkYXRlLCB0aGlzLmNvbmZpZy5maXJzdERheU9mV2VlaykpO1xyXG4gICAgICAgIGxldCBkYXRlcyA9IHRoaXMuZm9ybWF0dGVyKGRhdGVbMF0sIGRhdGVbNl0pO1xyXG4gICAgICAgIGxldCBkYXRlT2JqZWN0cyA9IHsgc3RhcnREYXRlOiBkYXRlcy5mb3JtYXR0ZWRTdGFydERhdGUsIGVuZERhdGU6IGRhdGVzLmZvcm1hdHRlZEVuZERhdGUgfTtcclxuICAgICAgICB0aGlzLndlZWtPYmplY3RzLnB1c2goZGF0ZU9iamVjdHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc3BsYXlUb1VJKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZERhdGVzKGRhdGVzOiBhbnkpIHtcclxuICAgIHRoaXMuZnJvbURhdGUgPSBkYXRlc1swXVswXTtcclxuICAgIHRoaXMudG9EYXRlID0gZGF0ZXNbZGF0ZXMubGVuZ3RoIC0gMV1bNl07XHJcbiAgfVxyXG5cclxuICBmb3JtYXR0ZWREYXRlcygpIHtcclxuICAgIGxldCBwaXBlID0gbmV3IERhdGVQaXBlKFwiZW4tVVNcIik7XHJcbiAgICBsZXQgdGhpc09iaiA9IHRoaXM7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGZyb21EYXRlOiBOZ2JEYXRlLCB0b0RhdGU6IE5nYkRhdGUpIHtcclxuICAgICAgbGV0IGZyb21EYXRlT2JqZWN0ID0gbmV3IERhdGUoZnJvbURhdGUueWVhciwgZnJvbURhdGUubW9udGggLSAxLCBmcm9tRGF0ZS5kYXkpO1xyXG4gICAgICBsZXQgdG9EYXRlT2JqZWN0ID0gbmV3IERhdGUodG9EYXRlLnllYXIsIHRvRGF0ZS5tb250aCAtIDEsIHRvRGF0ZS5kYXkpO1xyXG4gICAgICB0aGlzT2JqLmZvcm1hdHRlZFN0YXJ0RGF0ZSA9IHBpcGUudHJhbnNmb3JtKGZyb21EYXRlT2JqZWN0LCB0aGlzT2JqLmNvbmZpZy5kYXRlRm9ybWF0Rm9yUmVxdWVzdCk7XHJcbiAgICAgIHRoaXNPYmouZm9ybWF0dGVkRW5kRGF0ZSA9IHBpcGUudHJhbnNmb3JtKHRvRGF0ZU9iamVjdCwgdGhpc09iai5jb25maWcuZGF0ZUZvcm1hdEZvclJlcXVlc3QpO1xyXG5cclxuICAgICAgdGhpc09iai5kYXRlVG9EaXNwbGF5ID1cclxuICAgICAgICBwaXBlLnRyYW5zZm9ybShmcm9tRGF0ZU9iamVjdCwgdGhpc09iai5jb25maWcuZGF0ZUZvcm1hdFRvRGlzcGxheSkgK1xyXG4gICAgICAgIFwiIHRvIFwiICtcclxuICAgICAgICBwaXBlLnRyYW5zZm9ybSh0b0RhdGVPYmplY3QsIHRoaXNPYmouY29uZmlnLmRhdGVGb3JtYXRUb0Rpc3BsYXkpO1xyXG4gICAgICByZXR1cm4gdGhpc09iajtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5VG9VSSgpIHtcclxuICAgIGlmICghdGhpcy5jb25maWcuc2VsZWN0TXVsdGlwbGVXZWVrcyAmJiB0aGlzLmZyb21EYXRlICYmIHRoaXMudG9EYXRlKSB7XHJcbiAgICAgIC8vIERpc3BsYXkgZm9yIG9ubHkgU2luZ2xlIFdlZWtcclxuICAgICAgdGhpcy5mb3JtYXR0ZXIodGhpcy5mcm9tRGF0ZSwgdGhpcy50b0RhdGUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gRGlzcGxheSBmb3IgTXVsdGlwbGUgV2Vla3NcclxuICAgICAgaWYgKHRoaXMud2Vla051bWJlcnMubGVuZ3RoID4gKHRoaXMuY29uZmlnLm1heFdlZWtzVG9TaG93V2l0aFJlbWFpbmluZ0NvdW50ID8/IDApKSB7XHJcbiAgICAgICAgbGV0IHdlZWtEaXNwbGF5ID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAodGhpcy5jb25maWcubWF4V2Vla3NUb1Nob3dXaXRoUmVtYWluaW5nQ291bnQgPz8gMCk7IGkrKykge1xyXG4gICAgICAgICAgd2Vla0Rpc3BsYXkucHVzaCh0aGlzLndlZWtOdW1iZXJzLnNoaWZ0KCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVtYWluaW5nV2Vla3MgPSB0aGlzLndlZWtOdW1iZXJzLmxlbmd0aDtcclxuICAgICAgICB0aGlzLndlZWtOdW1iZXJzID0gW107XHJcbiAgICAgICAgdGhpcy53ZWVrTnVtYmVycy5wdXNoKHdlZWtEaXNwbGF5ICsgXCIgK1wiICsgcmVtYWluaW5nV2Vla3MpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RTdGFydERhdGUoZGF0ZTogRGF0ZSkge1xyXG4gICAgbGV0IGZpcnN0RGF5T2ZXZWVrID0gdGhpcy5jb25maWcuZmlyc3REYXlPZldlZWs7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGNvbnN0cnVjdERhdGU6IGFueSkge1xyXG4gICAgICBsZXQgc3RhcnREYXkgPSBkYXRlLmdldERheSgpICE9IDAgPyAoZmlyc3REYXlPZldlZWsgPz8gMCkgLSBkYXRlLmdldERheSgpIDogLTY7XHJcbiAgICAgIHJldHVybiBjb25zdHJ1Y3REYXRlKHN0YXJ0RGF5KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RFbmREYXRlKGRhdGU6IERhdGUpIHtcclxuICAgIGxldCBmaXJzdERheU9mV2VlayA9IHRoaXMuY29uZmlnLmZpcnN0RGF5T2ZXZWVrO1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjb25zdHJ1Y3REYXRlOiBhbnkpIHtcclxuICAgICAgbGV0IGVuZERheSA9IGRhdGUuZ2V0RGF5KCkgIT0gMCA/IChmaXJzdERheU9mV2VlayA/PyAwKSArIDYgLSBkYXRlLmdldERheSgpIDogMDtcclxuICAgICAgcmV0dXJuIGNvbnN0cnVjdERhdGUoZW5kRGF5KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBidWlsZERhdGUoZGF0ZTogRGF0ZSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXI6IG51bWJlcik6IE5nYkRhdGUgfCBudWxsIHtcclxuICAgICAgbGV0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpICsgbnVtYmVyO1xyXG4gICAgICBjb25zdCBkYXRlT2JqZWN0ID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRheSk7XHJcblxyXG4gICAgICBsZXQgbmdiRGF0ZU9iamVjdCA9IHt9IGFzIE5nYkRhdGU7XHJcbiAgICAgIG5nYkRhdGVPYmplY3QuZGF5ID0gZGF5O1xyXG5cclxuICAgICAgaWYgKG5nYkRhdGVPYmplY3QuZGF5ID4gMzEgfHwgbmdiRGF0ZU9iamVjdC5kYXkgPCAxKSB7XHJcbiAgICAgICAgbmdiRGF0ZU9iamVjdC5kYXkgPSBkYXRlT2JqZWN0LmdldERhdGUoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbmdiRGF0ZU9iamVjdC5tb250aCA9IGRhdGVPYmplY3QuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgIG5nYkRhdGVPYmplY3QueWVhciA9IGRhdGVPYmplY3QuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgcmV0dXJuIE5nYkRhdGUuZnJvbShuZ2JEYXRlT2JqZWN0KTtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBpc0hvdmVyZWQoZGF0ZTogTmdiRGF0ZSk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLmZyb21EYXRlICYmICF0aGlzLnRvRGF0ZSAmJiB0aGlzLmhvdmVyZWREYXRlICYmIGRhdGUuYWZ0ZXIodGhpcy5mcm9tRGF0ZSkgJiYgZGF0ZS5iZWZvcmUodGhpcy5ob3ZlcmVkRGF0ZSk7XHJcbiAgfVxyXG5cclxuICBpc0luc2lkZShkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMudG9EYXRlICYmIGRhdGUuYWZ0ZXIodGhpcy5mcm9tRGF0ZSkgJiYgZGF0ZS5iZWZvcmUodGhpcy50b0RhdGUpO1xyXG4gIH1cclxuXHJcbiAgaXNSYW5nZShkYXRlOiBOZ2JEYXRlKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZGF0ZS5lcXVhbHModGhpcy5mcm9tRGF0ZSkgfHwgKHRoaXMudG9EYXRlICYmIGRhdGUuZXF1YWxzKHRoaXMudG9EYXRlKSkgfHwgdGhpcy5pc0luc2lkZShkYXRlKSB8fCB0aGlzLmlzSG92ZXJlZChkYXRlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByZXZpb3VzV2VlaygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZyb21EYXRlKSB7XHJcbiAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5jYWxlbmRhci5nZXRQcmV2KHRoaXMuZnJvbURhdGUsIFwiZFwiLCAxKTtcclxuICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0UHJldih0aGlzLmZyb21EYXRlLCBcImRcIiwgdGhpcy5jYWxlbmRhci5nZXREYXlzUGVyV2VlaygpKTtcclxuICAgIH1cclxuICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgdGhpcy5hcHBseUNoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIG5leHRXZWVrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZnJvbURhdGUpIHtcclxuICAgICAgdGhpcy5mcm9tRGF0ZSA9IHRoaXMuY2FsZW5kYXIuZ2V0TmV4dCh0aGlzLmZyb21EYXRlLCBcImRcIiwgdGhpcy5jYWxlbmRhci5nZXREYXlzUGVyV2VlaygpKTtcclxuICAgICAgdGhpcy50b0RhdGUgPSB0aGlzLmNhbGVuZGFyLmdldE5leHQodGhpcy5mcm9tRGF0ZSwgXCJkXCIsIHRoaXMuY2FsZW5kYXIuZ2V0RGF5c1BlcldlZWsoKSAtIDEpO1xyXG4gICAgfVxyXG4gICAgdGhpcy53ZWVrTnVtYmVyR2VuZXJhdG9yKCk7XHJcbiAgICB0aGlzLmFwcGx5Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgc2V0Q2FsZW5kYXJNYXAoKSB7XHJcbiAgICBsZXQgZGF0ZU9iaiA9IHsgZnJvbURhdGU6IHRoaXMuZnJvbURhdGUsIHRvRGF0ZTogdGhpcy50b0RhdGUgfTtcclxuICAgIHRoaXMuY2FsZW5kYXJNYXAuc2V0KFwib2xkRGF0ZXNcIiwgZGF0ZU9iaik7XHJcbiAgfVxyXG5cclxuICBhcHBseUNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLm11bHRpU2VsZWN0RHJvcGRvd25PcGVuID0gZmFsc2U7XHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLmVtaXRNdWx0aXBsZVdlZWtPYmplY3RzKSB7XHJcbiAgICAgIGxldCBkYXRlcyA9IHt9IGFzIFdlZWtPYmplY3Q7XHJcbiAgICAgIGxldCBmb3JtYXR0ZWREYXRlcyA9IHRoaXMuZm9ybWF0dGVyKHRoaXMuZnJvbURhdGUsIHRoaXMudG9EYXRlKTtcclxuICAgICAgZGF0ZXMuc3RhcnREYXRlID0gZm9ybWF0dGVkRGF0ZXMuZm9ybWF0dGVkU3RhcnREYXRlO1xyXG4gICAgICBkYXRlcy5lbmREYXRlID0gZm9ybWF0dGVkRGF0ZXMuZm9ybWF0dGVkRW5kRGF0ZTtcclxuICAgICAgdGhpcy5hcHBseVdlZWtDYWxlbmRhckNoYW5nZXMuZW1pdChkYXRlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFwcGx5V2Vla0NhbGVuZGFyQ2hhbmdlcy5lbWl0KHRoaXMud2Vla09iamVjdHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRDYWxlbmRhck1hcCgpO1xyXG4gIH1cclxuXHJcbiAgaXNGb2N1c2VkKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuY2FsZW5kYXJUb2dnbGVkLmVtaXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgaXNEcm9wZG93bk9wZW5lZEZvckNhbGVuZGFyKGRhdGVwaWNrZXI6IE5nYklucHV0RGF0ZXBpY2tlcikge1xyXG4gICAgdGhpcy5kYXRlcGlja2VyID0gZGF0ZXBpY2tlcjtcclxuICAgIGlmICh0aGlzLmRhdGVwaWNrZXIuaXNPcGVuKCkpIHtcclxuICAgICAgdGhpcy5yZXZlcnREYXRlcygpO1xyXG4gICAgICB0aGlzLmRhdGVwaWNrZXIuY2xvc2UoKTtcclxuICAgICAgdGhpcy5tdWx0aVNlbGVjdERyb3Bkb3duT3BlbiA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRlcGlja2VyLm9wZW4oKTtcclxuICAgICAgdGhpcy5tdWx0aVNlbGVjdERyb3Bkb3duT3BlbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXZlcnREYXRlcygpIHtcclxuICAgIHRoaXMubXVsdGlTZWxlY3REcm9wZG93bk9wZW4gPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmNhbGVuZGFyTWFwLmdldChcIm9sZERhdGVzXCIpKSB7XHJcbiAgICAgIGxldCBkYXRlT2JqID0gdGhpcy5jYWxlbmRhck1hcC5nZXQoXCJvbGREYXRlc1wiKTtcclxuICAgICAgdGhpcy5mcm9tRGF0ZSA9IGRhdGVPYmouZnJvbURhdGU7XHJcbiAgICAgIHRoaXMudG9EYXRlID0gZGF0ZU9iai50b0RhdGU7XHJcbiAgICAgIHRoaXMud2Vla051bWJlckdlbmVyYXRvcigpO1xyXG4gICAgICB0aGlzLmRpc3BsYXlUb1VJKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja0lmRGF0ZUlzRGlzYWJsZWQoZGF0ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JGdW5jID0gKG5nYkRhdGU6IE5nYkRhdGUpID0+IG5nYkRhdGUueWVhciA9PT0gZGF0ZS55ZWFyICYmIG5nYkRhdGUubW9udGggPT09IGRhdGUubW9udGggJiYgbmdiRGF0ZS5kYXkgPT09IGRhdGUuZGF5O1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzYWJsZWREYXRlcy5zb21lKHZhbGlkYXRvckZ1bmMpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VEYXRlcGlja2VyKGRhdGVwaWNrZXJSZWY6IGFueSkge1xyXG4gICAgZGF0ZXBpY2tlclJlZi5jbG9zZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lXCIgKm5nSWY9XCJjb25maWcuc2hvd0FzRHJvcGRvd25cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGhpZGRlblwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJkYXRlcGlja2VyXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICNkYXRlcGlja2VyPVwibmdiRGF0ZXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgIChkYXRlU2VsZWN0KT1cInNlbGVjdFdlZWsoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAoY2xvc2VkKT1cImlzRm9jdXNlZChmYWxzZSlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlNb250aHNdPVwiMVwiXHJcbiAgICAgICAgICAgICAgICBbZGF5VGVtcGxhdGVdPVwidFwiXHJcbiAgICAgICAgICAgICAgICBbc3RhcnREYXRlXT1cImZyb21EYXRlIVwiXHJcbiAgICAgICAgICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiY29uZmlnLmZpcnN0RGF5T2ZXZWVrXCJcclxuICAgICAgICAgICAgICAgIFtzaG93V2Vla051bWJlcnNdPVwiY29uZmlnLnNob3dXZWVrTnVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiXHJcbiAgICAgICAgICAgICAgICBbZm9vdGVyVGVtcGxhdGVdPVwiZm9vdGVyVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLVNpbmdsZSB3ZWVrIHNlbGVjdC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFjb25maWcuc2VsZWN0TXVsdGlwbGVXZWVrc1wiPlxyXG4gICAgICAgIDxzcGFuIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBsZWZ0OiAzMHB4OyBmb250LXNpemU6IDEycHhcIj4gJm5ic3A7e3sgd2Vla051bWJlcnMgfX0gPC9zcGFuPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNpbmdsZS13ZWVrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBuZXh0LXJvdW5kLWJ0blwiIChjbGljayk9XCJwcmV2aW91c1dlZWsoKVwiPiBuYXZpZ2F0ZV9uZXh0IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgI2RwRnJvbURhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBXZWVrc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIltjb25maWcuY3VzdG9tQ2xhc3MgPT0gJycgPyAnJyA6IGNvbmZpZy5jdXN0b21DbGFzc11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZHBGcm9tRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkYXRlVG9EaXNwbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaXNGb2N1c2VkKHRydWUpOyBpc0Ryb3Bkb3duT3BlbmVkRm9yQ2FsZW5kYXIoZGF0ZXBpY2tlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLW1lbnUtZG93blwiICpuZ0lmPSchZGF0ZXBpY2tlci5pc09wZW4oKScgKGNsaWNrKT1cImRhdGVwaWNrZXIub3BlbigpXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSdtZGkgbWRpLW1lbnUtdXAnICpuZ0lmPVwiZGF0ZXBpY2tlci5pc09wZW4oKVwiIChjbGljayk9XCJpc0Ryb3Bkb3duT3BlbmVkRm9yQ2FsZW5kYXIoZGF0ZXBpY2tlcilcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgcm91bmQtYnRuXCIgKGNsaWNrKT1cIm5leHRXZWVrKClcIj4gbmF2aWdhdGVfbmV4dCA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tTXVsdGlwbGUgd2VlayBzZWxlY3QtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJjb25maWcuc2VsZWN0TXVsdGlwbGVXZWVrc1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlwbGUtd2Vla3NcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICNkcEZyb21EYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFdlZWtzXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbY29uZmlnLmN1c3RvbUNsYXNzID09ICcnID8gJycgOiBjb25maWcuY3VzdG9tQ2xhc3NdXCJcclxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZHBGcm9tRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ3ZWVrTnVtYmVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlzRm9jdXNlZCh0cnVlKTsgaXNEcm9wZG93bk9wZW5lZEZvckNhbGVuZGFyKGRhdGVwaWNrZXIpXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFtdWx0aVNlbGVjdERyb3Bkb3duT3BlblwiIGNsYXNzPVwibWRpIG1kaS1tZW51LWRvd24gbXVsdGlzZWxlY3QtaW5wdXQtYXJyb3dcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8aSAqbmdJZj1cIm11bHRpU2VsZWN0RHJvcGRvd25PcGVuXCIgY2xhc3M9XCJtZGkgbWRpLW1lbnUtdXAgbXVsdGlzZWxlY3QtaW5wdXQtYXJyb3dcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZm9ybT5cclxuXHJcbjxuZ2ItZGF0ZXBpY2tlclxyXG4gICAgI3dlZWtQaWNrZXJcclxuICAgICpuZ0lmPVwiIWNvbmZpZy5zaG93QXNEcm9wZG93blwiXHJcbiAgICBbZGlzcGxheU1vbnRoc109XCIxXCJcclxuICAgIFtzdGFydERhdGVdPVwiZnJvbURhdGUhXCJcclxuICAgIFtmaXJzdERheU9mV2Vla109XCJjb25maWcuZmlyc3REYXlPZldlZWtcIlxyXG4gICAgW3Nob3dXZWVrTnVtYmVyc109XCJjb25maWcuc2hvd1dlZWtOdW1iZXJzXCJcclxuICAgIFtkYXlUZW1wbGF0ZV09XCJ0XCJcclxuICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxyXG4gICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXHJcbiAgICAoZGF0ZVNlbGVjdCk9XCJzZWxlY3RXZWVrKCRldmVudClcIlxyXG4gICAgW21hcmtEaXNhYmxlZF09XCJkaXNhYmxlZEZ1bmNcIlxyXG4+XHJcbjwvbmdiLWRhdGVwaWNrZXI+XHJcblxyXG48bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxyXG4gICAgPGhyIGNsYXNzPVwibXktMFwiIC8+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIG0tMiBmbG9hdC1yaWdodFwiXHJcbiAgICAgICAgKGNsaWNrKT1cImFwcGx5Q2hhbmdlcygpOyBjbG9zZURhdGVwaWNrZXIoZGF0ZXBpY2tlcilcIlxyXG4gICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogIzI2OGJmZjsgY29sb3I6ICNmZmZmZmZcIlxyXG4gICAgPlxyXG4gICAgICAgIEFwcGx5XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b25cclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gbS0yIGZsb2F0LXJpZ2h0XCJcclxuICAgICAgICAoY2xpY2spPVwicmV2ZXJ0RGF0ZXMoKTsgY2xvc2VEYXRlcGlja2VyKGRhdGVwaWNrZXIpXCJcclxuICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHJnYmEoMzgsIDEzOSwgMjU1LCAwLjEyKTsgY29sb3I6ICMyNjhiZmZcIlxyXG4gICAgPlxyXG4gICAgICAgIENhbmNlbFxyXG4gICAgPC9idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3QgbGV0LWRhdGUgbGV0LWZvY3VzZWQ9XCJmb2N1c2VkXCIgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cclxuICAgIDxzcGFuXHJcbiAgICAgICAgY2xhc3M9XCJjdXN0b20tZGF5XCJcclxuICAgICAgICBbY2xhc3MuZm9jdXNlZF09XCJmb2N1c2VkXCJcclxuICAgICAgICBbY2xhc3MucmFuZ2VdPVwiaXNSYW5nZShkYXRlKVwiXHJcbiAgICAgICAgW2NsYXNzLmZhZGVkXT1cImlzSG92ZXJlZChkYXRlKSB8fCBpc0luc2lkZShkYXRlKVwiXHJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAobW91c2VlbnRlcik9XCJob3ZlcmVkRGF0ZSA9IGRhdGVcIlxyXG4gICAgICAgIChtb3VzZWxlYXZlKT1cImhvdmVyZWREYXRlID0gbnVsbFwiXHJcbiAgICA+XHJcbiAgICAgICAge3sgZGF0ZS5kYXkgfX1cclxuICAgIDwvc3Bhbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS1cclxuXHJcbjxocj5cclxuXHJcbjxwcmU+RnJvbToge3sgZnJvbURhdGUgfCBqc29uIH19IDwvcHJlPlxyXG48cHJlPlRvOiB7eyB0b0RhdGUgfCBqc29uIH19IDwvcHJlPlxyXG48cHJlPndlZWtOdW1iZXJzOiB7eyB3ZWVrTnVtYmVycyB8IGpzb24gfX0gPC9wcmU+XHJcblxyXG4tLT5cclxuIl19