nuxeo-development-framework 4.1.1 → 4.1.3

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 (91) hide show
  1. package/bundles/nuxeo-development-framework.umd.js +1521 -1053
  2. package/bundles/nuxeo-development-framework.umd.js.map +1 -1
  3. package/esm2015/lib/components/diagrams/components/circle-node/circle-node.component.js +6 -7
  4. package/esm2015/lib/components/diagrams/components/connection-label.component.js +92 -0
  5. package/esm2015/lib/components/diagrams/components/content-node/content-node.component.js +7 -8
  6. package/esm2015/lib/components/diagrams/components/custom-connection.component.js +68 -32
  7. package/esm2015/lib/components/diagrams/components/custom-socket.component.js +22 -19
  8. package/esm2015/lib/components/diagrams/components/gateway-node/gateway-node.component.js +18 -0
  9. package/esm2015/lib/components/diagrams/components/gateway-ports.component.js +118 -0
  10. package/esm2015/lib/components/diagrams/components/index.js +5 -1
  11. package/esm2015/lib/components/diagrams/components/node-inputs.component.js +34 -35
  12. package/esm2015/lib/components/diagrams/components/node-outputs.component.js +30 -31
  13. package/esm2015/lib/components/diagrams/components/node-ports.component.js +98 -0
  14. package/esm2015/lib/components/diagrams/components/remove-button.component.js +46 -43
  15. package/esm2015/lib/components/diagrams/components/template-node/template-node.component.js +6 -7
  16. package/esm2015/lib/components/diagrams/constants/node-type.js +2 -1
  17. package/esm2015/lib/components/diagrams/constants/sizes.js +2 -1
  18. package/esm2015/lib/components/diagrams/constants/status.js +4 -1
  19. package/esm2015/lib/components/diagrams/diagrams.module.js +14 -6
  20. package/esm2015/lib/components/diagrams/directive/diagram.directive.js +9 -6
  21. package/esm2015/lib/components/diagrams/editor/customize.js +16 -12
  22. package/esm2015/lib/components/diagrams/editor/editor.js +21 -19
  23. package/esm2015/lib/components/diagrams/editor/overrides/connection-path.transformers.js +32 -7
  24. package/esm2015/lib/components/diagrams/editor/path-plugin.js +10 -9
  25. package/esm2015/lib/components/diagrams/models/base-node.model.js +3 -2
  26. package/esm2015/lib/components/diagrams/models/connection.model.js +11 -4
  27. package/esm2015/lib/components/diagrams/models/gate-way.model.js +11 -0
  28. package/esm2015/lib/components/diagrams/models/index.js +2 -1
  29. package/esm2015/lib/components/diagrams/models/ports.model.js +14 -0
  30. package/esm2015/lib/components/diagrams/models/socket.model.js +5 -4
  31. package/esm2015/lib/components/diagrams/services/diagram.service.js +77 -29
  32. package/esm2015/lib/components/diagrams/services/workflow.service.js +14 -19
  33. package/esm2015/lib/components/diagrams/types/common.type.js +1 -1
  34. package/esm2015/lib/components/diagrams/types/connection-config.type.js +2 -0
  35. package/esm2015/lib/components/diagrams/types/connection-label.type.js +2 -0
  36. package/esm2015/lib/components/diagrams/types/diagram-config.type.js +1 -1
  37. package/esm2015/lib/components/diagrams/types/diagram-editor.type.js +1 -1
  38. package/esm2015/lib/components/diagrams/types/index.js +6 -2
  39. package/esm2015/lib/components/diagrams/types/node-definition.js +1 -1
  40. package/esm2015/lib/components/diagrams/types/path.type.js +1 -1
  41. package/esm2015/lib/components/diagrams/types/ports-config.type.js +2 -0
  42. package/esm2015/lib/components/diagrams/types/socket.type.js +2 -0
  43. package/esm2015/lib/components/diagrams/utilities/common.js +35 -0
  44. package/esm2015/lib/components/diagrams/utilities/index.js +3 -1
  45. package/esm2015/lib/components/diagrams/utilities/random.js +11 -0
  46. package/esm2015/lib/components/diagrams/utilities/remove.util.js +2 -2
  47. package/esm2015/lib/components/file-manger/components/copy/copy.component.js +65 -36
  48. package/esm2015/lib/components/file-manger/components/create-directory/create-directory.component.js +39 -13
  49. package/esm2015/lib/components/file-manger/components/folder-modal/folder-modal.component.js +45 -43
  50. package/esm2015/lib/components/file-manger/components/move/move.component.js +60 -31
  51. package/fesm2015/nuxeo-development-framework.js +1269 -675
  52. package/fesm2015/nuxeo-development-framework.js.map +1 -1
  53. package/lib/components/diagrams/components/base-node.component.d.ts +1 -0
  54. package/lib/components/diagrams/components/connection-label.component.d.ts +19 -0
  55. package/lib/components/diagrams/components/custom-connection.component.d.ts +5 -0
  56. package/lib/components/diagrams/components/gateway-node/gateway-node.component.d.ts +6 -0
  57. package/lib/components/diagrams/components/gateway-ports.component.d.ts +12 -0
  58. package/lib/components/diagrams/components/index.d.ts +4 -0
  59. package/lib/components/diagrams/components/node-ports.component.d.ts +13 -0
  60. package/lib/components/diagrams/constants/node-type.d.ts +1 -0
  61. package/lib/components/diagrams/constants/sizes.d.ts +1 -0
  62. package/lib/components/diagrams/constants/status.d.ts +3 -0
  63. package/lib/components/diagrams/diagrams.module.d.ts +12 -8
  64. package/lib/components/diagrams/editor/overrides/connection-path.transformers.d.ts +2 -7
  65. package/lib/components/diagrams/models/base-node.model.d.ts +3 -2
  66. package/lib/components/diagrams/models/connection.model.d.ts +9 -1
  67. package/lib/components/diagrams/models/gate-way.model.d.ts +8 -0
  68. package/lib/components/diagrams/models/index.d.ts +1 -0
  69. package/lib/components/diagrams/models/ports.model.d.ts +11 -0
  70. package/lib/components/diagrams/models/socket.model.d.ts +3 -1
  71. package/lib/components/diagrams/services/diagram.service.d.ts +20 -9
  72. package/lib/components/diagrams/services/workflow.service.d.ts +0 -1
  73. package/lib/components/diagrams/types/common.type.d.ts +5 -0
  74. package/lib/components/diagrams/types/connection-config.type.d.ts +11 -0
  75. package/lib/components/diagrams/types/connection-label.type.d.ts +4 -0
  76. package/lib/components/diagrams/types/diagram-config.type.d.ts +6 -0
  77. package/lib/components/diagrams/types/diagram-editor.type.d.ts +3 -2
  78. package/lib/components/diagrams/types/index.d.ts +5 -1
  79. package/lib/components/diagrams/types/node-definition.d.ts +1 -0
  80. package/lib/components/diagrams/types/path.type.d.ts +1 -0
  81. package/lib/components/diagrams/types/ports-config.type.d.ts +11 -0
  82. package/lib/components/diagrams/types/socket.type.d.ts +5 -0
  83. package/lib/components/diagrams/utilities/common.d.ts +19 -0
  84. package/lib/components/diagrams/utilities/index.d.ts +2 -0
  85. package/lib/components/diagrams/utilities/random.d.ts +1 -0
  86. package/lib/components/diagrams/utilities/remove.util.d.ts +1 -1
  87. package/lib/components/file-manger/components/copy/copy.component.d.ts +11 -4
  88. package/lib/components/file-manger/components/create-directory/create-directory.component.d.ts +9 -4
  89. package/lib/components/file-manger/components/folder-modal/folder-modal.component.d.ts +9 -11
  90. package/lib/components/file-manger/components/move/move.component.d.ts +11 -4
  91. package/package.json +1 -1
@@ -1,28 +1,27 @@
1
1
  import { Component, HostListener, Inject, ViewChild } from '@angular/core';
2
2
  import { MAT_DIALOG_DATA } from '@angular/material/dialog';
3
3
  import { Subject } from 'rxjs';
4
- import { takeUntil } from 'rxjs/operators';
4
+ import { BaseDialogComponent } from '../../../../shared/components/base/base-dialog.component';
5
+ import { tap } from 'rxjs/operators';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/material/dialog";
7
8
  import * as i2 from "../../../../shared-services/file-manager.service";
8
9
  import * as i3 from "../../../../shared-services/dynamic-form.service";
