ngx-techlify-checksheet 18.0.0 → 18.1.0

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 (44) hide show
  1. package/esm2022/lib/checksheet/checksheet-form/checksheet-form.component.mjs +88 -116
  2. package/esm2022/lib/checksheet/checksheet-form-button/checksheet-form-button.component.mjs +10 -12
  3. package/esm2022/lib/checksheet/checksheet-format/checksheet-format-copy-button/checksheet-format-copy-button.component.mjs +56 -0
  4. package/esm2022/lib/checksheet/checksheet-format/checksheet-format-delete-button/checksheet-format-delete-button.component.mjs +54 -0
  5. package/esm2022/lib/checksheet/checksheet-format/checksheet-format-publish-button/checksheet-format-publish-button.component.mjs +68 -0
  6. package/esm2022/lib/checksheet/checksheet-format/checksheet-format-unpublish-button/checksheet-format-unpublish-button.component.mjs +57 -0
  7. package/esm2022/lib/checksheet/checksheet-format/checksheet-format-view/checksheet-format-view.component.mjs +140 -0
  8. package/esm2022/lib/checksheet/checksheet-format-form/checksheet-format-form.component.mjs +136 -0
  9. package/esm2022/lib/checksheet/checksheet-format-list/checksheet-format-list.component.mjs +9 -67
  10. package/esm2022/lib/checksheet/checksheet-list/checksheet-list.component.mjs +28 -11
  11. package/esm2022/lib/checksheet/checksheet-list-widget/checksheet-list-widget.component.mjs +59 -0
  12. package/esm2022/lib/checksheet/checksheet-node-view/checksheet-node-view.component.mjs +24 -24
  13. package/esm2022/lib/checksheet/checksheet-question/checksheet-question.component.mjs +12 -13
  14. package/esm2022/lib/checksheet/checksheet-question-list/checksheet-question-list.component.mjs +7 -9
  15. package/esm2022/lib/checksheet/checksheet-report/checksheet-report.component.mjs +3 -3
  16. package/esm2022/lib/checksheet/checksheet-routing.module.mjs +6 -6
  17. package/esm2022/lib/checksheet/checksheet-submission-file/checksheet-submission-files/checksheet-submission-files.component.mjs +83 -17
  18. package/esm2022/lib/checksheet/checksheet-submission-list/checksheet-submission-list.component.mjs +5 -5
  19. package/esm2022/lib/checksheet/checksheet-submission-view/checksheet-submission-view.component.mjs +4 -4
  20. package/esm2022/lib/checksheet/checksheet.module.mjs +42 -20
  21. package/esm2022/public-api.mjs +2 -2
  22. package/fesm2022/ngx-techlify-checksheet.mjs +570 -359
  23. package/fesm2022/ngx-techlify-checksheet.mjs.map +1 -1
  24. package/lib/checksheet/checksheet-form/checksheet-form.component.d.ts +15 -34
  25. package/lib/checksheet/checksheet-form-button/checksheet-form-button.component.d.ts +3 -4
  26. package/lib/checksheet/checksheet-format/checksheet-format-copy-button/checksheet-format-copy-button.component.d.ts +16 -0
  27. package/lib/checksheet/checksheet-format/checksheet-format-delete-button/checksheet-format-delete-button.component.d.ts +16 -0
  28. package/lib/checksheet/checksheet-format/checksheet-format-publish-button/checksheet-format-publish-button.component.d.ts +18 -0
  29. package/lib/checksheet/checksheet-format/checksheet-format-unpublish-button/checksheet-format-unpublish-button.component.d.ts +16 -0
  30. package/lib/checksheet/{checksheet-view/checksheet-view.component.d.ts → checksheet-format/checksheet-format-view/checksheet-format-view.component.d.ts} +4 -4
  31. package/lib/checksheet/checksheet-format-form/checksheet-format-form.component.d.ts +45 -0
  32. package/lib/checksheet/checksheet-format-list/checksheet-format-list.component.d.ts +0 -3
  33. package/lib/checksheet/checksheet-list/checksheet-list.component.d.ts +5 -3
  34. package/lib/checksheet/checksheet-list-widget/checksheet-list-widget.component.d.ts +17 -0
  35. package/lib/checksheet/checksheet-node-view/checksheet-node-view.component.d.ts +2 -4
  36. package/lib/checksheet/checksheet-submission-file/checksheet-submission-files/checksheet-submission-files.component.d.ts +14 -4
  37. package/lib/checksheet/checksheet.module.d.ts +12 -7
  38. package/package.json +1 -1
  39. package/public-api.d.ts +1 -1
  40. package/esm2022/lib/checksheet/checksheet-submission-form/checksheet-submission-form.component.mjs +0 -131
  41. package/esm2022/lib/checksheet/checksheet-submission-form-button/checksheet-submission-form-button.component.mjs +0 -58
  42. package/esm2022/lib/checksheet/checksheet-view/checksheet-view.component.mjs +0 -140
  43. package/lib/checksheet/checksheet-submission-form/checksheet-submission-form.component.d.ts +0 -27
  44. package/lib/checksheet/checksheet-submission-form-button/checksheet-submission-form-button.component.d.ts +0 -29
@@ -1,28 +1,39 @@
1
1
  import { Component, Input } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { MaterialModule, TechlifyListingControllerInterface } from 'ngx-techlify-core';
3
+ import { FileDropperModule, MaterialModule, ReadMoreModule, TechlifyListingControllerInterface, WrapPipe } from 'ngx-techlify-core';
4
4
  import { ReactiveFormsModule } from '@angular/forms';
5
5
  import { MatProgressBarModule } from '@angular/material/progress-bar';
6
6
  import { ChecksheetSubmissionFileDeleteButtonComponent } from "../checksheet-submission-file-delete-button/checksheet-submission-file-delete-button.component";
7
+ import { forkJoin, map } from 'rxjs';
7
8
  import * as i0 from "@angular/core";
8
9
  import * as i1 from "@angular/forms";
9
10
  import * as i2 from "../../checksheet-submission-file.service";
10
- import * as i3 from "@angular/common";
11
- import * as i4 from "@angular/material/form-field";
12
- import * as i5 from "@angular/material/input";
13
- import * as i6 from "@angular/material/table";
14
- import * as i7 from "@angular/material/card";
15
- import * as i8 from "@angular/material/progress-bar";
11
+ import * as i3 from "ngx-techlify-core";
12
+ import * as i4 from "@angular/common";
13
+ import * as i5 from "@angular/material/form-field";
14
+ import * as i6 from "@angular/material/input";
15
+ import * as i7 from "@angular/material/table";
16
+ import * as i8 from "@angular/material/card";
17
+ import * as i9 from "@angular/material/progress-bar";
16
18
  export class ChecksheetSubmissionFilesComponent extends TechlifyListingControllerInterface {
17
19
  formBuilder;
18
- checksheetSubmissionFileService;
20
+ service;
21
+ entityFileService;
22
+ alertService;
19
23
  submissionId;
20
24
  questionId;
25
+ viewMode = 'horizontal-timeline';
26
+ fileDropperHeight = '150px';
27
+ allowMultipleFiles = false;
21
28
  displayedColumns = ['No', 'File', 'Actions'];
22
- constructor(formBuilder, checksheetSubmissionFileService) {
29
+ fileConfig;
30
+ fileList = [];
31
+ constructor(formBuilder, service, entityFileService, alertService) {
23
32
  super();
24
33
  this.formBuilder = formBuilder;
25
- this.checksheetSubmissionFileService = checksheetSubmissionFileService;
34
+ this.service = service;
35
+ this.entityFileService = entityFileService;
36
+ this.alertService = alertService;
26
37
  this.lastPage = 0;
27
38
  this.filterForm = this.formBuilder.group({
28
39
  search: [''],
@@ -31,6 +42,17 @@ export class ChecksheetSubmissionFilesComponent extends TechlifyListingControlle
31
42
  });
32
43
  }
33
44
  ngOnInit() {
45
+ this.fileConfig = {
46
+ fileId: "entityDashboardDropper-" + this.submissionId + '-' + this.questionId,
47
+ containerId: "entityDashboardDropperContainer-" + this.submissionId + '-' + this.questionId,
48
+ styles: {
49
+ height: this.fileDropperHeight
50
+ },
51
+ multiple: this.allowMultipleFiles,
52
+ acceptFile: "*",
53
+ maxSize: 10,
54
+ acceptFileText: "All Files"
55
+ };
34
56
  this.filterForm.patchValue({
35
57
  submission_ids: this.submissionId ?? '',
36
58
  question_ids: this.questionId ?? ''
@@ -42,10 +64,11 @@ export class ChecksheetSubmissionFilesComponent extends TechlifyListingControlle
42
64
  const params = {
43
65
  ...this.filterForm.value,
44
66
  perPage: this.perPage,
45
- page: this.page
67
+ page: this.page,
68
+ with: 'creator'
46
69
  };
47
70
  this.isWorking = true;
48
- this.checksheetSubmissionFileService.index(params).subscribe({
71
+ this.service.index(params).subscribe({
49
72
  next: (response) => {
50
73
  this.models = this.models.concat(response?.data);
51
74
  this.lastPage = response?.last_page;
@@ -53,15 +76,58 @@ export class ChecksheetSubmissionFilesComponent extends TechlifyListingControlle
53
76
  complete: () => (this.isWorking = false)
54
77
  });
55
78
  }
56
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetSubmissionFilesComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ChecksheetSubmissionFileService }], target: i0.ɵɵFactoryTarget.Component });
57
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChecksheetSubmissionFilesComponent, isStandalone: true, selector: "app-checksheet-submission-files", inputs: { submissionId: "submissionId", questionId: "questionId" }, usesInheritance: true, ngImport: i0, template: "<mat-card class=\"p-0\">\n <mat-card-content\n class=\"p-2 mb-0 d-flex justify-content-between align-items-center\"\n >\n <div>\n <h3 class=\"mb-0\">Files</h3>\n </div>\n <form [formGroup]=\"filterForm\">\n <mat-form-field>\n <mat-label>Search</mat-label>\n <input\n formControlName=\"search\"\n type=\"text\"\n matInput\n placeholder=\"Search\"\n />\n </mat-form-field>\n </form>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n <!-- No Column -->\n <ng-container matColumnDef=\"No\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n </ng-container>\n\n <!-- Title Column -->\n <ng-container matColumnDef=\"Title\">\n <th mat-header-cell *matHeaderCellDef>Title</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.title }}</td>\n </ng-container>\n\n <!-- Details Column -->\n <ng-container matColumnDef=\"Details\">\n <th mat-header-cell *matHeaderCellDef>Details</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.description }}</td>\n </ng-container>\n\n <!-- File Column -->\n <ng-container matColumnDef=\"File\">\n <th mat-header-cell *matHeaderCellDef>File</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.file_name }}</td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <a\n class=\"text-decoration-none cursor-pointer text-dark\"\n [href]=\"element?.file_url\"\n target=\"_blank\"\n >\n <span class=\"material-symbols-outlined\"> visibility </span>\n </a>\n\n <app-checksheet-submission-file-delete-button\n [checksheetSubmissionFile]=\"element\"\n (deleted)=\"reload()\"\n ></app-checksheet-submission-file-delete-button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MaterialModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i6.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i6.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i6.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i6.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i6.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i6.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i6.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i6.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i6.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i8.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ChecksheetSubmissionFileDeleteButtonComponent, selector: "app-checksheet-submission-file-delete-button", inputs: ["checksheetSubmissionFile"], outputs: ["deleted"] }] });
79
+ async fileChanged(event) {
80
+ if (event && event?.length > 0) {
81
+ const fileArray = Array.from(event);
82
+ // upload files
83
+ const results = await this.uploadFiles(fileArray);
84
+ // link with submission question
85
+ this.onUploadComplete(results);
86
+ }
87
+ }
88
+ async uploadFiles(files) {
89
+ const uploadPromises = files.map((file) => this.entityFileService.uploadEntityFile(file));
90
+ return await Promise.all(uploadPromises);
91
+ }
92
+ onUploadComplete(uploadedFiles) {
93
+ const uploadObservables = uploadedFiles.map((file) => {
94
+ const data = {
95
+ file_name: file.item.file_name,
96
+ file_url: file.item.url,
97
+ submission_id: this.submissionId,
98
+ question_id: this.questionId
99
+ };
100
+ return this.service
101
+ .store(data)
102
+ .pipe(map((response) => response?.item));
103
+ });
104
+ forkJoin(uploadObservables).subscribe({
105
+ next: () => {
106
+ this.reload();
107
+ this.fileList = [];
108
+ const fileInput = document.getElementById("entityDashboardDropper-" + this.submissionId + '-' + this.questionId);
109
+ fileInput.value = '';
110
+ }
111
+ });
112
+ }
113
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetSubmissionFilesComponent, deps: [{ token: i1.FormBuilder }, { token: i2.ChecksheetSubmissionFileService }, { token: i3.EntityFileService }, { token: i3.AlertService }], target: i0.ɵɵFactoryTarget.Component });
114
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChecksheetSubmissionFilesComponent, isStandalone: true, selector: "app-checksheet-submission-files", inputs: { submissionId: "submissionId", questionId: "questionId", viewMode: "viewMode", fileDropperHeight: "fileDropperHeight", allowMultipleFiles: "allowMultipleFiles" }, usesInheritance: true, ngImport: i0, template: "<mat-card class=\"p-0\" *ngIf=\"viewMode === 'table'\">\n <mat-card-content\n class=\"p-2 mb-0 d-flex justify-content-between align-items-center\"\n >\n <div>\n <h3 class=\"mb-0\">Files</h3>\n </div>\n <form [formGroup]=\"filterForm\">\n <mat-form-field>\n <mat-label>Search</mat-label>\n <input\n formControlName=\"search\"\n type=\"text\"\n matInput\n placeholder=\"Search\"\n />\n </mat-form-field>\n </form>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n <!-- No Column -->\n <ng-container matColumnDef=\"No\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n </ng-container>\n\n <!-- Title Column -->\n <ng-container matColumnDef=\"Title\">\n <th mat-header-cell *matHeaderCellDef>Title</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.title }}</td>\n </ng-container>\n\n <!-- Details Column -->\n <ng-container matColumnDef=\"Details\">\n <th mat-header-cell *matHeaderCellDef>Details</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.description }}</td>\n </ng-container>\n\n <!-- File Column -->\n <ng-container matColumnDef=\"File\">\n <th mat-header-cell *matHeaderCellDef>File</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.file_name }}</td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <a\n class=\"text-decoration-none cursor-pointer text-dark\"\n [href]=\"element?.file_url\"\n target=\"_blank\"\n >\n <span class=\"material-symbols-outlined\"> visibility </span>\n </a>\n\n <app-checksheet-submission-file-delete-button\n [checksheetSubmissionFile]=\"element\"\n (deleted)=\"reload()\"\n ></app-checksheet-submission-file-delete-button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n\n<mat-card *ngIf=\"viewMode === 'horizontal-timeline'\">\n <mat-card-content class=\"mt-3 d-flex justify-content-start gap-3\">\n <app-file-dropper class=\"w-50\" [config]=\"fileConfig\" (fileChanged)=\"fileChanged($event)\" [fileArray]=\"fileList\">\n </app-file-dropper>\n <div style=\"width: calc(50% - 1rem)\">\n <div *ngFor=\"let model of models\" class=\"d-flex flex-column gap-0\">\n <div class=\"d-flex flex-column gap-0\">\n <div class=\"d-flex justify-content-between align-items-center gap-1\">\n <p class=\"mb-0 fw-bold text-wrap\">{{ model?.file_name | wrap:20 }}</p>\n </div>\n </div>\n <app-read-more [text]=\"model?.details\" [maxLength]=\"50\"></app-read-more>\n <div class=\"d-flex justify-content-between gap-2\">\n <small class=\"text-secondary\" style=\"max-width: 70%\">\n <i>Uploaded By {{ model?.creator?.name }} {{ model?.created_at | date: 'mediumDate'}}</i>\n </small>\n <div class=\"d-flex justify-content-end align-items-center gap-1\">\n <a class=\"text-decoration-none cursor-pointer text-dark\" [href]=\"model?.file_url\" target=\"_blank\">\n <span class=\"material-symbols-outlined\"> download </span>\n </a>\n <app-checksheet-submission-file-delete-button [checksheetSubmissionFile]=\"model\" (deleted)=\"reload()\">\n </app-checksheet-submission-file-delete-button>\n </div>\n </div>\n <hr style=\"margin: 0.5rem 0\">\n </div>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </div>\n </mat-card-content>\n</mat-card>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }, { kind: "ngmodule", type: MaterialModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i8.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i9.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: ChecksheetSubmissionFileDeleteButtonComponent, selector: "app-checksheet-submission-file-delete-button", inputs: ["checksheetSubmissionFile"], outputs: ["deleted"] }, { kind: "ngmodule", type: FileDropperModule }, { kind: "component", type: i3.FileDropperComponent, selector: "app-file-dropper", inputs: ["fileArray", "config", "styles"], outputs: ["fileChanged"] }, { kind: "ngmodule", type: ReadMoreModule }, { kind: "component", type: i3.ReadMoreComponent, selector: "app-read-more", inputs: ["text", "maxLength"] }, { kind: "pipe", type: WrapPipe, name: "wrap" }] });
58
115
  }
