vcomply-workflow-engine 2.2.3 → 2.3.1

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 (61) hide show
  1. package/bundles/vcomply-workflow-engine.umd.js +944 -511
  2. package/bundles/vcomply-workflow-engine.umd.js.map +1 -1
  3. package/esm2015/lib/more-option/more-option.component.js +23 -12
  4. package/esm2015/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.js +1 -9
  5. package/esm2015/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.ngsummary.json +1 -1
  6. package/esm2015/lib/sharedComponents/assessment-list/assessment-list.component.js +5 -3
  7. package/esm2015/lib/sharedComponents/assessment-list/assessment-list.component.ngfactory.js +1 -1
  8. package/esm2015/lib/sharedComponents/assessment-list/assessment-list.component.ngsummary.json +1 -1
  9. package/esm2015/lib/sharedComponents/program-listing/program-listing.component.js +155 -0
  10. package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngfactory.js +131 -0
  11. package/esm2015/lib/sharedComponents/program-listing/program-listing.component.ngsummary.json +1 -0
  12. package/esm2015/lib/ui-kit/pagination/pagination/pagination.component.js +1 -1
  13. package/esm2015/lib/ui-kit/popover/popover-longpress.directive.js +1 -3
  14. package/esm2015/lib/workflow-compliance/workflow-compliance.component.js +209 -39
  15. package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngfactory.js +200 -138
  16. package/esm2015/lib/workflow-compliance/workflow-compliance.component.ngsummary.json +1 -1
  17. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.js +6 -2
  18. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngfactory.js +4 -4
  19. package/esm2015/lib/workflow-engine-container/workflow-engine-container.component.ngsummary.json +1 -1
  20. package/esm2015/lib/workflow-engine.module.js +3 -1
  21. package/esm2015/lib/workflow-engine.module.ngfactory.js +1 -1
  22. package/esm2015/lib/workflow-policy/workflow-policy.component.js +2 -2
  23. package/esm2015/lib/workflow-policy/workflow-policy.component.ngfactory.js +2 -2
  24. package/esm2015/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.js +87 -36
  25. package/esm2015/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.ngfactory.js +16 -19
  26. package/esm2015/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.ngsummary.json +1 -1
  27. package/esm2015/lib/workflow-program/create-program-ui/assessment-picker/selected-assessment.pipe.js +1 -1
  28. package/esm2015/lib/workflow-program/create-program-ui/create-program-ui.module.js +6 -3
  29. package/esm2015/lib/workflow-program/create-program-ui/create-program-ui.module.ngfactory.js +1 -1
  30. package/esm2015/lib/workflow-program/create-program-ui/create-program-ui.module.ngsummary.json +1 -1
  31. package/esm2015/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.js +21 -0
  32. package/esm2015/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.ngsummary.json +1 -0
  33. package/esm2015/lib/workflow-program/create-program-ui/role-list/role-list.component.js +24 -4
  34. package/esm2015/lib/workflow-program/create-program-ui/role-list/role-list.component.ngfactory.js +24 -16
  35. package/esm2015/lib/workflow-program/create-program-ui/role-list/role-list.component.ngsummary.json +1 -1
  36. package/esm2015/lib/workflow-program/workflow-program.component.js +182 -200
  37. package/esm2015/lib/workflow-program/workflow-program.component.ngfactory.js +118 -115
  38. package/esm2015/lib/workflow-program/workflow-program.component.ngsummary.json +1 -1
  39. package/esm2015/lib/workflow-services/programs.service.js +24 -3
  40. package/esm2015/lib/workflow-services/programs.service.ngsummary.json +1 -1
  41. package/esm2015/lib/workflow-services/responsibility.service.js +23 -11
  42. package/esm2015/lib/workflow-services/responsibility.service.ngsummary.json +1 -1
  43. package/esm2015/vcomply-workflow-engine.js +192 -190
  44. package/esm2015/vcomply-workflow-engine.ngsummary.json +1 -1
  45. package/fesm2015/vcomply-workflow-engine.js +752 -317
  46. package/fesm2015/vcomply-workflow-engine.js.map +1 -1
  47. package/lib/sharedComponents/assessment-editor/components/assessment-settings/assessment-settings.component.d.ts +0 -1
  48. package/lib/sharedComponents/assessment-list/assessment-list.component.d.ts +1 -0
  49. package/lib/sharedComponents/program-listing/program-listing.component.d.ts +43 -0
  50. package/lib/sharedComponents/program-listing/program-listing.component.ngfactory.d.ts +1 -0
  51. package/lib/workflow-compliance/workflow-compliance.component.d.ts +14 -4
  52. package/lib/workflow-engine-container/workflow-engine-container.component.d.ts +2 -0
  53. package/lib/workflow-program/create-program-ui/assessment-picker/assessment-picker.component.d.ts +6 -3
  54. package/lib/workflow-program/create-program-ui/pipes/assessment-resolver.pipe.d.ts +4 -0
  55. package/lib/workflow-program/create-program-ui/role-list/role-list.component.d.ts +3 -0
  56. package/lib/workflow-program/workflow-program.component.d.ts +8 -15
  57. package/lib/workflow-services/programs.service.d.ts +3 -0
  58. package/lib/workflow-services/responsibility.service.d.ts +8 -6
  59. package/package.json +2 -2
  60. package/vcomply-workflow-engine.d.ts +191 -189
  61. package/vcomply-workflow-engine.metadata.json +1 -1
@@ -1,4 +1,5 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { cloneDeep } from 'lodash';
2
3
  import { AuthService } from '../../../workflow-services/auth.service';
3
4
  import { AssessmentService } from './assessment.service';