9
- import * as i4 from "../../../../core/services/translation/translation.service";
10
- import * as i5 from "../../../custom-toastr/services/custom-toastr.service";
11
- import * as i6 from "@angular/forms";
12
- import * as i7 from "../../../dynamic-form/components/dynamic-form/dynamic-form.component";
13
- import * as i8 from "@angular/material/progress-spinner";
14
- import * as i9 from "../../../../directive/rtl/set-rtl.directive";
15
- import * as i10 from "@angular/common";
16
- import * as i11 from "@ngx-translate/core";
17
- export class FolderModalComponent {
18
- constructor(data, dialogRef, fileMangerService, dynamicFormService, translationService, tosterService, formBuilder) {
10
+ import * as i4 from "../../../custom-toastr/services/custom-toastr.service";
11
+ import * as i5 from "../../../../shared/components/nuxeo-dialog/nuxeo.dialog";
12
+ import * as i6 from "../../../dynamic-form/components/dynamic-form/dynamic-form.component";
13
+ import * as i7 from "../../../../directive/rtl/set-rtl.directive";
14
+ import * as i8 from "@angular/forms";
15
+ import * as i9 from "@angular/common";
16
+ import * as i10 from "@ngx-translate/core";
17
+ export class FolderModalComponent extends BaseDialogComponent {
18
+ constructor(data, dialogRef, fileMangerService, dynamicFormService, tosterService, injector) {
19
+ super(injector);
19
20
  this.data = data;
20
21
  this.dialogRef = dialogRef;
21
22
  this.fileMangerService = fileMangerService;
22
23
  this.dynamicFormService = dynamicFormService;
23
- this.translationService = translationService;
24
24
  this.tosterService = tosterService;
25
- this.formBuilder = formBuilder;
26
25
  this.temporaryDyanmicData = {};
27
26
  this.showRenderer = false;
28
27
  this.dynamicData = {
@@ -30,31 +29,44 @@ export class FolderModalComponent {
30
29
  };
31
30
  this.staticForm = {
32
31
  title: '',
33
- description: '',
32
+ description: ''
34
33
  // department:''
35
34
  };
36
35
  this.filter = {};
37
36
  this.filter2 = {};
38
37
  this.parentId = '2';
39
- this.isArabic = false;
40
38
  this._unsubscribeAll = new Subject();
41
39
  this.isDmsFolder = false;
42
40
  this.creating = false;
41
+ this.createDocument = () => {
42
+ this.creating = true;
43
+ let params = this.constructPayLoad(this.dynamicData['data'], this.staticForm);
44
+ return this.fileMangerService
45
+ .createFolder(params, this.fileMangerService.selectedFolderId)
46
+ .pipe(tap((res) => {
47
+ //console.log(res);
48
+ this.creating = false;
49
+ this.fileMangerService.onRefreshingFileManger.next();
50
+ this.tosterService.show('success', 'TOASTER.SUCCESS', 'TOASTER.FOLDER_CREATED_SUCCE');
51
+ this.closeDialog();
52
+ }));
53
+ };
43
54
  }
44
55
  KeyUpEvent(event) {
45
- if (this.dynamicData.valid && !this.folderForm.invalid && this.staticForm.title != '..') {
56
+ if (this.dynamicData.valid &&
57
+ !this.folderForm.invalid &&
58
+ this.staticForm.title != '..') {
46
59
  this.createDocument();
47
60
  }
48
61
  }
49
62
  ngOnInit() {
50
- this.translationService.isArabic.pipe(takeUntil(this._unsubscribeAll)).subscribe(res => {
51
- this.isArabic = res;
52
- });
53
63
  this.folderType = this.data.folderType;
54
64
  this.dynamicForm = this.data.dynamicForm;
55
- this.fileMangerService.getFileSchemas(this.folderType.type).subscribe(schemas => {
56
- schemas.map(item => {
57
- if (item.name === "dmsfolder") {
65
+ this.fileMangerService
66
+ .getFileSchemas(this.folderType.type)
67
+ .subscribe((schemas) => {
68
+ schemas.map((item) => {
69
+ if (item.name === 'dmsfolder') {
58
70
  this.isDmsFolder = true;
59
71
  }
60
72
  });
@@ -76,30 +88,20 @@ export class FolderModalComponent {
76
88
  closeDialog() {
77
89
  this.dialogRef.close(false);
78
90
  }
79
- createDocument() {
80
- this.creating = true;
81
- let params = this.constructPayLoad(this.dynamicData['data'], this.staticForm);
82
- this.fileMangerService.createFolder(params, this.fileMangerService.selectedFolderId).subscribe(res => {
83
- //console.log(res);
84
- this.creating = false;
85
- this.fileMangerService.onRefreshingFileManger.next();
86
- this.tosterService.show('success', 'TOASTER.SUCCESS', "TOASTER.FOLDER_CREATED_SUCCE");
87
- this.closeDialog();
88
- });
89
- }
90
91
  constructPayLoad(dynamicValues, staticForm) {
91
92
  // let props = this.constructDynamicFormPayload(dynamicValues);
92
93
  let props = this.dynamicFormService.constructDynamicFormPayload(dynamicValues, this.dynamicForm);
93
94
  let param = {
94
- "document": {
95
- "type": this.folderType.type,
96
- "name": staticForm.title,
97
- "properties": Object.assign(Object.assign({}, props), { "dc:description": staticForm.description, "dc:title": staticForm.title })
95
+ document: {
96
+ type: this.folderType.type,
97
+ name: staticForm.title,
98
+ properties: Object.assign(Object.assign({}, props), { 'dc:description': staticForm.description, 'dc:title': staticForm.title })
98
99
  }
99
100
  };
100
101
  if (this.folderType.documentCode && this.isDmsFolder) {
101
- param["documentTypeCode"] = this.folderType.documentCode;
102
- param['document']['properties']['dmsfolder:documentTypeCode'] = this.folderType.documentCode;
102
+ param['documentTypeCode'] = this.folderType.documentCode;
103
+ param['document']['properties']['dmsfolder:documentTypeCode'] =
104
+ this.folderType.documentCode;
103
105
  }
104
106
  return param;
105
107
  }
@@ -107,8 +109,8 @@ export class FolderModalComponent {
107
109
  //console.log(data);
108
110
  }
109
111
  }
110
- FolderModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FolderModalComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.FileManagerService }, { token: i3.DynamicFormService }, { token: i4.TranslationService }, { token: i5.CustomToastrService }, { token: i6.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
111
- FolderModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FolderModalComponent, selector: "app-folder-modal", host: { listeners: { "document:keyup.enter": "KeyUpEvent($event)" } }, viewQueries: [{ propertyName: "folderForm", first: true, predicate: ["folderForm"], descendants: true }], ngImport: i0, template: "<div class=\"create-folder-modal d-flex justify-center w-full relative h-full\">\r\n <div class=\"folder-wrapper\" SetRtl>\r\n <div class=\"mb-5\">\r\n <div class=\"label-style\">\r\n {{ \"FOLDERS.TYPE\" | translate }}\r\n </div>\r\n <div class=\"text-base text-gray-900\">\r\n {{ isArabic ? folderType.arabicText : folderType.englishText }}\r\n </div>\r\n </div>\r\n <form #folderForm=\"ngForm\">\r\n <div class=\"mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"FOLDERS.TITLE\" | translate }}\r\n </div>\r\n <input\r\n class=\"field-style\"\r\n [ngClass]=\"{ 'border-red-500': staticForm.title === '..' }\"\r\n required\r\n [(ngModel)]=\"staticForm.title\"\r\n id=\"folderTitle\"\r\n name=\"folderTitle\"\r\n />\r\n <div class=\"text-red-500 text-base\" *ngIf=\"staticForm.title === '..'\">\r\n Invalid Folder Title\r\n </div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <div class=\"label-style\">\r\n {{ \"FOLDERS.DESCRIPTION\" | translate }}\r\n </div>\r\n <input\r\n class=\"field-style\"\r\n [(ngModel)]=\"staticForm.description\"\r\n id=\"folderDescription\"\r\n name=\"folderDescription\"\r\n />\r\n </div>\r\n </form>\r\n \r\n <div class=\"dynamic-part -mx-4\" *ngIf=\"dynamicForm && showRenderer\">\r\n <app-dynamic-form\r\n [form]=\"dynamicForm\"\r\n [data]=\"temporaryDyanmicData\"\r\n (change)=\"ondynamicFormChange($event)\"\r\n ></app-dynamic-form>\r\n </div>\r\n </div>\r\n <!-- -->\r\n <!-- actions and buttons -->\r\n <div\r\n class=\"w-full d-flex justify-between absolute bottom-0 actionsBtnWrapper\"\r\n >\r\n <ng-container *ngIf=\"!creating\">\r\n <button\r\n (click)=\"createDocument()\"\r\n [disabled]=\"\r\n !dynamicData.valid || folderForm.invalid || staticForm.title === '..'\r\n \"\r\n [ngClass]=\"{\r\n 'opacity-30 cursor-not-allowed':\r\n !dynamicData.valid ||\r\n folderForm.invalid ||\r\n staticForm.title === '..'\r\n }\"\r\n class=\"submission-button\"\r\n >\r\n {{ \"BUTTONS.CREATE\" | translate }}\r\n </button>\r\n </ng-container>\r\n <span class=\"submission-button\" *ngIf=\"creating\">\r\n <mat-spinner\r\n [value]=\"90\"\r\n [strokeWidth]=\"3\"\r\n overlay=\"true\"\r\n [diameter]=\"25\"\r\n color=\"warn\"\r\n >\r\n </mat-spinner>\r\n </span>\r\n \r\n <button class=\"cancelation-button\" (click)=\"closeDialog()\">\r\n {{ \"BUTTONS.CANCEL\" | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n ", styles: [".folder-wrapper{height:calc(100% - 50px);overflow-y:auto;overflow-x:hidden;padding:0 10px;width:100%}.rtl .actionsBtnWrapper{direction:ltr}.actionsBtnWrapper{direction:rtl}\n"], components: [{ type: i7.DynamicFormComponent, selector: "app-dynamic-form", inputs: ["form", "data", "readOnly"], outputs: ["change"] }, { type: i8.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i9.SetRtlDirective, selector: "[SetRtl]" }, { type: i6.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i6.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i6.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i10.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i11.TranslatePipe } });
112
+ FolderModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FolderModalComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialogRef }, { token: i2.FileManagerService }, { token: i3.DynamicFormService }, { token: i4.CustomToastrService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
113
+ FolderModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: FolderModalComponent, selector: "app-folder-modal", host: { listeners: { "document:keyup.enter": "KeyUpEvent($event)" } }, viewQueries: [{ propertyName: "folderForm", first: true, predicate: ["folderForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ndf-nuxeo-dialog dialogTitle=\"{{ 'CREATE.createFolder' | translate }}\">\r\n\t<ng-template #contentTemplate>\r\n\t\t<div\r\n\t\t\tclass=\"create-folder-modal d-flex justify-center w-full relative h-full\"\r\n\t\t>\r\n\t\t\t<div class=\"folder-wrapper\" SetRtl>\r\n\t\t\t\t<div class=\"mb-5\">\r\n\t\t\t\t\t<div class=\"label-style\">\r\n\t\t\t\t\t\t{{ 'FOLDERS.TYPE' | translate }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"text-base text-gray-900\">\r\n\t\t\t\t\t\t{{ isArabic ? folderType.arabicText : folderType.englishText }}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</div>\r\n\t\t\t\t<form #folderForm=\"ngForm\">\r\n\t\t\t\t\t<div class=\"mb-3\">\r\n\t\t\t\t\t\t<div class=\"label-style\">\r\n\t\t\t\t\t\t\t{{ 'FOLDERS.TITLE' | translate }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\tclass=\"field-style\"\r\n\t\t\t\t\t\t\t[ngClass]=\"{ 'border-red-500': staticForm.title === '..' }\"\r\n\t\t\t\t\t\t\trequired\r\n\t\t\t\t\t\t\t[(ngModel)]=\"staticForm.title\"\r\n\t\t\t\t\t\t\tid=\"folderTitle\"\r\n\t\t\t\t\t\t\tname=\"folderTitle\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\tclass=\"text-red-500 text-base\"\r\n\t\t\t\t\t\t\t*ngIf=\"staticForm.title === '..'\"\r\n\t\t\t\t\t\t>\r\n\t\t\t\t\t\t\tInvalid Folder Title\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t\t<div class=\"mb-3\">\r\n\t\t\t\t\t\t<div class=\"label-style\">\r\n\t\t\t\t\t\t\t{{ 'FOLDERS.DESCRIPTION' | translate }}\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t<input\r\n\t\t\t\t\t\t\tclass=\"field-style\"\r\n\t\t\t\t\t\t\t[(ngModel)]=\"staticForm.description\"\r\n\t\t\t\t\t\t\tid=\"folderDescription\"\r\n\t\t\t\t\t\t\tname=\"folderDescription\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</form>\r\n\r\n\t\t\t\t<div class=\"dynamic-part -mx-4\" *ngIf=\"dynamicForm && showRenderer\">\r\n\t\t\t\t\t<app-dynamic-form\r\n\t\t\t\t\t\t[form]=\"dynamicForm\"\r\n\t\t\t\t\t\t[data]=\"temporaryDyanmicData\"\r\n\t\t\t\t\t\t(change)=\"ondynamicFormChange($event)\"\r\n\t\t\t\t\t></app-dynamic-form>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t\t<!-- -->\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<ng-template #actionsTemplate let-dialog=\"dialog\">\r\n\t\t<ng-container *ngIf=\"!creating\">\r\n\t\t\t<button\r\n\t\t\t\tclass=\"submission-button w-44\"\r\n\t\t\t\t(click)=\"dialog.executeAction(createDocument)\"\r\n\t\t\t>\r\n\t\t\t\t{{ 'BUTTONS.CREATE' | translate }}\r\n\t\t\t</button>\r\n\t\t</ng-container>\r\n\t</ng-template>\r\n</ndf-nuxeo-dialog>\r\n", styles: [".folder-wrapper{height:calc(100% - 50px);overflow-y:auto;overflow-x:hidden;padding:0 10px;width:100%}.rtl .actionsBtnWrapper{direction:ltr}.actionsBtnWrapper{direction:rtl}\n"], components: [{ type: i5.NdfNuxeoDialog, selector: "ndf-nuxeo-dialog", inputs: ["dialogTitle", "subTitle", "loaderMode"] }, { type: i6.DynamicFormComponent, selector: "app-dynamic-form", inputs: ["form", "data", "readOnly"], outputs: ["change"] }], directives: [{ type: i7.SetRtlDirective, selector: "[SetRtl]" }, { type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "translate": i10.TranslatePipe } });
112
114
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FolderModalComponent, decorators: [{
113
115
  type: Component,
114
116
  args: [{
@@ -119,11 +121,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
119
121
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
120
122
  type: Inject,
121
123
  args: [MAT_DIALOG_DATA]
122
- }] }, { type: i1.MatDialogRef }, { type: i2.FileManagerService }, { type: i3.DynamicFormService }, { type: i4.TranslationService }, { type: i5.CustomToastrService }, { type: i6.FormBuilder }]; }, propDecorators: { folderForm: [{
124
+ }] }, { type: i1.MatDialogRef }, { type: i2.FileManagerService }, { type: i3.DynamicFormService }, { type: i4.CustomToastrService }, { type: i0.Injector }]; }, propDecorators: { folderForm: [{
123
125
  type: ViewChild,
124
126
  args: ['folderForm']
125
127
  }], KeyUpEvent: [{
126
128
  type: HostListener,
127
129
  args: ['document:keyup.enter', ['$event']]
128
130
  }] } });
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9sZGVyLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9mb2xkZXItbW9kYWwvZm9sZGVyLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9mb2xkZXItbW9kYWwvZm9sZGVyLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQXFCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RyxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVMzQyxNQUFNLE9BQU8sb0JBQW9CO0lBOEIvQixZQUE0QyxJQUFJLEVBQ3hDLFNBQThDLEVBQzlDLGlCQUFzQyxFQUN0QyxrQkFBdUMsRUFDdkMsa0JBQXVDLEVBQ3ZDLGFBQW1DLEVBQ25DLFdBQXlCO1FBTlcsU0FBSSxHQUFKLElBQUksQ0FBQTtRQUN4QyxjQUFTLEdBQVQsU0FBUyxDQUFxQztRQUM5QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBQ3RDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBcUI7UUFDdkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFxQjtRQUN2QyxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDbkMs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LG9CQUFvQixrQkE4QlgsZUFBZTtzR0E5QnhCLG9CQUFvQix5T0NmakMsbzdGQXNGRTs0RkR2RVcsb0JBQW9CO2tCQUxoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFdBQVcsRUFBRSwrQkFBK0I7b0JBQzVDLFNBQVMsRUFBRSxDQUFDLCtCQUErQixDQUFDO2lCQUM3Qzs7MEJBK0JjLE1BQU07MkJBQUMsZUFBZTtzT0FQVixVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBRXZCLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxzQkFBc0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBEeW5hbWljRm9ybVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZHluYW1pYy1mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL3RyYW5zbGF0aW9uL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21Ub2FzdHJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY3VzdG9tLXRvYXN0ci9zZXJ2aWNlcy9jdXN0b20tdG9hc3RyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZm9sZGVyLW1vZGFsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZm9sZGVyLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mb2xkZXItbW9kYWwuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9sZGVyTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQgLCBBZnRlclZpZXdJbml0ICwgT25EZXN0cm95IHtcclxuICBmb2xkZXJUeXBlO1xyXG4gIGR5bmFtaWNGb3JtO1xyXG4gIHRlbXBvcmFyeUR5YW5taWNEYXRhID0ge307XHJcbiAgc2hvd1JlbmRlcmVyID0gZmFsc2U7XHJcbiAgZHluYW1pY0RhdGEgPSB7XHJcbiAgICB2YWxpZCA6IGZhbHNlXHJcbiAgfTtcclxuICBzdGF0aWNGb3JtID0ge1xyXG4gICAgdGl0bGUgOiAnJyxcclxuICAgIGRlc2NyaXB0aW9uIDogJycsXHJcbiAgICAvLyBkZXBhcnRtZW50OicnXHJcbiAgfVxyXG5cclxuICBmaWx0ZXI9e307XHJcbiAgZmlsdGVyMj17fTtcclxuICBwYXJlbnRJZD0nMic7XHJcbiAgY2hpbGRJZDtcclxuICB0ZXN0aW5nRm9ybSA6IEZvcm1Hcm91cDtcclxuICBpc0FyYWJpYyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgaXNEbXNGb2xkZXIgPSBmYWxzZTtcclxuICBjcmVhdGluZyA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ2ZvbGRlckZvcm0nKSBmb2xkZXJGb3JtOiBGb3JtR3JvdXA7XHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAuZW50ZXInLCBbJyRldmVudCddKVxyXG4gIEtleVVwRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmKHRoaXMuZHluYW1pY0RhdGEudmFsaWQgJiYgIXRoaXMuZm9sZGVyRm9ybS5pbnZhbGlkICYmIHRoaXMuc3RhdGljRm9ybS50aXRsZSAhPSAnLi4nKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRG9jdW1lbnQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgY29uc3RydWN0b3IoQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhICwgXHJcbiAgcHJpdmF0ZSBkaWFsb2dSZWYgOiBNYXREaWFsb2dSZWY8Rm9sZGVyTW9kYWxDb21wb25lbnQ+LFxyXG4gIHByaXZhdGUgZmlsZU1hbmdlclNlcnZpY2UgOiBGaWxlTWFuYWdlclNlcnZpY2UsXHJcbiAgcHJpdmF0ZSBkeW5hbWljRm9ybVNlcnZpY2UgOiBEeW5hbWljRm9ybVNlcnZpY2UsXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2UgOiBUcmFuc2xhdGlvblNlcnZpY2UsXHJcbiAgcHJpdmF0ZSB0b3N0ZXJTZXJ2aWNlIDogQ3VzdG9tVG9hc3RyU2VydmljZSxcclxuICBwcml2YXRlIGZvcm1CdWlsZGVyIDogRm9ybUJ1aWxkZXIpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLmlzQXJhYmljLnBpcGUodGFrZVVudGlsKHRoaXMuX3Vuc3Vic2NyaWJlQWxsKSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgIHRoaXMuaXNBcmFiaWMgPSByZXM7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5mb2xkZXJUeXBlID0gdGhpcy5kYXRhLmZvbGRlclR5cGU7XHJcbiAgICB0aGlzLmR5bmFtaWNGb3JtID0gdGhpcy5kYXRhLmR5bmFtaWNGb3JtO1xyXG4gICAgdGhpcy5maWxlTWFuZ2VyU2VydmljZS5nZXRGaWxlU2NoZW1hcyh0aGlzLmZvbGRlclR5cGUudHlwZSkuc3Vic2NyaWJlKHNjaGVtYXMgPT4ge1xyXG4gICAgICBzY2hlbWFzLm1hcChpdGVtID0+IHtcclxuICAgICAgICBpZihpdGVtLm5hbWUgPT09IFwiZG1zZm9sZGVyXCIpe1xyXG4gICAgICAgICAgdGhpcy5pc0Rtc0ZvbGRlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpe1xyXG4gICAgdGhpcy5zaG93UmVuZGVyZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XHJcbiAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuICBvbmR5bmFtaWNGb3JtQ2hhbmdlKGR5bmFtaWNEYXRhKSB7XHJcbiAgICBpZiAoZHluYW1pY0RhdGEuZGF0YSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhkeW5hbWljRGF0YS5kYXRhKVxyXG4gICAgICB0aGlzLmR5bmFtaWNEYXRhID0geyAuLi5keW5hbWljRGF0YSB9O1xyXG4gICAgfVxyXG4gIH1cclxuICBjbG9zZURpYWxvZygpIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGNyZWF0ZURvY3VtZW50KCkge1xyXG4gICAgdGhpcy5jcmVhdGluZyA9IHRydWU7XHJcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5jb25zdHJ1Y3RQYXlMb2FkKHRoaXMuZHluYW1pY0RhdGFbJ2RhdGEnXSAsIHRoaXMuc3RhdGljRm9ybSk7XHJcbiAgICB0aGlzLmZpbGVNYW5nZXJTZXJ2aWNlLmNyZWF0ZUZvbGRlcihwYXJhbXMgLCB0aGlzLmZpbGVNYW5nZXJTZXJ2aWNlLnNlbGVjdGVkRm9sZGVySWQpLnN1YnNjcmliZShyZXMgPT57XHJcbiAgICAgIC8vY29uc29sZS5sb2cocmVzKTtcclxuICAgICAgdGhpcy5jcmVhdGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbGVNYW5nZXJTZXJ2aWNlLm9uUmVmcmVzaGluZ0ZpbGVNYW5nZXIubmV4dCgpO1xyXG4gICAgICB0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdygnc3VjY2VzcycsICdUT0FTVEVSLlNVQ0NFU1MnLCBcIlRPQVNURVIuRk9MREVSX0NSRUFURURfU1VDQ0VcIik7XHJcbiAgICAgIHRoaXMuY2xvc2VEaWFsb2coKTtcclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0UGF5TG9hZChkeW5hbWljVmFsdWVzICwgc3RhdGljRm9ybSkge1xyXG4gICAgICAvLyBsZXQgcHJvcHMgPSB0aGlzLmNvbnN0cnVjdER5bmFtaWNGb3JtUGF5bG9hZChkeW5hbWljVmFsdWVzKTtcclxuICAgICAgbGV0IHByb3BzID0gdGhpcy5keW5hbWljRm9ybVNlcnZpY2UuY29uc3RydWN0RHluYW1pY0Zvcm1QYXlsb2FkKGR5bmFtaWNWYWx1ZXMgLCB0aGlzLmR5bmFtaWNGb3JtKTtcclxuICAgICAgbGV0IHBhcmFtID0ge1xyXG4gICAgICAgIFwiZG9jdW1lbnRcIjoge1xyXG4gICAgICAgICAgXCJ0eXBlXCI6IHRoaXMuZm9sZGVyVHlwZS50eXBlLFxyXG4gICAgICAgICAgXCJuYW1lXCI6IHN0YXRpY0Zvcm0udGl0bGUsXHJcbiAgICAgICAgICBcInByb3BlcnRpZXNcIjoge1xyXG4gICAgICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICAgICAgXCJkYzpkZXNjcmlwdGlvblwiOiBzdGF0aWNGb3JtLmRlc2NyaXB0aW9uLFxyXG4gICAgICAgICAgICBcImRjOnRpdGxlXCI6IHN0YXRpY0Zvcm0udGl0bGUsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG4gICAgICBpZih0aGlzLmZvbGRlclR5cGUuZG9jdW1lbnRDb2RlICYmIHRoaXMuaXNEbXNGb2xkZXIpe1xyXG4gICAgICAgcGFyYW1bXCJkb2N1bWVudFR5cGVDb2RlXCJdID0gdGhpcy5mb2xkZXJUeXBlLmRvY3VtZW50Q29kZTtcclxuICAgICAgIHBhcmFtWydkb2N1bWVudCddWydwcm9wZXJ0aWVzJ11bJ2Rtc2ZvbGRlcjpkb2N1bWVudFR5cGVDb2RlJ10gPSB0aGlzLmZvbGRlclR5cGUuZG9jdW1lbnRDb2RlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBwYXJhbTtcclxuICB9XHJcblxyXG4gIGNoYW5naW5nKGRhdGEpe1xyXG4gICAgLy9jb25zb2xlLmxvZyhkYXRhKTtcclxuICB9XHJcbn1cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJjcmVhdGUtZm9sZGVyLW1vZGFsIGQtZmxleCBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgcmVsYXRpdmUgaC1mdWxsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9sZGVyLXdyYXBwZXJcIiBTZXRSdGw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJtYi01XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLXN0eWxlXCI+XHJcbiAgICAgICAgICB7eyBcIkZPTERFUlMuVFlQRVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSB0ZXh0LWdyYXktOTAwXCI+XHJcbiAgICAgICAgICB7eyBpc0FyYWJpYyA/IGZvbGRlclR5cGUuYXJhYmljVGV4dCA6IGZvbGRlclR5cGUuZW5nbGlzaFRleHQgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxmb3JtICNmb2xkZXJGb3JtPVwibmdGb3JtXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG4gICAgICAgICAgICB7eyBcIkZPTERFUlMuVElUTEVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgY2xhc3M9XCJmaWVsZC1zdHlsZVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2JvcmRlci1yZWQtNTAwJzogc3RhdGljRm9ybS50aXRsZSA9PT0gJy4uJyB9XCJcclxuICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzdGF0aWNGb3JtLnRpdGxlXCJcclxuICAgICAgICAgICAgaWQ9XCJmb2xkZXJUaXRsZVwiXHJcbiAgICAgICAgICAgIG5hbWU9XCJmb2xkZXJUaXRsZVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtcmVkLTUwMCB0ZXh0LWJhc2VcIiAqbmdJZj1cInN0YXRpY0Zvcm0udGl0bGUgPT09ICcuLidcIj5cclxuICAgICAgICAgICAgSW52YWxpZCBGb2xkZXIgVGl0bGVcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtc3R5bGVcIj5cclxuICAgICAgICAgICAge3sgXCJGT0xERVJTLkRFU0NSSVBUSU9OXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmllbGQtc3R5bGVcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInN0YXRpY0Zvcm0uZGVzY3JpcHRpb25cIlxyXG4gICAgICAgICAgICBpZD1cImZvbGRlckRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgICAgbmFtZT1cImZvbGRlckRlc2NyaXB0aW9uXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZm9ybT5cclxuICBcclxuICAgICAgPGRpdiBjbGFzcz1cImR5bmFtaWMtcGFydCAtbXgtNFwiICpuZ0lmPVwiZHluYW1pY0Zvcm0gJiYgc2hvd1JlbmRlcmVyXCI+XHJcbiAgICAgICAgPGFwcC1keW5hbWljLWZvcm1cclxuICAgICAgICAgIFtmb3JtXT1cImR5bmFtaWNGb3JtXCJcclxuICAgICAgICAgIFtkYXRhXT1cInRlbXBvcmFyeUR5YW5taWNEYXRhXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwib25keW5hbWljRm9ybUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICA+PC9hcHAtZHluYW1pYy1mb3JtPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSAgLS0+XHJcbiAgICA8IS0tIGFjdGlvbnMgYW5kIGJ1dHRvbnMgIC0tPlxyXG4gICAgPGRpdlxyXG4gICAgICBjbGFzcz1cInctZnVsbCBkLWZsZXgganVzdGlmeS1iZXR3ZWVuIGFic29sdXRlIGJvdHRvbS0wIGFjdGlvbnNCdG5XcmFwcGVyXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjcmVhdGluZ1wiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIChjbGljayk9XCJjcmVhdGVEb2N1bWVudCgpXCJcclxuICAgICAgICAgIFtkaXNhYmxlZF09XCJcclxuICAgICAgICAgICAgIWR5bmFtaWNEYXRhLnZhbGlkIHx8IGZvbGRlckZvcm0uaW52YWxpZCB8fCBzdGF0aWNGb3JtLnRpdGxlID09PSAnLi4nXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAnb3BhY2l0eS0zMCBjdXJzb3Itbm90LWFsbG93ZWQnOlxyXG4gICAgICAgICAgICAgICFkeW5hbWljRGF0YS52YWxpZCB8fFxyXG4gICAgICAgICAgICAgIGZvbGRlckZvcm0uaW52YWxpZCB8fFxyXG4gICAgICAgICAgICAgIHN0YXRpY0Zvcm0udGl0bGUgPT09ICcuLidcclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgY2xhc3M9XCJzdWJtaXNzaW9uLWJ1dHRvblwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgXCJCVVRUT05TLkNSRUFURVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uXCIgKm5nSWY9XCJjcmVhdGluZ1wiPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lclxyXG4gICAgICAgICAgW3ZhbHVlXT1cIjkwXCJcclxuICAgICAgICAgIFtzdHJva2VXaWR0aF09XCIzXCJcclxuICAgICAgICAgIG92ZXJsYXk9XCJ0cnVlXCJcclxuICAgICAgICAgIFtkaWFtZXRlcl09XCIyNVwiXHJcbiAgICAgICAgICBjb2xvcj1cIndhcm5cIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L21hdC1zcGlubmVyPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgXHJcbiAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxhdGlvbi1idXR0b25cIiAoY2xpY2spPVwiY2xvc2VEaWFsb2coKVwiPlxyXG4gICAgICAgIHt7IFwiQlVUVE9OUy5DQU5DRUxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gICJdfQ==
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9sZGVyLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9mb2xkZXItbW9kYWwvZm9sZGVyLW1vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9mb2xkZXItbW9kYWwvZm9sZGVyLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFJTixTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUd6RSxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUk3QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUUvRixPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7OztBQU9yQyxNQUFNLE9BQU8sb0JBQ1osU0FBUSxtQkFBbUQ7SUFtQzNELFlBQ2lDLElBQUksRUFDNUIsU0FBNkMsRUFDN0MsaUJBQXFDLEVBQ3JDLGtCQUFzQyxFQUN0QyxhQUFrQyxFQUMxQyxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFQZ0IsU0FBSSxHQUFKLElBQUksQ0FBQTtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFvQztRQUM3QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW9CO1FBQ3JDLHVCQUFrQixHQUFsQixrQkFBa0Is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QjtvQkFDNUIsV0FBVyxFQUFFLCtCQUErQjtvQkFDNUMsU0FBUyxFQUFFLENBQUMsK0JBQStCLENBQUM7aUJBQzVDOzswQkFzQ0UsTUFBTTsyQkFBQyxlQUFlO2tNQVpDLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFFdkIsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLHNCQUFzQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuXHRBZnRlclZpZXdJbml0LFxyXG5cdENvbXBvbmVudCxcclxuXHRIb3N0TGlzdGVuZXIsXHJcblx0SW5qZWN0LFxyXG5cdEluamVjdG9yLFxyXG5cdE9uRGVzdHJveSxcclxuXHRPbkluaXQsXHJcblx0Vmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRHluYW1pY0Zvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkLXNlcnZpY2VzL2R5bmFtaWMtZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkLXNlcnZpY2VzL2ZpbGUtbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy90cmFuc2xhdGlvbi90cmFuc2xhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tVG9hc3RyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2N1c3RvbS10b2FzdHIvc2VydmljZXMvY3VzdG9tLXRvYXN0ci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2Jhc2UvYmFzZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGlhbG9nQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL251eGVvLWRpYWxvZy9tb2RlbHMvZGlhbG9nLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnYXBwLWZvbGRlci1tb2RhbCcsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2ZvbGRlci1tb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vZm9sZGVyLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZvbGRlck1vZGFsQ29tcG9uZW50XHJcblx0ZXh0ZW5kcyBCYXNlRGlhbG9nQ29tcG9uZW50PEZvbGRlck1vZGFsQ29tcG9uZW50LCBhbnksIGFueT5cclxuXHRpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XHJcbntcclxuXHRmb2xkZXJUeXBlO1xyXG5cdGR5bmFtaWNGb3JtO1xyXG5cdHRlbXBvcmFyeUR5YW5taWNEYXRhID0ge307XHJcblx0c2hvd1JlbmRlcmVyID0gZmFsc2U7XHJcblx0ZHluYW1pY0RhdGEgPSB7XHJcblx0XHR2YWxpZDogZmFsc2VcclxuXHR9O1xyXG5cdHN0YXRpY0Zvcm0gPSB7XHJcblx0XHR0aXRsZTogJycsXHJcblx0XHRkZXNjcmlwdGlvbjogJydcclxuXHRcdC8vIGRlcGFydG1lbnQ6JydcclxuXHR9O1xyXG5cclxuXHRmaWx0ZXIgPSB7fTtcclxuXHRmaWx0ZXIyID0ge307XHJcblx0cGFyZW50SWQgPSAnMic7XHJcblx0Y2hpbGRJZDtcclxuXHR0ZXN0aW5nRm9ybTogRm9ybUdyb3VwO1xyXG5cdHByaXZhdGUgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblx0aXNEbXNGb2xkZXIgPSBmYWxzZTtcclxuXHRjcmVhdGluZyA9IGZhbHNlO1xyXG5cdEBWaWV3Q2hpbGQoJ2ZvbGRlckZvcm0nKSBmb2xkZXJGb3JtOiBGb3JtR3JvdXA7XHJcblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5dXAuZW50ZXInLCBbJyRldmVudCddKVxyXG5cdEtleVVwRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5keW5hbWljRGF0YS52YWxpZCAmJlxyXG5cdFx0XHQhdGhpcy5mb2xkZXJGb3JtLmludmFsaWQgJiZcclxuXHRcdFx0dGhpcy5zdGF0aWNGb3JtLnRpdGxlICE9ICcuLidcclxuXHRcdCkge1xyXG5cdFx0XHR0aGlzLmNyZWF0ZURvY3VtZW50KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0QEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhLFxyXG5cdFx0cHJpdmF0ZSBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxGb2xkZXJNb2RhbENvbXBvbmVudD4sXHJcblx0XHRwcml2YXRlIGZpbGVNYW5nZXJTZXJ2aWNlOiBGaWxlTWFuYWdlclNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGR5bmFtaWNGb3JtU2VydmljZTogRHluYW1pY0Zvcm1TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB0b3N0ZXJTZXJ2aWNlOiBDdXN0b21Ub2FzdHJTZXJ2aWNlLFxyXG5cdFx0aW5qZWN0b3I6IEluamVjdG9yXHJcblx0KSB7XHJcblx0XHRzdXBlcihpbmplY3Rvcik7XHJcblx0fVxyXG5cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHRoaXMuZm9sZGVyVHlwZSA9IHRoaXMuZGF0YS5mb2xkZXJUeXBlO1xyXG5cdFx0dGhpcy5keW5hbWljRm9ybSA9IHRoaXMuZGF0YS5keW5hbWljRm9ybTtcclxuXHRcdHRoaXMuZmlsZU1hbmdlclNlcnZpY2VcclxuXHRcdFx0LmdldEZpbGVTY2hlbWFzKHRoaXMuZm9sZGVyVHlwZS50eXBlKVxyXG5cdFx0XHQuc3Vic2NyaWJlKChzY2hlbWFzKSA9PiB7XHJcblx0XHRcdFx0c2NoZW1hcy5tYXAoKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRcdGlmIChpdGVtLm5hbWUgPT09ICdkbXNmb2xkZXInKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuaXNEbXNGb2xkZXIgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblx0bmdBZnRlclZpZXdJbml0KCkge1xyXG5cdFx0dGhpcy5zaG93UmVuZGVyZXIgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XHJcblx0XHR0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xyXG5cdH1cclxuXHRvbmR5bmFtaWNGb3JtQ2hhbmdlKGR5bmFtaWNEYXRhKSB7XHJcblx0XHRpZiAoZHluYW1pY0RhdGEuZGF0YSkge1xyXG5cdFx0XHRjb25zb2xlLmxvZyhkeW5hbWljRGF0YS5kYXRhKTtcclxuXHRcdFx0dGhpcy5keW5hbWljRGF0YSA9IHsgLi4uZHluYW1pY0RhdGEgfTtcclxuXHRcdH1cclxuXHR9XHJcblx0Y2xvc2VEaWFsb2coKSB7XHJcblx0XHR0aGlzLmRpYWxvZ1JlZi5jbG9zZShmYWxzZSk7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVEb2N1bWVudDogRGlhbG9nQWN0aW9uVHlwZSA9ICgpID0+IHtcclxuXHRcdHRoaXMuY3JlYXRpbmcgPSB0cnVlO1xyXG5cdFx0bGV0IHBhcmFtcyA9IHRoaXMuY29uc3RydWN0UGF5TG9hZChcclxuXHRcdFx0dGhpcy5keW5hbWljRGF0YVsnZGF0YSddLFxyXG5cdFx0XHR0aGlzLnN0YXRpY0Zvcm1cclxuXHRcdCk7XHJcblx0XHRyZXR1cm4gdGhpcy5maWxlTWFuZ2VyU2VydmljZVxyXG5cdFx0XHQuY3JlYXRlRm9sZGVyKHBhcmFtcywgdGhpcy5maWxlTWFuZ2VyU2VydmljZS5zZWxlY3RlZEZvbGRlcklkKVxyXG5cclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0dGFwKChyZXMpID0+IHtcclxuXHRcdFx0XHRcdC8vY29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHRcdHRoaXMuY3JlYXRpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdHRoaXMuZmlsZU1hbmdlclNlcnZpY2Uub25SZWZyZXNoaW5nRmlsZU1hbmdlci5uZXh0KCk7XHJcblx0XHRcdFx0XHR0aGlzLnRvc3RlclNlcnZpY2Uuc2hvdyhcclxuXHRcdFx0XHRcdFx0J3N1Y2Nlc3MnLFxyXG5cdFx0XHRcdFx0XHQnVE9BU1RFUi5TVUNDRVNTJyxcclxuXHRcdFx0XHRcdFx0J1RPQVNURVIuRk9MREVSX0NSRUFURURfU1VDQ0UnXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0dGhpcy5jbG9zZURpYWxvZygpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblx0fTtcclxuXHJcblx0Y29uc3RydWN0UGF5TG9hZChkeW5hbWljVmFsdWVzLCBzdGF0aWNGb3JtKSB7XHJcblx0XHQvLyBsZXQgcHJvcHMgPSB0aGlzLmNvbnN0cnVjdER5bmFtaWNGb3JtUGF5bG9hZChkeW5hbWljVmFsdWVzKTtcclxuXHRcdGxldCBwcm9wcyA9IHRoaXMuZHluYW1pY0Zvcm1TZXJ2aWNlLmNvbnN0cnVjdER5bmFtaWNGb3JtUGF5bG9hZChcclxuXHRcdFx0ZHluYW1pY1ZhbHVlcyxcclxuXHRcdFx0dGhpcy5keW5hbWljRm9ybVxyXG5cdFx0KTtcclxuXHRcdGxldCBwYXJhbSA9IHtcclxuXHRcdFx0ZG9jdW1lbnQ6IHtcclxuXHRcdFx0XHR0eXBlOiB0aGlzLmZvbGRlclR5cGUudHlwZSxcclxuXHRcdFx0XHRuYW1lOiBzdGF0aWNGb3JtLnRpdGxlLFxyXG5cdFx0XHRcdHByb3BlcnRpZXM6IHtcclxuXHRcdFx0XHRcdC4uLnByb3BzLFxyXG5cdFx0XHRcdFx0J2RjOmRlc2NyaXB0aW9uJzogc3RhdGljRm9ybS5kZXNjcmlwdGlvbixcclxuXHRcdFx0XHRcdCdkYzp0aXRsZSc6IHN0YXRpY0Zvcm0udGl0bGVcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0XHRpZiAodGhpcy5mb2xkZXJUeXBlLmRvY3VtZW50Q29kZSAmJiB0aGlzLmlzRG1zRm9sZGVyKSB7XHJcblx0XHRcdHBhcmFtWydkb2N1bWVudFR5cGVDb2RlJ10gPSB0aGlzLmZvbGRlclR5cGUuZG9jdW1lbnRDb2RlO1xyXG5cdFx0XHRwYXJhbVsnZG9jdW1lbnQnXVsncHJvcGVydGllcyddWydkbXNmb2xkZXI6ZG9jdW1lbnRUeXBlQ29kZSddID1cclxuXHRcdFx0XHR0aGlzLmZvbGRlclR5cGUuZG9jdW1lbnRDb2RlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHBhcmFtO1xyXG5cdH1cclxuXHJcblx0Y2hhbmdpbmcoZGF0YSkge1xyXG5cdFx0Ly9jb25zb2xlLmxvZyhkYXRhKTtcclxuXHR9XHJcbn1cclxuIiwiPG5kZi1udXhlby1kaWFsb2cgZGlhbG9nVGl0bGU9XCJ7eyAnQ1JFQVRFLmNyZWF0ZUZvbGRlcicgfCB0cmFuc2xhdGUgfX1cIj5cclxuXHQ8bmctdGVtcGxhdGUgI2NvbnRlbnRUZW1wbGF0ZT5cclxuXHRcdDxkaXZcclxuXHRcdFx0Y2xhc3M9XCJjcmVhdGUtZm9sZGVyLW1vZGFsIGQtZmxleCBqdXN0aWZ5LWNlbnRlciB3LWZ1bGwgcmVsYXRpdmUgaC1mdWxsXCJcclxuXHRcdD5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImZvbGRlci13cmFwcGVyXCIgU2V0UnRsPlxyXG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJtYi01XCI+XHJcblx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwibGFiZWwtc3R5bGVcIj5cclxuXHRcdFx0XHRcdFx0e3sgJ0ZPTERFUlMuVFlQRScgfCB0cmFuc2xhdGUgfX1cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cInRleHQtYmFzZSB0ZXh0LWdyYXktOTAwXCI+XHJcblx0XHRcdFx0XHRcdHt7IGlzQXJhYmljID8gZm9sZGVyVHlwZS5hcmFiaWNUZXh0IDogZm9sZGVyVHlwZS5lbmdsaXNoVGV4dCB9fVxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PGZvcm0gI2ZvbGRlckZvcm09XCJuZ0Zvcm1cIj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG5cdFx0XHRcdFx0XHRcdHt7ICdGT0xERVJTLlRJVExFJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWVsZC1zdHlsZVwiXHJcblx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieyAnYm9yZGVyLXJlZC01MDAnOiBzdGF0aWNGb3JtLnRpdGxlID09PSAnLi4nIH1cIlxyXG5cdFx0XHRcdFx0XHRcdHJlcXVpcmVkXHJcblx0XHRcdFx0XHRcdFx0WyhuZ01vZGVsKV09XCJzdGF0aWNGb3JtLnRpdGxlXCJcclxuXHRcdFx0XHRcdFx0XHRpZD1cImZvbGRlclRpdGxlXCJcclxuXHRcdFx0XHRcdFx0XHRuYW1lPVwiZm9sZGVyVGl0bGVcIlxyXG5cdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0XHQ8ZGl2XHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJ0ZXh0LXJlZC01MDAgdGV4dC1iYXNlXCJcclxuXHRcdFx0XHRcdFx0XHQqbmdJZj1cInN0YXRpY0Zvcm0udGl0bGUgPT09ICcuLidcIlxyXG5cdFx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFx0SW52YWxpZCBGb2xkZXIgVGl0bGVcclxuXHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJsYWJlbC1zdHlsZVwiPlxyXG5cdFx0XHRcdFx0XHRcdHt7ICdGT0xERVJTLkRFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0PGlucHV0XHJcblx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJmaWVsZC1zdHlsZVwiXHJcblx0XHRcdFx0XHRcdFx0WyhuZ01vZGVsKV09XCJzdGF0aWNGb3JtLmRlc2NyaXB0aW9uXCJcclxuXHRcdFx0XHRcdFx0XHRpZD1cImZvbGRlckRlc2NyaXB0aW9uXCJcclxuXHRcdFx0XHRcdFx0XHRuYW1lPVwiZm9sZGVyRGVzY3JpcHRpb25cIlxyXG5cdFx0XHRcdFx0XHQvPlxyXG5cdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0PC9mb3JtPlxyXG5cclxuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwiZHluYW1pYy1wYXJ0IC1teC00XCIgKm5nSWY9XCJkeW5hbWljRm9ybSAmJiBzaG93UmVuZGVyZXJcIj5cclxuXHRcdFx0XHRcdDxhcHAtZHluYW1pYy1mb3JtXHJcblx0XHRcdFx0XHRcdFtmb3JtXT1cImR5bmFtaWNGb3JtXCJcclxuXHRcdFx0XHRcdFx0W2RhdGFdPVwidGVtcG9yYXJ5RHlhbm1pY0RhdGFcIlxyXG5cdFx0XHRcdFx0XHQoY2hhbmdlKT1cIm9uZHluYW1pY0Zvcm1DaGFuZ2UoJGV2ZW50KVwiXHJcblx0XHRcdFx0XHQ+PC9hcHAtZHluYW1pYy1mb3JtPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdFx0PCEtLSAgLS0+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L25nLXRlbXBsYXRlPlxyXG5cclxuXHQ8bmctdGVtcGxhdGUgI2FjdGlvbnNUZW1wbGF0ZSBsZXQtZGlhbG9nPVwiZGlhbG9nXCI+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIWNyZWF0aW5nXCI+XHJcblx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIHctNDRcIlxyXG5cdFx0XHRcdChjbGljayk9XCJkaWFsb2cuZXhlY3V0ZUFjdGlvbihjcmVhdGVEb2N1bWVudClcIlxyXG5cdFx0XHQ+XHJcblx0XHRcdFx0e3sgJ0JVVFRPTlMuQ1JFQVRFJyB8IHRyYW5zbGF0ZSB9fVxyXG5cdFx0XHQ8L2J1dHRvbj5cclxuXHRcdDwvbmctY29udGFpbmVyPlxyXG5cdDwvbmctdGVtcGxhdGU+XHJcbjwvbmRmLW51eGVvLWRpYWxvZz5cclxuIl19
@@ -1,17 +1,21 @@
1
1
  import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
2
  import { DxFormComponent } from 'devextreme-angular';
3
3
  import { of } from 'rxjs';
4
+ import { NdfNuxeoDialog } from '../../../../shared/components/nuxeo-dialog/nuxeo.dialog';
5
+ import { tap } from 'rxjs/operators';
6
+ import { BaseComponent } from '../../../../shared/components/base/base.component';
4
7
  import * as i0 from "@angular/core";
5
8
  import * as i1 from "../../../../shared-services/file-manager.service";
6
9
  import * as i2 from "../../../custom-toastr/services/custom-toastr.service";
7
- import * as i3 from "devextreme-angular";
8
- import * as i4 from "devextreme-angular/ui/nested";
9
- import * as i5 from "devextreme-angular/core";
10
- import * as i6 from "@ngx-translate/core";
11
- export class MoveComponent {
12
- constructor(fileManagerService, customToastrService) {
10
+ import * as i3 from "../../../../shared/components/nuxeo-dialog/services/nuxeo-dialog.service";
11
+ import * as i4 from "devextreme-angular";
12
+ import * as i5 from "@ngx-translate/core";
13
+ export class MoveComponent extends BaseComponent {
14
+ constructor(fileManagerService, customToastrService, nuxeoDialogService, injector) {
15
+ super(injector);
13
16
  this.fileManagerService = fileManagerService;
14
17
  this.customToastrService = customToastrService;
18
+ this.nuxeoDialogService = nuxeoDialogService;
15
19
  this.visibleChange = new EventEmitter();
16
20
  this.getSelectedFolder = new EventEmitter();
17
21
  this.rtlEnabled = false;
@@ -22,7 +26,7 @@ export class MoveComponent {
22
26
  let myparent = parent ? parent.key : this.rootFolder;
23
27
  let myobs;
24
28
  if (myparent === this.pageConfigurations.rootName) {
25
- // when it is root of file list then used passed root entries and for root of
29
+ // when it is root of file list then used passed root entries and for root of
26
30
  // my files or any other folder use getting childs for that folder with its id
27
31
  myobs = this.fileManagerService.parseNodeChildren(of(this.rootEntries), this.pageConfigurations, parent);
28
32
  }
@@ -34,18 +38,56 @@ export class MoveComponent {
34
38
  // let obs = this.fileManagerService.getTreeNodeChildren(myparent);
35
39
  // return this.fileManagerService.parseNodeChildren(obs, parent);
36
40
  };
41
+ this.move = (answer) => {
42
+ var _a, _b;
43
+ if (((_b = (_a = this.directory) === null || _a === void 0 ? void 0 : _a.dataItem) === null || _b === void 0 ? void 0 : _b.id) !== this.currentItem.id &&
44
+ !this.currentItem.entity.path.includes(this.selectedItem.name)) {
45
+ // this.currentPath = '';
46
+ return this.fileManagerService
47
+ .moveTo(this.currentItem, this.selectedItems)
48
+ .pipe(tap((res) => {
49
+ this.visible = answer;
50
+ this.getSelectedFolder.next(this.currentItem.id);
51
+ this.customToastrService.show('success', 'TOASTER.SUCCESS', 'TOASTER.DOCUMENT_MOVED');
52
+ }, (err) => {
53
+ this.visible = true;
54
+ this.customToastrService.show('error', 'TOASTER.ERROR', 'TOASTER.DOCUMENT_MOVED_ERROR');
55
+ }));
56
+ }
57
+ else
58
+ this.customToastrService.show('error', 'TOASTER.ERROR', 'TOASTER.FAILED_TO_MOVE');
59
+ return of(null);
60
+ };
37
61
  }
38
62
  set visible(value) {
39
63
  if (this._visible === value) {
40
64
  return;
41
65
  }
66
+ if (value) {
67
+ this.openDialog();
68
+ }
42
69
  this._visible = value;
43
70
  this.visibleChange.emit(this._visible);
44
71
  }
45
72
  get visible() {
46
73
  return this._visible;
47
74
  }
48
- ngOnInit() {
75
+ ngOnInit() { }
76
+ openDialog() {
77
+ const options = {
78
+ component: NdfNuxeoDialog,
79
+ config: {
80
+ title: this.translateService.instant('FILE_MANAGER.COPY_OR_MOVE'),
81
+ contentTemplate: this.contentTemplate,
82
+ actionsTemplate: this.actionsTemplate
83
+ }
84
+ };
85
+ this.nuxeoDialogService
86
+ .open(options)
87
+ .afterClosed()
88
+ .subscribe((res) => {
89
+ this.cancel();
90
+ });
49
91
  }
50
92
  cancel() {
51
93
  this.visible = false;
@@ -54,28 +96,9 @@ export class MoveComponent {
54
96
  this.disable = false;
55
97
  this.currentItem = e.itemData;
56
98
  }
57
- move(answer) {
58
- var _a, _b;
59
- if (((_b = (_a = this.directory) === null || _a === void 0 ? void 0 : _a.dataItem) === null || _b === void 0 ? void 0 : _b.id) !== this.currentItem.id &&
60
- !this.currentItem.entity.path.includes(this.selectedItem.name)) {
61
- // this.currentPath = '';
62
- this.fileManagerService
63
- .moveTo(this.currentItem, this.selectedItems)
64
- .subscribe((res) => {
65
- this.visible = answer;
66
- this.getSelectedFolder.next(this.currentItem.id);
67
- this.customToastrService.show('success', 'TOASTER.SUCCESS', 'TOASTER.DOCUMENT_MOVED');
68
- }, (err) => {
69
- this.visible = true;
70
- this.customToastrService.show('error', 'TOASTER.ERROR', 'TOASTER.DOCUMENT_MOVED_ERROR');
71
- });
72
- }
73
- else
74
- this.customToastrService.show('error', 'TOASTER.ERROR', 'TOASTER.FAILED_TO_MOVE');
75
- }
76
99
  }
77
- MoveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MoveComponent, deps: [{ token: i1.FileManagerService }, { token: i2.CustomToastrService }], target: i0.ɵɵFactoryTarget.Component });
78
- MoveComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MoveComponent, selector: "app-move", inputs: { visible: "visible", rtlEnabled: "rtlEnabled", selectedItem: "selectedItem", rootFolder: "rootFolder", rootEntries: "rootEntries", selectedItems: "selectedItems", directory: "directory", pageConfigurations: "pageConfigurations" }, outputs: { visibleChange: "visibleChange", getSelectedFolder: "getSelectedFolder" }, viewQueries: [{ propertyName: "form", first: true, predicate: DxFormComponent, descendants: true }], ngImport: i0, template: "<dx-popup class=\"popUpParent\" [rtlEnabled]=\"rtlEnabled\" id=\"photo-popup\" [width]=\"500\" [height]=\"500\"\r\n title=\"{{ 'FILE_MANAGER.COPY_OR_MOVE' | translate }}\" [(visible)]=\"visible\" [showTitle]=\"true\"\r\n [closeOnOutsideClick]=\"true\">\r\n <div class=\"p-4\" *dxTemplate=\"let data of 'content'\">\r\n <dx-scroll-view width=\"100%\" height=\"100%\">\r\n <div class=\"form\">\r\n <dx-tree-view [rtlEnabled]=\"rtlEnabled\" id=\"treeList\" [rootValue]=\"rootFolder\" keyExpr=\"id\"\r\n displayExpr=\"name\" hasItemsExpr=\"isExpanded\" dataStructure=\"plain\"\r\n [createChildren]=\"createTreeNodeChildren\" [width]=\"465\" (onItemClick)=\"selectItem($event)\">\r\n </dx-tree-view>\r\n </div>\r\n </dx-scroll-view>\r\n </div>\r\n <dxi-toolbar-item toolbar=\"bottom\" [disabled]=\"disable\">\r\n <button class=\"submission-button px-5\" (click)=\"move(false)\">\r\n {{ \"BUTTONS.MOVE\" | translate }}\r\n </button>\r\n </dxi-toolbar-item>\r\n <dxi-toolbar-item toolbar=\"bottom\">\r\n <button class=\"cancelation-button px-5\" (click)=\"cancel()\">\r\n {{ \"BUTTONS.CANCEL\" | translate }}\r\n </button>\r\n </dxi-toolbar-item>\r\n</dx-popup>", styles: [""], components: [{ type: i3.DxPopupComponent, selector: "dx-popup", inputs: ["accessKey", "animation", "closeOnOutsideClick", "container", "contentTemplate", "copyRootClassesToWrapper", "deferRendering", "disabled", "dragAndResizeArea", "dragEnabled", "dragOutsideBoundary", "elementAttr", "enableBodyScroll", "focusStateEnabled", "fullScreen", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "maxHeight", "maxWidth", "minHeight", "minWidth", "position", "resizeEnabled", "restorePosition", "rtlEnabled", "shading", "shadingColor", "showCloseButton", "showTitle", "tabIndex", "title", "titleTemplate", "toolbarItems", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onResize", "onResizeEnd", "onResizeStart", "onShowing", "onShown", "onTitleRendered", "accessKeyChange", "animationChange", "closeOnOutsideClickChange", "containerChange", "contentTemplateChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "disabledChange", "dragAndResizeAreaChange", "dragEnabledChange", "dragOutsideBoundaryChange", "elementAttrChange", "enableBodyScrollChange", "focusStateEnabledChange", "fullScreenChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "maxHeightChange", "maxWidthChange", "minHeightChange", "minWidthChange", "positionChange", "resizeEnabledChange", "restorePositionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showCloseButtonChange", "showTitleChange", "tabIndexChange", "titleChange", "titleTemplateChange", "toolbarItemsChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { type: i3.DxScrollViewComponent, selector: "dx-scroll-view", inputs: ["bounceEnabled", "direction", "disabled", "elementAttr", "height", "pulledDownText", "pullingDownText", "reachBottomText", "refreshingText", "rtlEnabled", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onPullDown", "onReachBottom", "onScroll", "onUpdated", "bounceEnabledChange", "directionChange", "disabledChange", "elementAttrChange", "heightChange", "pulledDownTextChange", "pullingDownTextChange", "reachBottomTextChange", "refreshingTextChange", "rtlEnabledChange", "scrollByContentChange", "scrollByThumbChange", "showScrollbarChange", "useNativeChange", "widthChange"] }, { type: i3.DxTreeViewComponent, selector: "dx-tree-view", inputs: ["accessKey", "activeStateEnabled", "animationEnabled", "collapseIcon", "createChildren", "dataSource", "dataStructure", "disabled", "disabledExpr", "displayExpr", "elementAttr", "expandAllEnabled", "expandedExpr", "expandEvent", "expandIcon", "expandNodesRecursive", "focusStateEnabled", "hasItemsExpr", "height", "hint", "hoverStateEnabled", "itemHoldTimeout", "items", "itemsExpr", "itemTemplate", "keyExpr", "noDataText", "parentIdExpr", "rootValue", "rtlEnabled", "scrollDirection", "searchEditorOptions", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "searchValue", "selectAllText", "selectByClick", "selectedExpr", "selectionMode", "selectNodesRecursive", "showCheckBoxesMode", "tabIndex", "useNativeScrolling", "virtualModeEnabled", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onItemClick", "onItemCollapsed", "onItemContextMenu", "onItemExpanded", "onItemHold", "onItemRendered", "onItemSelectionChanged", "onOptionChanged", "onSelectAllValueChanged", "onSelectionChanged", "accessKeyChange", "activeStateEnabledChange", "animationEnabledChange", "collapseIconChange", "createChildrenChange", "dataSourceChange", "dataStructureChange", "disabledChange", "disabledExprChange", "displayExprChange", "elementAttrChange", "expandAllEnabledChange", "expandedExprChange", "expandEventChange", "expandIconChange", "expandNodesRecursiveChange", "focusStateEnabledChange", "hasItemsExprChange", "heightChange", "hintChange", "hoverStateEnabledChange", "itemHoldTimeoutChange", "itemsChange", "itemsExprChange", "itemTemplateChange", "keyExprChange", "noDataTextChange", "parentIdExprChange", "rootValueChange", "rtlEnabledChange", "scrollDirectionChange", "searchEditorOptionsChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "searchValueChange", "selectAllTextChange", "selectByClickChange", "selectedExprChange", "selectionModeChange", "selectNodesRecursiveChange", "showCheckBoxesModeChange", "tabIndexChange", "useNativeScrollingChange", "virtualModeEnabledChange", "visibleChange", "widthChange"] }, { type: i4.DxiToolbarItemComponent, selector: "dxi-toolbar-item", inputs: ["cssClass", "disabled", "html", "locateInMenu", "location", "menuItemTemplate", "options", "showText", "template", "text", "toolbar", "visible", "widget"] }], directives: [{ type: i5.DxTemplateDirective, selector: "[dxTemplate]", inputs: ["dxTemplateOf"] }], pipes: { "translate": i6.TranslatePipe } });
100
+ MoveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MoveComponent, deps: [{ token: i1.FileManagerService }, { token: i2.CustomToastrService }, { token: i3.NuxeoDialogService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
101
+ MoveComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: MoveComponent, selector: "app-move", inputs: { visible: "visible", rtlEnabled: "rtlEnabled", selectedItem: "selectedItem", rootFolder: "rootFolder", rootEntries: "rootEntries", selectedItems: "selectedItems", directory: "directory", pageConfigurations: "pageConfigurations" }, outputs: { visibleChange: "visibleChange", getSelectedFolder: "getSelectedFolder" }, viewQueries: [{ propertyName: "form", first: true, predicate: DxFormComponent, descendants: true }, { propertyName: "contentTemplate", first: true, predicate: ["contentTemplate"], descendants: true }, { propertyName: "actionsTemplate", first: true, predicate: ["actionsTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<!-- <dx-popup class=\"popUpParent\" [rtlEnabled]=\"rtlEnabled\" id=\"photo-popup\" [width]=\"500\" [height]=\"500\"\r\n title=\"{{ 'FILE_MANAGER.COPY_OR_MOVE' | translate }}\" [(visible)]=\"visible\" [showTitle]=\"true\"\r\n [closeOnOutsideClick]=\"true\">\r\n <div class=\"p-4\" *dxTemplate=\"let data of 'content'\">\r\n <dx-scroll-view width=\"100%\" height=\"100%\">\r\n <div class=\"form\">\r\n <dx-tree-view [rtlEnabled]=\"rtlEnabled\" id=\"treeList\" [rootValue]=\"rootFolder\" keyExpr=\"id\"\r\n displayExpr=\"name\" hasItemsExpr=\"isExpanded\" dataStructure=\"plain\"\r\n [createChildren]=\"createTreeNodeChildren\" [width]=\"465\" (onItemClick)=\"selectItem($event)\">\r\n </dx-tree-view>\r\n </div>\r\n </dx-scroll-view>\r\n </div>\r\n <dxi-toolbar-item toolbar=\"bottom\" [disabled]=\"disable\">\r\n <button class=\"submission-button px-5\" (click)=\"move(false)\">\r\n {{ \"BUTTONS.MOVE\" | translate }}\r\n </button>\r\n </dxi-toolbar-item>\r\n <dxi-toolbar-item toolbar=\"bottom\">\r\n <button class=\"cancelation-button px-5\" (click)=\"cancel()\">\r\n {{ \"BUTTONS.CANCEL\" | translate }}\r\n </button>\r\n </dxi-toolbar-item>\r\n</dx-popup> -->\r\n\r\n<ng-template #contentTemplate>\r\n\t<div class=\"p-4\">\r\n\t\t<dx-scroll-view width=\"100%\" height=\"100%\">\r\n\t\t\t<div class=\"form\">\r\n\t\t\t\t<dx-tree-view\r\n\t\t\t\t\t[rtlEnabled]=\"rtlEnabled\"\r\n\t\t\t\t\tid=\"treeList\"\r\n\t\t\t\t\t[rootValue]=\"rootFolder\"\r\n\t\t\t\t\tkeyExpr=\"id\"\r\n\t\t\t\t\tdisplayExpr=\"name\"\r\n\t\t\t\t\thasItemsExpr=\"isExpanded\"\r\n\t\t\t\t\tdataStructure=\"plain\"\r\n\t\t\t\t\t[createChildren]=\"createTreeNodeChildren\"\r\n\t\t\t\t\t[width]=\"465\"\r\n\t\t\t\t\t(onItemClick)=\"selectItem($event)\"\r\n\t\t\t\t>\r\n\t\t\t\t</dx-tree-view>\r\n\t\t\t</div>\r\n\t\t</dx-scroll-view>\r\n\t</div>\r\n</ng-template>\r\n\r\n<ng-template #actionsTemplate let-dialog=\"dialog\">\r\n\t<button\r\n\t\t[disabled]=\"disable\"\r\n\t\tclass=\"submission-button px-5\"\r\n\t\t(click)=\"dialog.executeAction(move, [false])\"\r\n\t>\r\n\t\t{{ 'BUTTONS.MOVE' | translate }}\r\n\t</button>\r\n</ng-template>\r\n", styles: [""], components: [{ type: i4.DxScrollViewComponent, selector: "dx-scroll-view", inputs: ["bounceEnabled", "direction", "disabled", "elementAttr", "height", "pulledDownText", "pullingDownText", "reachBottomText", "refreshingText", "rtlEnabled", "scrollByContent", "scrollByThumb", "showScrollbar", "useNative", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onPullDown", "onReachBottom", "onScroll", "onUpdated", "bounceEnabledChange", "directionChange", "disabledChange", "elementAttrChange", "heightChange", "pulledDownTextChange", "pullingDownTextChange", "reachBottomTextChange", "refreshingTextChange", "rtlEnabledChange", "scrollByContentChange", "scrollByThumbChange", "showScrollbarChange", "useNativeChange", "widthChange"] }, { type: i4.DxTreeViewComponent, selector: "dx-tree-view", inputs: ["accessKey", "activeStateEnabled", "animationEnabled", "collapseIcon", "createChildren", "dataSource", "dataStructure", "disabled", "disabledExpr", "displayExpr", "elementAttr", "expandAllEnabled", "expandedExpr", "expandEvent", "expandIcon", "expandNodesRecursive", "focusStateEnabled", "hasItemsExpr", "height", "hint", "hoverStateEnabled", "itemHoldTimeout", "items", "itemsExpr", "itemTemplate", "keyExpr", "noDataText", "parentIdExpr", "rootValue", "rtlEnabled", "scrollDirection", "searchEditorOptions", "searchEnabled", "searchExpr", "searchMode", "searchTimeout", "searchValue", "selectAllText", "selectByClick", "selectedExpr", "selectionMode", "selectNodesRecursive", "showCheckBoxesMode", "tabIndex", "useNativeScrolling", "virtualModeEnabled", "visible", "width"], outputs: ["onContentReady", "onDisposing", "onInitialized", "onItemClick", "onItemCollapsed", "onItemContextMenu", "onItemExpanded", "onItemHold", "onItemRendered", "onItemSelectionChanged", "onOptionChanged", "onSelectAllValueChanged", "onSelectionChanged", "accessKeyChange", "activeStateEnabledChange", "animationEnabledChange", "collapseIconChange", "createChildrenChange", "dataSourceChange", "dataStructureChange", "disabledChange", "disabledExprChange", "displayExprChange", "elementAttrChange", "expandAllEnabledChange", "expandedExprChange", "expandEventChange", "expandIconChange", "expandNodesRecursiveChange", "focusStateEnabledChange", "hasItemsExprChange", "heightChange", "hintChange", "hoverStateEnabledChange", "itemHoldTimeoutChange", "itemsChange", "itemsExprChange", "itemTemplateChange", "keyExprChange", "noDataTextChange", "parentIdExprChange", "rootValueChange", "rtlEnabledChange", "scrollDirectionChange", "searchEditorOptionsChange", "searchEnabledChange", "searchExprChange", "searchModeChange", "searchTimeoutChange", "searchValueChange", "selectAllTextChange", "selectByClickChange", "selectedExprChange", "selectionModeChange", "selectNodesRecursiveChange", "showCheckBoxesModeChange", "tabIndexChange", "useNativeScrollingChange", "virtualModeEnabledChange", "visibleChange", "widthChange"] }], pipes: { "translate": i5.TranslatePipe } });
79
102
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MoveComponent, decorators: [{
80
103
  type: Component,
81
104
  args: [{
@@ -83,9 +106,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
83
106
  templateUrl: './move.component.html',
84
107
  styleUrls: ['./move.component.scss']
85
108
  }]
86
- }], ctorParameters: function () { return [{ type: i1.FileManagerService }, { type: i2.CustomToastrService }]; }, propDecorators: { form: [{
109
+ }], ctorParameters: function () { return [{ type: i1.FileManagerService }, { type: i2.CustomToastrService }, { type: i3.NuxeoDialogService }, { type: i0.Injector }]; }, propDecorators: { form: [{
87
110
  type: ViewChild,
88
111
  args: [DxFormComponent, { static: false }]
112
+ }], contentTemplate: [{
113
+ type: ViewChild,
114
+ args: ['contentTemplate']
115
+ }], actionsTemplate: [{
116
+ type: ViewChild,
117
+ args: ['actionsTemplate']
89
118
  }], visible: [{
90
119
  type: Input
91
120
  }], visibleChange: [{
@@ -107,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
107
136
  }], pageConfigurations: [{
108
137
  type: Input
109
138
  }] } });
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvbW92ZS9tb3ZlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9tb3ZlL21vdmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7QUFTMUIsTUFBTSxPQUFPLGFBQWE7SUFrQ3hCLFlBQ1Usa0JBQXNDLEVBQ3BDLG1CQUF3QztRQUQxQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3BDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUF0QnBELGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV4QyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRTVDLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFZbkIsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUNuQixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQW1CakIsMkJBQXNCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNsQyxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1B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QVMsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2lCQUNyQzsySUFFZ0QsSUFBSTtzQkFBbEQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUV6QyxPQUFPO3NCQURWLEtBQUs7Z0JBWU4sYUFBYTtzQkFEWixNQUFNO2dCQUdQLGlCQUFpQjtzQkFEaEIsTUFBTTtnQkFHUCxVQUFVO3NCQURULEtBQUs7Z0JBR04sWUFBWTtzQkFEWCxLQUFLO2dCQUdOLFVBQVU7c0JBRFQsS0FBSztnQkFHTixXQUFXO3NCQURWLEtBQUs7Z0JBR04sYUFBYTtzQkFEWixLQUFLO2dCQUdOLFNBQVM7c0JBRFIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeEZvcm1Db21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGaWxlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21Ub2FzdHJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY3VzdG9tLXRvYXN0ci9zZXJ2aWNlcy9jdXN0b20tdG9hc3RyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtbW92ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21vdmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21vdmUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW92ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZChEeEZvcm1Db21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KSBmb3JtOiBEeEZvcm1Db21wb25lbnQ7XHJcbiAgQElucHV0KClcclxuICBzZXQgdmlzaWJsZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5fdmlzaWJsZSA9PT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdmlzaWJsZSA9IHZhbHVlO1xyXG4gICAgdGhpcy52aXNpYmxlQ2hhbmdlLmVtaXQodGhpcy5fdmlzaWJsZSk7XHJcbiAgfVxyXG4gIGdldCB2aXNpYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGU7XHJcbiAgfVxyXG4gIEBPdXRwdXQoKVxyXG4gIHZpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KClcclxuICBnZXRTZWxlY3RlZEZvbGRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBJbnB1dCgpXHJcbiAgcnRsRW5hYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2VsZWN0ZWRJdGVtOiBhbnk7XHJcbiAgQElucHV0KClcclxuICByb290Rm9sZGVyOiBhbnk7XHJcbiAgQElucHV0KClcclxuICByb290RW50cmllczogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgc2VsZWN0ZWRJdGVtczogYW55O1xyXG4gIEBJbnB1dCgpXHJcbiAgZGlyZWN0b3J5OiBhbnk7XHJcbiAgQElucHV0KCkgcGFnZUNvbmZpZ3VyYXRpb25zO1xyXG4gIGZvcm1EYXRhOiBhbnkgPSB7fTtcclxuICBkaXNhYmxlID0gdHJ1ZTtcclxuICBfdmlzaWJsZSA9IGZhbHNlO1xyXG4gIGN1cnJlbnRJdGVtO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmaWxlTWFuYWdlclNlcnZpY2U6IEZpbGVNYW5hZ2VyU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBjdXN0b21Ub2FzdHJTZXJ2aWNlOiBDdXN0b21Ub2FzdHJTZXJ2aWNlXHJcblxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuICBzZWxlY3RJdGVtKGUpIHtcclxuICAgIHRoaXMuZGlzYWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jdXJyZW50SXRlbSA9IGUuaXRlbURhdGE7XHJcbiAgfVxyXG4gIGNyZWF0ZVRyZWVOb2RlQ2hpbGRyZW4gPSAocGFyZW50KSA9PiB7XHJcbiAgICBsZXQgbXlwYXJlbnQgPSBwYXJlbnQgPyBwYXJlbnQua2V5IDogdGhpcy5yb290Rm9sZGVyO1xyXG4gICAgbGV0IG15b2JzO1xyXG4gICAgaWYgKG15cGFyZW50ID09PSB0aGlzLnBhZ2VDb25maWd1cmF0aW9ucy5yb290TmFtZSkge1xyXG4gICAgICAvLyB3aGVuIGl0IGlzIHJvb3Qgb2YgZmlsZSBsaXN0IHRoZW4gdXNlZCBwYXNzZWQgcm9vdCBlbnRyaWVzIGFuZCBmb3Igcm9vdCBvZiBcclxuICAgICAgLy8gbXkgZmlsZXMgb3IgYW55IG90aGVyIGZvbGRlciB1c2UgZ2V0dGluZyBjaGlsZHMgZm9yIHRoYXQgZm9sZGVyIHdpdGggaXRzIGlkXHJcbiAgICAgIG15b2JzID0gdGhpcy5maWxlTWFuYWdlclNlcnZpY2UucGFyc2VOb2RlQ2hpbGRyZW4ob2YodGhpcy5yb290RW50cmllcykgLCB0aGlzLnBhZ2VDb25maWd1cmF0aW9ucywgcGFyZW50KTtcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBteW9icyA9IHRoaXMuZmlsZU1hbmFnZXJTZXJ2aWNlLmNyZWF0ZVRyZWVOb2RlQ2hpbGRyZW4obXlwYXJlbnQpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gbXlvYnM7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhwYXJlbnQpO1xyXG4gICAgLy8gbGV0IG9icyA9IHRoaXMuZmlsZU1hbmFnZXJTZXJ2aWNlLmdldFRyZWVOb2RlQ2hpbGRyZW4obXlwYXJlbnQpO1xyXG4gICAgLy8gcmV0dXJuIHRoaXMuZmlsZU1hbmFnZXJTZXJ2aWNlLnBhcnNlTm9kZUNoaWxkcmVuKG9icywgcGFyZW50KTtcclxuICB9XHJcblxyXG4gIG1vdmUoYW5zd2VyKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuZGlyZWN0b3J5Py5kYXRhSXRlbT8uaWQgIT09IHRoaXMuY3VycmVudEl0ZW0uaWQgJiZcclxuICAgICAgIXRoaXMuY3VycmVudEl0ZW0uZW50aXR5LnBhdGguaW5jbHVkZXModGhpcy5zZWxlY3RlZEl0ZW0ubmFtZSlcclxuICAgICkge1xyXG4gICAgICAvLyB0aGlzLmN1cnJlbnRQYXRoID0gJyc7XHJcbiAgICAgIHRoaXMuZmlsZU1hbmFnZXJTZXJ2aWNlXHJcbiAgICAgICAgLm1vdmVUbyh0aGlzLmN1cnJlbnRJdGVtLCB0aGlzLnNlbGVjdGVkSXRlbXMpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy52aXNpYmxlID0gYW5zd2VyO1xyXG4gICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkRm9sZGVyLm5leHQodGhpcy5jdXJyZW50SXRlbS5pZCk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tVG9hc3RyU2VydmljZS5zaG93KFxyXG4gICAgICAgICAgICAgICdzdWNjZXNzJyxcclxuICAgICAgICAgICAgICAnVE9BU1RFUi5TVUNDRVNTJyxcclxuICAgICAgICAgICAgICAnVE9BU1RFUi5ET0NVTUVOVF9NT1ZFRCdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tVG9hc3RyU2VydmljZS5zaG93KFxyXG4gICAgICAgICAgICAgICdlcnJvcicsXHJcbiAgICAgICAgICAgICAgJ1RPQVNURVIuRVJST1InLFxyXG4gICAgICAgICAgICAgICdUT0FTVEVSLkRPQ1VNRU5UX01PVkVEX0VSUk9SJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2VcclxuICAgICAgdGhpcy5jdXN0b21Ub2FzdHJTZXJ2aWNlLnNob3coXHJcbiAgICAgICAgJ2Vycm9yJyxcclxuICAgICAgICAnVE9BU1RFUi5FUlJPUicsXHJcbiAgICAgICAgJ1RPQVNURVIuRkFJTEVEX1RPX01PVkUnXHJcbiAgICAgICk7XHJcbiAgfVxyXG59XHJcbiIsIjxkeC1wb3B1cCBjbGFzcz1cInBvcFVwUGFyZW50XCIgW3J0bEVuYWJsZWRdPVwicnRsRW5hYmxlZFwiIGlkPVwicGhvdG8tcG9wdXBcIiBbd2lkdGhdPVwiNTAwXCIgW2hlaWdodF09XCI1MDBcIlxyXG4gICAgdGl0bGU9XCJ7eyAnRklMRV9NQU5BR0VSLkNPUFlfT1JfTU9WRScgfCB0cmFuc2xhdGUgfX1cIiBbKHZpc2libGUpXT1cInZpc2libGVcIiBbc2hvd1RpdGxlXT1cInRydWVcIlxyXG4gICAgW2Nsb3NlT25PdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInAtNFwiICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgJ2NvbnRlbnQnXCI+XHJcbiAgICAgICAgPGR4LXNjcm9sbC12aWV3IHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1cIj5cclxuICAgICAgICAgICAgICAgIDxkeC10cmVlLXZpZXcgW3J0bEVuYWJsZWRdPVwicnRsRW5hYmxlZFwiIGlkPVwidHJlZUxpc3RcIiBbcm9vdFZhbHVlXT1cInJvb3RGb2xkZXJcIiBrZXlFeHByPVwiaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlFeHByPVwibmFtZVwiIGhhc0l0ZW1zRXhwcj1cImlzRXhwYW5kZWRcIiBkYXRhU3RydWN0dXJlPVwicGxhaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjcmVhdGVDaGlsZHJlbl09XCJjcmVhdGVUcmVlTm9kZUNoaWxkcmVuXCIgW3dpZHRoXT1cIjQ2NVwiIChvbkl0ZW1DbGljayk9XCJzZWxlY3RJdGVtKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDwvZHgtdHJlZS12aWV3PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2R4LXNjcm9sbC12aWV3PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZHhpLXRvb2xiYXItaXRlbSB0b29sYmFyPVwiYm90dG9tXCIgW2Rpc2FibGVkXT1cImRpc2FibGVcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwic3VibWlzc2lvbi1idXR0b24gcHgtNVwiIChjbGljayk9XCJtb3ZlKGZhbHNlKVwiPlxyXG4gICAgICAgICAgICB7eyBcIkJVVFRPTlMuTU9WRVwiIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2R4aS10b29sYmFyLWl0ZW0+XHJcbiAgICA8ZHhpLXRvb2xiYXItaXRlbSB0b29sYmFyPVwiYm90dG9tXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbGF0aW9uLWJ1dHRvbiBweC01XCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XHJcbiAgICAgICAgICAgIHt7IFwiQlVUVE9OUy5DQU5DRUxcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9keGktdG9vbGJhci1pdGVtPlxyXG48L2R4LXBvcHVwPiJdfQ==
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9udXhlby1kZXZlbG9wbWVudC1mcmFtZXdvcmsvc3JjL2xpYi9jb21wb25lbnRzL2ZpbGUtbWFuZ2VyL2NvbXBvbmVudHMvbW92ZS9tb3ZlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL251eGVvLWRldmVsb3BtZW50LWZyYW1ld29yay9zcmMvbGliL2NvbXBvbmVudHMvZmlsZS1tYW5nZXIvY29tcG9uZW50cy9tb3ZlL21vdmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBRVosS0FBSyxFQUdMLE1BQU0sRUFHTixTQUFTLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBR3pGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbURBQW1ELENBQUM7Ozs7Ozs7QUFPbEYsTUFBTSxPQUFPLGFBQWMsU0FBUSxhQUFhO0lBdUMvQyxZQUNTLGtCQUFzQyxFQUNwQyxtQkFBd0MsRUFDM0Msa0JBQXNDLEVBQzdDLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUxSLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDcEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUMzQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBdkI5QyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7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aUI7Z0JBRXhCLE9BQU87c0JBRFYsS0FBSztnQkFlTixhQUFhO3NCQURaLE1BQU07Z0JBR1AsaUJBQWlCO3NCQURoQixNQUFNO2dCQUdQLFVBQVU7c0JBRFQsS0FBSztnQkFHTixZQUFZO3NCQURYLEtBQUs7Z0JBR04sVUFBVTtzQkFEVCxLQUFLO2dCQUdOLFdBQVc7c0JBRFYsS0FBSztnQkFHTixhQUFhO3NCQURaLEtBQUs7Z0JBR04sU0FBUztzQkFEUixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdEV2ZW50RW1pdHRlcixcclxuXHRJbmplY3RvcixcclxuXHRJbnB1dCxcclxuXHRPbkNoYW5nZXMsXHJcblx0T25Jbml0LFxyXG5cdE91dHB1dCxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG5cdFRlbXBsYXRlUmVmLFxyXG5cdFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeEZvcm1Db21wb25lbnQgfSBmcm9tICdkZXZleHRyZW1lLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGaWxlTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQtc2VydmljZXMvZmlsZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21Ub2FzdHJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY3VzdG9tLXRvYXN0ci9zZXJ2aWNlcy9jdXN0b20tdG9hc3RyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWFsb2dPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvbnV4ZW8tZGlhbG9nL21vZGVscy9kaWFsb2ctb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTmRmTnV4ZW9EaWFsb2cgfSBmcm9tICcuLi8uLi8uLi8uLi9zaGFyZWQvY29tcG9uZW50cy9udXhlby1kaWFsb2cvbnV4ZW8uZGlhbG9nJztcclxuaW1wb3J0IHsgTnV4ZW9EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvbnV4ZW8tZGlhbG9nL3NlcnZpY2VzL251eGVvLWRpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL251eGVvLWRpYWxvZy9tb2RlbHMvZGlhbG9nLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2Jhc2UvYmFzZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdhcHAtbW92ZScsXHJcblx0dGVtcGxhdGVVcmw6ICcuL21vdmUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL21vdmUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTW92ZUNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cdEBWaWV3Q2hpbGQoRHhGb3JtQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSkgZm9ybTogRHhGb3JtQ29tcG9uZW50O1xyXG5cdEBWaWV3Q2hpbGQoJ2NvbnRlbnRUZW1wbGF0ZScpIGNvbnRlbnRUZW1wbGF0ZSE6IFRlbXBsYXRlUmVmPGFueT47XHJcblx0QFZpZXdDaGlsZCgnYWN0aW9uc1RlbXBsYXRlJykgYWN0aW9uc1RlbXBsYXRlITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHRASW5wdXQoKVxyXG5cdHNldCB2aXNpYmxlKHZhbHVlOiBhbnkpIHtcclxuXHRcdGlmICh0aGlzLl92aXNpYmxlID09PSB2YWx1ZSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHRpZiAodmFsdWUpIHtcclxuXHRcdFx0dGhpcy5vcGVuRGlhbG9nKCk7XHJcblx0XHR9XHJcblx0XHR0aGlzLl92aXNpYmxlID0gdmFsdWU7XHJcblx0XHR0aGlzLnZpc2libGVDaGFuZ2UuZW1pdCh0aGlzLl92aXNpYmxlKTtcclxuXHR9XHJcblx0Z2V0IHZpc2libGUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fdmlzaWJsZTtcclxuXHR9XHJcblx0QE91dHB1dCgpXHJcblx0dmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cdEBPdXRwdXQoKVxyXG5cdGdldFNlbGVjdGVkRm9sZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblx0QElucHV0KClcclxuXHRydGxFbmFibGVkID0gZmFsc2U7XHJcblx0QElucHV0KClcclxuXHRzZWxlY3RlZEl0ZW06IGFueTtcclxuXHRASW5wdXQoKVxyXG5cdHJvb3RGb2xkZXI6IGFueTtcclxuXHRASW5wdXQoKVxyXG5cdHJvb3RFbnRyaWVzOiBhbnk7XHJcblx0QElucHV0KClcclxuXHRzZWxlY3RlZEl0ZW1zOiBhbnk7XHJcblx0QElucHV0KClcclxuXHRkaXJlY3Rvcnk6IGFueTtcclxuXHRASW5wdXQoKSBwYWdlQ29uZmlndXJhdGlvbnM7XHJcblx0Zm9ybURhdGE6IGFueSA9IHt9O1xyXG5cdGRpc2FibGUgPSB0cnVlO1xyXG5cdF92aXNpYmxlID0gZmFsc2U7XHJcblx0Y3VycmVudEl0ZW07XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIGZpbGVNYW5hZ2VyU2VydmljZTogRmlsZU1hbmFnZXJTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIGN1c3RvbVRvYXN0clNlcnZpY2U6IEN1c3RvbVRvYXN0clNlcnZpY2UsXHJcblx0XHRwdWJsaWMgbnV4ZW9EaWFsb2dTZXJ2aWNlOiBOdXhlb0RpYWxvZ1NlcnZpY2UsXHJcblx0XHRpbmplY3RvcjogSW5qZWN0b3JcclxuXHQpIHtcclxuXHRcdHN1cGVyKGluamVjdG9yKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge31cclxuXHJcblx0b3BlbkRpYWxvZygpOiB2b2lkIHtcclxuXHRcdGNvbnN0IG9wdGlvbnM6IERpYWxvZ09wdGlvbnMgPSB7XHJcblx0XHRcdGNvbXBvbmVudDogTmRmTnV4ZW9EaWFsb2csXHJcblx0XHRcdGNvbmZpZzoge1xyXG5cdFx0XHRcdHRpdGxlOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnRklMRV9NQU5BR0VSLkNPUFlfT1JfTU9WRScpLFxyXG5cdFx0XHRcdGNvbnRlbnRUZW1wbGF0ZTogdGhpcy5jb250ZW50VGVtcGxhdGUsXHJcblx0XHRcdFx0YWN0aW9uc1RlbXBsYXRlOiB0aGlzLmFjdGlvbnNUZW1wbGF0ZVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cdFx0dGhpcy5udXhlb0RpYWxvZ1NlcnZpY2VcclxuXHRcdFx0Lm9wZW4ob3B0aW9ucylcclxuXHRcdFx0LmFmdGVyQ2xvc2VkKClcclxuXHRcdFx0LnN1YnNjcmliZSgocmVzKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5jYW5jZWwoKTtcclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cdGNhbmNlbCgpIHtcclxuXHRcdHRoaXMudmlzaWJsZSA9IGZhbHNlO1xyXG5cdH1cclxuXHRzZWxlY3RJdGVtKGUpIHtcclxuXHRcdHRoaXMuZGlzYWJsZSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5jdXJyZW50SXRlbSA9IGUuaXRlbURhdGE7XHJcblx0fVxyXG5cdGNyZWF0ZVRyZWVOb2RlQ2hpbGRyZW4gPSAocGFyZW50KSA9PiB7XHJcblx0XHRsZXQgbXlwYXJlbnQgPSBwYXJlbnQgPyBwYXJlbnQua2V5IDogdGhpcy5yb290Rm9sZGVyO1xyXG5cdFx0bGV0IG15b2JzO1xyXG5cdFx0aWYgKG15cGFyZW50ID09PSB0aGlzLnBhZ2VDb25maWd1cmF0aW9ucy5yb290TmFtZSkge1xyXG5cdFx0XHQvLyB3aGVuIGl0IGlzIHJvb3Qgb2YgZmlsZSBsaXN0IHRoZW4gdXNlZCBwYXNzZWQgcm9vdCBlbnRyaWVzIGFuZCBmb3Igcm9vdCBvZlxyXG5cdFx0XHQvLyBteSBmaWxlcyBvciBhbnkgb3RoZXIgZm9sZGVyIHVzZSBnZXR0aW5nIGNoaWxkcyBmb3IgdGhhdCBmb2xkZXIgd2l0aCBpdHMgaWRcclxuXHRcdFx0bXlvYnMgPSB0aGlzLmZpbGVNYW5hZ2VyU2VydmljZS5wYXJzZU5vZGVDaGlsZHJlbihcclxuXHRcdFx0XHRvZih0aGlzLnJvb3RFbnRyaWVzKSxcclxuXHRcdFx0XHR0aGlzLnBhZ2VDb25maWd1cmF0aW9ucyxcclxuXHRcdFx0XHRwYXJlbnRcclxuXHRcdFx0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG15b2JzID0gdGhpcy5maWxlTWFuYWdlclNlcnZpY2UuY3JlYXRlVHJlZU5vZGVDaGlsZHJlbihteXBhcmVudCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbXlvYnM7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhwYXJlbnQpO1xyXG5cdFx0Ly8gbGV0IG9icyA9IHRoaXMuZmlsZU1hbmFnZXJTZXJ2aWNlLmdldFRyZWVOb2RlQ2hpbGRyZW4obXlwYXJlbnQpO1xyXG5cdFx0Ly8gcmV0dXJuIHRoaXMuZmlsZU1hbmFnZXJTZXJ2aWNlLnBhcnNlTm9kZUNoaWxkcmVuKG9icywgcGFyZW50KTtcclxuXHR9O1xyXG5cclxuXHRtb3ZlOiBEaWFsb2dBY3Rpb25UeXBlID0gKGFuc3dlcikgPT4ge1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLmRpcmVjdG9yeT8uZGF0YUl0ZW0/LmlkICE9PSB0aGlzLmN1cnJlbnRJdGVtLmlkICYmXHJcblx0XHRcdCF0aGlzLmN1cnJlbnRJdGVtLmVudGl0eS5wYXRoLmluY2x1ZGVzKHRoaXMuc2VsZWN0ZWRJdGVtLm5hbWUpXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8gdGhpcy5jdXJyZW50UGF0aCA9ICcnO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5maWxlTWFuYWdlclNlcnZpY2VcclxuXHRcdFx0XHQubW92ZVRvKHRoaXMuY3VycmVudEl0ZW0sIHRoaXMuc2VsZWN0ZWRJdGVtcylcclxuXHRcdFx0XHQucGlwZShcclxuXHRcdFx0XHRcdHRhcChcclxuXHRcdFx0XHRcdFx0KHJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMudmlzaWJsZSA9IGFuc3dlcjtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldFNlbGVjdGVkRm9sZGVyLm5leHQodGhpcy5jdXJyZW50SXRlbS5pZCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jdXN0b21Ub2FzdHJTZXJ2aWNlLnNob3coXHJcblx0XHRcdFx0XHRcdFx0XHQnc3VjY2VzcycsXHJcblx0XHRcdFx0XHRcdFx0XHQnVE9BU1RFUi5TVUNDRVNTJyxcclxuXHRcdFx0XHRcdFx0XHRcdCdUT0FTVEVSLkRPQ1VNRU5UX01PVkVEJ1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdChlcnIpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnZpc2libGUgPSB0cnVlO1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuY3VzdG9tVG9hc3RyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdFx0XHRcdFx0J2Vycm9yJyxcclxuXHRcdFx0XHRcdFx0XHRcdCdUT0FTVEVSLkVSUk9SJyxcclxuXHRcdFx0XHRcdFx0XHRcdCdUT0FTVEVSLkRPQ1VNRU5UX01PVkVEX0VSUk9SJ1xyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdClcclxuXHRcdFx0XHQpO1xyXG5cdFx0fSBlbHNlXHJcblx0XHRcdHRoaXMuY3VzdG9tVG9hc3RyU2VydmljZS5zaG93KFxyXG5cdFx0XHRcdCdlcnJvcicsXHJcblx0XHRcdFx0J1RPQVNURVIuRVJST1InLFxyXG5cdFx0XHRcdCdUT0FTVEVSLkZBSUxFRF9UT19NT1ZFJ1xyXG5cdFx0XHQpO1xyXG5cdFx0cmV0dXJuIG9mKG51bGwpO1xyXG5cdH07XHJcbn1cclxuIiwiPCEtLSA8ZHgtcG9wdXAgY2xhc3M9XCJwb3BVcFBhcmVudFwiIFtydGxFbmFibGVkXT1cInJ0bEVuYWJsZWRcIiBpZD1cInBob3RvLXBvcHVwXCIgW3dpZHRoXT1cIjUwMFwiIFtoZWlnaHRdPVwiNTAwXCJcclxuICAgIHRpdGxlPVwie3sgJ0ZJTEVfTUFOQUdFUi5DT1BZX09SX01PVkUnIHwgdHJhbnNsYXRlIH19XCIgWyh2aXNpYmxlKV09XCJ2aXNpYmxlXCIgW3Nob3dUaXRsZV09XCJ0cnVlXCJcclxuICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwLTRcIiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICdjb250ZW50J1wiPlxyXG4gICAgICAgIDxkeC1zY3JvbGwtdmlldyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZHgtdHJlZS12aWV3IFtydGxFbmFibGVkXT1cInJ0bEVuYWJsZWRcIiBpZD1cInRyZWVMaXN0XCIgW3Jvb3RWYWx1ZV09XCJyb290Rm9sZGVyXCIga2V5RXhwcj1cImlkXCJcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5RXhwcj1cIm5hbWVcIiBoYXNJdGVtc0V4cHI9XCJpc0V4cGFuZGVkXCIgZGF0YVN0cnVjdHVyZT1cInBsYWluXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3JlYXRlQ2hpbGRyZW5dPVwiY3JlYXRlVHJlZU5vZGVDaGlsZHJlblwiIFt3aWR0aF09XCI0NjVcIiAob25JdGVtQ2xpY2spPVwic2VsZWN0SXRlbSgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2R4LXRyZWUtdmlldz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9keC1zY3JvbGwtdmlldz5cclxuICAgIDwvZGl2PlxyXG4gICAgPGR4aS10b29sYmFyLWl0ZW0gdG9vbGJhcj1cImJvdHRvbVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInN1Ym1pc3Npb24tYnV0dG9uIHB4LTVcIiAoY2xpY2spPVwibW92ZShmYWxzZSlcIj5cclxuICAgICAgICAgICAge3sgXCJCVVRUT05TLk1PVkVcIiB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9keGktdG9vbGJhci1pdGVtPlxyXG4gICAgPGR4aS10b29sYmFyLWl0ZW0gdG9vbGJhcj1cImJvdHRvbVwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWxhdGlvbi1idXR0b24gcHgtNVwiIChjbGljayk9XCJjYW5jZWwoKVwiPlxyXG4gICAgICAgICAgICB7eyBcIkJVVFRPTlMuQ0FOQ0VMXCIgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZHhpLXRvb2xiYXItaXRlbT5cclxuPC9keC1wb3B1cD4gLS0+XHJcblxyXG48bmctdGVtcGxhdGUgI2NvbnRlbnRUZW1wbGF0ZT5cclxuXHQ8ZGl2IGNsYXNzPVwicC00XCI+XHJcblx0XHQ8ZHgtc2Nyb2xsLXZpZXcgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMTAwJVwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZm9ybVwiPlxyXG5cdFx0XHRcdDxkeC10cmVlLXZpZXdcclxuXHRcdFx0XHRcdFtydGxFbmFibGVkXT1cInJ0bEVuYWJsZWRcIlxyXG5cdFx0XHRcdFx0aWQ9XCJ0cmVlTGlzdFwiXHJcblx0XHRcdFx0XHRbcm9vdFZhbHVlXT1cInJvb3RGb2xkZXJcIlxyXG5cdFx0XHRcdFx0a2V5RXhwcj1cImlkXCJcclxuXHRcdFx0XHRcdGRpc3BsYXlFeHByPVwibmFtZVwiXHJcblx0XHRcdFx0XHRoYXNJdGVtc0V4cHI9XCJpc0V4cGFuZGVkXCJcclxuXHRcdFx0XHRcdGRhdGFTdHJ1Y3R1cmU9XCJwbGFpblwiXHJcblx0XHRcdFx0XHRbY3JlYXRlQ2hpbGRyZW5dPVwiY3JlYXRlVHJlZU5vZGVDaGlsZHJlblwiXHJcblx0XHRcdFx0XHRbd2lkdGhdPVwiNDY1XCJcclxuXHRcdFx0XHRcdChvbkl0ZW1DbGljayk9XCJzZWxlY3RJdGVtKCRldmVudClcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHQ8L2R4LXRyZWUtdmlldz5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L2R4LXNjcm9sbC12aWV3PlxyXG5cdDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhY3Rpb25zVGVtcGxhdGUgbGV0LWRpYWxvZz1cImRpYWxvZ1wiPlxyXG5cdDxidXR0b25cclxuXHRcdFtkaXNhYmxlZF09XCJkaXNhYmxlXCJcclxuXHRcdGNsYXNzPVwic3VibWlzc2lvbi1idXR0b24gcHgtNVwiXHJcblx0XHQoY2xpY2spPVwiZGlhbG9nLmV4ZWN1dGVBY3Rpb24obW92ZSwgW2ZhbHNlXSlcIlxyXG5cdD5cclxuXHRcdHt7ICdCVVRUT05TLk1PVkUnIHwgdHJhbnNsYXRlIH19XHJcblx0PC9idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==