59
116
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetSubmissionFilesComponent, decorators: [{
60
117
  type: Component,
61
- args: [{ selector: 'app-checksheet-submission-files', standalone: true, imports: [CommonModule, MaterialModule, MatProgressBarModule, ReactiveFormsModule, ChecksheetSubmissionFileDeleteButtonComponent], template: "<mat-card class=\"p-0\">\n <mat-card-content\n class=\"p-2 mb-0 d-flex justify-content-between align-items-center\"\n >\n <div>\n <h3 class=\"mb-0\">Files</h3>\n </div>\n <form [formGroup]=\"filterForm\">\n <mat-form-field>\n <mat-label>Search</mat-label>\n <input\n formControlName=\"search\"\n type=\"text\"\n matInput\n placeholder=\"Search\"\n />\n </mat-form-field>\n </form>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n <!-- No Column -->\n <ng-container matColumnDef=\"No\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n </ng-container>\n\n <!-- Title Column -->\n <ng-container matColumnDef=\"Title\">\n <th mat-header-cell *matHeaderCellDef>Title</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.title }}</td>\n </ng-container>\n\n <!-- Details Column -->\n <ng-container matColumnDef=\"Details\">\n <th mat-header-cell *matHeaderCellDef>Details</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.description }}</td>\n </ng-container>\n\n <!-- File Column -->\n <ng-container matColumnDef=\"File\">\n <th mat-header-cell *matHeaderCellDef>File</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.file_name }}</td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <a\n class=\"text-decoration-none cursor-pointer text-dark\"\n [href]=\"element?.file_url\"\n target=\"_blank\"\n >\n <span class=\"material-symbols-outlined\"> visibility </span>\n </a>\n\n <app-checksheet-submission-file-delete-button\n [checksheetSubmissionFile]=\"element\"\n (deleted)=\"reload()\"\n ></app-checksheet-submission-file-delete-button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n" }]
62
- }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ChecksheetSubmissionFileService }], propDecorators: { submissionId: [{
118
+ args: [{ selector: 'app-checksheet-submission-files', standalone: true, imports: [
119
+ CommonModule, MaterialModule, MatProgressBarModule, ReactiveFormsModule,
120
+ ChecksheetSubmissionFileDeleteButtonComponent, FileDropperModule, ReadMoreModule, WrapPipe
121
+ ], template: "<mat-card class=\"p-0\" *ngIf=\"viewMode === 'table'\">\n <mat-card-content\n class=\"p-2 mb-0 d-flex justify-content-between align-items-center\"\n >\n <div>\n <h3 class=\"mb-0\">Files</h3>\n </div>\n <form [formGroup]=\"filterForm\">\n <mat-form-field>\n <mat-label>Search</mat-label>\n <input\n formControlName=\"search\"\n type=\"text\"\n matInput\n placeholder=\"Search\"\n />\n </mat-form-field>\n </form>\n </mat-card-content>\n <mat-card-content class=\"p-0\">\n <table mat-table [dataSource]=\"models\" class=\"w-100\">\n <!-- No Column -->\n <ng-container matColumnDef=\"No\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = index\">{{ i + 1 }}</td>\n </ng-container>\n\n <!-- Title Column -->\n <ng-container matColumnDef=\"Title\">\n <th mat-header-cell *matHeaderCellDef>Title</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.title }}</td>\n </ng-container>\n\n <!-- Details Column -->\n <ng-container matColumnDef=\"Details\">\n <th mat-header-cell *matHeaderCellDef>Details</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.description }}</td>\n </ng-container>\n\n <!-- File Column -->\n <ng-container matColumnDef=\"File\">\n <th mat-header-cell *matHeaderCellDef>File</th>\n <td mat-cell *matCellDef=\"let element\">{{ element?.file_name }}</td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"Actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element\">\n <div class=\"d-flex justify-content-start align-items-center gap-2\">\n <a\n class=\"text-decoration-none cursor-pointer text-dark\"\n [href]=\"element?.file_url\"\n target=\"_blank\"\n >\n <span class=\"material-symbols-outlined\"> visibility </span>\n </a>\n\n <app-checksheet-submission-file-delete-button\n [checksheetSubmissionFile]=\"element\"\n (deleted)=\"reload()\"\n ></app-checksheet-submission-file-delete-button>\n </div>\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </mat-card-content>\n</mat-card>\n\n<mat-card *ngIf=\"viewMode === 'horizontal-timeline'\">\n <mat-card-content class=\"mt-3 d-flex justify-content-start gap-3\">\n <app-file-dropper class=\"w-50\" [config]=\"fileConfig\" (fileChanged)=\"fileChanged($event)\" [fileArray]=\"fileList\">\n </app-file-dropper>\n <div style=\"width: calc(50% - 1rem)\">\n <div *ngFor=\"let model of models\" class=\"d-flex flex-column gap-0\">\n <div class=\"d-flex flex-column gap-0\">\n <div class=\"d-flex justify-content-between align-items-center gap-1\">\n <p class=\"mb-0 fw-bold text-wrap\">{{ model?.file_name | wrap:20 }}</p>\n </div>\n </div>\n <app-read-more [text]=\"model?.details\" [maxLength]=\"50\"></app-read-more>\n <div class=\"d-flex justify-content-between gap-2\">\n <small class=\"text-secondary\" style=\"max-width: 70%\">\n <i>Uploaded By {{ model?.creator?.name }} {{ model?.created_at | date: 'mediumDate'}}</i>\n </small>\n <div class=\"d-flex justify-content-end align-items-center gap-1\">\n <a class=\"text-decoration-none cursor-pointer text-dark\" [href]=\"model?.file_url\" target=\"_blank\">\n <span class=\"material-symbols-outlined\"> download </span>\n </a>\n <app-checksheet-submission-file-delete-button [checksheetSubmissionFile]=\"model\" (deleted)=\"reload()\">\n </app-checksheet-submission-file-delete-button>\n </div>\n </div>\n <hr style=\"margin: 0.5rem 0\">\n </div>\n <mat-progress-bar mode=\"indeterminate\" *ngIf=\"isWorking\"></mat-progress-bar>\n </div>\n </mat-card-content>\n</mat-card>\n" }]
122
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.ChecksheetSubmissionFileService }, { type: i3.EntityFileService }, { type: i3.AlertService }], propDecorators: { submissionId: [{
63
123
  type: Input
64
124
  }], questionId: [{
65
125
  type: Input
126
+ }], viewMode: [{
127
+ type: Input
128
+ }], fileDropperHeight: [{
129
+ type: Input
130
+ }], allowMultipleFiles: [{
131
+ type: Input
66
132
  }] } });
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZpbGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZS9jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZXMvY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZpbGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZS9jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZXMvY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZpbGVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLGtDQUFrQyxFQUNuQyxNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBYyxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFDTCw2Q0FBNkMsRUFDOUMsTUFBTSxnR0FBZ0csQ0FBQzs7Ozs7Ozs7OztBQVN4RyxNQUFNLE9BQU8sa0NBQ1gsU0FBUSxrQ0FBa0M7SUFRaEM7SUFDQTtJQU5ELFlBQVksQ0FBVTtJQUN0QixVQUFVLENBQVU7SUFDN0IsZ0JBQWdCLEdBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRXZELFlBQ1UsV0FBd0IsRUFDeEIsK0JBQWdFO1FBRXhFLEtBQUssRUFBRSxDQUFDO1FBSEEsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsb0NBQStCLEdBQS9CLCtCQUErQixDQUFpQztRQUd4RSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ3ZDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNaLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNwQixZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FDeEI7WUFDRSxjQUFjLEVBQUUsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFO1lBQ3ZDLFlBQVksRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7U0FDcEMsRUFDRCxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sTUFBTSxHQUFRO1lBQ2xCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLO1lBQ3hCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNELElBQUksRUFBRSxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLEVBQUUsU0FBUyxDQUFDO1lBQ3RDLENBQUM7WUFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztTQUN6QyxDQUFDLENBQUM7SUFDTCxDQUFDO3dHQS9DVSxrQ0FBa0M7NEZBQWxDLGtDQUFrQyxzTENwQi9DLDBrRkF3RUEseUREeERZLFlBQVksa0lBQUUsY0FBYyxvOURBQUUsb0JBQW9CLDhCQUFFLG1CQUFtQiw2OEJBQUUsNkNBQTZDOzs0RkFJckgsa0NBQWtDO2tCQVA5QyxTQUFTOytCQUNFLGlDQUFpQyxjQUMvQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLDZDQUE2QyxDQUFDOzhIQVF4SCxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBNYXRlcmlhbE1vZHVsZSxcbiAgVGVjaGxpZnlMaXN0aW5nQ29udHJvbGxlckludGVyZmFjZVxufSBmcm9tICduZ3gtdGVjaGxpZnktY29yZSc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDaGVja3NoZWV0U3VibWlzc2lvbkZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZpbGUuc2VydmljZSc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQge1xuICBDaGVja3NoZWV0U3VibWlzc2lvbkZpbGVEZWxldGVCdXR0b25Db21wb25lbnRcbn0gZnJvbSBcIi4uL2NoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlLWRlbGV0ZS1idXR0b24vY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZpbGUtZGVsZXRlLWJ1dHRvbi5jb21wb25lbnRcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdGVyaWFsTW9kdWxlLCBNYXRQcm9ncmVzc0Jhck1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgQ2hlY2tzaGVldFN1Ym1pc3Npb25GaWxlRGVsZXRlQnV0dG9uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrc2hlZXRTdWJtaXNzaW9uRmlsZXNDb21wb25lbnRcbiAgZXh0ZW5kcyBUZWNobGlmeUxpc3RpbmdDb250cm9sbGVySW50ZXJmYWNlXG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIEBJbnB1dCgpIHN1Ym1pc3Npb25JZCE6IG51bWJlcjtcbiAgQElucHV0KCkgcXVlc3Rpb25JZCE6IG51bWJlcjtcbiAgZGlzcGxheWVkQ29sdW1uczogc3RyaW5nW10gPSBbJ05vJywgJ0ZpbGUnLCAnQWN0aW9ucyddO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2hlY2tzaGVldFN1Ym1pc3Npb25GaWxlU2VydmljZTogQ2hlY2tzaGVldFN1Ym1pc3Npb25GaWxlU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubGFzdFBhZ2UgPSAwO1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgc2VhcmNoOiBbJyddLFxuICAgICAgc3VibWlzc2lvbl9pZHM6IFsnJ10sXG4gICAgICBxdWVzdGlvbl9pZHM6IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICBzdWJtaXNzaW9uX2lkczogdGhpcy5zdWJtaXNzaW9uSWQgPz8gJycsXG4gICAgICAgIHF1ZXN0aW9uX2lkczogdGhpcy5xdWVzdGlvbklkID8/ICcnXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuICAgIHRoaXMubGlzdGVuRm9yQ2hhbmdlcygpO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIGxvYWREYXRhKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgLi4udGhpcy5maWx0ZXJGb3JtLnZhbHVlLFxuICAgICAgcGVyUGFnZTogdGhpcy5wZXJQYWdlLFxuICAgICAgcGFnZTogdGhpcy5wYWdlXG4gICAgfTtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgdGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbkZpbGVTZXJ2aWNlLmluZGV4KHBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubW9kZWxzID0gdGhpcy5tb2RlbHMuY29uY2F0KHJlc3BvbnNlPy5kYXRhKTtcbiAgICAgICAgdGhpcy5sYXN0UGFnZSA9IHJlc3BvbnNlPy5sYXN0X3BhZ2U7XG4gICAgICB9LFxuICAgICAgY29tcGxldGU6ICgpID0+ICh0aGlzLmlzV29ya2luZyA9IGZhbHNlKVxuICAgIH0pO1xuICB9XG59XG4iLCI8bWF0LWNhcmQgY2xhc3M9XCJwLTBcIj5cbiAgPG1hdC1jYXJkLWNvbnRlbnRcbiAgICBjbGFzcz1cInAtMiBtYi0wIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICA+XG4gICAgPGRpdj5cbiAgICAgIDxoMyBjbGFzcz1cIm1iLTBcIj5GaWxlczwvaDM+XG4gICAgPC9kaXY+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+U2VhcmNoPC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlYXJjaFwiXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxuICAgICAgICAvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Zvcm0+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbiAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJwLTBcIj5cbiAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT1cIm1vZGVsc1wiIGNsYXNzPVwidy0xMDBcIj5cbiAgICAgIDwhLS0gTm8gQ29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJOb1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiM8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDsgbGV0IGkgPSBpbmRleFwiPnt7IGkgKyAxIH19PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIFRpdGxlIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiVGl0bGVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5UaXRsZTwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+e3sgZWxlbWVudD8udGl0bGUgfX08L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gRGV0YWlscyBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIkRldGFpbHNcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5EZXRhaWxzPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py5kZXNjcmlwdGlvbiB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBGaWxlIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiRmlsZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPkZpbGU8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPnt7IGVsZW1lbnQ/LmZpbGVfbmFtZSB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBBY3Rpb25zIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiQWN0aW9uc1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPkFjdGlvbnM8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSBjdXJzb3ItcG9pbnRlciB0ZXh0LWRhcmtcIlxuICAgICAgICAgICAgICBbaHJlZl09XCJlbGVtZW50Py5maWxlX3VybFwiXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiB2aXNpYmlsaXR5IDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPGFwcC1jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZS1kZWxldGUtYnV0dG9uXG4gICAgICAgICAgICAgIFtjaGVja3NoZWV0U3VibWlzc2lvbkZpbGVdPVwiZWxlbWVudFwiXG4gICAgICAgICAgICAgIChkZWxldGVkKT1cInJlbG9hZCgpXCJcbiAgICAgICAgICAgID48L2FwcC1jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZS1kZWxldGUtYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gICAgPC90YWJsZT5cbiAgICA8bWF0LXByb2dyZXNzLWJhciBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiICpuZ0lmPVwiaXNXb3JraW5nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPlxuIl19
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZpbGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZS9jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZXMvY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZpbGVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZS9jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZXMvY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZpbGVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBSUwsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxjQUFjLEVBQ2Qsa0NBQWtDLEVBQUUsUUFBUSxFQUM3QyxNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBYyxtQkFBbUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWhFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFDTCw2Q0FBNkMsRUFDOUMsTUFBTSxnR0FBZ0csQ0FBQztBQUN4RyxPQUFPLEVBQUMsUUFBUSxFQUFFLEdBQUcsRUFBYSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7QUFZL0MsTUFBTSxPQUFPLGtDQUNYLFNBQVEsa0NBQWtDO0lBYWhDO0lBQ0E7SUFDQTtJQUNBO0lBYkQsWUFB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QUNULElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFFZCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FDdkMseUJBQXlCLEdBQUMsSUFBSSxDQUFDLFlBQVksR0FBQyxHQUFHLEdBQUMsSUFBSSxDQUFDLFVBQVUsQ0FDNUMsQ0FBQztnQkFDdEIsU0FBUyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDdkIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBOUdVLGtDQUFrQzs0RkFBbEMsa0NBQWtDLDhSQzdCL0Msd3dJQXVHQSx5RERoRkksWUFBWSxrVEFBRSxjQUFjLG85REFBRSxvQkFBb0IsOEJBQUUsbUJBQW1CLDY4QkFDdkUsNkNBQTZDLG9KQUFFLGlCQUFpQix1TEFBRSxjQUFjLHVJQUFFLFFBQVE7OzRGQUtqRixrQ0FBa0M7a0JBVjlDLFNBQVM7K0JBQ0UsaUNBQWlDLGNBQy9CLElBQUksV0FDUDt3QkFDUCxZQUFZLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQjt3QkFDdkUsNkNBQTZDLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLFFBQVE7cUJBQzNGO3lMQVFRLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgRW50aXR5RmlsZVNlcnZpY2UsXG4gIEZpbGVEcm9wcGVyQ29uZmlnLFxuICBGaWxlRHJvcHBlck1vZHVsZSxcbiAgTWF0ZXJpYWxNb2R1bGUsXG4gIFJlYWRNb3JlTW9kdWxlLFxuICBUZWNobGlmeUxpc3RpbmdDb250cm9sbGVySW50ZXJmYWNlLCBXcmFwUGlwZVxufSBmcm9tICduZ3gtdGVjaGxpZnktY29yZSc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0NoZWNrc2hlZXRTdWJtaXNzaW9uRmlsZVNlcnZpY2V9IGZyb20gJy4uLy4uL2NoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtNYXRQcm9ncmVzc0Jhck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3MtYmFyJztcbmltcG9ydCB7XG4gIENoZWNrc2hlZXRTdWJtaXNzaW9uRmlsZURlbGV0ZUJ1dHRvbkNvbXBvbmVudFxufSBmcm9tIFwiLi4vY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZpbGUtZGVsZXRlLWJ1dHRvbi9jaGVja3NoZWV0LXN1Ym1pc3Npb24tZmlsZS1kZWxldGUtYnV0dG9uLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtmb3JrSm9pbiwgbWFwLCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlcycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsIE1hdGVyaWFsTW9kdWxlLCBNYXRQcm9ncmVzc0Jhck1vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBDaGVja3NoZWV0U3VibWlzc2lvbkZpbGVEZWxldGVCdXR0b25Db21wb25lbnQsIEZpbGVEcm9wcGVyTW9kdWxlLCBSZWFkTW9yZU1vZHVsZSwgV3JhcFBpcGVcbiAgXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlcy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENoZWNrc2hlZXRTdWJtaXNzaW9uRmlsZXNDb21wb25lbnRcbiAgZXh0ZW5kcyBUZWNobGlmeUxpc3RpbmdDb250cm9sbGVySW50ZXJmYWNlXG4gIGltcGxlbWVudHMgT25Jbml0XG57XG4gIEBJbnB1dCgpIHN1Ym1pc3Npb25JZCE6IG51bWJlcjtcbiAgQElucHV0KCkgcXVlc3Rpb25JZCE6IG51bWJlcjtcbiAgQElucHV0KCkgdmlld01vZGU6ICd0YWJsZScgfCAnaG9yaXpvbnRhbC10aW1lbGluZScgPSAnaG9yaXpvbnRhbC10aW1lbGluZSc7XG4gIEBJbnB1dCgpIGZpbGVEcm9wcGVySGVpZ2h0ID0gJzE1MHB4JztcbiAgQElucHV0KCkgYWxsb3dNdWx0aXBsZUZpbGVzID0gZmFsc2U7XG4gIGRpc3BsYXllZENvbHVtbnM6IHN0cmluZ1tdID0gWydObycsICdGaWxlJywgJ0FjdGlvbnMnXTtcbiAgZmlsZUNvbmZpZyE6IEZpbGVEcm9wcGVyQ29uZmlnO1xuICBmaWxlTGlzdDogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHNlcnZpY2U6IENoZWNrc2hlZXRTdWJtaXNzaW9uRmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnRpdHlGaWxlU2VydmljZTogRW50aXR5RmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubGFzdFBhZ2UgPSAwO1xuICAgIHRoaXMuZmlsdGVyRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgc2VhcmNoOiBbJyddLFxuICAgICAgc3VibWlzc2lvbl9pZHM6IFsnJ10sXG4gICAgICBxdWVzdGlvbl9pZHM6IFsnJ11cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZmlsZUNvbmZpZyA9IHtcbiAgICAgIGZpbGVJZDogXCJlbnRpdHlEYXNoYm9hcmREcm9wcGVyLVwiK3RoaXMuc3VibWlzc2lvbklkKyctJyt0aGlzLnF1ZXN0aW9uSWQsXG4gICAgICBjb250YWluZXJJZDogXCJlbnRpdHlEYXNoYm9hcmREcm9wcGVyQ29udGFpbmVyLVwiK3RoaXMuc3VibWlzc2lvbklkKyctJyt0aGlzLnF1ZXN0aW9uSWQsXG4gICAgICBzdHlsZXM6IHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmZpbGVEcm9wcGVySGVpZ2h0XG4gICAgICB9LFxuICAgICAgbXVsdGlwbGU6IHRoaXMuYWxsb3dNdWx0aXBsZUZpbGVzLFxuICAgICAgYWNjZXB0RmlsZTogXCIqXCIsXG4gICAgICBtYXhTaXplOiAxMCxcbiAgICAgIGFjY2VwdEZpbGVUZXh0OiBcIkFsbCBGaWxlc1wiXG4gICAgfTtcblxuICAgIHRoaXMuZmlsdGVyRm9ybS5wYXRjaFZhbHVlKFxuICAgICAge1xuICAgICAgICBzdWJtaXNzaW9uX2lkczogdGhpcy5zdWJtaXNzaW9uSWQgPz8gJycsXG4gICAgICAgIHF1ZXN0aW9uX2lkczogdGhpcy5xdWVzdGlvbklkID8/ICcnXG4gICAgICB9LFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuICAgIHRoaXMubGlzdGVuRm9yQ2hhbmdlcygpO1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIGxvYWREYXRhKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgLi4udGhpcy5maWx0ZXJGb3JtLnZhbHVlLFxuICAgICAgcGVyUGFnZTogdGhpcy5wZXJQYWdlLFxuICAgICAgcGFnZTogdGhpcy5wYWdlLFxuICAgICAgd2l0aDogJ2NyZWF0b3InXG4gICAgfTtcbiAgICB0aGlzLmlzV29ya2luZyA9IHRydWU7XG4gICAgdGhpcy5zZXJ2aWNlLmluZGV4KHBhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubW9kZWxzID0gdGhpcy5tb2RlbHMuY29uY2F0KHJlc3BvbnNlPy5kYXRhKTtcbiAgICAgICAgdGhpcy5sYXN0UGFnZSA9IHJlc3BvbnNlPy5sYXN0X3BhZ2U7XG4gICAgICB9LFxuICAgICAgY29tcGxldGU6ICgpID0+ICh0aGlzLmlzV29ya2luZyA9IGZhbHNlKVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmlsZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudCAmJiBldmVudD8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlsZUFycmF5OiBGaWxlW10gPSBBcnJheS5mcm9tKGV2ZW50KTtcbiAgICAgIC8vIHVwbG9hZCBmaWxlc1xuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMudXBsb2FkRmlsZXMoZmlsZUFycmF5KTtcbiAgICAgIC8vIGxpbmsgd2l0aCBzdWJtaXNzaW9uIHF1ZXN0aW9uXG4gICAgICB0aGlzLm9uVXBsb2FkQ29tcGxldGUocmVzdWx0cyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGxvYWRGaWxlcyhmaWxlczogRmlsZVtdKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGNvbnN0IHVwbG9hZFByb21pc2VzID0gZmlsZXMubWFwKChmaWxlKSA9PlxuICAgICAgdGhpcy5lbnRpdHlGaWxlU2VydmljZS51cGxvYWRFbnRpdHlGaWxlKGZpbGUpXG4gICAgKTtcbiAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwodXBsb2FkUHJvbWlzZXMpO1xuICB9XG5cbiAgb25VcGxvYWRDb21wbGV0ZSh1cGxvYWRlZEZpbGVzOiBhbnlbXSkge1xuICAgIGNvbnN0IHVwbG9hZE9ic2VydmFibGVzOiBPYnNlcnZhYmxlPGFueT5bXSA9IHVwbG9hZGVkRmlsZXMubWFwKChmaWxlKSA9PiB7XG4gICAgICBjb25zdCBkYXRhOiBhbnkgPSB7XG4gICAgICAgIGZpbGVfbmFtZTogZmlsZS5pdGVtLmZpbGVfbmFtZSxcbiAgICAgICAgZmlsZV91cmw6IGZpbGUuaXRlbS51cmwsXG4gICAgICAgIHN1Ym1pc3Npb25faWQ6IHRoaXMuc3VibWlzc2lvbklkLFxuICAgICAgICBxdWVzdGlvbl9pZDogdGhpcy5xdWVzdGlvbklkXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuc2VydmljZVxuICAgICAgICAuc3RvcmUoZGF0YSlcbiAgICAgICAgLnBpcGUobWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2U/Lml0ZW0pKTtcbiAgICB9KTtcblxuICAgIGZvcmtKb2luKHVwbG9hZE9ic2VydmFibGVzKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbG9hZCgpO1xuXG4gICAgICAgIHRoaXMuZmlsZUxpc3QgPSBbXTtcbiAgICAgICAgY29uc3QgZmlsZUlucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgXCJlbnRpdHlEYXNoYm9hcmREcm9wcGVyLVwiK3RoaXMuc3VibWlzc2lvbklkKyctJyt0aGlzLnF1ZXN0aW9uSWRcbiAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBmaWxlSW5wdXQudmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIiwiPG1hdC1jYXJkIGNsYXNzPVwicC0wXCIgKm5nSWY9XCJ2aWV3TW9kZSA9PT0gJ3RhYmxlJ1wiPlxuICA8bWF0LWNhcmQtY29udGVudFxuICAgIGNsYXNzPVwicC0yIG1iLTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gID5cbiAgICA8ZGl2PlxuICAgICAgPGgzIGNsYXNzPVwibWItMFwiPkZpbGVzPC9oMz5cbiAgICA8L2Rpdj5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1sYWJlbD5TZWFyY2g8L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoXCJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXG4gICAgICAgIC8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZm9ybT5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cInAtMFwiPlxuICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwibW9kZWxzXCIgY2xhc3M9XCJ3LTEwMFwiPlxuICAgICAgPCEtLSBObyBDb2x1bW4gLS0+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cIk5vXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IzwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50OyBsZXQgaSA9IGluZGV4XCI+e3sgaSArIDEgfX08L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDwhLS0gVGl0bGUgQ29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJUaXRsZVwiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlRpdGxlPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj57eyBlbGVtZW50Py50aXRsZSB9fTwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBEZXRhaWxzIENvbHVtbiAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiRGV0YWlsc1wiPlxuICAgICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPkRldGFpbHM8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPnt7IGVsZW1lbnQ/LmRlc2NyaXB0aW9uIH19PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEZpbGUgQ29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJGaWxlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+RmlsZTwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+e3sgZWxlbWVudD8uZmlsZV9uYW1lIH19PC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8IS0tIEFjdGlvbnMgQ29sdW1uIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJBY3Rpb25zXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+QWN0aW9uczwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi1ub25lIGN1cnNvci1wb2ludGVyIHRleHQtZGFya1wiXG4gICAgICAgICAgICAgIFtocmVmXT1cImVsZW1lbnQ/LmZpbGVfdXJsXCJcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHZpc2liaWxpdHkgPC9zcGFuPlxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8YXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlLWRlbGV0ZS1idXR0b25cbiAgICAgICAgICAgICAgW2NoZWNrc2hlZXRTdWJtaXNzaW9uRmlsZV09XCJlbGVtZW50XCJcbiAgICAgICAgICAgICAgKGRlbGV0ZWQpPVwicmVsb2FkKClcIlxuICAgICAgICAgICAgPjwvYXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlLWRlbGV0ZS1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICA8L3RhYmxlPlxuICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJpc1dvcmtpbmdcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+XG5cbjxtYXQtY2FyZCAqbmdJZj1cInZpZXdNb2RlID09PSAnaG9yaXpvbnRhbC10aW1lbGluZSdcIj5cbiAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJtdC0zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgZ2FwLTNcIj5cbiAgICA8YXBwLWZpbGUtZHJvcHBlciBjbGFzcz1cInctNTBcIiBbY29uZmlnXT1cImZpbGVDb25maWdcIiAoZmlsZUNoYW5nZWQpPVwiZmlsZUNoYW5nZWQoJGV2ZW50KVwiIFtmaWxlQXJyYXldPVwiZmlsZUxpc3RcIj5cbiAgICA8L2FwcC1maWxlLWRyb3BwZXI+XG4gICAgPGRpdiBzdHlsZT1cIndpZHRoOiBjYWxjKDUwJSAtIDFyZW0pXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtb2RlbCBvZiBtb2RlbHNcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0wXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMCBmdy1ib2xkIHRleHQtd3JhcFwiPnt7IG1vZGVsPy5maWxlX25hbWUgfCB3cmFwOjIwIH19PC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGFwcC1yZWFkLW1vcmUgW3RleHRdPVwibW9kZWw/LmRldGFpbHNcIiBbbWF4TGVuZ3RoXT1cIjUwXCI+PC9hcHAtcmVhZC1tb3JlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGdhcC0yXCI+XG4gICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIiBzdHlsZT1cIm1heC13aWR0aDogNzAlXCI+XG4gICAgICAgICAgICA8aT5VcGxvYWRlZCBCeSB7eyBtb2RlbD8uY3JlYXRvcj8ubmFtZSB9fSB7eyBtb2RlbD8uY3JlYXRlZF9hdCB8IGRhdGU6ICdtZWRpdW1EYXRlJ319PC9pPlxuICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiPlxuICAgICAgICAgICAgPGEgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tbm9uZSBjdXJzb3ItcG9pbnRlciB0ZXh0LWRhcmtcIiBbaHJlZl09XCJtb2RlbD8uZmlsZV91cmxcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGRvd25sb2FkIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxhcHAtY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZpbGUtZGVsZXRlLWJ1dHRvbiBbY2hlY2tzaGVldFN1Ym1pc3Npb25GaWxlXT1cIm1vZGVsXCIgKGRlbGV0ZWQpPVwicmVsb2FkKClcIj5cbiAgICAgICAgICAgIDwvYXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi1maWxlLWRlbGV0ZS1idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aHIgc3R5bGU9XCJtYXJnaW46IDAuNXJlbSAwXCI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgKm5nSWY9XCJpc1dvcmtpbmdcIj48L21hdC1wcm9ncmVzcy1iYXI+XG4gICAgPC9kaXY+XG4gIDwvbWF0LWNhcmQtY29udGVudD5cbjwvbWF0LWNhcmQ+XG4iXX0=
@@ -18,8 +18,8 @@ import * as i10 from "@angular/material/progress-bar";
18
18
  import * as i11 from "@angular/material/table";