4
5
  export class AssessmentPickerComponent {
@@ -33,14 +34,19 @@ export class AssessmentPickerComponent {
33
34
  this.onAssessmentSelect = new EventEmitter();
34
35
  this.cancelAssessment = new EventEmitter();
35
36
  this.selectedAssessmentArr = [];
36
- this.selectedAssessments = [];
37
+ this.selectedAssessmentCategoriesIds = [];
37
38
  this.selectedAssessmentIds = [];
39
+ this.selectedAssessment = [];
38
40
  this.dataPerPage = 30;
39
41
  }
40
42
  set setSelected(value) {
41
43
  if (value && (value === null || value === void 0 ? void 0 : value.length)) {
42
- this.selectedAssessments = [...value];
43
- this.selectedAssessmentIds = this.selectedAssessments.map((ele) => ele === null || ele === void 0 ? void 0 : ele.id);
44
+ this.selectedAssessmentArr = [...value];
45
+ //this.setCategoryAndAssessment();
46
+ this.selectedAssessmentArr.forEach((ele, index) => {
47
+ this.openedCategory.push(ele === null || ele === void 0 ? void 0 : ele.category_id);
48
+ // this.showSubList(index,ele?.category_id);
49
+ });
44
50
  }
45
51
  }
46
52
  ngOnChanges(changes) {
@@ -77,17 +83,28 @@ export class AssessmentPickerComponent {
77
83
  *
78
84
  */
79
85
  showSubList(index, id) {
80
- console.log("this.openedCategory ==>", this.openedCategory);
81
- if (this.openedCategory.includes(index)) {
82
- this.openedCategory = this.openedCategory.filter(ele => ele !== index);
86
+ console.log("this.openedCategorydasasfsa ==>", this.openedCategory, index, id);
87
+ if (this.openedCategory.includes(id)) {
88
+ this.openedCategory = this.openedCategory.filter(ele => ele !== id);
83
89
  }
84
90
  else {
85
- this.openedCategory.push(index);
86
- this.getAssessmentList(index, id);
91
+ this.openedCategory.push(id);
92
+ this.getAssessmentList(id);
87
93
  }
88
94
  console.log("this.openedCategory ==>", this.openedCategory);
89
95
  return this.openedCategory;
90
96
  }
97
+ expandCategory(categoryId) {
98
+ var _a, _b;
99
+ const index = (_b = (_a = this.assessmentCategory) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.findIndex((ele) => ele.id === categoryId);
100
+ if (this.openedCategory.includes(categoryId) && this.assessmentCategory.data[index].assessmentData) {
101
+ this.openedCategory = this.openedCategory.filter(ele => ele !== categoryId);
102
+ }
103
+ else {
104
+ this.openedCategory.push(categoryId);
105
+ this.getAssessmentList(categoryId);
106
+ }
107
+ }
91
108
  // TODO: Pagination
92
109
  /**
93
110
  *
@@ -131,11 +148,16 @@ export class AssessmentPickerComponent {
131
148
  this.assessmentService.getAssessmentCategory(this.assessmentPayload).subscribe((res) => {
132
149
  var _a;
133
150
  this.assessmentCategory = res;
134
- if ((_a = this.selectedAssessmentData) === null || _a === void 0 ? void 0 : _a.length) {
135
- this.selectedAssessmentData.forEach((ele) => {
151
+ if ((_a = this.selectedAssessmentArr) === null || _a === void 0 ? void 0 : _a.length) {
152
+ // this.selectedAssessmentArr = [... new Set(this.selectedAssessmentArr)]
153
+ this.selectedAssessmentArr.forEach((ele) => {
136
154
  const index = res.data.findIndex((assessment) => assessment.id === ele.category_id);
137
- this.showSubList(index, ele.category_id);
155
+ this.expandCategory(ele.category_id);
138
156
  });
157
+ // this.selectedAssessmentArr.forEach((ele:any,index:any) => {
158
+ // this.openedCategory.push(ele?.category_id);
159
+ // this.showSubList(index,ele?.category_id);
160
+ // })
139
161
  }
140
162
  this.isLoader = false;
141
163
  });
@@ -145,12 +167,29 @@ export class AssessmentPickerComponent {
145
167
  *
146
168
  * @param id : Assessment category id
147
169
  */
148
- getAssessmentList(index, id) {
170
+ getAssessmentList(id) {
171
+ console.log("asss", id);
149
172
  const payload = {
150
173
  search_title: "",
151
174
  };
152
175
  this.assessmentService.getAssessmentList(payload, id).subscribe((res) => {
153
- this.assessmentCategory.data[index].assessmentData = [...new Set(res)];
176
+ var _a, _b, _c;
177
+ const index = (_b = (_a = this.assessmentCategory) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.findIndex((ele) => ele.id === id);
178
+ console.log("indexer", index, this.assessmentCategory);
179
+ if (index > -1) {
180
+ this.assessmentCategory.data[index].assessmentData = [...new Set(res)];
181
+ }
182
+ console.log("ass");
183
+ if ((_c = this.selectedAssessmentArr) === null || _c === void 0 ? void 0 : _c.length) {
184
+ this.setCategoryAndAssessment();
185
+ const index = this.selectedAssessmentArr.findIndex((ele) => ele.category_id === id);
186
+ // if(index !== -1) {
187
+ // this.selectedAssessmentArr[index].assessmentIds = this.selectedAssessmentArr[index].assessmentIds.map((ele: any) => {
188
+ // ele = res.find((data: any) => data.id === ele);
189
+ // return ele;
190
+ // });
191
+ // }
192
+ }
154
193
  });
155
194
  }
156
195
  /**
@@ -160,33 +199,45 @@ export class AssessmentPickerComponent {
160
199
  * @param payload
161
200
  */
162
201
  selectAssessment(evt, payload, category) {
163
- var _a;
164
- console.log("payload ==>", payload);
165
- const index = this.selectedAssessmentArr.findIndex((ele) => ele.category_id === category.id);
166
- if (index > -1) {
167
- if ((_a = evt === null || evt === void 0 ? void 0 : evt.target) === null || _a === void 0 ? void 0 : _a.checked) {
168
- this.selectedAssessmentArr[index].assessmentIds.push(payload);
202
+ var _a, _b;
203
+ if ((_a = evt === null || evt === void 0 ? void 0 : evt.target) === null || _a === void 0 ? void 0 : _a.checked) {
204
+ console.log("selected", this.selectedAssessmentArr);
205
+ const index = this.selectedAssessmentArr.findIndex((ele) => ele.category_id === category.id);
206
+ if (index > -1) {
207
+ const currentCategoryAssessment = this.selectedAssessmentArr[index].assessmentIds;
208
+ currentCategoryAssessment.push(payload);
209
+ this.selectedAssessmentArr[index].assessmentIds = this.uniqueByProp(currentCategoryAssessment, 'id');
210
+ this.selectedAssessmentArr = cloneDeep(this.selectedAssessmentArr);
211
+ this.setCategoryAndAssessment();
169
212
  }
170
213
  else {
171
- this.selectedAssessmentArr[index].assessmentIds = this.selectedAssessmentArr[index].assessmentIds.filter((assessment) => assessment.id !== payload.id);
172
- if (this.selectedAssessmentArr[index].assessmentIds.length === 0) {
173
- this.selectedAssessmentArr.splice(index, 1);
174
- }
214
+ this.selectedAssessmentArr.push({
215
+ category_id: category.id,
216
+ assessmentIds: [payload]
217
+ });
218
+ this.selectedAssessmentArr = cloneDeep(this.selectedAssessmentArr);
219
+ this.setCategoryAndAssessment();
175
220
  }
176
221
  }
177
222
  else {
178
- this.selectedAssessmentArr.push({
179
- category_id: category.id,
180
- assessmentIds: [payload]
181
- });
223
+ const index = this.selectedAssessmentArr.findIndex((ele) => ele.category_id === category.id);
224
+ if (index > -1) {
225
+ this.selectedAssessmentArr[index].assessmentIds = this.selectedAssessmentArr[index].assessmentIds.filter((assessment) => assessment.id !== payload.id);
226
+ this.selectedAssessmentArr = cloneDeep(this.selectedAssessmentArr);
227
+ this.setCategoryAndAssessment();
228
+ if (((_b = this.selectedAssessmentArr[index].assessmentIds) === null || _b === void 0 ? void 0 : _b.length) === 0) {
229
+ this.selectedAssessmentArr.splice(index);
230
+ this.selectedAssessmentArr = cloneDeep(this.selectedAssessmentArr);
231
+ this.setCategoryAndAssessment();
232
+ }
233
+ }
182
234
  }
183
- const selectedData = JSON.parse(JSON.stringify(this.selectedAssessmentArr));
184
- this.selectedAssessmentData = selectedData.map((ele) => {
185
- ele.assessmentIds = ele.assessmentIds.map((assessment) => assessment.id);
186
- return ele;
187
- });
188
- console.log(" this.selectedAssessmentArr this.selectedAssessmentArr", this.selectedAssessmentData, selectedData);
189
- // evt?.target?.checked === true ? this.manipulateSelectedAssessment('ADD', payload) : this.manipulateSelectedAssessment('DELETE', payload)
235
+ }
236
+ setCategoryAndAssessment() {
237
+ var _a;
238
+ this.selectedAssessmentCategoriesIds = (_a = this.selectedAssessmentArr.filter((cat) => { var _a; return ((_a = cat === null || cat === void 0 ? void 0 : cat.assessmentIds) === null || _a === void 0 ? void 0 : _a.length) > 0; })) === null || _a === void 0 ? void 0 : _a.map((ele) => ele === null || ele === void 0 ? void 0 : ele.category_id).flat();
239
+ this.selectedAssessmentIds = this.selectedAssessmentArr.map((cat) => cat === null || cat === void 0 ? void 0 : cat.assessmentIds.map((ele) => ele === null || ele === void 0 ? void 0 : ele.id)).flat();
240
+ this.selectedAssessment = this.selectedAssessmentArr.map((cat) => cat === null || cat === void 0 ? void 0 : cat.assessmentIds.map((ele) => ele)).flat();
190
241
  }
191
242
  // TODO: Display selected data in bottom floating bar with next enabled button having
192
243
  // TODO: Send data in payload of create Responsibility form
@@ -214,7 +265,7 @@ export class AssessmentPickerComponent {
214
265
  AssessmentPickerComponent.decorators = [
215
266
  { type: Component, args: [{
216
267
  selector: 'assessment-picker',
217
- template: "<app-preview *ngIf=\"isPreview\" [questionData]=\"previewQuestionData\" (previewBack)=\"previewBack()\"></app-preview>\r\n<div class=\"assessment-list\" [class.animate]=\"animation\">\r\n\r\n <ng-container >\r\n <div class=\"assessment-list-head\">\r\n <button class=\"back-btn\">\r\n <!-- <i class=\"icons\">&#xe91d;</i> -->\r\n </button>\r\n <h3 class=\"assessment-list-title\">Select an Assessment</h3>\r\n </div>\r\n <div class=\"assessment-list-body\">\r\n <div class=\"search-block\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" [(ngModel)]=\"searchAssessments\" (change)=\"onAssessmentSearch($event.target.value)\" placeholder=\"Search Assessment Category\" />\r\n </div>\r\n <pagination\r\n\r\n [pageCount]=\"assessmentCategory?.totalPage\"\r\n [total]=\"assessmentCategory?.totalRecords\"\r\n [start]=\"assessmentCategory?.start_value\"\r\n [end]=\"assessmentCategory?.end_value\"\r\n [activeAlphabet]=\"''\"\r\n (selectedAlphabet)=\"onAlphabetSelected($event)\"\r\n (selectedPage)=\"onPageSelection($event)\"\r\n ></pagination>\r\n <div *ngIf=\"assessmentCategory.data.length === 0 && !isLoader\" class=\"assessment-list-part\">\r\n <app-no-data [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No Assessments Found.'\"></app-no-data>\r\n </div>\r\n <div *ngIf=\"assessmentCategory.data.length || isLoader\" class=\"assessment-list-part\">\r\n <div *ngIf=\"isEdit && selectedAssessment?.assessmentDetails?.assessment_name\" class=\"assessment-list-selected\">\r\n <div class=\"assessment-list-heading\">Assessment already selected for this responsibility</div>\r\n <div class=\"assessment-list-item\">\r\n <div class=\"table-row\">\r\n <div class=\"table-column serial disabled\">\r\n <app-cs-radio [disabled]=\"true\" class=\"disabled\" [checked]=\"true\" [readonly]=\"true\"></app-cs-radio>\r\n </div>\r\n <div class=\"table-column sub-name\">\r\n <div class=\"name-inner\">\r\n <div class=\"value\" [appTooltip]=\"selectedAssessment?.assessmentDetails?.assessment_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{selectedAssessment?.assessmentDetails?.assessment_name}}</div>\r\n <div class=\"within-part\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"selectedAssessment?.category_details?.category_name + (selectedAssessment?.category_details?.parent_tree ? ' > ' + selectedAssessment?.category_details?.parent_tree : '')\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{selectedAssessment?.category_details?.category_name + (selectedAssessment?.category_details?.parent_tree ? ' > ' + selectedAssessment?.category_details?.parent_tree : '')}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-column question\">\r\n <div class=\"label\">{{selectedAssessment?.assessmentDetails?.questions}} {{selectedAssessment?.assessmentDetails?.questions > 1 ? 'Questions': 'Question'}}</div>\r\n <div class=\"buttons\">\r\n <button class=\"action-btn\" (click)=\"preview(selectedAssessment?.assessmentDetails)\"><i class=\"icons\">&#xeae5;</i> Preview</button>\r\n <!-- <button class=\"action-btn\"><i class=\"icons\">&#xe90c;</i> Edit</button> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"assessment-list-heading\">Select an Assessment for this responsibility</div>\r\n\r\n <!--\r\n Assessment category list\r\n active class is used for highlighting opened element\r\n -->\r\n <ng-container *ngIf=\"!isLoader\">\r\n <div *ngFor=\"let data of assessmentCategory.data; let i = index;\" class=\"assessment-list-item\" [class.active]=\"openedCategory.includes(i) || data.id === selectedAssessment?.category_id\">\r\n <div class=\"table-row main-list\" (click)=\"showSubList(i, data?.id)\" [class.disabled]=\"data?.assessmentcount < 1\">\r\n <div class=\"table-column serial\">\r\n <div [id]=\"'sr-no' + i\" class=\"sr-no\" [appTooltip]=\"i + 1\" placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">{{dataPerPage * (assessmentPayload.page_no - 1) + (i + 1)}}</div>\r\n </div>\r\n <div class=\"table-column name\">\r\n <div class=\"name-inner\">\r\n <div class=\"value\" [appTooltip]=\"data.category_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{data?.category_name}}</div>\r\n <div class=\"within-part\" *ngIf=\"data?.parent_tree\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"data.parent_tree\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{data?.parent_tree}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-column action\">\r\n <button [id]=\"'arrow' + i\" class=\"arrow\" [class.disabled] = \"data?.assessmentcount < 1\" [disabled]=\"data?.assessmentcount < 1\">\r\n <i *ngIf=\"!openedCategory.includes(i)\" class=\"icons\">&#xe970;</i>\r\n <i *ngIf=\"openedCategory.includes(i)\" class=\"icons\">&#xe9e8;</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Assessment list start from here -->\r\n <div *ngIf=\"openedCategory.includes(i)\" class=\"sub-list\">\r\n <ng-container *ngIf=\"data.assessmentData?.length > 0\">\r\n <div class=\"table-row\" *ngFor=\"let assessment of data.assessmentData; let j = index\" [class.active]=\"(selectedAssessmentData |selectedAssessment: data.id).includes(assessment.id)\">\r\n <div class=\"table-column serial\">\r\n <div [id]=\"'sub-sr-no'+ i+j\" class=\"sr-no\" [appTooltip]=\"'1.1'\" placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">\r\n {{dataPerPage * (assessmentPayload.page_no - 1) + (i + 1)}}.{{j + 1}}\r\n <!-- <app-cs-radio name=\"assessment\" [value]=\"assessment.id\" [checked]=\"assessment?.id === selectedAssessment?.assessment_id && data?.id === selectedAssessment?.category_id\"\r\n (checkedEvent)=\"setAssessment(data, assessment)\"></app-cs-radio> -->\r\n <!-- (change)=\"selectGroup($event,group)\" [disabled]=\"nonRemovableGroupIds?.includes(group?.group_id)\" [checked]=\"selectedGroupIds.includes(group?.group_id)\" -->\r\n\r\n <vui-checkbox [checked]=\"(selectedAssessmentData |selectedAssessment: data.id).includes(assessment.id)\" (change)=\"selectAssessment($event,assessment, data)\"></vui-checkbox>\r\n </div>\r\n </div>\r\n <div class=\"table-column sub-name\">\r\n <div class=\"value\" [appTooltip]=\"'Mission and message, communications to external audiences'\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{assessment?.assessment_name}}</div>\r\n </div>\r\n <div class=\"table-column question\">\r\n <div class=\"label\">{{assessment?.questions}} {{assessment?.questions > 1 ? 'Questions' : 'Question'}}</div>\r\n <div class=\"buttons\">\r\n <button class=\"action-btn\" (click)=\"preview(assessment)\"><i class=\"icons\">&#xeae5;</i> Preview</button>\r\n <!-- <button class=\"action-btn\"><i class=\"icons\">&#xe9ba;</i> Edit</button> -->\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- Loader loading isLoader -->\r\n <assessment-sub-loader *ngIf=\"!data.assessmentData?.length\"></assessment-sub-loader>\r\n <!-- <app-line-loader *ngIf=\"!data.assessmentData?.length\" [loaderHeight]=\"'5'\"></app-line-loader> -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- Loader loading isLoader -->\r\n <assessment-loader *ngIf=\"isLoader\"></assessment-loader>\r\n </div>\r\n <!-- No data image -->\r\n <app-no-data *ngIf=\"!assessmentCategory.data.length && !isLoader\" [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No Data to Display'\"></app-no-data>\r\n </div>\r\n <!--\r\n bottom floating bar which includes cancel, next button\r\n closing tab\r\n -->\r\n\r\n\r\n <vui-floating-bar (closeEvent)=\"save()\" (closeList)=\"close()\">\r\n <div class=\"counter\" *ngIf=\"selectedAssessments?.length\" appPopover (click)=\"assessmentCount.popover()\"\r\n placement=\"left\">{{selectedAssessments?.length}}</div>\r\n <div class=\"name\">\r\n <span *ngIf=\"selectedAssessments?.length === 1\">Assessment selected</span>\r\n <span *ngIf=\"selectedAssessments?.length > 1\">Assessments selected</span>\r\n </div>\r\n <app-popover #assessmentCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let element of selectedAssessments; let i =index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"selectAssessment({target:{checked:false}},element)\">&#xe90d;</i>\r\n {{element?.assessment_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n\r\n </vui-floating-bar>\r\n\r\n </ng-container>\r\n</div>\r\n",
268
+ template: "<app-preview *ngIf=\"isPreview\" [questionData]=\"previewQuestionData\" (previewBack)=\"previewBack()\"></app-preview>\r\n<div class=\"assessment-list\" [class.animate]=\"animation\">\r\n\r\n <ng-container >\r\n <div class=\"assessment-list-head\">\r\n <button class=\"back-btn\">\r\n <!-- <i class=\"icons\">&#xe91d;</i> -->\r\n </button>\r\n <h3 class=\"assessment-list-title\">Select an Assessment</h3>\r\n </div>\r\n <div class=\"assessment-list-body\">\r\n <div class=\"search-block\">\r\n <i class=\"icons\">&#xe90b;</i>\r\n <input type=\"text\" [(ngModel)]=\"searchAssessments\" (change)=\"onAssessmentSearch($event.target.value)\" placeholder=\"Search Assessment Category\" />\r\n </div>\r\n <pagination\r\n\r\n [pageCount]=\"assessmentCategory?.totalPage\"\r\n [total]=\"assessmentCategory?.totalRecords\"\r\n [start]=\"assessmentCategory?.start_value\"\r\n [end]=\"assessmentCategory?.end_value\"\r\n [activeAlphabet]=\"''\"\r\n (selectedAlphabet)=\"onAlphabetSelected($event)\"\r\n (selectedPage)=\"onPageSelection($event)\"\r\n ></pagination>\r\n <div *ngIf=\"assessmentCategory.data.length === 0 && !isLoader\" class=\"assessment-list-part\">\r\n <app-no-data [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No Assessments Found.'\"></app-no-data>\r\n </div>\r\n <div *ngIf=\"assessmentCategory.data.length || isLoader\" class=\"assessment-list-part\">\r\n <div *ngIf=\"isEdit && selectedAssessment?.assessmentDetails?.assessment_name\" class=\"assessment-list-selected\">\r\n <div class=\"assessment-list-heading\">Assessment already selected for this responsibility</div>\r\n <div class=\"assessment-list-item\">\r\n <div class=\"table-row\">\r\n <div class=\"table-column serial disabled\">\r\n <app-cs-radio [disabled]=\"true\" class=\"disabled\" [checked]=\"true\" [readonly]=\"true\"></app-cs-radio>\r\n </div>\r\n <div class=\"table-column sub-name\">\r\n <div class=\"name-inner\">\r\n <div class=\"value\" [appTooltip]=\"selectedAssessment?.assessmentDetails?.assessment_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{selectedAssessment?.assessmentDetails?.assessment_name}}</div>\r\n <div class=\"within-part\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"selectedAssessment?.category_details?.category_name + (selectedAssessment?.category_details?.parent_tree ? ' > ' + selectedAssessment?.category_details?.parent_tree : '')\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{selectedAssessment?.category_details?.category_name + (selectedAssessment?.category_details?.parent_tree ? ' > ' + selectedAssessment?.category_details?.parent_tree : '')}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-column question\">\r\n <div class=\"label\">{{selectedAssessment?.assessmentDetails?.questions}} {{selectedAssessment?.assessmentDetails?.questions > 1 ? 'Questions': 'Question'}}</div>\r\n <div class=\"buttons\">\r\n <button class=\"action-btn\" (click)=\"preview(selectedAssessment?.assessmentDetails)\"><i class=\"icons\">&#xeae5;</i> Preview</button>\r\n <!-- <button class=\"action-btn\"><i class=\"icons\">&#xe90c;</i> Edit</button> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"assessment-list-heading\">Select an Assessment for this responsibility</div>\r\n\r\n <!--\r\n Assessment category list\r\n active class is used for highlighting opened element\r\n -->\r\n <ng-container *ngIf=\"!isLoader\">\r\n <div *ngFor=\"let data of assessmentCategory.data; let i = index;\" class=\"assessment-list-item\" [class.active]=\"openedCategory.includes(data?.id) || data.id === selectedAssessment?.category_id\">\r\n <div class=\"table-row main-list\" (click)=\"expandCategory(data?.id)\" [class.disabled]=\"data?.assessmentcount < 1\">\r\n <div class=\"table-column serial\">\r\n <div [id]=\"'sr-no' + i\" class=\"sr-no\" [appTooltip]=\"i + 1\" placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">{{dataPerPage * (assessmentPayload.page_no - 1) + (i + 1)}}</div>\r\n </div>\r\n <div class=\"table-column name\">\r\n <div class=\"name-inner\">\r\n <div class=\"value\" [appTooltip]=\"data.category_name\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{data?.category_name}}</div>\r\n <div class=\"within-part\" *ngIf=\"data?.parent_tree\">\r\n <span class=\"within-box\">Within</span>\r\n <span class=\"value\" [appTooltip]=\"data.parent_tree\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{data?.parent_tree}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"table-column action\">\r\n <button [id]=\"'arrow' + i\" class=\"arrow\" [class.disabled] = \"data?.assessmentcount < 1\" [disabled]=\"data?.assessmentcount < 1\">\r\n <i *ngIf=\"!openedCategory.includes(data?.id)\" class=\"icons\">&#xe970;</i>\r\n <i *ngIf=\"openedCategory.includes(data?.id)\" class=\"icons\">&#xe9e8;</i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Assessment list start from here -->\r\n <div *ngIf=\"openedCategory.includes(data?.id)\" class=\"sub-list\">\r\n <ng-container *ngIf=\"data.assessmentData?.length > 0\">\r\n <div class=\"table-row\" *ngFor=\"let assessment of data.assessmentData; let j = index\" [class.active]=\"(selectedAssessmentData |selectedAssessment: data.id).includes(assessment.id)\">\r\n <div class=\"table-column serial\">\r\n <div [id]=\"'sub-sr-no'+ i+j\" class=\"sr-no active\" appTooltip=\"{{dataPerPage * (assessmentPayload.page_no - 1) + (i + 1)}}.{{j + 1}}\" placement=\"bottom\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"true\">\r\n {{dataPerPage * (assessmentPayload.page_no - 1) + (i + 1)}}.{{j + 1}}\r\n <!-- <app-cs-radio name=\"assessment\" [value]=\"assessment.id\" [checked]=\"assessment?.id === selectedAssessment?.assessment_id && data?.id === selectedAssessment?.category_id\"\r\n (checkedEvent)=\"setAssessment(data, assessment)\"></app-cs-radio> -->\r\n <!-- (change)=\"selectGroup($event,group)\" [disabled]=\"nonRemovableGroupIds?.includes(group?.group_id)\" [checked]=\"selectedGroupIds.includes(group?.group_id)\" -->\r\n\r\n <vui-checkbox [checked]=\"(selectedAssessmentIds).includes(assessment.id)\" (change)=\"selectAssessment($event,assessment, data)\"></vui-checkbox>\r\n </div>\r\n </div>\r\n <div class=\"table-column sub-name\">\r\n <div class=\"value\" [appTooltip]=\"'Mission and message, communications to external audiences'\" placement=\"bottom-left\" delay=\"0\" type=\"black\" [tooltipMandatory]=\"false\">{{assessment?.assessment_name}}</div>\r\n </div>\r\n <div class=\"table-column question\">\r\n <div class=\"label\">{{assessment?.questions}} {{assessment?.questions > 1 ? 'Questions' : 'Question'}}</div>\r\n <div class=\"buttons\">\r\n <button class=\"action-btn\" (click)=\"preview(assessment)\"><i class=\"icons\">&#xeae5;</i> Preview</button>\r\n <!-- <button class=\"action-btn\"><i class=\"icons\">&#xe9ba;</i> Edit</button> -->\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- Loader loading isLoader -->\r\n <assessment-sub-loader *ngIf=\"!data.assessmentData?.length\"></assessment-sub-loader>\r\n <!-- <app-line-loader *ngIf=\"!data.assessmentData?.length\" [loaderHeight]=\"'5'\"></app-line-loader> -->\r\n </div>\r\n </div>\r\n </ng-container>\r\n <!-- Loader loading isLoader -->\r\n <assessment-loader *ngIf=\"isLoader\"></assessment-loader>\r\n </div>\r\n <!-- No data image -->\r\n <app-no-data *ngIf=\"!assessmentCategory.data.length && !isLoader\" [noDataImage]=\"'https://cdn.v-comply.com/libraries/workflow-engine/assets/workflow/search-data.svg'\" [noDataText]=\"'No Data to Display'\"></app-no-data>\r\n </div>\r\n <!--\r\n bottom floating bar which includes cancel, next button\r\n closing tab\r\n -->\r\n\r\n\r\n <vui-floating-bar (closeEvent)=\"save()\" (closeList)=\"close()\">\r\n <div class=\"counter\" *ngIf=\"selectedAssessment?.length\" appPopover (click)=\"assessmentCount.popover()\"\r\n placement=\"left\">{{selectedAssessment?.length}}</div>\r\n <div class=\"name\">\r\n <span *ngIf=\"selectedAssessment?.length === 1\">Assessment selected</span>\r\n <span *ngIf=\"selectedAssessment?.length > 1\">Assessments selected</span>\r\n </div>\r\n <app-popover #assessmentCount [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let element of selectedAssessment; let i =index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <!-- <i class=\"icons\"\r\n (click)=\"selectAssessment({target:{checked:false}},element)\">&#xe90d;</i> -->\r\n {{element?.assessment_name}}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n\r\n </vui-floating-bar>\r\n\r\n </ng-container>\r\n</div>\r\n",
218
269
  styles: ["@import url(\"https://cdn.v-comply.com/design-system/css/icons/icons.css\");::ng-deep .assessment-list{background:#fff;border-top:3px solid #1e5dd3;position:fixed;top:0;right:500px;bottom:0;left:0;z-index:1}::ng-deep .assessment-list.animate{-webkit-animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;animation:animate-right .2s cubic-bezier(.25,.46,.45,.94) both;z-index:-1}::ng-deep .assessment-list-head{background:#fbfbfb;height:42px;padding:0 18px;display:flex;align-items:center;border:1px solid #f1f1f1;border-right:none}::ng-deep .assessment-list-head button.back-btn{background:transparent;border-radius:0;border:0;color:#161b2f;font-size:16px;padding:0;margin:0 8px 0 0}::ng-deep .assessment-list-title{color:#161b2f;font-size:15px;font-weight:500;margin:0!important;padding:0;line-height:21px}::ng-deep .assessment-list-close{background:transparent;border:none;outline:none;cursor:pointer;color:#000;font-size:12px;display:inline-block;padding:0}::ng-deep .assessment-list-body{padding:24px 40px 24px 36px;height:calc(100vh - 112px)}::ng-deep .assessment-list-body .search-block{position:relative}::ng-deep .assessment-list-body .search-block input{height:44px;line-height:24px;padding:10px 15px 10px 40px;outline:none;border:1px solid #7475763f;border-radius:4px;width:100%;font-size:14px;color:#747576}::ng-deep .assessment-list-body .search-block input::-moz-placeholder{font-weight:400}::ng-deep .assessment-list-body .search-block input:-ms-input-placeholder{font-weight:400}::ng-deep .assessment-list-body .search-block input::placeholder{font-weight:400}::ng-deep .assessment-list-body .search-block input:focus{border-color:#1e5dd3}::ng-deep .assessment-list-body .search-block i{position:absolute;left:17px;font-size:12px;font-weight:400;top:17px;pointer-events:none;color:#f1f1f1}::ng-deep .assessment-list-body .assessment-list-part{height:calc(100vh - 228px);overflow:auto;padding:8px 12px 0 0;width:calc(100% + 12px)}::ng-deep .assessment-list-body .assessment-list-part::-webkit-scrollbar-track{background-color:#fff;position:absolute}::ng-deep .assessment-list-body .assessment-list-part::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .assessment-list-body .assessment-list-part::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-selected{margin-bottom:8px}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-heading{color:#161b2f;font-size:12px;font-weight:600;margin-bottom:4px}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item{border:1px solid #f1f1f1;border-radius:2px;margin-bottom:4px}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .main-list{cursor:pointer}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item.active{border-color:#1e5dd3;box-shadow:0 3px 6px #4681ef26}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row{display:flex;align-items:center;justify-content:space-between}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row.disabled{pointer-events:none}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column{color:#747576;height:48px;position:relative;width:100%;display:flex;align-items:center;padding:0 4px}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.serial{width:32px;max-width:32px;justify-content:center}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.serial .sr-no{width:16px;background:#f8f8f8;-ms-writing-mode:tb-lr;writing-mode:vertical-lr;color:#747576;font-size:10px;font-weight:500;display:flex;height:100%;align-items:center;justify-content:center;position:relative;transition:all .2s ease-in-out}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.serial .sr-no vui-checkbox{position:absolute;top:8px;left:0;opacity:0;transition:all .2s ease-in-out}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.serial .sr-no vui-checkbox label.checkbox-item{position:unset}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.name{width:calc(100% - 64px);min-width:calc(100% - 64px)}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.name .name-inner{width:100%}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.name .name-inner .value{color:#161b2f;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:20px}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.action{width:32px;max-width:32px;justify-content:center}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.action button.arrow{background:transparent;border:none;border-radius:0;color:#747576;font-size:12px;padding:0;margin:0;display:flex;align-items:center;justify-content:center;height:100%;width:100%}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.action button.disabled{opacity:.5!important;pointer-events:none}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.sub-name{width:calc(100% - 232px);min-width:calc(100% - 232px)}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.sub-name .name-inner{width:100%}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.sub-name .value{color:#747576;font-size:12px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-right:20px}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.question{width:200px;max-width:200px;justify-content:flex-end}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.question .label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px;margin-right:8px}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.question .buttons{display:flex;width:0;overflow:hidden;transition:all .2s ease-in-out}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.question .buttons button.action-btn{background:#fff;border:1px solid #f1f1f1;border-radius:2px;color:#1e5dd3;font-size:11px;font-weight:500;line-height:24px;text-transform:uppercase;padding:0 8px;display:flex;align-items:center;margin:0}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.question .buttons button.action-btn i{margin-right:4px}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row .table-column.question .buttons button.action-btn+button{margin-left:4px}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .table-row:hover .table-column.question .buttons{width:86px}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .sub-list .table-row{border-top:1px solid #f1f1f1}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .sub-list .table-row.active .table-column.serial .sr-no,::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .sub-list .table-row:hover .table-column.serial .sr-no{color:#f8f8f8}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .sub-list .table-row.active .table-column.serial .sr-no vui-checkbox,::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .sub-list .table-row:hover .table-column.serial .sr-no vui-checkbox{opacity:1}::ng-deep .assessment-list-body .assessment-list-part .assessment-list-item .sub-list .table-row .table-column{height:32px}::ng-deep .assessment-list-body ul{padding:0;margin:0}::ng-deep .assessment-list-body ul.assessment{max-height:calc(100vh - 240px);overflow:auto;padding:16px 12px 0 0;width:calc(100% + 12px)}::ng-deep .assessment-list-body ul.assessment::-webkit-scrollbar-track{background-color:#fff;position:absolute}::ng-deep .assessment-list-body ul.assessment::-webkit-scrollbar{width:3px;height:3px;background-color:transparent;position:absolute}::ng-deep .assessment-list-body ul.assessment::-webkit-scrollbar-thumb{border-radius:3px;background-color:#dbdbdb;position:absolute}::ng-deep .assessment-list-body ul.assessment li{padding:0 0 12px;list-style:none;display:flex;align-items:center;justify-content:space-between}::ng-deep .assessment-list-body ul.assessment li vui-checkbox{width:calc(100% - 260px)}::ng-deep .assessment-list-body ul.assessment li vui-checkbox .radio-item .value .name{font-size:12px;color:#161b2f;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .assessment-list-body ul.assessment li .right{display:flex;align-items:center}::ng-deep .assessment-list-body ul.assessment li .right .label{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding-left:4px;padding-right:4px;line-height:12px}::ng-deep .assessment-list-body ul.assessment li .right .buttons{display:flex;width:0;overflow:hidden;transition:all .2s ease-in-out}::ng-deep .assessment-list-body ul.assessment li .right .buttons button.action-btn{background:#fff;border:1px solid #f1f1f1;border-radius:2px;color:#1e5dd3;font-size:11px;font-weight:500;line-height:24px;text-transform:uppercase;padding:0 8px;margin-left:12px;display:flex;align-items:center}::ng-deep .assessment-list-body ul.assessment li .right .buttons button.action-btn i{margin-right:4px}::ng-deep .assessment-list-body ul.assessment li .right .buttons button.action-btn+button{margin-left:4px}::ng-deep .assessment-list-body ul.assessment li:hover .right .buttons{width:156px}.within-part{display:flex;align-items:center;padding-right:12px}.within-part .value{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;font-size:12px;color:#747576}.within-box{background:#f1f1f1;border-radius:2px;color:#042e7d;font-size:9px;font-weight:600;text-transform:uppercase;padding:0 4px;margin-right:8px;line-height:12px}@-webkit-keyframes animate-right{0%{transform:translateX(100%)}to{transform:translateX(0)}}@keyframes animate-right{0%{transform:translateX(100%)}to{transform:translateX(0)}}.action-list{width:220px}.action-list ul{padding:0;margin:0;-webkit-animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#fff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.action-list ul.action-item{display:block}.action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.action-list ul.action-item li button .file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:calc(100% - 16px)}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;min-width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{background:#fff;width:100%;height:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;-moz-text-align-last:left;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:5px}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .avatar-card i.delete-icon{color:#d93b41;cursor:pointer;font-size:14px}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-left:7px;font-size:10px;cursor:pointer;display:inline-flex}.action-list ul.action-item li .chip-item span{display:block;width:auto;width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.action-list ul.action-item li:first-child{-webkit-animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){-webkit-animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){-webkit-animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){-webkit-animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){-webkit-animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){-webkit-animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){-webkit-animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){-webkit-animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){-webkit-animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){-webkit-animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both;animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}@-webkit-keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}@keyframes action-list-open{0%{transform:translateY(50px)}to{transform:translateY(0)}}"]
219
270
  },] }
220
271
  ];
@@ -229,4 +280,4 @@ AssessmentPickerComponent.propDecorators = {
229
280
  onAssessmentSelect: [{ type: Output }],
230
281
  cancelAssessment: [{ type: Output }]
231
282
  };
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctcHJvZ3JhbS9jcmVhdGUtcHJvZ3JhbS11aS9hc3Nlc3NtZW50LXBpY2tlci9hc3Nlc3NtZW50LXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBUXpELE1BQU0sT0FBTyx5QkFBeUI7SUFpRHBDLFlBQ1UsaUJBQW9DLEVBQ3BDLElBQWlCO1FBRGpCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsU0FBSSxHQUFKLElBQUksQ0FBYTtRQWxEM0IsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ1AsV0FBTSxHQUFHLEtBQUssQ0FBQTtRQUN2QixtQkFBYyxHQUFrQixFQUFFLENBQUM7UUFDbkMsc0JBQWlCLEdBQUc7WUFDbEIsWUFBWSxFQUFDLEVBQUU7WUFDZixPQUFPLEVBQUMsR0FBRztZQUNYLEtBQUssRUFBQyxRQUFRO1lBQ2QsV0FBVyxFQUFFLEVBQUU7WUFDZixlQUFlLEVBQUUsRUFBRTtTQUNwQixDQUFBO1FBRUQsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFFaEIsdUJBQWtCLEdBQU87WUFDdkIsSUFBSSxFQUFFLEVBQUU7WUFDUixTQUFTLEVBQUUsQ0FBQztZQUNaLFlBQVksRUFBRSxDQUFDO1lBQ2YsV0FBVyxFQUFFLENBQUM7WUFDZCxTQUFTLEVBQUUsQ0FBQztZ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LENBQUMsR0FBUSxFQUFFLElBQVMsRUFBRSxFQUFFLENBQUMsQ0FDdkIsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7WUFDN0MsR0FBRyxDQUNKLEVBQ0QsSUFBSSxHQUFHLEVBQUUsQ0FDVjthQUNBLE1BQU0sRUFBRSxDQUNaLENBQUM7SUFDSixDQUFDOzs7WUF0UUosU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLGsxWEFBaUQ7O2FBRWxEOzs7WUFQUSxpQkFBaUI7WUFEakIsV0FBVzs7O3FCQWFqQixLQUFLOzBCQXVCTCxLQUFLLFNBQUMsb0JBQW9CO3FDQWMxQixLQUFLO2lDQUVMLE1BQU07K0JBRU4sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi93b3JrZmxvdy1zZXJ2aWNlcy9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50U2VydmljZSB9IGZyb20gJy4vYXNzZXNzbWVudC5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Fzc2Vzc21lbnQtcGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXNzbWVudC1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Fzc2Vzc21lbnQtcGlja2VyLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEFzc2Vzc21lbnRQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIGFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gIHNlbGVjdGVkRGF0YTogYW55O1xyXG4gIHN1Ykxpc3QgPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc0VkaXQgPSBmYWxzZVxyXG4gIG9wZW5lZENhdGVnb3J5OiBBcnJheTxudW1iZXI+ID0gW107XHJcbiAgYXNzZXNzbWVudFBheWxvYWQgPSB7XHJcbiAgICBzZWFyY2hfdGl0bGU6XCJcIixcclxuICAgIHBhZ2Vfbm86XCIxXCIsXHJcbiAgICBzdGF0ZTpcIkFDVElWRVwiLFxyXG4gICAgc2VhcmNoX3RleHQ6ICcnLFxyXG4gICAgYWxwaGFiZXRfZmlsdGVyOiAnJ1xyXG4gIH1cclxuXHJcbiAgZGF0YVBlclBhZ2UgPSAwO1xyXG5cclxuICBhc3Nlc3NtZW50Q2F0ZWdvcnk6IGFueSA9e1xyXG4gICAgZGF0YTogW10sXHJcbiAgICB0b3RhbFBhZ2U6IDAsXHJcbiAgICB0b3RhbFJlY29yZHM6IDAsXHJcbiAgICBzdGFydF92YWx1ZTogMCxcclxuICAgIGVuZF92YWx1ZTogMCxcclxuICAgIGN1cnJlbnRQYWdlOiAwXHJcbiAgfTtcclxuICBpc0xvYWRlciA9IGZhbHNlXHJcblxyXG5cclxuICBASW5wdXQoJ3NlbGVjdGVkQXNzZXNzbWVudCcpIHNldCBzZXRTZWxlY3RlZCh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgJiYgdmFsdWU/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudHMgPSBbLi4udmFsdWVdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudElkcyA9IHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50cy5tYXAoKGVsZTphbnkpID0+IGVsZT8uaWQpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBpc0RlbGV0ZWQgPSBmYWxzZTtcclxuXHJcbiAgc2VhcmNoQXNzZXNzbWVudHMgPSAnJztcclxuICBwcmV2aWV3UXVlc3Rpb25EYXRhICE6IGFueTtcclxuICBpc1ByZXZpZXcgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWxlY3RlZEFzc2Vzc21lbnREYXRhOiBhbnkgPSBbXTtcclxuXHJcbiAgQE91dHB1dCgpIG9uQXNzZXNzbWVudFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgQE91dHB1dCgpIGNhbmNlbEFzc2Vzc21lbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIHNlbGVjdGVkQXNzZXNzbWVudEFycjogYW55ID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhc3Nlc3NtZW50U2VydmljZTogQXNzZXNzbWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGggOkF1dGhTZXJ2aWNlXHJcbiAgKSB7XHJcblxyXG4gICAgdGhpcy5kYXRhUGVyUGFnZSA9IDMwO1xyXG4gIH1cclxuXHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiY2hhbmdlcyA9PT09PlwiLCBjaGFuZ2VzLCB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudERhdGEsIHRoaXMuYXNzZXNzbWVudENhdGVnb3J5KTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZTtcclxuICAgIHRoaXMuZ2V0QXNzZXNzbWVudENhdGVnb3J5TGlzdCgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuYW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgb25Bc3Nlc3NtZW50U2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBldmVudDtcclxuICB9XHJcblxyXG4gIHByZXZpZXcoZXZ0OmFueSl7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudFNlcnZpY2UuZ2V0QXNzZXNzbWVudFF1ZXN0aW9ucyhldnQ/LmlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6KHJlczphbnkpPT57XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcInJlc1wiLHJlcyk7XHJcbiAgICAgICAgICB0aGlzLmF1dGgucHJldmlld1BhbmVsLm5leHQodHJ1ZSlcclxuICAgICAgICAgIHRoaXMuaXNQcmV2aWV3ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMucHJldmlld1F1ZXN0aW9uRGF0YSA9IHJlcztcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJldmlld0JhY2soKXtcclxuICAgIHRoaXMuaXNQcmV2aWV3ID0gZmFsc2U7XHJcbiAgICB0aGlzLnByZXZpZXdRdWVzdGlvbkRhdGEgPSB7fTtcclxuICAgIHRoaXMuYXV0aC5wcmV2aWV3UGFuZWwubmV4dChmYWxzZSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGluZGV4IDogQWNjZXB0IGluZGV4IG9mIGVsZW1lbnRQb3NpdGlvblxyXG4gICAqXHJcbiAgICovXHJcbiAgc2hvd1N1Ykxpc3QoaW5kZXg6IG51bWJlciwgaWQ6IHN0cmluZykge1xyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLm9wZW5lZENhdGVnb3J5ID09PlwiLCB0aGlzLm9wZW5lZENhdGVnb3J5KVxyXG4gICAgaWYodGhpcy5vcGVuZWRDYXRlZ29yeS5pbmNsdWRlcyhpbmRleCkpIHtcclxuICAgICAgdGhpcy5vcGVuZWRDYXRlZ29yeSA9IHRoaXMub3BlbmVkQ2F0ZWdvcnkuZmlsdGVyKGVsZSA9PiBlbGUgIT09IGluZGV4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3BlbmVkQ2F0ZWdvcnkucHVzaChpbmRleCk7XHJcbiAgICAgIHRoaXMuZ2V0QXNzZXNzbWVudExpc3QoaW5kZXgsIGlkKVxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLm9wZW5lZENhdGVnb3J5ID09PlwiLCB0aGlzLm9wZW5lZENhdGVnb3J5KVxyXG4gICAgcmV0dXJuICB0aGlzLm9wZW5lZENhdGVnb3J5XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiBQYWdpbmF0aW9uXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZXZlbnQgOiBwYWdlIG51bWJlciB0aGF0IGhhcyBiZWVuIHNlbGVjdGVkXHJcbiAgICovXHJcbiAgb25QYWdlU2VsZWN0aW9uKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMub3BlbmVkQ2F0ZWdvcnkgPSBbXTtcclxuICAgIGNvbnNvbGUubG9nKFwiMTExXCIpXHJcbiAgICB0aGlzLmFzc2Vzc21lbnRQYXlsb2FkLnBhZ2Vfbm8gPSBldmVudC50b1N0cmluZygpO1xyXG4gICAgdGhpcy5nZXRBc3Nlc3NtZW50Q2F0ZWdvcnlMaXN0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiBTZWFyY2hcclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBzZWFyY2ggOiBzZWFyY2ggdGV4dFxyXG4gICAqL1xyXG4gIG9uQXNzZXNzbWVudFNlYXJjaChzZWFyY2g6IHN0cmluZykge1xyXG4gICAgdGhpcy5vcGVuZWRDYXRlZ29yeSA9IFtdO1xyXG4gICAgY29uc29sZS5sb2coXCIyMjJcIilcclxuICAgIHRoaXMuYXNzZXNzbWVudFBheWxvYWQucGFnZV9ubyA9IFwiMVwiO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50UGF5bG9hZC5zZWFyY2hfdGl0bGUgPSBzZWFyY2g7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRQYXlsb2FkLnNlYXJjaF90ZXh0ID0gc2VhcmNoO1xyXG4gICAgdGhpcy5nZXRBc3Nlc3NtZW50Q2F0ZWdvcnlMaXN0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiBGaWx0ZXIgYnkgYWxwaGFiZXRcclxuLyoqXHJcbiAqXHJcbiAqIEBwYXJhbSBldmVudCA6IEFzc2Vzc21lbnQgY2F0ZWdvcnkgZmlsdGVyIG9mIEFscGhhYmV0XHJcbiAqL1xyXG4gIG9uQWxwaGFiZXRTZWxlY3RlZChldmVudDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9wZW5lZENhdGVnb3J5ID0gW107XHJcbiAgICBjb25zb2xlLmxvZyhcIjMzM1wiKVxyXG4gICAgdGhpcy5hc3Nlc3NtZW50UGF5bG9hZC5wYWdlX25vID0gXCIxXCI7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRQYXlsb2FkLmFscGhhYmV0X2ZpbHRlciA9IGV2ZW50O1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50UGF5bG9hZC5zZWFyY2hfdGV4dCA9ICcnO1xyXG4gICAgdGhpcy5nZXRBc3Nlc3NtZW50Q2F0ZWdvcnlMaXN0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiBDYWxsIEFQSSBtZXRob2RcclxuICBnZXRBc3Nlc3NtZW50Q2F0ZWdvcnlMaXN0KCkge1xyXG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRTZXJ2aWNlLmdldEFzc2Vzc21lbnRDYXRlZ29yeSh0aGlzLmFzc2Vzc21lbnRQYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudENhdGVnb3J5ID0gcmVzO1xyXG4gICAgICBpZih0aGlzLnNlbGVjdGVkQXNzZXNzbWVudERhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50RGF0YS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG5cclxuXHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHJlcy5kYXRhLmZpbmRJbmRleCgoYXNzZXNzbWVudDogYW55KSA9PiBhc3Nlc3NtZW50LmlkID09PSBlbGUuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgICAgdGhpcy5zaG93U3ViTGlzdChpbmRleCwgZWxlLmNhdGVnb3J5X2lkKTtcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8vIFRPRE86IENhbGwgU3ViIGRhdGEgQVBJIG1ldGhvZFxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpZCA6IEFzc2Vzc21lbnQgY2F0ZWdvcnkgaWRcclxuICAgKi9cclxuICBnZXRBc3Nlc3NtZW50TGlzdChpbmRleDogbnVtYmVyLCBpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBzZWFyY2hfdGl0bGU6XCJcIixcclxuICAgIH1cclxuICAgIHRoaXMuYXNzZXNzbWVudFNlcnZpY2UuZ2V0QXNzZXNzbWVudExpc3QocGF5bG9hZCwgaWQpLnN1YnNjcmliZSgocmVzOiBBcnJheTxhbnk+KSA9PiB7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudENhdGVnb3J5LmRhdGFbaW5kZXhdLmFzc2Vzc21lbnREYXRhID0gWy4uLm5ldyBTZXQocmVzKV07XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRBc3Nlc3NtZW50czphbnkgPSBbXTtcclxuICBzZWxlY3RlZEFzc2Vzc21lbnRJZHM6YW55ID0gW107XHJcblxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogIyMjIyBEZXNjcmlwdGlvblxyXG4gICAqIFNlbGVjdHMgaXRlbSBvciBkZXNlbGVjdCBhIGl0bWVcclxuICAgKiBAcGFyYW0gZXZ0XHJcbiAgICogQHBhcmFtIHBheWxvYWRcclxuICAgKi9cclxuICBzZWxlY3RBc3Nlc3NtZW50KGV2dDogYW55LCBwYXlsb2FkOiBhbnksIGNhdGVnb3J5OiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwicGF5bG9hZCA9PT5cIiwgcGF5bG9hZClcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLmNhdGVnb3J5X2lkID09PSBjYXRlZ29yeS5pZCk7XHJcbiAgICBpZihpbmRleCA+IC0xKSB7XHJcbiAgICAgIGlmKGV2dD8udGFyZ2V0Py5jaGVja2VkKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnJbaW5kZXhdLmFzc2Vzc21lbnRJZHMucHVzaChwYXlsb2FkKVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50QXJyW2luZGV4XS5hc3Nlc3NtZW50SWRzID0gdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnJbaW5kZXhdLmFzc2Vzc21lbnRJZHMuZmlsdGVyKChhc3Nlc3NtZW50OiBhbnkpID0+IGFzc2Vzc21lbnQuaWQgIT09IHBheWxvYWQuaWQpO1xyXG4gICAgICAgIGlmKHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50QXJyW2luZGV4XS5hc3Nlc3NtZW50SWRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50QXJyLnB1c2goe1xyXG4gICAgICAgIGNhdGVnb3J5X2lkOiBjYXRlZ29yeS5pZCxcclxuICAgICAgICBhc3Nlc3NtZW50SWRzOiBbcGF5bG9hZF1cclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIpKVxyXG4gICAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnREYXRhICA9IHNlbGVjdGVkRGF0YS5tYXAoKGVsZTogYW55KSA9PiB7XHJcbiAgICAgIGVsZS5hc3Nlc3NtZW50SWRzID0gZWxlLmFzc2Vzc21lbnRJZHMubWFwKChhc3Nlc3NtZW50OiBhbnkpID0+IGFzc2Vzc21lbnQuaWQgKVxyXG4gICAgICByZXR1cm4gZWxlO1xyXG4gICAgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhcIiB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFyciB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFyclwiLCAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnREYXRhLCBzZWxlY3RlZERhdGEgKVxyXG4gICAgLy8gZXZ0Py50YXJnZXQ/LmNoZWNrZWQgPT09IHRydWUgPyB0aGlzLm1hbmlwdWxhdGVTZWxlY3RlZEFzc2Vzc21lbnQoJ0FERCcsIHBheWxvYWQpIDogdGhpcy5tYW5pcHVsYXRlU2VsZWN0ZWRBc3Nlc3NtZW50KCdERUxFVEUnLCBwYXlsb2FkKVxyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgLy8gVE9ETzogRGlzcGxheSBzZWxlY3RlZCBkYXRhIGluIGJvdHRvbSBmbG9hdGluZyBiYXIgd2l0aCBuZXh0IGVuYWJsZWQgYnV0dG9uIGhhdmluZ1xyXG5cclxuICAvLyBUT0RPOiBTZW5kIGRhdGEgaW4gcGF5bG9hZCBvZiBjcmVhdGUgUmVzcG9uc2liaWxpdHkgZm9ybVxyXG5cclxuICBzYXZlKCkge1xyXG4gICAgdGhpcy5vbkFzc2Vzc21lbnRTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFycilcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5jYW5jZWxBc3Nlc3NtZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiAqICMjIyMgRGVzY3JpcHRpb25cclxuICpcclxuICogUmV0dXJucyB0aGUgdW5pcXVlIGFycmF5IG9mIG9iamVjdCBiYXNlZCBvbiB1bmlxdWUga2V5XHJcbiAqIEBwYXJhbSBhcnJheVxyXG4gKiBAcGFyYW0ga2V5XHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG4gICAgdW5pcXVlQnlQcm9wKGFycmF5OiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKFxyXG4gICAgICAgIGFycmF5XHJcbiAgICAgICAgICAucmVkdWNlKFxyXG4gICAgICAgICAgICAoYWNjOiBhbnksIGl0ZW06IGFueSkgPT4gKFxyXG4gICAgICAgICAgICAgIGl0ZW0gJiYgaXRlbVtrZXldICYmIGFjYy5zZXQoaXRlbVtrZXldLCBpdGVtKSxcclxuICAgICAgICAgICAgICBhY2NcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgbmV3IE1hcCgpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAudmFsdWVzKClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdngtd29ya2Zsb3ctZW5naW5lL3NyYy9saWIvd29ya2Zsb3ctcHJvZ3JhbS9jcmVhdGUtcHJvZ3JhbS11aS9hc3Nlc3NtZW50LXBpY2tlci9hc3Nlc3NtZW50LXBpY2tlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNuQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFRekQsTUFBTSxPQUFPLHlCQUF5QjtJQXFEcEMsWUFDVSxpQkFBb0MsRUFDcEMsSUFBaUI7UUFEakIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxTQUFJLEdBQUosSUFBSSxDQUFhO1FBdEQzQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWxCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDUCxXQUFNLEdBQUcsS0FBSyxDQUFBO1FBQ3ZCLG1CQUFjLEdBQWtCLEVBQUUsQ0FBQztRQUNuQyxzQkFBaUIsR0FBRztZQUNsQixZQUFZLEVBQUMsRUFBRTtZQUNmLE9BQU8sRUFBQyxHQUFHO1lBQ1gsS0FBSyxFQUFDLFFBQVE7WUFDZCxXQUFXLEVBQUUsRUFBRTtZQUNmLGVBQWUsRUFBRSxFQUFFO1NBQ3BCLENBQUE7UUFFRCxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUVoQix1QkFBa0IsR0FBTztZQUN2QixJQUFJLEVBQUUsRUFBRTtZQUNSLFNBQVMsRUFBRSxDQUFDO1lBQ1osWUFBWSxFQUFFLENBQUM7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TUFBTTsrQkFFTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3dvcmtmbG93LXNlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRTZXJ2aWNlIH0gZnJvbSAnLi9hc3Nlc3NtZW50LnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXNzZXNzbWVudC1waWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3Nlc3NtZW50LXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXNzZXNzbWVudC1waWNrZXIuY29tcG9uZW50Lmxlc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXNzZXNzbWVudFBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgYW5pbWF0aW9uID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWREYXRhOiBhbnk7XHJcbiAgc3ViTGlzdCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGlzRWRpdCA9IGZhbHNlXHJcbiAgb3BlbmVkQ2F0ZWdvcnk6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuICBhc3Nlc3NtZW50UGF5bG9hZCA9IHtcclxuICAgIHNlYXJjaF90aXRsZTpcIlwiLFxyXG4gICAgcGFnZV9ubzpcIjFcIixcclxuICAgIHN0YXRlOlwiQUNUSVZFXCIsXHJcbiAgICBzZWFyY2hfdGV4dDogJycsXHJcbiAgICBhbHBoYWJldF9maWx0ZXI6ICcnXHJcbiAgfVxyXG5cclxuICBkYXRhUGVyUGFnZSA9IDA7XHJcblxyXG4gIGFzc2Vzc21lbnRDYXRlZ29yeTogYW55ID17XHJcbiAgICBkYXRhOiBbXSxcclxuICAgIHRvdGFsUGFnZTogMCxcclxuICAgIHRvdGFsUmVjb3JkczogMCxcclxuICAgIHN0YXJ0X3ZhbHVlOiAwLFxyXG4gICAgZW5kX3ZhbHVlOiAwLFxyXG4gICAgY3VycmVudFBhZ2U6IDBcclxuICB9O1xyXG4gIGlzTG9hZGVyID0gZmFsc2VcclxuXHJcblxyXG4gIEBJbnB1dCgnc2VsZWN0ZWRBc3Nlc3NtZW50Jykgc2V0IHNldFNlbGVjdGVkKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSAmJiB2YWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIgPSBbLi4udmFsdWVdO1xyXG4gICAgIC8vdGhpcy5zZXRDYXRlZ29yeUFuZEFzc2Vzc21lbnQoKTtcclxuICAgICB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFyci5mb3JFYWNoKChlbGU6YW55LGluZGV4OmFueSkgPT4ge1xyXG4gICAgICB0aGlzLm9wZW5lZENhdGVnb3J5LnB1c2goZWxlPy5jYXRlZ29yeV9pZCk7XHJcbiAgICAvLyAgIHRoaXMuc2hvd1N1Ykxpc3QoaW5kZXgsZWxlPy5jYXRlZ29yeV9pZCk7XHJcbiAgICAgfSlcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgaXNEZWxldGVkID0gZmFsc2U7XHJcblxyXG4gIHNlYXJjaEFzc2Vzc21lbnRzID0gJyc7XHJcbiAgcHJldmlld1F1ZXN0aW9uRGF0YSAhOiBhbnk7XHJcbiAgaXNQcmV2aWV3ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRBc3Nlc3NtZW50RGF0YTogYW55ID0gW107XHJcblxyXG4gIEBPdXRwdXQoKSBvbkFzc2Vzc21lbnRTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIEBPdXRwdXQoKSBjYW5jZWxBc3Nlc3NtZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBzZWxlY3RlZEFzc2Vzc21lbnRBcnI6IGFueSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXNzZXNzbWVudFNlcnZpY2U6IEFzc2Vzc21lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoIDpBdXRoU2VydmljZVxyXG4gICkge1xyXG5cclxuICAgIHRoaXMuZGF0YVBlclBhZ2UgPSAzMDtcclxuICB9XHJcblxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcImNoYW5nZXMgPT09PT5cIiwgY2hhbmdlcywgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnREYXRhLCB0aGlzLmFzc2Vzc21lbnRDYXRlZ29yeSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLmdldEFzc2Vzc21lbnRDYXRlZ29yeUxpc3QoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmFuaW1hdGlvbiA9IGZhbHNlO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIG9uQXNzZXNzbWVudFNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICBwcmV2aWV3KGV2dDphbnkpe1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRTZXJ2aWNlLmdldEFzc2Vzc21lbnRRdWVzdGlvbnMoZXZ0Py5pZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OihyZXM6YW55KT0+e1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXNcIixyZXMpO1xyXG4gICAgICAgICAgdGhpcy5hdXRoLnByZXZpZXdQYW5lbC5uZXh0KHRydWUpXHJcbiAgICAgICAgICB0aGlzLmlzUHJldmlldyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnByZXZpZXdRdWVzdGlvbkRhdGEgPSByZXM7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIHByZXZpZXdCYWNrKCl7XHJcbiAgICB0aGlzLmlzUHJldmlldyA9IGZhbHNlO1xyXG4gICAgdGhpcy5wcmV2aWV3UXVlc3Rpb25EYXRhID0ge307XHJcbiAgICB0aGlzLmF1dGgucHJldmlld1BhbmVsLm5leHQoZmFsc2UpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBpbmRleCA6IEFjY2VwdCBpbmRleCBvZiBlbGVtZW50UG9zaXRpb25cclxuICAgKlxyXG4gICAqL1xyXG4gIHNob3dTdWJMaXN0KGluZGV4OiBudW1iZXIsIGlkOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5vcGVuZWRDYXRlZ29yeWRhc2FzZnNhID09PlwiLCB0aGlzLm9wZW5lZENhdGVnb3J5LGluZGV4LGlkKVxyXG4gICAgaWYodGhpcy5vcGVuZWRDYXRlZ29yeS5pbmNsdWRlcyhpZCkpIHtcclxuICAgICAgdGhpcy5vcGVuZWRDYXRlZ29yeSA9IHRoaXMub3BlbmVkQ2F0ZWdvcnkuZmlsdGVyKGVsZSA9PiBlbGUgIT09IGlkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub3BlbmVkQ2F0ZWdvcnkucHVzaChpZCk7XHJcbiAgICAgIHRoaXMuZ2V0QXNzZXNzbWVudExpc3QoaWQpXHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhcInRoaXMub3BlbmVkQ2F0ZWdvcnkgPT0+XCIsIHRoaXMub3BlbmVkQ2F0ZWdvcnkpXHJcbiAgICByZXR1cm4gIHRoaXMub3BlbmVkQ2F0ZWdvcnlcclxuICB9XHJcblxyXG5cclxuICBleHBhbmRDYXRlZ29yeShjYXRlZ29yeUlkOmFueSl7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuYXNzZXNzbWVudENhdGVnb3J5Py5kYXRhPy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuaWQgPT09IGNhdGVnb3J5SWQpO1xyXG4gICAgIGlmKHRoaXMub3BlbmVkQ2F0ZWdvcnkuaW5jbHVkZXMoY2F0ZWdvcnlJZCkgJiYgIHRoaXMuYXNzZXNzbWVudENhdGVnb3J5LmRhdGFbaW5kZXhdLmFzc2Vzc21lbnREYXRhICl7XHJcblxyXG4gICAgICB0aGlzLm9wZW5lZENhdGVnb3J5ID0gdGhpcy5vcGVuZWRDYXRlZ29yeS5maWx0ZXIoZWxlID0+IGVsZSAhPT0gY2F0ZWdvcnlJZCk7XHJcbiAgICAgfWVsc2V7XHJcblxyXG4gICAgICB0aGlzLm9wZW5lZENhdGVnb3J5LnB1c2goY2F0ZWdvcnlJZCk7XHJcbiAgICAgIHRoaXMuZ2V0QXNzZXNzbWVudExpc3QoY2F0ZWdvcnlJZClcclxuICAgICB9XHJcbiAgfVxyXG4gIC8vIFRPRE86IFBhZ2luYXRpb25cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBldmVudCA6IHBhZ2UgbnVtYmVyIHRoYXQgaGFzIGJlZW4gc2VsZWN0ZWRcclxuICAgKi9cclxuICBvblBhZ2VTZWxlY3Rpb24oZXZlbnQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5vcGVuZWRDYXRlZ29yeSA9IFtdO1xyXG4gICAgY29uc29sZS5sb2coXCIxMTFcIilcclxuICAgIHRoaXMuYXNzZXNzbWVudFBheWxvYWQucGFnZV9ubyA9IGV2ZW50LnRvU3RyaW5nKCk7XHJcbiAgICB0aGlzLmdldEFzc2Vzc21lbnRDYXRlZ29yeUxpc3QoKTtcclxuICB9XHJcblxyXG4gIC8vIFRPRE86IFNlYXJjaFxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNlYXJjaCA6IHNlYXJjaCB0ZXh0XHJcbiAgICovXHJcbiAgb25Bc3Nlc3NtZW50U2VhcmNoKHNlYXJjaDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm9wZW5lZENhdGVnb3J5ID0gW107XHJcbiAgICBjb25zb2xlLmxvZyhcIjIyMlwiKVxyXG4gICAgdGhpcy5hc3Nlc3NtZW50UGF5bG9hZC5wYWdlX25vID0gXCIxXCI7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRQYXlsb2FkLnNlYXJjaF90aXRsZSA9IHNlYXJjaDtcclxuICAgIHRoaXMuYXNzZXNzbWVudFBheWxvYWQuc2VhcmNoX3RleHQgPSBzZWFyY2g7XHJcbiAgICB0aGlzLmdldEFzc2Vzc21lbnRDYXRlZ29yeUxpc3QoKTtcclxuICB9XHJcblxyXG4gIC8vIFRPRE86IEZpbHRlciBieSBhbHBoYWJldFxyXG4vKipcclxuICpcclxuICogQHBhcmFtIGV2ZW50IDogQXNzZXNzbWVudCBjYXRlZ29yeSBmaWx0ZXIgb2YgQWxwaGFiZXRcclxuICovXHJcbiAgb25BbHBoYWJldFNlbGVjdGVkKGV2ZW50OiBzdHJpbmcpIHtcclxuICAgIHRoaXMub3BlbmVkQ2F0ZWdvcnkgPSBbXTtcclxuICAgIGNvbnNvbGUubG9nKFwiMzMzXCIpXHJcbiAgICB0aGlzLmFzc2Vzc21lbnRQYXlsb2FkLnBhZ2Vfbm8gPSBcIjFcIjtcclxuICAgIHRoaXMuYXNzZXNzbWVudFBheWxvYWQuYWxwaGFiZXRfZmlsdGVyID0gZXZlbnQ7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRQYXlsb2FkLnNlYXJjaF90ZXh0ID0gJyc7XHJcbiAgICB0aGlzLmdldEFzc2Vzc21lbnRDYXRlZ29yeUxpc3QoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8gVE9ETzogQ2FsbCBBUEkgbWV0aG9kXHJcbiAgZ2V0QXNzZXNzbWVudENhdGVnb3J5TGlzdCgpIHtcclxuICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50U2VydmljZS5nZXRBc3Nlc3NtZW50Q2F0ZWdvcnkodGhpcy5hc3Nlc3NtZW50UGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRDYXRlZ29yeSA9IHJlcztcclxuICAgICAgXHJcbiAgICAgIGlmKHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50QXJyPy5sZW5ndGgpIHtcclxuICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50QXJyID0gIFsuLi4gbmV3IFNldCh0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFycildXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIuZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuXHJcblxyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSByZXMuZGF0YS5maW5kSW5kZXgoKGFzc2Vzc21lbnQ6IGFueSkgPT4gYXNzZXNzbWVudC5pZCA9PT0gZWxlLmNhdGVnb3J5X2lkKTtcclxuICAgICAgICAgIHRoaXMuZXhwYW5kQ2F0ZWdvcnkoZWxlLmNhdGVnb3J5X2lkKTtcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFyci5mb3JFYWNoKChlbGU6YW55LGluZGV4OmFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgdGhpcy5vcGVuZWRDYXRlZ29yeS5wdXNoKGVsZT8uY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIC8vICAgdGhpcy5zaG93U3ViTGlzdChpbmRleCxlbGU/LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICAvLyB9KVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8gVE9ETzogQ2FsbCBTdWIgZGF0YSBBUEkgbWV0aG9kXHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIDogQXNzZXNzbWVudCBjYXRlZ29yeSBpZFxyXG4gICAqL1xyXG4gIGdldEFzc2Vzc21lbnRMaXN0KGlkOiBzdHJpbmcpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiYXNzc1wiLGlkKVxyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgc2VhcmNoX3RpdGxlOlwiXCIsXHJcbiAgICB9XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRTZXJ2aWNlLmdldEFzc2Vzc21lbnRMaXN0KHBheWxvYWQsIGlkKS5zdWJzY3JpYmUoKHJlczogQXJyYXk8YW55PikgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuYXNzZXNzbWVudENhdGVnb3J5Py5kYXRhPy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuaWQgPT09IGlkKTtcclxuICAgICAgY29uc29sZS5sb2coXCJpbmRleGVyXCIsaW5kZXgsdGhpcy5hc3Nlc3NtZW50Q2F0ZWdvcnkpXHJcbiAgICAgIGlmKGluZGV4ID4gLTEgKXtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRDYXRlZ29yeS5kYXRhW2luZGV4XS5hc3Nlc3NtZW50RGF0YSA9IFsuLi5uZXcgU2V0KHJlcyldO1xyXG4gICAgICB9XHJcbiAgICAgXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiYXNzXCIsKVxyXG4gICAgICBpZih0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFycj8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRDYXRlZ29yeUFuZEFzc2Vzc21lbnQoKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50QXJyLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5jYXRlZ29yeV9pZCA9PT0gaWQpO1xyXG4gICAgICAgIC8vIGlmKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIC8vICAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnJbaW5kZXhdLmFzc2Vzc21lbnRJZHMgID0gdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnJbaW5kZXhdLmFzc2Vzc21lbnRJZHMubWFwKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vICAgICBlbGUgPSByZXMuZmluZCgoZGF0YTogYW55KSA9PiBkYXRhLmlkID09PSBlbGUpO1xyXG4gICAgICAgIC8vICAgICByZXR1cm4gZWxlO1xyXG4gICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkQXNzZXNzbWVudENhdGVnb3JpZXNJZHM6YW55ID0gW107XHJcbiAgc2VsZWN0ZWRBc3Nlc3NtZW50SWRzOmFueSA9IFtdO1xyXG4gIHNlbGVjdGVkQXNzZXNzbWVudDphbnkgPSBbXTtcclxuXHJcblxyXG5cclxuICAvKipcclxuICAgKiAjIyMjIERlc2NyaXB0aW9uXHJcbiAgICogU2VsZWN0cyBpdGVtIG9yIGRlc2VsZWN0IGEgaXRtZVxyXG4gICAqIEBwYXJhbSBldnRcclxuICAgKiBAcGFyYW0gcGF5bG9hZFxyXG4gICAqL1xyXG4gIHNlbGVjdEFzc2Vzc21lbnQoZXZ0OiBhbnksIHBheWxvYWQ6IGFueSwgY2F0ZWdvcnk6IGFueSkge1xyXG4gICBpZihldnQ/LnRhcmdldD8uY2hlY2tlZCl7XHJcbiAgICAgY29uc29sZS5sb2coXCJzZWxlY3RlZFwiLHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50QXJyKVxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFyci5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT09IGNhdGVnb3J5LmlkKTtcclxuICAgIGlmKGluZGV4ID4gLTEpIHtcclxuICAgICBjb25zdCAgY3VycmVudENhdGVnb3J5QXNzZXNzbWVudCA9ICB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFycltpbmRleF0uYXNzZXNzbWVudElkcztcclxuICAgICBjdXJyZW50Q2F0ZWdvcnlBc3Nlc3NtZW50LnB1c2gocGF5bG9hZCk7XHJcbiAgICAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnJbaW5kZXhdLmFzc2Vzc21lbnRJZHMgPSB0aGlzLnVuaXF1ZUJ5UHJvcChjdXJyZW50Q2F0ZWdvcnlBc3Nlc3NtZW50LCdpZCcpXHJcbiAgICAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIgPSBjbG9uZURlZXAodGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIpIFxyXG4gICAgIHRoaXMuc2V0Q2F0ZWdvcnlBbmRBc3Nlc3NtZW50KCk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIucHVzaCh7XHJcbiAgICAgICAgY2F0ZWdvcnlfaWQ6IGNhdGVnb3J5LmlkLFxyXG4gICAgICAgIGFzc2Vzc21lbnRJZHM6IFtwYXlsb2FkXVxyXG4gICAgICB9KVxyXG4gICAgIFxyXG4gICAgICB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFyciA9IGNsb25lRGVlcCh0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFycikgXHJcbiAgICAgIHRoaXMuc2V0Q2F0ZWdvcnlBbmRBc3Nlc3NtZW50KCk7XHJcbiAgICB9XHJcbiAgIH1lbHNle1xyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFyci5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuY2F0ZWdvcnlfaWQgPT09IGNhdGVnb3J5LmlkKTtcclxuICAgIGlmKGluZGV4ID4gLTEpe1xyXG4gICAgICB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFycltpbmRleF0uYXNzZXNzbWVudElkcyA9IHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50QXJyW2luZGV4XS5hc3Nlc3NtZW50SWRzLmZpbHRlcigoYXNzZXNzbWVudDogYW55KSA9PiBhc3Nlc3NtZW50LmlkICE9PSBwYXlsb2FkLmlkKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIgPSBjbG9uZURlZXAodGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIpIFxyXG4gICAgICB0aGlzLnNldENhdGVnb3J5QW5kQXNzZXNzbWVudCgpO1xyXG4gICAgICBpZiggdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnJbaW5kZXhdLmFzc2Vzc21lbnRJZHM/Lmxlbmd0aCA9PT0gMCl7XHJcbiAgICAgICB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFyci5zcGxpY2UoaW5kZXgpO1xyXG4gICAgICAgdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIgPSBjbG9uZURlZXAodGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIpIFxyXG4gICAgICAgdGhpcy5zZXRDYXRlZ29yeUFuZEFzc2Vzc21lbnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICB9XHJcblxyXG59XHJcblxyXG5zZXRDYXRlZ29yeUFuZEFzc2Vzc21lbnQoKXtcclxuICB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudENhdGVnb3JpZXNJZHMgPSB0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFyci5maWx0ZXIoKGNhdDphbnkpID0+IGNhdD8uYXNzZXNzbWVudElkcz8ubGVuZ3RoID4gMCk/Lm1hcCgoZWxlOmFueSkgPT4gZWxlPy5jYXRlZ29yeV9pZCkuZmxhdCgpO1xyXG4gIHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50SWRzID0gdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIubWFwKChjYXQ6YW55KSA9PiBjYXQ/LmFzc2Vzc21lbnRJZHMubWFwKChlbGU6YW55KSA9PiBlbGU/LmlkKSkuZmxhdCgpO1xyXG4gIHRoaXMuc2VsZWN0ZWRBc3Nlc3NtZW50ID0gdGhpcy5zZWxlY3RlZEFzc2Vzc21lbnRBcnIubWFwKChjYXQ6YW55KSA9PiBjYXQ/LmFzc2Vzc21lbnRJZHMubWFwKChlbGU6YW55KSA9PiBlbGUpKS5mbGF0KCk7XHJcbn1cclxuXHJcblxyXG5cclxuXHJcbiAgLy8gVE9ETzogRGlzcGxheSBzZWxlY3RlZCBkYXRhIGluIGJvdHRvbSBmbG9hdGluZyBiYXIgd2l0aCBuZXh0IGVuYWJsZWQgYnV0dG9uIGhhdmluZ1xyXG5cclxuICAvLyBUT0RPOiBTZW5kIGRhdGEgaW4gcGF5bG9hZCBvZiBjcmVhdGUgUmVzcG9uc2liaWxpdHkgZm9ybVxyXG5cclxuICBzYXZlKCkge1xyXG4gICAgdGhpcy5vbkFzc2Vzc21lbnRTZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkQXNzZXNzbWVudEFycilcclxuICB9XHJcblxyXG4gIGNsb3NlKCkge1xyXG4gICAgdGhpcy5jYW5jZWxBc3Nlc3NtZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiAqICMjIyMgRGVzY3JpcHRpb25cclxuICpcclxuICogUmV0dXJucyB0aGUgdW5pcXVlIGFycmF5IG9mIG9iamVjdCBiYXNlZCBvbiB1bmlxdWUga2V5XHJcbiAqIEBwYXJhbSBhcnJheVxyXG4gKiBAcGFyYW0ga2V5XHJcbiAqIEByZXR1cm5zXHJcbiAqL1xyXG4gICAgdW5pcXVlQnlQcm9wKGFycmF5OiBhbnksIGtleTogc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKFxyXG4gICAgICAgIGFycmF5XHJcbiAgICAgICAgICAucmVkdWNlKFxyXG4gICAgICAgICAgICAoYWNjOiBhbnksIGl0ZW06IGFueSkgPT4gKFxyXG4gICAgICAgICAgICAgIGl0ZW0gJiYgaXRlbVtrZXldICYmIGFjYy5zZXQoaXRlbVtrZXldLCBpdGVtKSxcclxuICAgICAgICAgICAgICBhY2NcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgbmV3IE1hcCgpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAudmFsdWVzKClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19