@rangertechnologies/ngnxt 2.1.105 → 2.1.106

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 (143) hide show
  1. package/package.json +5 -1
  2. package/esm2022/lib/ar.i18n.mjs +0 -29
  3. package/esm2022/lib/components/button/nxt-button.component.mjs +0 -130
  4. package/esm2022/lib/components/custom-button/custom-button.component.mjs +0 -39
  5. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +0 -366
  6. package/esm2022/lib/components/custom-date/custom-date.component.mjs +0 -47
  7. package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +0 -48
  8. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +0 -219
  9. package/esm2022/lib/components/custom-image/custom-image.component.mjs +0 -34
  10. package/esm2022/lib/components/custom-input/custom-input.component.mjs +0 -93
  11. package/esm2022/lib/components/custom-label/custom-label.component.mjs +0 -21
  12. package/esm2022/lib/components/custom-model/custom-model.component.mjs +0 -48
  13. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +0 -115
  14. package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +0 -186
  15. package/esm2022/lib/components/custom-table/custom-table.component.mjs +0 -347
  16. package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +0 -65
  17. package/esm2022/lib/components/custom-time/custom-time.component.mjs +0 -61
  18. package/esm2022/lib/components/datatable/datatable.component.mjs +0 -801
  19. package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +0 -42
  20. package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +0 -39
  21. package/esm2022/lib/components/file-upload/file-upload.component.mjs +0 -279
  22. package/esm2022/lib/components/file-view/file-view.component.mjs +0 -46
  23. package/esm2022/lib/components/loader/loader.component.mjs +0 -23
  24. package/esm2022/lib/components/pagination/pagination.component.mjs +0 -100
  25. package/esm2022/lib/components/pick-location/pick-location.component.mjs +0 -216
  26. package/esm2022/lib/components/search-box/search-box.component.mjs +0 -202
  27. package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +0 -123
  28. package/esm2022/lib/directives/componenthost/componenthost.directive.mjs +0 -19
  29. package/esm2022/lib/en.i18n.mjs +0 -29
  30. package/esm2022/lib/i18n-config.service.mjs +0 -4
  31. package/esm2022/lib/i18n.component.mjs +0 -47
  32. package/esm2022/lib/i18n.module.mjs +0 -38
  33. package/esm2022/lib/i18n.pipe.mjs +0 -25
  34. package/esm2022/lib/i18n.service.mjs +0 -56
  35. package/esm2022/lib/interfaces/actionMeta.mjs +0 -2
  36. package/esm2022/lib/interfaces/apimeta.mjs +0 -2
  37. package/esm2022/lib/interfaces/dependencyMeta.mjs +0 -2
  38. package/esm2022/lib/model/bookletWrapper.mjs +0 -9
  39. package/esm2022/lib/model/changeWrapper.mjs +0 -11
  40. package/esm2022/lib/model/errorWrapper.mjs +0 -6
  41. package/esm2022/lib/model/tableWrapper.mjs +0 -20
  42. package/esm2022/lib/nxt-app.component.mjs +0 -22
  43. package/esm2022/lib/nxt-app.module.mjs +0 -399
  44. package/esm2022/lib/nxt-app.service.mjs +0 -14
  45. package/esm2022/lib/pages/booklet/booklet.component.mjs +0 -541
  46. package/esm2022/lib/pages/builder/element/element.component.mjs +0 -193
  47. package/esm2022/lib/pages/builder/form/form.component.mjs +0 -34
  48. package/esm2022/lib/pages/builder/menu/menu.component.mjs +0 -28
  49. package/esm2022/lib/pages/builder/properties/properties.component.mjs +0 -476
  50. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +0 -458
  51. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +0 -2387
  52. package/esm2022/lib/pages/summary-page/summary-page.component.mjs +0 -76
  53. package/esm2022/lib/pipe/date/date.pipe.mjs +0 -28
  54. package/esm2022/lib/pipe/editColumnCheck/edit-column-check.pipe.mjs +0 -28
  55. package/esm2022/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.mjs +0 -20
  56. package/esm2022/lib/pipe/editColumnType/edit-column-type.pipe.mjs +0 -20
  57. package/esm2022/lib/pipe/get-value.pipe.mjs +0 -50
  58. package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +0 -39
  59. package/esm2022/lib/pipe/time/time.pipe.mjs +0 -26
  60. package/esm2022/lib/sample.mjs +0 -3715
  61. package/esm2022/lib/services/change.service.mjs +0 -53
  62. package/esm2022/lib/services/data.service.mjs +0 -80
  63. package/esm2022/lib/services/form-builder.service.mjs +0 -160
  64. package/esm2022/lib/services/salesforce.service.mjs +0 -46
  65. package/esm2022/lib/services/shared.service.mjs +0 -100
  66. package/esm2022/lib/services/storage.service.mjs +0 -44
  67. package/esm2022/lib/tam.i18n.mjs +0 -29
  68. package/esm2022/lib/wrapper.mjs +0 -175
  69. package/esm2022/public-api.mjs +0 -22
  70. package/esm2022/rangertechnologies-ngnxt.mjs +0 -5
  71. package/fesm2022/rangertechnologies-ngnxt.mjs +0 -12866
  72. package/fesm2022/rangertechnologies-ngnxt.mjs.map +0 -1
  73. package/index.d.ts +0 -5
  74. package/lib/ar.i18n.d.ts +0 -24
  75. package/lib/components/button/nxt-button.component.d.ts +0 -38
  76. package/lib/components/custom-button/custom-button.component.d.ts +0 -16
  77. package/lib/components/custom-calendar/custom-calendar.component.d.ts +0 -65
  78. package/lib/components/custom-date/custom-date.component.d.ts +0 -18
  79. package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +0 -19
  80. package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +0 -39
  81. package/lib/components/custom-image/custom-image.component.d.ts +0 -13
  82. package/lib/components/custom-input/custom-input.component.d.ts +0 -31
  83. package/lib/components/custom-label/custom-label.component.d.ts +0 -10
  84. package/lib/components/custom-model/custom-model.component.d.ts +0 -19
  85. package/lib/components/custom-radio/custom-radio.component.d.ts +0 -33
  86. package/lib/components/custom-rich-text/custom-rich-text.component.d.ts +0 -29
  87. package/lib/components/custom-table/custom-table.component.d.ts +0 -65
  88. package/lib/components/custom-text-area/custom-text-area.component.d.ts +0 -22
  89. package/lib/components/custom-time/custom-time.component.d.ts +0 -18
  90. package/lib/components/datatable/datatable.component.d.ts +0 -126
  91. package/lib/components/dependent-table/dependent-table.component.d.ts +0 -15
  92. package/lib/components/dropdown-with-flag/dropdown-with-flag.component.d.ts +0 -16
  93. package/lib/components/file-upload/file-upload.component.d.ts +0 -47
  94. package/lib/components/file-view/file-view.component.d.ts +0 -16
  95. package/lib/components/loader/loader.component.d.ts +0 -11
  96. package/lib/components/pagination/pagination.component.d.ts +0 -36
  97. package/lib/components/pick-location/pick-location.component.d.ts +0 -44
  98. package/lib/components/search-box/search-box.component.d.ts +0 -43
  99. package/lib/components/table-appendix/table-appendix.component.d.ts +0 -30
  100. package/lib/directives/componenthost/componenthost.directive.d.ts +0 -8
  101. package/lib/en.i18n.d.ts +0 -24
  102. package/lib/i18n-config.service.d.ts +0 -2
  103. package/lib/i18n.component.d.ts +0 -11
  104. package/lib/i18n.module.d.ts +0 -9
  105. package/lib/i18n.pipe.d.ts +0 -10
  106. package/lib/i18n.service.d.ts +0 -14
  107. package/lib/interfaces/actionMeta.d.ts +0 -5
  108. package/lib/interfaces/apimeta.d.ts +0 -15
  109. package/lib/interfaces/dependencyMeta.d.ts +0 -8
  110. package/lib/model/bookletWrapper.d.ts +0 -5
  111. package/lib/model/changeWrapper.d.ts +0 -10
  112. package/lib/model/errorWrapper.d.ts +0 -5
  113. package/lib/model/tableWrapper.d.ts +0 -18
  114. package/lib/nxt-app.component.d.ts +0 -8
  115. package/lib/nxt-app.module.d.ts +0 -52
  116. package/lib/nxt-app.service.d.ts +0 -6
  117. package/lib/pages/booklet/booklet.component.d.ts +0 -68
  118. package/lib/pages/builder/element/element.component.d.ts +0 -33
  119. package/lib/pages/builder/form/form.component.d.ts +0 -11
  120. package/lib/pages/builder/menu/menu.component.d.ts +0 -10
  121. package/lib/pages/builder/properties/properties.component.d.ts +0 -551
  122. package/lib/pages/questionbook/questionbook.component.d.ts +0 -68
  123. package/lib/pages/questionnaire/questionnaire.component.d.ts +0 -220
  124. package/lib/pages/summary-page/summary-page.component.d.ts +0 -20
  125. package/lib/pipe/date/date.pipe.d.ts +0 -7
  126. package/lib/pipe/editColumnCheck/edit-column-check.pipe.d.ts +0 -7
  127. package/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.d.ts +0 -7
  128. package/lib/pipe/editColumnType/edit-column-type.pipe.d.ts +0 -7
  129. package/lib/pipe/get-value.pipe.d.ts +0 -7
  130. package/lib/pipe/search-filter/search-filter.pipe.d.ts +0 -8
  131. package/lib/pipe/time/time.pipe.d.ts +0 -7
  132. package/lib/sample.d.ts +0 -11
  133. package/lib/services/change.service.d.ts +0 -22
  134. package/lib/services/data.service.d.ts +0 -13
  135. package/lib/services/form-builder.service.d.ts +0 -75
  136. package/lib/services/salesforce.service.d.ts +0 -11
  137. package/lib/services/shared.service.d.ts +0 -15
  138. package/lib/services/storage.service.d.ts +0 -13
  139. package/lib/tam.i18n.d.ts +0 -24
  140. package/lib/wrapper.d.ts +0 -203
  141. package/public-api.d.ts +0 -15
  142. package/rangertechnologies-ngnxt-2.1.105.tgz +0 -0
  143. package/src/lib/style.css +0 -1817
