@rangertechnologies/ngnxt 2.0.37 → 2.0.39

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 (72) hide show
  1. package/README.md +2 -2
  2. package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +33 -33
  3. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +94 -82
  4. package/esm2022/lib/components/custom-input/custom-input.component.mjs +76 -76
  5. package/esm2022/lib/components/custom-table/custom-table.component.mjs +53 -53
  6. package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +34 -34
  7. package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +34 -34
  8. package/esm2022/lib/components/file-upload/file-upload.component.mjs +110 -159
  9. package/esm2022/lib/components/file-view/file-view.component.mjs +42 -0
  10. package/esm2022/lib/components/pick-location/pick-location.component.mjs +136 -136
  11. package/esm2022/lib/components/search-box/search-box.component.mjs +106 -84
  12. package/esm2022/lib/interfaces/actionMeta.mjs +2 -2
  13. package/esm2022/lib/interfaces/apimeta.mjs +2 -2
  14. package/esm2022/lib/interfaces/dependencyMeta.mjs +2 -2
  15. package/esm2022/lib/model/bookletWrapper.mjs +9 -9
  16. package/esm2022/lib/model/changeWrapper.mjs +8 -8
  17. package/esm2022/lib/model/errorWrapper.mjs +6 -6
  18. package/esm2022/lib/model/tableWrapper.mjs +16 -16
  19. package/esm2022/lib/nxt-app.component.mjs +22 -22
  20. package/esm2022/lib/nxt-app.module.mjs +276 -268
  21. package/esm2022/lib/nxt-app.service.mjs +14 -14
  22. package/esm2022/lib/pages/booklet/booklet.component.mjs +171 -159
  23. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +102 -85
  24. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +2066 -2066
  25. package/esm2022/lib/pages/summary-page/summary-page.component.mjs +70 -0
  26. package/esm2022/lib/sample.mjs +432 -432
  27. package/esm2022/lib/services/change.service.mjs +38 -33
  28. package/esm2022/lib/services/data.service.mjs +40 -40
  29. package/esm2022/lib/services/salesforce.service.mjs +46 -46
  30. package/esm2022/lib/services/shared.service.mjs +86 -0
  31. package/esm2022/lib/services/storage.service.mjs +41 -41
  32. package/esm2022/lib/wrapper.mjs +161 -161
  33. package/esm2022/public-api.mjs +11 -10
  34. package/esm2022/rangertechnologies-ngnxt.mjs +4 -4
  35. package/fesm2022/rangertechnologies-ngnxt.mjs +4105 -3899
  36. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  37. package/index.d.ts +5 -5
  38. package/lib/components/custom-date-picker/custom-date-picker.component.d.ts +14 -14
  39. package/lib/components/custom-dropdown/custom-dropdown.component.d.ts +29 -26
  40. package/lib/components/custom-input/custom-input.component.d.ts +26 -26
  41. package/lib/components/custom-table/custom-table.component.d.ts +20 -20
  42. package/lib/components/custom-text-area/custom-text-area.component.d.ts +14 -14
  43. package/lib/components/dropdown-with-flag/dropdown-with-flag.component.d.ts +14 -14
  44. package/lib/components/file-upload/file-upload.component.d.ts +24 -23
  45. package/lib/components/file-view/file-view.component.d.ts +14 -0
  46. package/lib/components/pick-location/pick-location.component.d.ts +35 -35
  47. package/lib/components/search-box/search-box.component.d.ts +40 -34
  48. package/lib/interfaces/actionMeta.d.ts +5 -5
  49. package/lib/interfaces/apimeta.d.ts +5 -5
  50. package/lib/interfaces/dependencyMeta.d.ts +5 -5
  51. package/lib/model/bookletWrapper.d.ts +5 -5
  52. package/lib/model/changeWrapper.d.ts +7 -7
  53. package/lib/model/errorWrapper.d.ts +5 -5
  54. package/lib/model/tableWrapper.d.ts +15 -15
  55. package/lib/nxt-app.component.d.ts +8 -8
  56. package/lib/nxt-app.module.d.ts +30 -28
  57. package/lib/nxt-app.service.d.ts +6 -6
  58. package/lib/pages/booklet/booklet.component.d.ts +45 -43
  59. package/lib/pages/questionbook/questionbook.component.d.ts +27 -26
  60. package/lib/pages/questionnaire/questionnaire.component.d.ts +206 -206
  61. package/lib/pages/summary-page/summary-page.component.d.ts +18 -0
  62. package/lib/sample.d.ts +10 -10
  63. package/lib/services/change.service.d.ts +16 -13
  64. package/lib/services/data.service.d.ts +9 -9
  65. package/lib/services/salesforce.service.d.ts +11 -11
  66. package/lib/services/shared.service.d.ts +11 -0
  67. package/lib/services/storage.service.d.ts +12 -12
  68. package/lib/wrapper.d.ts +161 -161
  69. package/package.json +1 -1
  70. package/public-api.d.ts +7 -6
  71. package/rangertechnologies-ngnxt-2.0.39.tgz +0 -0
  72. package/rangertechnologies-ngnxt-2.0.37.tgz +0 -0