19
19
  import * as i12 from "ngx-permissions";
20
20
  import * as i13 from "ngx-infinite-scroll";
21
- import * as i14 from "../checksheet-submission-delete-button/checksheet-submission-delete-button.component";
22
- import * as i15 from "../checksheet-submission-form-button/checksheet-submission-form-button.component";
21
+ import * as i14 from "../checksheet-form-button/checksheet-form-button.component";
22
+ import * as i15 from "../checksheet-submission-delete-button/checksheet-submission-delete-button.component";
23
23
  import * as i16 from "../checksheet-submission-review-button/checksheet-submission-review-button.component";
24
24
  let ChecksheetSubmissionListComponent = class ChecksheetSubmissionListComponent extends TechlifyListingControllerInterface {
25
25
  alertService;
@@ -94,7 +94,7 @@ let ChecksheetSubmissionListComponent = class ChecksheetSubmissionListComponent
94
94
  this.reload();
95
95
  }
96
96
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetSubmissionListComponent, deps: [{ token: i1.AlertService }, { token: i2.UntypedFormBuilder }, { token: i3.ChecksheetSubmissionService }, { token: i1.RequestHelperService }], target: i0.ɵɵFactoryTarget.Component });
97
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChecksheetSubmissionListComponent, selector: "app-checksheet-submission-list", usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex justify-content-center align-items-center gap-3\">\n <h3 class=\"m-0 font-weight-bold\">Checksheet Submissions</h3>\n <app-checksheet-submission-form-button></app-checksheet-submission-form-button>\n</div>\n\n<mat-card class=\"mt-3\">\n <mat-card-content>\n <form fxLayout=\"row wrap\" fxLayoutGap=\"1rem\" [formGroup]=\"filterForm\">\n <app-timeline-filter\n formControlName=\"duration\"\n (selectionChange)=\"onDurationChange($event)\"\n [dateFrom]=\"filterForm.value?.date_from\"\n [dateTo]=\"filterForm.value?.date_to\"\n appearance=\"fill\"\n ></app-timeline-filter>\n\n <mat-form-field>\n <mat-label>Status</mat-label>\n <app-searchable-selector\n formControlName=\"status_ids\"\n apiUrl=\"api/checksheet-submission-statuses\"\n [enableSearch]=\"false\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field *ngxPermissionsOnly=\"['user_read']\">\n <mat-label>Creator</mat-label>\n <app-searchable-selector\n formControlName=\"creator_ids\"\n apiUrl=\"api/users\"\n [enableSearch]=\"true\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field *ngxPermissionsOnly=\"['user_read']\">\n <mat-label>Reviewer</mat-label>\n <app-searchable-selector\n formControlName=\"reviewer_ids\"\n apiUrl=\"api/users\"\n [enableSearch]=\"true\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Checksheet Format</mat-label>\n <app-searchable-selector\n formControlName=\"format_ids\"\n apiUrl=\"api/checksheet-formats?is_published=1\"\n [enableSearch]=\"true\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n</mat-card>\n\n<mat-card\n class=\"p-0 mt-3\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\"\n>\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n multiTemplateDataRows\n aria-describedby=\"Checksheet Submissions\"\n >\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = dataIndex\">\n {{ i + 1 }}\n </td>\n </ng-container>\n\n <!-- Checksheet Format Column -->\n <ng-container matColumnDef=\"format.title\">\n <th mat-header-cell *matHeaderCellDef>Checksheet Format</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.format?.title }}\n </td>\n </ng-container>\n\n <!-- Creator Column -->\n <ng-container matColumnDef=\"creator.name\">\n <th mat-header-cell *matHeaderCellDef>Creator</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.creator?.name }}\n </td>\n </ng-container>\n\n <!-- Reviewer Column -->\n <ng-container matColumnDef=\"reviewer.name\">\n <th mat-header-cell *matHeaderCellDef>Reviewer</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.reviewer?.name }}\n </td>\n </ng-container>\n\n <!-- Status Column -->\n <ng-container matColumnDef=\"status.title\">\n <th mat-header-cell *matHeaderCellDef>Status</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.status?.title }}\n </td>\n </ng-container>\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef>Date</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element.date | date }}\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element;\">\n <div class=\"d-flex gap-2\">\n <mat-icon\n [routerLink]=\"['../checksheet-submissions-view', element?.id]\"\n class=\"cursor-pointer\"\n >\n visibility\n </mat-icon>\n\n <mat-icon\n *ngIf=\"element.status_id === 1\"\n [routerLink]=\"[element?.id, 'view']\"\n class=\"cursor-pointer\"\n >\n edit\n </mat-icon>\n <app-checksheet-submission-review-button\n [submission]=\"element\"\n [requestParams]=\"{ with: this.with }\"\n (reviewed)=\"reload()\"\n ></app-checksheet-submission-review-button>\n <app-checksheet-submission-delete-button\n [checksheetSubmission]=\"element\"\n (deleted)=\"onDeleted()\"\n ></app-checksheet-submission-delete-button>\n </div>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n</mat-card>\n", styles: [".scroll-container{max-height:800px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i6.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i12.NgxPermissionsDirective, selector: "[ngxPermissionsOnly],[ngxPermissionsExcept]", inputs: ["ngxPermissionsOnly", "ngxPermissionsOnlyThen", "ngxPermissionsOnlyElse", "ngxPermissionsExcept", "ngxPermissionsExceptElse", "ngxPermissionsExceptThen", "ngxPermissionsThen", "ngxPermissionsElse", "ngxPermissionsOnlyAuthorisedStrategy", "ngxPermissionsOnlyUnauthorisedStrategy", "ngxPermissionsExceptUnauthorisedStrategy", "ngxPermissionsExceptAuthorisedStrategy", "ngxPermissionsUnauthorisedStrategy", "ngxPermissionsAuthorisedStrategy"], outputs: ["permissionsAuthorized", "permissionsUnauthorized"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i13.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "component", type: i1.SearchableSelectorComponent, selector: "app-searchable-selector", inputs: ["valueField", "titleField", "subtitleField", "apiUrl", "multiple", "selectedValue", "enableSearch", "add", "addConfig", "edit", "editConfig", "sort", "sortBy", "searchField", "itemComponent", "items", "apiDataProperty", "cache", "perPage", "inDataSearch", "panelWidth", "focusSearchOnOpen", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange"] }, { kind: "component", type: i1.TimelineFilterComponent, selector: "app-timeline-filter", inputs: ["defaultValue", "required", "disabled", "value", "timelines", "dateFrom", "dateTo", "appearance", "showClearButton", "form", "labelText"], outputs: ["selectionChange"] }, { kind: "component", type: i14.ChecksheetSubmissionDeleteButtonComponent, selector: "app-checksheet-submission-delete-button", inputs: ["checksheetSubmission"], outputs: ["deleted"] }, { kind: "component", type: i15.ChecksheetSubmissionFormButtonComponent, selector: "app-checksheet-submission-form-button", inputs: ["submittableType", "submittableId"], outputs: ["saved"] }, { kind: "component", type: i16.ChecksheetSubmissionReviewButtonComponent, selector: "app-checksheet-submission-review-button", inputs: ["submission", "viewType", "requestParams"], outputs: ["reviewed"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
97
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChecksheetSubmissionListComponent, selector: "app-checksheet-submission-list", usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex justify-content-center align-items-center gap-3\">\n <h3 class=\"m-0 font-weight-bold\">Checksheet Submissions</h3>\n <app-checksheet-form-button></app-checksheet-form-button>\n</div>\n\n<mat-card class=\"mt-3\">\n <mat-card-content>\n <form fxLayout=\"row wrap\" fxLayoutGap=\"1rem\" [formGroup]=\"filterForm\">\n <app-timeline-filter\n formControlName=\"duration\"\n (selectionChange)=\"onDurationChange($event)\"\n [dateFrom]=\"filterForm.value?.date_from\"\n [dateTo]=\"filterForm.value?.date_to\"\n appearance=\"fill\"\n ></app-timeline-filter>\n\n <mat-form-field>\n <mat-label>Status</mat-label>\n <app-searchable-selector\n formControlName=\"status_ids\"\n apiUrl=\"api/checksheet-submission-statuses\"\n [enableSearch]=\"false\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field *ngxPermissionsOnly=\"['user_read']\">\n <mat-label>Creator</mat-label>\n <app-searchable-selector\n formControlName=\"creator_ids\"\n apiUrl=\"api/users\"\n [enableSearch]=\"true\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field *ngxPermissionsOnly=\"['user_read']\">\n <mat-label>Reviewer</mat-label>\n <app-searchable-selector\n formControlName=\"reviewer_ids\"\n apiUrl=\"api/users\"\n [enableSearch]=\"true\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Checksheet Format</mat-label>\n <app-searchable-selector\n formControlName=\"format_ids\"\n apiUrl=\"api/checksheet-formats?is_published=1\"\n [enableSearch]=\"true\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n</mat-card>\n\n<mat-card\n class=\"p-0 mt-3\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\"\n>\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n multiTemplateDataRows\n aria-describedby=\"Checksheet Submissions\"\n >\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = dataIndex\">\n {{ i + 1 }}\n </td>\n </ng-container>\n\n <!-- Checksheet Format Column -->\n <ng-container matColumnDef=\"format.title\">\n <th mat-header-cell *matHeaderCellDef>Checksheet Format</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.format?.title }}\n </td>\n </ng-container>\n\n <!-- Creator Column -->\n <ng-container matColumnDef=\"creator.name\">\n <th mat-header-cell *matHeaderCellDef>Creator</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.creator?.name }}\n </td>\n </ng-container>\n\n <!-- Reviewer Column -->\n <ng-container matColumnDef=\"reviewer.name\">\n <th mat-header-cell *matHeaderCellDef>Reviewer</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.reviewer?.name }}\n </td>\n </ng-container>\n\n <!-- Status Column -->\n <ng-container matColumnDef=\"status.title\">\n <th mat-header-cell *matHeaderCellDef>Status</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.status?.title }}\n </td>\n </ng-container>\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef>Date</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element.date | date }}\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element;\">\n <div class=\"d-flex gap-2\">\n <mat-icon\n [routerLink]=\"['../checksheet-submissions-view', element?.id]\"\n class=\"cursor-pointer\"\n >\n visibility\n </mat-icon>\n\n <mat-icon\n *ngIf=\"element.status_id === 1\"\n [routerLink]=\"[element?.id, 'view']\"\n class=\"cursor-pointer\"\n >\n edit\n </mat-icon>\n <app-checksheet-submission-review-button\n [submission]=\"element\"\n [requestParams]=\"{ with: this.with }\"\n (reviewed)=\"reload()\"\n ></app-checksheet-submission-review-button>\n <app-checksheet-submission-delete-button\n [checksheetSubmission]=\"element\"\n (deleted)=\"onDeleted()\"\n ></app-checksheet-submission-delete-button>\n </div>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n</mat-card>\n", styles: [".scroll-container{max-height:800px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i6.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i8.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i8.MatLabel, selector: "mat-label" }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i11.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: i12.NgxPermissionsDirective, selector: "[ngxPermissionsOnly],[ngxPermissionsExcept]", inputs: ["ngxPermissionsOnly", "ngxPermissionsOnlyThen", "ngxPermissionsOnlyElse", "ngxPermissionsExcept", "ngxPermissionsExceptElse", "ngxPermissionsExceptThen", "ngxPermissionsThen", "ngxPermissionsElse", "ngxPermissionsOnlyAuthorisedStrategy", "ngxPermissionsOnlyUnauthorisedStrategy", "ngxPermissionsExceptUnauthorisedStrategy", "ngxPermissionsExceptAuthorisedStrategy", "ngxPermissionsUnauthorisedStrategy", "ngxPermissionsAuthorisedStrategy"], outputs: ["permissionsAuthorized", "permissionsUnauthorized"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i13.InfiniteScrollDirective, selector: "[infiniteScroll], [infinite-scroll], [data-infinite-scroll]", inputs: ["infiniteScrollDistance", "infiniteScrollUpDistance", "infiniteScrollThrottle", "infiniteScrollDisabled", "infiniteScrollContainer", "scrollWindow", "immediateCheck", "horizontal", "alwaysCallback", "fromRoot"], outputs: ["scrolled", "scrolledUp"] }, { kind: "component", type: i1.SearchableSelectorComponent, selector: "app-searchable-selector", inputs: ["valueField", "titleField", "subtitleField", "apiUrl", "multiple", "selectedValue", "enableSearch", "add", "addConfig", "edit", "editConfig", "sort", "sortBy", "searchField", "itemComponent", "items", "apiDataProperty", "cache", "perPage", "inDataSearch", "panelWidth", "focusSearchOnOpen", "required", "disabled", "value"], outputs: ["selectedValueChange", "selectionChange", "itemsChange"] }, { kind: "component", type: i1.TimelineFilterComponent, selector: "app-timeline-filter", inputs: ["defaultValue", "required", "disabled", "value", "timelines", "dateFrom", "dateTo", "appearance", "showClearButton", "form", "labelText"], outputs: ["selectionChange"] }, { kind: "component", type: i14.ChecksheetFormButtonComponent, selector: "app-checksheet-form-button", inputs: ["submittableType", "submittableId"], outputs: ["saved"] }, { kind: "component", type: i15.ChecksheetSubmissionDeleteButtonComponent, selector: "app-checksheet-submission-delete-button", inputs: ["checksheetSubmission"], outputs: ["deleted"] }, { kind: "component", type: i16.ChecksheetSubmissionReviewButtonComponent, selector: "app-checksheet-submission-review-button", inputs: ["submission", "viewType", "requestParams"], outputs: ["reviewed"] }, { kind: "pipe", type: i4.DatePipe, name: "date" }] });
98
98
  };
99
99
  ChecksheetSubmissionListComponent = __decorate([
100
100
  UntilDestroy()
@@ -102,6 +102,6 @@ ChecksheetSubmissionListComponent = __decorate([
102
102
  export { ChecksheetSubmissionListComponent };
103
103
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetSubmissionListComponent, decorators: [{
104
104
  type: Component,
105
- args: [{ selector: 'app-checksheet-submission-list', template: "<div class=\"d-flex justify-content-center align-items-center gap-3\">\n <h3 class=\"m-0 font-weight-bold\">Checksheet Submissions</h3>\n <app-checksheet-submission-form-button></app-checksheet-submission-form-button>\n</div>\n\n<mat-card class=\"mt-3\">\n <mat-card-content>\n <form fxLayout=\"row wrap\" fxLayoutGap=\"1rem\" [formGroup]=\"filterForm\">\n <app-timeline-filter\n formControlName=\"duration\"\n (selectionChange)=\"onDurationChange($event)\"\n [dateFrom]=\"filterForm.value?.date_from\"\n [dateTo]=\"filterForm.value?.date_to\"\n appearance=\"fill\"\n ></app-timeline-filter>\n\n <mat-form-field>\n <mat-label>Status</mat-label>\n <app-searchable-selector\n formControlName=\"status_ids\"\n apiUrl=\"api/checksheet-submission-statuses\"\n [enableSearch]=\"false\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field *ngxPermissionsOnly=\"['user_read']\">\n <mat-label>Creator</mat-label>\n <app-searchable-selector\n formControlName=\"creator_ids\"\n apiUrl=\"api/users\"\n [enableSearch]=\"true\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field *ngxPermissionsOnly=\"['user_read']\">\n <mat-label>Reviewer</mat-label>\n <app-searchable-selector\n formControlName=\"reviewer_ids\"\n apiUrl=\"api/users\"\n [enableSearch]=\"true\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Checksheet Format</mat-label>\n <app-searchable-selector\n formControlName=\"format_ids\"\n apiUrl=\"api/checksheet-formats?is_published=1\"\n [enableSearch]=\"true\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n</mat-card>\n\n<mat-card\n class=\"p-0 mt-3\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\"\n>\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n multiTemplateDataRows\n aria-describedby=\"Checksheet Submissions\"\n >\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = dataIndex\">\n {{ i + 1 }}\n </td>\n </ng-container>\n\n <!-- Checksheet Format Column -->\n <ng-container matColumnDef=\"format.title\">\n <th mat-header-cell *matHeaderCellDef>Checksheet Format</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.format?.title }}\n </td>\n </ng-container>\n\n <!-- Creator Column -->\n <ng-container matColumnDef=\"creator.name\">\n <th mat-header-cell *matHeaderCellDef>Creator</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.creator?.name }}\n </td>\n </ng-container>\n\n <!-- Reviewer Column -->\n <ng-container matColumnDef=\"reviewer.name\">\n <th mat-header-cell *matHeaderCellDef>Reviewer</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.reviewer?.name }}\n </td>\n </ng-container>\n\n <!-- Status Column -->\n <ng-container matColumnDef=\"status.title\">\n <th mat-header-cell *matHeaderCellDef>Status</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.status?.title }}\n </td>\n </ng-container>\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef>Date</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element.date | date }}\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element;\">\n <div class=\"d-flex gap-2\">\n <mat-icon\n [routerLink]=\"['../checksheet-submissions-view', element?.id]\"\n class=\"cursor-pointer\"\n >\n visibility\n </mat-icon>\n\n <mat-icon\n *ngIf=\"element.status_id === 1\"\n [routerLink]=\"[element?.id, 'view']\"\n class=\"cursor-pointer\"\n >\n edit\n </mat-icon>\n <app-checksheet-submission-review-button\n [submission]=\"element\"\n [requestParams]=\"{ with: this.with }\"\n (reviewed)=\"reload()\"\n ></app-checksheet-submission-review-button>\n <app-checksheet-submission-delete-button\n [checksheetSubmission]=\"element\"\n (deleted)=\"onDeleted()\"\n ></app-checksheet-submission-delete-button>\n </div>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n</mat-card>\n", styles: [".scroll-container{max-height:800px;overflow-y:auto}\n"] }]
105
+ args: [{ selector: 'app-checksheet-submission-list', template: "<div class=\"d-flex justify-content-center align-items-center gap-3\">\n <h3 class=\"m-0 font-weight-bold\">Checksheet Submissions</h3>\n <app-checksheet-form-button></app-checksheet-form-button>\n</div>\n\n<mat-card class=\"mt-3\">\n <mat-card-content>\n <form fxLayout=\"row wrap\" fxLayoutGap=\"1rem\" [formGroup]=\"filterForm\">\n <app-timeline-filter\n formControlName=\"duration\"\n (selectionChange)=\"onDurationChange($event)\"\n [dateFrom]=\"filterForm.value?.date_from\"\n [dateTo]=\"filterForm.value?.date_to\"\n appearance=\"fill\"\n ></app-timeline-filter>\n\n <mat-form-field>\n <mat-label>Status</mat-label>\n <app-searchable-selector\n formControlName=\"status_ids\"\n apiUrl=\"api/checksheet-submission-statuses\"\n [enableSearch]=\"false\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field *ngxPermissionsOnly=\"['user_read']\">\n <mat-label>Creator</mat-label>\n <app-searchable-selector\n formControlName=\"creator_ids\"\n apiUrl=\"api/users\"\n [enableSearch]=\"true\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field *ngxPermissionsOnly=\"['user_read']\">\n <mat-label>Reviewer</mat-label>\n <app-searchable-selector\n formControlName=\"reviewer_ids\"\n apiUrl=\"api/users\"\n [enableSearch]=\"true\"\n titleField=\"name\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Checksheet Format</mat-label>\n <app-searchable-selector\n formControlName=\"format_ids\"\n apiUrl=\"api/checksheet-formats?is_published=1\"\n [enableSearch]=\"true\"\n [multiple]=\"true\"\n >\n </app-searchable-selector>\n </mat-form-field>\n </form>\n </mat-card-content>\n</mat-card>\n\n<mat-card\n class=\"p-0 mt-3\"\n infiniteScroll\n [infiniteScrollDistance]=\"2\"\n [infiniteScrollThrottle]=\"50\"\n (scrolled)=\"onScroll()\"\n [fromRoot]=\"true\"\n>\n <table\n mat-table\n [dataSource]=\"models\"\n class=\"w-100\"\n multiTemplateDataRows\n aria-describedby=\"Checksheet Submissions\"\n >\n <!-- Index Column -->\n <ng-container matColumnDef=\"index\">\n <th mat-header-cell *matHeaderCellDef>#</th>\n <td mat-cell *matCellDef=\"let element; let i = dataIndex\">\n {{ i + 1 }}\n </td>\n </ng-container>\n\n <!-- Checksheet Format Column -->\n <ng-container matColumnDef=\"format.title\">\n <th mat-header-cell *matHeaderCellDef>Checksheet Format</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.format?.title }}\n </td>\n </ng-container>\n\n <!-- Creator Column -->\n <ng-container matColumnDef=\"creator.name\">\n <th mat-header-cell *matHeaderCellDef>Creator</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.creator?.name }}\n </td>\n </ng-container>\n\n <!-- Reviewer Column -->\n <ng-container matColumnDef=\"reviewer.name\">\n <th mat-header-cell *matHeaderCellDef>Reviewer</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.reviewer?.name }}\n </td>\n </ng-container>\n\n <!-- Status Column -->\n <ng-container matColumnDef=\"status.title\">\n <th mat-header-cell *matHeaderCellDef>Status</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element?.status?.title }}\n </td>\n </ng-container>\n\n <!-- Date Column -->\n <ng-container matColumnDef=\"date\">\n <th mat-header-cell *matHeaderCellDef>Date</th>\n <td mat-cell *matCellDef=\"let element\">\n {{ element.date | date }}\n </td>\n </ng-container>\n\n <!-- Actions Column -->\n <ng-container matColumnDef=\"actions\">\n <th mat-header-cell *matHeaderCellDef>Actions</th>\n <td mat-cell *matCellDef=\"let element;\">\n <div class=\"d-flex gap-2\">\n <mat-icon\n [routerLink]=\"['../checksheet-submissions-view', element?.id]\"\n class=\"cursor-pointer\"\n >\n visibility\n </mat-icon>\n\n <mat-icon\n *ngIf=\"element.status_id === 1\"\n [routerLink]=\"[element?.id, 'view']\"\n class=\"cursor-pointer\"\n >\n edit\n </mat-icon>\n <app-checksheet-submission-review-button\n [submission]=\"element\"\n [requestParams]=\"{ with: this.with }\"\n (reviewed)=\"reload()\"\n ></app-checksheet-submission-review-button>\n <app-checksheet-submission-delete-button\n [checksheetSubmission]=\"element\"\n (deleted)=\"onDeleted()\"\n ></app-checksheet-submission-delete-button>\n </div>\n </td>\n </ng-container>\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\n </table>\n <mat-progress-bar *ngIf=\"isWorking\" mode=\"indeterminate\"></mat-progress-bar>\n</mat-card>\n", styles: [".scroll-container{max-height:800px;overflow-y:auto}\n"] }]
106
106
  }], ctorParameters: () => [{ type: i1.AlertService }, { type: i2.UntypedFormBuilder }, { type: i3.ChecksheetSubmissionService }, { type: i1.RequestHelperService }] });
107
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzaGVldC1zdWJtaXNzaW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNoZWNrc2hlZXQvc3JjL2xpYi9jaGVja3NoZWV0L2NoZWNrc2hlZXQtc3VibWlzc2lvbi1saXN0L2NoZWNrc2hlZXQtc3VibWlzc2lvbi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LXN1Ym1pc3Npb24tbGlzdC9jaGVja3NoZWV0LXN1Ym1pc3Npb24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBRUwsa0NBQWtDLEVBQ2xDLFFBQVEsRUFHVCxNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXJCLElBQU0saUNBQWlDLEdBQXZDLE1BQU0saUNBQ1gsU0FBUSxrQ0FBa0M7SUFlaEM7SUFDQTtJQUNBO0lBQ0E7SUFmVixnQkFBZ0IsR0FBVTtRQUN4QixPQUFPO1FBQ1AsTUFBTTtRQUNOLGNBQWM7UUFDZCxjQUFjO1FBQ2QsZUFBZTtRQUNmLGNBQWM7UUFDZCxTQUFTO0tBQ1YsQ0FBQztJQUNGLElBQUksR0FBVyxnQ0FBZ0MsQ0FBQztJQUVoRCxZQUNVLFlBQTBCLEVBQzFCLEVBQXNCLEVBQ3RCLDJCQUF3RCxFQUN4RCxvQkFBMEM7UUFFbEQsS0FBSyxFQUFFLENBQUM7UUFMQSxpQkFB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cEI5QyxpeEtBb0tBOztBRGhKYSxpQ0FBaUM7SUFON0MsWUFBWSxFQUFFO0dBTUYsaUNBQWlDLENBaUY3Qzs7NEZBakZZLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDRSxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgUmVxdWVzdEhlbHBlclNlcnZpY2UsXG4gIFRlY2hsaWZ5TGlzdGluZ0NvbnRyb2xsZXJJbnRlcmZhY2UsXG4gIFRpbWVsaW5lLFxuICBUaW1lbGluZVZhbHVlLFxuICBBbGVydFNlcnZpY2Vcbn0gZnJvbSAnbmd4LXRlY2hsaWZ5LWNvcmUnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95IH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IENoZWNrc2hlZXRTdWJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uL2NoZWNrc2hlZXQtc3VibWlzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jaGVja3NoZWV0LXN1Ym1pc3Npb24tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGVja3NoZWV0LXN1Ym1pc3Npb24tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoZWNrc2hlZXQtc3VibWlzc2lvbi1saXN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tzaGVldFN1Ym1pc3Npb25MaXN0Q29tcG9uZW50XG4gIGV4dGVuZHMgVGVjaGxpZnlMaXN0aW5nQ29udHJvbGxlckludGVyZmFjZVxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBhbnlbXSA9IFtcbiAgICAnaW5kZXgnLFxuICAgICdkYXRlJyxcbiAgICAnZm9ybWF0LnRpdGxlJyxcbiAgICAnY3JlYXRvci5uYW1lJyxcbiAgICAncmV2aWV3ZXIubmFtZScsXG4gICAgJ3N0YXR1cy50aXRsZScsXG4gICAgJ2FjdGlvbnMnXG4gIF07XG4gIHdpdGg6IHN0cmluZyA9ICdmb3JtYXQsY3JlYXRvcixyZXZpZXdlcixzdGF0dXMnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2hlY2tzaGVldFN1Ym1pc3Npb25TZXJ2aWNlOiBDaGVja3NoZWV0U3VibWlzc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXF1ZXN0SGVscGVyU2VydmljZTogUmVxdWVzdEhlbHBlclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoODAwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWxvYWQoKSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkdXJhdGlvbjogW1RpbWVsaW5lLkFMTF0sXG4gICAgICBkYXRlX2Zyb206IFsnJ10sXG4gICAgICBkYXRlX3RvOiBbJyddLFxuICAgICAgc3RhdHVzX2lkczogWycnXSxcbiAgICAgIGNyZWF0b3JfaWRzOiBbJyddLFxuICAgICAgcmV2aWV3ZXJfaWRzOiBbJyddLFxuICAgICAgZm9ybWF0X2lkczogWycnXSxcbiAgICAgIHNvcnRfYnk6IFsnY3JlYXRlZF9hdHxERVNDJ10sXG4gICAgICB3aXRoOiBbdGhpcy53aXRoXVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZERhdGEoKSB7XG4gICAgdGhpcy5pc1dvcmtpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgLi4udGhpcy5yZXF1ZXN0SGVscGVyU2VydmljZS5jb252ZXJ0VG9Gb3JtRGF0YSh0aGlzLmZpbHRlckZvcm0udmFsdWUpLFxuICAgICAgcGVyUGFnZTogdGhpcy5wZXJQYWdlLFxuICAgICAgcGFnZTogdGhpcy5wYWdlXG4gICAgfTtcbiAgICB0aGlzLmNoZWNrc2hlZXRTdWJtaXNzaW9uU2VydmljZS5pbmRleChwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVscyA9IHRoaXMubW9kZWxzLmNvbmNhdChyZXNwb25zZT8uZGF0YSk7XG4gICAgICAgIHRoaXMubGFzdFBhZ2UgPSByZXNwb25zZT8ubGFzdF9wYWdlO1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5pc1dvcmtpbmcgPSBmYWxzZSlcbiAgICB9KTtcbiAgfVxuXG4gIG9uRHVyYXRpb25DaGFuZ2UodGltZWxpbmVWYWx1ZTogVGltZWxpbmVWYWx1ZSkge1xuICAgIGxldCB7IGRhdGVfdG8sIGRhdGVfZnJvbSB9ID0gdGltZWxpbmVWYWx1ZTtcbiAgICB0aGlzLmZpbHRlckZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBkYXRlX2Zyb206IGRhdGVfZnJvbSA/IG1vbWVudChkYXRlX2Zyb20pLmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogJycsXG4gICAgICBkYXRlX3RvOiBkYXRlX3RvID8gbW9tZW50KGRhdGVfdG8pLmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogJydcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY2hlY2tzaGVldCBzdWJtaXNzaW9uIGRlbGV0ZSBldmVudC5cbiAgICovXG4gIG9uRGVsZXRlZCgpIHtcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChcbiAgICAgICdDaGVja3NoZWV0IHN1Ym1pc3Npb24gZGVsZXRlZCBzdWNjZXNzZnVsbHkhJyxcbiAgICAgICdzdWNjZXNzJ1xuICAgICk7XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICA8aDMgY2xhc3M9XCJtLTAgZm9udC13ZWlnaHQtYm9sZFwiPkNoZWNrc2hlZXQgU3VibWlzc2lvbnM8L2gzPlxuICA8YXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi1mb3JtLWJ1dHRvbj48L2FwcC1jaGVja3NoZWV0LXN1Ym1pc3Npb24tZm9ybS1idXR0b24+XG48L2Rpdj5cblxuPG1hdC1jYXJkIGNsYXNzPVwibXQtM1wiPlxuICA8bWF0LWNhcmQtY29udGVudD5cbiAgICA8Zm9ybSBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRHYXA9XCIxcmVtXCIgW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCI+XG4gICAgICA8YXBwLXRpbWVsaW5lLWZpbHRlclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkdXJhdGlvblwiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25EdXJhdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgW2RhdGVGcm9tXT1cImZpbHRlckZvcm0udmFsdWU/LmRhdGVfZnJvbVwiXG4gICAgICAgIFtkYXRlVG9dPVwiZmlsdGVyRm9ybS52YWx1ZT8uZGF0ZV90b1wiXG4gICAgICAgIGFwcGVhcmFuY2U9XCJmaWxsXCJcbiAgICAgID48L2FwcC10aW1lbGluZS1maWx0ZXI+XG5cbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1sYWJlbD5TdGF0dXM8L21hdC1sYWJlbD5cbiAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RhdHVzX2lkc1wiXG4gICAgICAgICAgYXBpVXJsPVwiYXBpL2NoZWNrc2hlZXQtc3VibWlzc2lvbi1zdGF0dXNlc1wiXG4gICAgICAgICAgW2VuYWJsZVNlYXJjaF09XCJmYWxzZVwiXG4gICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8bWF0LWZvcm0tZmllbGQgKm5neFBlcm1pc3Npb25zT25seT1cIlsndXNlcl9yZWFkJ11cIj5cbiAgICAgICAgPG1hdC1sYWJlbD5DcmVhdG9yPC9tYXQtbGFiZWw+XG4gICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNyZWF0b3JfaWRzXCJcbiAgICAgICAgICBhcGlVcmw9XCJhcGkvdXNlcnNcIlxuICAgICAgICAgIFtlbmFibGVTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgdGl0bGVGaWVsZD1cIm5hbWVcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ3hQZXJtaXNzaW9uc09ubHk9XCJbJ3VzZXJfcmVhZCddXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+UmV2aWV3ZXI8L21hdC1sYWJlbD5cbiAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicmV2aWV3ZXJfaWRzXCJcbiAgICAgICAgICBhcGlVcmw9XCJhcGkvdXNlcnNcIlxuICAgICAgICAgIFtlbmFibGVTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgdGl0bGVGaWVsZD1cIm5hbWVcIlxuICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCJcbiAgICAgICAgPlxuICAgICAgICA8L2FwcC1zZWFyY2hhYmxlLXNlbGVjdG9yPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPkNoZWNrc2hlZXQgRm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvclxuICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZvcm1hdF9pZHNcIlxuICAgICAgICAgIGFwaVVybD1cImFwaS9jaGVja3NoZWV0LWZvcm1hdHM/aXNfcHVibGlzaGVkPTFcIlxuICAgICAgICAgIFtlbmFibGVTZWFyY2hdPVwidHJ1ZVwiXG4gICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZm9ybT5cbiAgPC9tYXQtY2FyZC1jb250ZW50PlxuPC9tYXQtY2FyZD5cblxuPG1hdC1jYXJkXG4gIGNsYXNzPVwicC0wIG10LTNcIlxuICBpbmZpbml0ZVNjcm9sbFxuICBbaW5maW5pdGVTY3JvbGxEaXN0YW5jZV09XCIyXCJcbiAgW2luZmluaXRlU2Nyb2xsVGhyb3R0bGVdPVwiNTBcIlxuICAoc2Nyb2xsZWQpPVwib25TY3JvbGwoKVwiXG4gIFtmcm9tUm9vdF09XCJ0cnVlXCJcbj5cbiAgPHRhYmxlXG4gICAgbWF0LXRhYmxlXG4gICAgW2RhdGFTb3VyY2VdPVwibW9kZWxzXCJcbiAgICBjbGFzcz1cInctMTAwXCJcbiAgICBtdWx0aVRlbXBsYXRlRGF0YVJvd3NcbiAgICBhcmlhLWRlc2NyaWJlZGJ5PVwiQ2hlY2tzaGVldCBTdWJtaXNzaW9uc1wiXG4gID5cbiAgICA8IS0tIEluZGV4IENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImluZGV4XCI+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPiM8L3RoPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnQ7IGxldCBpID0gZGF0YUluZGV4XCI+XG4gICAgICAgIHt7IGkgKyAxIH19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBDaGVja3NoZWV0IEZvcm1hdCBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJmb3JtYXQudGl0bGVcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+Q2hlY2tzaGVldCBGb3JtYXQ8L3RoPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAge3sgZWxlbWVudD8uZm9ybWF0Py50aXRsZSB9fVxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gQ3JlYXRvciBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJjcmVhdG9yLm5hbWVcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+Q3JlYXRvcjwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICB7eyBlbGVtZW50Py5jcmVhdG9yPy5uYW1lIH19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBSZXZpZXdlciBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJyZXZpZXdlci5uYW1lXCI+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlJldmlld2VyPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgIHt7IGVsZW1lbnQ/LnJldmlld2VyPy5uYW1lIH19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBTdGF0dXMgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic3RhdHVzLnRpdGxlXCI+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlN0YXR1czwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICB7eyBlbGVtZW50Py5zdGF0dXM/LnRpdGxlIH19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBEYXRlIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImRhdGVcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+RGF0ZTwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICB7eyBlbGVtZW50LmRhdGUgfCBkYXRlIH19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBBY3Rpb25zIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImFjdGlvbnNcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+QWN0aW9uczwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMlwiPlxuICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycuLi9jaGVja3NoZWV0LXN1Ym1pc3Npb25zLXZpZXcnLCBlbGVtZW50Py5pZF1cIlxuICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgdmlzaWJpbGl0eVxuICAgICAgICAgIDwvbWF0LWljb24+XG5cbiAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICpuZ0lmPVwiZWxlbWVudC5zdGF0dXNfaWQgPT09IDFcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiW2VsZW1lbnQ/LmlkLCAndmlldyddXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIGVkaXRcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDxhcHAtY2hlY2tzaGVldC1zdWJtaXNzaW9uLXJldmlldy1idXR0b25cbiAgICAgICAgICAgIFtzdWJtaXNzaW9uXT1cImVsZW1lbnRcIlxuICAgICAgICAgICAgW3JlcXVlc3RQYXJhbXNdPVwieyB3aXRoOiB0aGlzLndpdGggfVwiXG4gICAgICAgICAgICAocmV2aWV3ZWQpPVwicmVsb2FkKClcIlxuICAgICAgICAgID48L2FwcC1jaGVja3NoZWV0LXN1Ym1pc3Npb24tcmV2aWV3LWJ1dHRvbj5cbiAgICAgICAgICA8YXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi1kZWxldGUtYnV0dG9uXG4gICAgICAgICAgICBbY2hlY2tzaGVldFN1Ym1pc3Npb25dPVwiZWxlbWVudFwiXG4gICAgICAgICAgICAoZGVsZXRlZCk9XCJvbkRlbGV0ZWQoKVwiXG4gICAgICAgICAgPjwvYXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi1kZWxldGUtYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uc1wiPjwvdHI+XG4gIDwvdGFibGU+XG4gIDxtYXQtcHJvZ3Jlc3MtYmFyICpuZ0lmPVwiaXNXb3JraW5nXCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIj48L21hdC1wcm9ncmVzcy1iYXI+XG48L21hdC1jYXJkPlxuIl19
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzaGVldC1zdWJtaXNzaW9uLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNoZWNrc2hlZXQvc3JjL2xpYi9jaGVja3NoZWV0L2NoZWNrc2hlZXQtc3VibWlzc2lvbi1saXN0L2NoZWNrc2hlZXQtc3VibWlzc2lvbi1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LXN1Ym1pc3Npb24tbGlzdC9jaGVja3NoZWV0LXN1Ym1pc3Npb24tbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBRUwsa0NBQWtDLEVBQ2xDLFFBQVEsRUFHVCxNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXJCLElBQU0saUNBQWlDLEdBQXZDLE1BQU0saUNBQ1gsU0FBUSxrQ0FBa0M7SUFlaEM7SUFDQTtJQUNBO0lBQ0E7SUFmVixnQkFBZ0IsR0FBVTtRQUN4QixPQUFPO1FBQ1AsTUFBTTtRQUNOLGNBQWM7UUFDZCxjQUFjO1FBQ2QsZUFBZTtRQUNmLGNBQWM7UUFDZCxTQUFTO0tBQ1YsQ0FBQztJQUNGLElBQUksR0FBVyxnQ0FBZ0MsQ0FBQztJQUVoRCxZQUNVLFlBQTBCLEVBQzFCLEVBQXNCLEVBQ3RCLDJCQUF3RCxFQUN4RCxvQkFBMEM7UUFFbEQsS0FBSyxFQUFFLENBQUM7UUFMQSxpQkFB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cEI5QywydktBb0tBOztBRGhKYSxpQ0FBaUM7SUFON0MsWUFBWSxFQUFFO0dBTUYsaUNBQWlDLENBaUY3Qzs7NEZBakZZLGlDQUFpQztrQkFMN0MsU0FBUzsrQkFDRSxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgUmVxdWVzdEhlbHBlclNlcnZpY2UsXG4gIFRlY2hsaWZ5TGlzdGluZ0NvbnRyb2xsZXJJbnRlcmZhY2UsXG4gIFRpbWVsaW5lLFxuICBUaW1lbGluZVZhbHVlLFxuICBBbGVydFNlcnZpY2Vcbn0gZnJvbSAnbmd4LXRlY2hsaWZ5LWNvcmUnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95IH0gZnJvbSAnQG5nbmVhdC91bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IENoZWNrc2hlZXRTdWJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uL2NoZWNrc2hlZXQtc3VibWlzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jaGVja3NoZWV0LXN1Ym1pc3Npb24tbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGVja3NoZWV0LXN1Ym1pc3Npb24tbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoZWNrc2hlZXQtc3VibWlzc2lvbi1saXN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tzaGVldFN1Ym1pc3Npb25MaXN0Q29tcG9uZW50XG4gIGV4dGVuZHMgVGVjaGxpZnlMaXN0aW5nQ29udHJvbGxlckludGVyZmFjZVxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICBkaXNwbGF5ZWRDb2x1bW5zOiBhbnlbXSA9IFtcbiAgICAnaW5kZXgnLFxuICAgICdkYXRlJyxcbiAgICAnZm9ybWF0LnRpdGxlJyxcbiAgICAnY3JlYXRvci5uYW1lJyxcbiAgICAncmV2aWV3ZXIubmFtZScsXG4gICAgJ3N0YXR1cy50aXRsZScsXG4gICAgJ2FjdGlvbnMnXG4gIF07XG4gIHdpdGg6IHN0cmluZyA9ICdmb3JtYXQsY3JlYXRvcixyZXZpZXdlcixzdGF0dXMnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2hlY2tzaGVldFN1Ym1pc3Npb25TZXJ2aWNlOiBDaGVja3NoZWV0U3VibWlzc2lvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXF1ZXN0SGVscGVyU2VydmljZTogUmVxdWVzdEhlbHBlclNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgICB0aGlzLmZpbHRlckZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoODAwKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZWxvYWQoKSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgdGhpcy5maWx0ZXJGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkdXJhdGlvbjogW1RpbWVsaW5lLkFMTF0sXG4gICAgICBkYXRlX2Zyb206IFsnJ10sXG4gICAgICBkYXRlX3RvOiBbJyddLFxuICAgICAgc3RhdHVzX2lkczogWycnXSxcbiAgICAgIGNyZWF0b3JfaWRzOiBbJyddLFxuICAgICAgcmV2aWV3ZXJfaWRzOiBbJyddLFxuICAgICAgZm9ybWF0X2lkczogWycnXSxcbiAgICAgIHNvcnRfYnk6IFsnY3JlYXRlZF9hdHxERVNDJ10sXG4gICAgICB3aXRoOiBbdGhpcy53aXRoXVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZERhdGEoKSB7XG4gICAgdGhpcy5pc1dvcmtpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgLi4udGhpcy5yZXF1ZXN0SGVscGVyU2VydmljZS5jb252ZXJ0VG9Gb3JtRGF0YSh0aGlzLmZpbHRlckZvcm0udmFsdWUpLFxuICAgICAgcGVyUGFnZTogdGhpcy5wZXJQYWdlLFxuICAgICAgcGFnZTogdGhpcy5wYWdlXG4gICAgfTtcbiAgICB0aGlzLmNoZWNrc2hlZXRTdWJtaXNzaW9uU2VydmljZS5pbmRleChwYXJhbXMpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm1vZGVscyA9IHRoaXMubW9kZWxzLmNvbmNhdChyZXNwb25zZT8uZGF0YSk7XG4gICAgICAgIHRoaXMubGFzdFBhZ2UgPSByZXNwb25zZT8ubGFzdF9wYWdlO1xuICAgICAgICB0aGlzLmlzV29ya2luZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5pc1dvcmtpbmcgPSBmYWxzZSlcbiAgICB9KTtcbiAgfVxuXG4gIG9uRHVyYXRpb25DaGFuZ2UodGltZWxpbmVWYWx1ZTogVGltZWxpbmVWYWx1ZSkge1xuICAgIGxldCB7IGRhdGVfdG8sIGRhdGVfZnJvbSB9ID0gdGltZWxpbmVWYWx1ZTtcbiAgICB0aGlzLmZpbHRlckZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBkYXRlX2Zyb206IGRhdGVfZnJvbSA/IG1vbWVudChkYXRlX2Zyb20pLmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogJycsXG4gICAgICBkYXRlX3RvOiBkYXRlX3RvID8gbW9tZW50KGRhdGVfdG8pLmZvcm1hdCgnWVlZWS1NTS1ERCcpIDogJydcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY2hlY2tzaGVldCBzdWJtaXNzaW9uIGRlbGV0ZSBldmVudC5cbiAgICovXG4gIG9uRGVsZXRlZCgpIHtcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChcbiAgICAgICdDaGVja3NoZWV0IHN1Ym1pc3Npb24gZGVsZXRlZCBzdWNjZXNzZnVsbHkhJyxcbiAgICAgICdzdWNjZXNzJ1xuICAgICk7XG4gICAgdGhpcy5yZWxvYWQoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICA8aDMgY2xhc3M9XCJtLTAgZm9udC13ZWlnaHQtYm9sZFwiPkNoZWNrc2hlZXQgU3VibWlzc2lvbnM8L2gzPlxuICA8YXBwLWNoZWNrc2hlZXQtZm9ybS1idXR0b24+PC9hcHAtY2hlY2tzaGVldC1mb3JtLWJ1dHRvbj5cbjwvZGl2PlxuXG48bWF0LWNhcmQgY2xhc3M9XCJtdC0zXCI+XG4gIDxtYXQtY2FyZC1jb250ZW50PlxuICAgIDxmb3JtIGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEdhcD1cIjFyZW1cIiBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1cIj5cbiAgICAgIDxhcHAtdGltZWxpbmUtZmlsdGVyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImR1cmF0aW9uXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkR1cmF0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGF0ZUZyb21dPVwiZmlsdGVyRm9ybS52YWx1ZT8uZGF0ZV9mcm9tXCJcbiAgICAgICAgW2RhdGVUb109XCJmaWx0ZXJGb3JtLnZhbHVlPy5kYXRlX3RvXCJcbiAgICAgICAgYXBwZWFyYW5jZT1cImZpbGxcIlxuICAgICAgPjwvYXBwLXRpbWVsaW5lLWZpbHRlcj5cblxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPlN0YXR1czwvbWF0LWxhYmVsPlxuICAgICAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3JcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdGF0dXNfaWRzXCJcbiAgICAgICAgICBhcGlVcmw9XCJhcGkvY2hlY2tzaGVldC1zdWJtaXNzaW9uLXN0YXR1c2VzXCJcbiAgICAgICAgICBbZW5hYmxlU2VhcmNoXT1cImZhbHNlXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmd4UGVybWlzc2lvbnNPbmx5PVwiWyd1c2VyX3JlYWQnXVwiPlxuICAgICAgICA8bWF0LWxhYmVsPkNyZWF0b3I8L21hdC1sYWJlbD5cbiAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3JlYXRvcl9pZHNcIlxuICAgICAgICAgIGFwaVVybD1cImFwaS91c2Vyc1wiXG4gICAgICAgICAgW2VuYWJsZVNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICB0aXRsZUZpZWxkPVwibmFtZVwiXG4gICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8bWF0LWZvcm0tZmllbGQgKm5neFBlcm1pc3Npb25zT25seT1cIlsndXNlcl9yZWFkJ11cIj5cbiAgICAgICAgPG1hdC1sYWJlbD5SZXZpZXdlcjwvbWF0LWxhYmVsPlxuICAgICAgICA8YXBwLXNlYXJjaGFibGUtc2VsZWN0b3JcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZXZpZXdlcl9pZHNcIlxuICAgICAgICAgIGFwaVVybD1cImFwaS91c2Vyc1wiXG4gICAgICAgICAgW2VuYWJsZVNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICB0aXRsZUZpZWxkPVwibmFtZVwiXG4gICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgICA+XG4gICAgICAgIDwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+Q2hlY2tzaGVldCBGb3JtYXQ8L21hdC1sYWJlbD5cbiAgICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZm9ybWF0X2lkc1wiXG4gICAgICAgICAgYXBpVXJsPVwiYXBpL2NoZWNrc2hlZXQtZm9ybWF0cz9pc19wdWJsaXNoZWQ9MVwiXG4gICAgICAgICAgW2VuYWJsZVNlYXJjaF09XCJ0cnVlXCJcbiAgICAgICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICAgID5cbiAgICAgICAgPC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9mb3JtPlxuICA8L21hdC1jYXJkLWNvbnRlbnQ+XG48L21hdC1jYXJkPlxuXG48bWF0LWNhcmRcbiAgY2xhc3M9XCJwLTAgbXQtM1wiXG4gIGluZmluaXRlU2Nyb2xsXG4gIFtpbmZpbml0ZVNjcm9sbERpc3RhbmNlXT1cIjJcIlxuICBbaW5maW5pdGVTY3JvbGxUaHJvdHRsZV09XCI1MFwiXG4gIChzY3JvbGxlZCk9XCJvblNjcm9sbCgpXCJcbiAgW2Zyb21Sb290XT1cInRydWVcIlxuPlxuICA8dGFibGVcbiAgICBtYXQtdGFibGVcbiAgICBbZGF0YVNvdXJjZV09XCJtb2RlbHNcIlxuICAgIGNsYXNzPVwidy0xMDBcIlxuICAgIG11bHRpVGVtcGxhdGVEYXRhUm93c1xuICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJDaGVja3NoZWV0IFN1Ym1pc3Npb25zXCJcbiAgPlxuICAgIDwhLS0gSW5kZXggQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiaW5kZXhcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+IzwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudDsgbGV0IGkgPSBkYXRhSW5kZXhcIj5cbiAgICAgICAge3sgaSArIDEgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIENoZWNrc2hlZXQgRm9ybWF0IENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImZvcm1hdC50aXRsZVwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5DaGVja3NoZWV0IEZvcm1hdDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZWxlbWVudFwiPlxuICAgICAgICB7eyBlbGVtZW50Py5mb3JtYXQ/LnRpdGxlIH19XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBDcmVhdG9yIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cImNyZWF0b3IubmFtZVwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5DcmVhdG9yPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgIHt7IGVsZW1lbnQ/LmNyZWF0b3I/Lm5hbWUgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIFJldmlld2VyIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInJldmlld2VyLm5hbWVcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+UmV2aWV3ZXI8L3RoPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGVsZW1lbnRcIj5cbiAgICAgICAge3sgZWxlbWVudD8ucmV2aWV3ZXI/Lm5hbWUgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIFN0YXR1cyBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJzdGF0dXMudGl0bGVcIj5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+U3RhdHVzPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgIHt7IGVsZW1lbnQ/LnN0YXR1cz8udGl0bGUgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERhdGUgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZGF0ZVwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5EYXRlPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50XCI+XG4gICAgICAgIHt7IGVsZW1lbnQuZGF0ZSB8IGRhdGUgfX1cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIEFjdGlvbnMgQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiYWN0aW9uc1wiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5BY3Rpb25zPC90aD5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCBlbGVtZW50O1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy4uL2NoZWNrc2hlZXQtc3VibWlzc2lvbnMtdmlldycsIGVsZW1lbnQ/LmlkXVwiXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB2aXNpYmlsaXR5XG4gICAgICAgICAgPC9tYXQtaWNvbj5cblxuICAgICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICAgKm5nSWY9XCJlbGVtZW50LnN0YXR1c19pZCA9PT0gMVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJbZWxlbWVudD8uaWQsICd2aWV3J11cIlxuICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgZWRpdFxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPGFwcC1jaGVja3NoZWV0LXN1Ym1pc3Npb24tcmV2aWV3LWJ1dHRvblxuICAgICAgICAgICAgW3N1Ym1pc3Npb25dPVwiZWxlbWVudFwiXG4gICAgICAgICAgICBbcmVxdWVzdFBhcmFtc109XCJ7IHdpdGg6IHRoaXMud2l0aCB9XCJcbiAgICAgICAgICAgIChyZXZpZXdlZCk9XCJyZWxvYWQoKVwiXG4gICAgICAgICAgPjwvYXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi1yZXZpZXctYnV0dG9uPlxuICAgICAgICAgIDxhcHAtY2hlY2tzaGVldC1zdWJtaXNzaW9uLWRlbGV0ZS1idXR0b25cbiAgICAgICAgICAgIFtjaGVja3NoZWV0U3VibWlzc2lvbl09XCJlbGVtZW50XCJcbiAgICAgICAgICAgIChkZWxldGVkKT1cIm9uRGVsZXRlZCgpXCJcbiAgICAgICAgICA+PC9hcHAtY2hlY2tzaGVldC1zdWJtaXNzaW9uLWRlbGV0ZS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImRpc3BsYXllZENvbHVtbnNcIj48L3RyPlxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zXCI+PC90cj5cbiAgPC90YWJsZT5cbiAgPG1hdC1wcm9ncmVzcy1iYXIgKm5nSWY9XCJpc1dvcmtpbmdcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cbjwvbWF0LWNhcmQ+XG4iXX0=
@@ -11,7 +11,7 @@ import * as i6 from "@angular/router";
11
11
  import * as i7 from "../checksheet.service";
12
12
  import * as i8 from "@angular/material/card";
13
13
  import * as i9 from "../checksheet-question-list/checksheet-question-list.component";
14
- import * as i10 from "../checksheet-submission-form/checksheet-submission-form.component";
14
+ import * as i10 from "../checksheet-form/checksheet-form.component";
15
15
  const errorMessages = {
16
16
  date: {
17
17
  required: 'Date is required',
@@ -133,10 +133,10 @@ export class ChecksheetSubmissionViewComponent {
133
133
  });
134
134
  }
135
135
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetSubmissionViewComponent, deps: [{ token: i1.FormValidatorService }, { token: i2.UntypedFormBuilder }, { token: i3.NgxSpinnerService }, { token: i1.AlertService }, { token: i4.Location }, { token: i1.ErrorHandlerService }, { token: i1.DataManager }, { token: i5.MatDialog }, { token: i6.ActivatedRoute }, { token: i7.ChecksheetService }], target: i0.ɵɵFactoryTarget.Component });
136
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChecksheetSubmissionViewComponent, selector: "app-checksheet-submission-view", ngImport: i0, template: "<div>\n <h2 class=\"m-0\">Checksheet</h2>\n\n <div class=\"d-flex justify-content-start align-items-start gap-1\">\n <app-checksheet-question-list\n *ngIf=\"submission\"\n class=\"w-100 p-4\"\n [submission]=\"submission\"\n style=\"width: calc(70% - 1rem)\"\n >\n </app-checksheet-question-list>\n <div style=\"width: calc(30% - 1rem)\">\n <mat-card class=\"w-100\" *ngIf=\"submission\">\n <app-checksheet-submission-form\n (cancelled)=\"redirectBack()\"\n (saved)=\"onSaved()\"\n [checksheetSubmission]=\"submission\"\n ></app-checksheet-submission-form>\n </mat-card>\n <mat-card class=\"mt-2 p-0\" *ngIf=\"submission?.id\">\n <app-note-list\n [relatedModelId]=\"submission?.id\"\n modelType=\"ChecksheetSubmission\"\n ></app-note-list>\n </mat-card>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i1.NoteListComponent, selector: "app-note-list", inputs: ["relatedModelId", "modelType", "readonly", "labelText", "commentsView", "viewMode"] }, { kind: "component", type: i9.ChecksheetQuestionListComponent, selector: "app-checksheet-question-list", inputs: ["checksheet", "submission", "disableInput"], outputs: ["checksheetChange"] }, { kind: "component", type: i10.ChecksheetSubmissionFormComponent, selector: "app-checksheet-submission-form", inputs: ["submittableType", "submittableId", "checksheetSubmission"], outputs: ["cancelled", "saved"] }] });
136
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChecksheetSubmissionViewComponent, selector: "app-checksheet-submission-view", ngImport: i0, template: "<div>\n <h2 class=\"m-0\">Checksheet</h2>\n\n <div class=\"d-flex justify-content-start align-items-start gap-1\">\n <app-checksheet-question-list\n *ngIf=\"submission\"\n class=\"w-100 p-4\"\n [submission]=\"submission\"\n style=\"width: calc(70% - 1rem)\"\n >\n </app-checksheet-question-list>\n <div style=\"width: calc(30% - 1rem)\">\n <mat-card class=\"w-100\" *ngIf=\"submission\">\n <app-checksheet-form\n (cancelled)=\"redirectBack()\"\n (saved)=\"onSaved()\"\n [checksheetSubmission]=\"submission\"\n [submittableType]=\"submission?.submittable_type\"\n [submittableId]=\"submission?.submission_id\"\n ></app-checksheet-form>\n </mat-card>\n <mat-card class=\"mt-2 p-0\" *ngIf=\"submission?.id\">\n <app-note-list\n [relatedModelId]=\"submission?.id\"\n modelType=\"ChecksheetSubmission\"\n ></app-note-list>\n </mat-card>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i1.NoteListComponent, selector: "app-note-list", inputs: ["relatedModelId", "modelType", "readonly", "labelText", "commentsView", "viewMode"] }, { kind: "component", type: i9.ChecksheetQuestionListComponent, selector: "app-checksheet-question-list", inputs: ["checksheet", "submission", "disableInput"], outputs: ["checksheetChange"] }, { kind: "component", type: i10.ChecksheetFormComponent, selector: "app-checksheet-form", inputs: ["submittableType", "submittableId", "checksheetSubmission"], outputs: ["cancelled", "saved"] }] });
137
137
  }
138
138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetSubmissionViewComponent, decorators: [{
139
139
  type: Component,
140
- args: [{ selector: 'app-checksheet-submission-view', template: "<div>\n <h2 class=\"m-0\">Checksheet</h2>\n\n <div class=\"d-flex justify-content-start align-items-start gap-1\">\n <app-checksheet-question-list\n *ngIf=\"submission\"\n class=\"w-100 p-4\"\n [submission]=\"submission\"\n style=\"width: calc(70% - 1rem)\"\n >\n </app-checksheet-question-list>\n <div style=\"width: calc(30% - 1rem)\">\n <mat-card class=\"w-100\" *ngIf=\"submission\">\n <app-checksheet-submission-form\n (cancelled)=\"redirectBack()\"\n (saved)=\"onSaved()\"\n [checksheetSubmission]=\"submission\"\n ></app-checksheet-submission-form>\n </mat-card>\n <mat-card class=\"mt-2 p-0\" *ngIf=\"submission?.id\">\n <app-note-list\n [relatedModelId]=\"submission?.id\"\n modelType=\"ChecksheetSubmission\"\n ></app-note-list>\n </mat-card>\n </div>\n </div>\n</div>\n" }]
140
+ args: [{ selector: 'app-checksheet-submission-view', template: "<div>\n <h2 class=\"m-0\">Checksheet</h2>\n\n <div class=\"d-flex justify-content-start align-items-start gap-1\">\n <app-checksheet-question-list\n *ngIf=\"submission\"\n class=\"w-100 p-4\"\n [submission]=\"submission\"\n style=\"width: calc(70% - 1rem)\"\n >\n </app-checksheet-question-list>\n <div style=\"width: calc(30% - 1rem)\">\n <mat-card class=\"w-100\" *ngIf=\"submission\">\n <app-checksheet-form\n (cancelled)=\"redirectBack()\"\n (saved)=\"onSaved()\"\n [checksheetSubmission]=\"submission\"\n [submittableType]=\"submission?.submittable_type\"\n [submittableId]=\"submission?.submission_id\"\n ></app-checksheet-form>\n </mat-card>\n <mat-card class=\"mt-2 p-0\" *ngIf=\"submission?.id\">\n <app-note-list\n [relatedModelId]=\"submission?.id\"\n modelType=\"ChecksheetSubmission\"\n ></app-note-list>\n </mat-card>\n </div>\n </div>\n</div>\n" }]
141
141
  }], ctorParameters: () => [{ type: i1.FormValidatorService }, { type: i2.UntypedFormBuilder }, { type: i3.NgxSpinnerService }, { type: i1.AlertService }, { type: i4.Location }, { type: i1.ErrorHandlerService }, { type: i1.DataManager }, { type: i5.MatDialog }, { type: i6.ActivatedRoute }, { type: i7.ChecksheetService }] });