@@ -1,366 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../services/change.service";
4
- import * as i2 from "@angular/common";
5
- export class CustomCalendarComponent {
6
- changeService;
7
- eventSelected = new EventEmitter();
8
- // VD 06Sep24 calendar changes
9
- dateSelected = new EventEmitter();
10
- openModal = new EventEmitter();
11
- closeModal = new EventEmitter();
12
- allEvents = [];
13
- question;
14
- nxtId;
15
- //@ViewChild(ComponenthostDirective, { static: true }) dynamicHost: ComponenthostDirective;
16
- entries = [];
17
- referenceQuestions = [];
18
- qbRefrenceBook;
19
- calendarQuestion = [];
20
- calendar = {};
21
- currentDate = new Date();
22
- calendarDays = [];
23
- daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
24
- newEventTitle = '';
25
- newEventTime = '';
26
- newDescription = '';
27
- newLink = '';
28
- selectedDay = null;
29
- isModalOpen = false;
30
- modalTitle = 'Custom Modal';
31
- modalSize = 'large';
32
- saveButtonValue = 'Save';
33
- modalFooter = true;
34
- editingEventId;
35
- editingEntryGroup;
36
- showAppoinmentSection = true;
37
- subscription;
38
- constructor(changeService) {
39
- this.changeService = changeService;
40
- }
41
- ngOnInit() {
42
- if (this.question?.input) {
43
- this.allEvents = this.question.input;
44
- }
45
- this.processQuestion();
46
- this.generateCalendar();
47
- this.subscription = this.changeService.customChange$.subscribe((changeValue) => {
48
- if (changeValue == 'calendar-modal-save') {
49
- this.onSave();
50
- }
51
- if (changeValue == 'dataBind') {
52
- if (this.question?.input) {
53
- this.allEvents = this.question.input;
54
- }
55
- this.processQuestion();
56
- this.generateCalendar();
57
- }
58
- });
59
- // this.dateSelected.emit(this.calendar);
60
- //this.eventSelected.emit(this.allEvents);
61
- }
62
- // RS 09DEC24 Changed keys
63
- processQuestion() {
64
- this.entries = JSON.parse(this.question['fieldsMeta']);
65
- this.qbRefrenceBook = JSON.parse(this.question['qbReferenceQuestions']);
66
- let title = this.qbRefrenceBook?.questionbook?.title;
67
- this.modalTitle = title;
68
- this.referenceQuestions = [];
69
- if (this.entries.length > 0) {
70
- this.entries.forEach(element => {
71
- if (element.questionReference) {
72
- let qReference = JSON.parse(element.questionReference);
73
- this.referenceQuestions.push(qReference?.question);
74
- }
75
- });
76
- }
77
- console.log('entries-->');
78
- console.log('question-->');
79
- console.log(this.entries);
80
- console.log(this.referenceQuestions);
81
- }
82
- // sunday comment
83
- // openQuestionBookModal() {
84
- // const viewContainerRef = this.dynamicHost.viewContainerRef;
85
- // viewContainerRef.clear();
86
- // const componentRef = viewContainerRef.createComponent(QuestionbookComponent);
87
- // componentRef.instance.qbItem = this.qbRefrenceBook;
88
- // componentRef.instance.questions = this.referenceQuestions;
89
- // componentRef.instance.handleQuestion.subscribe((event: any) => this.handleQuestionEvent(event));
90
- // }
91
- generateCalendar() {
92
- const year = this.currentDate.getFullYear();
93
- const month = this.currentDate.getMonth();
94
- const startOfMonth = new Date(year, month, 1);
95
- const endOfMonth = new Date(year, month + 1, 0);
96
- const startDayOfWeek = startOfMonth.getDay();
97
- const endDayOfWeek = endOfMonth.getDay();
98
- const startDate = new Date(startOfMonth);
99
- startDate.setDate(startDate.getDate() - startDayOfWeek);
100
- const endDate = new Date(endOfMonth);
101
- endDate.setDate(endDate.getDate() + (6 - endDayOfWeek));
102
- const today = new Date(new Date().setHours(0, 0, 0, 0));
103
- this.calendarDays = [];
104
- for (let d = new Date(startDate); d <= endDate; d.setDate(d.getDate() + 1)) {
105
- const date = new Date(d);
106
- this.calendarDays.push({
107
- date: date,
108
- events: [],
109
- isCurrentMonth: d.getMonth() === month,
110
- isPast: date < today,
111
- isToday: date.getTime() === today.getTime(),
112
- isFuture: date > today,
113
- });
114
- }
115
- // Populate calendar with events from allEvents array
116
- this.calendarDays.forEach(day => {
117
- day.events = this.allEvents?.filter(event => event?.date?.toDateString() === day.date.toDateString());
118
- });
119
- // VD 06Sep24 calendar changes
120
- let cal = {};
121
- cal['year'] = year;
122
- cal['month'] = month + 1;
123
- this.calendar = cal;
124
- }
125
- selectDay(day) {
126
- console.log(day);
127
- // VD 06Sep24 calendar changes
128
- this.showAppoinmentSection = true;
129
- this.selectedDay = day;
130
- // this.eventSelected.emit(day?.events);
131
- const previouslySelectedDay = this.calendarDays.find(d => d.isSelected);
132
- if (previouslySelectedDay) {
133
- previouslySelectedDay.isSelected = false;
134
- }
135
- // Select the clicked day
136
- day.isSelected = true;
137
- // VD 09Sep24- setup the query param data for api call
138
- let referenceData = [];
139
- this.referenceQuestions.forEach(ques => {
140
- // VD 09-09-24 get the selected date
141
- // need to add in the document
142
- // RS 09DEC24 Changed keys
143
- if (ques.referenceField == 'selectedDate') {
144
- ques.input = day.date.toISOString();
145
- console.log(ques.input);
146
- }
147
- // VD 09-09-24 get the query refrence field data to pass the queryParam for api
148
- if (ques.subText) {
149
- let subText = JSON.parse(ques.subText);
150
- if (subText.queryField && subText.queryValueReference) {
151
- let currentQues = ques;
152
- let queryReferences = subText.queryValueReference.split(',');
153
- queryReferences.forEach(refField => {
154
- let refQues = this.referenceQuestions.find(q => q.referenceField === refField);
155
- if (refQues) {
156
- referenceData.push(refQues);
157
- }
158
- });
159
- // Add the referenceData array to the current question
160
- currentQues.referenceQueryData = referenceData;
161
- }
162
- }
163
- });
164
- }
165
- previousMonth() {
166
- this.showAppoinmentSection = false;
167
- this.currentDate.setMonth(this.currentDate.getMonth() - 1);
168
- this.currentDate = new Date(this.currentDate); // Ensure the date object is updated
169
- this.generateCalendar();
170
- this.dateSelected.emit(this.calendar);
171
- this.eventSelected.emit(this.allEvents);
172
- }
173
- nextMonth() {
174
- // VD 06Sep24 calendar changes
175
- this.showAppoinmentSection = false;
176
- this.currentDate.setMonth(this.currentDate.getMonth() + 1);
177
- this.currentDate = new Date(this.currentDate); // Ensure the date object is updated
178
- this.generateCalendar();
179
- this.dateSelected.emit(this.calendar);
180
- this.eventSelected.emit(this.allEvents);
181
- }
182
- addAppointment() {
183
- this.isModalOpen = true;
184
- this.calendarQuestion = this.referenceQuestions.map(q => ({ ...q, input: '' }));
185
- this.referenceQuestions.forEach(ques => {
186
- // clear the input
187
- if (ques.referenceField != 'selectedDate') {
188
- if (ques.type == 'Dropdown') {
189
- delete ques.input;
190
- delete ques.selectedValue;
191
- // VD 06Sep24 calendar changes
192
- }
193
- else {
194
- delete ques.input;
195
- }
196
- }
197
- });
198
- console.log(this.referenceQuestions);
199
- this.editingEventId = null;
200
- this.calendarQuestion = this.referenceQuestions;
201
- this.openBookModel();
202
- // sunday comment
203
- //this.openQuestionBookModal();
204
- }
205
- openBookModel() {
206
- this.openModal.emit({
207
- qbRefrenceBook: this.qbRefrenceBook,
208
- referenceQuestions: this.referenceQuestions,
209
- modalTitle: this.modalTitle,
210
- modalSize: this.modalSize,
211
- saveButtonValue: this.saveButtonValue,
212
- modalFooter: this.modalFooter,
213
- });
214
- }
215
- closeCalendarModal() {
216
- this.isModalOpen = false;
217
- this.closeModal.emit(true);
218
- }
219
- // VD 06Sep24 calendar changes
220
- editEvent(event, entryGroup) {
221
- this.isModalOpen = true;
222
- this.referenceQuestions = Object.values(entryGroup);
223
- this.calendarQuestion = [...this.referenceQuestions]; // Make a copy of the current entries to edit
224
- this.editingEventId = event.id;
225
- this.editingEntryGroup = entryGroup; // Store the entry group being edited
226
- this.generateCalendar(); // Regenerate the calendar to reflect changes
227
- this.openBookModel();
228
- // suday comment
229
- // this.openQuestionBookModal();
230
- }
231
- deleteEvent(eventId, entryGroup) {
232
- let event = this.allEvents?.find(e => e?.id === eventId);
233
- if (event) {
234
- // Find the index of the entryGroup to delete
235
- const entryIndex = event.entries.indexOf(entryGroup);
236
- if (entryIndex > -1) {
237
- event.entries.splice(entryIndex, 1); // Remove the specific entry
238
- }
239
- // If the event has no more entries, remove the event entirely
240
- if (event.entries.length === 0) {
241
- const eventIndex = this.allEvents?.indexOf(event);
242
- if (eventIndex > -1) {
243
- this.allEvents?.splice(eventIndex, 1); // Remove the entire event
244
- }
245
- }
246
- }
247
- let eventData = {};
248
- eventData['action'] = "delete";
249
- eventData['data'] = event;
250
- this.eventSelected.emit(eventData);
251
- this.generateCalendar(); // Regenerate the calendar to reflect the changes
252
- }
253
- // VD 06Sep24 calendar changes
254
- addEvent(day, entryQues) {
255
- // Transform new entries into the desired format
256
- const newEntries = entryQues.reduce((acc, q) => {
257
- acc[q.id] = { ...q };
258
- return acc;
259
- }, {});
260
- // Find an existing event for the given date
261
- const existingEvent = day.events?.find(event => event.date === day.date);
262
- if (existingEvent) {
263
- // Merge new entries into the existing event's entries array
264
- // Check if the entries array already contains an object with the same id
265
- const existingEntries = existingEvent.entries.map(entry => ({ ...entry }));
266
- // Append new entries to the existing entries
267
- existingEntries.push(newEntries);
268
- existingEvent.entries = existingEntries;
269
- }
270
- else {
271
- // Create a new event if it doesn't exist for the given date
272
- const newEvent = {
273
- id: this.generateId(),
274
- date: day.date,
275
- entries: [newEntries] // Wrap the new entries in an array
276
- };
277
- day.events = day?.events || [];
278
- day.events.push(newEvent);
279
- this.allEvents?.push(newEvent);
280
- //this.eventSelected.emit(this.allEvents);
281
- let eventData = {};
282
- eventData['action'] = "add";
283
- eventData['data'] = newEvent;
284
- this.eventSelected.emit(eventData);
285
- }
286
- this.generateCalendar();
287
- console.log('allEvents', this.allEvents);
288
- }
289
- // VD 06Sep24 calendar changes
290
- onSave() {
291
- if (this.editingEventId !== null) {
292
- const event = this.allEvents?.find(e => e?.id === this.editingEventId);
293
- if (event && this.editingEntryGroup) {
294
- // Update the specific entry group within the event
295
- const entryIndex = event.entries.findIndex(entryGroup => entryGroup === this.editingEntryGroup);
296
- if (entryIndex > -1) {
297
- event.entries[entryIndex] = this.calendarQuestion.reduce((acc, q) => {
298
- acc[q.id] = { ...q };
299
- return acc;
300
- }, {});
301
- }
302
- }
303
- // this.eventSelected.emit(this.allEvents);
304
- let eventData = {};
305
- eventData['action'] = "edit";
306
- eventData['data'] = event;
307
- this.eventSelected.emit(eventData);
308
- }
309
- else {
310
- if (this.selectedDay) {
311
- this.addEvent(this.selectedDay, this.calendarQuestion);
312
- }
313
- }
314
- this.closeCalendarModal();
315
- this.generateCalendar();
316
- }
317
- // onCancel() {
318
- // console.log('Cancel button clicked');
319
- // this.closeCalendarModal();
320
- // }
321
- //this funtion need to be used
322
- // handleQuestionEvent(ques){
323
- // // Update the questions array with the new question
324
- // const index = this.calendarQuestion.findIndex(q => q.id === ques.id);
325
- // if (index > -1) {
326
- // // If question already exists, update it
327
- // this.calendarQuestion[index] = ques;
328
- // } else {
329
- // // If question doesn't exist, add it to the array
330
- // this.calendarQuestion.push(ques);
331
- // }
332
- // console.log(this.calendarQuestion);
333
- // }
334
- // VD 06Sep24 calendar changes
335
- generateId() {
336
- return '_' + Math.random().toString(36).substr(2, 9);
337
- }
338
- getEntryKeys(entryGroup) {
339
- return Object.keys(entryGroup);
340
- }
341
- removeCharacters(questionText) {
342
- let updatedText = questionText?.replace(/<[^>]*>/g, '');
343
- return updatedText;
344
- }
345
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomCalendarComponent, deps: [{ token: i1.ChangeService }], target: i0.ɵɵFactoryTarget.Component });
346
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomCalendarComponent, selector: "app-custom-calendar", inputs: { allEvents: "allEvents", question: "question", nxtId: "nxtId" }, outputs: { eventSelected: "eventSelected", dateSelected: "dateSelected", openModal: "openModal", closeModal: "closeModal" }, ngImport: i0, template: "<div class=\"align-calendar\">\n <div class=\"calendar-container\">\n <div class=\"calendar-header\">\n <button (click)=\"previousMonth()\"><< Previous >></button>\n <h3>{{ currentDate | date: 'MMMM yyyy' }}</h3>\n <button (click)=\"nextMonth()\"><< Next >></button>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"day-of-week\" *ngFor=\"let day of daysOfWeek\">{{ day }}</div>\n <div\n class=\"calendar-day\"\n *ngFor=\"let day of calendarDays\"\n [class.not-current-month]=\"!day.isCurrentMonth\"\n [class.past]=\"day.isPast\"\n [class.today]=\"day.isToday\"\n [class.future]=\"day.isFuture\"\n [class.selected]=\"day.isSelected\"\n (click)=\"selectDay(day)\"\n >\n <div class=\"day-number\">{{ day.date.getDate() }}\n <span *ngIf=\"day?.events?.length > 0\" class=\"entry-indicator\" [class.select]=\"day?.isSelected\"></span>\n </div>\n <!-- <div *ngFor=\"let event of day.events\" >\n <div *ngFor=\"let entryGroup of event.entries\" class=\"event\">\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\">\n <div *ngIf=\"entryGroup[key].type == 'Time'\">\n {{ entryGroup[key].input?.value | date: 'shortTime' }}\n </div>\n <div *ngIf=\"entryGroup[key].type != 'Time'\">\n {{ entryGroup[key].input }}\n </div>\n </div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n <div class=\"appoinappointment\">\n <div class=\"appointments-container\">\n <h4>Add Appointment</h4>\n <button *ngIf=\"selectedDay\" (click)=\"addAppointment()\">Add</button>\n </div>\n <!--VD 06Sep24 calendar updates--> \n <!-- RS 09DEC24 Changed keys--> \n <div *ngIf=\"showAppoinmentSection && selectedDay?.events?.length > 0\" class=\"appointments-container\">\n <h4>Appointments</h4>\n <div *ngFor=\"let event of selectedDay?.events\">\n <div class=\"event\" *ngFor=\"let entryGroup of event.entries\">\n <div class=\"event-info\">\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\" class=\"entry-row\">\n <div *ngIf=\"entryGroup[key].questionText\" class=\"entry-text\">\n {{removeCharacters(entryGroup[key].questionText)}}:\n </div>\n <div class=\"entry-value\">\n <!-- VD 09Sep24- date type and link type updates -->\n <span *ngIf=\"entryGroup[key].type != 'Time' && entryGroup[key].type != 'Link'&& entryGroup[key].type != 'Date'\">{{ entryGroup[key].input }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Time'\">{{ entryGroup[key].input | date: 'shortTime' }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Date'\">{{ entryGroup[key].input | date: 'mediumDate' }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Link'\">\n <a [href]=\"'//'+ entryGroup[key].input\" target=\"_blank\">{{removeCharacters(entryGroup[key].questionText)}}</a>\n </span>\n </div>\n </div>\n <div class=\"event-actions\">\n <button (click)=\"editEvent(event,entryGroup)\">Edit</button>\n <button (click)=\"deleteEvent(event.id,entryGroup)\">Delete</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<!-- <app-custom-model\n [modalTitle]=\"modalTitle\"\n [isModalOpen]=\"isModalOpen\"\n [modalSize]=\"modalSize\"\n [saveButtonValue]=\"saveButtonValue\"\n [modalFooter]=\"modalFooter\"\n (saveButtonEmit)=\"onSave()\"\n (cancelButtonEmit)=\"onCancel()\"\n>\n<lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n<ng-template dynamicComponentHost ></ng-template>\n</app-custom-model> -->", styles: [".calendar-container{flex:1}.appoinappointment{flex:1;margin-left:10px}.calendar-header{display:flex;justify-content:space-between;align-items:center}.selected{box-shadow:0 0 5px #00000080;background-color:green!important;color:#fff!important}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}.day-of-week{text-align:center;font-weight:700;padding:5px;background-color:#f0f0f0;border:1px solid #ccc}.calendar-day{border:1px solid #ccc;padding:5px;display:flex;flex-direction:column;align-items:flex-start;background-color:#fff;position:relative;cursor:pointer}.calendar-day.not-current-month{background-color:#f0f0f0}.calendar-day.past{color:#aaa}.calendar-day.today{background-color:#e6ffe6;font-weight:700}.calendar-day.future{color:#000}.day-number{font-size:1.2em;margin-bottom:5px}.event{background-color:#d1e7dd;border-left:4px solid #0f5132;margin:5px 0;padding:2px 5px;border-radius:3px}.event-title{font-weight:700}.event-time{font-size:.8em}input[type=text],input[type=time]{width:100%;margin-top:5px;box-sizing:border-box}button{margin-top:5px;align-self:stretch;margin-left:0!important}.calendar-header button{margin-top:5px;align-self:stretch;margin-left:0!important;border:none;background:none}.align-calendar{display:flex;width:100%}.form-group.content-box{padding-bottom:0!important}.entry-indicator{position:absolute;top:5px;right:5px;width:10px;height:10px;background-color:#0f5132;border-radius:50%}.select{background-color:#fff}.entry-row{display:flex;align-items:center;margin-bottom:5px}.entry-text{font-weight:700;margin-right:10px;white-space:nowrap}.entry-value{flex:1;word-break:break-word}.entry-value a{color:#4caf50}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
347
- }
348
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomCalendarComponent, decorators: [{
349
- type: Component,
350
- args: [{ selector: 'app-custom-calendar', template: "<div class=\"align-calendar\">\n <div class=\"calendar-container\">\n <div class=\"calendar-header\">\n <button (click)=\"previousMonth()\"><< Previous >></button>\n <h3>{{ currentDate | date: 'MMMM yyyy' }}</h3>\n <button (click)=\"nextMonth()\"><< Next >></button>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"day-of-week\" *ngFor=\"let day of daysOfWeek\">{{ day }}</div>\n <div\n class=\"calendar-day\"\n *ngFor=\"let day of calendarDays\"\n [class.not-current-month]=\"!day.isCurrentMonth\"\n [class.past]=\"day.isPast\"\n [class.today]=\"day.isToday\"\n [class.future]=\"day.isFuture\"\n [class.selected]=\"day.isSelected\"\n (click)=\"selectDay(day)\"\n >\n <div class=\"day-number\">{{ day.date.getDate() }}\n <span *ngIf=\"day?.events?.length > 0\" class=\"entry-indicator\" [class.select]=\"day?.isSelected\"></span>\n </div>\n <!-- <div *ngFor=\"let event of day.events\" >\n <div *ngFor=\"let entryGroup of event.entries\" class=\"event\">\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\">\n <div *ngIf=\"entryGroup[key].type == 'Time'\">\n {{ entryGroup[key].input?.value | date: 'shortTime' }}\n </div>\n <div *ngIf=\"entryGroup[key].type != 'Time'\">\n {{ entryGroup[key].input }}\n </div>\n </div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n <div class=\"appoinappointment\">\n <div class=\"appointments-container\">\n <h4>Add Appointment</h4>\n <button *ngIf=\"selectedDay\" (click)=\"addAppointment()\">Add</button>\n </div>\n <!--VD 06Sep24 calendar updates--> \n <!-- RS 09DEC24 Changed keys--> \n <div *ngIf=\"showAppoinmentSection && selectedDay?.events?.length > 0\" class=\"appointments-container\">\n <h4>Appointments</h4>\n <div *ngFor=\"let event of selectedDay?.events\">\n <div class=\"event\" *ngFor=\"let entryGroup of event.entries\">\n <div class=\"event-info\">\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\" class=\"entry-row\">\n <div *ngIf=\"entryGroup[key].questionText\" class=\"entry-text\">\n {{removeCharacters(entryGroup[key].questionText)}}:\n </div>\n <div class=\"entry-value\">\n <!-- VD 09Sep24- date type and link type updates -->\n <span *ngIf=\"entryGroup[key].type != 'Time' && entryGroup[key].type != 'Link'&& entryGroup[key].type != 'Date'\">{{ entryGroup[key].input }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Time'\">{{ entryGroup[key].input | date: 'shortTime' }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Date'\">{{ entryGroup[key].input | date: 'mediumDate' }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Link'\">\n <a [href]=\"'//'+ entryGroup[key].input\" target=\"_blank\">{{removeCharacters(entryGroup[key].questionText)}}</a>\n </span>\n </div>\n </div>\n <div class=\"event-actions\">\n <button (click)=\"editEvent(event,entryGroup)\">Edit</button>\n <button (click)=\"deleteEvent(event.id,entryGroup)\">Delete</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<!-- <app-custom-model\n [modalTitle]=\"modalTitle\"\n [isModalOpen]=\"isModalOpen\"\n [modalSize]=\"modalSize\"\n [saveButtonValue]=\"saveButtonValue\"\n [modalFooter]=\"modalFooter\"\n (saveButtonEmit)=\"onSave()\"\n (cancelButtonEmit)=\"onCancel()\"\n>\n<lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n<ng-template dynamicComponentHost ></ng-template>\n</app-custom-model> -->", styles: [".calendar-container{flex:1}.appoinappointment{flex:1;margin-left:10px}.calendar-header{display:flex;justify-content:space-between;align-items:center}.selected{box-shadow:0 0 5px #00000080;background-color:green!important;color:#fff!important}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}.day-of-week{text-align:center;font-weight:700;padding:5px;background-color:#f0f0f0;border:1px solid #ccc}.calendar-day{border:1px solid #ccc;padding:5px;display:flex;flex-direction:column;align-items:flex-start;background-color:#fff;position:relative;cursor:pointer}.calendar-day.not-current-month{background-color:#f0f0f0}.calendar-day.past{color:#aaa}.calendar-day.today{background-color:#e6ffe6;font-weight:700}.calendar-day.future{color:#000}.day-number{font-size:1.2em;margin-bottom:5px}.event{background-color:#d1e7dd;border-left:4px solid #0f5132;margin:5px 0;padding:2px 5px;border-radius:3px}.event-title{font-weight:700}.event-time{font-size:.8em}input[type=text],input[type=time]{width:100%;margin-top:5px;box-sizing:border-box}button{margin-top:5px;align-self:stretch;margin-left:0!important}.calendar-header button{margin-top:5px;align-self:stretch;margin-left:0!important;border:none;background:none}.align-calendar{display:flex;width:100%}.form-group.content-box{padding-bottom:0!important}.entry-indicator{position:absolute;top:5px;right:5px;width:10px;height:10px;background-color:#0f5132;border-radius:50%}.select{background-color:#fff}.entry-row{display:flex;align-items:center;margin-bottom:5px}.entry-text{font-weight:700;margin-right:10px;white-space:nowrap}.entry-value{flex:1;word-break:break-word}.entry-value a{color:#4caf50}\n"] }]
351
- }], ctorParameters: () => [{ type: i1.ChangeService }], propDecorators: { eventSelected: [{
352
- type: Output
353
- }], dateSelected: [{
354
- type: Output
355
- }], openModal: [{
356
- type: Output
357
- }], closeModal: [{
358
- type: Output
359
- }], allEvents: [{
360
- type: Input
361
- }], question: [{
362
- type: Input
363
- }], nxtId: [{
364
- type: Input
365
- }] } });
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNhbGVuZGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1jYWxlbmRhci9jdXN0b20tY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWNhbGVuZGFyL2N1c3RvbS1jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQzs7OztBQW1CckgsTUFBTSxPQUFPLHVCQUF1QjtJQWdDYjtJQS9CWCxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUNsRCw4QkFBOEI7SUFDcEIsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdkMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdEMsU0FBUyxHQUFVLEVBQUUsQ0FBQztJQUN0QixRQUFRLENBQVU7SUFDbEIsS0FBSyxDQUFTO0lBQ3ZCLDJGQUEyRjtJQUMzRixPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2Isa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLGNBQWMsQ0FBSztJQUNuQixnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDdEIsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLFdBQVcsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQy9CLFlBQVksR0FBa0IsRUFBRSxDQUFDO0lBQ2pDLFVBQVUsR0FBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxF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LENBQUMsVUFBZTtRQUMxQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQW1CO1FBQ2xDLElBQUksV0FBVyxHQUFHLFlBQVksRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7d0dBeldZLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLGtRQ25CcEMsODJJQXFGdUI7OzRGRGxFVix1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCO2tGQUtyQixhQUFhO3NCQUF0QixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSAnLi4vLi4vd3JhcHBlcic7XG4vL2ltcG9ydCB7IFF1ZXN0aW9uYm9va0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BhZ2VzL3F1ZXN0aW9uYm9vay9xdWVzdGlvbmJvb2suY29tcG9uZW50Jztcbi8vaW1wb3J0IHsgQ29tcG9uZW50aG9zdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29tcG9uZW50aG9zdC9jb21wb25lbnRob3N0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW50ZXJmYWNlIENhbGVuZGFyRGF5IHtcbiAgZGF0ZTogRGF0ZTtcbiAgZXZlbnRzOiBhbnlbXTtcbiAgaXNDdXJyZW50TW9udGg6IGJvb2xlYW47XG4gIGlzUGFzdDogYm9vbGVhbjtcbiAgaXNUb2RheTogYm9vbGVhbjtcbiAgaXNGdXR1cmU6IGJvb2xlYW47XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWN1c3RvbS1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tY2FsZW5kYXIuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21DYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBldmVudFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICBAT3V0cHV0KCkgZGF0ZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvcGVuTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNsb3NlTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgYWxsRXZlbnRzOiBhbnlbXSA9IFtdOyBcbiAgQElucHV0KCkgcXVlc3Rpb246IFF1ZXN0aW9uXG4gIEBJbnB1dCgpIG54dElkOiBzdHJpbmc7XG4gIC8vQFZpZXdDaGlsZChDb21wb25lbnRob3N0RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljSG9zdDogQ29tcG9uZW50aG9zdERpcmVjdGl2ZTtcbiAgZW50cmllcyA9IFtdO1xuICByZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcbiAgcWJSZWZyZW5jZUJvb2s6YW55O1xuICBjYWxlbmRhclF1ZXN0aW9uID0gW107XG4gIGNhbGVuZGFyID0ge307XG4gIGN1cnJlbnREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgY2FsZW5kYXJEYXlzOiBDYWxlbmRhckRheVtdID0gW107XG4gIGRheXNPZldlZWs6IHN0cmluZ1tdID0gWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddO1xuICBuZXdFdmVudFRpdGxlOiBzdHJpbmcgPSAnJztcbiAgbmV3RXZlbnRUaW1lOiBzdHJpbmcgPSAnJztcbiAgbmV3RGVzY3JpcHRpb246IHN0cmluZyA9ICcnO1xuICBuZXdMaW5rOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWREYXk6IENhbGVuZGFyRGF5IHwgbnVsbCA9IG51bGw7XG4gIGlzTW9kYWxPcGVuID0gZmFsc2U7XG4gIG1vZGFsVGl0bGUgPSAnQ3VzdG9tIE1vZGFsJztcbiAgbW9kYWxTaXplID0gJ2xhcmdlJztcbiAgc2F2ZUJ1dHRvblZhbHVlID0gJ1NhdmUnO1xuICBtb2RhbEZvb3RlciA9IHRydWU7XG4gIGVkaXRpbmdFdmVudElkOiBudW1iZXI7XG4gIGVkaXRpbmdFbnRyeUdyb3VwOiBhbnk7XG4gIHNob3dBcHBvaW5tZW50U2VjdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIHN1YnNjcmlwdGlvbjogYW55O1xuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlKSB7IH1cbiAgbmdPbkluaXQoKSB7XG4gICAgIGlmKHRoaXMucXVlc3Rpb24/LmlucHV0KXtcbiAgICAgIHRoaXMuYWxsRXZlbnRzID0gdGhpcy5xdWVzdGlvbi5pbnB1dDtcbiAgICAgfVxuICAgIHRoaXMucHJvY2Vzc1F1ZXN0aW9uKCk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY3VzdG9tQ2hhbmdlJC5zdWJzY3JpYmUoXG4gICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICBpZihjaGFuZ2VWYWx1ZSA9PSAnY2FsZW5kYXItbW9kYWwtc2F2ZScpIHtcbiAgICAgICAgICAgIHRoaXMub25TYXZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGNoYW5nZVZhbHVlID09ICdkYXRhQmluZCcpIHtcbiAgICAgICAgICAgIGlmKHRoaXMucXVlc3Rpb24/LmlucHV0KXtcbiAgICAgICAgICAgICAgdGhpcy5hbGxFdmVudHMgPSB0aGlzLnF1ZXN0aW9uLmlucHV0O1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1F1ZXN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgIC8vIHRoaXMuZGF0ZVNlbGVjdGVkLmVtaXQodGhpcy5jYWxlbmRhcik7XG4gICAgLy90aGlzLmV2ZW50U2VsZWN0ZWQuZW1pdCh0aGlzLmFsbEV2ZW50cyk7XG4gIH1cbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgcHJvY2Vzc1F1ZXN0aW9uKCl7XG4gICAgdGhpcy5lbnRyaWVzID0gSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10pO1xuICAgIHRoaXMucWJSZWZyZW5jZUJvb2sgPSBKU09OLnBhcnNlKHRoaXMucXVlc3Rpb25bJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10pO1xuICAgIGxldCB0aXRsZSA9IHRoaXMucWJSZWZyZW5jZUJvb2s/LnF1ZXN0aW9uYm9vaz8udGl0bGU7XG4gICAgdGhpcy5tb2RhbFRpdGxlID0gdGl0bGU7XG4gICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcbiAgICBpZih0aGlzLmVudHJpZXMubGVuZ3RoID4gMCl7XG4gICAgICAgdGhpcy5lbnRyaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgIGlmKGVsZW1lbnQucXVlc3Rpb25SZWZlcmVuY2Upe1xuICAgICAgICAgICAgIGxldCBxUmVmZXJlbmNlID0gSlNPTi5wYXJzZShlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKTtcbiAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucy5wdXNoKHFSZWZlcmVuY2U/LnF1ZXN0aW9uKTtcbiAgICAgICAgICAgfVxuICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygnZW50cmllcy0tPicpO1xuICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbi0tPicpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuZW50cmllcyk7XG4gICAgY29uc29sZS5sb2codGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMpO1xuICB9XG4gICAvLyBzdW5kYXkgY29tbWVudFxuICAvLyBvcGVuUXVlc3Rpb25Cb29rTW9kYWwoKSB7XG4gIC8vICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuZHluYW1pY0hvc3Qudmlld0NvbnRhaW5lclJlZjtcbiAgLy8gICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gIC8vICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoUXVlc3Rpb25ib29rQ29tcG9uZW50KTtcbiAgLy8gICBjb21wb25lbnRSZWYuaW5zdGFuY2UucWJJdGVtID0gdGhpcy5xYlJlZnJlbmNlQm9vaztcbiAgLy8gICBjb21wb25lbnRSZWYuaW5zdGFuY2UucXVlc3Rpb25zID0gdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnM7XG4gIC8vICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmhhbmRsZVF1ZXN0aW9uLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4gdGhpcy5oYW5kbGVRdWVzdGlvbkV2ZW50KGV2ZW50KSk7XG4gIC8vIH1cblxuICBnZW5lcmF0ZUNhbGVuZGFyKCkge1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbW9udGggPSB0aGlzLmN1cnJlbnREYXRlLmdldE1vbnRoKCk7XG5cbiAgICBjb25zdCBzdGFydE9mTW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7XG4gICAgY29uc3QgZW5kT2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCk7XG5cbiAgICBjb25zdCBzdGFydERheU9mV2VlayA9IHN0YXJ0T2ZNb250aC5nZXREYXkoKTtcbiAgICBjb25zdCBlbmREYXlPZldlZWsgPSBlbmRPZk1vbnRoLmdldERheSgpO1xuXG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoc3RhcnRPZk1vbnRoKTtcbiAgICBzdGFydERhdGUuc2V0RGF0ZShzdGFydERhdGUuZ2V0RGF0ZSgpIC0gc3RhcnREYXlPZldlZWspO1xuXG4gICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKGVuZE9mTW9udGgpO1xuICAgIGVuZERhdGUuc2V0RGF0ZShlbmREYXRlLmdldERhdGUoKSArICg2IC0gZW5kRGF5T2ZXZWVrKSk7XG5cbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xuICAgIFxuICAgICB0aGlzLmNhbGVuZGFyRGF5cyA9IFtdO1xuICAgICAgZm9yIChsZXQgZCA9IG5ldyBEYXRlKHN0YXJ0RGF0ZSk7IGQgPD0gZW5kRGF0ZTsgZC5zZXREYXRlKGQuZ2V0RGF0ZSgpICsgMSkpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGQpO1xuICAgICAgICB0aGlzLmNhbGVuZGFyRGF5cy5wdXNoKHtcbiAgICAgICAgICBkYXRlOiBkYXRlLFxuICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgICAgaXNDdXJyZW50TW9udGg6IGQuZ2V0TW9udGgoKSA9PT0gbW9udGgsXG4gICAgICAgICAgaXNQYXN0OiBkYXRlIDwgdG9kYXksXG4gICAgICAgICAgaXNUb2RheTogZGF0ZS5nZXRUaW1lKCkgPT09IHRvZGF5LmdldFRpbWUoKSxcbiAgICAgICAgICBpc0Z1dHVyZTogZGF0ZSA+IHRvZGF5LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIC8vIFBvcHVsYXRlIGNhbGVuZGFyIHdpdGggZXZlbnRzIGZyb20gYWxsRXZlbnRzIGFycmF5XG4gICAgdGhpcy5jYWxlbmRhckRheXMuZm9yRWFjaChkYXkgPT4ge1xuICAgICAgZGF5LmV2ZW50cyA9IHRoaXMuYWxsRXZlbnRzPy5maWx0ZXIoZXZlbnQgPT4gZXZlbnQ/LmRhdGU/LnRvRGF0ZVN0cmluZygpID09PSBkYXkuZGF0ZS50b0RhdGVTdHJpbmcoKSk7XG4gICAgfSk7XG4gICAgIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICAgIGxldCBjYWwgPSB7fVxuICAgIGNhbFsneWVhciddID0geWVhcjtcbiAgICBjYWxbJ21vbnRoJ10gPSBtb250aCArIDE7XG4gICAgdGhpcy5jYWxlbmRhciA9IGNhbDtcbiAgfVxuXG4gIHNlbGVjdERheShkYXk6IENhbGVuZGFyRGF5KSB7XG4gICAgY29uc29sZS5sb2coZGF5KTtcbiAgICAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gICAgdGhpcy5zaG93QXBwb2lubWVudFNlY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWREYXkgPSBkYXk7XG4gICAvLyB0aGlzLmV2ZW50U2VsZWN0ZWQuZW1pdChkYXk/LmV2ZW50cyk7XG4gICAgY29uc3QgcHJldmlvdXNseVNlbGVjdGVkRGF5ID0gdGhpcy5jYWxlbmRhckRheXMuZmluZChkID0+IGQuaXNTZWxlY3RlZCk7XG4gICAgaWYgKHByZXZpb3VzbHlTZWxlY3RlZERheSkge1xuICAgICAgcHJldmlvdXNseVNlbGVjdGVkRGF5LmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gU2VsZWN0IHRoZSBjbGlja2VkIGRheVxuICAgIGRheS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgIC8vIFZEIDA5U2VwMjQtIHNldHVwIHRoZSBxdWVyeSBwYXJhbSBkYXRhIGZvciBhcGkgY2FsbFxuICAgIGxldCByZWZlcmVuY2VEYXRhID0gW107XG4gICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMuZm9yRWFjaChxdWVzID0+IHtcbiAgICAgIC8vIFZEIDA5LTA5LTI0IGdldCB0aGUgc2VsZWN0ZWQgZGF0ZVxuICAgICAgLy8gbmVlZCB0byBhZGQgaW4gdGhlIGRvY3VtZW50XG4gICAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAgICAgIGlmKHF1ZXMucmVmZXJlbmNlRmllbGQgPT0gJ3NlbGVjdGVkRGF0ZScpe1xuICAgICAgICAgIHF1ZXMuaW5wdXQgPSBkYXkuZGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgIH1cbiAgICAgICAvLyBWRCAwOS0wOS0yNCBnZXQgdGhlIHF1ZXJ5IHJlZnJlbmNlICBmaWVsZCBkYXRhIHRvIHBhc3MgdGhlIHF1ZXJ5UGFyYW0gIGZvciBhcGlcbiAgICAgICBpZihxdWVzLnN1YlRleHQpe1xuICAgICAgICBsZXQgc3ViVGV4dCA9IEpTT04ucGFyc2UocXVlcy5zdWJUZXh0KTtcbiAgICAgICAgaWYgKHN1YlRleHQucXVlcnlGaWVsZCAmJiBzdWJUZXh0LnF1ZXJ5VmFsdWVSZWZlcmVuY2UpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UXVlcyA9IHF1ZXM7XG4gICAgICAgICAgICBsZXQgcXVlcnlSZWZlcmVuY2VzID0gc3ViVGV4dC5xdWVyeVZhbHVlUmVmZXJlbmNlLnNwbGl0KCcsJyk7ICAgXG4gICAgICAgICAgICBxdWVyeVJlZmVyZW5jZXMuZm9yRWFjaChyZWZGaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlZlF1ZXMgPSB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucy5maW5kKHEgPT4gcS5yZWZlcmVuY2VGaWVsZCA9PT0gcmVmRmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChyZWZRdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZURhdGEucHVzaChyZWZRdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgcmVmZXJlbmNlRGF0YSBhcnJheSB0byB0aGUgY3VycmVudCBxdWVzdGlvblxuICAgICAgICAgICAgY3VycmVudFF1ZXMucmVmZXJlbmNlUXVlcnlEYXRhID0gcmVmZXJlbmNlRGF0YTtcbiAgICAgICAgfVxuICAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJldmlvdXNNb250aCgpIHtcbiAgICB0aGlzLnNob3dBcHBvaW5tZW50U2VjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY3VycmVudERhdGUuc2V0TW9udGgodGhpcy5jdXJyZW50RGF0ZS5nZXRNb250aCgpIC0gMSk7XG4gICAgdGhpcy5jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKHRoaXMuY3VycmVudERhdGUpOyAvLyBFbnN1cmUgdGhlIGRhdGUgb2JqZWN0IGlzIHVwZGF0ZWRcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICB0aGlzLmRhdGVTZWxlY3RlZC5lbWl0KHRoaXMuY2FsZW5kYXIpO1xuICAgIHRoaXMuZXZlbnRTZWxlY3RlZC5lbWl0KHRoaXMuYWxsRXZlbnRzKTtcbiAgfVxuXG4gIG5leHRNb250aCgpIHtcbiAgICAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gICAgdGhpcy5zaG93QXBwb2lubWVudFNlY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnREYXRlLnNldE1vbnRoKHRoaXMuY3VycmVudERhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgIHRoaXMuY3VycmVudERhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnREYXRlKTsgLy8gRW5zdXJlIHRoZSBkYXRlIG9iamVjdCBpcyB1cGRhdGVkXG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQuZW1pdCh0aGlzLmNhbGVuZGFyKTtcbiAgICB0aGlzLmV2ZW50U2VsZWN0ZWQuZW1pdCh0aGlzLmFsbEV2ZW50cyk7XG4gIH1cblxuICBhZGRBcHBvaW50bWVudCgpIHtcbiAgICB0aGlzLmlzTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICAgdGhpcy5jYWxlbmRhclF1ZXN0aW9uID0gdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMubWFwKHEgPT4gKHsgLi4ucSwgaW5wdXQ6ICcnIH0pKTtcbiAgICB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xuICAgICAgLy8gY2xlYXIgdGhlIGlucHV0XG4gICAgICBpZihxdWVzLnJlZmVyZW5jZUZpZWxkICE9ICdzZWxlY3RlZERhdGUnKXtcbiAgICAgICAgaWYocXVlcy50eXBlID09ICdEcm9wZG93bicpe1xuICAgICAgICAgIGRlbGV0ZSBxdWVzLmlucHV0O1xuICAgICAgICAgIGRlbGV0ZSBxdWVzLnNlbGVjdGVkVmFsdWU7XG4gICAgICAgICAgIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXMuaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucyk7XG4gICAgdGhpcy5lZGl0aW5nRXZlbnRJZCA9IG51bGw7XG4gICAgdGhpcy5jYWxlbmRhclF1ZXN0aW9uID0gdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnM7XG4gICAgdGhpcy5vcGVuQm9va01vZGVsKCk7XG4gICAgLy8gc3VuZGF5IGNvbW1lbnRcbiAgICAvL3RoaXMub3BlblF1ZXN0aW9uQm9va01vZGFsKCk7XG4gIH1cblxuICBvcGVuQm9va01vZGVsKCl7XG4gICAgdGhpcy5vcGVuTW9kYWwuZW1pdCh7XG4gICAgICBxYlJlZnJlbmNlQm9vazogdGhpcy5xYlJlZnJlbmNlQm9vayxcbiAgICAgIHJlZmVyZW5jZVF1ZXN0aW9uczogdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMsXG4gICAgICBtb2RhbFRpdGxlIDogdGhpcy5tb2RhbFRpdGxlLFxuICAgICAgbW9kYWxTaXplIDogdGhpcy5tb2RhbFNpemUsXG4gICAgICBzYXZlQnV0dG9uVmFsdWUgOiB0aGlzLnNhdmVCdXR0b25WYWx1ZSxcbiAgICAgIG1vZGFsRm9vdGVyIDogdGhpcy5tb2RhbEZvb3RlcixcblxuICAgIH0pO1xuICB9XG5cbiAgY2xvc2VDYWxlbmRhck1vZGFsKCkge1xuICAgIHRoaXMuaXNNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmNsb3NlTW9kYWwuZW1pdCh0cnVlKTtcbiAgfVxuIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuXG5lZGl0RXZlbnQoZXZlbnQ6IGFueSwgZW50cnlHcm91cDogYW55KSB7XG4gIHRoaXMuaXNNb2RhbE9wZW4gPSB0cnVlO1xuICB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucyA9IE9iamVjdC52YWx1ZXMoZW50cnlHcm91cCk7XG4gIHRoaXMuY2FsZW5kYXJRdWVzdGlvbiA9IFsuLi50aGlzLnJlZmVyZW5jZVF1ZXN0aW9uc107IC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGVudHJpZXMgdG8gZWRpdFxuICB0aGlzLmVkaXRpbmdFdmVudElkID0gZXZlbnQuaWQ7XG4gIHRoaXMuZWRpdGluZ0VudHJ5R3JvdXAgPSBlbnRyeUdyb3VwOyAvLyBTdG9yZSB0aGUgZW50cnkgZ3JvdXAgYmVpbmcgZWRpdGVkXG4gIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpOyAvLyBSZWdlbmVyYXRlIHRoZSBjYWxlbmRhciB0byByZWZsZWN0IGNoYW5nZXNcbiAgdGhpcy5vcGVuQm9va01vZGVsKCk7XG4gIC8vIHN1ZGF5IGNvbW1lbnRcbiAvLyB0aGlzLm9wZW5RdWVzdGlvbkJvb2tNb2RhbCgpO1xuXG59XG5cbmRlbGV0ZUV2ZW50KCBldmVudElkOiBudW1iZXIsIGVudHJ5R3JvdXA6IGFueSkge1xuICBsZXQgZXZlbnQgPSB0aGlzLmFsbEV2ZW50cz8uZmluZChlID0+IGU/LmlkID09PSBldmVudElkKTtcbiAgaWYgKGV2ZW50KSB7XG4gICAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZW50cnlHcm91cCB0byBkZWxldGVcbiAgICAgIGNvbnN0IGVudHJ5SW5kZXggPSBldmVudC5lbnRyaWVzLmluZGV4T2YoZW50cnlHcm91cCk7XG4gICAgICBpZiAoZW50cnlJbmRleCA+IC0xKSB7XG4gICAgICAgICAgZXZlbnQuZW50cmllcy5zcGxpY2UoZW50cnlJbmRleCwgMSk7IC8vIFJlbW92ZSB0aGUgc3BlY2lmaWMgZW50cnlcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGV2ZW50IGhhcyBubyBtb3JlIGVudHJpZXMsIHJlbW92ZSB0aGUgZXZlbnQgZW50aXJlbHlcbiAgICAgIGlmIChldmVudC5lbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSB0aGlzLmFsbEV2ZW50cz8uaW5kZXhPZihldmVudCk7XG4gICAgICAgICAgaWYgKGV2ZW50SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICB0aGlzLmFsbEV2ZW50cz8uc3BsaWNlKGV2ZW50SW5kZXgsIDEpOyAvLyBSZW1vdmUgdGhlIGVudGlyZSBldmVudFxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBsZXQgZXZlbnREYXRhID0ge307XG4gICBldmVudERhdGFbJ2FjdGlvbiddID0gXCJkZWxldGVcIjtcbiAgIGV2ZW50RGF0YVsnZGF0YSddID0gZXZlbnQ7XG4gIHRoaXMuZXZlbnRTZWxlY3RlZC5lbWl0KGV2ZW50RGF0YSk7XG4gIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpOyAvLyBSZWdlbmVyYXRlIHRoZSBjYWxlbmRhciB0byByZWZsZWN0IHRoZSBjaGFuZ2VzXG59XG5cbiAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiAgYWRkRXZlbnQoZGF5OiBDYWxlbmRhckRheSwgZW50cnlRdWVzKSB7XG4gICAgLy8gVHJhbnNmb3JtIG5ldyBlbnRyaWVzIGludG8gdGhlIGRlc2lyZWQgZm9ybWF0XG4gICAgY29uc3QgbmV3RW50cmllcyA9IGVudHJ5UXVlcy5yZWR1Y2UoKGFjYywgcSkgPT4ge1xuICAgICAgICBhY2NbcS5pZF0gPSB7IC4uLnEgfTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICAvLyBGaW5kIGFuIGV4aXN0aW5nIGV2ZW50IGZvciB0aGUgZ2l2ZW4gZGF0ZVxuICAgIGNvbnN0IGV4aXN0aW5nRXZlbnQgPSBkYXkuZXZlbnRzPy5maW5kKGV2ZW50ID0+IGV2ZW50LmRhdGUgPT09IGRheS5kYXRlKTtcblxuICAgIGlmIChleGlzdGluZ0V2ZW50KSB7XG4gICAgICAgIC8vIE1lcmdlIG5ldyBlbnRyaWVzIGludG8gdGhlIGV4aXN0aW5nIGV2ZW50J3MgZW50cmllcyBhcnJheVxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZW50cmllcyBhcnJheSBhbHJlYWR5IGNvbnRhaW5zIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGlkXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRW50cmllcyA9IGV4aXN0aW5nRXZlbnQuZW50cmllcy5tYXAoZW50cnkgPT4gKHsgLi4uZW50cnkgfSkpO1xuICAgICAgICAvLyBBcHBlbmQgbmV3IGVudHJpZXMgdG8gdGhlIGV4aXN0aW5nIGVudHJpZXNcbiAgICAgICAgZXhpc3RpbmdFbnRyaWVzLnB1c2gobmV3RW50cmllcyk7XG4gICAgICAgIGV4aXN0aW5nRXZlbnQuZW50cmllcyA9IGV4aXN0aW5nRW50cmllcztcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgZXZlbnQgaWYgaXQgZG9lc24ndCBleGlzdCBmb3IgdGhlIGdpdmVuIGRhdGVcbiAgICAgICAgY29uc3QgbmV3RXZlbnQgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5nZW5lcmF0ZUlkKCksXG4gICAgICAgICAgICBkYXRlOiBkYXkuZGF0ZSxcbiAgICAgICAgICAgIGVudHJpZXM6IFtuZXdFbnRyaWVzXSAvLyBXcmFwIHRoZSBuZXcgZW50cmllcyBpbiBhbiBhcnJheVxuICAgICAgICB9O1xuICAgICAgICBkYXkuZXZlbnRzID0gZGF5Py5ldmVudHMgfHwgW11cbiAgICAgICAgZGF5LmV2ZW50cy5wdXNoKG5ld0V2ZW50KTtcbiAgICAgICAgdGhpcy5hbGxFdmVudHM/LnB1c2gobmV3RXZlbnQpO1xuICAgICAgICAvL3RoaXMuZXZlbnRTZWxlY3RlZC5lbWl0KHRoaXMuYWxsRXZlbnRzKTtcbiAgICAgICAgbGV0IGV2ZW50RGF0YSA9IHt9O1xuICAgICAgICBldmVudERhdGFbJ2FjdGlvbiddID0gXCJhZGRcIjtcbiAgICAgICAgZXZlbnREYXRhWydkYXRhJ10gPSBuZXdFdmVudDtcbiAgICAgICAgdGhpcy5ldmVudFNlbGVjdGVkLmVtaXQoZXZlbnREYXRhKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgY29uc29sZS5sb2coJ2FsbEV2ZW50cycsIHRoaXMuYWxsRXZlbnRzKTtcbn1cbiAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiBvblNhdmUoKSB7XG4gICAgaWYgKHRoaXMuZWRpdGluZ0V2ZW50SWQgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB0aGlzLmFsbEV2ZW50cz8uZmluZChlID0+IGU/LmlkID09PSB0aGlzLmVkaXRpbmdFdmVudElkKTtcbiAgICAgICAgaWYgKGV2ZW50ICYmIHRoaXMuZWRpdGluZ0VudHJ5R3JvdXApIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3BlY2lmaWMgZW50cnkgZ3JvdXAgd2l0aGluIHRoZSBldmVudFxuICAgICAgICAgICAgY29uc3QgZW50cnlJbmRleCA9IGV2ZW50LmVudHJpZXMuZmluZEluZGV4KGVudHJ5R3JvdXAgPT4gZW50cnlHcm91cCA9PT0gdGhpcy5lZGl0aW5nRW50cnlHcm91cCk7XG4gICAgICAgICAgICBpZiAoZW50cnlJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuZW50cmllc1tlbnRyeUluZGV4XSA9IHRoaXMuY2FsZW5kYXJRdWVzdGlvbi5yZWR1Y2UoKGFjYywgcSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhY2NbcS5pZF0gPSB7IC4uLnEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgLy8gdGhpcy5ldmVudFNlbGVjdGVkLmVtaXQodGhpcy5hbGxFdmVudHMpO1xuICAgICAgbGV0IGV2ZW50RGF0YSA9IHt9O1xuICAgICAgZXZlbnREYXRhWydhY3Rpb24nXSA9IFwiZWRpdFwiO1xuICAgICAgZXZlbnREYXRhWydkYXRhJ10gPSBldmVudDtcbiAgICAgIHRoaXMuZXZlbnRTZWxlY3RlZC5lbWl0KGV2ZW50RGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnQodGhpcy5zZWxlY3RlZERheSwgdGhpcy5jYWxlbmRhclF1ZXN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsb3NlQ2FsZW5kYXJNb2RhbCgpO1xuICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xufVxuXG4gIC8vIG9uQ2FuY2VsKCkge1xuICAvLyAgIGNvbnNvbGUubG9nKCdDYW5jZWwgYnV0dG9uIGNsaWNrZWQnKTtcbiAgLy8gICB0aGlzLmNsb3NlQ2FsZW5kYXJNb2RhbCgpO1xuICAvLyB9XG4gIC8vdGhpcyBmdW50aW9uIG5lZWQgdG8gYmUgdXNlZFxuICAvLyBoYW5kbGVRdWVzdGlvbkV2ZW50KHF1ZXMpe1xuICAvLyAgICAgLy8gVXBkYXRlIHRoZSBxdWVzdGlvbnMgYXJyYXkgd2l0aCB0aGUgbmV3IHF1ZXN0aW9uXG4gIC8vICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2FsZW5kYXJRdWVzdGlvbi5maW5kSW5kZXgocSA9PiBxLmlkID09PSBxdWVzLmlkKTtcbiAgLy8gICAgIGlmIChpbmRleCA+IC0xKSB7XG4gIC8vICAgICAgIC8vIElmIHF1ZXN0aW9uIGFscmVhZHkgZXhpc3RzLCB1cGRhdGUgaXRcbiAgLy8gICAgICAgdGhpcy5jYWxlbmRhclF1ZXN0aW9uW2luZGV4XSA9IHF1ZXM7XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAvLyBJZiBxdWVzdGlvbiBkb2Vzbid0IGV4aXN0LCBhZGQgaXQgdG8gdGhlIGFycmF5XG4gIC8vICAgICAgIHRoaXMuY2FsZW5kYXJRdWVzdGlvbi5wdXNoKHF1ZXMpO1xuICAvLyAgICAgfVxuICAvLyAgICAgY29uc29sZS5sb2codGhpcy5jYWxlbmRhclF1ZXN0aW9uKTtcbiAgLy8gICB9XG5cbiAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiAgZ2VuZXJhdGVJZCgpIHtcbiAgICByZXR1cm4gJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpO1xuICB9XG5cbiAgZ2V0RW50cnlLZXlzKGVudHJ5R3JvdXA6IGFueSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50cnlHcm91cCk7XG59XG5cbnJlbW92ZUNoYXJhY3RlcnMocXVlc3Rpb25UZXh0OnN0cmluZyl7XG4gIGxldCB1cGRhdGVkVGV4dCA9IHF1ZXN0aW9uVGV4dD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJyk7XG4gIHJldHVybiB1cGRhdGVkVGV4dDtcbn1cblxufVxuIiwiPGRpdiBjbGFzcz1cImFsaWduLWNhbGVuZGFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInByZXZpb3VzTW9udGgoKVwiPjw8IFByZXZpb3VzID4+PC9idXR0b24+XG4gICAgICAgICAgPGgzPnt7IGN1cnJlbnREYXRlIHwgZGF0ZTogJ01NTU0geXl5eScgfX08L2gzPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5leHRNb250aCgpXCI+PDwgTmV4dCA+PjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItZ3JpZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXktb2Ytd2Vla1wiICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c09mV2Vla1wiPnt7IGRheSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjYWxlbmRhci1kYXlcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIGNhbGVuZGFyRGF5c1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5ub3QtY3VycmVudC1tb250aF09XCIhZGF5LmlzQ3VycmVudE1vbnRoXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBhc3RdPVwiZGF5LmlzUGFzdFwiXG4gICAgICAgICAgICAgIFtjbGFzcy50b2RheV09XCJkYXkuaXNUb2RheVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5mdXR1cmVdPVwiZGF5LmlzRnV0dXJlXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRheS5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERheShkYXkpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5LW51bWJlclwiPnt7IGRheS5kYXRlLmdldERhdGUoKSB9fVxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF5Py5ldmVudHM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImVudHJ5LWluZGljYXRvclwiIFtjbGFzcy5zZWxlY3RdPVwiZGF5Py5pc1NlbGVjdGVkXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBldmVudCBvZiBkYXkuZXZlbnRzXCIgPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZW50cnlHcm91cCBvZiBldmVudC5lbnRyaWVzXCIgY2xhc3M9XCJldmVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGtleSBvZiBnZXRFbnRyeUtleXMoZW50cnlHcm91cClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlID09ICdUaW1lJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZW50cnlHcm91cFtrZXldLmlucHV0Py52YWx1ZSB8IGRhdGU6ICdzaG9ydFRpbWUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW50cnlHcm91cFtrZXldLnR5cGUgIT0gJ1RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbnRyeUdyb3VwW2tleV0uaW5wdXQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJhcHBvaW5hcHBvaW50bWVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImFwcG9pbnRtZW50cy1jb250YWluZXJcIj5cbiAgICAgICAgICA8aDQ+QWRkIEFwcG9pbnRtZW50PC9oND5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VsZWN0ZWREYXlcIiAoY2xpY2spPVwiYWRkQXBwb2ludG1lbnQoKVwiPkFkZDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tVkQgMDZTZXAyNCBjYWxlbmRhciB1cGRhdGVzLS0+IFxuICAgICAgPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPiBcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93QXBwb2lubWVudFNlY3Rpb24gJiYgc2VsZWN0ZWREYXk/LmV2ZW50cz8ubGVuZ3RoID4gMFwiIGNsYXNzPVwiYXBwb2ludG1lbnRzLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxoND5BcHBvaW50bWVudHM8L2g0PlxuICAgICAgICAgIDxkaXYgICpuZ0Zvcj1cImxldCBldmVudCBvZiBzZWxlY3RlZERheT8uZXZlbnRzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudFwiICpuZ0Zvcj1cImxldCBlbnRyeUdyb3VwIG9mIGV2ZW50LmVudHJpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBrZXkgb2YgZ2V0RW50cnlLZXlzKGVudHJ5R3JvdXApXCIgY2xhc3M9XCJlbnRyeS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbnRyeUdyb3VwW2tleV0ucXVlc3Rpb25UZXh0XCIgY2xhc3M9XCJlbnRyeS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZW1vdmVDaGFyYWN0ZXJzKGVudHJ5R3JvdXBba2V5XS5xdWVzdGlvblRleHQpfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbnRyeS12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVkQgMDlTZXAyNC0gZGF0ZSB0eXBlIGFuZCBsaW5rIHR5cGUgdXBkYXRlcyAgICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlICE9ICdUaW1lJyAmJiBlbnRyeUdyb3VwW2tleV0udHlwZSAhPSAnTGluaycmJiBlbnRyeUdyb3VwW2tleV0udHlwZSAhPSAnRGF0ZSdcIj57eyBlbnRyeUdyb3VwW2tleV0uaW5wdXQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlbnRyeUdyb3VwW2tleV0udHlwZSA9PSAnVGltZSdcIj57eyBlbnRyeUdyb3VwW2tleV0uaW5wdXQgfCBkYXRlOiAnc2hvcnRUaW1lJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlID09ICdEYXRlJ1wiPnt7IGVudHJ5R3JvdXBba2V5XS5pbnB1dCB8IGRhdGU6ICdtZWRpdW1EYXRlJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlID09ICdMaW5rJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCInLy8nKyBlbnRyeUdyb3VwW2tleV0uaW5wdXRcIiB0YXJnZXQ9XCJfYmxhbmtcIj57e3JlbW92ZUNoYXJhY3RlcnMoZW50cnlHcm91cFtrZXldLnF1ZXN0aW9uVGV4dCl9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImVkaXRFdmVudChldmVudCxlbnRyeUdyb3VwKVwiPkVkaXQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRlbGV0ZUV2ZW50KGV2ZW50LmlkLGVudHJ5R3JvdXApXCI+RGVsZXRlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIDxhcHAtY3VzdG9tLW1vZGVsXG4gIFttb2RhbFRpdGxlXT1cIm1vZGFsVGl0bGVcIlxuICBbaXNNb2RhbE9wZW5dPVwiaXNNb2RhbE9wZW5cIlxuICBbbW9kYWxTaXplXT1cIm1vZGFsU2l6ZVwiXG4gIFtzYXZlQnV0dG9uVmFsdWVdPVwic2F2ZUJ1dHRvblZhbHVlXCJcbiAgW21vZGFsRm9vdGVyXT1cIm1vZGFsRm9vdGVyXCJcbiAgKHNhdmVCdXR0b25FbWl0KT1cIm9uU2F2ZSgpXCJcbiAgKGNhbmNlbEJ1dHRvbkVtaXQpPVwib25DYW5jZWwoKVwiXG4+XG48bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInFiUmVmcmVuY2VCb29rXCIgW3F1ZXN0aW9uc109XCJyZWZlcmVuY2VRdWVzdGlvbnNcIiAoaGFuZGxlUXVlc3Rpb24pPVwiaGFuZGxlUXVlc3Rpb25FdmVudCgkZXZlbnQpXCI+PC9saWItcXVlc3Rpb25ib29rPlxuPG5nLXRlbXBsYXRlIGR5bmFtaWNDb21wb25lbnRIb3N0ID48L25nLXRlbXBsYXRlPlxuPC9hcHAtY3VzdG9tLW1vZGVsPiAtLT4iXX0=
@@ -1,47 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../i18n.service";
4
- import * as i2 from "@angular/common";
5
- import * as i3 from "@angular/forms";
6
- import * as i4 from "@danielmoncada/angular-datetime-picker";
7
- export class CustomDateComponent {
8
- i18nService;
9
- date;
10
- readOnly = false; // VD 12Jun24 - readonly change
11
- error;
12
- errorMessage;
13
- dateChange = new EventEmitter();
14
- dateSelected;
15
- constructor(i18nService) {
16
- this.i18nService = i18nService;
17
- }
18
- ngOnInit() {
19
- this.dateSelected = new Date(this.date);
20
- }
21
- // VD 02Aug24 - clear input changes
22
- ngOnChanges(simplechanges) {
23
- if (simplechanges['date']) {
24
- this.dateSelected = new Date(this.date);
25
- }
26
- }
27
- onDateChange(event) {
28
- this.dateChange.emit(event);
29
- }
30
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomDateComponent, deps: [{ token: i1.I18nService }], target: i0.ɵɵFactoryTarget.Component });
31
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomDateComponent, selector: "app-custom-date", inputs: { date: "date", readOnly: "readOnly", error: "error", errorMessage: "errorMessage" }, outputs: { dateChange: "dateChange" }, usesOnChanges: true, ngImport: i0, template: "<!-- date component -->\n<!-- VD 12Jun24 - readonly change-->\n<!-- VD 01Aug24 - validation change-->\n<p>\n <input\n [class]=\"error ? 'invalid' : ''\"\n [(ngModel)]=\"dateSelected\"\n [owlDateTimeTrigger]=\"dt1\"\n [owlDateTime]=\"dt1\"\n [disabled]=\"readOnly\"\n placeholder=\"DD/MM/YYYY\"\n (input)=\"onDateChange($event)\"\n style=\"width: 100%; height: 35px; border: none; box-shadow: none; border-bottom: 1px solid #ccc;\"\n (dateTimeChange)=\"onDateChange($event)\"\n >\n <owl-date-time [pickerType]=\"'calendar'\" #dt1></owl-date-time>\n </p>\n <span *ngIf=\"error\" class=\"error-msg\">{{errorMessage}}</span>", styles: [".invalid{border-color:red!important}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.OwlDateTimeTriggerDirective, selector: "[owlDateTimeTrigger]", inputs: ["owlDateTimeTrigger", "disabled"] }, { kind: "directive", type: i4.OwlDateTimeInputDirective, selector: "input[owlDateTime]", inputs: ["required", "owlDateTime", "owlDateTimeFilter", "_disabled", "min", "max", "selectMode", "rangeSeparator", "value", "values"], outputs: ["dateTimeChange", "dateTimeInput"], exportAs: ["owlDateTimeInput"] }, { kind: "component", type: i4.OwlDateTimeComponent, selector: "owl-date-time", inputs: ["backdropClass", "panelClass", "startAt", "endAt", "pickerType", "pickerMode", "disabled", "opened", "scrollStrategy"], outputs: ["afterPickerClosed", "beforePickerOpen", "afterPickerOpen", "yearSelected", "monthSelected", "dateSelected"], exportAs: ["owlDateTime"] }] });
32
- }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomDateComponent, decorators: [{
34
- type: Component,
35
- args: [{ selector: 'app-custom-date', template: "<!-- date component -->\n<!-- VD 12Jun24 - readonly change-->\n<!-- VD 01Aug24 - validation change-->\n<p>\n <input\n [class]=\"error ? 'invalid' : ''\"\n [(ngModel)]=\"dateSelected\"\n [owlDateTimeTrigger]=\"dt1\"\n [owlDateTime]=\"dt1\"\n [disabled]=\"readOnly\"\n placeholder=\"DD/MM/YYYY\"\n (input)=\"onDateChange($event)\"\n style=\"width: 100%; height: 35px; border: none; box-shadow: none; border-bottom: 1px solid #ccc;\"\n (dateTimeChange)=\"onDateChange($event)\"\n >\n <owl-date-time [pickerType]=\"'calendar'\" #dt1></owl-date-time>\n </p>\n <span *ngIf=\"error\" class=\"error-msg\">{{errorMessage}}</span>", styles: [".invalid{border-color:red!important}\n"] }]
36
- }], ctorParameters: () => [{ type: i1.I18nService }], propDecorators: { date: [{
37
- type: Input
38
- }], readOnly: [{
39
- type: Input
40
- }], error: [{
41
- type: Input
42
- }], errorMessage: [{
43
- type: Input
44
- }], dateChange: [{
45
- type: Output
46
- }] } });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWRhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWRhdGUvY3VzdG9tLWRhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWRhdGUvY3VzdG9tLWRhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7Ozs7OztBQVE5RixNQUFNLE9BQU8sbUJBQW1CO0lBUVY7SUFQWCxJQUFJLENBQVM7SUFDYixRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsK0JBQStCO0lBQ2pELEtBQUssQ0FBSztJQUNWLFlBQVksQ0FBUztJQUNwQixVQUFVLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7SUFDbEUsWUFBWSxDQUFNO0lBRWxCLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUksQ0FBQztJQUVqRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNILG1DQUFtQztJQUNqQyxXQUFXLENBQUMsYUFBNEI7UUFDdEMsSUFBRyxhQUFhLENBQUMsTUFBTSxDQUFDLEVBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxDQUFDO0lBRUgsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzdCLENBQUM7d0dBdkJVLG1CQUFtQjs0RkFBbkIsbUJBQW1CLGlOQ1JoQyxzcUJBaUIrRDs7NEZEVGxELG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7Z0ZBS2xCLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uL2kxOG4uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jdXN0b20tZGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tZGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1kYXRlLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21EYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgZGF0ZTogc3RyaW5nO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlOyAvLyBWRCAxMkp1bjI0IC0gcmVhZG9ubHkgY2hhbmdlXG4gIEBJbnB1dCgpIGVycm9yOmFueTtcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBkYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBkYXRlU2VsZWN0ZWQ6IGFueTtcblxuICBjb25zdHJ1Y3RvciggcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQgPSBuZXcgRGF0ZSh0aGlzLmRhdGUpO1xuICB9XG4vLyBWRCAwMkF1ZzI0IC0gY2xlYXIgaW5wdXQgY2hhbmdlc1xuICBuZ09uQ2hhbmdlcyhzaW1wbGVjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKXtcbiAgICBpZihzaW1wbGVjaGFuZ2VzWydkYXRlJ10pe1xuICAgICAgdGhpcy5kYXRlU2VsZWN0ZWQgPSBuZXcgRGF0ZSh0aGlzLmRhdGUpO1xuICAgIH1cbiAgICAgXG4gIH1cblxuICBvbkRhdGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGF0ZUNoYW5nZS5lbWl0KGV2ZW50KVxuICB9XG59XG4iLCI8IS0tIGRhdGUgY29tcG9uZW50IC0tPlxuPCEtLSBWRCAxMkp1bjI0IC0gcmVhZG9ubHkgY2hhbmdlLS0+XG48IS0tIFZEIDAxQXVnMjQgLSB2YWxpZGF0aW9uIGNoYW5nZS0tPlxuPHA+XG4gICAgPGlucHV0XG4gICAgICBbY2xhc3NdPVwiZXJyb3IgPyAnaW52YWxpZCcgOiAnJ1wiXG4gICAgICBbKG5nTW9kZWwpXT1cImRhdGVTZWxlY3RlZFwiXG4gICAgICBbb3dsRGF0ZVRpbWVUcmlnZ2VyXT1cImR0MVwiXG4gICAgICBbb3dsRGF0ZVRpbWVdPVwiZHQxXCJcbiAgICAgIFtkaXNhYmxlZF09XCJyZWFkT25seVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIkREL01NL1lZWVlcIlxuICAgICAgKGlucHV0KT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMzVweDsgYm9yZGVyOiBub25lOyBib3gtc2hhZG93OiBub25lOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcIlxuICAgICAgKGRhdGVUaW1lQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgPG93bC1kYXRlLXRpbWUgW3BpY2tlclR5cGVdPVwiJ2NhbGVuZGFyJ1wiICNkdDE+PC9vd2wtZGF0ZS10aW1lPlxuICA8L3A+XG4gIDxzcGFuICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImVycm9yLW1zZ1wiPnt7ZXJyb3JNZXNzYWdlfX08L3NwYW4+Il19
@@ -1,48 +0,0 @@
1
- import { Component, Input, Output, EventEmitter } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../i18n.service";
4
- import * as i2 from "@angular/common";
5
- import * as i3 from "@angular/forms";
6
- import * as i4 from "@danielmoncada/angular-datetime-picker";
7
- export class CustomDatePickerComponent {
8
- i18nService;
9
- date;
10
- minDate;
11
- maxDate;
12
- error;
13
- errorMessage;
14
- readOnly = false; // VD 12Jun24 - readonly change
15
- dateChange = new EventEmitter();
16
- dateSelected;
17
- constructor(i18nService) {
18
- this.i18nService = i18nService;
19
- }
20
- ngOnInit() {
21
- console.log('read only check', this.readOnly);
22
- this.dateSelected = new Date(this.date);
23
- }
24
- onDateChange(event) {
25
- this.dateChange.emit(event);
26
- }
27
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomDatePickerComponent, deps: [{ token: i1.I18nService }], target: i0.ɵɵFactoryTarget.Component });
28
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: { date: "date", minDate: "minDate", maxDate: "maxDate", error: "error", errorMessage: "errorMessage", readOnly: "readOnly" }, outputs: { dateChange: "dateChange" }, ngImport: i0, template: "<!-- <div class=\"date-picker-container\">\n <label>{{label}}</label>\n <input type=\"date\" [min]=\"minDate\" [max]=\"maxDate\" [required]=\"required\" (change)=\"onDateChanged($event)\">\n</div> -->\n<!-- <mat-form-field>\n <input matInput [matDatepicker]=\"picker\" [placeholder]=\"placeholder\" [min]=\"minDate\" [max]=\"maxDate\" [(ngModel)]=\"selectedDate\" (dateChange)=\"onDateChange($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n</mat-form-field> -->\n<!--VD 12Jun24 - readonly change --> \n<!-- VD 01Aug24 - validation change-->\n<p>\n <input \n [class]=\"error ? 'invalid' : ''\"\n [(ngModel)]=\"dateSelected\" \n [owlDateTimeTrigger]=\"dt\" \n [owlDateTime]=\"dt\" \n [min]=\"minDate\"\n [disabled]=\"readOnly\"\n placeholder=\"DD/MM/YYYY HH:MM\"\n (input)=\"onDateChange($event)\"\n style=\"width: 100%; height: 35px; border: none; box-shadow: none; border-bottom: 1px solid #ccc;\"\n (dateTimeChange)=\"onDateChange($event)\">\n <owl-date-time #dt></owl-date-time>\n</p>\n<span *ngIf=\"error\" class=\"error-msg\">{{errorMessage}}</span>\n ", styles: [".invalid{border-color:red!important}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.OwlDateTimeTriggerDirective, selector: "[owlDateTimeTrigger]", inputs: ["owlDateTimeTrigger", "disabled"] }, { kind: "directive", type: i4.OwlDateTimeInputDirective, selector: "input[owlDateTime]", inputs: ["required", "owlDateTime", "owlDateTimeFilter", "_disabled", "min", "max", "selectMode", "rangeSeparator", "value", "values"], outputs: ["dateTimeChange", "dateTimeInput"], exportAs: ["owlDateTimeInput"] }, { kind: "component", type: i4.OwlDateTimeComponent, selector: "owl-date-time", inputs: ["backdropClass", "panelClass", "startAt", "endAt", "pickerType", "pickerMode", "disabled", "opened", "scrollStrategy"], outputs: ["afterPickerClosed", "beforePickerOpen", "afterPickerOpen", "yearSelected", "monthSelected", "dateSelected"], exportAs: ["owlDateTime"] }] });
29
- }
30
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomDatePickerComponent, decorators: [{
31
- type: Component,
32
- args: [{ selector: 'app-custom-date-picker', template: "<!-- <div class=\"date-picker-container\">\n <label>{{label}}</label>\n <input type=\"date\" [min]=\"minDate\" [max]=\"maxDate\" [required]=\"required\" (change)=\"onDateChanged($event)\">\n</div> -->\n<!-- <mat-form-field>\n <input matInput [matDatepicker]=\"picker\" [placeholder]=\"placeholder\" [min]=\"minDate\" [max]=\"maxDate\" [(ngModel)]=\"selectedDate\" (dateChange)=\"onDateChange($event)\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n</mat-form-field> -->\n<!--VD 12Jun24 - readonly change --> \n<!-- VD 01Aug24 - validation change-->\n<p>\n <input \n [class]=\"error ? 'invalid' : ''\"\n [(ngModel)]=\"dateSelected\" \n [owlDateTimeTrigger]=\"dt\" \n [owlDateTime]=\"dt\" \n [min]=\"minDate\"\n [disabled]=\"readOnly\"\n placeholder=\"DD/MM/YYYY HH:MM\"\n (input)=\"onDateChange($event)\"\n style=\"width: 100%; height: 35px; border: none; box-shadow: none; border-bottom: 1px solid #ccc;\"\n (dateTimeChange)=\"onDateChange($event)\">\n <owl-date-time #dt></owl-date-time>\n</p>\n<span *ngIf=\"error\" class=\"error-msg\">{{errorMessage}}</span>\n ", styles: [".invalid{border-color:red!important}\n"] }]
33
- }], ctorParameters: () => [{ type: i1.I18nService }], propDecorators: { date: [{
34
- type: Input
35
- }], minDate: [{
36
- type: Input
37
- }], maxDate: [{
38
- type: Input
39
- }], error: [{
40
- type: Input
41
- }], errorMessage: [{
42
- type: Input
43
- }], readOnly: [{
44
- type: Input
45
- }], dateChange: [{
46
- type: Output
47
- }] } });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWRhdGUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1kYXRlLXBpY2tlci9jdXN0b20tZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWRhdGUtcGlja2VyL2N1c3RvbS1kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFTLEtBQUssRUFBQyxNQUFNLEVBQUMsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDOzs7Ozs7QUFRM0UsTUFBTSxPQUFPLHlCQUF5QjtJQVNqQjtJQVJWLElBQUksQ0FBUztJQUNiLE9BQU8sQ0FBSztJQUNaLE9BQU8sQ0FBSztJQUNaLEtBQUssQ0FBSztJQUNWLFlBQVksQ0FBUTtJQUNwQixRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsK0JBQStCO0lBQ2hELFVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUNsRSxZQUFZLENBQUk7SUFDaEIsWUFBbUIsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBSSxDQUFDO0lBRWhELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVU7UUFDckIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzt3R0FsQlUseUJBQXlCOzRGQUF6Qix5QkFBeUIsMk9DUnRDLDZxQ0EwQkU7OzRGRGxCVyx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0Usd0JBQXdCO2dGQUt6QixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCxJbnB1dCxPdXRwdXQsRXZlbnRFbWl0dGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaTE4bi5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWN1c3RvbS1kYXRlLXBpY2tlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tZGF0ZS1waWNrZXIuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBkYXRlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1pbkRhdGU6YW55O1xuICBASW5wdXQoKSBtYXhEYXRlOmFueTtcbiAgQElucHV0KCkgZXJyb3I6YW55O1xuICBASW5wdXQoKSBlcnJvck1lc3NhZ2U6c3RyaW5nO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlOyAvLyBWRCAxMkp1bjI0IC0gcmVhZG9ubHkgY2hhbmdlXG4gIEBPdXRwdXQoKSBkYXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBkYXRlU2VsZWN0ZWQ6YW55XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdyZWFkIG9ubHkgY2hlY2snLHRoaXMucmVhZE9ubHkpO1xuICAgdGhpcy5kYXRlU2VsZWN0ZWQgPSBuZXcgRGF0ZSh0aGlzLmRhdGUpO1xuICB9XG5cbiAgb25EYXRlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmRhdGVDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxufVxuIiwiPCEtLSA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXItY29udGFpbmVyXCI+XG4gICAgPGxhYmVsPnt7bGFiZWx9fTwvbGFiZWw+XG4gICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgW21pbl09XCJtaW5EYXRlXCIgW21heF09XCJtYXhEYXRlXCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCIgKGNoYW5nZSk9XCJvbkRhdGVDaGFuZ2VkKCRldmVudClcIj5cbjwvZGl2PiAtLT5cbjwhLS0gPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIiBbbWluXT1cIm1pbkRhdGVcIiBbbWF4XT1cIm1heERhdGVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVwiIChkYXRlQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlcj48L21hdC1kYXRlcGlja2VyPlxuPC9tYXQtZm9ybS1maWVsZD4gLS0+XG48IS0tVkQgMTJKdW4yNCAtIHJlYWRvbmx5IGNoYW5nZSAtLT4gXG48IS0tIFZEIDAxQXVnMjQgLSB2YWxpZGF0aW9uIGNoYW5nZS0tPlxuPHA+XG4gICAgPGlucHV0ICBcbiAgICBbY2xhc3NdPVwiZXJyb3IgPyAnaW52YWxpZCcgOiAnJ1wiXG4gICAgWyhuZ01vZGVsKV09XCJkYXRlU2VsZWN0ZWRcIiBcbiAgICBbb3dsRGF0ZVRpbWVUcmlnZ2VyXT1cImR0XCIgXG4gICAgW293bERhdGVUaW1lXT1cImR0XCIgIFxuICAgIFttaW5dPVwibWluRGF0ZVwiXG4gICAgW2Rpc2FibGVkXT1cInJlYWRPbmx5XCJcbiAgICBwbGFjZWhvbGRlcj1cIkREL01NL1lZWVkgSEg6TU1cIlxuICAgIChpbnB1dCk9XCJvbkRhdGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMTAwJTsgaGVpZ2h0OiAzNXB4OyBib3JkZXI6IG5vbmU7IGJveC1zaGFkb3c6IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjO1wiXG4gICAgKGRhdGVUaW1lQ2hhbmdlKT1cIm9uRGF0ZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgPG93bC1kYXRlLXRpbWUgI2R0Pjwvb3dsLWRhdGUtdGltZT5cbjwvcD5cbjxzcGFuICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImVycm9yLW1zZ1wiPnt7ZXJyb3JNZXNzYWdlfX08L3NwYW4+XG4gICJdfQ==