@@ -1,85 +1,102 @@
1
- import { Component, Input, } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../../services/salesforce.service";
4
- import * as i2 from "../../services/data.service";
5
- import * as i3 from "../../services/change.service";
6
- import * as i4 from "../../services/storage.service";
7
- import * as i5 from "@angular/common";
8
- import * as i6 from "@angular/forms";
9
- import * as i7 from "../../components/pick-location/pick-location.component";
10
- import * as i8 from "../../components/custom-input/custom-input.component";
11
- import * as i9 from "../../components/custom-text-area/custom-text-area.component";
12
- import * as i10 from "../../components/custom-table/custom-table.component";
13
- import * as i11 from "../../components/custom-date-picker/custom-date-picker.component";
14
- import * as i12 from "../../components/custom-dropdown/custom-dropdown.component";
15
- import * as i13 from "../../components/file-upload/file-upload.component";
16
- export class QuestionbookComponent {
17
- sfService;
18
- dataService;
19
- changeService;
20
- storageService;
21
- qbItem;
22
- questionItem;
23
- questions;
24
- subQuestions;
25
- selectedFileData = [];
26
- constructor(sfService, dataService, changeService, storageService) {
27
- this.sfService = sfService;
28
- this.dataService = dataService;
29
- this.changeService = changeService;
30
- this.storageService = storageService;
31
- }
32
- ngOnInit() {
33
- console.log('inside QuestionBookComponent OnInit');
34
- // console.log(this.qbItem);
35
- // console.log(this.questions);
36
- this.subQuestions = [];
37
- this.setSubQuestions(this.questions);
38
- }
39
- clearSQError(quesId) {
40
- // console.log('inside QuestionBookComponent clearSQError');
41
- var sqList = this.subQuestions.filter((item) => item.Id == quesId);
42
- for (var sq of sqList) {
43
- sq.error = null;
44
- }
45
- }
46
- setSubQuestions(records) {
47
- console.log('inside QuestionbookComponent setSubQuestions');
48
- this.subQuestions.push(records);
49
- }
50
- // Capture and Process Child Event
51
- childEventCapture(event, ques) {
52
- // console.log('inside QuestionbookComponent childEventCapture');
53
- console.log(event);
54
- this.changeService.announceChange(event);
55
- // Process the changes in Table and Dropdown and store right value in ques.input
56
- if (ques.Type__c == 'Dropdown') {
57
- ques.input = event.valueObj.id;
58
- ques.selectedValue = event.valueObj.name;
59
- }
60
- else if (ques.Type__c == 'File') {
61
- ques.input = this.selectedFileData = event;
62
- }
63
- else {
64
- ques.input = event;
65
- }
66
- // Once the right value is stored in ques.input store the ques (with input) in storageService
67
- this.storageService.update(ques);
68
- }
69
- deleteFile(fileData) {
70
- console.log('fileDATA', fileData);
71
- }
72
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionbookComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.StorageService }], target: i0.ɵɵFactoryTarget.Component });
73
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: QuestionbookComponent, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", questions: "questions" }, ngImport: i0, template: "<div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\r\n <div class=\"form-row\">\r\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\"\r\n [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\r\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\">\r\n <!-- Sub Question Label -->\r\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\r\n <span [class]=\"qbItem.isShengel__c ? 'dis-flex shengel-myt-font3 myt-font7' : 'dis-flex myt-font3 myt-font7' \">{{ ques?.Question__c }}</span>\r\n </div>\r\n\r\n <!-- DateTime -->\r\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date-picker>\r\n </div>\r\n\r\n <!-- Text -->\r\n <div *ngIf=\"ques.Type__c === 'Text'\">\r\n <app-custom-input [fromShengel]=\"qbItem.isShengel__c\" [value]=\"ques.input\" [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\r\n textBox: !qbItem.Progress_Bar__c\r\n }\" [question]=\"ques\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (inputValue)=\"childEventCapture($event, ques)\">\r\n </app-custom-input>\r\n </div>\r\n \r\n <!-- for pick location -->\r\n <div *ngIf=\"ques.Type__c === 'Location'\">\r\n <app-pick-location [address]=\"ques.input\" (locationSelected)=\"childEventCapture($event, ques)\">\r\n </app-pick-location>\r\n </div>\r\n\r\n <!-- for text area -->\r\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\r\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\r\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.Type__c === 'Email'\">\r\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\r\n </div>\r\n\r\n <!-- Table -->\r\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\r\n <app-custom-table [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\r\n </app-custom-table>\r\n </div>\r\n\r\n <!-- Dropdown -->\r\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\r\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\" [options]=\"ques.Question_Options__r.records\"\r\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" [placeholder]=\"'---Select---'\"\r\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\r\n </app-custom-dropdown>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\r\n </div>\r\n\r\n <!-- Attachment / Files -->\r\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\r\n <app-file-upload [limitFileUploading]=\"5\" [allFiles]=\"selectedFileData\"\r\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\r\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".form-group.content-box{background:#ffffff;padding:40px;border:1px solid #e8e8e8;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.col-lg-6{width:100%}.shengel-myt-font3{padding:5px 15px 5px 2px;color:#9a9a9a;font-size:14px;font-weight:400}.myt-font7{display:flex;justify-content:flex-start}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:flex;flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.PickLocationComponent, selector: "app-pick-location", inputs: ["address"], outputs: ["locationSelected"] }, { kind: "component", type: i8.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i9.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error"], outputs: ["textareaValueChange"] }, { kind: "component", type: i10.CustomTableComponent, selector: "app-custom-table", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: i11.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate"], outputs: ["dateChange"] }, { kind: "component", type: i12.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "errorMessage", "error", "fromShengel"], outputs: ["valueChange"] }, { kind: "component", type: i13.FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "isDeleteFileButtonVisible", "isShowNoFileIcon"], outputs: ["selectedFileData", "deletedFileData"] }] });
74
- }
75
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionbookComponent, decorators: [{
76
- type: Component,
77
- args: [{ selector: 'lib-questionbook', template: "<div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\r\n <div class=\"form-row\">\r\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\"\r\n [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\r\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\">\r\n <!-- Sub Question Label -->\r\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\r\n <span [class]=\"qbItem.isShengel__c ? 'dis-flex shengel-myt-font3 myt-font7' : 'dis-flex myt-font3 myt-font7' \">{{ ques?.Question__c }}</span>\r\n </div>\r\n\r\n <!-- DateTime -->\r\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\r\n </app-custom-date-picker>\r\n </div>\r\n\r\n <!-- Text -->\r\n <div *ngIf=\"ques.Type__c === 'Text'\">\r\n <app-custom-input [fromShengel]=\"qbItem.isShengel__c\" [value]=\"ques.input\" [ngClassValue]=\"{\r\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\r\n textBox: !qbItem.Progress_Bar__c\r\n }\" [question]=\"ques\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (inputValue)=\"childEventCapture($event, ques)\">\r\n </app-custom-input>\r\n </div>\r\n \r\n <!-- for pick location -->\r\n <div *ngIf=\"ques.Type__c === 'Location'\">\r\n <app-pick-location [address]=\"ques.input\" (locationSelected)=\"childEventCapture($event, ques)\">\r\n </app-pick-location>\r\n </div>\r\n\r\n <!-- for text area -->\r\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\r\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\r\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.Type__c === 'Email'\">\r\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\r\n </div>\r\n\r\n <!-- Table -->\r\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\r\n <app-custom-table [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\r\n </app-custom-table>\r\n </div>\r\n\r\n <!-- Dropdown -->\r\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\r\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\" [options]=\"ques.Question_Options__r.records\"\r\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" [placeholder]=\"'---Select---'\"\r\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\r\n </app-custom-dropdown>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\r\n </div>\r\n\r\n <!-- Attachment / Files -->\r\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\r\n <app-file-upload [limitFileUploading]=\"5\" [allFiles]=\"selectedFileData\"\r\n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\r\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".form-group.content-box{background:#ffffff;padding:40px;border:1px solid #e8e8e8;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.col-lg-6{width:100%}.shengel-myt-font3{padding:5px 15px 5px 2px;color:#9a9a9a;font-size:14px;font-weight:400}.myt-font7{display:flex;justify-content:flex-start}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:flex;flex-wrap:wrap}}\n"] }]
78
- }], ctorParameters: function () { return [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.StorageService }]; }, propDecorators: { qbItem: [{
79
- type: Input
80
- }], questionItem: [{
81
- type: Input
82
- }], questions: [{
83
- type: Input
84
- }] } });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxHQUF5QixNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBYWhGLE1BQU0sT0FBTyxxQkFBcUI7SUFRWjtJQUNWO0lBQ0E7SUFDQTtJQVZELE1BQU0sQ0FBZTtJQUNyQixZQUFZLENBQVc7SUFDdkIsU0FBUyxDQUFhO0lBRS9CLFlBQVksQ0FBYTtJQUN6QixnQkFBZ0IsR0FBVSxFQUFFLENBQUM7SUFFN0IsWUFBb0IsU0FBNEIsRUFDdEMsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsY0FBOEI7UUFIcEIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBRXhDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQ25ELDRCQUE0QjtRQUM1QiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFNO1FBQ2pCLDREQUE0RDtRQUM1RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQztRQUNuRSxLQUFLLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUNyQixFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsT0FBTztRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBUztRQUNqQyxpRUFBaUU7UUFDaEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxnRkFBZ0Y7UUFDaEYsSUFBRyxJQUFJLENBQUMsT0FBTyxJQUFJLFVBQVUsRUFBRTtZQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7U0FDMUM7YUFBSyxJQUFHLElBQUksQ0FBQyxPQUFPLElBQUksTUFBTSxFQUFDO1lBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztTQUM1QzthQUFJO1lBQ0gsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7U0FDcEI7UUFDRCw2RkFBNkY7UUFDN0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELFVBQVUsQ0FBQyxRQUFZO1FBQ3JCLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7d0dBdkRVLHFCQUFxQjs0RkFBckIscUJBQXFCLDRJQ2JsQyx1bUlBb0VNOzs0RkR2RE8scUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLGtCQUFrQjsyTEFLbkIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9uLCBRdWVzdGlvbkJvb2sgfSBmcm9tICcuLi8uLi93cmFwcGVyJztcclxuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXF1ZXN0aW9uYm9vaycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcXVlc3Rpb25ib29rLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25ib29rQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcclxuICBASW5wdXQoKSBxdWVzdGlvbkl0ZW06IFF1ZXN0aW9uO1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uczogUXVlc3Rpb25bXTtcclxuICBcclxuICBzdWJRdWVzdGlvbnM6IFF1ZXN0aW9uW107XHJcbiAgc2VsZWN0ZWRGaWxlRGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxyXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2UpIHsgXHJcbiAgICAgIFxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZygnaW5zaWRlIFF1ZXN0aW9uQm9va0NvbXBvbmVudCBPbkluaXQnKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucWJJdGVtKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25zKTtcclxuICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XHJcbiAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9ucyk7XHJcbiAgfVxyXG5cclxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIFF1ZXN0aW9uQm9va0NvbXBvbmVudCBjbGVhclNRRXJyb3InKTtcclxuICAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uSWQgPT0gcXVlc0lkKTtcclxuICAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xyXG4gICAgICBzcS5lcnJvciA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xyXG4gICAgY29uc29sZS5sb2coJ2luc2lkZSBRdWVzdGlvbmJvb2tDb21wb25lbnQgc2V0U3ViUXVlc3Rpb25zJyk7XHJcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHJlY29yZHMpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxyXG4gIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzphbnkpIHtcclxuICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBRdWVzdGlvbmJvb2tDb21wb25lbnQgY2hpbGRFdmVudENhcHR1cmUnKTtcclxuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcclxuICAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XHJcbiAgICAvLyBQcm9jZXNzIHRoZSBjaGFuZ2VzIGluIFRhYmxlIGFuZCBEcm9wZG93biBhbmQgc3RvcmUgcmlnaHQgdmFsdWUgaW4gcXVlcy5pbnB1dFxyXG4gICAgaWYocXVlcy5UeXBlX19jID09ICdEcm9wZG93bicpIHtcclxuICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50LnZhbHVlT2JqLmlkO1xyXG4gICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSBldmVudC52YWx1ZU9iai5uYW1lO1xyXG4gICAgfWVsc2UgaWYocXVlcy5UeXBlX19jID09ICdGaWxlJyl7IFxyXG4gICAgICBxdWVzLmlucHV0ID0gdGhpcy5zZWxlY3RlZEZpbGVEYXRhID0gZXZlbnQ7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcXVlcy5pbnB1dCA9IGV2ZW50O1xyXG4gICAgfVxyXG4gICAgLy8gT25jZSB0aGUgcmlnaHQgdmFsdWUgaXMgc3RvcmVkIGluIHF1ZXMuaW5wdXQgc3RvcmUgdGhlIHF1ZXMgKHdpdGggaW5wdXQpIGluIHN0b3JhZ2VTZXJ2aWNlXHJcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShxdWVzKTtcclxuICB9XHJcbiAgZGVsZXRlRmlsZShmaWxlRGF0YTphbnkpe1xyXG4gICAgY29uc29sZS5sb2coJ2ZpbGVEQVRBJyxmaWxlRGF0YSlcclxuICB9XHJcbn1cclxuIiwiPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICdmb3JtLWdyb3VwIGNvbnRlbnQtYm94JyA6ICdmb3JtLWdyb3VwJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICcnIDogJ215dC1hbGlnbjMnXCJcclxuICAgICAgICAgICAgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnY29sLWxnLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJyA6ICdjb2wtbWQtJyArIHF1ZXMuU2l6ZV9fYyArICcgcGFkZGluZ25vbmUnXCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2YgcXVlc3Rpb25zO2xldCBpID0gaW5kZXhcIiBbaWRdPVwicXVlcy5JZFwiPlxyXG4gICAgICAgICAgICA8IS0tIFN1YiBRdWVzdGlvbiBMYWJlbCAtLT5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICdkaXMtZmxleCBzaGVuZ2VsLW15dC1mb250MyBteXQtZm9udDcnICA6ICdkaXMtZmxleCBteXQtZm9udDMgbXl0LWZvbnQ3JyBcIj57eyBxdWVzPy5RdWVzdGlvbl9fYyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIERhdGVUaW1lIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRGF0ZVRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlLXBpY2tlciBbbWluRGF0ZV09XCJxdWVzLm1pbkRhdGVcIiBbZGF0ZV09XCJxdWVzLmlucHV0XCIgKGRhdGVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiPlxyXG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRhdGUtcGlja2VyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVGV4dCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RleHQnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1pbnB1dCBbZnJvbVNoZW5nZWxdPVwicWJJdGVtLmlzU2hlbmdlbF9fY1wiIFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW25nQ2xhc3NWYWx1ZV09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICdkaXMtZmxleCBkdC1saW5lIGRhdGUtbGluZSBib29rVGV4dCBib3hvdXRsaW5lIG15dC1mb250MSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRCb3g6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXHJcbiAgICAgICAgICAgICAgICAgICAgfVwiIFtxdWVzdGlvbl09XCJxdWVzXCIgW2lkVmFsdWVdPVwicXVlcy5UcmFja2luZ19JRF9fY1wiIFtmb2N1c0V2ZW50XT1cImNsZWFyU1FFcnJvcihxdWVzLklkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5RdWVzdGlvbl9fY1wiIChpbnB1dFZhbHVlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1pbnB1dD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8IS0tIGZvciBwaWNrIGxvY2F0aW9uIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnTG9jYXRpb24nXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXBpY2stbG9jYXRpb24gW2FkZHJlc3NdPVwicXVlcy5pbnB1dFwiIChsb2NhdGlvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLXBpY2stbG9jYXRpb24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBmb3IgIHRleHQgYXJlYSAgIC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGV4dEFyZWEnXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10ZXh0LWFyZWEgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBbcm93c109XCIzXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5RdWVzdGlvbl9fYyBcIlxyXG4gICAgICAgICAgICAgICAgICAgICh0ZXh0YXJlYVZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj48L2FwcC1jdXN0b20tdGV4dC1hcmVhPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gRW1haWwgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdFbWFpbCdcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5JZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLklkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgcXVlcy5lcnJvciA/ICdyZWQnIDogJycgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHF1ZXMuUXVlc3Rpb25fX2MgfX1cIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gVGFibGUgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUYWJsZSdcIiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tdGFibGUgW3F1ZXN0aW9uXT1cInF1ZXNcIiAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20tdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSBEcm9wZG93biAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0Ryb3Bkb3duJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS1kcm9wZG93biBbZnJvbVNoZW5nZWxdPVwicWJJdGVtLmlzU2hlbmdlbF9fY1wiIFtvcHRpb25zXT1cInF1ZXMuUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCJcclxuICAgICAgICAgICAgICAgICAgICBbYXBpTWV0YV09XCJxdWVzLlN1Yl9UZXh0X19jXCIgW2lkXT1cInF1ZXMuSWRcIiBbc2VsZWN0ZWRWYWx1ZV09XCJxdWVzLnNlbGVjdGVkVmFsdWVcIiBbcGxhY2Vob2xkZXJdPVwiJy0tLVNlbGVjdC0tLSdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5FcnJvcl9NZXNzYWdlX19jXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5JZClcIj5cclxuICAgICAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJxdWVzPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlcyAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0ZpbGUnXCIgY2xhc3M9XCJcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtZmlsZS11cGxvYWQgW2xpbWl0RmlsZVVwbG9hZGluZ109XCI1XCIgW2FsbEZpbGVzXT1cInNlbGVjdGVkRmlsZURhdGFcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGVkRmlsZURhdGEpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKVwiIChkZWxldGVkRmlsZURhdGEpPVwiZGVsZXRlRmlsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIFtpc0RlbGV0ZUZpbGVCdXR0b25WaXNpYmxlXT1cInRydWVcIj48L2FwcC1maWxlLXVwbG9hZD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
1
+ import { Component, Input, } from '@angular/core';
2
+ import { ErrorWrapper } from '../../model/errorWrapper';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../services/salesforce.service";
5
+ import * as i2 from "../../services/data.service";
6
+ import * as i3 from "../../services/change.service";
7
+ import * as i4 from "../../services/storage.service";
8
+ import * as i5 from "@angular/common";
9
+ import * as i6 from "@angular/forms";
10
+ import * as i7 from "../../components/pick-location/pick-location.component";
11
+ import * as i8 from "../../components/custom-input/custom-input.component";
12
+ import * as i9 from "../../components/custom-text-area/custom-text-area.component";
13
+ import * as i10 from "../../components/custom-table/custom-table.component";
14
+ import * as i11 from "../../components/custom-date-picker/custom-date-picker.component";
15
+ import * as i12 from "../../components/custom-dropdown/custom-dropdown.component";
16
+ import * as i13 from "../../components/search-box/search-box.component";
17
+ import * as i14 from "../../components/file-upload/file-upload.component";
18
+ export class QuestionbookComponent {
19
+ sfService;
20
+ dataService;
21
+ changeService;
22
+ storageService;
23
+ qbItem;
24
+ questionItem;
25
+ questions;
26
+ errorFieldId;
27
+ subQuestions;
28
+ selectedFileData = [];
29
+ constructor(sfService, dataService, changeService, storageService) {
30
+ this.sfService = sfService;
31
+ this.dataService = dataService;
32
+ this.changeService = changeService;
33
+ this.storageService = storageService;
34
+ }
35
+ ngOnInit() {
36
+ console.log('inside QuestionBookComponent OnInit');
37
+ // console.log(this.qbItem);
38
+ // console.log(this.questions);
39
+ this.questions.forEach(element => {
40
+ var htmlElement = $(element.Question_Text__c);
41
+ var textOnly = htmlElement.text();
42
+ element.Question_Text__c = textOnly;
43
+ });
44
+ this.subQuestions = [];
45
+ this.setSubQuestions(this.questions);
46
+ }
47
+ clearSQError(quesId) {
48
+ // console.log('inside QuestionBookComponent clearSQError');
49
+ var sqList = this.subQuestions.filter((item) => item.Id == quesId);
50
+ for (var sq of sqList) {
51
+ sq.error = null;
52
+ }
53
+ }
54
+ setSubQuestions(records) {
55
+ console.log('inside QuestionbookComponent setSubQuestions');
56
+ this.subQuestions.push(records);
57
+ }
58
+ // Capture and Process Child Event
59
+ childEventCapture(event, ques) {
60
+ // console.log('inside QuestionbookComponent childEventCapture');
61
+ console.log(event);
62
+ this.changeService.announceChange(event);
63
+ // Process the changes in Table and Dropdown and store right value in ques.input
64
+ if (ques.Type__c == 'Dropdown') {
65
+ ques.input = event.valueObj ? event.valueObj.id : null;
66
+ ques.selectedValue = event.valueObj ? event.valueObj.name : null;
67
+ }
68
+ else if (ques.Type__c == 'File') {
69
+ ques.input = this.selectedFileData = event;
70
+ }
71
+ else {
72
+ ques.input = event;
73
+ }
74
+ // validating error message
75
+ if (ques.Error_Message__c && !ques.input) {
76
+ ques.error = new ErrorWrapper;
77
+ }
78
+ else {
79
+ ques.error = null;
80
+ }
81
+ // Once the right value is stored in ques.input store the ques (with input) in storageService
82
+ this.storageService.update(ques);
83
+ }
84
+ deleteFile(fileData) {
85
+ console.log('fileDATA', fileData);
86
+ }
87
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionbookComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.StorageService }], target: i0.ɵɵFactoryTarget.Component });
88
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: QuestionbookComponent, selector: "lib-questionbook", inputs: { qbItem: "qbItem", questionItem: "questionItem", questions: "questions", errorFieldId: "errorFieldId" }, ngImport: i0, template: "<div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\"\n [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\">\n <!-- Sub Question Label -->\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\n <span [class]=\"qbItem.isShengel__c ? 'dis-flex shengel-myt-font3 myt-font7' : 'dis-flex myt-font3 myt-font7' \">{{ ques?.Question_Text__c }}</span>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <app-custom-input [fromShengel]=\"qbItem.isShengel__c\" [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" [question]=\"ques\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (inputValue)=\"childEventCapture($event, ques)\">\n </app-custom-input>\n </div>\n \n <!-- for pick location -->\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <app-pick-location [address]=\"ques.input\" (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- list -->\n <div *ngIf=\"ques.Type__c === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [placeHolderText]=\"ques.Question__c\" [selectedValue]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\n </lib-search-box>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\" [options]=\"ques.Question_Options__r.records\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" [placeholder]=\"'---Select---'\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\n </div>\n\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [allFiles]=\"ques.input\" \n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\n </div>\n </div>\n </div>\n</div>", styles: [".form-group.content-box{background:#ffffff;padding:40px;border:1px solid #e8e8e8;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.col-lg-6{width:100%}.shengel-myt-font3{padding:5px 15px 5px 2px;color:#9a9a9a;font-size:14px;font-weight:400}.myt-font7{display:flex;justify-content:flex-start}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:flex;flex-wrap:wrap}}.dis-flex.shengel-myt-font3.myt-font7{color:#434555!important;font-style:normal!important;font-weight:600!important;font-size:13px!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.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: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.PickLocationComponent, selector: "app-pick-location", inputs: ["address"], outputs: ["locationSelected"] }, { kind: "component", type: i8.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i9.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error"], outputs: ["textareaValueChange"] }, { kind: "component", type: i10.CustomTableComponent, selector: "app-custom-table", inputs: ["question"], outputs: ["valueChange"] }, { kind: "component", type: i11.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate"], outputs: ["dateChange"] }, { kind: "component", type: i12.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "errorMessage", "error", "fromShengel"], outputs: ["valueChange"] }, { kind: "component", type: i13.SearchBoxComponent, selector: "lib-search-box", inputs: ["placeHolderText", "question", "apiMeta", "id"], outputs: ["searchValueChange"] }, { kind: "component", type: i14.FileUploadComponent, selector: "app-file-upload", inputs: ["allFiles", "limitFileUploading", "isDeleteFileButtonVisible", "isShowNoFileIcon"], outputs: ["selectedFileData", "deletedFileData"] }] });
89
+ }
90
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionbookComponent, decorators: [{
91
+ type: Component,
92
+ args: [{ selector: 'lib-questionbook', template: "<div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\"\n [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of questions;let i = index\" [id]=\"ques.Id\">\n <!-- Sub Question Label -->\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\n <span [class]=\"qbItem.isShengel__c ? 'dis-flex shengel-myt-font3 myt-font7' : 'dis-flex myt-font3 myt-font7' \">{{ ques?.Question_Text__c }}</span>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"childEventCapture($event, ques)\">\n </app-custom-date-picker>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <app-custom-input [fromShengel]=\"qbItem.isShengel__c\" [value]=\"ques.input\" [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" [question]=\"ques\" [idValue]=\"ques.Tracking_ID__c\" [focusEvent]=\"clearSQError(ques.Id)\"\n [error]=\"ques.error\" [placeholder]=\"ques.Question__c\" (inputValue)=\"childEventCapture($event, ques)\">\n </app-custom-input>\n </div>\n \n <!-- for pick location -->\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <app-pick-location [address]=\"ques.input\" (locationSelected)=\"childEventCapture($event, ques)\">\n </app-pick-location>\n </div>\n\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \"\n (textareaValueChange)=\"childEventCapture($event, ques)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table [question]=\"ques\" (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- list -->\n <div *ngIf=\"ques.Type__c === 'List'\" class=\"\">\n <lib-search-box [question]=\"ques\" [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [placeHolderText]=\"ques.Question__c\" [selectedValue]=\"ques.input\" (searchValueChange)=\"childEventCapture($event, ques)\">\n </lib-search-box>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\" [options]=\"ques.Question_Options__r.records\"\n [apiMeta]=\"ques.Sub_Text__c\" [id]=\"ques.Id\" [selectedValue]=\"ques.selectedValue\" [placeholder]=\"'---Select---'\"\n [errorMessage]=\"ques.Error_Message__c\" [error]=\"ques.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"ques?.input?.length > 0\"></i>\n </div>\n\n <!-- Attachment / Files -->\n <div *ngIf=\"ques.Type__c === 'File'\" class=\"\">\n <app-file-upload [limitFileUploading]=\"5\" [allFiles]=\"ques.input\" \n (selectedFileData)=\"childEventCapture($event, ques)\" (deletedFileData)=\"deleteFile($event)\"\n [isDeleteFileButtonVisible]=\"true\"></app-file-upload>\n </div>\n </div>\n </div>\n</div>", styles: [".form-group.content-box{background:#ffffff;padding:40px;border:1px solid #e8e8e8;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.col-lg-6{width:100%}.shengel-myt-font3{padding:5px 15px 5px 2px;color:#9a9a9a;font-size:14px;font-weight:400}.myt-font7{display:flex;justify-content:flex-start}@media (min-width: 1200px){.col-lg-6{width:50%!important}.form-row{display:flex;flex-wrap:wrap}}.dis-flex.shengel-myt-font3.myt-font7{color:#434555!important;font-style:normal!important;font-weight:600!important;font-size:13px!important}\n"] }]
93
+ }], ctorParameters: function () { return [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.StorageService }]; }, propDecorators: { qbItem: [{
94
+ type: Input
95
+ }], questionItem: [{
96
+ type: Input
97
+ }], questions: [{
98
+ type: Input
99
+ }], errorFieldId: [{
100
+ type: Input
101
+ }] } });
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25ib29rLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxHQUF5QixNQUFNLGVBQWUsQ0FBQztBQU9oRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFReEQsTUFBTSxPQUFPLHFCQUFxQjtJQVVaO0lBQ1Y7SUFDQTtJQUNBO0lBWkQsTUFBTSxDQUFlO0lBQ3JCLFlBQVksQ0FBVztJQUN2QixTQUFTLENBQWE7SUFFdEIsWUFBWSxDQUFLO0lBRTFCLFlBQVksQ0FBYTtJQUN6QixnQkFBZ0IsR0FBVSxFQUFFLENBQUM7SUFFN0IsWUFBb0IsU0FBNEIsRUFDdEMsV0FBd0IsRUFDeEIsYUFBNEIsRUFDNUIsY0FBOEI7UUFIcEIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFDdEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBRXhDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQ25ELDRCQUE0QjtRQUM1QiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBRSxDQUFDO1lBQy9DLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFNO1FBQ2pCLDREQUE0RDtRQUM1RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQztRQUNuRSxLQUFLLElBQUksRUFBRSxJQUFJLE1BQU0sRUFBRTtZQUNyQixFQUFFLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsT0FBTztRQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBUztRQUNqQyxpRUFBaUU7UUFDaEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxnRkFBZ0Y7UUFDaEYsSUFBRyxJQUFJLENBQUMsT0FBTyxJQUFJLFVBQVUsRUFBRTtZQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ2xFO2FBQUssSUFBRyxJQUFJLENBQUMsT0FBTyxJQUFJLE1BQU0sRUFBQztZQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7U0FDNUM7YUFBSTtZQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3BCO1FBQ0QsMkJBQTJCO1FBQzNCLElBQUcsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBQztZQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksWUFBWSxDQUFBO1NBQzlCO2FBQUk7WUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztTQUNuQjtRQUNELDZGQUE2RjtRQUM3RixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBQ0QsVUFBVSxDQUFDLFFBQVk7UUFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUMsUUFBUSxDQUFDLENBQUE7SUFDbEMsQ0FBQzt3R0FwRVUscUJBQXFCOzRGQUFyQixxQkFBcUIsMEtDZmxDLDAxSUEwRU07OzRGRDNETyxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0Usa0JBQWtCOzJMQUtuQixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVlc3Rpb24sIFF1ZXN0aW9uQm9vayB9IGZyb20gJy4uLy4uL3dyYXBwZXInO1xuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2RhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tICcuLi8uLi9tb2RlbC9lcnJvcldyYXBwZXInO1xuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItcXVlc3Rpb25ib29rJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3F1ZXN0aW9uYm9vay5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUXVlc3Rpb25ib29rQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcWJJdGVtOiBRdWVzdGlvbkJvb2s7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XG4gIEBJbnB1dCgpIHF1ZXN0aW9uczogUXVlc3Rpb25bXTtcblxuICBASW5wdXQoKSBlcnJvckZpZWxkSWQ6YW55O1xuICBcbiAgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdO1xuICBzZWxlY3RlZEZpbGVEYXRhOiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlKSB7IFxuICAgICAgXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnaW5zaWRlIFF1ZXN0aW9uQm9va0NvbXBvbmVudCBPbkluaXQnKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnFiSXRlbSk7XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbnMpO1xuICAgIHRoaXMucXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB2YXIgaHRtbEVsZW1lbnQgPSAkKGVsZW1lbnQuUXVlc3Rpb25fVGV4dF9fYyApO1xuICAgICAgdmFyIHRleHRPbmx5ID0gaHRtbEVsZW1lbnQudGV4dCgpO1xuICAgICAgZWxlbWVudC5RdWVzdGlvbl9UZXh0X19jID0gdGV4dE9ubHk7XG4gICAgfSk7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcbiAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9ucyk7XG4gIH1cblxuICBjbGVhclNRRXJyb3IocXVlc0lkKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBRdWVzdGlvbkJvb2tDb21wb25lbnQgY2xlYXJTUUVycm9yJyk7XG4gICAgdmFyIHNxTGlzdCA9IHRoaXMuc3ViUXVlc3Rpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5JZCA9PSBxdWVzSWQpO1xuICAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xuICAgICAgc3EuZXJyb3IgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHNldFN1YlF1ZXN0aW9ucyhyZWNvcmRzKSB7XG4gICAgY29uc29sZS5sb2coJ2luc2lkZSBRdWVzdGlvbmJvb2tDb21wb25lbnQgc2V0U3ViUXVlc3Rpb25zJyk7XG4gICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChyZWNvcmRzKTtcbiAgfVxuXG4gIC8vIENhcHR1cmUgYW5kIFByb2Nlc3MgQ2hpbGQgRXZlbnRcbiAgY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OmFueSkge1xuICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBRdWVzdGlvbmJvb2tDb21wb25lbnQgY2hpbGRFdmVudENhcHR1cmUnKTtcbiAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmFubm91bmNlQ2hhbmdlKGV2ZW50KTtcbiAgICAvLyBQcm9jZXNzIHRoZSBjaGFuZ2VzIGluIFRhYmxlIGFuZCBEcm9wZG93biBhbmQgc3RvcmUgcmlnaHQgdmFsdWUgaW4gcXVlcy5pbnB1dFxuICAgIGlmKHF1ZXMuVHlwZV9fYyA9PSAnRHJvcGRvd24nKSB7XG4gICAgICBxdWVzLmlucHV0ID0gZXZlbnQudmFsdWVPYmogPyBldmVudC52YWx1ZU9iai5pZCA6IG51bGw7XG4gICAgICBxdWVzLnNlbGVjdGVkVmFsdWUgPSBldmVudC52YWx1ZU9iaiA/IGV2ZW50LnZhbHVlT2JqLm5hbWUgOiBudWxsO1xuICAgIH1lbHNlIGlmKHF1ZXMuVHlwZV9fYyA9PSAnRmlsZScpeyBcbiAgICAgIHF1ZXMuaW5wdXQgPSB0aGlzLnNlbGVjdGVkRmlsZURhdGEgPSBldmVudDtcbiAgICB9ZWxzZXtcbiAgICAgIHF1ZXMuaW5wdXQgPSBldmVudDtcbiAgICB9XG4gICAgLy8gdmFsaWRhdGluZyBlcnJvciBtZXNzYWdlXG4gICAgaWYocXVlcy5FcnJvcl9NZXNzYWdlX19jICYmICFxdWVzLmlucHV0KXtcbiAgICAgIHF1ZXMuZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyXG4gICAgfWVsc2V7XG4gICAgICBxdWVzLmVycm9yID0gbnVsbDsgIFxuICAgIH1cbiAgICAvLyBPbmNlIHRoZSByaWdodCB2YWx1ZSBpcyBzdG9yZWQgaW4gcXVlcy5pbnB1dCBzdG9yZSB0aGUgcXVlcyAod2l0aCBpbnB1dCkgaW4gc3RvcmFnZVNlcnZpY2VcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnVwZGF0ZShxdWVzKTtcbiAgfVxuICBkZWxldGVGaWxlKGZpbGVEYXRhOmFueSl7XG4gICAgY29uc29sZS5sb2coJ2ZpbGVEQVRBJyxmaWxlRGF0YSlcbiAgfVxufVxuIiwiPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICdmb3JtLWdyb3VwIGNvbnRlbnQtYm94JyA6ICdmb3JtLWdyb3VwJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJycgOiAnbXl0LWFsaWduMydcIlxuICAgICAgICAgICAgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnY29sLWxnLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJyA6ICdjb2wtbWQtJyArIHF1ZXMuU2l6ZV9fYyArICcgcGFkZGluZ25vbmUnXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzIG9mIHF1ZXN0aW9ucztsZXQgaSA9IGluZGV4XCIgW2lkXT1cInF1ZXMuSWRcIj5cbiAgICAgICAgICAgIDwhLS0gU3ViIFF1ZXN0aW9uIExhYmVsIC0tPlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnZGlzLWZsZXggc2hlbmdlbC1teXQtZm9udDMgbXl0LWZvbnQ3JyAgOiAnZGlzLWZsZXggbXl0LWZvbnQzIG15dC1mb250NycgXCI+e3sgcXVlcz8uUXVlc3Rpb25fVGV4dF9fYyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIERhdGVUaW1lIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0RhdGVUaW1lJ1wiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRhdGUtcGlja2VyIFttaW5EYXRlXT1cInF1ZXMubWluRGF0ZVwiIFtkYXRlXT1cInF1ZXMuaW5wdXRcIiAoZGF0ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVGV4dCAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0J1wiPlxuICAgICAgICAgICAgICAgIDxhcHAtY3VzdG9tLWlucHV0IFtmcm9tU2hlbmdlbF09XCJxYkl0ZW0uaXNTaGVuZ2VsX19jXCIgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBbbmdDbGFzc1ZhbHVlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICdkaXMtZmxleCBkdC1saW5lIGRhdGUtbGluZSBib29rVGV4dCBib3hvdXRsaW5lIG15dC1mb250MSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94OiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgICAgICAgICAgICB9XCIgW3F1ZXN0aW9uXT1cInF1ZXNcIiBbaWRWYWx1ZV09XCJxdWVzLlRyYWNraW5nX0lEX19jXCIgW2ZvY3VzRXZlbnRdPVwiY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5RdWVzdGlvbl9fY1wiIChpbnB1dFZhbHVlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPCEtLSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdMb2NhdGlvbidcIj5cbiAgICAgICAgICAgICAgICA8YXBwLXBpY2stbG9jYXRpb24gW2FkZHJlc3NdPVwicXVlcy5pbnB1dFwiIChsb2NhdGlvblNlbGVjdGVkKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIj5cbiAgICAgICAgICAgICAgICA8L2FwcC1waWNrLWxvY2F0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gZm9yICB0ZXh0IGFyZWEgICAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUZXh0QXJlYSdcIj5cbiAgICAgICAgICAgICAgICA8YXBwLWN1c3RvbS10ZXh0LWFyZWEgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBbcm93c109XCIzXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5RdWVzdGlvbl9fYyBcIlxuICAgICAgICAgICAgICAgICAgICAodGV4dGFyZWFWYWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+PC9hcHAtY3VzdG9tLXRleHQtYXJlYT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEVtYWlsIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0VtYWlsJ1wiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbaWRdPVwicXVlcy5JZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyU1FFcnJvcihxdWVzLklkKVwiXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLlF1ZXN0aW9uX19jIH19XCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RhYmxlJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tdGFibGUgW3F1ZXN0aW9uXT1cInF1ZXNcIiAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLXRhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICA8IS0tIGxpc3QgLS0+XG4gICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0xpc3QnXCIgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICA8bGliLXNlYXJjaC1ib3ggW3F1ZXN0aW9uXT1cInF1ZXNcIiBbYXBpTWV0YV09XCJxdWVzLlN1Yl9UZXh0X19jXCIgW2lkXT1cInF1ZXMuSWRcIiBbcGxhY2VIb2xkZXJUZXh0XT1cInF1ZXMuUXVlc3Rpb25fX2NcIiAgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5pbnB1dFwiIChzZWFyY2hWYWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpXCI+XG4gICAgICAgICAgICAgICAgPC9saWItc2VhcmNoLWJveD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0Ryb3Bkb3duJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gW2Zyb21TaGVuZ2VsXT1cInFiSXRlbS5pc1NoZW5nZWxfX2NcIiBbb3B0aW9uc109XCJxdWVzLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkc1wiXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuU3ViX1RleHRfX2NcIiBbaWRdPVwicXVlcy5JZFwiIFtzZWxlY3RlZFZhbHVlXT1cInF1ZXMuc2VsZWN0ZWRWYWx1ZVwiIFtwbGFjZWhvbGRlcl09XCInLS0tU2VsZWN0LS0tJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1lc3NhZ2VdPVwicXVlcy5FcnJvcl9NZXNzYWdlX19jXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XG4gICAgICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJxdWVzPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlcyAtLT5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdGaWxlJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgPGFwcC1maWxlLXVwbG9hZCBbbGltaXRGaWxlVXBsb2FkaW5nXT1cIjVcIiBbYWxsRmlsZXNdPVwicXVlcy5pbnB1dFwiIFxuICAgICAgICAgICAgICAgIChzZWxlY3RlZEZpbGVEYXRhKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcylcIiAoZGVsZXRlZEZpbGVEYXRhKT1cImRlbGV0ZUZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2lzRGVsZXRlRmlsZUJ1dHRvblZpc2libGVdPVwidHJ1ZVwiPjwvYXBwLWZpbGUtdXBsb2FkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19