142
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzaGVldC1zdWJtaXNzaW9uLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNoZWNrc2hlZXQvc3JjL2xpYi9jaGVja3NoZWV0L2NoZWNrc2hlZXQtc3VibWlzc2lvbi12aWV3L2NoZWNrc2hlZXQtc3VibWlzc2lvbi12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LXN1Ym1pc3Npb24tdmlldy9jaGVja3NoZWV0LXN1Ym1pc3Npb24tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBdUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEYsT0FBTyxFQUE0QixhQUFhLEVBQTRDLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7OztBQUl0SCxNQUFNLGFBQWEsR0FBUTtJQUN6QixJQUFJLEVBQUU7UUFDSixRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLE9BQU8sRUFBRSxjQUFjO0tBQ3hCO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLHFCQUFxQjtLQUNoQztJQUNELG9CQUFvQixFQUFFO1FBQ3BCLFFBQVEsRUFBRSwrQkFBK0I7S0FDMUM7SUFDRCxTQUFTLEVBQUU7UUFDVCxRQUFRLEVBQUUsb0JBQW9CO0tBQy9CO0NBQ0YsQ0FBQztBQU9GLE1BQU0sT0FBTyxpQ0FBaUM7SUFPbEM7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQUNDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFmVix3QkFBd0IsQ0FBb0I7SUFDNUMsVUFBVSxDQUFNO0lBQ2hCLGNBQWMsQ0FBTTtJQUNwQixZQUFZLENBQVM7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QUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakIsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkMsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ2xCLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNmLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNkLG9CQUFvQixFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDaEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FqSVUsaUNBQWlDOzRGQUFqQyxpQ0FBaUMsc0VDOUI5QyxpNUJBNEJBOzs0RkRFYSxpQ0FBaUM7a0JBTDdDLFNBQVM7K0JBQ0UsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QWxlcnRTZXJ2aWNlLCBEYXRhTWFuYWdlciwgRGF0ZVZhbGlkYXRvciwgRXJyb3JIYW5kbGVyU2VydmljZSwgRm9ybVZhbGlkYXRvclNlcnZpY2V9IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcbmltcG9ydCB7Tmd4U3Bpbm5lclNlcnZpY2V9IGZyb20gJ25neC1zcGlubmVyJztcbmltcG9ydCB7Q2hlY2tzaGVldFNlcnZpY2V9IGZyb20gXCIuLi9jaGVja3NoZWV0LnNlcnZpY2VcIjtcblxuY29uc3QgZXJyb3JNZXNzYWdlczogYW55ID0ge1xuICBkYXRlOiB7XG4gICAgcmVxdWlyZWQ6ICdEYXRlIGlzIHJlcXVpcmVkJyxcbiAgICBpbnZhbGlkOiAnSW52YWxpZCBkYXRlJ1xuICB9LFxuICBtb2RlbF9pZDoge1xuICAgIHJlcXVpcmVkOiAnVmVoaWNsZSBpcyByZXF1aXJlZCdcbiAgfSxcbiAgY2hlY2tzaGVldF9mb3JtYXRfaWQ6IHtcbiAgICByZXF1aXJlZDogJ0NoZWNrc2hlZXQgRm9ybWF0IGlzIHJlcXVpcmVkJ1xuICB9LFxuICBzdGF0dXNfaWQ6IHtcbiAgICByZXF1aXJlZDogJ1N0YXR1cyBpcyByZXF1aXJlZCdcbiAgfVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrc2hlZXQtc3VibWlzc2lvbi12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2tzaGVldC1zdWJtaXNzaW9uLXZpZXcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja3NoZWV0U3VibWlzc2lvblZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjaGVja3NoZWV0U3VibWlzc2lvbkZvcm0hOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBzdWJtaXNzaW9uOiBhbnk7XG4gIHNlbGVjdGVkRm9ybWF0OiBhbnk7XG4gIHN1Ym1pc3Npb25JZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybVZhbGlkYXRvclNlcnZpY2U6IEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHB1YmxpYyBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhTWFuYWdlcjogRGF0YU1hbmFnZXIsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHNlcnZpY2U6IENoZWNrc2hlZXRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3VibWlzc2lvbklkID0gcGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ3N1Ym1pc3Npb25JZCddKTtcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1Ym1pc3Npb25JZCkge1xuICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAgIHdpdGg6ICdmb3JtYXQucXVlc3Rpb25zLnR5cGUsZm9ybWF0LnF1ZXN0aW9ucy5hbnN3ZXJzJ1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAuc2hvdyh0aGlzLnN1Ym1pc3Npb25JZCwgcGFyYW1zKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXNzaW9uID0gcmVzcG9uc2U/Lml0ZW07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9ybWF0ID0gdGhpcy5zdWJtaXNzaW9uPy5mb3JtYXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWRpcmVjdEJhY2soKSB7XG4gICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gIH1cblxuICAvKipNZXRob2QgdG8gZXZhbHVhdGUgZm9ybSBmaWVsZHMqL1xuICBpc0ZpZWxkVmFsaWQoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZGF0b3JTZXJ2aWNlLmlzRmllbGRWYWxpZChcbiAgICAgIGZpZWxkLFxuICAgICAgdGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbkZvcm1cbiAgICApO1xuICB9XG5cbiAgLyoqTWV0aG9kIHRvIGZpbmQgZXJyb3IgaW4gZm9ybSBmaWVsZHMqL1xuICBnZXRFcnJvck1lc3NhZ2UoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZGF0b3JTZXJ2aWNlLmdldEVycm9yTWVzc2FnZShcbiAgICAgIGZpZWxkLFxuICAgICAgdGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbkZvcm0sXG4gICAgICBlcnJvck1lc3NhZ2VzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICBpZiAodGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbkZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xuICAgICAgbGV0IHJlc3VsdDogYW55O1xuICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmNoZWNrc2hlZXRTdWJtaXNzaW9uRm9ybS52YWx1ZTtcbiAgICAgIGNvbnN0IHN1Ym1pc3Npb24gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMuZGF0YU1hbmFnZXIuR0VUKFxuICAgICAgICAgIGBhcGkvY2hlY2tzaGVldC1zdWJtaXNzaW9ucy8ke3RoaXMuc3VibWlzc2lvbi5pZH1gXG4gICAgICAgIClcbiAgICAgICkuaXRlbTtcbiAgICAgIC8vU3VibWlzc2lvbiBWYWxpZGF0aW9uIGZvciBNU1FZTlxuICAgICAgbGV0IHZhbGlkU3VibWlzc2lvbiA9IHRydWU7XG4gICAgICAoKHN1Ym1pc3Npb24uZm9ybWF0LnF1ZXN0aW9ucyBhcyBbXSkgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoKHF1ZXN0aW9uOiBhbnkpID0+IHF1ZXN0aW9uLnR5cGVfaWQgPT09IDcpXG4gICAgICAgIC5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcXVlc3Rpb24/LnN1Ym1pdHRlZF9hbnN3ZXJzID09IG51bGwgfHxcbiAgICAgICAgICAgICgocXVlc3Rpb24/LmFuc3dlcnMgYXMgW10pIHx8IFtdKS5sZW5ndGggPlxuICAgICAgICAgICAgKChxdWVzdGlvbj8uc3VibWl0dGVkX2Fuc3dlcj8ubXNxX2Fuc3dlciBhcyBbXSkgfHwgW10pLmxlbmd0aFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoXG4gICAgICAgICAgICAgIGBBbnN3ZXIgYWxsIHRoZSByZXF1aXJlZCBZZXMvTm8gUXVlc3Rpb25gLFxuICAgICAgICAgICAgICAnd2FybidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YWxpZFN1Ym1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgaWYgKCF2YWxpZFN1Ym1pc3Npb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5kYXRhTWFuYWdlci5QVVQoXG4gICAgICAgICAgYGFwaS9jaGVja3NoZWV0LXN1Ym1pc3Npb25zLyR7bW9kZWwuaWR9YCxcbiAgICAgICAgICBtb2RlbFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChcbiAgICAgICAgICAnQ2hlY2tzaGVldCBTdWJtaXNzaW9uIHNhdmVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICAgICAgJ3N1Y2Nlc3MnXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAnVW5hYmxlIHRvIHNhdmUgY2hlY2tzaGVldCBzdWJtaXNzaW9uLCB0cnkgbGF0ZXInXG4gICAgICAgICk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNhdmVkKCkge1xuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KFxuICAgICAgJ0NoZWNrc2hlZXQgc3VibWlzc2lvbiBzYXZlZCBzdWNjZXNzZnVsbHkhJyxcbiAgICAgICdzdWNjZXNzJ1xuICAgICk7XG4gICAgdGhpcy5yZWRpcmVjdEJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICB0aGlzLmNoZWNrc2hlZXRTdWJtaXNzaW9uRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgaWQ6IFsnJ10sXG4gICAgICBkYXRlOiBbJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgRGF0ZVZhbGlkYXRvcigpXSldLFxuICAgICAgcmV2aWV3ZXJfaWQ6IFsnJ10sXG4gICAgICBtb2RlbF9pZDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG1vZGVsOiBbJ3ZlaGljbGUnXSxcbiAgICAgIHN0YXR1c19pZDogWycnXSxcbiAgICAgIGNvbW1lbnRzOiBbJyddLFxuICAgICAgY2hlY2tzaGVldF9mb3JtYXRfaWQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPGgyIGNsYXNzPVwibS0wXCI+Q2hlY2tzaGVldDwvaDI+XG5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtc3RhcnQgZ2FwLTFcIj5cbiAgICA8YXBwLWNoZWNrc2hlZXQtcXVlc3Rpb24tbGlzdFxuICAgICAgKm5nSWY9XCJzdWJtaXNzaW9uXCJcbiAgICAgIGNsYXNzPVwidy0xMDAgcC00XCJcbiAgICAgIFtzdWJtaXNzaW9uXT1cInN1Ym1pc3Npb25cIlxuICAgICAgc3R5bGU9XCJ3aWR0aDogY2FsYyg3MCUgLSAxcmVtKVwiXG4gICAgPlxuICAgIDwvYXBwLWNoZWNrc2hlZXQtcXVlc3Rpb24tbGlzdD5cbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IGNhbGMoMzAlIC0gMXJlbSlcIj5cbiAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJzdWJtaXNzaW9uXCI+XG4gICAgICAgIDxhcHAtY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZvcm1cbiAgICAgICAgICAoY2FuY2VsbGVkKT1cInJlZGlyZWN0QmFjaygpXCJcbiAgICAgICAgICAoc2F2ZWQpPVwib25TYXZlZCgpXCJcbiAgICAgICAgICBbY2hlY2tzaGVldFN1Ym1pc3Npb25dPVwic3VibWlzc2lvblwiXG4gICAgICAgID48L2FwcC1jaGVja3NoZWV0LXN1Ym1pc3Npb24tZm9ybT5cbiAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICA8bWF0LWNhcmQgY2xhc3M9XCJtdC0yIHAtMFwiICpuZ0lmPVwic3VibWlzc2lvbj8uaWRcIj5cbiAgICAgICAgPGFwcC1ub3RlLWxpc3RcbiAgICAgICAgICBbcmVsYXRlZE1vZGVsSWRdPVwic3VibWlzc2lvbj8uaWRcIlxuICAgICAgICAgIG1vZGVsVHlwZT1cIkNoZWNrc2hlZXRTdWJtaXNzaW9uXCJcbiAgICAgICAgPjwvYXBwLW5vdGUtbGlzdD5cbiAgICAgIDwvbWF0LWNhcmQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzaGVldC1zdWJtaXNzaW9uLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNoZWNrc2hlZXQvc3JjL2xpYi9jaGVja3NoZWV0L2NoZWNrc2hlZXQtc3VibWlzc2lvbi12aWV3L2NoZWNrc2hlZXQtc3VibWlzc2lvbi12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LXN1Ym1pc3Npb24tdmlldy9jaGVja3NoZWV0LXN1Ym1pc3Npb24tdmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsU0FBUyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBdUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEYsT0FBTyxFQUE0QixhQUFhLEVBQTRDLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7OztBQUl0SCxNQUFNLGFBQWEsR0FBUTtJQUN6QixJQUFJLEVBQUU7UUFDSixRQUFRLEVBQUUsa0JBQWtCO1FBQzVCLE9BQU8sRUFBRSxjQUFjO0tBQ3hCO0lBQ0QsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLHFCQUFxQjtLQUNoQztJQUNELG9CQUFvQixFQUFFO1FBQ3BCLFFBQVEsRUFBRSwrQkFBK0I7S0FDMUM7SUFDRCxTQUFTLEVBQUU7UUFDVCxRQUFRLEVBQUUsb0JBQW9CO0tBQy9CO0NBQ0YsQ0FBQztBQU9GLE1BQU0sT0FBTyxpQ0FBaUM7SUFPbEM7SUFDQTtJQUNBO0lBQ0E7SUFDRDtJQUNDO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFmVix3QkFBd0IsQ0FBb0I7SUFDNUMsVUFBVSxDQUFNO0lBQ2hCLGNBQWMsQ0FBTTtJQUNwQixZQUFZLENBQVM7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QUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakIsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkMsS0FBSyxFQUFFLENBQUMsU0FBUyxDQUFDO1lBQ2xCLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNmLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNkLG9CQUFvQixFQUFFLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDaEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0FqSVUsaUNBQWlDOzRGQUFqQyxpQ0FBaUMsc0VDOUI5QyxrL0JBOEJBOzs0RkRBYSxpQ0FBaUM7a0JBTDdDLFNBQVM7K0JBQ0UsZ0NBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TWF0RGlhbG9nfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7QWxlcnRTZXJ2aWNlLCBEYXRhTWFuYWdlciwgRGF0ZVZhbGlkYXRvciwgRXJyb3JIYW5kbGVyU2VydmljZSwgRm9ybVZhbGlkYXRvclNlcnZpY2V9IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcbmltcG9ydCB7Tmd4U3Bpbm5lclNlcnZpY2V9IGZyb20gJ25neC1zcGlubmVyJztcbmltcG9ydCB7Q2hlY2tzaGVldFNlcnZpY2V9IGZyb20gXCIuLi9jaGVja3NoZWV0LnNlcnZpY2VcIjtcblxuY29uc3QgZXJyb3JNZXNzYWdlczogYW55ID0ge1xuICBkYXRlOiB7XG4gICAgcmVxdWlyZWQ6ICdEYXRlIGlzIHJlcXVpcmVkJyxcbiAgICBpbnZhbGlkOiAnSW52YWxpZCBkYXRlJ1xuICB9LFxuICBtb2RlbF9pZDoge1xuICAgIHJlcXVpcmVkOiAnVmVoaWNsZSBpcyByZXF1aXJlZCdcbiAgfSxcbiAgY2hlY2tzaGVldF9mb3JtYXRfaWQ6IHtcbiAgICByZXF1aXJlZDogJ0NoZWNrc2hlZXQgRm9ybWF0IGlzIHJlcXVpcmVkJ1xuICB9LFxuICBzdGF0dXNfaWQ6IHtcbiAgICByZXF1aXJlZDogJ1N0YXR1cyBpcyByZXF1aXJlZCdcbiAgfVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi12aWV3JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrc2hlZXQtc3VibWlzc2lvbi12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2tzaGVldC1zdWJtaXNzaW9uLXZpZXcuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja3NoZWV0U3VibWlzc2lvblZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjaGVja3NoZWV0U3VibWlzc2lvbkZvcm0hOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBzdWJtaXNzaW9uOiBhbnk7XG4gIHNlbGVjdGVkRm9ybWF0OiBhbnk7XG4gIHN1Ym1pc3Npb25JZDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybVZhbGlkYXRvclNlcnZpY2U6IEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHB1YmxpYyBsb2NhdGlvbjogTG9jYXRpb24sXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXI6IEVycm9ySGFuZGxlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhTWFuYWdlcjogRGF0YU1hbmFnZXIsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHNlcnZpY2U6IENoZWNrc2hlZXRTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3VibWlzc2lvbklkID0gcGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ3N1Ym1pc3Npb25JZCddKTtcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1Ym1pc3Npb25JZCkge1xuICAgICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAgIHdpdGg6ICdmb3JtYXQucXVlc3Rpb25zLnR5cGUsZm9ybWF0LnF1ZXN0aW9ucy5hbnN3ZXJzJ1xuICAgICAgfTtcbiAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAuc2hvdyh0aGlzLnN1Ym1pc3Npb25JZCwgcGFyYW1zKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXNzaW9uID0gcmVzcG9uc2U/Lml0ZW07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9ybWF0ID0gdGhpcy5zdWJtaXNzaW9uPy5mb3JtYXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICByZWRpcmVjdEJhY2soKSB7XG4gICAgdGhpcy5sb2NhdGlvbi5iYWNrKCk7XG4gIH1cblxuICAvKipNZXRob2QgdG8gZXZhbHVhdGUgZm9ybSBmaWVsZHMqL1xuICBpc0ZpZWxkVmFsaWQoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZGF0b3JTZXJ2aWNlLmlzRmllbGRWYWxpZChcbiAgICAgIGZpZWxkLFxuICAgICAgdGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbkZvcm1cbiAgICApO1xuICB9XG5cbiAgLyoqTWV0aG9kIHRvIGZpbmQgZXJyb3IgaW4gZm9ybSBmaWVsZHMqL1xuICBnZXRFcnJvck1lc3NhZ2UoZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmZvcm1WYWxpZGF0b3JTZXJ2aWNlLmdldEVycm9yTWVzc2FnZShcbiAgICAgIGZpZWxkLFxuICAgICAgdGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbkZvcm0sXG4gICAgICBlcnJvck1lc3NhZ2VzXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICBpZiAodGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbkZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xuICAgICAgbGV0IHJlc3VsdDogYW55O1xuICAgICAgY29uc3QgbW9kZWwgPSB0aGlzLmNoZWNrc2hlZXRTdWJtaXNzaW9uRm9ybS52YWx1ZTtcbiAgICAgIGNvbnN0IHN1Ym1pc3Npb24gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMuZGF0YU1hbmFnZXIuR0VUKFxuICAgICAgICAgIGBhcGkvY2hlY2tzaGVldC1zdWJtaXNzaW9ucy8ke3RoaXMuc3VibWlzc2lvbi5pZH1gXG4gICAgICAgIClcbiAgICAgICkuaXRlbTtcbiAgICAgIC8vU3VibWlzc2lvbiBWYWxpZGF0aW9uIGZvciBNU1FZTlxuICAgICAgbGV0IHZhbGlkU3VibWlzc2lvbiA9IHRydWU7XG4gICAgICAoKHN1Ym1pc3Npb24uZm9ybWF0LnF1ZXN0aW9ucyBhcyBbXSkgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoKHF1ZXN0aW9uOiBhbnkpID0+IHF1ZXN0aW9uLnR5cGVfaWQgPT09IDcpXG4gICAgICAgIC5mb3JFYWNoKChxdWVzdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcXVlc3Rpb24/LnN1Ym1pdHRlZF9hbnN3ZXJzID09IG51bGwgfHxcbiAgICAgICAgICAgICgocXVlc3Rpb24/LmFuc3dlcnMgYXMgW10pIHx8IFtdKS5sZW5ndGggPlxuICAgICAgICAgICAgKChxdWVzdGlvbj8uc3VibWl0dGVkX2Fuc3dlcj8ubXNxX2Fuc3dlciBhcyBbXSkgfHwgW10pLmxlbmd0aFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoXG4gICAgICAgICAgICAgIGBBbnN3ZXIgYWxsIHRoZSByZXF1aXJlZCBZZXMvTm8gUXVlc3Rpb25gLFxuICAgICAgICAgICAgICAnd2FybidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB2YWxpZFN1Ym1pc3Npb24gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgaWYgKCF2YWxpZFN1Ym1pc3Npb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzdWx0ID0gYXdhaXQgdGhpcy5kYXRhTWFuYWdlci5QVVQoXG4gICAgICAgICAgYGFwaS9jaGVja3NoZWV0LXN1Ym1pc3Npb25zLyR7bW9kZWwuaWR9YCxcbiAgICAgICAgICBtb2RlbFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChcbiAgICAgICAgICAnQ2hlY2tzaGVldCBTdWJtaXNzaW9uIHNhdmVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICAgICAgJ3N1Y2Nlc3MnXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVycm9ySGFuZGxlci5oYW5kbGVFcnJvcihcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAnVW5hYmxlIHRvIHNhdmUgY2hlY2tzaGVldCBzdWJtaXNzaW9uLCB0cnkgbGF0ZXInXG4gICAgICAgICk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblNhdmVkKCkge1xuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZEFsZXJ0KFxuICAgICAgJ0NoZWNrc2hlZXQgc3VibWlzc2lvbiBzYXZlZCBzdWNjZXNzZnVsbHkhJyxcbiAgICAgICdzdWNjZXNzJ1xuICAgICk7XG4gICAgdGhpcy5yZWRpcmVjdEJhY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICB0aGlzLmNoZWNrc2hlZXRTdWJtaXNzaW9uRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgaWQ6IFsnJ10sXG4gICAgICBkYXRlOiBbJycsIFZhbGlkYXRvcnMuY29tcG9zZShbVmFsaWRhdG9ycy5yZXF1aXJlZCwgRGF0ZVZhbGlkYXRvcigpXSldLFxuICAgICAgcmV2aWV3ZXJfaWQ6IFsnJ10sXG4gICAgICBtb2RlbF9pZDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIG1vZGVsOiBbJ3ZlaGljbGUnXSxcbiAgICAgIHN0YXR1c19pZDogWycnXSxcbiAgICAgIGNvbW1lbnRzOiBbJyddLFxuICAgICAgY2hlY2tzaGVldF9mb3JtYXRfaWQ6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPGgyIGNsYXNzPVwibS0wXCI+Q2hlY2tzaGVldDwvaDI+XG5cbiAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtc3RhcnQgZ2FwLTFcIj5cbiAgICA8YXBwLWNoZWNrc2hlZXQtcXVlc3Rpb24tbGlzdFxuICAgICAgKm5nSWY9XCJzdWJtaXNzaW9uXCJcbiAgICAgIGNsYXNzPVwidy0xMDAgcC00XCJcbiAgICAgIFtzdWJtaXNzaW9uXT1cInN1Ym1pc3Npb25cIlxuICAgICAgc3R5bGU9XCJ3aWR0aDogY2FsYyg3MCUgLSAxcmVtKVwiXG4gICAgPlxuICAgIDwvYXBwLWNoZWNrc2hlZXQtcXVlc3Rpb24tbGlzdD5cbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IGNhbGMoMzAlIC0gMXJlbSlcIj5cbiAgICAgIDxtYXQtY2FyZCBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJzdWJtaXNzaW9uXCI+XG4gICAgICAgIDxhcHAtY2hlY2tzaGVldC1mb3JtXG4gICAgICAgICAgKGNhbmNlbGxlZCk9XCJyZWRpcmVjdEJhY2soKVwiXG4gICAgICAgICAgKHNhdmVkKT1cIm9uU2F2ZWQoKVwiXG4gICAgICAgICAgW2NoZWNrc2hlZXRTdWJtaXNzaW9uXT1cInN1Ym1pc3Npb25cIlxuICAgICAgICAgIFtzdWJtaXR0YWJsZVR5cGVdPVwic3VibWlzc2lvbj8uc3VibWl0dGFibGVfdHlwZVwiXG4gICAgICAgICAgW3N1Ym1pdHRhYmxlSWRdPVwic3VibWlzc2lvbj8uc3VibWlzc2lvbl9pZFwiXG4gICAgICAgID48L2FwcC1jaGVja3NoZWV0LWZvcm0+XG4gICAgICA8L21hdC1jYXJkPlxuICAgICAgPG1hdC1jYXJkIGNsYXNzPVwibXQtMiBwLTBcIiAqbmdJZj1cInN1Ym1pc3Npb24/LmlkXCI+XG4gICAgICAgIDxhcHAtbm90ZS1saXN0XG4gICAgICAgICAgW3JlbGF0ZWRNb2RlbElkXT1cInN1Ym1pc3Npb24/LmlkXCJcbiAgICAgICAgICBtb2RlbFR5cGU9XCJDaGVja3NoZWV0U3VibWlzc2lvblwiXG4gICAgICAgID48L2FwcC1ub3RlLWxpc3Q+XG4gICAgICA8L21hdC1jYXJkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19