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,45 +1,26 @@
1
- import { OnInit } from '@angular/core';
2
- import { UntypedFormGroup, UntypedFormBuilder } from '@angular/forms';
3
- import { FormValidatorService } from 'ngx-techlify-core';
4
- import { NgxSpinnerService } from 'ngx-spinner';
5
- import { AlertService, ErrorHandlerService, DataManager } from 'ngx-techlify-core';
6
- import { ActivatedRoute } from '@angular/router';
7
- import { Location } from '@angular/common';
1
+ import { EventEmitter, OnInit } from '@angular/core';
2
+ import { UntypedFormBuilder } from '@angular/forms';
3
+ import { FormValidatorService, TechlifyFormComponentInterface, AlertService } from 'ngx-techlify-core';
4
+ import { ChecksheetService } from '../checksheet.service';
8
5
  import { MatDialog } from '@angular/material/dialog';
9
- import { ChecksheetFormatService } from '../checksheet-format.service';
10
6
  import * as i0 from "@angular/core";
11
- export declare class ChecksheetFormComponent implements OnInit {
12
- private formValidatorService;
7
+ export declare class ChecksheetFormComponent extends TechlifyFormComponentInterface implements OnInit {
13
8
  private fb;
14
- private spinnerService;
9
+ private service;
15
10
  private alertService;
16
- location: Location;
17
- private errorHandler;
18
- private dataManager;
19
11
  private dialog;
20
- private route;
21
- private checksheetFormatService;
22
- checksheetForm: UntypedFormGroup;
12
+ submittableType: string;
13
+ submittableId: number;
14
+ cancelled: EventEmitter<any>;
15
+ saved: EventEmitter<any>;
23
16
  updateMode: boolean;
24
- checksheet: any;
17
+ checksheetSubmission: any;
25
18
  isSaving: boolean;
26
- id: number;
27
- disableInput: boolean;
28
- isLoading: boolean;
29
- constructor(formValidatorService: FormValidatorService, fb: UntypedFormBuilder, spinnerService: NgxSpinnerService, alertService: AlertService, location: Location, errorHandler: ErrorHandlerService, dataManager: DataManager, dialog: MatDialog, route: ActivatedRoute, checksheetFormatService: ChecksheetFormatService);
30
- ngOnInit(): void;
31
- /**
32
- * Create a check-sheet form.
33
- * @private
34
- */
19
+ constructor(formValidatorService: FormValidatorService, fb: UntypedFormBuilder, service: ChecksheetService, alertService: AlertService, dialog: MatDialog);
35
20
  private createForm;
36
- /**Method to evaluate form fields*/
37
- isFieldValid(field: string): any;
38
- /**Method to find error in form fields*/
39
- getErrorMessage(field: string): any;
21
+ ngOnInit(): void;
40
22
  submit(): void;
41
- publishChecksheet(): void;
42
- private loadChecksheetFormat;
23
+ submitChecksheet(): void;
43
24
  static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetFormComponent, never>;
44
- static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetFormComponent, "app-checksheet-form", never, { "disableInput": { "alias": "disableInput"; "required": false; }; }, {}, never, never, false, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetFormComponent, "app-checksheet-form", never, { "submittableType": { "alias": "submittableType"; "required": false; }; "submittableId": { "alias": "submittableId"; "required": false; }; "checksheetSubmission": { "alias": "checksheetSubmission"; "required": false; }; }, { "cancelled": "cancelled"; "saved": "saved"; }, never, never, false, never>;
45
26
  }
@@ -2,13 +2,12 @@ import { EventEmitter, TemplateRef } from '@angular/core';
2
2
  import { MatDialog } from '@angular/material/dialog';
3
3
  import { AlertService } from 'ngx-techlify-core';
4
4
  import { Router } from '@angular/router';
5
- import { ChecksheetSubmittableType } from '../checksheet-submittable.type';
6
5
  import * as i0 from "@angular/core";
7
6
  export declare class ChecksheetFormButtonComponent {
8
7
  matDialog: MatDialog;
9
8
  private alertService;
10
9
  private router;
11
- submittableType: ChecksheetSubmittableType;
10
+ submittableType: string;
12
11
  submittableId: number;
13
12
  saved: EventEmitter<any>;
14
13
  constructor(matDialog: MatDialog, alertService: AlertService, router: Router);
@@ -21,9 +20,9 @@ export declare class ChecksheetFormButtonComponent {
21
20
  /**
22
21
  * Handle Checksheet save event.
23
22
  *
24
- * @param checksheetSubmission
23
+ * @param checksheet
25
24
  */
26
- onSaved(checksheetSubmission: any): void;
25
+ onSaved(checksheet: any): void;
27
26
  static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetFormButtonComponent, never>;
28
27
  static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetFormButtonComponent, "app-checksheet-form-button", never, { "submittableType": { "alias": "submittableType"; "required": false; }; "submittableId": { "alias": "submittableId"; "required": false; }; }, { "saved": "saved"; }, never, never, false, never>;
29
28
  }
@@ -0,0 +1,16 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { AlertService } from 'ngx-techlify-core';
3
+ import { MatDialog } from '@angular/material/dialog';
4
+ import { ChecksheetFormatService } from '../../checksheet-format.service';
5
+ import * as i0 from "@angular/core";
6
+ export declare class ChecksheetFormatCopyButtonComponent {
7
+ private dialog;
8
+ private alertService;
9
+ private service;
10
+ checksheetFormat: any;
11
+ changed: EventEmitter<any>;
12
+ constructor(dialog: MatDialog, alertService: AlertService, service: ChecksheetFormatService);
13
+ copyChecksheet(): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetFormatCopyButtonComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetFormatCopyButtonComponent, "app-checksheet-format-copy-button", never, { "checksheetFormat": { "alias": "checksheetFormat"; "required": false; }; }, { "changed": "changed"; }, never, never, true, never>;
16
+ }
@@ -0,0 +1,16 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { MatDialog } from '@angular/material/dialog';
3
+ import { AlertService } from 'ngx-techlify-core';
4
+ import { ChecksheetFormatService } from '../../checksheet-format.service';
5
+ import * as i0 from "@angular/core";
6
+ export declare class ChecksheetFormatDeleteButtonComponent {
7
+ private dialog;
8
+ private alertService;
9
+ private service;
10
+ checksheetFormat: any;
11
+ deleted: EventEmitter<any>;
12
+ constructor(dialog: MatDialog, alertService: AlertService, service: ChecksheetFormatService);
13
+ delete(): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetFormatDeleteButtonComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetFormatDeleteButtonComponent, "app-checksheet-format-delete-button", never, { "checksheetFormat": { "alias": "checksheetFormat"; "required": false; }; }, { "deleted": "deleted"; }, never, never, true, never>;
16
+ }
@@ -0,0 +1,18 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { MatDialog } from '@angular/material/dialog';
3
+ import { AlertService } from 'ngx-techlify-core';
4
+ import { ChecksheetFormatService } from '../../checksheet-format.service';
5
+ import * as i0 from "@angular/core";
6
+ export declare class ChecksheetFormatPublishButtonComponent {
7
+ private dialog;
8
+ private alertService;
9
+ private service;
10
+ checksheetFormat: any;
11
+ changed: EventEmitter<any>;
12
+ viewMode: 'button' | 'icon';
13
+ isSaving: boolean;
14
+ constructor(dialog: MatDialog, alertService: AlertService, service: ChecksheetFormatService);
15
+ publishChecksheet(): void;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetFormatPublishButtonComponent, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetFormatPublishButtonComponent, "app-checksheet-format-publish-button", never, { "checksheetFormat": { "alias": "checksheetFormat"; "required": false; }; "viewMode": { "alias": "viewMode"; "required": false; }; }, { "changed": "changed"; }, never, never, true, never>;
18
+ }
@@ -0,0 +1,16 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { MatDialog } from '@angular/material/dialog';
3
+ import { AlertService } from 'ngx-techlify-core';
4
+ import { ChecksheetFormatService } from '../../checksheet-format.service';
5
+ import * as i0 from "@angular/core";
6
+ export declare class ChecksheetFormatUnpublishButtonComponent {
7
+ private dialog;
8
+ private alertService;
9
+ private service;
10
+ checksheetFormat: any;
11
+ changed: EventEmitter<any>;
12
+ constructor(dialog: MatDialog, alertService: AlertService, service: ChecksheetFormatService);
13
+ unpublishChecksheet(): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetFormatUnpublishButtonComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetFormatUnpublishButtonComponent, "app-checksheet-format-unpublish-button", never, { "checksheetFormat": { "alias": "checksheetFormat"; "required": false; }; }, { "changed": "changed"; }, never, never, true, never>;
16
+ }
@@ -5,9 +5,9 @@ import { MatDialog } from '@angular/material/dialog';
5
5
  import { ActivatedRoute } from '@angular/router';
6
6
  import { NgxSpinnerService } from 'ngx-spinner';
7
7
  import { AlertService, DataManager, FormValidatorService, ErrorHandlerService } from 'ngx-techlify-core';
8
- import { ChecksheetService } from '../checksheet.service';
8
+ import { ChecksheetService } from '../../checksheet.service';
9
9
  import * as i0 from "@angular/core";
10
- export declare class ChecksheetViewComponent implements OnInit {
10
+ export declare class ChecksheetFormatViewComponent implements OnInit {
11
11
  private formValidatorService;
12
12
  private fb;
13
13
  private spinnerService;
@@ -32,6 +32,6 @@ export declare class ChecksheetViewComponent implements OnInit {
32
32
  getErrorMessage(field: string): any;
33
33
  submit(): Promise<void>;
34
34
  onSaved(): void;
35
- static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetViewComponent, never>;
36
- static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetViewComponent, "app-checksheet-view", never, {}, {}, never, never, false, never>;
35
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetFormatViewComponent, never>;
36
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetFormatViewComponent, "app-checksheet-format-view", never, {}, {}, never, never, false, never>;
37
37
  }
@@ -0,0 +1,45 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { UntypedFormGroup, UntypedFormBuilder } from '@angular/forms';
3
+ import { FormValidatorService } from 'ngx-techlify-core';
4
+ import { NgxSpinnerService } from 'ngx-spinner';
5
+ import { AlertService, ErrorHandlerService, DataManager } from 'ngx-techlify-core';
6
+ import { ActivatedRoute } from '@angular/router';
7
+ import { Location } from '@angular/common';
8
+ import { MatDialog } from '@angular/material/dialog';
9
+ import { ChecksheetFormatService } from '../checksheet-format.service';
10
+ import * as i0 from "@angular/core";
11
+ export declare class ChecksheetFormatFormComponent implements OnInit {
12
+ private formValidatorService;
13
+ private fb;
14
+ private spinnerService;
15
+ private alertService;
16
+ location: Location;
17
+ private errorHandler;
18
+ private dataManager;
19
+ private dialog;
20
+ private route;
21
+ private checksheetFormatService;
22
+ checksheetForm: UntypedFormGroup;
23
+ updateMode: boolean;
24
+ checksheetFormat: any;
25
+ isSaving: boolean;
26
+ id: number;
27
+ disableInput: boolean;
28
+ isLoading: boolean;
29
+ showChecksheetInfo: boolean;
30
+ constructor(formValidatorService: FormValidatorService, fb: UntypedFormBuilder, spinnerService: NgxSpinnerService, alertService: AlertService, location: Location, errorHandler: ErrorHandlerService, dataManager: DataManager, dialog: MatDialog, route: ActivatedRoute, checksheetFormatService: ChecksheetFormatService);
31
+ ngOnInit(): void;
32
+ /**
33
+ * Create a check-sheet form.
34
+ * @private
35
+ */
36
+ private createForm;
37
+ /**Method to evaluate form fields*/
38
+ isFieldValid(field: string): any;
39
+ /**Method to find error in form fields*/
40
+ getErrorMessage(field: string): any;
41
+ submit(): void;
42
+ loadChecksheetFormat(): void;
43
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetFormatFormComponent, never>;
44
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetFormatFormComponent, "app-checksheet-format-form", never, { "disableInput": { "alias": "disableInput"; "required": false; }; }, {}, never, never, false, never>;
45
+ }
@@ -10,9 +10,6 @@ export declare class ChecksheetFormatListComponent extends TechlifyListingContro
10
10
  displayedColumns: any[];
11
11
  constructor(dialog: MatDialog, service: ChecksheetFormatService, alertService: AlertService);
12
12
  ngOnInit(): void;
13
- deactivateChecksheet(checksheet: any): void;
14
- copyChecksheet(checksheet: any): void;
15
- unpublishChecksheet(checksheet: any): void;
16
13
  loadData(): void;
17
14
  static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetFormatListComponent, never>;
18
15
  static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetFormatListComponent, "app-checksheet-format-list", never, {}, {}, never, never, false, never>;
@@ -8,12 +8,14 @@ import * as i0 from "@angular/core";
8
8
  export declare class ChecksheetListComponent extends TechlifyListingControllerInterface implements OnInit {
9
9
  private alertService;
10
10
  private fb;
11
- private checksheetSubmissionService;
11
+ private service;
12
12
  private requestHelperService;
13
13
  private activatedRoute;
14
+ submittableId: number;
15
+ submittableType: string;
14
16
  displayedColumns: any[];
15
17
  with: string;
16
- constructor(alertService: AlertService, fb: UntypedFormBuilder, checksheetSubmissionService: ChecksheetService, requestHelperService: RequestHelperService, activatedRoute: ActivatedRoute);
18
+ constructor(alertService: AlertService, fb: UntypedFormBuilder, service: ChecksheetService, requestHelperService: RequestHelperService, activatedRoute: ActivatedRoute);
17
19
  ngOnInit(): void;
18
20
  private createForm;
19
21
  loadData(): void;
@@ -27,5 +29,5 @@ export declare class ChecksheetListComponent extends TechlifyListingControllerIn
27
29
  private subscribeToRouteChanges;
28
30
  onSortChange(sort: Sort): void;
29
31
  static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetListComponent, never>;
30
- static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetListComponent, "app-checksheet-list", never, {}, {}, never, never, false, never>;
32
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetListComponent, "app-checksheet-list", never, { "submittableId": { "alias": "submittableId"; "required": false; }; "submittableType": { "alias": "submittableType"; "required": false; }; }, {}, never, never, false, never>;
31
33
  }
@@ -0,0 +1,17 @@
1
+ import { OnInit } from '@angular/core';
2
+ import { TechlifyListingControllerInterface } from 'ngx-techlify-core';
3
+ import { ChecksheetService } from '../checksheet.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare class ChecksheetListWidgetComponent extends TechlifyListingControllerInterface implements OnInit {
6
+ private service;
7
+ submittable: any;
8
+ submittableType: string;
9
+ title: string;
10
+ submittableTitleField: string;
11
+ showChecksheetButton: boolean;
12
+ constructor(service: ChecksheetService);
13
+ ngOnInit(): void;
14
+ loadData(): void;
15
+ static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetListWidgetComponent, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetListWidgetComponent, "app-checksheet-list-widget", never, { "submittable": { "alias": "submittable"; "required": false; }; "submittableType": { "alias": "submittableType"; "required": false; }; "title": { "alias": "title"; "required": false; }; "submittableTitleField": { "alias": "submittableTitleField"; "required": false; }; "showChecksheetButton": { "alias": "showChecksheetButton"; "required": false; }; }, {}, never, never, false, never>;
17
+ }
@@ -1,17 +1,15 @@
1
- import { Location } from '@angular/common';
2
1
  import { OnInit } from '@angular/core';
3
2
  import { ActivatedRoute } from '@angular/router';
4
3
  import { ChecksheetService } from '../checksheet.service';
5
4
  import * as i0 from "@angular/core";
6
5
  export declare class ChecksheetNodeViewComponent implements OnInit {
7
- location: Location;
8
6
  private route;
9
- private checksheetSubmissionService;
7
+ private service;
10
8
  submission: any;
11
9
  submissionId: number;
12
10
  isLoading: boolean;
13
11
  with: string;
14
- constructor(location: Location, route: ActivatedRoute, checksheetSubmissionService: ChecksheetService);
12
+ constructor(route: ActivatedRoute, service: ChecksheetService);
15
13
  ngOnInit(): void;
16
14
  private loadSubmission;
17
15
  /**
@@ -1,17 +1,27 @@
1
1
  import { OnInit } from '@angular/core';
2
- import { TechlifyListingControllerInterface } from 'ngx-techlify-core';
2
+ import { AlertService, EntityFileService, FileDropperConfig, TechlifyListingControllerInterface } from 'ngx-techlify-core';
3
3
  import { FormBuilder } from '@angular/forms';
4
4
  import { ChecksheetSubmissionFileService } from '../../checksheet-submission-file.service';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class ChecksheetSubmissionFilesComponent extends TechlifyListingControllerInterface implements OnInit {
7
7
  private formBuilder;
8
- private checksheetSubmissionFileService;
8
+ private service;
9
+ private entityFileService;
10
+ private alertService;
9
11
  submissionId: number;
10
12
  questionId: number;
13
+ viewMode: 'table' | 'horizontal-timeline';
14
+ fileDropperHeight: string;
15
+ allowMultipleFiles: boolean;
11
16
  displayedColumns: string[];
12
- constructor(formBuilder: FormBuilder, checksheetSubmissionFileService: ChecksheetSubmissionFileService);
17
+ fileConfig: FileDropperConfig;
18
+ fileList: any[];
19
+ constructor(formBuilder: FormBuilder, service: ChecksheetSubmissionFileService, entityFileService: EntityFileService, alertService: AlertService);
13
20
  ngOnInit(): void;
14
21
  loadData(): void;
22
+ fileChanged(event: any): Promise<void>;
23
+ private uploadFiles;
24
+ onUploadComplete(uploadedFiles: any[]): void;
15
25
  static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetSubmissionFilesComponent, never>;
16
- static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetSubmissionFilesComponent, "app-checksheet-submission-files", never, { "submissionId": { "alias": "submissionId"; "required": false; }; "questionId": { "alias": "questionId"; "required": false; }; }, {}, never, never, true, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChecksheetSubmissionFilesComponent, "app-checksheet-submission-files", never, { "submissionId": { "alias": "submissionId"; "required": false; }; "questionId": { "alias": "questionId"; "required": false; }; "viewMode": { "alias": "viewMode"; "required": false; }; "fileDropperHeight": { "alias": "fileDropperHeight"; "required": false; }; "allowMultipleFiles": { "alias": "allowMultipleFiles"; "required": false; }; }, {}, never, never, true, never>;
17
27
  }
@@ -1,12 +1,12 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./checksheet-format-list/checksheet-format-list.component";
3
- import * as i2 from "./checksheet-form/checksheet-form.component";
3
+ import * as i2 from "./checksheet-format-form/checksheet-format-form.component";
4
4
  import * as i3 from "./checksheet-question-form/checksheet-question-form.component";
5
5
  import * as i4 from "./checksheet-question/checksheet-question.component";
6
6
  import * as i5 from "./checksheet-question-list/checksheet-question-list.component";
7
7
  import * as i6 from "./checksheet-list/checksheet-list.component";
8
- import * as i7 from "./checksheet-submission-form/checksheet-submission-form.component";
9
- import * as i8 from "./checksheet-view/checksheet-view.component";
8
+ import * as i7 from "./checksheet-form/checksheet-form.component";
9
+ import * as i8 from "./checksheet-format/checksheet-format-view/checksheet-format-view.component";
10
10
  import * as i9 from "./checksheet-node-view/checksheet-node-view.component";
11
11
  import * as i10 from "./mechanical-issue-form/mechanical-issue-form.component";
12
12
  import * as i11 from "./checksheet-report/checksheet-report.component";
@@ -14,9 +14,9 @@ import * as i12 from "./checksheet-form-button/checksheet-form-button.component"
14
14
  import * as i13 from "./checksheet-submission-delete-button/checksheet-submission-delete-button.component";
15
15
  import * as i14 from "./checksheet-review-button/checksheet-review-button.component";
16
16
  import * as i15 from "./checksheet-submission-view/checksheet-submission-view.component";
17
- import * as i16 from "./checksheet-submission-form-button/checksheet-submission-form-button.component";
18
- import * as i17 from "./checksheet-submission-list/checksheet-submission-list.component";
19
- import * as i18 from "./checksheet-submission-review-button/checksheet-submission-review-button.component";
17
+ import * as i16 from "./checksheet-submission-list/checksheet-submission-list.component";
18
+ import * as i17 from "./checksheet-submission-review-button/checksheet-submission-review-button.component";
19
+ import * as i18 from "./checksheet-list-widget/checksheet-list-widget.component";
20
20
  import * as i19 from "@angular/common";
21
21
  import * as i20 from "./checksheet-routing.module";
22
22
  import * as i21 from "../@shared/shared.module";
@@ -27,8 +27,13 @@ import * as i25 from "@angular/material/radio";
27
27
  import * as i26 from "@angular/material/progress-bar";
28
28
  import * as i27 from "./checksheet-submission-file-upload/checksheet-submisison-file-upload.component";
29
29
  import * as i28 from "./checksheet-submission-file/checksheet-submission-files/checksheet-submission-files.component";
30
+ import * as i29 from "ngx-avatars";
31
+ import * as i30 from "./checksheet-format/checksheet-format-copy-button/checksheet-format-copy-button.component";
32
+ import * as i31 from "./checksheet-format/checksheet-format-delete-button/checksheet-format-delete-button.component";
33
+ import * as i32 from "./checksheet-format/checksheet-format-unpublish-button/checksheet-format-unpublish-button.component";
34
+ import * as i33 from "./checksheet-format/checksheet-format-publish-button/checksheet-format-publish-button.component";
30
35
  export declare class ChecksheetModule {
31
36
  static ɵfac: i0.ɵɵFactoryDeclaration<ChecksheetModule, never>;
32
- static ɵmod: i0.ɵɵNgModuleDeclaration<ChecksheetModule, [typeof i1.ChecksheetFormatListComponent, typeof i2.ChecksheetFormComponent, typeof i3.ChecksheetQuestionFormComponent, typeof i4.ChecksheetQuestionComponent, typeof i5.ChecksheetQuestionListComponent, typeof i6.ChecksheetListComponent, typeof i7.ChecksheetSubmissionFormComponent, typeof i8.ChecksheetViewComponent, typeof i9.ChecksheetNodeViewComponent, typeof i10.MechanicalIssueFormComponent, typeof i11.ChecksheetReportComponent, typeof i12.ChecksheetFormButtonComponent, typeof i13.ChecksheetSubmissionDeleteButtonComponent, typeof i14.ChecksheetReviewButtonComponent, typeof i15.ChecksheetSubmissionViewComponent, typeof i16.ChecksheetSubmissionFormButtonComponent, typeof i17.ChecksheetSubmissionListComponent, typeof i18.ChecksheetSubmissionReviewButtonComponent], [typeof i19.CommonModule, typeof i20.ChecksheetRoutingModule, typeof i21.SharedModule, typeof i22.InfiniteScrollModule, typeof i23.ActionPopupModule, typeof i23.SearchableSelectorModule, typeof i23.NoteModule, typeof i24.NgxEditorModule, typeof i25.MatRadioModule, typeof i23.EntityFilesViewAllModule, typeof i23.ExportExcelModule, typeof i26.MatProgressBarModule, typeof i23.TimelineFilterModule, typeof i27.ChecksheetSubmissionFileUploadComponent, typeof i28.ChecksheetSubmissionFilesComponent, typeof i21.SharedModule], [typeof i6.ChecksheetListComponent, typeof i12.ChecksheetFormButtonComponent]>;
37
+ static ɵmod: i0.ɵɵNgModuleDeclaration<ChecksheetModule, [typeof i1.ChecksheetFormatListComponent, typeof i2.ChecksheetFormatFormComponent, typeof i3.ChecksheetQuestionFormComponent, typeof i4.ChecksheetQuestionComponent, typeof i5.ChecksheetQuestionListComponent, typeof i6.ChecksheetListComponent, typeof i7.ChecksheetFormComponent, typeof i8.ChecksheetFormatViewComponent, typeof i9.ChecksheetNodeViewComponent, typeof i10.MechanicalIssueFormComponent, typeof i11.ChecksheetReportComponent, typeof i12.ChecksheetFormButtonComponent, typeof i13.ChecksheetSubmissionDeleteButtonComponent, typeof i14.ChecksheetReviewButtonComponent, typeof i15.ChecksheetSubmissionViewComponent, typeof i16.ChecksheetSubmissionListComponent, typeof i17.ChecksheetSubmissionReviewButtonComponent, typeof i18.ChecksheetListWidgetComponent], [typeof i19.CommonModule, typeof i20.ChecksheetRoutingModule, typeof i21.SharedModule, typeof i22.InfiniteScrollModule, typeof i23.ActionPopupModule, typeof i23.SearchableSelectorModule, typeof i23.NoteModule, typeof i24.NgxEditorModule, typeof i25.MatRadioModule, typeof i23.EntityFilesViewAllModule, typeof i23.ExportExcelModule, typeof i26.MatProgressBarModule, typeof i23.TimelineFilterModule, typeof i27.ChecksheetSubmissionFileUploadComponent, typeof i28.ChecksheetSubmissionFilesComponent, typeof i21.SharedModule, typeof i29.AvatarComponent, typeof i30.ChecksheetFormatCopyButtonComponent, typeof i31.ChecksheetFormatDeleteButtonComponent, typeof i32.ChecksheetFormatUnpublishButtonComponent, typeof i33.ChecksheetFormatPublishButtonComponent], [typeof i6.ChecksheetListComponent, typeof i12.ChecksheetFormButtonComponent, typeof i18.ChecksheetListWidgetComponent]>;
33
38
  static ɵinj: i0.ɵɵInjectorDeclaration<ChecksheetModule>;
34
39
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-techlify-checksheet",
3
- "version": "18.0.0",
3
+ "version": "18.1.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=18",
6
6
  "@angular/core": ">=18",
package/public-api.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export * from './lib/checksheet/checksheet.module';
2
2
  export * from './lib/checksheet/checksheet-submission-list/checksheet-submission-list.component';
3
- export * from './lib/checksheet/checksheet-submission-form-button/checksheet-submission-form-button.component';
4
3
  export * from './lib/checksheet/checksheet-form-button/checksheet-form-button.component';
5
4
  export * from './lib/checksheet/checksheet-list/checksheet-list.component';
5
+ export * from './lib/checksheet/checksheet-list-widget/checksheet-list-widget.component';
@@ -1,131 +0,0 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { Validators } from '@angular/forms';
3
- import { DateValidator, TechlifyFormComponentInterface, ActionPopupComponent } from 'ngx-techlify-core';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "ngx-techlify-core";
6
- import * as i2 from "@angular/forms";
7
- import * as i3 from "../checksheet.service";
8
- import * as i4 from "@angular/material/dialog";
9
- import * as i5 from "@angular/common";
10
- import * as i6 from "@angular/flex-layout/flex";
11
- import * as i7 from "@angular/material/core";
12
- import * as i8 from "@angular/material/button";
13
- import * as i9 from "@angular/material/datepicker";
14
- import * as i10 from "@angular/material/form-field";
15
- import * as i11 from "@angular/material/input";
16
- import * as i12 from "@angular/material/select";
17
- export class ChecksheetSubmissionFormComponent extends TechlifyFormComponentInterface {
18
- fb;
19
- checksheetSubmissionService;
20
- alertService;
21
- dialog;
22
- submittableType;
23
- submittableId;
24
- cancelled = new EventEmitter();
25
- saved = new EventEmitter();
26
- updateMode;
27
- checksheetSubmission;
28
- isSaving = false;
29
- constructor(formValidatorService, fb, checksheetSubmissionService, alertService, dialog) {
30
- super(formValidatorService);
31
- this.fb = fb;
32
- this.checksheetSubmissionService = checksheetSubmissionService;
33
- this.alertService = alertService;
34
- this.dialog = dialog;
35
- this.errorMessages = {
36
- date: {
37
- required: 'The date field is required.'
38
- },
39
- format_id: {
40
- required: 'The checksheet format is required.'
41
- }
42
- };
43
- this.createForm();
44
- }
45
- createForm() {
46
- this.form = this.fb.group({
47
- id: [''],
48
- date: ['', Validators.compose([Validators.required, DateValidator()])],
49
- format_id: ['', Validators.required],
50
- submittable_type: ['fixed-asset'],
51
- submittable_id: ['', Validators.required],
52
- details: ['']
53
- });
54
- }
55
- ngOnInit() {
56
- // Set the submittable type and id and make it readonly
57
- if (this.submittableType && this.submittableId) {
58
- this.form.patchValue({
59
- submittable_type: this.submittableType,
60
- submittable_id: this.submittableId
61
- });
62
- }
63
- // Set the Checksheet to form
64
- if (this.checksheetSubmission) {
65
- this.updateMode = true;
66
- this.form.patchValue({
67
- ...this.checksheetSubmission,
68
- date: new Date(this.checksheetSubmission?.date)
69
- });
70
- }
71
- }
72
- submit() {
73
- if (this.form.invalid) {
74
- this.alertService.addAlert('Please check the form for errors', 'error');
75
- }
76
- const data = { ...this.form.value };
77
- const request = this.updateMode
78
- ? this.checksheetSubmissionService.update(data)
79
- : this.checksheetSubmissionService.store(data);
80
- this.isSaving = true;
81
- request.subscribe({
82
- next: (response) => {
83
- this.isSaving = false;
84
- this.saved.emit(response?.item);
85
- },
86
- error: () => {
87
- this.isSaving = false;
88
- }
89
- });
90
- }
91
- submitChecksheet() {
92
- const dialogRef = this.dialog.open(ActionPopupComponent, {
93
- width: '400px',
94
- data: {
95
- title: 'Submit Checksheet',
96
- message: `Review the checksheet completely before submitting, you cannot alter once it is submitted. Are you sure to submit the Checksheet?`
97
- },
98
- autoFocus: false
99
- });
100
- dialogRef.afterClosed().subscribe(async (result) => {
101
- if (result) {
102
- // Action confirmed
103
- this.checksheetSubmissionService
104
- .submit(this.checksheetSubmission?.id)
105
- .subscribe({
106
- next: (response) => {
107
- this.alertService.addAlert('The Checksheet submitted!', 'success');
108
- this.saved.emit(response?.item);
109
- }
110
- });
111
- }
112
- });
113
- }
114
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetSubmissionFormComponent, deps: [{ token: i1.FormValidatorService }, { token: i2.UntypedFormBuilder }, { token: i3.ChecksheetService }, { token: i1.AlertService }, { token: i4.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
115
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChecksheetSubmissionFormComponent, selector: "app-checksheet-submission-form", inputs: { submittableType: "submittableType", submittableId: "submittableId", checksheetSubmission: "checksheetSubmission" }, outputs: { cancelled: "cancelled", saved: "saved" }, usesInheritance: true, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"submit()\">\n <div fxLayout=\"column\" class=\"mat-typography\">\n <h3>Checksheet</h3>\n\n <mat-form-field>\n <mat-label>Date</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker\"\n placeholder=\"Date (MM/DD/YYYY)\"\n formControlName=\"date\"\n autocomplete=\"off\"\n required\n (focus)=\"picker.open()\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\"\n >{{ getErrorMessage('date') }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Checksheet Format</mat-label>\n <app-searchable-selector\n formControlName=\"format_id\"\n apiUrl=\"api/checksheet-formats?is_published=1\"\n [enableSearch]=\"true\"\n >\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('format_id')\"\n >{{ getErrorMessage('format_id') }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Checksheet For</mat-label>\n <mat-select formControlName=\"submittable_type\">\n <mat-option value=\"fixed-asset\">Fixed Asset</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"form.get('submittable_type')?.value === 'fixed-asset'\"\n >\n <mat-label>Fixed Asset</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/fixed-assets\"\n titleField=\"name\"\n formControlName=\"submittable_id\"\n ></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Details</mat-label>\n <textarea\n matInput\n placeholder=\"Details\"\n formControlName=\"details\"\n ></textarea>\n </mat-form-field>\n <div class=\"d-flex justify-content-end align-items-center gap-2\">\n <button\n [disabled]=\"isSaving\"\n mat-flat-button\n type=\"button\"\n (click)=\"cancelled.emit()\"\n >\n Cancel\n </button>\n <button\n [disabled]=\"isSaving\"\n mat-raised-button\n type=\"submit\"\n color=\"primary\"\n >\n Save\n </button>\n <button\n *ngIf=\"checksheetSubmission?.id\"\n [disabled]=\"isSaving\"\n mat-raised-button\n (click)=\"submitChecksheet()\"\n type=\"button\"\n color=\"accent\"\n >\n Submit\n </button>\n </div>\n </div>\n</form>\n", styles: [""], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: "component", type: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i8.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i9.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i10.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i10.MatLabel, selector: "mat-label" }, { kind: "directive", type: i10.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i10.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i11.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: i12.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { 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: "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"] }] });
116
- }
117
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChecksheetSubmissionFormComponent, decorators: [{
118
- type: Component,
119
- args: [{ selector: 'app-checksheet-submission-form', template: "<form [formGroup]=\"form\" (submit)=\"submit()\">\n <div fxLayout=\"column\" class=\"mat-typography\">\n <h3>Checksheet</h3>\n\n <mat-form-field>\n <mat-label>Date</mat-label>\n <input\n matInput\n [matDatepicker]=\"picker\"\n placeholder=\"Date (MM/DD/YYYY)\"\n formControlName=\"date\"\n autocomplete=\"off\"\n required\n (focus)=\"picker.open()\"\n />\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <mat-datepicker #picker></mat-datepicker>\n <mat-error *ngIf=\"isFieldValid('date')\"\n >{{ getErrorMessage('date') }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Checksheet Format</mat-label>\n <app-searchable-selector\n formControlName=\"format_id\"\n apiUrl=\"api/checksheet-formats?is_published=1\"\n [enableSearch]=\"true\"\n >\n </app-searchable-selector>\n <mat-error *ngIf=\"isFieldValid('format_id')\"\n >{{ getErrorMessage('format_id') }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Checksheet For</mat-label>\n <mat-select formControlName=\"submittable_type\">\n <mat-option value=\"fixed-asset\">Fixed Asset</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-form-field\n *ngIf=\"form.get('submittable_type')?.value === 'fixed-asset'\"\n >\n <mat-label>Fixed Asset</mat-label>\n <app-searchable-selector\n apiUrl=\"api/accounting-plus/fixed-assets\"\n titleField=\"name\"\n formControlName=\"submittable_id\"\n ></app-searchable-selector>\n </mat-form-field>\n\n <mat-form-field>\n <mat-label>Details</mat-label>\n <textarea\n matInput\n placeholder=\"Details\"\n formControlName=\"details\"\n ></textarea>\n </mat-form-field>\n <div class=\"d-flex justify-content-end align-items-center gap-2\">\n <button\n [disabled]=\"isSaving\"\n mat-flat-button\n type=\"button\"\n (click)=\"cancelled.emit()\"\n >\n Cancel\n </button>\n <button\n [disabled]=\"isSaving\"\n mat-raised-button\n type=\"submit\"\n color=\"primary\"\n >\n Save\n </button>\n <button\n *ngIf=\"checksheetSubmission?.id\"\n [disabled]=\"isSaving\"\n mat-raised-button\n (click)=\"submitChecksheet()\"\n type=\"button\"\n color=\"accent\"\n >\n Submit\n </button>\n </div>\n </div>\n</form>\n" }]
120
- }], ctorParameters: () => [{ type: i1.FormValidatorService }, { type: i2.UntypedFormBuilder }, { type: i3.ChecksheetService }, { type: i1.AlertService }, { type: i4.MatDialog }], propDecorators: { submittableType: [{
121
- type: Input
122
- }], submittableId: [{
123
- type: Input
124
- }], cancelled: [{
125
- type: Output
126
- }], saved: [{
127
- type: Output
128
- }], checksheetSubmission: [{
129
- type: Input
130
- }] } });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlY2hsaWZ5LWNoZWNrc2hlZXQvc3JjL2xpYi9jaGVja3NoZWV0L2NoZWNrc2hlZXQtc3VibWlzc2lvbi1mb3JtL2NoZWNrc2hlZXQtc3VibWlzc2lvbi1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC10ZWNobGlmeS1jaGVja3NoZWV0L3NyYy9saWIvY2hlY2tzaGVldC9jaGVja3NoZWV0LXN1Ym1pc3Npb24tZm9ybS9jaGVja3NoZWV0LXN1Ym1pc3Npb24tZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBc0IsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUVMLGFBQWEsRUFDYiw4QkFBOEIsRUFFOUIsb0JBQW9CLEVBRXJCLE1BQU0sbUJBQW1CLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBVzNCLE1BQU0sT0FBTyxpQ0FDWCxTQUFRLDhCQUE4QjtJQWE1QjtJQUNBO0lBQ0E7SUFDQTtJQWJELGVBQWUsQ0FBNkI7SUFDNUMsYUFBYSxDQUFVO0lBQ3RCLFNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNsRCxLQUFLLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7SUFDeEQsVUFBVSxDQUFXO0lBQ1osb0JBQW9CLENBQU07SUFDbkMsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQixZQUNFLG9CQUEwQyxFQUNsQyxFQUFzQixFQUN0QiwyQkFBOEMsRUFDOUMsWUFBMEIsRUFDMUIsTUFBaUI7UUFFekIsS0FBSyxDQUFDLG9CQUFvQixD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O1FBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDdkQsS0FBSyxFQUFFLE9BQU87WUFDZCxJQUFJLEVBQWU7Z0JBQ2pCLEtBQUssRUFBRSxtQkFBbUI7Z0JBQzFCLE9BQU8sRUFBRSxtSUFBbUk7YUFDN0k7WUFDRCxTQUFTLEVBQUUsS0FBSztTQUNqQixDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNqRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLG1CQUFtQjtnQkFDbkIsSUFBSSxDQUFDLDJCQUEyQjtxQkFDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7cUJBQ3JDLFNBQVMsQ0FBQztvQkFDVCxJQUFJLEVBQUUsQ0FBQyxRQUFhLEVBQUUsRUFBRTt3QkFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQ3hCLDJCQUEyQixFQUMzQixTQUFTLENBQ1YsQ0FBQzt3QkFDRixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ2xDLENBQUM7aUJBQ0YsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0E1R1UsaUNBQWlDOzRGQUFqQyxpQ0FBaUMsZ1JDcEI5QywyakZBMkZBOzs0RkR2RWEsaUNBQWlDO2tCQUw3QyxTQUFTOytCQUNFLGdDQUFnQzs2TUFRakMsZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUVFLG9CQUFvQjtzQkFBNUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEZvcm1WYWxpZGF0b3JTZXJ2aWNlLFxuICBEYXRlVmFsaWRhdG9yLFxuICBUZWNobGlmeUZvcm1Db21wb25lbnRJbnRlcmZhY2UsXG4gIEFsZXJ0U2VydmljZSxcbiAgQWN0aW9uUG9wdXBDb21wb25lbnQsXG4gIEFjdGlvblBvcHVwXG59IGZyb20gJ25neC10ZWNobGlmeS1jb3JlJztcbmltcG9ydCB7IENoZWNrc2hlZXRTZXJ2aWNlIH0gZnJvbSAnLi4vY2hlY2tzaGVldC5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENoZWNrc2hlZXRTdWJtaXR0YWJsZVR5cGUgfSBmcm9tICcuLi9jaGVja3NoZWV0LXN1Ym1pdHRhYmxlLnR5cGUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNoZWNrc2hlZXQtc3VibWlzc2lvbi1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoZWNrc2hlZXQtc3VibWlzc2lvbi1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2tzaGVldC1zdWJtaXNzaW9uLWZvcm0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDaGVja3NoZWV0U3VibWlzc2lvbkZvcm1Db21wb25lbnRcbiAgZXh0ZW5kcyBUZWNobGlmeUZvcm1Db21wb25lbnRJbnRlcmZhY2VcbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgQElucHV0KCkgc3VibWl0dGFibGVUeXBlITogQ2hlY2tzaGVldFN1Ym1pdHRhYmxlVHlwZTtcbiAgQElucHV0KCkgc3VibWl0dGFibGVJZCE6IG51bWJlcjtcbiAgQE91dHB1dCgpIGNhbmNlbGxlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzYXZlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHVwZGF0ZU1vZGUhOiBib29sZWFuO1xuICBASW5wdXQoKSBjaGVja3NoZWV0U3VibWlzc2lvbjogYW55O1xuICBpc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZvcm1WYWxpZGF0b3JTZXJ2aWNlOiBGb3JtVmFsaWRhdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjaGVja3NoZWV0U3VibWlzc2lvblNlcnZpY2U6IENoZWNrc2hlZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZ1xuICApIHtcbiAgICBzdXBlcihmb3JtVmFsaWRhdG9yU2VydmljZSk7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2VzID0ge1xuICAgICAgZGF0ZToge1xuICAgICAgICByZXF1aXJlZDogJ1RoZSBkYXRlIGZpZWxkIGlzIHJlcXVpcmVkLidcbiAgICAgIH0sXG4gICAgICBmb3JtYXRfaWQ6IHtcbiAgICAgICAgcmVxdWlyZWQ6ICdUaGUgY2hlY2tzaGVldCBmb3JtYXQgaXMgcmVxdWlyZWQuJ1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRm9ybSgpIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGlkOiBbJyddLFxuICAgICAgZGF0ZTogWycnLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIERhdGVWYWxpZGF0b3IoKV0pXSxcbiAgICAgIGZvcm1hdF9pZDogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgIHN1Ym1pdHRhYmxlX3R5cGU6IFsnZml4ZWQtYXNzZXQnXSxcbiAgICAgIHN1Ym1pdHRhYmxlX2lkOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgZGV0YWlsczogWycnXVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy8gU2V0IHRoZSBzdWJtaXR0YWJsZSB0eXBlIGFuZCBpZCBhbmQgbWFrZSBpdCByZWFkb25seVxuICAgIGlmICh0aGlzLnN1Ym1pdHRhYmxlVHlwZSAmJiB0aGlzLnN1Ym1pdHRhYmxlSWQpIHtcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgc3VibWl0dGFibGVfdHlwZTogdGhpcy5zdWJtaXR0YWJsZVR5cGUsXG4gICAgICAgIHN1Ym1pdHRhYmxlX2lkOiB0aGlzLnN1Ym1pdHRhYmxlSWRcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBTZXQgdGhlIENoZWNrc2hlZXQgdG8gZm9ybVxuICAgIGlmICh0aGlzLmNoZWNrc2hlZXRTdWJtaXNzaW9uKSB7XG4gICAgICB0aGlzLnVwZGF0ZU1vZGUgPSB0cnVlO1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAuLi50aGlzLmNoZWNrc2hlZXRTdWJtaXNzaW9uLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSh0aGlzLmNoZWNrc2hlZXRTdWJtaXNzaW9uPy5kYXRlKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoJ1BsZWFzZSBjaGVjayB0aGUgZm9ybSBmb3IgZXJyb3JzJywgJ2Vycm9yJyk7XG4gICAgfVxuICAgIGNvbnN0IGRhdGE6IGFueSA9IHsgLi4udGhpcy5mb3JtLnZhbHVlIH07XG4gICAgY29uc3QgcmVxdWVzdDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy51cGRhdGVNb2RlXG4gICAgICA/IHRoaXMuY2hlY2tzaGVldFN1Ym1pc3Npb25TZXJ2aWNlLnVwZGF0ZShkYXRhKVxuICAgICAgOiB0aGlzLmNoZWNrc2hlZXRTdWJtaXNzaW9uU2VydmljZS5zdG9yZShkYXRhKTtcblxuICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xuICAgIHJlcXVlc3Quc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zYXZlZC5lbWl0KHJlc3BvbnNlPy5pdGVtKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdWJtaXRDaGVja3NoZWV0KCkge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWN0aW9uUG9wdXBDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgZGF0YTogPEFjdGlvblBvcHVwPntcbiAgICAgICAgdGl0bGU6ICdTdWJtaXQgQ2hlY2tzaGVldCcsXG4gICAgICAgIG1lc3NhZ2U6IGBSZXZpZXcgdGhlIGNoZWNrc2hlZXQgY29tcGxldGVseSBiZWZvcmUgc3VibWl0dGluZywgeW91IGNhbm5vdCBhbHRlciBvbmNlIGl0IGlzIHN1Ym1pdHRlZC4gQXJlIHlvdSBzdXJlIHRvIHN1Ym1pdCB0aGUgQ2hlY2tzaGVldD9gXG4gICAgICB9LFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgLy8gQWN0aW9uIGNvbmZpcm1lZFxuICAgICAgICB0aGlzLmNoZWNrc2hlZXRTdWJtaXNzaW9uU2VydmljZVxuICAgICAgICAgIC5zdWJtaXQodGhpcy5jaGVja3NoZWV0U3VibWlzc2lvbj8uaWQpXG4gICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChcbiAgICAgICAgICAgICAgICAnVGhlIENoZWNrc2hlZXQgc3VibWl0dGVkIScsXG4gICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRoaXMuc2F2ZWQuZW1pdChyZXNwb25zZT8uaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwic3VibWl0KClcIj5cbiAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIj5cbiAgICA8aDM+Q2hlY2tzaGVldDwvaDM+XG5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsPkRhdGU8L21hdC1sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cIkRhdGUgKE1NL0REL1lZWVkpXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAgIChmb2N1cyk9XCJwaWNrZXIub3BlbigpXCJcbiAgICAgIC8+XG4gICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc0ZpZWxkVmFsaWQoJ2RhdGUnKVwiXG4gICAgICAgID57eyBnZXRFcnJvck1lc3NhZ2UoJ2RhdGUnKSB9fVxuICAgICAgPC9tYXQtZXJyb3I+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+Q2hlY2tzaGVldCBGb3JtYXQ8L21hdC1sYWJlbD5cbiAgICAgIDxhcHAtc2VhcmNoYWJsZS1zZWxlY3RvclxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmb3JtYXRfaWRcIlxuICAgICAgICBhcGlVcmw9XCJhcGkvY2hlY2tzaGVldC1mb3JtYXRzP2lzX3B1Ymxpc2hlZD0xXCJcbiAgICAgICAgW2VuYWJsZVNlYXJjaF09XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgIDwvYXBwLXNlYXJjaGFibGUtc2VsZWN0b3I+XG4gICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNGaWVsZFZhbGlkKCdmb3JtYXRfaWQnKVwiXG4gICAgICAgID57eyBnZXRFcnJvck1lc3NhZ2UoJ2Zvcm1hdF9pZCcpIH19XG4gICAgICA8L21hdC1lcnJvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD5DaGVja3NoZWV0IEZvcjwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwic3VibWl0dGFibGVfdHlwZVwiPlxuICAgICAgICA8bWF0LW9wdGlvbiB2YWx1ZT1cImZpeGVkLWFzc2V0XCI+Rml4ZWQgQXNzZXQ8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgKm5nSWY9XCJmb3JtLmdldCgnc3VibWl0dGFibGVfdHlwZScpPy52YWx1ZSA9PT0gJ2ZpeGVkLWFzc2V0J1wiXG4gICAgPlxuICAgICAgPG1hdC1sYWJlbD5GaXhlZCBBc3NldDwvbWF0LWxhYmVsPlxuICAgICAgPGFwcC1zZWFyY2hhYmxlLXNlbGVjdG9yXG4gICAgICAgIGFwaVVybD1cImFwaS9hY2NvdW50aW5nLXBsdXMvZml4ZWQtYXNzZXRzXCJcbiAgICAgICAgdGl0bGVGaWVsZD1cIm5hbWVcIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdWJtaXR0YWJsZV9pZFwiXG4gICAgICA+PC9hcHAtc2VhcmNoYWJsZS1zZWxlY3Rvcj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1sYWJlbD5EZXRhaWxzPC9tYXQtbGFiZWw+XG4gICAgICA8dGV4dGFyZWFcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJEZXRhaWxzXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGV0YWlsc1wiXG4gICAgICA+PC90ZXh0YXJlYT5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgW2Rpc2FibGVkXT1cImlzU2F2aW5nXCJcbiAgICAgICAgbWF0LWZsYXQtYnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiY2FuY2VsbGVkLmVtaXQoKVwiXG4gICAgICA+XG4gICAgICAgIENhbmNlbFxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc1NhdmluZ1wiXG4gICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgPlxuICAgICAgICBTYXZlXG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJjaGVja3NoZWV0U3VibWlzc2lvbj8uaWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNTYXZpbmdcIlxuICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic3VibWl0Q2hlY2tzaGVldCgpXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNvbG9yPVwiYWNjZW50XCJcbiAgICAgID5cbiAgICAgICAgU3VibWl0XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=